@ibiz-template/vue3-components 0.7.24-alpha.1 → 0.7.24

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 (90) hide show
  1. package/dist/{index-d_MgYoar.js → index--XeT2CTZ.js} +1 -1
  2. package/dist/index-XTX4vyZZ.js +4 -0
  3. package/dist/{index-3r8aPzsK.js → index-_h-elF6t.js} +1 -1
  4. package/dist/index.min.css +1 -1
  5. package/dist/index.system.min.js +1 -1
  6. package/dist/{xlsx-util-B5sYgU54.js → xlsx-util-aO-rYvlt.js} +1 -1
  7. package/es/common/grid-setting/grid-setting.d.ts +1 -0
  8. package/es/control/data-view/data-view.css +1 -1
  9. package/es/control/data-view/data-view.d.ts +1 -0
  10. package/es/control/data-view/data-view.mjs +35 -5
  11. package/es/control/data-view/index.d.ts +1 -0
  12. package/es/control/drtab/drtab-control.util.d.ts +17 -0
  13. package/es/control/drtab/drtab-control.util.mjs +115 -0
  14. package/es/control/drtab/drtab.controller.d.ts +7 -0
  15. package/es/control/drtab/drtab.controller.mjs +13 -0
  16. package/es/control/drtab/drtab.css +1 -1
  17. package/es/control/drtab/drtab.d.ts +4 -0
  18. package/es/control/drtab/drtab.mjs +94 -33
  19. package/es/control/drtab/index.d.ts +4 -0
  20. package/es/control/form/form-detail/form-mdctrl/form-mdctrl-repeater/repeater-grid/repeater-grid.d.ts +1 -0
  21. package/es/control/grid/grid/grid-control.util.mjs +3 -1
  22. package/es/control/grid/grid/grid.css +1 -1
  23. package/es/control/grid/grid/grid.d.ts +3 -0
  24. package/es/control/grid/grid/grid.mjs +43 -4
  25. package/es/control/grid/grid/index.d.ts +3 -0
  26. package/es/control/list/index.d.ts +1 -0
  27. package/es/control/list/list.css +1 -1
  28. package/es/control/list/list.d.ts +1 -0
  29. package/es/control/list/list.mjs +35 -7
  30. package/es/control/tree/el-tree-util.d.ts +0 -16
  31. package/es/control/tree/index.d.ts +0 -16
  32. package/es/control/tree/tree.d.ts +0 -16
  33. package/es/editor/check-box/check-box-editor.provider.mjs +1 -1
  34. package/es/editor/check-box/ibiz-checkbox/ibiz-checkbox.mjs +7 -2
  35. package/es/editor/check-box-list/ibiz-checkbox-list/ibiz-checkbox-list.mjs +7 -2
  36. package/es/editor/data-picker/ibiz-picker-link/ibiz-picker-link.mjs +7 -2
  37. package/es/editor/list-box/ibiz-list-box/ibiz-list-box.mjs +7 -2
  38. package/es/editor/number-range/ibiz-number-range-picker/ibiz-number-range-picker.mjs +12 -10
  39. package/es/editor/radio-button-list/ibiz-radio/ibiz-radio.mjs +7 -2
  40. package/es/editor/rate/ibiz-rate/ibiz-rate.mjs +7 -2
  41. package/es/editor/slider/ibiz-slider/ibiz-slider.mjs +7 -2
  42. package/es/editor/span/span/span.d.ts +6 -0
  43. package/es/editor/span/span/span.mjs +11 -6
  44. package/es/editor/switch/ibiz-switch/ibiz-switch.mjs +7 -2
  45. package/es/editor/text-box/input/input.d.ts +35 -0
  46. package/es/editor/text-box/input/input.mjs +30 -3
  47. package/es/editor/text-box/text-box-editor.controller.d.ts +10 -3
  48. package/es/editor/text-box/text-box-editor.controller.mjs +13 -2
  49. package/es/editor/upload/ibiz-file-upload/ibiz-file-upload.mjs +7 -2
  50. package/es/editor/upload/ibiz-image-upload/ibiz-image-upload.mjs +7 -2
  51. package/es/locale/en/index.d.ts +3 -1
  52. package/es/locale/en/index.mjs +2 -1
  53. package/es/locale/zh-CN/index.d.ts +3 -1
  54. package/es/locale/zh-CN/index.mjs +2 -1
  55. package/es/node_modules/.pnpm/@ibiz-template_core@0.7.18_axios@1.6.8_lodash-es@4.17.21_qs@6.11.2_qx-util@0.4.8_ramda@0.29.1/node_modules/@ibiz-template/core/out/utils/namespace/namespace.mjs +218 -0
  56. package/es/node_modules/.pnpm/{element-plus@2.7.5_vue@3.3.8 → element-plus@2.4.4_vue@3.3.8}/node_modules/element-plus/dist/locale/zh-cn.mjs +1 -14
  57. package/es/web-app/create-vue-app.mjs +1 -1
  58. package/lib/control/data-view/data-view.cjs +34 -4
  59. package/lib/control/data-view/data-view.css +1 -1
  60. package/lib/control/drtab/drtab-control.util.cjs +117 -0
  61. package/lib/control/drtab/drtab.cjs +93 -32
  62. package/lib/control/drtab/drtab.controller.cjs +13 -0
  63. package/lib/control/drtab/drtab.css +1 -1
  64. package/lib/control/grid/grid/grid-control.util.cjs +3 -1
  65. package/lib/control/grid/grid/grid.cjs +42 -3
  66. package/lib/control/grid/grid/grid.css +1 -1
  67. package/lib/control/list/list.cjs +34 -6
  68. package/lib/control/list/list.css +1 -1
  69. package/lib/editor/check-box/check-box-editor.provider.cjs +1 -1
  70. package/lib/editor/check-box/ibiz-checkbox/ibiz-checkbox.cjs +6 -1
  71. package/lib/editor/check-box-list/ibiz-checkbox-list/ibiz-checkbox-list.cjs +6 -1
  72. package/lib/editor/data-picker/ibiz-picker-link/ibiz-picker-link.cjs +6 -1
  73. package/lib/editor/list-box/ibiz-list-box/ibiz-list-box.cjs +6 -1
  74. package/lib/editor/number-range/ibiz-number-range-picker/ibiz-number-range-picker.cjs +11 -9
  75. package/lib/editor/radio-button-list/ibiz-radio/ibiz-radio.cjs +6 -1
  76. package/lib/editor/rate/ibiz-rate/ibiz-rate.cjs +6 -1
  77. package/lib/editor/slider/ibiz-slider/ibiz-slider.cjs +6 -1
  78. package/lib/editor/span/span/span.cjs +11 -6
  79. package/lib/editor/switch/ibiz-switch/ibiz-switch.cjs +6 -1
  80. package/lib/editor/text-box/input/input.cjs +28 -1
  81. package/lib/editor/text-box/text-box-editor.controller.cjs +12 -1
  82. package/lib/editor/upload/ibiz-file-upload/ibiz-file-upload.cjs +6 -1
  83. package/lib/editor/upload/ibiz-image-upload/ibiz-image-upload.cjs +6 -1
  84. package/lib/locale/en/index.cjs +2 -1
  85. package/lib/locale/zh-CN/index.cjs +2 -1
  86. package/lib/node_modules/.pnpm/@ibiz-template_core@0.7.18_axios@1.6.8_lodash-es@4.17.21_qs@6.11.2_qx-util@0.4.8_ramda@0.29.1/node_modules/@ibiz-template/core/out/utils/namespace/namespace.cjs +221 -0
  87. package/lib/node_modules/.pnpm/{element-plus@2.7.5_vue@3.3.8 → element-plus@2.4.4_vue@3.3.8}/node_modules/element-plus/dist/locale/zh-cn.cjs +1 -14
  88. package/lib/web-app/create-vue-app.cjs +1 -1
  89. package/package.json +8 -8
  90. package/dist/index-O0hiquCe.js +0 -4
