@ibiz-template/vue3-components 0.2.8 → 0.2.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. package/dist/index.min.css +1 -1
  2. package/dist/index.system.min.js +5 -5
  3. package/dist/index.system.min.js.map +1 -1
  4. package/dist/map-chart-7nfIdU3w.js +2 -0
  5. package/dist/map-chart-7nfIdU3w.js.map +1 -0
  6. package/es/common/data-import/data-import.css +1 -0
  7. package/es/common/data-import/data-import.d.ts +34 -0
  8. package/es/common/data-import/data-import.mjs +147 -0
  9. package/es/common/index.d.ts +1 -0
  10. package/es/common/index.mjs +2 -0
  11. package/es/common/map-chart/map-chart.d.ts +15 -14
  12. package/es/common/map-chart/map-chart.mjs +20 -10
  13. package/es/common/map-chart/map-chart.util.d.ts +11 -1
  14. package/es/common/map-chart/map-chart.util.mjs +12 -2
  15. package/es/common/map-chart/map-manager.d.ts +1 -1
  16. package/es/common/map-chart/map-manager.mjs +6 -6
  17. package/es/control/form/form-detail/form-button/form-button.css +1 -1
  18. package/es/control/form/form-detail/form-button/form-button.mjs +1 -1
  19. package/es/control/form/form-detail/form-mdctrl/form-mdctrl-container/form-mdctrl-container.css +1 -1
  20. package/es/control/form/form-detail/form-mdctrl/form-mdctrl-container/form-mdctrl-container.mjs +3 -3
  21. package/es/control/form/form-detail/form-mdctrl/form-mdctrl-data-view/form-mdctrl-data-view.mjs +1 -1
  22. package/es/control/form/form-detail/form-mdctrl/form-mdctrl-form/form-mdctrl-form.mjs +1 -1
  23. package/es/control/form/form-detail/form-mdctrl/form-mdctrl-grid/form-mdctrl-grid.mjs +1 -1
  24. package/es/control/form/form-detail/form-mdctrl/form-mdctrl-list/form-mdctrl-list.mjs +1 -1
  25. package/es/control/form/form-detail/form-mdctrl/form-mdctrl-repeater/form-mdctrl-repeater-form/form-mdctrl-repeater-form-shell.mjs +1 -1
  26. package/es/control/form/form-detail/form-mdctrl/form-mdctrl-repeater/form-mdctrl-repeater-grid/form-mdctrl-repeater-grid.mjs +1 -1
  27. package/es/control/map/map.d.ts +15 -0
  28. package/es/control/map/map.mjs +10 -3
  29. package/es/control/toolbar/export-excel/export-excel.mjs +54 -52
  30. package/es/control/toolbar/toolbar.css +1 -1
  31. package/es/control/toolbar/toolbar.mjs +1 -1
  32. package/es/editor/autocomplete/autocomplete-editor.controller.mjs +7 -4
  33. package/es/editor/data-picker/picker-editor.controller.mjs +12 -10
  34. package/es/editor/list-box/list-box-picker-editor.controller.mjs +3 -2
  35. package/es/index.mjs +1 -1
  36. package/es/panel-component/multi-data-container/multi-data-container-item.controller.d.ts +5 -2
  37. package/es/panel-component/multi-data-container/multi-data-container-item.controller.mjs +27 -2
  38. package/es/panel-component/multi-data-container/multi-data-container.controller.d.ts +2 -0
  39. package/es/panel-component/multi-data-container/multi-data-container.controller.mjs +20 -4
  40. package/es/panel-component/panel-button/panel-button.css +1 -1
  41. package/es/panel-component/panel-button/panel-button.mjs +1 -1
  42. package/es/panel-component/panel-field/panel-field.controller.mjs +3 -8
  43. package/es/panel-component/single-data-container/single-data-container.controller.d.ts +9 -0
  44. package/es/panel-component/single-data-container/single-data-container.controller.mjs +38 -4
  45. package/es/view-engine/login-view.engine.d.ts +2 -0
  46. package/es/view-engine/login-view.engine.mjs +19 -0
  47. package/lib/common/data-import/data-import.cjs +149 -0
  48. package/lib/common/data-import/data-import.css +1 -0
  49. package/lib/common/index.cjs +2 -0
  50. package/lib/common/map-chart/map-chart.cjs +19 -9
  51. package/lib/common/map-chart/map-chart.util.cjs +12 -2
  52. package/lib/common/map-chart/map-manager.cjs +6 -6
  53. package/lib/control/form/form-detail/form-button/form-button.cjs +1 -1
  54. package/lib/control/form/form-detail/form-button/form-button.css +1 -1
  55. package/lib/control/form/form-detail/form-mdctrl/form-mdctrl-container/form-mdctrl-container.cjs +2 -2
  56. package/lib/control/form/form-detail/form-mdctrl/form-mdctrl-container/form-mdctrl-container.css +1 -1
  57. package/lib/control/form/form-detail/form-mdctrl/form-mdctrl-data-view/form-mdctrl-data-view.cjs +1 -1
  58. package/lib/control/form/form-detail/form-mdctrl/form-mdctrl-form/form-mdctrl-form.cjs +1 -1
  59. package/lib/control/form/form-detail/form-mdctrl/form-mdctrl-grid/form-mdctrl-grid.cjs +1 -1
  60. package/lib/control/form/form-detail/form-mdctrl/form-mdctrl-list/form-mdctrl-list.cjs +1 -1
  61. package/lib/control/form/form-detail/form-mdctrl/form-mdctrl-repeater/form-mdctrl-repeater-form/form-mdctrl-repeater-form-shell.cjs +1 -1
  62. package/lib/control/form/form-detail/form-mdctrl/form-mdctrl-repeater/form-mdctrl-repeater-grid/form-mdctrl-repeater-grid.cjs +1 -1
  63. package/lib/control/map/map.cjs +9 -2
  64. package/lib/control/toolbar/export-excel/export-excel.cjs +54 -52
  65. package/lib/control/toolbar/toolbar.cjs +1 -1
  66. package/lib/control/toolbar/toolbar.css +1 -1
  67. package/lib/editor/autocomplete/autocomplete-editor.controller.cjs +7 -4
  68. package/lib/editor/data-picker/picker-editor.controller.cjs +11 -9
  69. package/lib/editor/list-box/list-box-picker-editor.controller.cjs +3 -2
  70. package/lib/index.cjs +1 -1
  71. package/lib/panel-component/multi-data-container/multi-data-container-item.controller.cjs +26 -1
  72. package/lib/panel-component/multi-data-container/multi-data-container.controller.cjs +19 -3
  73. package/lib/panel-component/panel-button/panel-button.cjs +1 -1
  74. package/lib/panel-component/panel-button/panel-button.css +1 -1
  75. package/lib/panel-component/panel-field/panel-field.controller.cjs +3 -8
  76. package/lib/panel-component/single-data-container/single-data-container.controller.cjs +37 -3
  77. package/lib/view-engine/login-view.engine.cjs +19 -0
  78. package/package.json +4 -4
  79. package/dist/map-chart-yT41jdRg.js +0 -2
  80. package/dist/map-chart-yT41jdRg.js.map +0 -1
