@ibiz-template/vue3-components 0.7.24-alpha.0 → 0.7.24-alpha.2

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 (55) hide show
  1. package/dist/{index-d_MgYoar.js → index--XeT2CTZ.js} +1 -1
  2. package/dist/index-UoIBnm4j.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-7cpIakTB.js → xlsx-util-mYK_A5hQ.js} +1 -1
  7. package/es/common/action-toolbar/action-toolbar.mjs +2 -2
  8. package/es/control/context-menu/context-menu.mjs +1 -1
  9. package/es/control/data-view/data-view.css +1 -1
  10. package/es/control/data-view/data-view.d.ts +1 -0
  11. package/es/control/data-view/data-view.mjs +35 -5
  12. package/es/control/data-view/index.d.ts +1 -0
  13. package/es/control/drtab/drtab-control.util.d.ts +17 -0
  14. package/es/control/drtab/drtab-control.util.mjs +115 -0
  15. package/es/control/drtab/drtab.controller.d.ts +7 -0
  16. package/es/control/drtab/drtab.controller.mjs +13 -0
  17. package/es/control/drtab/drtab.css +1 -1
  18. package/es/control/drtab/drtab.d.ts +4 -0
  19. package/es/control/drtab/drtab.mjs +94 -33
  20. package/es/control/drtab/index.d.ts +4 -0
  21. package/es/control/form/form-detail/form-mdctrl/form-mdctrl-repeater/repeater-grid/repeater-grid.d.ts +1 -0
  22. package/es/control/grid/grid/grid-control.util.mjs +3 -1
  23. package/es/control/grid/grid/grid.css +1 -1
  24. package/es/control/grid/grid/grid.d.ts +3 -0
  25. package/es/control/grid/grid/grid.mjs +43 -4
  26. package/es/control/grid/grid/index.d.ts +3 -0
  27. package/es/control/list/index.d.ts +1 -0
  28. package/es/control/list/list.css +1 -1
  29. package/es/control/list/list.d.ts +1 -0
  30. package/es/control/list/list.mjs +35 -7
  31. package/es/editor/switch/ibiz-switch/ibiz-switch.mjs +7 -2
  32. package/es/locale/en/index.d.ts +2 -1
  33. package/es/locale/en/index.mjs +2 -1
  34. package/es/locale/zh-CN/index.d.ts +2 -1
  35. package/es/locale/zh-CN/index.mjs +2 -1
  36. 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
  37. package/lib/common/action-toolbar/action-toolbar.cjs +2 -2
  38. package/lib/control/context-menu/context-menu.cjs +1 -1
  39. package/lib/control/data-view/data-view.cjs +34 -4
  40. package/lib/control/data-view/data-view.css +1 -1
  41. package/lib/control/drtab/drtab-control.util.cjs +117 -0
  42. package/lib/control/drtab/drtab.cjs +93 -32
  43. package/lib/control/drtab/drtab.controller.cjs +13 -0
  44. package/lib/control/drtab/drtab.css +1 -1
  45. package/lib/control/grid/grid/grid-control.util.cjs +3 -1
  46. package/lib/control/grid/grid/grid.cjs +42 -3
  47. package/lib/control/grid/grid/grid.css +1 -1
  48. package/lib/control/list/list.cjs +34 -6
  49. package/lib/control/list/list.css +1 -1
  50. package/lib/editor/switch/ibiz-switch/ibiz-switch.cjs +6 -1
  51. package/lib/locale/en/index.cjs +2 -1
  52. package/lib/locale/zh-CN/index.cjs +2 -1
  53. 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
  54. package/package.json +6 -6
  55. package/dist/index-A47VV-n6.js +0 -4
@@ -1,7 +1,8 @@
1
- import { resolveComponent, mergeProps, h, createVNode, createTextVNode, renderSlot, onUnmounted, defineComponent } from 'vue';
1
+ import { isVNode, resolveComponent, mergeProps, h, createVNode, createTextVNode, renderSlot, onUnmounted, computed, ref, watch, resolveDirective, withDirectives, defineComponent } from 'vue';
2
2
  import { useControlController, useNamespace, useUIStore } from '@ibiz-template/vue3-util';