@@ -0,0 +1,218 @@
1
+ const defaultNamespace = 'ibiz';
2
+ const statePrefix = 'is-';
3
+ /**
4
+ * css bem 命名规则拼接
5
+ * _bem('ibiz', 'layout') => ibiz-layout
6
+ * _bem('ibiz', 'layout', '', 'title') => ibiz-layout__title
7
+ * _bem('ibiz', 'layout', '', '', 'right') => ibiz-layout--right
8
+ * _bem('ibiz', 'layout', '', 'title', 'right') => ibiz-layout__title--right
9
+ * _bem('ibiz', 'layout', 'header', 'title', 'right') => ibiz-layout-header__title--right
10
+ *
11
+ * @author chitanda
12
+ * @date 2022-09-06 11:09:42
13
+ * @param {string} namespace 命名空间
14
+ * @param {string} block 块
15
+ * @param {string} blockSuffix 块后缀
16
+ * @param {string} element 元素
17
+ * @param {string} modifier 修饰符
18
+ * @return {*} {string}
19
+ */
20
+ function _bem(namespace, block, blockSuffix, element, modifier) {
21
+ let cls = `${namespace}-${block}`;
22
+ if (blockSuffix) {
23
+ cls += `-${blockSuffix}`;
24
+ }
25
+ if (element) {
26
+ cls += `__${element}`;
27
+ }
28
+ if (modifier) {
29
+ cls += `--${modifier}`;
30
+ }
31
+ return cls;
32
+ }
33
+ /**
34
+ * 全局样式处理命名空间
35
+ *
36
+ * @author chitanda
37
+ * @date 2022-09-06 11:09:50
38
+ * @export
39
+ * @class Namespace
40
+ */
41
+ class Namespace {
42
+ /**
43
+ * Creates an instance of Namespace.
44
+ *
45
+ * @author chitanda
46
+ * @date 2022-09-06 12:09:12
47
+ * @param {string} block 当前命名空间的根模块,例如组件的名称
48
+ * @param {string} [namespace] 指定命名空间,未指定使用默认值 ibiz
49
+ */
50
+ constructor(block, namespace) {
51
+ this.block = block;
52
+ this.namespace = namespace || defaultNamespace;
53
+ }
54
+ /**
55
+ * namespace-block
56
+ * namespace-block-blockSuffix
57
+ *
58
+ * @author chitanda
59
+ * @date 2022-09-06 12:09:08
60
+ * @param {string} [blockSuffix='']
61
+ * @return {*} {string}
62
+ */
63
+ b(blockSuffix = '') {
64
+ return _bem(this.namespace, this.block, blockSuffix, '', '');
65
+ }
66
+ /**
67
+ * namespace-block__element
68
+ *
69
+ * @author chitanda
70
+ * @date 2022-09-06 12:09:48
71
+ * @param {string} [element]
72
+ * @return {*} {string}
73
+ */
74
+ e(element) {
75
+ return element ? _bem(this.namespace, this.block, '', element, '') : '';
76
+ }
77
+ /**
78
+ * namespace-block--modifier
79
+ *
80
+ * @author chitanda
81
+ * @date 2022-09-06 12:09:37
82
+ * @param {string} [modifier]
83
+ * @return {*} {string}
84
+ */
85
+ m(modifier) {
86
+ return modifier ? _bem(this.namespace, this.block, '', '', modifier) : '';
87
+ }
88
+ /**
89
+ * namespace-block-blockSuffix__element
90
+ *
91
+ * @author chitanda
92
+ * @date 2022-09-06 12:09:52
93
+ * @param {string} [blockSuffix]
94
+ * @param {string} [element]
95
+ * @return {*} {string}
96
+ */
97
+ be(blockSuffix, element) {
98
+ return blockSuffix && element
99
+ ? _bem(this.namespace, this.block, blockSuffix, element, '')
100
+ : '';
101
+ }
102
+ /**
103
+ * namespace-block__element--modifier
104
+ *
105
+ * @author chitanda
106
+ * @date 2022-09-06 12:09:19
107
+ * @param {string} [element]
108
+ * @param {string} [modifier]
109
+ * @return {*} {string}
110
+ */
111
+ em(element, modifier) {
112
+ return element && modifier
113
+ ? _bem(this.namespace, this.block, '', element, modifier)
114
+ : '';
115
+ }
116
+ /**
117
+ * namespace-block-blockSuffix--modifier
118
+ *
119
+ * @author chitanda
120
+ * @date 2022-09-06 12:09:59
121
+ * @param {string} [blockSuffix]
122
+ * @param {string} [modifier]
123
+ * @return {*} {string}
124
+ */
125
+ bm(blockSuffix, modifier) {
126
+ return blockSuffix && modifier
127
+ ? _bem(this.namespace, this.block, blockSuffix, '', modifier)
128
+ : '';
129
+ }
130
+ /**
131
+ * namespace-block-blockSuffix__element--modifier
132
+ *
133
+ * @author chitanda
134
+ * @date 2022-09-06 12:09:37
135
+ * @param {string} [blockSuffix]
136
+ * @param {string} [element]
137
+ * @param {string} [modifier]
138
+ * @return {*} {string}
139
+ */
140
+ bem(blockSuffix, element, modifier) {
141
+ return blockSuffix && element && modifier
142
+ ? _bem(this.namespace, this.block, blockSuffix, element, modifier)
143
+ : '';
144
+ }
145
+ /**
146
+ * 返回状态 class
147
+ *
148
+ * is('loading', false) => '';
149
+ * is('loading', true) => 'is-loading';
150
+ *
151
+ * @author chitanda
152
+ * @date 2022-09-06 12:09:57
153
+ * @param {string} name
154
+ * @param {boolean} [state]
155
+ * @return {*} {string}
156
+ */
157
+ is(name, state) {
158
+ return name && state ? `${statePrefix}${name}` : '';
159
+ }
160
+ /**
161
+ * 生成使用到的 css 变量 style 对象
162
+ *
163
+ * @author chitanda
164
+ * @date 2022-09-06 15:09:41
165
+ * @param {Record<string, string>} object
166
+ * @return {*} {Record<string, string>}
167
+ */
168
+ cssVar(object) {
169
+ const styles = {};
170
+ for (const key in object) {
171
+ if (object[key]) {
172
+ styles[this.cssVarName(key)] = object[key];
173
+ }
174
+ }
175
+ return styles;
176
+ }
177
+ /**
178
+ * 生成使用到的 css block 变量 style 对象
179
+ *
180
+ * @author chitanda
181
+ * @date 2022-09-06 15:09:03
182
+ * @param {Record<string, string>} object
183
+ * @return {*} {Record<string, string>}
184
+ */
185
+ cssVarBlock(object) {
186
+ const styles = {};
187
+ for (const key in object) {
188
+ if (object[key]) {
189
+ styles[this.cssVarBlockName(key)] = object[key];
190
+ }
191
+ }
192
+ return styles;
193
+ }
194
+ /**
195
+ * 生成 css var 变量名称
196
+ *
197
+ * @author chitanda
198
+ * @date 2022-09-06 15:09:21
199
+ * @param {string} name
200
+ * @return {*} {string}
201
+ */
202
+ cssVarName(name) {
203
+ return `--${this.namespace}-${name}`;
204
+ }
205
+ /**
206
+ * 生成块 css var 变量名称
207
+ *
208
+ * @author chitanda
209
+ * @date 2022-09-06 15:09:35
210
+ * @param {string} name
211
+ * @return {*} {string}
212
+ */
213
+ cssVarBlockName(name) {
214
+ return `--${this.namespace}-${this.block}-${name}`;
215
+ }
216
+ }
217
+
218
+ export { Namespace, defaultNamespace };
@@ -1,11 +1,8 @@
1
- /*! Element Plus v2.7.5 */
1
+ /*! Element Plus v2.4.4 */
2
2
 
