@ibiz-template/vue3-components 0.7.41-alpha.122 → 0.7.41-alpha.124

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 (97) hide show
  1. package/dist/chart-D8ak71ob.js +1 -0
  2. package/dist/index-BApiCD3N.js +339 -0
  3. package/dist/{index.es-i_3v13Rd.js → index.es-16xILT5D.js} +1 -1
  4. package/dist/index.min.css +1 -1
  5. package/dist/index.system.min.js +1 -1
  6. package/dist/{wang-editor-CgYOgqC_.js → wang-editor-BjVpWCI4.js} +1 -1
  7. package/dist/{xlsx-util-B2yu2RZe.js → xlsx-util-BJgXbQ94.js} +1 -1
  8. package/es/common/data-import/data-import.mjs +1 -1
  9. package/es/control/chart/chart.mjs +30 -20
  10. package/es/control/data-view/data-view.mjs +27 -12
  11. package/es/control/data-view/data-view.util.mjs +43 -0
  12. package/es/control/form/form-detail/form-mdctrl/form-mdctrl-repeater/repeater-grid/repeater-grid.mjs +2 -1
  13. package/es/control/form/form-detail/form-mdctrl/form-mdctrl-repeater/repeater-grid2/repeater-grid2.mjs +2 -1
  14. package/es/control/grid/grid/grid-control.util.mjs +8 -7
  15. package/es/control/grid/grid/grid.mjs +32 -30
  16. package/es/control/list/list.mjs +10 -2
  17. package/es/control/tree/tree.mjs +12 -3
  18. package/es/control/tree-grid/tree-grid.mjs +33 -29
  19. package/es/control/tree-grid-ex/tree-grid-ex.mjs +32 -27
  20. package/es/editor/autocomplete/autocomplete-editor.controller.mjs +1 -2
  21. package/es/editor/data-picker/picker-editor.controller.mjs +1 -2
  22. package/es/editor/list-box/list-box-picker-editor.controller.mjs +2 -5
  23. package/es/editor/map-picker/map-picker-editor.controller.mjs +1 -1
  24. package/es/editor/text-box/input/input.mjs +1 -1
  25. package/es/panel-component/auth-userinfo/auth-userinfo.mjs +1 -1
  26. package/es/panel-component/global-search/global-search.controller.mjs +1 -4
  27. package/es/panel-component/user-action/user-action.mjs +3 -3
  28. package/es/panel-component/user-message/user-message.mjs +1 -1
  29. package/es/util/ai-chat-util/ai-chat-util.mjs +11 -0
  30. package/es/view/403-view/403-view.mjs +1 -1
  31. package/es/view/404-view/404-view.mjs +1 -1
  32. package/es/view/login-view/login-view.mjs +2 -3
  33. package/es/view/share-view/share-view.mjs +1 -1
  34. package/es/view/unauthorized-view/unauthorized-view.mjs +1 -1
  35. package/es/web-app/guard/auth-guard/auth-guard.mjs +3 -1
  36. package/es/web-app/guard/auth-guard/dyna-auth-guard.mjs +7 -1
  37. package/lib/common/data-import/data-import.cjs +1 -1
  38. package/lib/control/chart/chart.cjs +29 -19
  39. package/lib/control/data-view/data-view.cjs +25 -10
  40. package/lib/control/data-view/data-view.util.cjs +45 -0
  41. package/lib/control/form/form-detail/form-mdctrl/form-mdctrl-repeater/repeater-grid/repeater-grid.cjs +2 -1
  42. package/lib/control/form/form-detail/form-mdctrl/form-mdctrl-repeater/repeater-grid2/repeater-grid2.cjs +2 -1
  43. package/lib/control/grid/grid/grid-control.util.cjs +8 -7
  44. package/lib/control/grid/grid/grid.cjs +32 -30
  45. package/lib/control/list/list.cjs +8 -0
  46. package/lib/control/tree/tree.cjs +11 -2
  47. package/lib/control/tree-grid/tree-grid.cjs +32 -28
  48. package/lib/control/tree-grid-ex/tree-grid-ex.cjs +31 -26
  49. package/lib/editor/autocomplete/autocomplete-editor.controller.cjs +1 -2
  50. package/lib/editor/data-picker/picker-editor.controller.cjs +1 -2
  51. package/lib/editor/list-box/list-box-picker-editor.controller.cjs +2 -5
  52. package/lib/editor/map-picker/map-picker-editor.controller.cjs +1 -1
  53. package/lib/editor/text-box/input/input.cjs +1 -1
  54. package/lib/panel-component/auth-userinfo/auth-userinfo.cjs +1 -1
  55. package/lib/panel-component/global-search/global-search.controller.cjs +1 -4
  56. package/lib/panel-component/user-action/user-action.cjs +3 -3
  57. package/lib/panel-component/user-message/user-message.cjs +1 -1
  58. package/lib/util/ai-chat-util/ai-chat-util.cjs +11 -0
  59. package/lib/view/403-view/403-view.cjs +1 -1
  60. package/lib/view/404-view/404-view.cjs +1 -1
  61. package/lib/view/login-view/login-view.cjs +2 -3
  62. package/lib/view/share-view/share-view.cjs +1 -1
  63. package/lib/view/unauthorized-view/unauthorized-view.cjs +1 -1
  64. package/lib/web-app/guard/auth-guard/auth-guard.cjs +3 -1
  65. package/lib/web-app/guard/auth-guard/dyna-auth-guard.cjs +7 -1
  66. package/package.json +5 -5
  67. package/src/common/data-import/data-import.tsx +1 -1
  68. package/src/control/chart/chart.tsx +42 -36
  69. package/src/control/data-view/data-view.tsx +32 -15
  70. package/src/control/data-view/data-view.util.ts +68 -0
  71. package/src/control/form/form-detail/form-mdctrl/form-mdctrl-repeater/repeater-grid/repeater-grid.tsx +3 -1
  72. package/src/control/form/form-detail/form-mdctrl/form-mdctrl-repeater/repeater-grid2/repeater-grid2.tsx +3 -0
  73. package/src/control/grid/grid/grid-control.util.ts +12 -11
  74. package/src/control/grid/grid/grid.tsx +46 -35
  75. package/src/control/list/list.tsx +20 -1
  76. package/src/control/tree/tree.tsx +18 -4
  77. package/src/control/tree-grid/tree-grid.tsx +46 -33
  78. package/src/control/tree-grid-ex/tree-grid-ex.tsx +45 -25
  79. package/src/editor/autocomplete/autocomplete-editor.controller.ts +1 -2
  80. package/src/editor/data-picker/picker-editor.controller.ts +1 -2
  81. package/src/editor/list-box/list-box-picker-editor.controller.ts +2 -6
  82. package/src/editor/map-picker/map-picker-editor.controller.ts +1 -1
  83. package/src/editor/text-box/input/input.tsx +1 -1
  84. package/src/panel-component/auth-userinfo/auth-userinfo.tsx +1 -1
  85. package/src/panel-component/global-search/global-search.controller.ts +1 -5
  86. package/src/panel-component/user-action/user-action.tsx +3 -3
  87. package/src/panel-component/user-message/user-message.tsx +1 -1
  88. package/src/util/ai-chat-util/ai-chat-util.ts +17 -0
  89. package/src/view/403-view/403-view.tsx +1 -1
  90. package/src/view/404-view/404-view.tsx +1 -4
  91. package/src/view/login-view/login-view.tsx +3 -3
  92. package/src/view/share-view/share-view.tsx +1 -1
  93. package/src/view/unauthorized-view/unauthorized-view.tsx +1 -4
  94. package/src/web-app/guard/auth-guard/auth-guard.ts +3 -4
  95. package/src/web-app/guard/auth-guard/dyna-auth-guard.ts +18 -1
  96. package/dist/chart-De-66DWN.js +0 -1
  97. package/dist/index-BXO4Omap.js +0 -339