3
3
  import { ScriptFactory, GridController } from '@ibiz-template/runtime';
4
4
  import { NOOP } from '@ibiz-template/core';
5
+ import { createUUID } from 'qx-util';
5
6
  import { useITableEvent, useGridHeaderStyle, useGridDraggable, useAppGridBase } from './grid-control.util.mjs';
6
7
  import './grid.css';
7
8
  import { useRowEditPopover } from '../row-edit-popover/use-row-edit-popover.mjs';
@@ -9,6 +10,9 @@ import '../../../util/index.mjs';
9
10
  import { usePagination } from '../../../util/pagination/use-pagination.mjs';
10
11
 
11
12
  "use strict";
13
+ function _isSlot(s) {
14
+ return typeof s === "function" || Object.prototype.toString.call(s) === "[object Object]" && !isVNode(s);
15
+ }
12
16
  function renderAttrs(model, params) {
13
17
  var _a;
14
18
  const attrs = {};
@@ -269,6 +273,25 @@ const GridControl = /* @__PURE__ */ defineComponent({
269
273
  cleanup();
270
274
  }
271
275
  });
276
+ const isLodeMoreDisabled = computed(() => {
277
+ if (c.model.pagingMode !== 2) {
278
+ return true;
279
+ }
280
+ return c.state.items.length >= c.state.total || c.state.isLoading || c.state.total <= c.state.size;
281
+ });
282
+ const infiniteScroll = ref();
283
+ const infiniteScrollKey = ref(createUUID());
284
+ watch(() => c.state.curPage, () => {
285
+ var _a, _b;
286
+ if (c.state.curPage === 1 && (c.model.pagingMode === 2 || c.model.pagingMode === 3)) {
287
+ infiniteScrollKey.value = createUUID();
288
+ const containerEl = (_b = (_a = infiniteScroll.value) == null ? void 0 : _a.ElInfiniteScroll) == null ? void 0 : _b.containerEl;
289
+ if (containerEl) {
290
+ containerEl.lastScrollTop = 0;
291
+ containerEl.scrollTop = 0;
292
+ }
293
+ }
294
+ });
272
295
  return {
273
296
  c,
274
297
  ns,
@@ -291,7 +314,10 @@ const GridControl = /* @__PURE__ */ defineComponent({
291
314
  defaultSort,
292
315
  renderBatchToolBar,
293
316
  headerCssVars,
294
- renderDragIconColumn
317
+ renderDragIconColumn,
318
+ isLodeMoreDisabled,
319
+ infiniteScroll,
320
+ infiniteScrollKey
295
321
  };
296
322
  },
297
323
  render() {
@@ -334,9 +360,22 @@ const GridControl = /* @__PURE__ */ defineComponent({
334
360
  })];
335
361
  },
336
362
  append: () => {
337
- return this.renderPopover();
363
+ let _slot;
364
+ return [withDirectives(createVNode("div", {
365
+ "ref": "infiniteScroll",
366
+ "key": this.infiniteScrollKey,
367
+ "infinite-scroll-distance": 10,
368
+ "infinite-scroll-disabled": this.isLodeMoreDisabled
369
+ }, null), [[resolveDirective("infinite-scroll"), () => this.c.loadMore()]]), this.c.model.pagingMode === 3 && !(this.c.state.items.length >= this.c.state.total || this.c.state.isLoading || this.c.state.total <= this.c.state.size) && createVNode("div", {
370
+ "class": this.ns.e("load-more-button")
371
+ }, [createVNode(resolveComponent("el-button"), {
372
+ "text": true,
373
+ "onClick": () => this.c.loadMore()
374
+ }, _isSlot(_slot = ibiz.i18n.t("control.common.loadMore")) ? _slot : {
375
+ default: () => [_slot]
376
+ })]), this.renderPopover()];
338
377
  }