@@ -2,6 +2,7 @@
2
2
 
3
3
  var core = require('@ibiz-template/core');
4
4
  var runtime = require('@ibiz-template/runtime');
5
+ var ramda = require('ramda');
5
6
 
6
7
  "use strict";
7
8
  var __defProp = Object.defineProperty;
@@ -48,14 +49,14 @@ class ListBoxPickerEditorController extends runtime.EditorController {
48
49
  this.context,
49
50
  this.params
50
51
  );
51
- Object.assign(params, { size: 1e3 });
52
+ const tempParams = ramda.mergeDeepLeft(params, { size: 1e3 });
52
53
  if (this.interfaceName) {
53
54
  const app = ibiz.hub.getApp(this.context.srfappid);
54
55
  const res = await app.deService.exec(
55
56
  this.model.appDataEntityId,
56
57
  this.interfaceName,
57
58
  context,
58
- params
59
+ tempParams
59
60
  );
60
61
  return res;
61
62
  }
package/lib/index.cjs CHANGED
@@ -221,7 +221,7 @@ var index$1f = require('./util/store/index.cjs');
221
221
  var index = {
222
222
  install: (v) => {
223
223
  ibiz.i18n = index$2.iBizI18n;
224
- ibiz.util.getExportExcel = () => Promise.resolve().then(function () { return require('./util/xlsx-util/xlsx-util.cjs'); });
224
+ ibiz.util.getExcelUtil = () => Promise.resolve().then(function () { return require('./util/xlsx-util/xlsx-util.cjs'); });
225
225
  v.use(index$3.IBizCommonComponents);
226
226
  v.use(index$W.IBizPanelComponents);
227
227
  v.use(index$1b.IBizView);
@@ -34,6 +34,13 @@ class MultiDataContainerItemController {
34
34
  */
35
35
  __publicField(this, "panelItems", {});
36
36
  this.state.data = data;
37
+ const fields = runtime.getAllPanelField(this.model);
38
+ const fieldKeys = fields.map((item) => item.id);
39
+ data._evt.on("change", (key) => {
40
+ if (fieldKeys.includes(key)) {
41
+ this.childDataChangeNotify([key]);
42
+ }
43
+ });
37
44
  }
38
45
  get data() {
39
46
  return this.state.data;
@@ -88,13 +95,31 @@ class MultiDataContainerItemController {
88
95
  );
89
96
  }
90
97
  async dataChangeNotify(_names) {
91
- throw new Error("Method not implemented.");
98
+ }
99
+ async childDataChangeNotify(names) {
100
+ Object.values(this.panelItems).forEach((panelItem) => {
101
+ panelItem.dataChangeNotify(names);
102
+ });
92
103
  }
93
104
  async panelStateNotify(state) {
94
105
  Object.values(this.panelItems).forEach((panelItem) => {
95
106
  panelItem.panelStateNotify(state);
96
107
  });
97
108
  }
109
+ async setDataValue(name, value) {
110
+ if (Object.prototype.hasOwnProperty.call(this.state.data, name) && this.state.data[name] === value) {
111
+ return;
112
+ }
113
+ this.state.data[name] = value;
114
+ this.childDataChangeNotify([name]);
115
+ }
116
+ destroy() {
117
+ var _a, _b;
118
+ (_b = (_a = this.data).destroy) == null ? void 0 : _b.call(_a);
119
+ Object.values(this.panelItems).forEach((item) => {
120
+ item.destroy();
121
+ });
122
+ }
98
123
  }
99
124
 
100
125
  exports.MultiDataContainerItemController = MultiDataContainerItemController;
@@ -139,7 +139,9 @@ class MultiDataContainerController extends runtime.PanelItemController {
139
139
  * @param {IData[]} items
140
140
  */
141
141
  async setData(items) {
142
- this.dataItems = items.map((item) => {
142
+ const fields = runtime.getAllPanelField(this.model);
143
+ const _items = items.map((item) => new runtime.PanelData(fields, item));
144
+ this.dataItems = _items.map((item) => {
143
145
  return new multiDataContainerItem_controller.MultiDataContainerItemController(
144
146
  this.model,
145
147
  this.panel,
@@ -154,7 +156,7 @@ class MultiDataContainerController extends runtime.PanelItemController {
154
156
  })
155
157
  );
156
158
  }
157
- this.state.items = items;
159
+ this.state.items = _items;
158
160
  this.childrenStateNotify(runtime.PanelNotifyState.LOAD);
159
161
  }
160
162
  /**
@@ -240,13 +242,27 @@ class MultiDataContainerController extends runtime.PanelItemController {
240
242
  return;
241
243
  }
242
244
  const updateData = () => {
243
- this.setData(view.state[dataName]);
245
+ const originData = view.state[dataName];
246
+ if (originData) {
247
+ this.setData(originData);
248
+ } else {
249
+ ibiz.log.error(`\u89C6\u56FEstate\u91CC\u6CA1\u6709${dataName}\u5C5E\u6027`);
250
+ }
244
251
  };
245
252
  updateData();
246
253
  view.evt.on("onDataChange", () => {
247
254
  updateData();
248
255
  });
249
256
  }
257
+ setDataValue(_name, _value) {
258
+ throw new Error("Method not implemented.");
259
+ }
260
+ destroy() {
261
+ super.destroy();
262
+ this.dataItems.forEach((item) => {
263
+ item.destroy();
264
+ });
265
+ }
250
266
  }
251
267
 
252
268
  exports.MultiDataContainerController = MultiDataContainerController;
@@ -90,7 +90,7 @@ const PanelButton = /* @__PURE__ */ vue.defineComponent({
90
90
  render() {
91
91
  if (this.state.visible) {
92
92
  return vue.createVNode("div", {
93
- "class": [this.ns.b(), this.ns.m(this.codeName), ...this.controller.containerClass]
93
+ "class": [this.ns.b(), this.ns.m(this.codeName), this.ns.is("loading", this.state.loading), ...this.controller.containerClass]
94
94
  }, [vue.createVNode(vue.resolveComponent("el-button"), {
95
95
  "type": this.buttonType,
96
96
  "text": this.isText,
@@ -1 +1 @@
1
- .ibiz-panel-button{--ibiz-panel-button-icon-margin:0 var(--ibiz-spacing-extra-tight) 0 0;--ibiz-panel-button-icon-max-width:var(--ibiz-width-icon-medium);--ibiz-panel-button-icon-max-height:var(--ibiz-width-icon-medium);padding:var(--ibiz-spacing-tight);overflow:hidden}.ibiz-panel-button .el-button{width:100%}.ibiz-panel-button .el-button i,.ibiz-panel-button .el-button img{display:inline-block;max-width:var(--ibiz-panel-button-icon-max-width);max-height:var(--ibiz-panel-button-icon-max-height);margin:var(--ibiz-panel-button-icon-margin)}
1
+ .ibiz-panel-button{--ibiz-panel-button-icon-margin:var(--ibiz-spacing-extra-tight);--ibiz-panel-button-icon-max-width:var(--ibiz-width-icon-medium);--ibiz-panel-button-icon-max-height:var(--ibiz-width-icon-medium);padding:var(--ibiz-spacing-tight);overflow:hidden}.ibiz-panel-button .el-button{width:100%}.ibiz-panel-button .el-button .ibiz-panel-button-content{display:flex;align-items:center;justify-content:flex-start}.ibiz-panel-button .el-button .ibiz-panel-button-content i,.ibiz-panel-button .el-button .ibiz-panel-button-content img{display:inline-block;max-width:var(--ibiz-panel-button-icon-max-width);max-height:var(--ibiz-panel-button-icon-max-height)}.ibiz-panel-button .el-button .ibiz-panel-button-content .ibiz-icon+.ibiz-panel-button-content--caption{margin-left:var(--ibiz-panel-button-icon-margin)}.ibiz-panel-button.is-loading .el-button .ibiz-icon{display:none}
@@ -1,6 +1,5 @@
1
1
  'use strict';
2
2
 
3
- var core = require('@ibiz-template/core');
4
3
  var runtime = require('@ibiz-template/runtime');
5
4
  var panelField_state = require('./panel-field.state.cjs');
6
5
 
@@ -67,11 +66,7 @@ class PanelFieldController extends runtime.PanelItemController {
67
66
  * @readonly
68
67
  */
69
68
  get value() {
70
- const { viewFieldName } = this.model;
71
- if (!viewFieldName) {
72
- throw new core.RuntimeModelError(this.model, "\u6CA1\u6709\u7ED1\u5B9A\u6570\u636E\u9879");
73
- }
74
- return this.data[viewFieldName.toLowerCase()];
69
+ return this.data[this.model.id];
75
70
  }
76
71
  createState() {
77
72
  var _a;
@@ -107,8 +102,8 @@ class PanelFieldController extends runtime.PanelItemController {
107
102
  * @param {string} name 要设置的面板数据的属性名称
108
103
  */
109
104
  async setDataValue(value, name) {
110
- const { viewFieldName } = this.model;
111
- name = name || viewFieldName;
105
+ const { id } = this.model;
106
+ name = name || id;
112
107
  if (this.dataParent.setDataValue) {
113
108
  await this.dataParent.setDataValue(name, value);
114
109
  }
@@ -148,7 +148,17 @@ class SingleDataContainerController extends runtime.PanelItemController {
148
148
  * @param {IData[]} items
149
149
  */
150
150
  async setData(data) {
151
- this.state.data = data;
151
+ var _a, _b;
152
+ const fields = runtime.getAllPanelField(this.model);
153
+ const fieldKeys = fields.map((item) => item.id);
154
+ const panelData = new runtime.PanelData(fields, data);
155
+ panelData._evt.on("change", (key) => {
156
+ if (fieldKeys.includes(key)) {
157
+ this.childDataChangeNotify([key]);
158
+ }
159
+ });
160
+ (_b = (_a = this.data).destroy) == null ? void 0 : _b.call(_a);
161
+ this.state.data = panelData;
152
162
  this.childrenStateNotify(runtime.PanelNotifyState.LOAD);
153
163
  }
154
164
  /**
@@ -234,13 +244,30 @@ class SingleDataContainerController extends runtime.PanelItemController {
234
244
  return;
235
245
  }
236
246
  const updateData = () => {
237
- this.setData(view.state[dataName]);
247
+ const originData = view.state[dataName];
248
+ if (originData) {
249
+ this.setData(originData);
250
+ } else {
251
+ ibiz.log.error(`\u89C6\u56FEstate\u91CC\u6CA1\u6709${dataName}\u5C5E\u6027`);
252
+ }
238
253
  };
239
254
  updateData();
240
255
  view.evt.on("onDataChange", () => {
241
256
  updateData();
242
257
  });
243
258
  }
259
+ /**
260
+ * 通知所有子面板成员面板操作过程中的数据变更
261
+ *
262
+ * @author lxm
263
+ * @date 2022-09-20 18:09:40
264
+ * @param {string[]} names
265
+ */
266
+ childDataChangeNotify(names) {
267
+ Object.values(this.panelItems).forEach((panelItem) => {
268
+ panelItem.dataChangeNotify(names);
269
+ });
270
+ }
244
271
  /**
245
272
  * 设置面板数据的值
246
273
  *
@@ -252,7 +279,14 @@ class SingleDataContainerController extends runtime.PanelItemController {
252
279
  return;
253
280
  }
254
281
  this.state.data[name] = value;
255
- this.dataChangeNotify([name]);
282
+ }
283
+ destroy() {
284
+ var _a, _b;
285
+ super.destroy();
286
+ (_b = (_a = this.data).destroy) == null ? void 0 : _b.call(_a);
287
+ Object.values(this.panelItems).forEach((item) => {
288
+ item.destroy();
289
+ });
256
290
  }
257
291
  }
258
292
 
@@ -14,6 +14,20 @@ class LoginViewEngine extends runtime.ViewEngineBase {
14
14
  constructor() {
15
15
  super(...arguments);
16
16
  __publicField(this, "route", vueRouter.useRoute());
17
+ __publicField(this, "enterKeyListener", async (event) => {
18
+ if (event.key === "Enter" && this.AppLoginView.layoutPanel) {
19
+ const args = {
20
+ data: [
21
+ {
22
+ isRemember: this.AppLoginView.layoutPanel.data.isRemember,
23
+ username: this.AppLoginView.layoutPanel.data.username,
24
+ password: this.AppLoginView.layoutPanel.data.password
25
+ }
26
+ ]
27
+ };
28
+ await this.login(args);
29
+ }
30
+ });
17
31
  }
18
32
  get AppLoginView() {
19
33
  return this.view.getController("AppLoginView");
@@ -33,6 +47,11 @@ class LoginViewEngine extends runtime.ViewEngineBase {
33
47
  );
34
48
  }
35
49
  }
50
+ document.addEventListener("keydown", this.enterKeyListener);
51
+ }
52
+ async onDestroyed() {
53
+ super.onDestroyed();
54
+ document.removeEventListener("keydown", this.enterKeyListener);
36
55
  }
37
56
  async call(key, args = {}) {
38
57
  if (key === runtime.SysUIActionTag.LOGIN) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ibiz-template/vue3-components",
3
- "version": "0.2.8",
3
+ "version": "0.2.10",
4
4
  "description": "使用 rollup 编译 vue 组件或者 jsx",
5
5
  "main": "lib/index.cjs",
6
6
  "module": "es/index.mjs",
@@ -26,10 +26,10 @@
26
26
  "@floating-ui/dom": "^1.5.3",
27
27
  "@ibiz-template-plugin/ai-chat": "^0.0.1",
28
28
  "@ibiz-template/core": "^0.2.6",
29
- "@ibiz-template/model-helper": "^0.2.8",
30
- "@ibiz-template/runtime": "^0.2.8",
29
+ "@ibiz-template/model-helper": "^0.2.10",
30
+ "@ibiz-template/runtime": "^0.2.10",
31
31
  "@ibiz-template/theme": "^0.2.0",
32
- "@ibiz-template/vue3-util": "^0.2.8",
32
+ "@ibiz-template/vue3-util": "^0.2.10",
33
33
  "@ibiz/model-core": "^0.0.20",
34
34
  "@imengyu/vue3-context-menu": "^1.3.3",
35
35
  "@monaco-editor/loader": "^1.4.0",
@@ -1,2 +0,0 @@
1
- System.register(["vue","ramda","@ibiz-template/vue3-util","echarts"],function(O){"use strict";var y,x,k,S,N,z,v,w,I,T,B,R;return{setters:[function(o){y=o.ref,x=o.onMounted,k=o.defineComponent,S=o.computed,N=o.toRefs,z=o.watch,v=o.createVNode,w=o.createTextVNode},function(o){I=o.mergeDeepRight},function(o){T=o.useNamespace},function(o){B=o.init,R=o.registerMap}],execute:function(){const j={strMapCode:!1,visualMap:{text:["\u9AD8","\u4F4E"],min:0,max:100,rangeColor:["#90d1e7","#fff600","#ff5200"]},pointSymbol:"pin",jsonBaseUrl:"/assets/json/map/jiangsu"};async function $(n,u){return(await ibiz.net.axios({url:`${n}/${u}.json`})).data}function A(n,u,h){const d=new Map,r=y(""),f=y([]);let i;const b=y(),D=e=>{const t={cityNames:{},noChild:e.features.length===1};return e.features.forEach(s=>{const{adcode:p,name:C}=s.properties;t.cityNames[p]=C}),t},M=async e=>{if(d.has(e))return;const t=await $(n.value.jsonBaseUrl,e);d.set(e,D(t)),R(e,t)},_=e=>{const t=d.get(r.value);if(t)return t.cityNames[e]},m=()=>{if(r.value){const e=u(r.value);i.setOption(e),i.resize()}},g=async(e,t=!1)=>{t||h("mapChange",{areaCode:n.value.strMapCode?`${e}`:Number(e)}),d.has(e)||await M(e),r.value=e,f.value.push(e),m()},c=()=>{if(f.value.length>1){f.value.pop();const e=f.value.pop();g(e)}};return x(()=>{i=B(b.value),window.addEventListener("resize",()=>{i?.resize()}),i.on("click",e=>{if(e.componentType==="series"){if(e.seriesType==="scatter"){h("pointClick",e.data);return}if(e.seriesType==="map"&&(e.data&&h("areaClick",e.data),e.name!==r.value)){debugger;g(e.name)}}}),i.on("mouseover",function(e){if(e.componentType==="series"&&e.seriesType==="scatter"){const t=e.dataIndex,s=i.getOption(),p=s.series[e.seriesIndex].data,C=s.series[e.seriesIndex].symbolSize;p[t].symbolSize=C+10,i.setOption(s)}}),i.on("mouseout",function(e){if(e.componentType==="series"&&e.seriesType==="scatter"){const t=e.dataIndex,s=i.getOption(),p=s.series[e.seriesIndex].data;delete p[t].symbolSize,i.setOption(s)}})}),{chartRef:b,historyNames:f,currentName:r,changeMap:g,getCityName:_,goBack:c,refresh:m}}const F=k({name:"IBizMapChart",props:{areaData:{type:Array},pointData:{type:Array},options:{type:Object,default:()=>({})},defaultAreaCode:{type:String,required:!0,default:"320000"}},setup(n,{emit:u}){const h=T("map-chart"),d=S(()=>I(j,n.options)),r=(c,e)=>{if(e==="area"&&n.areaData)return n.areaData.find(t=>t._id===c);if(e==="point"&&n.pointData)return n.pointData.find(t=>t._id===c)},{chartRef:f,historyNames:i,changeMap:b,getCityName:D,goBack:M,refresh:_}=A(d,c=>{const{visualMap:e,pointSymbol:t}=d.value,s=n.areaData||[],p=n.pointData||[];return{geo:{map:c},tooltip:{trigger:"item",textStyle:{color:"#fff",fontSize:12},backgroundColor:"rgba(0, 0, 0, 0.47)",borderWidth:0,extraCssText:"backdrop-filter: blur(3px);"},visualMap:{min:e.min,max:e.max,text:e.text,realtime:!1,hoverLink:!1,inRange:{color:e.rangeColor}},series:[{type:"map",map:c,nameProperty:"adcodeStr",itemStyle:{borderColor:"#FFF",borderWidth:2},tooltip:{formatter:a=>{if(!a.data)return;const l=r(a.data._id,"area");if(l)return l._tooltip}},label:{show:!0,color:"#000000",fontSize:14,formatter:a=>D(a.name)},select:{disabled:!0},data:s.map(a=>({name:`${a._areaCode}`,value:a._value,_id:a._id}))},{type:"scatter",coordinateSystem:"geo",symbol:t,symbolSize:20,visualMap:!1,itemStyle:{color:"#FF1D00"},label:{show:!0,color:"#000000",fontSize:14,textShadowBlur:0,formatter:a=>{const l=r(a.data._id,"point");return l?._text},position:"left",offset:[10,-15]},tooltip:{formatter:a=>{const l=r(a.data._id,"point");return l?._tooltip}},data:p.map(a=>({_id:a._id,symbol:a._symbol?`image://${a._symbol}`:void 0,value:[Number(a._longitude),Number(a._latitude)],visualMap:!1}))}]}},(c,e)=>{switch(c){case"mapChange":u("mapChange",e);break;case"pointClick":u("pointClick",{data:r(e._id,"point")});break;case"areaClick":u("areaClick",{data:r(e._id,"area")});break}});x(()=>{b(n.defaultAreaCode,!0)});const{areaData:m,pointData:g}=N(n);return z([m,g],()=>{_()}),{ns:h,chartRef:f,historyNames:i,goBack:M}},render(){return v("div",{class:this.ns.b()},[v("div",{class:this.ns.e("chart"),ref:"chartRef"},null),this.historyNames.length>1&&v("div",{class:this.ns.e("goback"),onClick:()=>{this.goBack()}},[w("\u8FD4\u56DE")])])}});O({IBizMapChart:F,default:F})}}});
2
- //# sourceMappingURL=map-chart-yT41jdRg.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"map-chart-yT41jdRg.js","sources":["../src/common/map-chart/map-chart.util.ts","../src/common/map-chart/map-json.ts","../src/common/map-chart/map-manager.ts","../src/common/map-chart/map-chart.tsx"],"sourcesContent":["/** 渐变颜色集合 */\nexport const GradientColors = ['#90d1e7', '#fff600', '#ff5200'];\n\nexport const defaultOpts = {\n /** true地图code标识使用字符串,false使用数字 */\n strMapCode: false,\n /** 热力图配置 */\n visualMap: {\n /** 两端的文本,如 ['高', '低'] */\n text: ['高', '低'],\n /** 底部代表的值 */\n min: 0,\n /** 顶部代表的值 */\n max: 100,\n /** 热力图渐变颜色数组 */\n rangeColor: GradientColors,\n },\n pointSymbol: 'pin',\n jsonBaseUrl: '/assets/json/map/jiangsu',\n};\n\nexport type MapOptions = typeof defaultOpts;\n","export async function getJsonUrl(\n baseUrl: string,\n code: string | number,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n): Promise<any> {\n const res = await ibiz.net.axios({\n url: `${baseUrl}/${code}.json`,\n });\n return res.data;\n}\n","/* eslint-disable no-unused-vars */\nimport { registerMap as register, EChartsType, init } from 'echarts';\nimport { ComputedRef, onMounted, ref } from 'vue';\nimport { MapOptions } from './map-chart.util';\nimport { getJsonUrl } from './map-json';\n\n/**\n * 使用echarts地图\n * @author lxm\n * @date 2023-04-06 12:00:07\n * @export\n * @param {(name: string) => IData} calcEchartsOpts 计算echarts的Options\n * @param {(name: string, e: IData) => void} emit 事件回调\n * @return {*}\n */\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport function useMapManager(\n opts: ComputedRef<MapOptions>,\n calcEchartsOpts: (name: string) => IData,\n emit: (name: string, e: IData) => void,\n) {\n const mapInfos = new Map<string, IData>();\n\n const currentName = ref('');\n\n const historyNames = ref<string[]>([]);\n\n let chart: EChartsType;\n const chartRef = ref();\n\n const parseJson = (json: IData) => {\n const info: IData = {\n cityNames: {},\n noChild: json.features.length === 1,\n };\n json.features.forEach((item: IData) => {\n const { adcode, name } = item.properties;\n info.cityNames[adcode] = name;\n });\n return info;\n };\n\n const registerMap = async (name: string) => {\n if (mapInfos.has(name)) {\n return;\n }\n const json = await getJsonUrl(opts.value.jsonBaseUrl, name);\n mapInfos.set(name, parseJson(json));\n register(name, json);\n };\n\n const getCityName = (mapName: string | number) => {\n const info = mapInfos.get(currentName.value);\n if (info) {\n return info.cityNames[mapName];\n }\n };\n\n const refresh = () => {\n if (currentName.value) {\n const options = calcEchartsOpts(currentName.value);\n chart.setOption(options);\n chart.resize();\n }\n };\n\n const changeMap = async (name: string, isInit: boolean = false) => {\n if (!isInit) {\n emit('mapChange', {\n areaCode: opts.value.strMapCode ? `${name}` : Number(name),\n });\n }\n\n if (!mapInfos.has(name)) {\n await registerMap(name);\n }\n currentName.value = name;\n historyNames.value.push(name);\n refresh();\n };\n\n const goBack = () => {\n // 一个时只有当前的name,不能后退。\n if (historyNames.value.length > 1) {\n historyNames.value.pop(); // 先删除当前地图的name\n const name = historyNames.value.pop(); // 获取上一个地图的name\n changeMap(name!);\n }\n };\n\n onMounted(() => {\n chart = init(chartRef.value);\n\n window.addEventListener('resize', () => {\n chart?.resize();\n });\n\n chart.on('click', params => {\n // 散点点击事件\n if (params.componentType === 'series') {\n if (params.seriesType === 'scatter') {\n emit('pointClick', params.data as IData);\n return;\n }\n if (params.seriesType === 'map') {\n if (params.data) {\n emit('areaClick', params.data as IData);\n }\n // 禁止切换同一个地图,到最下级的时候会出现这种情况\n if (params.name !== currentName.value) {\n debugger;\n changeMap(params.name);\n }\n }\n }\n });\n\n // 散点悬浮size变大\n chart.on('mouseover', function (params) {\n if (params.componentType === 'series') {\n if (params.seriesType === 'scatter') {\n const dataIndex = params.dataIndex;\n const option: IData = chart.getOption();\n const seriesData = option.series[params.seriesIndex!].data;\n const originSize = option.series[params.seriesIndex!].symbolSize;\n // 修改悬浮的数据点大小\n seriesData[dataIndex].symbolSize = originSize + 10;\n\n // 刷新图表\n chart.setOption(option);\n }\n }\n });\n chart.on('mouseout', function (params) {\n if (params.componentType === 'series') {\n if (params.seriesType === 'scatter') {\n const dataIndex = params.dataIndex;\n const option: IData = chart.getOption();\n const seriesData = option.series[params.seriesIndex!].data;\n\n // 恢复原始的数据点大小\n delete seriesData[dataIndex].symbolSize;\n\n // 刷新图表\n chart.setOption(option);\n }\n }\n });\n });\n\n return {\n chartRef,\n historyNames,\n currentName,\n changeMap,\n getCityName,\n goBack,\n refresh,\n };\n}\n","/* eslint-disable eqeqeq */\nimport {\n defineComponent,\n onMounted,\n PropType,\n computed,\n toRefs,\n watch,\n} from 'vue';\nimport { mergeDeepRight } from 'ramda';\nimport { useNamespace } from '@ibiz-template/vue3-util';\nimport { IMapData } from '@ibiz-template/runtime';\nimport { defaultOpts, MapOptions } from './map-chart.util';\nimport { useMapManager } from './map-manager';\nimport './map-chart.scss';\n\nexport const IBizMapChart = defineComponent({\n name: 'IBizMapChart',\n props: {\n areaData: {\n type: Array<IMapData>,\n },\n pointData: {\n type: Array<IMapData>,\n },\n options: {\n type: Object as PropType<Partial<MapOptions>>,\n default: () => ({}),\n },\n defaultAreaCode: { type: String, required: true, default: '320000' },\n },\n setup(props, { emit }) {\n const ns = useNamespace('map-chart');\n const options = computed(() => mergeDeepRight(defaultOpts, props.options));\n\n const findData = (id: string, type: 'area' | 'point') => {\n if (type === 'area' && props.areaData) {\n return props.areaData.find(item => item._id === id);\n }\n if (type === 'point' && props.pointData) {\n return props.pointData.find(item => item._id === id);\n }\n };\n\n const { chartRef, historyNames, changeMap, getCityName, goBack, refresh } =\n useMapManager(\n options,\n mapName => {\n const { visualMap, pointSymbol } = options.value;\n const areaData = props.areaData || [];\n const pointData = props.pointData || [];\n\n const result: IData = {\n geo: {\n map: mapName,\n },\n tooltip: {\n trigger: 'item',\n // 全局的tooltip样式\n textStyle: {\n color: '#fff',\n fontSize: 12,\n },\n backgroundColor: 'rgba(0, 0, 0, 0.47)',\n borderWidth: 0,\n extraCssText: 'backdrop-filter: blur(3px);',\n },\n visualMap: {\n min: visualMap.min,\n max: visualMap.max,\n text: visualMap.text,\n realtime: false,\n hoverLink: false,\n inRange: {\n color: visualMap.rangeColor,\n },\n },\n series: [\n // 地图区块序列\n {\n type: 'map',\n map: mapName,\n // 地图JSON里和name匹配的属性名称\n nameProperty: 'adcodeStr',\n itemStyle: {\n borderColor: '#FFF',\n borderWidth: 2,\n },\n tooltip: {\n formatter: (params: IData) => {\n if (!params.data) {\n // 没有数据的时候不显示tooltip\n return;\n }\n const find = findData(params.data._id, 'area')!;\n if (!find) {\n return;\n }\n return find._tooltip;\n },\n },\n label: {\n // 区块文字固定显示\n show: true,\n // 字体样式\n color: '#000000',\n fontSize: 14,\n formatter: (params: IData) => {\n return getCityName(params.name);\n },\n },\n select: {\n disabled: true,\n },\n data: areaData.map(item => ({\n name: `${item._areaCode}`,\n value: item._value,\n _id: item._id,\n })),\n },\n // 地图散点序列\n {\n type: 'scatter',\n coordinateSystem: 'geo',\n symbol: pointSymbol,\n symbolSize: 20,\n visualMap: false,\n itemStyle: {\n color: '#FF1D00',\n },\n label: {\n show: true,\n // 字体样式\n color: '#000000',\n fontSize: 14,\n textShadowBlur: 0,\n formatter: (params: IData) => {\n const find = findData(params.data._id, 'point')!;\n return find?._text;\n },\n // 偏移\n position: 'left',\n offset: [10, -15],\n },\n tooltip: {\n formatter: (params: IData) => {\n const find = findData(params.data._id, 'point')!;\n return find?._tooltip;\n },\n },\n data: pointData.map(item => {\n return {\n _id: item._id,\n symbol: item._symbol\n ? `image://${item._symbol}`\n : undefined,\n value: [Number(item._longitude), Number(item._latitude)],\n // 每个点逃离visualMap\n visualMap: false,\n };\n }),\n },\n ],\n };\n return result;\n },\n (name, e) => {\n switch (name) {\n case 'mapChange':\n emit('mapChange', e);\n break;\n case 'pointClick':\n emit('pointClick', { data: findData(e._id, 'point') });\n break;\n case 'areaClick':\n emit('areaClick', { data: findData(e._id, 'area') });\n break;\n default:\n break;\n }\n },\n );\n\n onMounted(() => {\n changeMap(props.defaultAreaCode, true);\n });\n\n const { areaData, pointData } = toRefs(props);\n watch([areaData, pointData], () => {\n refresh();\n });\n\n return { ns, chartRef, historyNames, goBack };\n },\n render() {\n return (\n <div class={this.ns.b()}>\n <div class={this.ns.e('chart')} ref='chartRef'></div>\n {this.historyNames.length > 1 && (\n <div\n class={this.ns.e('goback')}\n onClick={() => {\n this.goBack();\n }}\n >\n 返回\n </div>\n )}\n </div>\n );\n },\n});\n\nexport default IBizMapChart;\n"],"names":["defaultOpts","getJsonUrl","baseUrl","code","useMapManager","opts","calcEchartsOpts","emit","mapInfos","currentName","ref","historyNames","chart","chartRef","parseJson","json","info","item","adcode","name","registerMap","register","getCityName","mapName","refresh","options","changeMap","isInit","goBack","onMounted","init","params","dataIndex","option","seriesData","originSize","IBizMapChart","defineComponent","props","areaData","type","Array","pointData","Object","default","defaultAreaCode","String","required","setup","ns","useNamespace","computed","mergeDeepRight","findData","id","find","visualMap","pointSymbol","value","geo","map","tooltip","trigger","textStyle","color","fontSize","backgroundColor","borderWidth","extraCssText","min","max","text","realtime","hoverLink","inRange","rangeColor","series","nameProperty","itemStyle","borderColor","data","select","disabled","areaData2","_areaCode","_value","coordinateSystem","symbol","symbolSize","label","textShadowBlur","position","offset","pointData2","_id","_symbol","e","toRefs","watch","render","_createVNode","b","length","onClick","_createTextVNode","exports"],"mappings":"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"}