3
3
  var zhCn = {
4
4
  name: "zh-cn",
5
5
  el: {
6
- breadcrumb: {
7
- label: "\u9762\u5305\u5C51"
8
- },
9
6
  colorpicker: {
10
7
  confirm: "\u786E\u5B9A",
11
8
  clear: "\u6E05\u7A7A"
@@ -107,11 +104,6 @@ var zhCn = {
107
104
  clearFilter: "\u5168\u90E8",
108
105
  sumText: "\u5408\u8BA1"
109
106
  },
110
- tour: {
111
- next: "\u4E0B\u4E00\u6B65",
112
- previous: "\u4E0A\u4E00\u6B65",
113
- finish: "\u7ED3\u675F\u5BFC\u89C8"
114
- },
115
107
  tree: {
116
108
  emptyText: "\u6682\u65E0\u6570\u636E"
117
109
  },
@@ -132,11 +124,6 @@ var zhCn = {
132
124
  popconfirm: {
133
125
  confirmButtonText: "\u786E\u5B9A",
134
126
  cancelButtonText: "\u53D6\u6D88"
135
- },
136
- carousel: {
137
- leftArrow: "\u4E0A\u4E00\u5F20\u5E7B\u706F\u7247",
138
- rightArrow: "\u4E0B\u4E00\u5F20\u5E7B\u706F\u7247",
139
- indicator: "\u5E7B\u706F\u7247\u5207\u6362\u81F3\u7D22\u5F15 {index}"
140
127
  }
141
128
  }
142
129
  };
@@ -1,6 +1,6 @@
1
1
  import { createApp, KeepAlive } from 'vue';
2
2
  import ElementPlus from 'element-plus';
3
- import zhCn from '../node_modules/.pnpm/element-plus@2.7.5_vue@3.3.8/node_modules/element-plus/dist/locale/zh-cn.mjs';
3
+ import zhCn from '../node_modules/.pnpm/element-plus@2.4.4_vue@3.3.8/node_modules/element-plus/dist/locale/zh-cn.mjs';
4
4
  import { AppHooks, piniaInstance } from '@ibiz-template/vue3-util';
5
5
  import IBizVue3 from '../ibiz-vue3.mjs';
6
6
  import { i18n } from '../locale/index.mjs';
@@ -3,6 +3,7 @@
3
3
  var vue = require('vue');
4
4
  var vue3Util = require('@ibiz-template/vue3-util');
5
5
  var runtime = require('@ibiz-template/runtime');
6
+ var qxUtil = require('qx-util');
6
7
  require('./data-view.css');
7
8
  require('../../util/index.cjs');
8
9
  var usePagination = require('../../util/pagination/use-pagination.cjs');
@@ -60,8 +61,24 @@ const DataViewControl = /* @__PURE__ */ vue.defineComponent({
60
61
  if (c.model.enablePagingBar === true) {
61
62
  return true;
62
63
  }
64
+ if (c.model.pagingMode !== 2) {
65
+ return true;
66
+ }
63
67
  return c.state.items.length >= c.state.total || c.state.isLoading || c.state.total <= c.state.size;
64
68
  });
69
+ const infiniteScroll = vue.ref();
70
+ const infiniteScrollKey = vue.ref(qxUtil.createUUID());
71
+ vue.watch(() => c.state.curPage, () => {
72
+ var _a, _b;
73
+ if (c.state.curPage === 1 && (c.model.pagingMode === 2 || c.model.pagingMode === 3)) {
74
+ infiniteScrollKey.value = qxUtil.createUUID();
75
+ const containerEl = (_b = (_a = infiniteScroll.value) == null ? void 0 : _a.ElInfiniteScroll) == null ? void 0 : _b.containerEl;
76
+ if (containerEl) {
77
+ containerEl.lastScrollTop = 0;
78
+ containerEl.scrollTop = 0;
79
+ }
80
+ }
81
+ });
65
82
  const {
66
83
  onPageChange,
67
84
  onPageRefresh,
@@ -232,11 +249,21 @@ const DataViewControl = /* @__PURE__ */ vue.defineComponent({
232
249
  });
233
250
  };
234
251
  const renderHasData = () => {
252
+ let _slot4;
235
253
  return vue.withDirectives(vue.createVNode("div", {
236
254
  "class": [ns.b("scroll"), ns.e("content")],
237
255
  "infinite-scroll-distance": 10,
238
- "infinite-scroll-disabled": isLodeMoreDisabled.value
239
- }, [renderDataViewContent()]), [[vue.resolveDirective("infinite-scroll"), () => c.loadMore()]]);
256
+ "infinite-scroll-disabled": isLodeMoreDisabled.value,
257
+ "ref": "infiniteScroll",
258
+ "key": infiniteScrollKey.value
259
+ }, [renderDataViewContent(), c.model.pagingMode === 3 && !(c.state.items.length >= c.state.total || c.state.isLoading || c.state.total <= c.state.size) && vue.createVNode("div", {
260
+ "class": ns.e("load-more-button")
261
+ }, [vue.createVNode(vue.resolveComponent("el-button"), {
262
+ "text": true,
263
+ "onClick": () => c.loadMore()
264
+ }, _isSlot(_slot4 = ibiz.i18n.t("control.common.loadMore")) ? _slot4 : {
265
+ default: () => [_slot4]
266
+ })])]), [[vue.resolveDirective("infinite-scroll"), () => c.loadMore()]]);
240
267
  };