339
- }), this.c.state.enablePagingBar && createVNode(resolveComponent("iBizPagination"), {
378
+ }), this.c.state.enablePagingBar && this.c.model.pagingMode === 1 && createVNode(resolveComponent("iBizPagination"), {
340
379
  "total": state.total,
341
380
  "curPage": state.curPage,
342
381
  "size": state.size,
@@ -95,6 +95,9 @@ export declare const IBizGridControl: import("@ibiz-template/vue3-util").TypeWit
95
95
  }> | undefined;
96
96
  headerCssVars: IData;
97
97
  renderDragIconColumn: () => JSX.Element;
98
+ isLodeMoreDisabled: import("vue").ComputedRef<boolean>;
99
+ infiniteScroll: import("vue").Ref<IData | undefined>;
100
+ infiniteScrollKey: import("vue").Ref<string>;
98
101
  }, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
99
102
  modelData: {
100
103
  type: import("vue").PropType<import("@ibiz/model-core").IDEGrid>;
@@ -33,6 +33,7 @@ export declare const IBizListControl: import("@ibiz-template/vue3-util").TypeWit
33
33
  }, {
34
34
  c: import("@ibiz-template/runtime").ListController;
35
35
  ns: import("@ibiz-template/core").Namespace;
36
+ infiniteScroll: import("vue").Ref<IData | undefined>;
36
37
  renderListContent: () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
37
38
  [key: string]: any;
38
39
  }>;