@@ -112,6 +112,32 @@ const TreeGridControl = /* @__PURE__ */ vue.defineComponent({
112
112
  semanticClass,
113
113
  semanticStyle
114
114
  } = vue3Util.useSemanticNode(c);
115
+ const childClass = [{
116
+ class: semanticClass("body.row"),
117
+ selector: ".el-table__row"
118
+ }, {
119
+ class: semanticClass("header.row"),
120
+ selector: ".el-table__header tr"
121
+ }, {
122
+ class: semanticClass("body.cell"),
123
+ selector: ".el-table__body .el-table__cell"
124
+ }, {
125
+ class: semanticClass("header.cell"),
126
+ selector: ".el-table__header .el-table__cell"
127
+ }];
128
+ const childStyle = [{
129
+ class: semanticStyle("body.row"),
130
+ selector: ".el-table__row"
131
+ }, {
132
+ class: semanticStyle("header.row"),
133
+ selector: ".el-table__header tr"
134
+ }, {
135
+ class: semanticStyle("body.cell"),
136
+ selector: ".el-table__body .el-table__cell"
137
+ }, {
138
+ class: semanticStyle("header.cell"),
139
+ selector: ".el-table__header .el-table__cell"
140
+ }];
115
141
  const {
116
142
  tableRef,
117
143
  onRowClick,
@@ -283,6 +309,8 @@ const TreeGridControl = /* @__PURE__ */ vue.defineComponent({
283
309
  semanticClass,
284
310
  semanticStyle,
285
311
  pageSemantic,
312
+ childClass,
313
+ childStyle,
286
314
  loadData,
287
315
  onRowClick,
288
316
  renderColumn,
@@ -317,7 +345,7 @@ const TreeGridControl = /* @__PURE__ */ vue.defineComponent({
317
345
  }, {
318
346
  default: () => {
319
347
  var _a;
320
- return [this.c.state.isLoaded && vue.createVNode(vue.resolveComponent("el-table"), vue.mergeProps({
348
+ return [this.c.state.isLoaded && vue.withDirectives(vue.createVNode(vue.resolveComponent("el-table"), vue.mergeProps({
321
349
  "lazy": true,
322
350
  "border": true,
323
351
  "ref": "tableRef",
@@ -338,32 +366,8 @@ const TreeGridControl = /* @__PURE__ */ vue.defineComponent({
338
366
  "onSelectionChange": this.onSelectionChange,
339
367
  "highlight-current-row": state.singleSelect,
340
368
  "onExpandChange": (row, expanded) => this.c.expandChange(row, expanded),
341
- "row-class-name": (event) => {
342
- return [this.handleRowClassName(event), this.semanticClass("body.row", {
343
- event
344
- })].join(" ");
345
- },
346
- "header-row-class-name": (...args) => this.semanticClass("header.row", {
347
- args
348
- }),
349
- "row-style": (...args) => this.semanticStyle("body.row", {
350
- args
351
- }),
352
- "header-row-style": (...args) => this.semanticStyle("header.row", {
353
- args
354
- }),
355
- "cell-class-name": (...args) => this.semanticClass("body.cell", {
356
- args
357
- }),
358
- "header-cell-class-name": (data) => {
359
- return [this.handleHeaderCellClassName(data), this.semanticClass("header.cell", {
360
- event: data
361
- })].join(" ");
362
- },
363
- "cell-style": (...args) => this.semanticStyle("body.cell", {
364
- args
365
- }),
366
- "header-cell-style": this.semanticStyle("header.cell"),
369
+ "row-class-name": this.handleRowClassName,
370
+ "header-cell-class-name": this.handleHeaderCellClassName,
367
371
  "tree-props": {
368
372
  children: "children",
369
373
  hasChildren: "hasChildren"
@@ -387,7 +391,7 @@ const TreeGridControl = /* @__PURE__ */ vue.defineComponent({
387
391
  append: () => {
388
392
  return this.renderPopover();
389
393
  }
390
- }), enablePagingBar && vue.createVNode(vue.resolveComponent("iBizPagination"), {
394
+ }), [[vue.resolveDirective("child-class"), this.childClass], [vue.resolveDirective("child-style"), this.childStyle]]), enablePagingBar && vue.createVNode(vue.resolveComponent("iBizPagination"), {
391
395
  "class": this.semanticClass("pagination"),
392
396
  "style": this.semanticStyle("pagination"),
393
397
  "semantic": this.pageSemantic,
@@ -63,6 +63,32 @@ const TreeGridExControl = /* @__PURE__ */ vue.defineComponent({
63
63
  semanticClass,
64
64
  semanticStyle
65
65
  } = vue3Util.useSemanticNode(c);
66
+ const childClass = [{
67
+ class: semanticClass("body.row"),
68
+ selector: ".el-table__row"
69
+ }, {
70
+ class: semanticClass("header.row"),
71
+ selector: ".el-table__header tr"
72
+ }, {
73
+ class: semanticClass("body.cell"),
74
+ selector: ".el-table__body .el-table__cell"
75
+ }, {
76
+ class: semanticClass("header.cell"),
77
+ selector: ".el-table__header .el-table__cell"
78
+ }];
79
+ const childStyle = [{
80
+ class: semanticStyle("body.row"),
81
+ selector: ".el-table__row"
82
+ }, {
83
+ class: semanticStyle("header.row"),
84
+ selector: ".el-table__header tr"
85
+ }, {
86
+ class: semanticStyle("body.cell"),
87
+ selector: ".el-table__body .el-table__cell"
88
+ }, {
89
+ class: semanticStyle("header.cell"),
90
+ selector: ".el-table__header .el-table__cell"
91
+ }];
66
92
  const renderNoData = () => {
67
93
  const {
68
94
  isLoaded
@@ -215,6 +241,8 @@ const TreeGridExControl = /* @__PURE__ */ vue.defineComponent({
215
241
  tableRefreshKey,
216
242
  semanticClass,
217
243
  semanticStyle,
244
+ childClass,
245
+ childStyle,
218
246
  loadData,
219
247
  onRowClick,
220
248
  renderNoData,
@@ -295,7 +323,7 @@ const TreeGridExControl = /* @__PURE__ */ vue.defineComponent({
295
323
  "class": [this.ns.b(), this.semanticClass("root")],
296
324
  "style": this.semanticStyle("root")
297
325
  }, {
298
- default: () => [this.c.state.isLoaded && vue.createVNode(vue.resolveComponent("el-table"), vue.mergeProps({
326
+ default: () => [this.c.state.isLoaded && vue.withDirectives(vue.createVNode(vue.resolveComponent("el-table"), vue.mergeProps({
299
327
  "ref": "tableRef",
300
328
  "key": this.tableRefreshKey,
301
329
  "class": [this.ns.e("table"), this.semanticClass("content")],
@@ -310,30 +338,7 @@ const TreeGridExControl = /* @__PURE__ */ vue.defineComponent({
310
338
  "lazy": true,
311
339
  "onRowClick": this.onRowClick,
312
340
  "onExpandChange": this.onExpandChange,
313
- "row-class-name": (event) => {
314
- return [this.handleRowClassName(event), this.semanticClass("body.row", {
315
- event
316
- })].join(" ");
317
- },
318
- "header-row-class-name": (...args) => this.semanticClass("header.row", {
319
- args
320
- }),
321
- "row-style": (...args) => this.semanticStyle("body.row", {
322
- args
323
- }),
324
- "header-row-style": (...args) => this.semanticStyle("header.row", {
325
- args
326
- }),
327
- "cell-class-name": (...args) => this.semanticClass("body.cell", {
328
- args
329
- }),
330
- "header-cell-class-name": (...args) => this.semanticClass("header.cell", {
331
- args
332
- }),
333
- "cell-style": (...args) => this.semanticStyle("body.cell", {
334
- args
335
- }),
336
- "header-cell-style": this.semanticStyle("header.cell"),
341
+ "row-class-name": this.handleRowClassName,
337
342
  "load": this.loadData
338
343
  }, renderAttrs(this.c.model, {
339
344
  ...this.c.getEventArgs()
@@ -347,7 +352,7 @@ const TreeGridExControl = /* @__PURE__ */ vue.defineComponent({
347
352
  append: () => {
348
353
  return this.renderPopover();
349
354
  }
350
- })]
355
+ }), [[vue.resolveDirective("child-class"), this.childClass], [vue.resolveDirective("child-style"), this.childStyle]])]
351
356
  })]
352
357
  });
353
358
  }
@@ -90,9 +90,8 @@ class AutoCompleteEditorController extends runtime.EditorController {
90
90
  }
91
91
  );
92
92
  }
93
- if (this.deACMode.itemSysPFPluginId) {
93
+ if (this.deACMode)
94
94
  this.acItemProvider = await runtime.getAcItemProvider(this.deACMode);
95
- }
96
95
  }
97
96
  }
98
97
  }
@@ -188,9 +188,8 @@ class PickerEditorController extends runtime.EditorController {
188
188
  }
189
189
  );
190
190
  }
191
- if (this.deACMode.itemSysPFPluginId) {
191
+ if (this.deACMode)
192
192
  this.acItemProvider = await runtime.getAcItemProvider(this.deACMode);
193
- }
194
193
  }
195
194
  }
196
195
  }
@@ -66,11 +66,8 @@ class ListBoxPickerEditorController extends runtime.EditorController {
66
66
  this.model.appDataEntityId,
67
67
  this.context.srfappid
68
68
  );
69
- if (this.deACMode) {
70
- if (this.deACMode.itemSysPFPluginId) {
71
- this.acItemProvider = await runtime.getAcItemProvider(this.deACMode);
72
- }
73
- }
69
+ if (this.deACMode)
70
+ this.acItemProvider = await runtime.getAcItemProvider(this.deACMode);
74
71
  }
75
72
  }
76
73
  }
@@ -24,7 +24,7 @@ class MapPickerEditorController extends runtime.EditorController {
24
24
  * @type {string}
25
25
  * @memberof MapPickerEditorController
26
26
  */
27
- __publicField(this, "markerIcon", "".concat(ibiz.env.assetsUrl, "/images/poi-marker-default.png"));
27
+ __publicField(this, "markerIcon", ibiz.config.imageAssets.poiMarker);
28
28
  /**
29
29
  * @description 默认中心点坐标
30
30
  * @memberof MapPickerEditorController
@@ -410,7 +410,7 @@ const IBizInput = /* @__PURE__ */ vue.defineComponent({
410
410
  "title": ibiz.i18n.t("editor.textBox.openAiChat"),
411
411
  "onClick": this.onClick
412
412
  }, [vue.createVNode("ion-icon", {
413
- "src": "./assets/images/svg/chat.svg"
413
+ "src": ibiz.config.imageAssets.chat
414
414
  }, null)]) : null]);
415
415
  }
416
416
  });
@@ -92,7 +92,7 @@ const AuthUserinfo = /* @__PURE__ */ vue.defineComponent({
92
92
  }, [vue.createVNode(vue.resolveComponent("el-avatar"), {
93
93
  "class": [this.ns.b("avatar"), this.semanticClass("avatar")],
94
94
  "style": this.semanticStyle("avatar"),
95
- "src": "./assets/images/user-avatar.png"
95
+ "src": ibiz.config.imageAssets.userAvatar
96
96
  }, null), vue.createVNode("div", {
97
97
  "class": [this.ns.b("name"), this.ns.is("collapse", this.isCollapse), this.semanticClass("name")],
98
98
  "style": this.semanticStyle("name")
@@ -181,10 +181,7 @@ class GlobalSearchController extends runtime.PanelItemController {
181
181
  func.appId
182
182
  );
183
183
  if (deACMode) {
184
- let acItemProvider;
185
- if (deACMode.itemSysPFPluginId) {
186
- acItemProvider = await runtime.getAcItemProvider(deACMode);
187
- }
184
+ const acItemProvider = await runtime.getAcItemProvider(deACMode);
188
185
  this.state.items.push({
189
186
  deACMode,
190
187
  acItemProvider,
@@ -35,13 +35,13 @@ const UserAction = /* @__PURE__ */ vue.defineComponent({
35
35
  } = vue3Util.useSemanticNode(props.controller);
36
36
  const imgConfig = {
37
37
  SETTING: {
38
- imagePath: "svg/setting.svg"
38
+ imagePath: ibiz.config.imageAssets.setting
39
39
  },
40
40
  HELPER: {
41
- imagePath: "svg/helper.svg"
41
+ imagePath: ibiz.config.imageAssets.helper
42
42
  },
43
43
  CUSTOM: {
44
- imagePath: "svg/custom-workbench.svg"
44
+ imagePath: ibiz.config.imageAssets.customWorkbench
45
45
  }
46
46
  };
47
47
  let sysImage = props.modelData.sysImage;
@@ -45,7 +45,7 @@ const UserMessage = /* @__PURE__ */ vue.defineComponent({
45
45
  noticeController.internalMessage.provider = new internalMessageDefault_provider.InternalMessageDefaultProvider();
46
46
  const currentTab = vue.ref("notification");
47
47
  const sysImage = props.modelData.sysImage || {
48
- imagePath: "svg/message.svg"
48
+ imagePath: ibiz.config.imageAssets.message
49
49
  };
50
50
  const popoverRef = vue.ref();
51
51
  const hiddenPopover = () => {
@@ -182,6 +182,11 @@ class AIChatUtil {
182
182
  } else {
183
183
  chatOptions.chunkEntity = ibiz.config.common.aiChunkEntity;
184
184
  }
185
+ if (editorParams.topiccaptioncomputedmode) {
186
+ chatOptions.captionComputedMode = editorParams.topiccaptioncomputedmode;
187
+ } else {
188
+ chatOptions.captionComputedMode = ibiz.config.common.aiChatTopicCaptionComputedMode;
189
+ }
185
190
  chatOptions.fetchAgentList = (query) => {
186
191
  return this.getAIAgentList(context, { ...params, query }, editorParams);
187
192
  };
@@ -769,6 +774,12 @@ class AIChatUtil {
769
774
  } else {
770
775
  chatOptions.chunkEntity = ibiz.config.common.aiChunkEntity;
771
776
  }
777
+ if (params.hasOwnProperty("topiccaptioncomputedmode")) {
778
+ chatOptions.captionComputedMode = params.topiccaptioncomputedmode;
779
+ delete params.topiccaptioncomputedmode;
780
+ } else {
781
+ chatOptions.captionComputedMode = ibiz.config.common.aiChatTopicCaptionComputedMode;
782
+ }
772
783
  chatOptions.fetchAgentList = (query) => {
773
784
  return this.getAIAgentList(context, { ...params, query });
774
785
  };
@@ -31,7 +31,7 @@ const View403 = /* @__PURE__ */ vue.defineComponent({
31
31
  "class": [this.ns.b(), this.ns.is("top", this.isTop)]
32
32
  }, [vue.createVNode("img", {
33
33
  "class": this.ns.b("img"),
34
- "src": "".concat(ibiz.env.assetsUrl, "/images/403.png")
34
+ "src": ibiz.config.imageAssets.noPermission
35
35
  }, null), vue.createVNode("div", {
36
36
  "class": this.ns.b("text")
37
37
  }, [vue.createVNode("div", {
@@ -31,7 +31,7 @@ const View404 = /* @__PURE__ */ vue.defineComponent({
31
31
  "class": [this.ns.b(), this.ns.is("top", this.isTop)]
32
32
  }, [vue.createVNode("img", {
33
33
  "class": this.ns.b("img"),
34
- "src": "".concat(ibiz.env.assetsUrl, "/images/404.png")
34
+ "src": ibiz.config.imageAssets.noFind
35
35
  }, null), vue.createVNode("div", {
36
36
  "class": this.ns.b("text")
37
37
  }, [vue.createVNode("div", {
@@ -116,7 +116,6 @@ const LoginView = /* @__PURE__ */ vue.defineComponent({
116
116
  const loginViewConfig = await ibiz.hub.config.view.get("AppLoginView");
117
117
  if (loginViewConfig) {
118
118
  loginView.value = loginViewConfig;
119
- hasLoginView.value = true;
120
119
  }
121
120
  } catch (err) {
122
121
  ibiz.log.warn(err);
@@ -143,14 +142,14 @@ const LoginView = /* @__PURE__ */ vue.defineComponent({
143
142
  }, [vue.createVNode("header", {
144
143
  "class": ns.b("box-header")
145
144
  }, [vue.createVNode("img", {
146
- "src": "./assets/images/login-header.png"
145
+ "src": ibiz.config.imageAssets.loginHeader
147
146
  }, null), vue.createVNode("span", {
148
147
  "class": ns.b("box-header-title")
149
148
  }, [appTitle])]), vue.createVNode("main", {
150
149
  "class": ns.b("box-main")
151
150
  }, [vue.createVNode("img", {
152
151
  "class": ns.be("box-main", "avatar"),
153
- "src": "./assets/images/login-avatar.png"
152
+ "src": ibiz.config.imageAssets.loginAvatar
154
153
  }, null), vue.createVNode("div", {
155
154
  "class": ns.b("box-main-content")
156
155
  }, [vue.createVNode(vue.resolveComponent("el-form"), {
@@ -64,7 +64,7 @@ const ShareView = /* @__PURE__ */ vue.defineComponent({
64
64
  }, [vue.createVNode("header", {
65
65
  "class": this.ns.b("box-header")
66
66
  }, [vue.createVNode("img", {
67
- "src": "./assets/images/login-header.png"
67
+ "src": ibiz.config.imageAssets.loginHeader
68
68
  }, null), vue.createVNode("div", {
69
69
  "class": this.ns.b("box-header-title")
70
70
  }, [vue.createVNode("div", null, [this.shareUser.userName]), ibiz.i18n.t("view.shareView.inviting")])]), vue.createVNode("main", {
@@ -43,7 +43,7 @@ const UnauthorizedView = /* @__PURE__ */ vue.defineComponent({
43
43
  "class": ns.b()
44
44
  }, [vue.createVNode("img", {
45
45
  "class": ns.e("img"),
46
- "src": "".concat(ibiz.env.assetsUrl, "/images/404.png")
46
+ "src": ibiz.config.imageAssets.noFind
47
47
  }, null), vue.createVNode("div", {
48
48
  "class": ns.e("tips")
49
49
  }, [ibiz.i18n.t("view.noResourcesView.noResourcePrompt"), vue.createVNode("br", null, null), ibiz.i18n.t("view.noResourcesView.noExistPrompt", {
@@ -270,7 +270,9 @@ class AuthGuard {
270
270
  const uiThemes = app.model.appUIThemes || [];
271
271
  if (uiThemes.length > 0) {
272
272
  const colorThemes = uiThemes.filter((uiTheme) => {
273
- return uiTheme.themeParams && uiTheme.themeParams["icon-theme"] !== "true";
273
+ var _a;
274
+ const isIconTheme = ((_a = uiTheme.themeParams) == null ? void 0 : _a["icon-theme"]) === "true";
275
+ return !isIconTheme && Boolean(uiTheme.cssStyle || uiTheme.themeParams);
274
276
  });
275
277
  if (colorThemes.length > 0) {
276
278
  for (let index = 0; index < colorThemes.length; index++) {
@@ -11,6 +11,7 @@ var __publicField = (obj, key, value) => {
11
11
  __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
12
12
  return value;
13
13
  };
14
+ const PREDEFINED_THEMES = ["light", "dark", "blue"];
14
15
  class DynaAuthGuard extends authGuard.AuthGuard {
15
16
  constructor() {
16
17
  super(...arguments);
@@ -43,10 +44,15 @@ class DynaAuthGuard extends authGuard.AuthGuard {
43
44
  const module = await import('@ibiz-template/web-theme');
44
45
  const theme = module.default || module;
45
46
  vue3Util.AppHooks.useComponent.callSync(null, theme);
46
- if (ibiz.config.theme)
47
+ if (ibiz.config.theme && PREDEFINED_THEMES.includes(ibiz.config.theme)) {
47
48
  ibiz.util.theme.setTheme(ibiz.config.theme);
49
+ }
48
50
  if (appModel.appUIThemes) {
49
51
  await this.loadTheme();
52
+ const themeTags = appModel.appUIThemes.map((uiTheme) => uiTheme.themeTag).filter((tag) => !!tag);
53
+ if (ibiz.config.theme && (PREDEFINED_THEMES.includes(ibiz.config.theme) || themeTags.includes(ibiz.config.theme))) {
54
+ ibiz.util.theme.setTheme(ibiz.config.theme);
55
+ }
50
56
  }
51
57
  if (app.model.title) {
52
58
  ibiz.util.setBrowserTitle("");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ibiz-template/vue3-components",
3
- "version": "0.7.41-alpha.122",
3
+ "version": "0.7.41-alpha.124",
4
4
  "description": "web端组件库(vue3)",
5
5
  "main": "lib/index.cjs",
6
6
  "module": "es/index.mjs",
@@ -31,16 +31,16 @@
31
31
  "dependencies": {
32
32
  "@amap/amap-jsapi-loader": "^1.0.1",
33
33
  "@floating-ui/dom": "^1.5.3",
34
- "@ibiz-template-plugin/ai-chat": "^0.0.94",
34
+ "@ibiz-template-plugin/ai-chat": "^0.0.95",
35
35
  "@ibiz-template-plugin/gantt": "0.1.8-alpha.468",
36
36
  "@ibiz-template-plugin/bi-report": "0.0.32",
37
37
  "@ibiz-template-plugin/data-view": "0.0.8",
38
38
  "@ibiz-template/core": "0.7.41-alpha.119",
39
39
  "@ibiz-template/devtool": "0.0.16",
40
- "@ibiz-template/model-helper": "0.7.41-alpha.127",
41
- "@ibiz-template/runtime": "0.7.41-alpha.127",
40
+ "@ibiz-template/model-helper": "0.7.41-alpha.130",
41
+ "@ibiz-template/runtime": "0.7.41-alpha.130",
42
42
  "@ibiz-template/theme": "0.7.39",
43
- "@ibiz-template/vue3-util": "0.7.41-alpha.127",
43
+ "@ibiz-template/vue3-util": "0.7.41-alpha.130",
44
44
  "@ibiz-template/web-theme": "3.16.0",
45
45
  "@ibiz/model-core": "^0.1.89",
46
46
  "@imengyu/vue3-context-menu": "^1.3.5",
@@ -171,7 +171,7 @@ export const DataImport = defineComponent({
171
171
  <div class={this.ns.b('upload')} onClick={this.selectFile}>
172
172
  <img
173
173
  class={this.ns.be('upload', 'img')}
174
- src='./assets/images/icon-import.svg'
174
+ src={ibiz.config.imageAssets.iconImport}
175
175
  ></img>
176
176
  <span class={this.ns.be('upload', 'text')}>
177
177
  {ibiz.i18n.t('component.dataImport.clickToUpload')}
@@ -76,6 +76,46 @@ const ChartControl = defineComponent({
76
76
  const drillDetailRef = ref(); // 数据反查框
77
77
  let tempParams: IData; // 点击的图表回调事件参数
78
78
 
79
+ // 子类类名透传
80
+ const childClass = [
81
+ {
82
+ class: `${ns.em('grid', 'body-row')} ${semanticClass('table.body.row')}`,
83
+ selector: '.el-table__row',
84
+ },
85
+ {
86
+ class: `${ns.em('grid', 'header-row')} ${semanticClass('table.header.row')}`,
87
+ selector: '.el-table__header tr',
88
+ },
89
+ {
90
+ class: `${ns.em('grid', 'body-cell')} ${semanticClass('table.body.cell')}`,
91
+ selector: '.el-table__body .el-table__cell',
92
+ },
93
+ {
94
+ class: `${ns.em('grid', 'header-cell')} ${semanticClass('table.header.cell')}`,
95
+ selector: '.el-table__header .el-table__cell',
96
+ },
97
+ ];
98
+
99
+ // 子类样式透传
100
+ const childStyle = [
101
+ {
102
+ class: semanticStyle('table.body.row'),
103
+ selector: '.el-table__row',
104
+ },
105
+ {
106
+ class: semanticStyle('table.header.row'),
107
+ selector: '.el-table__header tr',
108
+ },
109
+ {
110
+ class: semanticStyle('table.body.cell'),
111
+ selector: '.el-table__body .el-table__cell',
112
+ },
113
+ {
114
+ class: semanticStyle('table.header.cell'),
115
+ selector: '.el-table__header .el-table__cell',
116
+ },
117
+ ];
118
+
79
119
  // 本地数据模式
80
120
  const initSimpleData = (): void => {
81
121
  if (!props.data) {
@@ -248,42 +288,8 @@ const ChartControl = defineComponent({
248
288
  style={{ width: '100%' }}
249
289
  max-height={maxHeight.value}
250
290
  span-method={c.spanMethod.bind(c)}
251
- header-row-style={(...args: IData[]) =>
252
- semanticStyle('table.header.row', args)
253
- }
254
- header-row-class-name={(...args: IData[]) => {
255
- return [
256
- ns.em('grid', 'header-row'),
257
- semanticClass('table.header.row', args),
258
- ].join(' ');
259
- }}
260
- header-cell-style={(...args: IData[]) =>
261
- semanticStyle('table.header.cell', args)
262
- }
263
- header-cell-class-name={(...args: IData[]) => {
264
- return [
265
- ns.em('grid', 'header-cell'),
266
- semanticClass('table.header.cell', args),
267
- ].join(' ');
268
- }}
269
- row-style={(...args: IData[]) =>
270
- semanticStyle('table.body.row', args)
271
- }
272
- row-class-name={(...args: IData[]) => {
273
- return [
274
- ns.em('grid', 'body-row'),
275
- semanticClass('table.body.row', args),
276
- ].join(' ');
277
- }}
278
- cell-style={(...args: IData[]) =>
279
- semanticStyle('table.body.cell', args)
280
- }
281
- cell-class-name={(...args: IData[]) => {
282
- return [
283
- ns.em('grid', 'body-cell'),
284
- semanticClass('table.body.cell', args),
285
- ].join(' ');
286
- }}
291
+ v-child-class={childClass}
292
+ v-child-style={childStyle}
287
293
  >
288
294
  {c.state.gridHeaders.map((column: IData) => {
289
295
  return (
@@ -30,10 +30,12 @@ import {
30
30
  IControlProvider,
31
31
  IMDControlGroupState,
32
32
  DataViewControlController,
33
+ getMDCtrlItemProvider,
33
34
  } from '@ibiz-template/runtime';
34
35
  import { createUUID } from 'qx-util';
35
36
  import draggable from 'vuedraggable';
36
37
  import { usePagination } from '../../util';
38
+ import { useDataViewSkeleton } from './data-view.util';
37
39
  import './data-view.scss';
38
40
 
39
41
  export const DataViewControl = defineComponent({
@@ -353,6 +355,17 @@ export const DataViewControl = defineComponent({
353
355
 
354
356
  // 绘制卡片
355
357
  const renderCard = (item: IData): VNode => {
358
+ // 多数据部件项绘制器
359
+ const provider = getMDCtrlItemProvider(c.model);
360
+ if (provider)
361
+ return h(resolveComponent(provider.component), {
362
+ data: item,
363
+ controller: c,
364
+ onClick: (event: MouseEvent): Promise<void> =>
365
+ onRowClick(item, event),
366
+ onDblclick: (event: MouseEvent): Promise<void> =>
367
+ onDbRowClick(item, event),
368
+ });
356
369
  const itemStyle = ns.cssVarBlock({
357
370
  'item-bg-color': `${item.bgcolor || ''}`,
358
371
  'text-color': `${item.fontcolor || ''}`,
@@ -781,6 +794,12 @@ export const DataViewControl = defineComponent({
781
794
 
782
795
  // 单行高度
783
796
  const ITEM_HEIGHT: number = 24;
797
+
798
+ // 骨架屏:按容器宽度计算单行最大卡片数
799
+ const { setSkeletonContentRef, calcSkeletonCount } = useDataViewSkeleton({
800
+ model: c.model,
801
+ });
802
+
784
803
  // 计算骨架屏行数
785
804
  const calcSkeletonRows = (): number => {
786
805
  const { cardHeight } = c.model;
@@ -850,25 +869,23 @@ export const DataViewControl = defineComponent({
850
869
  // 绘制分组骨架屏
851
870
  const renderGroupSkeleton = (): VNode => {
852
871
  return (
853
- <div class={ns.b('skeleton')}>
872
+ <div class={[ns.e('content'), ns.b('group-content')]}>
854
873
  {Array.from({ length: 3 }, () => (
855
- <div class={ns.b('skeleton-group')}>
856
- <div class={ns.be('skeleton-group', 'header')}>
874
+ <div class={ns.be('group-content', 'item')}>
875
+ <div class={ns.be('group-content', 'item-header')}>
857
876
  <el-skeleton animated rows={1}>
858
877
  {{
859
878
  template: () => (
860
- <el-skeleton-item variant='rect' style='width: 15%' />
879
+ <el-skeleton-item
880
+ variant='rect'
881
+ style='width: 15%;height: 24px;'
882
+ />
861
883
  ),
862
884
  }}
863
885
  </el-skeleton>
864
886
  </div>
865
- <div
866
- class={[
867
- ns.be('skeleton', 'content'),
868
- ns.be('skeleton-group', 'content'),
869
- ]}
870
- >
871
- {renderSkeletonCardLayout(3)}
887
+ <div ref={setSkeletonContentRef}>
888
+ {renderSkeletonCardLayout(calcSkeletonCount(3))}
872
889
  </div>
873
890
  </div>
874
891
  ))}
@@ -881,10 +898,10 @@ export const DataViewControl = defineComponent({
881
898
  if (c.state.enableGroup) {
882
899
  return renderGroupSkeleton();
883
900
  }
884
- const count = c.state.size || 6;
901
+ const count = c.state.size || calcSkeletonCount(6);
885
902
  return (
886
- <div class={ns.b('skeleton')}>
887
- <div class={ns.be('skeleton', 'content')}>
903
+ <div class={ns.e('content')}>
904
+ <div ref={setSkeletonContentRef}>
888
905
  {renderSkeletonCardLayout(Math.min(count, 20))}
889
906
  </div>
890
907
  </div>
@@ -996,7 +1013,7 @@ export const DataViewControl = defineComponent({
996
1013
  const provider = c.view.providers[id];
997
1014
  return h(resolveComponent(provider?.component || 'IBizControlShell'), {
998
1015
  class: [ns.e('searchbar'), semanticClass('searchbar')],
999
- style: semanticStyle(searchbar),
1016
+ style: semanticStyle('searchbar'),
1000
1017
  context: c.view.context,
1001
1018
  params: c.view.params,
1002
1019
  modelData: searchbar,