241
268
  const renderNoData = () => {
242
269
  const {
@@ -256,6 +283,7 @@ const DataViewControl = /* @__PURE__ */ vue.defineComponent({
256
283
  c,
257
284
  ns,
258
285
  classNames,
286
+ infiniteScroll,
259
287
  renderHasData,
260
288
  renderNoData,
261
289
  onPageChange,
@@ -273,10 +301,12 @@ const DataViewControl = /* @__PURE__ */ vue.defineComponent({
273
301
  content = [this.c.state.noSort ? null : vue.createVNode(vue.resolveComponent("iBizSortBar"), {
274
302
  "onSortChange": (item, order) => {
275
303
  this.c.setSort(item.key, order);
276
- this.c.load();
304
+ this.c.load({
305
+ isInitialLoad: this.c.model.pagingMode === 2 || this.c.model.pagingMode === 3
306
+ });
277
307
  },
278
308
  "sortItems": this.c.state.sortItems
279
- }, null), items.length > 0 ? this.renderHasData() : this.renderNoData(), this.c.state.enablePagingBar ? vue.createVNode(vue.resolveComponent("iBizPagination"), {
309
+ }, null), items.length > 0 ? this.renderHasData() : this.renderNoData(), this.c.state.enablePagingBar && this.c.model.pagingMode === 1 ? vue.createVNode(vue.resolveComponent("iBizPagination"), {
280
310
  "class": this.ns.e("pagination"),
281
311
  "total": this.c.state.total,
282
312
  "curPage": this.c.state.curPage,
@@ -1 +1 @@
1
- .ibiz-control-dataview{--ibiz-control-dataview-text-color:var(--ibiz-color-text-0);--ibiz-control-dataview-hover-bg-color:var(--ibiz-color-fill-1);--ibiz-control-dataview-active-bg-color:var(--ibiz-color-fill-2);--ibiz-control-dataview-padding:var(--ibiz-spacing-tight) var(--ibiz-spacing-base) 0;--ibiz-control-dataview-page-height:50px;display:flex;flex-flow:column nowrap;align-items:stretch;justify-content:flex-start;height:100%}.ibiz-control-dataview__content{flex-grow:1;height:100%}.ibiz-control-dataview__pagination{flex-shrink:0}.ibiz-control-dataview-scroll{display:flex;flex-wrap:wrap;align-content:flex-start;padding:var(--ibiz-control-dataview-padding);overflow:auto}.ibiz-control-dataview-scroll>*{margin:calc(var(--ibiz-spacing-base-tight)/ 2)}.ibiz-control-dataview-item-col{padding:0 var(--ibiz-spacing-base-tight) var(--ibiz-spacing-base-tight) 0}.ibiz-control-dataview-item{--ibiz-control-dataview-text-color:var(--ibiz-color-text-0);--ibiz-control-dataview-hover-bg-color:var(--ibiz-color-fill-1);--ibiz-control-dataview-active-bg-color:var(--ibiz-color-fill-2);--ibiz-control-dataview-padding:var(--ibiz-spacing-tight) var(--ibiz-spacing-base) 0;--ibiz-control-dataview-page-height:50px;color:var(--ibiz-control-dataview-text-color);cursor:pointer}.ibiz-control-dataview-item:hover{background-color:var(--ibiz-control-dataview-hover-bg-color)}.ibiz-control-dataview-item.is-active{background-color:var(--ibiz-control-dataview-active-bg-color)}.ibiz-control-dataview-item-content{--ibiz-control-dataview-text-color:var(--ibiz-color-text-0);--ibiz-control-dataview-hover-bg-color:var(--ibiz-color-fill-1);--ibiz-control-dataview-active-bg-color:var(--ibiz-color-fill-2);--ibiz-control-dataview-padding:var(--ibiz-spacing-tight) var(--ibiz-spacing-base) 0;--ibiz-control-dataview-page-height:50px}.ibiz-control-dataview-item-content__top--title{text-align:center}.ibiz-control-dataview-item-content__top--description{min-width:150px;text-align:justify;text-justify:newspaper;word-break:break-all}.ibiz-control-dataview-item-content__bottom--actions{display:flex;justify-content:center}.ibiz-control-dataview-group-content{--ibiz-control-dataview-group-item-header-bg-color:transparent;--ibiz-control-dataview-group-item-header-padding:var(--ibiz-spacing-base-tight);--ibiz-control-dataview-group-item-header-border-color:var(--ibiz-color-border);--ibiz-control-dataview-group-item-caption-text-color:var(--ibiz-color-text-0);--ibiz-control-dataview-group-item-caption-font-size:var(--ibiz-font-size-header-5);--ibiz-control-dataview-group-item-caption-font-weight:var(--ibiz-font-weight-bold);--ibiz-control-dataview-group-item-content-bg-color:transparent;--ibiz-control-dataview-group-item-content-padding:var(--ibiz-spacing-tight);width:100%}.ibiz-control-dataview-group-content__item .el-collapse-item__content{display:flex;flex-wrap:wrap}.ibiz-control-dataview-group-content__item--empty{width:100%;text-align:center}.ibiz-control-dataview-group-content__item-header{display:flex;align-items:center;justify-content:space-between;width:100%;padding:var(--ibiz-control-dataview-group-item-header-padding);border-bottom:1px solid var(--ibiz-control-dataview-group-item-header-border-color)}.ibiz-control-dataview-group-content__item-title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:var(--ibiz-control-dataview-group-item-caption-font-size);font-weight:var(--ibiz-control-dataview-group-item-caption-font-weight);color:var(--ibiz-control-dataview-group-item-caption-text-color)}.ibiz-control-dataview-group-content__item-content{display:flex;flex-wrap:wrap;padding:var(--ibiz-control-dataview-group-item-content-padding);background-color:var(--ibiz-control-dataview-group-item-content-bg-color)}.ibiz-control-dataview-group-content__item-content>*{margin:calc(var(--ibiz-spacing-base-tight)/ 2)}.ibiz-control-dataview-group-content__item-row{padding:var(--ibiz-control-dataview-group-item-content-padding)}.ibiz-control-dataview-group-content__item-col{padding:0 var(--ibiz-spacing-base-tight) var(--ibiz-spacing-base-tight) 0}
1
+ .ibiz-control-dataview{--ibiz-control-dataview-text-color:var(--ibiz-color-text-0);--ibiz-control-dataview-hover-bg-color:var(--ibiz-color-fill-1);--ibiz-control-dataview-active-bg-color:var(--ibiz-color-fill-2);--ibiz-control-dataview-padding:var(--ibiz-spacing-tight) var(--ibiz-spacing-base) 0;--ibiz-control-dataview-page-height:50px;display:flex;flex-flow:column nowrap;align-items:stretch;justify-content:flex-start;height:100%}.ibiz-control-dataview__content{flex-grow:1;height:100%}.ibiz-control-dataview__pagination{flex-shrink:0}.ibiz-control-dataview__load-more-button{width:calc(100% - var(--ibiz-spacing-base-tight));text-align:center}.ibiz-control-dataview-scroll{display:flex;flex-wrap:wrap;align-content:flex-start;padding:var(--ibiz-control-dataview-padding);overflow:auto}.ibiz-control-dataview-scroll>*{margin:calc(var(--ibiz-spacing-base-tight)/ 2)}.ibiz-control-dataview-item-col{padding:0 var(--ibiz-spacing-base-tight) var(--ibiz-spacing-base-tight) 0}.ibiz-control-dataview-item{--ibiz-control-dataview-text-color:var(--ibiz-color-text-0);--ibiz-control-dataview-hover-bg-color:var(--ibiz-color-fill-1);--ibiz-control-dataview-active-bg-color:var(--ibiz-color-fill-2);--ibiz-control-dataview-padding:var(--ibiz-spacing-tight) var(--ibiz-spacing-base) 0;--ibiz-control-dataview-page-height:50px;color:var(--ibiz-control-dataview-text-color);cursor:pointer}.ibiz-control-dataview-item:hover{background-color:var(--ibiz-control-dataview-hover-bg-color)}.ibiz-control-dataview-item.is-active{background-color:var(--ibiz-control-dataview-active-bg-color)}.ibiz-control-dataview-item-content{--ibiz-control-dataview-text-color:var(--ibiz-color-text-0);--ibiz-control-dataview-hover-bg-color:var(--ibiz-color-fill-1);--ibiz-control-dataview-active-bg-color:var(--ibiz-color-fill-2);--ibiz-control-dataview-padding:var(--ibiz-spacing-tight) var(--ibiz-spacing-base) 0;--ibiz-control-dataview-page-height:50px}.ibiz-control-dataview-item-content__top--title{text-align:center}.ibiz-control-dataview-item-content__top--description{min-width:150px;text-align:justify;text-justify:newspaper;word-break:break-all}.ibiz-control-dataview-item-content__bottom--actions{display:flex;justify-content:center}.ibiz-control-dataview-group-content{--ibiz-control-dataview-group-item-header-bg-color:transparent;--ibiz-control-dataview-group-item-header-padding:var(--ibiz-spacing-base-tight);--ibiz-control-dataview-group-item-header-border-color:var(--ibiz-color-border);--ibiz-control-dataview-group-item-caption-text-color:var(--ibiz-color-text-0);--ibiz-control-dataview-group-item-caption-font-size:var(--ibiz-font-size-header-5);--ibiz-control-dataview-group-item-caption-font-weight:var(--ibiz-font-weight-bold);--ibiz-control-dataview-group-item-content-bg-color:transparent;--ibiz-control-dataview-group-item-content-padding:var(--ibiz-spacing-tight);width:100%}.ibiz-control-dataview-group-content__item .el-collapse-item__content{display:flex;flex-wrap:wrap}.ibiz-control-dataview-group-content__item--empty{width:100%;text-align:center}.ibiz-control-dataview-group-content__item-header{display:flex;align-items:center;justify-content:space-between;width:100%;padding:var(--ibiz-control-dataview-group-item-header-padding);border-bottom:1px solid var(--ibiz-control-dataview-group-item-header-border-color)}.ibiz-control-dataview-group-content__item-title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:var(--ibiz-control-dataview-group-item-caption-font-size);font-weight:var(--ibiz-control-dataview-group-item-caption-font-weight);color:var(--ibiz-control-dataview-group-item-caption-text-color)}.ibiz-control-dataview-group-content__item-content{display:flex;flex-wrap:wrap;padding:var(--ibiz-control-dataview-group-item-content-padding);background-color:var(--ibiz-control-dataview-group-item-content-bg-color)}.ibiz-control-dataview-group-content__item-content>*{margin:calc(var(--ibiz-spacing-base-tight)/ 2)}.ibiz-control-dataview-group-content__item-row{padding:var(--ibiz-control-dataview-group-item-content-padding)}.ibiz-control-dataview-group-content__item-col{padding:0 var(--ibiz-spacing-base-tight) var(--ibiz-spacing-base-tight) 0}
@@ -0,0 +1,117 @@
1
+ 'use strict';
2
+
3
+ var vue = require('vue');
4
+ var namespace = require('../../node_modules/.pnpm/@ibiz-template_core@0.7.18_axios@1.6.8_lodash-es@4.17.21_qs@6.11.2_qx-util@0.4.8_ramda@0.29.1/node_modules/@ibiz-template/core/out/utils/namespace/namespace.cjs');
5
+
6
+ "use strict";
7
+ function useAppDRTab(c, controlRef, counterData) {
8
+ let resizeObserver = null;
9
+ let lastDrTabWidth = 0;
10
+ const visibleItems = vue.ref([]);
11
+ const moreItems = vue.ref([]);
12
+ const calcDomWidth = (text, style = {}) => {
13
+ let domWidth = 0;
14
+ const dom = document.createElement("span");
15
+ const sonDom = document.createElement("span");
16
+ sonDom.innerHTML = text;
17
+ Object.assign(sonDom.style, style);
18
+ Object.assign(dom.style, {
19
+ width: "auto",
20
+ position: "absolute",
21
+ left: "-9999px"
22
+ });
23
+ dom.appendChild(sonDom);
24
+ document.body.appendChild(dom);
25
+ domWidth = dom.offsetWidth;
26
+ document.body.removeChild(dom);
27
+ return domWidth;
28
+ };
29
+ function updateVisibleItems() {
30
+ const { drTabPages, showMore } = c.state;
31
+ if (!controlRef.value || !showMore || drTabPages.length === 0) {
32
+ visibleItems.value = drTabPages;
33
+ moreItems.value = [];
34
+ return;
35
+ }
36
+ const totalDom = controlRef.value.$el;
37
+ const totalWidth = totalDom.offsetWidth;
38
+ let accumulatedWidth = 0;
39
+ let splitIndex = -1;
40
+ drTabPages.forEach((tab, index) => {
41
+ if (splitIndex === -1) {
42
+ const caption = tab.caption || "";
43
+ const counterNum = tab.counterId ? counterData[tab.counterId] : void 0;
44
+ const fontSize = "var(--".concat(namespace.defaultNamespace, "-font-size-regular)");
45
+ if (counterNum != null && !(!counterNum && counterNum !== 0) && !(tab.counterMode === 1 && counterNum <= 0)) {
46
+ const counterStyle = {
47
+ marginLeft: "var(--".concat(namespace.defaultNamespace, "-spacing-tight)"),
48
+ minWidth: "20px",
49
+ fontSize
50
+ };
51
+ const counterWidth = calcDomWidth(String(counterNum), counterStyle);
52
+ accumulatedWidth += counterWidth;
53
+ }
54
+ const tabStyle = {
55
+ padding: index === 0 ? "0 var(--".concat(namespace.defaultNamespace, "-spacing-base) 0 0") : "0 var(--".concat(namespace.defaultNamespace, "-spacing-base)"),
56
+ fontSize
57
+ };
58
+ const tabWidth = calcDomWidth(caption, tabStyle);
59
+ accumulatedWidth += tabWidth;
60
+ const moreStyle = {
61
+ padding: "0 0 0 var(--".concat(namespace.defaultNamespace, "-spacing-base)"),
62
+ fontSize
63
+ };
64
+ const moreWidth = calcDomWidth(
65
+ "".concat(ibiz.i18n.t("app.more"), " ^"),
66
+ moreStyle
67
+ );
68
+ if (accumulatedWidth + moreWidth > totalWidth) {
69
+ splitIndex = index;
70
+ }
71
+ }
72
+ });
73
+ if (splitIndex !== -1) {
74
+ visibleItems.value = drTabPages.slice(0, splitIndex);
75
+ moreItems.value = drTabPages.slice(splitIndex);
76
+ } else {
77
+ visibleItems.value = drTabPages;
78
+ moreItems.value = [];
79
+ }
80
+ }
81
+ const calcDrTabWidth = () => {
82
+ if (window.ResizeObserver) {
83
+ const drTabDom = controlRef.value.$el;
84
+ if (drTabDom) {
85
+ resizeObserver = new ResizeObserver((entries) => {
86
+ const width = entries[0].contentRect.width;
87
+ if (width !== lastDrTabWidth) {
88
+ updateVisibleItems();
89
+ lastDrTabWidth = width;
90
+ }
91
+ });
92
+ resizeObserver.observe(drTabDom);
93
+ }
94
+ }
95
+ };
96
+ vue.watch(
97
+ () => c.state.drTabPages,
98
+ () => {
99
+ updateVisibleItems();
100
+ },
101
+ { deep: true }
102
+ );
103
+ const stop = vue.watchEffect(() => {
104
+ if (controlRef.value) {
105
+ calcDrTabWidth();
106
+ }
107
+ });
108
+ vue.onUnmounted(() => {
109
+ if (resizeObserver) {
110
+ resizeObserver.disconnect();
111
+ }
112
+ stop();
113
+ });
114
+ return { visibleItems, moreItems };
115
+ }
116
+
117
+ exports.useAppDRTab = useAppDRTab;
@@ -7,11 +7,9 @@ var runtime = require('@ibiz-template/runtime');
7
7
  var ramda = require('ramda');
8
8
  var drtab_controller = require('./drtab.controller.cjs');
9
9
  require('./drtab.css');
10
+ var drtabControl_util = require('./drtab-control.util.cjs');
10
11
 
11
12
  "use strict";
12
- function _isSlot(s) {
13
- return typeof s === "function" || Object.prototype.toString.call(s) === "[object Object]" && !vue.isVNode(s);
14
- }
15
13
  const DRTabControl = /* @__PURE__ */ vue.defineComponent({
16
14
  name: "IBizDrTabControl",
17
15
  props: {
@@ -35,7 +33,12 @@ const DRTabControl = /* @__PURE__ */ vue.defineComponent({
35
33
  const c = vue3Util.useControlController((...args) => new drtab_controller.DRTabController(...args));
36
34
  const ns = vue3Util.useNamespace("control-".concat(c.model.controlType.toLowerCase()));
37
35
  const router = vueRouter.useRouter();
36
+ const controlRef = vue.ref();
38
37
  const counterData = vue.reactive({});
38
+ const {
39
+ visibleItems,
40
+ moreItems
41
+ } = drtabControl_util.useAppDRTab(c, controlRef, counterData);
39
42
  const fn = (counter) => {
40
43
  Object.assign(counterData, counter);
41
44
  };
@@ -52,6 +55,10 @@ const DRTabControl = /* @__PURE__ */ vue.defineComponent({
52
55
  const handleTabChange = () => {
53
56
  c.handleTabChange();
54
57
  };
58
+ const handleMoreChange = (key) => {
59
+ c.state.activeName = key;
60
+ c.handleTabChange();
61
+ };
55
62
  const route = vueRouter.useRoute();
56
63
  let expViewRoutePath = "";
57
64
  if (c.routeDepth) {
@@ -88,50 +95,104 @@ const DRTabControl = /* @__PURE__ */ vue.defineComponent({
88
95
  return {
89
96
  c,
90
97
  ns,
98
+ controlRef,
91
99
  counterData,
92
- handleTabChange
100
+ visibleItems,
101
+ moreItems,
102
+ handleTabChange,
103
+ handleMoreChange
93
104
  };
94
105
  },
95
106
  render() {
96
- let _slot;
97
107
  const {
98
108
  isCreated,
99
- drTabPages,
100
109
  isCalculatedPermission
101
110
  } = this.c.state;
111
+ const moreTab = this.moreItems.find((tab) => tab.tag === this.c.state.activeName) || {};
112
+ const more = vue.createVNode(vue.resolveComponent("el-dropdown"), {
113
+ "trigger": "click",
114
+ "class": this.ns.b("more-dropdown"),
115
+ "popper-class": this.ns.b("more-dropdown-popper")
116
+ }, {
117
+ default: () => {
118
+ return vue.createVNode("div", {
119
+ "class": this.ns.be("more-dropdown", "link"),
120
+ "onClick": (e) => e.stopPropagation()
121
+ }, [vue.createVNode("span", null, [ibiz.i18n.t("app.more"), vue.createTextVNode(" ")]), vue.createVNode("svg", {
122
+ "viewBox": "0 0 16 16",
123
+ "xmlns": "http://www.w3.org/2000/svg",
124
+ "height": "1em",
125
+ "width": "1em"
126
+ }, [vue.createVNode("g", {
127
+ "stroke-width": "1",
128
+ "fill-rule": "evenodd"
129
+ }, [vue.createVNode("path", {
130
+ "d": "M7.978 11.997l-.005.006L2.3 6.33l.83-.831 4.848 4.848L12.826 5.5l.83.83-5.673 5.673-.005-.006z"
131
+ }, null)])])]);
132
+ },
133
+ dropdown: () => {
134
+ return vue.createVNode(vue.resolveComponent("el-dropdown-menu"), null, {
135
+ default: () => {
136
+ return this.moreItems.map((item) => {
137
+ return vue.createVNode(vue.resolveComponent("el-dropdown-item"), {
138
+ "class": [this.c.state.activeName === item.tag ? this.ns.be("more-dropdown-popper", "active") : ""],
139
+ "onClick": () => this.handleMoreChange(item.tag)
140
+ }, {
141
+ default: () => [vue.createVNode("span", {
142
+ "class": [this.ns.be("more-dropdown-popper", "label")]
143
+ }, [vue.createVNode("span", {
144
+ "class": this.ns.bem("more-dropdown-popper", "label", "text"),
145
+ "title": item.caption || ""
146
+ }, [item.caption || ""]), item.counterId && this.counterData[item.counterId] != null && vue.createVNode(vue.resolveComponent("iBizBadge"), {
147
+ "class": this.ns.bem("more-dropdown-popper", "label", "counter"),
148
+ "value": this.counterData[item.counterId],
149
+ "counterMode": item.counterMode
150
+ }, null)])]
151
+ });
152
+ });
153
+ }
154
+ });
155
+ }
156
+ });
102
157
  return vue.createVNode(vue.resolveComponent("iBizControlBase"), {
158
+ "ref": "controlRef",
103
159
  "controller": this.c,
104
- "class": this.ns.b()
160
+ "class": [this.ns.b(), this.moreItems.length > 0 ? this.ns.b("more") : ""]
105
161
  }, {
106
162
  default: () => [isCreated && isCalculatedPermission && vue.createVNode(vue.resolveComponent("el-tabs"), {
107
163
  "modelValue": this.c.state.activeName,
108
164
  "onUpdate:modelValue": ($event) => this.c.state.activeName = $event,
109
165
  "onTabChange": this.handleTabChange
110
- }, _isSlot(_slot = drTabPages.map((tab) => {
111
- const counterNum = tab.counterId ? this.counterData[tab.counterId] : void 0;
112
- if (!tab.hidden) {
113
- return vue.createVNode(vue.resolveComponent("el-tab-pane"), {
114
- "class": this.ns.e("tab-item"),
115
- "label": tab.caption + counterNum,
116
- "disabled": tab.disabled,
117
- "name": tab.tag
118
- }, {
119
- label: () => {
120
- return vue.createVNode("span", {
121
- "class": this.ns.b("label")
122
- }, [vue.createVNode("span", {
123
- "class": this.ns.be("label", "text")
124
- }, [tab.caption]), !ramda.isNil(counterNum) && vue.createVNode(vue.resolveComponent("iBizBadge"), {
125
- "class": this.ns.e("counter"),
126
- "value": counterNum,
127
- "counterMode": tab.counterMode
128
- }, null)]);
129
- }
130
- });
131
- }
132
- return null;
133
- })) ? _slot : {
134
- default: () => [_slot]
166
+ }, {
167
+ default: () => [this.visibleItems.map((tab) => {
168
+ const counterNum = tab.counterId ? this.counterData[tab.counterId] : void 0;
169
+ if (!tab.hidden) {
170
+ return vue.createVNode(vue.resolveComponent("el-tab-pane"), {
171
+ "class": this.ns.e("tab-item"),
172
+ "label": tab.caption + counterNum,
173
+ "disabled": tab.disabled,
174
+ "name": tab.tag
175
+ }, {
176
+ label: () => {
177
+ return vue.createVNode("span", {
178
+ "class": this.ns.b("label")
179
+ }, [vue.createVNode("span", {
180
+ "class": this.ns.be("label", "text")
181
+ }, [tab.caption]), !ramda.isNil(counterNum) && vue.createVNode(vue.resolveComponent("iBizBadge"), {
182
+ "class": this.ns.e("counter"),
183
+ "value": counterNum,
184
+ "counterMode": tab.counterMode
185
+ }, null)]);
186
+ }
187
+ });
188
+ }
189
+ return null;
190
+ }), this.moreItems.length > 0 && vue.createVNode(vue.resolveComponent("el-tab-pane"), {
191
+ "label": "",
192
+ "name": moreTab.tag
193
+ }, {
194
+ label: () => more
195
+ })]
135
196
  })]
136
197
  });
137
198
  }
@@ -86,6 +86,7 @@ class DRTabController extends runtime.ControlController {
86
86
  initState() {
87
87
  super.initState();
88
88
  this.state.drTabPages = [];
89
+ this.state.showMore = false;
89
90
  }
90
91
  /**
91
92
  * 创建完成
@@ -97,6 +98,18 @@ class DRTabController extends runtime.ControlController {
97
98
  await super.onCreated();
98
99
  await this.initCounter();
99
100
  }
101
+ /**
102
+ * 部件参数解析
103
+ *
104
+ * @protected
105
+ * @memberof ControlController
106
+ */
107
+ handleControlParams() {
108
+ super.handleControlParams();
109
+ if (this.controlParams.showmore) {
110
+ this.state.showMore = this.controlParams.showmore === "true";
111
+ }
112
+ }
100
113
  /**
101
114
  * 通过计数器数据,计算项状态
102
115
  *