@@ -1 +1 @@
1
- .ibiz-control-list-item{--ibiz-control-list-text-color:var(--ibiz-color-text-0);--ibiz-control-list-load-more-color:var(--ibiz-color-text-2);--ibiz-control-list-hover-bg-color:var(--ibiz-color-fill-1);--ibiz-control-list-active-bg-color:var(--ibiz-color-fill-2);--ibiz-control-list-font-weight:var(--ibiz-font-weight-regular);--ibiz-control-list-padding:var(--ibiz-spacing-tight) var(--ibiz-spacing-base-tight);min-height:var(--ibiz-control-list-item-height);padding:var(--ibiz-control-list-padding);font-weight:var(--ibiz-control-list-font-weight);color:var(--ibiz-control-list-text-color);cursor:pointer}.ibiz-control-list-item:hover{background-color:var(--ibiz-control-list-hover-bg-color)}.ibiz-control-list-item.is-active{background-color:var(--ibiz-control-list-active-bg-color)}.ibiz-control-list{--ibiz-control-list-text-color:var(--ibiz-color-text-0);--ibiz-control-list-load-more-color:var(--ibiz-color-text-2);--ibiz-control-list-hover-bg-color:var(--ibiz-color-fill-1);--ibiz-control-list-active-bg-color:var(--ibiz-color-fill-2);--ibiz-control-list-font-weight:var(--ibiz-font-weight-regular);--ibiz-control-list-padding:var(--ibiz-spacing-tight) var(--ibiz-spacing-base-tight);display:flex;flex-flow:column nowrap;align-items:stretch;justify-content:flex-start;height:100%}.ibiz-control-list__load-more{color:var(--ibiz-control-list-load-more-color);text-align:center;cursor:pointer}.ibiz-control-list .ibiz-control-list-content{flex-grow:1}.ibiz-control-list-scroll{height:100%;overflow:auto}
1
+ .ibiz-control-list-item{--ibiz-control-list-text-color:var(--ibiz-color-text-0);--ibiz-control-list-load-more-color:var(--ibiz-color-text-2);--ibiz-control-list-hover-bg-color:var(--ibiz-color-fill-1);--ibiz-control-list-active-bg-color:var(--ibiz-color-fill-2);--ibiz-control-list-font-weight:var(--ibiz-font-weight-regular);--ibiz-control-list-padding:var(--ibiz-spacing-tight) var(--ibiz-spacing-base-tight);min-height:var(--ibiz-control-list-item-height);padding:var(--ibiz-control-list-padding);font-weight:var(--ibiz-control-list-font-weight);color:var(--ibiz-control-list-text-color);cursor:pointer}.ibiz-control-list-item:hover{background-color:var(--ibiz-control-list-hover-bg-color)}.ibiz-control-list-item.is-active{background-color:var(--ibiz-control-list-active-bg-color)}.ibiz-control-list{--ibiz-control-list-text-color:var(--ibiz-color-text-0);--ibiz-control-list-load-more-color:var(--ibiz-color-text-2);--ibiz-control-list-hover-bg-color:var(--ibiz-color-fill-1);--ibiz-control-list-active-bg-color:var(--ibiz-color-fill-2);--ibiz-control-list-font-weight:var(--ibiz-font-weight-regular);--ibiz-control-list-padding:var(--ibiz-spacing-tight) var(--ibiz-spacing-base-tight);display:flex;flex-flow:column nowrap;align-items:stretch;justify-content:flex-start;height:100%}.ibiz-control-list__load-more{color:var(--ibiz-control-list-load-more-color);text-align:center;cursor:pointer}.ibiz-control-list__load-more-button{padding:var(--ibiz-control-list-padding);text-align:center}.ibiz-control-list .ibiz-control-list-content{flex-grow:1}.ibiz-control-list-scroll{height:100%;overflow:auto}
@@ -52,6 +52,7 @@ export declare const ListControl: import("vue").DefineComponent<{
52
52
  }, {
53
53
  c: ListController;
54
54
  ns: import("@ibiz-template/core").Namespace;
55
+ infiniteScroll: import("vue").Ref<IData | undefined>;
55
56
  renderListContent: () => VNode;
56
57
  renderNoData: () => VNode | undefined;
57
58
  renderBatchToolBar: () => VNode | undefined;
@@ -1,6 +1,7 @@
1
- import { isVNode, computed, resolveComponent, createVNode, resolveDirective, withDirectives, defineComponent } from 'vue';
1
+ import { isVNode, computed, ref, watch, resolveComponent, createVNode, resolveDirective, withDirectives, defineComponent } from 'vue';
2
2
  import { useControlController, useNamespace } from '@ibiz-template/vue3-util';
3
3
  import { isNil } from 'lodash-es';
4
+ import { createUUID } from 'qx-util';
4
5
  import { ListController } from '@ibiz-template/runtime';
5
6
  import './list.css';
6
7
  import '../../util/index.mjs';
@@ -72,8 +73,24 @@ const ListControl = /* @__PURE__ */ defineComponent({
72
73
  if (c.model.enablePagingBar === true) {
73
74
  return true;
74
75
  }
76
+ if (c.model.pagingMode !== 2) {
77
+ return true;
78
+ }
75
79
  return c.state.items.length >= c.state.total || c.state.isLoading || c.state.total <= c.state.size;
76
80
  });
81
+ const infiniteScroll = ref();
82
+ const infiniteScrollKey = ref(createUUID());
83
+ watch(() => c.state.curPage, () => {
84
+ var _a, _b;
85
+ if (c.state.curPage === 1 && (c.model.pagingMode === 2 || c.model.pagingMode === 3)) {
86
+ infiniteScrollKey.value = createUUID();
87
+ const containerEl = (_b = (_a = infiniteScroll.value) == null ? void 0 : _a.ElInfiniteScroll) == null ? void 0 : _b.containerEl;
88
+ if (containerEl) {
89
+ containerEl.lastScrollTop = 0;
90
+ containerEl.scrollTop = 0;
91
+ }
92
+ }
93
+ });
77
94
  const renderPanelItem = (item, modelData) => {
78
95
  const {
79
96
  context,
@@ -119,6 +136,7 @@ const ListControl = /* @__PURE__ */ defineComponent({
119
136
  });
120
137
  };
121
138
  const renderListContent = () => {
139
+ let _slot;
122
140
  if (c.model.enableGroup && !c.state.isSimple) {
123
141
  return createVNode(resolveComponent("el-collapse"), {
124
142
  "class": [ns.b("group-content"), ns.b("content")]
@@ -137,12 +155,21 @@ const ListControl = /* @__PURE__ */ defineComponent({
137
155
  return withDirectives(createVNode("div", {
138
156
  "class": [ns.b("scroll"), ns.b("content")],
139
157
  "infinite-scroll-distance": 10,
140
- "infinite-scroll-disabled": isLodeMoreDisabled.value
158
+ "infinite-scroll-disabled": isLodeMoreDisabled.value,
159
+ "ref": "infiniteScroll",
160
+ "key": infiniteScrollKey.value
141
161
  }, [c.state.items.map((item) => {
142
162
  return createVNode("div", {
143
163
  "class": [ns.b("scroll-item")]
144
164
  }, [panel ? renderPanelItem(item, panel) : renderDefaultItem(item)]);
145
- })]), [[resolveDirective("infinite-scroll"), () => c.loadMore()]]);
165
+ }), c.model.pagingMode === 3 && !(c.state.items.length >= c.state.total || c.state.isLoading || c.state.total <= c.state.size) && createVNode("div", {
166
+ "class": ns.e("load-more-button")
167
+ }, [createVNode(resolveComponent("el-button"), {
168
+ "text": true,
169
+ "onClick": () => c.loadMore()
170
+ }, _isSlot(_slot = ibiz.i18n.t("control.common.loadMore")) ? _slot : {
171
+ default: () => [_slot]
172
+ })])]), [[resolveDirective("infinite-scroll"), () => c.loadMore()]]);
146
173
  };
147
174
  const renderQuickToolBar = () => {
148
175
  var _a;
@@ -175,7 +202,7 @@ const ListControl = /* @__PURE__ */ defineComponent({
175
202
  }, null)]);
176
203
  };
177
204
  const renderNoData = () => {
178
- let _slot;
205
+ let _slot2;
179
206
  const {
180
207
  isLoaded
181
208
  } = c.state;
@@ -187,13 +214,14 @@ const ListControl = /* @__PURE__ */ defineComponent({
187
214
  "text": c.model.emptyText,
188
215
  "emptyTextLanguageRes": c.model.emptyTextLanguageRes,
189
216
  "enableShowImage": c.state.hideNoDataImage
190
- }, _isSlot(_slot = renderQuickToolBar()) ? _slot : {
191
- default: () => [_slot]
217
+ }, _isSlot(_slot2 = renderQuickToolBar()) ? _slot2 : {
218
+ default: () => [_slot2]
192
219
  });
193
220
  };
194
221
  return {
195
222
  c,
196
223
  ns,
224
+ infiniteScroll,
197
225
  renderListContent,
198
226
  renderNoData,
199
227
  renderBatchToolBar,
@@ -205,7 +233,7 @@ const ListControl = /* @__PURE__ */ defineComponent({
205
233
  render() {
206
234
  let content = null;
207
235
  if (this.c.state.isCreated) {
208
- content = [this.c.state.items.length > 0 ? this.renderListContent() : this.renderNoData(), this.renderBatchToolBar(), this.c.state.enablePagingBar ? createVNode(resolveComponent("iBizPagination"), {
236
+ content = [this.c.state.items.length > 0 ? this.renderListContent() : this.renderNoData(), this.renderBatchToolBar(), this.c.state.enablePagingBar && this.c.model.pagingMode === 1 ? createVNode(resolveComponent("iBizPagination"), {
209
237
  "class": this.ns.e("pagination"),
210
238
  "total": this.c.state.total,
211
239
  "curPage": this.c.state.curPage,
@@ -1,5 +1,5 @@
1
1
  import { ref, computed, watch, resolveComponent, mergeProps, createVNode, defineComponent } from 'vue';
2
- import { getSwitchProps, getEditorEmits, useNamespace, useFocusAndBlur } from '@ibiz-template/vue3-util';
2
+ import { getSwitchProps, getEditorEmits, useNamespace, useAutoFocusBlur, useFocusAndBlur } from '@ibiz-template/vue3-util';
3
3
  import './ibiz-switch.css';
4
4
 
5
5
  "use strict";
@@ -65,13 +65,18 @@ const IBizSwitch = /* @__PURE__ */ defineComponent({
65
65
  }
66
66
  return props.disabled || props.readonly;
67
67
  });
68
+ const {
69
+ useInFocusAndBlur,
70
+ useInValueChange
71
+ } = useAutoFocusBlur(props, emit);
68
72
  const handleChange = (currentValue) => {
69
73
  const emitValue = currentValue === true ? 1 : 0;
70
74
  emit("change", emitValue);
75
+ useInValueChange();
71
76
  };
72
77
  const {
73
78
  componentRef: editorRef
74
- } = useFocusAndBlur(() => emit("focus"), () => emit("blur"));
79
+ } = useFocusAndBlur(() => emit("focus"), () => useInFocusAndBlur());
75
80
  return {
76
81
  ns,
77
82
  currentVal,
@@ -472,7 +472,7 @@ declare const _default: {
472
472
  loginFailure: string;
473
473
  logoutFailure: string;
474
474
  noFound: string;
475
- masterState: string;
475
+ mainState: string;
476
476
  operationIdentifier: string;
477
477
  matchMasterState: string;
478
478
  masterStatePermissions: string;
@@ -893,6 +893,7 @@ declare const _default: {
893
893
  gridRowSelect: string;
894
894
  gridRowSelectDesc: string;
895
895
  };
896
+ loadMore: string;
896
897
  };
897
898
  menu: {
898
899
  noSupportAlign: string;
@@ -234,7 +234,8 @@ var index = {
234
234
  gridRowHoverDesc: "Table row suspension color, background color when a row is hover",
235
235
  gridRowSelect: "Select color for table row",
236
236
  gridRowSelectDesc: "Table row selected color, background color when a row is selected"
237
- }
237
+ },
238
+ loadMore: "Load more"
238
239
  },
239
240
  menu: {
240
241
  noSupportAlign: "The menu direction {align} is not supported temporarily",
@@ -470,7 +470,7 @@ declare const _default: {
470
470
  loginFailure: string;
471
471
  logoutFailure: string;
472
472
  noFound: string;
473
- masterState: string;
473
+ mainState: string;
474
474
  operationIdentifier: string;
475
475
  matchMasterState: string;
476
476
  masterStatePermissions: string;
@@ -891,6 +891,7 @@ declare const _default: {
891
891
  gridRowSelect: string;
892
892
  gridRowSelectDesc: string;
893
893
  };
894
+ loadMore: string;
894
895
  };
895
896
  menu: {
896
897
  noSupportAlign: string;
@@ -234,7 +234,8 @@ var index = {
234
234
  gridRowHoverDesc: "\u8868\u683C\u884C\u60AC\u6D6E\u8272, \u5F53\u67D0\u4E00\u884Chover\u65F6\u80CC\u666F\u8272",
235
235
  gridRowSelect: "\u8868\u683C\u884C\u9009\u4E2D\u8272",
236
236
  gridRowSelectDesc: "\u8868\u683C\u884C\u9009\u4E2D\u8272\uFF0C\u5F53\u67D0\u4E00\u884C\u9009\u4E2D\u65F6\u80CC\u666F\u8272"
237
- }
237
+ },
238
+ loadMore: "\u52A0\u8F7D\u66F4\u591A"
238
239
  },
239
240
  menu: {
240
241
  noSupportAlign: "\u6682\u672A\u652F\u6301\u83DC\u5355\u65B9\u5411\u4E3A {align}",
@@ -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 };
@@ -145,7 +145,7 @@ const IBizActionToolbar = /* @__PURE__ */ vue.defineComponent({
145
145
  }, {
146
146
  icon: () => vue.createVNode("ion-icon", {
147
147
  "class": this.ns.e("icon"),
148
- "name": "ellipsis-vertical-outline",
148
+ "name": "ellipsis-vertical",
149
149
  "title": ibiz.i18n.t("component.actionToolbar.more")
150
150
  }, null)
151
151
  }), vue.createVNode(vue.resolveComponent("el-popover"), {
@@ -180,7 +180,7 @@ const IBizActionToolbar = /* @__PURE__ */ vue.defineComponent({
180
180
  "class": this.ns.e("caption")
181
181
  }, [this.caption, vue.createVNode("ion-icon", {
182
182
  "class": this.ns.e("caption-icon"),
183
- "name": "ellipsis-vertical-outline"
183
+ "name": "ellipsis-vertical"
184
184
  }, null)]),
185
185
  dropdown: () => vue.createVNode(vue.resolveComponent("el-dropdown-menu"), null, {
186
186
  default: () => [details.length > 0 && details.map((detail) => {
@@ -216,7 +216,7 @@ const ContextMenuControl = /* @__PURE__ */ vue.defineComponent({
216
216
  }, {
217
217
  icon: () => vue.createVNode("ion-icon", {
218
218
  "class": this.ns.e("icon"),
219
- "name": "ellipsis-vertical-outline"
219
+ "name": "ellipsis-vertical"
220
220
  }, null)
221
221
  }), vue.createVNode(vue.resolveComponent("el-popover"), {
222
222
  "placement": "bottom-start",
@@ -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}