@ibiz-template/mob-vue3-components 0.0.1 → 0.0.3

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 (98) hide show
  1. package/dist/index.min.css +1 -1
  2. package/dist/index.system.min.js +6 -6
  3. package/dist/index.system.min.js.map +1 -1
  4. package/es/control/dashboard/index.mjs +4 -1
  5. package/es/control/dashboard/portlet/container-portlet/container-portlet.provider.mjs +1 -5
  6. package/es/control/dashboard/portlet/index.d.ts +1 -0
  7. package/es/control/dashboard/portlet/index.mjs +2 -0
  8. package/es/control/dashboard/portlet/menu-portlet/menu-portlet.provider.mjs +1 -5
  9. package/es/control/dashboard/portlet/view-portlet/index.d.ts +24 -0
  10. package/es/control/dashboard/portlet/view-portlet/index.mjs +12 -0
  11. package/es/control/dashboard/portlet/view-portlet/view-portlet.d.ts +25 -0
  12. package/es/control/dashboard/portlet/view-portlet/view-portlet.mjs +50 -0
  13. package/es/control/dashboard/portlet/view-portlet/view-portlet.provider.d.ts +15 -0
  14. package/es/control/dashboard/portlet/view-portlet/view-portlet.provider.mjs +21 -0
  15. package/es/control/form/edit-form/edit-form.d.ts +1 -1
  16. package/es/control/form/edit-form/index.d.ts +1 -1
  17. package/es/control/form/form-detail/form-druipart/form-druipart.mjs +1 -1
  18. package/es/control/form/form-detail/form-item/form-item-container/form-item-container.css +1 -1
  19. package/es/control/form/form-detail/form-mdctrl/form-mdctrl-md/form-mdctrl-md.css +1 -1
  20. package/es/control/form/form-detail/form-mdctrl/form-mdctrl-md/form-mdctrl-md.mjs +4 -4
  21. package/es/control/form/form-detail/form-mdctrl/form-mdctrl.css +1 -1
  22. package/es/control/form/form-detail/form-mdctrl/mdctrl-container/mdctrl-container.d.ts +2 -2
  23. package/es/control/form/form-detail/form-mdctrl/mdctrl-container/mdctrl-container.mjs +1 -1
  24. package/es/control/index.d.ts +2 -2
  25. package/es/control/index.mjs +6 -4
  26. package/es/control/list/{index.d.ts → list/index.d.ts} +23 -3
  27. package/es/control/list/list/list.css +1 -0
  28. package/es/control/list/{list.d.ts → list/list.d.ts} +23 -3
  29. package/es/control/list/{list.mjs → list/list.mjs} +37 -18
  30. package/es/control/list/list-render-util.d.ts +23 -0
  31. package/es/control/list/list-render-util.mjs +100 -0
  32. package/es/control/{md-ctrl → list/md-ctrl}/index.d.ts +10 -1
  33. package/es/control/list/md-ctrl/md-ctrl.css +1 -0
  34. package/es/control/{md-ctrl → list/md-ctrl}/md-ctrl.d.ts +14 -3
  35. package/es/control/{md-ctrl → list/md-ctrl}/md-ctrl.mjs +13 -87
  36. package/es/control/toolbar/index.d.ts +1 -1
  37. package/es/control/toolbar/toolbar.d.ts +1 -1
  38. package/es/editor/data-picker/ibiz-picker-select-view/ibiz-picker-select-view.d.ts +1 -1
  39. package/es/editor/dropdown-list/ibiz-dropdown/ibiz-dropdown.mjs +1 -0
  40. package/es/editor/upload/ibiz-file-upload/ibiz-file-upload.css +1 -1
  41. package/es/editor/upload/ibiz-file-upload/ibiz-file-upload.d.ts +3 -0
  42. package/es/editor/upload/ibiz-file-upload/ibiz-file-upload.mjs +40 -9
  43. package/es/editor/upload/upload-editor.controller.d.ts +8 -0
  44. package/es/editor/upload/upload-editor.controller.mjs +50 -0
  45. package/es/editor/upload/use/use-van-upload.mjs +3 -14
  46. package/es/index.mjs +3 -2
  47. package/es/panel-component/index.mjs +3 -1
  48. package/es/panel-component/panel-button/panel-button.controller.mjs +12 -8
  49. package/es/util/confirm-util/confirm-util.d.ts +17 -0
  50. package/es/util/confirm-util/confirm-util.mjs +77 -0
  51. package/es/util/index.d.ts +1 -0
  52. package/es/util/index.mjs +1 -0
  53. package/es/view-engine/mob-mpickup-view-engine.mjs +2 -0
  54. package/lib/control/dashboard/index.cjs +5 -0
  55. package/lib/control/dashboard/portlet/container-portlet/container-portlet.provider.cjs +1 -5
  56. package/lib/control/dashboard/portlet/index.cjs +4 -0
  57. package/lib/control/dashboard/portlet/menu-portlet/menu-portlet.provider.cjs +1 -5
  58. package/lib/control/dashboard/portlet/view-portlet/index.cjs +18 -0
  59. package/lib/control/dashboard/portlet/view-portlet/view-portlet.cjs +52 -0
  60. package/lib/control/dashboard/portlet/view-portlet/view-portlet.provider.cjs +23 -0
  61. package/lib/control/form/form-detail/form-druipart/form-druipart.cjs +1 -1
  62. package/lib/control/form/form-detail/form-item/form-item-container/form-item-container.css +1 -1
  63. package/lib/control/form/form-detail/form-mdctrl/form-mdctrl-md/form-mdctrl-md.cjs +4 -4
  64. package/lib/control/form/form-detail/form-mdctrl/form-mdctrl-md/form-mdctrl-md.css +1 -1
  65. package/lib/control/form/form-detail/form-mdctrl/form-mdctrl.css +1 -1
  66. package/lib/control/form/form-detail/form-mdctrl/mdctrl-container/mdctrl-container.cjs +1 -1
  67. package/lib/control/index.cjs +14 -10
  68. package/lib/control/list/{list.cjs → list/list.cjs} +36 -17
  69. package/lib/control/list/list/list.css +1 -0
  70. package/lib/control/list/list-render-util.cjs +102 -0
  71. package/lib/control/{md-ctrl → list/md-ctrl}/md-ctrl.cjs +12 -86
  72. package/lib/control/list/md-ctrl/md-ctrl.css +1 -0
  73. package/lib/editor/dropdown-list/ibiz-dropdown/ibiz-dropdown.cjs +1 -0
  74. package/lib/editor/upload/ibiz-file-upload/ibiz-file-upload.cjs +39 -8
  75. package/lib/editor/upload/ibiz-file-upload/ibiz-file-upload.css +1 -1
  76. package/lib/editor/upload/upload-editor.controller.cjs +50 -0
  77. package/lib/editor/upload/use/use-van-upload.cjs +3 -14
  78. package/lib/index.cjs +4 -2
  79. package/lib/panel-component/index.cjs +2 -0
  80. package/lib/panel-component/panel-button/panel-button.controller.cjs +12 -8
  81. package/lib/util/confirm-util/confirm-util.cjs +79 -0
  82. package/lib/util/index.cjs +2 -0
  83. package/lib/view-engine/mob-mpickup-view-engine.cjs +2 -0
  84. package/package.json +6 -6
  85. package/es/control/list/list.css +0 -1
  86. package/es/control/md-ctrl/md-ctrl.css +0 -1
  87. package/lib/control/list/list.css +0 -1
  88. package/lib/control/md-ctrl/md-ctrl.css +0 -1
  89. /package/es/control/list/{index.mjs → list/index.mjs} +0 -0
  90. /package/es/control/list/{list.provider.d.ts → list/list.provider.d.ts} +0 -0
  91. /package/es/control/list/{list.provider.mjs → list/list.provider.mjs} +0 -0
  92. /package/es/control/{md-ctrl → list/md-ctrl}/index.mjs +0 -0
  93. /package/es/control/{md-ctrl → list/md-ctrl}/md-ctrl.provider.d.ts +0 -0
  94. /package/es/control/{md-ctrl → list/md-ctrl}/md-ctrl.provider.mjs +0 -0
  95. /package/lib/control/list/{index.cjs → list/index.cjs} +0 -0
  96. /package/lib/control/list/{list.provider.cjs → list/list.provider.cjs} +0 -0
  97. /package/lib/control/{md-ctrl → list/md-ctrl}/index.cjs +0 -0
  98. /package/lib/control/{md-ctrl → list/md-ctrl}/md-ctrl.provider.cjs +0 -0
@@ -0,0 +1,100 @@
1
+ import { isVNode, resolveComponent, createVNode, createTextVNode } from 'vue';
2
+
3
+ "use strict";
4
+ function _isSlot(s) {
5
+ return typeof s === "function" || Object.prototype.toString.call(s) === "[object Object]" && !isVNode(s);
6
+ }
7
+ function useListRender(props, c, ns) {
8
+ const isSelect = (row) => {
9
+ const findIndex = c.state.selectedData.findIndex((data) => {
10
+ return data.srfkey === row.srfkey;
11
+ });
12
+ return findIndex !== -1;
13
+ };
14
+ const calcItemClass = (row) => {
15
+ const select = isSelect(row);
16
+ const itemClass = [ns.b("item"), ns.is("active", select)];
17
+ return itemClass;
18
+ };
19
+ const renderRightSlot = (row) => {
20
+ const select = isSelect(row);
21
+ return createVNode(resolveComponent("van-radio"), {
22
+ "class": ns.bm("item", "right"),
23
+ "checked": select
24
+ }, null);
25
+ };
26
+ const renderIcon = (row) => {
27
+ return createVNode("img", {
28
+ "class": ns.b("image"),
29
+ "src": row.image,
30
+ "alt": ""
31
+ }, null);
32
+ };
33
+ const renderItemContent = (row) => {
34
+ const itemClass = calcItemClass(row);
35
+ const slotOption = {};
36
+ if (Object.prototype.hasOwnProperty.call(row, "image")) {
37
+ Object.assign(slotOption, {
38
+ icon: renderIcon(row)
39
+ });
40
+ }
41
+ if (props.mode === "SELECT") {
42
+ Object.assign(slotOption, {
43
+ "right-icon": renderRightSlot(row)
44
+ });
45
+ }
46
+ return createVNode(resolveComponent("van-cell"), {
47
+ "class": itemClass,
48
+ "is-link": true,
49
+ "title": row.srfmajortext || "",
50
+ "onClick": () => c.onRowClick(row)
51
+ }, _isSlot(slotOption) ? slotOption : {
52
+ default: () => [slotOption]
53
+ });
54
+ };
55
+ const renderPanelItem = (item, modelData) => {
56
+ const {
57
+ context,
58
+ params
59
+ } = c;
60
+ return createVNode(resolveComponent("iBizControlShell"), {
61
+ "data": item,
62
+ "modelData": modelData,
63
+ "context": context,
64
+ "params": params,
65
+ "onClick": () => c.onRowClick(item)
66
+ }, null);
67
+ };
68
+ const renderItem = (row) => {
69
+ const panel = c.model.itemLayoutPanel;
70
+ return panel ? renderPanelItem(row, panel) : renderItemContent(row);
71
+ };
72
+ const renderNoData = () => {
73
+ const {
74
+ isLoaded
75
+ } = c.state;
76
+ if (!isLoaded) {
77
+ return;
78
+ }
79
+ return isLoaded && createVNode(resolveComponent("iBizNoData"), {
80
+ "text": c.model.emptyText,
81
+ "emptyTextLanguageRes": c.model.emptyTextLanguageRes
82
+ }, null);
83
+ };
84
+ const renderLoadMore = () => {
85
+ if (props.loadMode === "auto" || c.state.total <= c.state.items.length) {
86
+ return;
87
+ }
88
+ return createVNode("div", {
89
+ "class": ns.b("load-more"),
90
+ "onClick": () => c.loadMore()
91
+ }, [createVNode("span", null, [createTextVNode("\u52A0\u8F7D\u66F4\u591A")])]);
92
+ };
93
+ return {
94
+ renderNoData,
95
+ renderItem,
96
+ renderLoadMore
97
+ };
98
+ }
99
+
100
+ export { useListRender };
@@ -32,6 +32,10 @@ export declare const IBizMDCtrlControl: import("@ibiz-template/vue3-util").TypeW
32
32
  type: StringConstructor;
33
33
  default: string;
34
34
  };
35
+ loadDefault: {
36
+ type: BooleanConstructor;
37
+ default: boolean;
38
+ };
35
39
  }, {
36
40
  c: import("@ibiz-template/runtime").MDCtrlController;
37
41
  ns: import("@ibiz-template/core").Namespace;
@@ -72,11 +76,16 @@ export declare const IBizMDCtrlControl: import("@ibiz-template/vue3-util").TypeW
72
76
  type: StringConstructor;
73
77
  default: string;
74
78
  };
79
+ loadDefault: {
80
+ type: BooleanConstructor;
81
+ default: boolean;
82
+ };
75
83
  }>>, {
76
84
  mode: string;
77
85
  params: IParams;
86
+ loadMode: string;
78
87
  mdctrlActiveMode: number;
79
88
  singleSelect: boolean;
80
- loadMode: string;
89
+ loadDefault: boolean;
81
90
  }, {}>>;
82
91
  export default IBizMDCtrlControl;
@@ -0,0 +1 @@
1
+ .ibiz-control-mobmdctrl{--ibiz-control-mobmdctrl-text-color:var(--ibiz-color-text-0);--ibiz-control-mobmdctrl-hover-bg-color:var(--ibiz-color-primary);--ibiz-control-mobmdctrl-active-bg-color:#D1D1D5;--ibiz-control-mobmdctrl-active-color:var(--ibiz-color-bg-1);--ibiz-control-mobmdctrl-img-width:var(--ibiz-width-icon-extra-large);--ibiz-control-mobmdctrl-img-radius:var(--ibiz-border-radius-extra-small);--ibiz-control-mobmdctrl-padding:var(--ibiz-spacing-base) 0 var(--ibiz-spacing-base) var(--ibiz-spacing-base);--ibiz-control-mobmdctrl-group-padding:var(--ibiz-spacing-tight) var(--ibiz-spacing-base);--ibiz-control-mobmdctrl-group-font:var(--ibiz-font-size-regular);--ibiz-control-mobmdctrl-icon-color:#A0A5AA;--ibiz-control-mobmdctrl-group-caption-color:#9A9B9F;--ibiz-control-mobmdctrl-load-more-font-size:var(--ibiz-font-size-small);--ibiz-control-mobmdctrl-font-size:var(--ibiz-font-size-header-5);--ibiz-control-mobmdctrl-right-icon-margin-right:1.3125rem;--van-cell-font-size:var(--ibiz-control-mobmdctrl-font-size);height:100%}.ibiz-control-mobmdctrl .van-list{height:100%}.ibiz-control-mobmdctrl .van-list .van-cell{padding:var(--ibiz-control-mobmdctrl-padding)}.ibiz-control-mobmdctrl .van-cell__right-icon{margin-right:var(--ibiz-control-mobmdctrl-right-icon-margin-right);color:var(--ibiz-control-mobmdctrl-icon-color)}.ibiz-control-mobmdctrl .van-cell--clickable:active{color:inherit;background-color:var(--ibiz-control-mobmdctrl-active-bg-color)}.ibiz-control-mobmdctrl .van-cell::after{width:100%}.ibiz-control-mobmdctrl .ibiz-control-panel{height:auto}.ibiz-control-mobmdctrl-item{--ibiz-control-mobmdctrl-text-color:var(--ibiz-color-text-0);--ibiz-control-mobmdctrl-hover-bg-color:var(--ibiz-color-primary);--ibiz-control-mobmdctrl-active-bg-color:#D1D1D5;--ibiz-control-mobmdctrl-active-color:var(--ibiz-color-bg-1);--ibiz-control-mobmdctrl-img-width:var(--ibiz-width-icon-extra-large);--ibiz-control-mobmdctrl-img-radius:var(--ibiz-border-radius-extra-small);--ibiz-control-mobmdctrl-padding:var(--ibiz-spacing-base) 0 var(--ibiz-spacing-base) var(--ibiz-spacing-base);--ibiz-control-mobmdctrl-group-padding:var(--ibiz-spacing-tight) var(--ibiz-spacing-base);--ibiz-control-mobmdctrl-group-font:var(--ibiz-font-size-regular);--ibiz-control-mobmdctrl-icon-color:#A0A5AA;--ibiz-control-mobmdctrl-group-caption-color:#9A9B9F;--ibiz-control-mobmdctrl-load-more-font-size:var(--ibiz-font-size-small);--ibiz-control-mobmdctrl-font-size:var(--ibiz-font-size-header-5);--ibiz-control-mobmdctrl-right-icon-margin-right:1.3125rem}.ibiz-control-mobmdctrl-item--right{margin-right:var(--ibiz-control-mobmdctrl-right-icon-margin-right)}.ibiz-control-mobmdctrl-image{--ibiz-control-mobmdctrl-text-color:var(--ibiz-color-text-0);--ibiz-control-mobmdctrl-hover-bg-color:var(--ibiz-color-primary);--ibiz-control-mobmdctrl-active-bg-color:#D1D1D5;--ibiz-control-mobmdctrl-active-color:var(--ibiz-color-bg-1);--ibiz-control-mobmdctrl-img-width:var(--ibiz-width-icon-extra-large);--ibiz-control-mobmdctrl-img-radius:var(--ibiz-border-radius-extra-small);--ibiz-control-mobmdctrl-padding:var(--ibiz-spacing-base) 0 var(--ibiz-spacing-base) var(--ibiz-spacing-base);--ibiz-control-mobmdctrl-group-padding:var(--ibiz-spacing-tight) var(--ibiz-spacing-base);--ibiz-control-mobmdctrl-group-font:var(--ibiz-font-size-regular);--ibiz-control-mobmdctrl-icon-color:#A0A5AA;--ibiz-control-mobmdctrl-group-caption-color:#9A9B9F;--ibiz-control-mobmdctrl-load-more-font-size:var(--ibiz-font-size-small);--ibiz-control-mobmdctrl-font-size:var(--ibiz-font-size-header-5);--ibiz-control-mobmdctrl-right-icon-margin-right:1.3125rem;width:var(--ibiz-control-mobmdctrl-img-width);margin-right:var(--ibiz-control-mobmdctrl-padding);border-radius:var(--ibiz-control-mobmdctrl-img-radius)}.ibiz-control-mobmdctrl-group-caption{--ibiz-control-mobmdctrl-text-color:var(--ibiz-color-text-0);--ibiz-control-mobmdctrl-hover-bg-color:var(--ibiz-color-primary);--ibiz-control-mobmdctrl-active-bg-color:#D1D1D5;--ibiz-control-mobmdctrl-active-color:var(--ibiz-color-bg-1);--ibiz-control-mobmdctrl-img-width:var(--ibiz-width-icon-extra-large);--ibiz-control-mobmdctrl-img-radius:var(--ibiz-border-radius-extra-small);--ibiz-control-mobmdctrl-padding:var(--ibiz-spacing-base) 0 var(--ibiz-spacing-base) var(--ibiz-spacing-base);--ibiz-control-mobmdctrl-group-padding:var(--ibiz-spacing-tight) var(--ibiz-spacing-base);--ibiz-control-mobmdctrl-group-font:var(--ibiz-font-size-regular);--ibiz-control-mobmdctrl-icon-color:#A0A5AA;--ibiz-control-mobmdctrl-group-caption-color:#9A9B9F;--ibiz-control-mobmdctrl-load-more-font-size:var(--ibiz-font-size-small);--ibiz-control-mobmdctrl-font-size:var(--ibiz-font-size-header-5);--ibiz-control-mobmdctrl-right-icon-margin-right:1.3125rem;padding:var(--ibiz-control-mobmdctrl-group-padding);font-size:var(--ibiz-control-mobmdctrl-group-font);color:var(--ibiz-control-mobmdctrl-group-caption-color)}.ibiz-control-mobmdctrl-load-more{display:flex;justify-content:center;padding:var(--ibiz-spacing-tight);font-size:var(--ibiz-control-mobmdctrl-load-more-font-size);color:var(--ibiz-color-text-2)}.ibiz-control-mobmdctrl-load-more span{padding:var(--ibiz-spacing-extra-tight) var(--ibiz-spacing-base);border:1px solid var(--ibiz-color-border);border-radius:var(--ibiz-border-radius-full)}
@@ -1,4 +1,4 @@
1
- import { PropType, VNode } from 'vue';
1
+ import { PropType } from 'vue';
2
2
  import { IDEMobMDCtrl } from '@ibiz/model-core';
3
3
  import { MDCtrlController } from '@ibiz-template/runtime';
4
4
  import './md-ctrl.scss';
@@ -50,11 +50,17 @@ export declare const MDCtrlControl: import("vue").DefineComponent<{
50
50
  type: StringConstructor;
51
51
  default: string;
52
52
  };
53
+ loadDefault: {
54
+ type: BooleanConstructor;
55
+ default: boolean;
56
+ };
53
57
  }, {
54
58
  c: MDCtrlController;
55
59
  ns: import("@ibiz-template/core").Namespace;
56
60
  renderMDContent: () => JSX.Element;
57
- renderNoData: () => VNode | undefined;
61
+ renderNoData: () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
62
+ [key: string]: any;
63
+ }> | undefined;
58
64
  }, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
59
65
  modelData: {
60
66
  type: PropType<IDEMobMDCtrl>;
@@ -103,10 +109,15 @@ export declare const MDCtrlControl: import("vue").DefineComponent<{
103
109
  type: StringConstructor;
104
110
  default: string;
105
111
  };
112
+ loadDefault: {
113
+ type: BooleanConstructor;
114
+ default: boolean;
115
+ };
106
116
  }>>, {
107
117
  mode: string;
108
118
  params: IParams;
119
+ loadMode: string;
109
120
  mdctrlActiveMode: number;
110
121
  singleSelect: boolean;
111
- loadMode: string;
122
+ loadDefault: boolean;
112
123
  }, {}>;
@@ -1,12 +1,10 @@
1
- import { isVNode, resolveComponent, createVNode, createTextVNode, defineComponent } from 'vue';
1
+ import { resolveComponent, createVNode, createTextVNode, defineComponent } from 'vue';
2
2
  import { useControlController, useNamespace } from '@ibiz-template/vue3-util';
3
3
  import { MDCtrlController } from '@ibiz-template/runtime';
4
4
  import './md-ctrl.css';
5
+ import { useListRender } from '../list-render-util.mjs';
5
6
 
6
7
  "use strict";
7
- function _isSlot(s) {
8
- return typeof s === "function" || Object.prototype.toString.call(s) === "[object Object]" && !isVNode(s);
9
- }
10
8
  const MDCtrlControl = /* @__PURE__ */ defineComponent({
11
9
  name: "IBizMDCtrlControl",
12
10
  props: {
@@ -56,84 +54,22 @@ const MDCtrlControl = /* @__PURE__ */ defineComponent({
56
54
  loadMode: {
57
55
  type: String,
58
56
  default: "auto"
57
+ },
58
+ loadDefault: {
59
+ type: Boolean,
60
+ default: true
59
61
  }
60
62
  },
61
63
  setup(props) {
62
64
  const c = useControlController((...args) => new MDCtrlController(...args));
63
65
  const ns = useNamespace(`control-${c.model.controlType.toLowerCase()}`);
66
+ const {
67
+ renderItem,
68
+ renderNoData,
69
+ renderLoadMore
70
+ } = useListRender(props, c, ns);
64
71
  const leftSlidingActionGroup = c.model.deuiactionGroup;
65
72
  const rightSlidingActionGroup = c.model.deuiactionGroup2;
66
- const renderPanelItem = (item, modelData) => {
67
- const {
68
- context,
69
- params
70
- } = c;
71
- return createVNode(resolveComponent("iBizControlShell"), {
72
- "data": item,
73
- "modelData": modelData,
74
- "context": context,
75
- "params": params,
76
- "onClick": () => c.onRowClick(item)
77
- }, null);
78
- };
79
- const isSelect = (row) => {
80
- const findIndex = c.state.selectedData.findIndex((data) => {
81
- return data.srfkey === row.data.srfkey;
82
- });
83
- return findIndex !== -1;
84
- };
85
- const calcItemClass = (row) => {
86
- const select = isSelect(row);
87
- const itemClass = [ns.b("item"), ns.is("active", select)];
88
- return itemClass;
89
- };
90
- const renderIcon = (row) => {
91
- return createVNode("img", {
92
- "class": ns.b("image"),
93
- "src": row.data.image,
94
- "alt": ""
95
- }, null);
96
- };
97
- const renderRightSlot = (row) => {
98
- const select = isSelect(row);
99
- return createVNode(resolveComponent("van-radio"), {
100
- "checked": select
101
- }, null);
102
- };
103
- const renderItemContent = (row) => {
104
- const itemClass = calcItemClass(row);
105
- const slotOption = {};
106
- if (Object.prototype.hasOwnProperty.call(row.data, "image")) {
107
- Object.assign(slotOption, {
108
- icon: renderIcon(row)
109
- });
110
- }
111
- if (props.mode === "SELECT") {
112
- Object.assign(slotOption, {
113
- "right-icon": renderRightSlot(row)
114
- });
115
- }
116
- return createVNode(resolveComponent("van-cell"), {
117
- "class": itemClass,
118
- "is-link": true,
119
- "title": row.data.srfmajortext || "",
120
- "onClick": () => c.onRowClick(row.data)
121
- }, _isSlot(slotOption) ? slotOption : {
122
- default: () => [slotOption]
123
- });
124
- };
125
- const renderNoData = () => {
126
- const {
127
- isLoaded
128
- } = c.state;
129
- if (!isLoaded) {
130
- return;
131
- }
132
- return isLoaded && createVNode(resolveComponent("iBizNoData"), {
133
- "text": c.model.emptyText,
134
- "emptyTextLanguageRes": c.model.emptyTextLanguageRes
135
- }, null);
136
- };
137
73
  const renderSlidingActionGroup = (group, row) => {
138
74
  const groupDetails = group.uiactionGroupDetails || [];
139
75
  if (!groupDetails || groupDetails.length === 0) {
@@ -155,7 +91,6 @@ const MDCtrlControl = /* @__PURE__ */ defineComponent({
155
91
  });
156
92
  };
157
93
  const renderDefaultItem = (row) => {
158
- const panel = props.modelData.itemLayoutPanel;
159
94
  const isItemSliding = !!(leftSlidingActionGroup || rightSlidingActionGroup);
160
95
  if (isItemSliding) {
161
96
  return createVNode(resolveComponent("van-swipe-cell"), {
@@ -164,11 +99,11 @@ const MDCtrlControl = /* @__PURE__ */ defineComponent({
164
99
  left: rightSlidingActionGroup ? () => renderSlidingActionGroup(rightSlidingActionGroup, row) : null,
165
100
  right: leftSlidingActionGroup ? () => renderSlidingActionGroup(leftSlidingActionGroup, row) : null,
166
101
  default: () => {
167
- return panel ? renderPanelItem(row.data, panel) : renderItemContent(row);
102
+ return renderItem(row.data);
168
103
  }
169
104
  });
170
105
  }
171
- return panel ? renderPanelItem(row.data, panel) : renderItemContent(row);
106
+ return renderItem(row.data);
172
107
  };
173
108
  const renderDefault = () => {
174
109
  return c.state.rows.map((item) => {
@@ -186,15 +121,6 @@ const MDCtrlControl = /* @__PURE__ */ defineComponent({
186
121
  })]);
187
122
  });
188
123
  };
189
- const renderLoadMore = () => {
190
- if (props.loadMode === "auto" || c.state.total <= c.state.rows.length) {
191
- return;
192
- }
193
- return createVNode("div", {
194
- "class": ns.b("load-more"),
195
- "onClick": () => c.loadMore()
196
- }, [createVNode("span", null, [createTextVNode("\u52A0\u8F7D\u66F4\u591A")])]);
197
- };
198
124
  const renderMDContent = () => {
199
125
  return createVNode(resolveComponent("van-list"), {
200
126
  "finished": c.state.total <= c.state.rows.length,
@@ -16,7 +16,7 @@ export declare const IBizToolbarControl: import("@ibiz-template/vue3-util").Type
16
16
  btnSize: import("vue").ComputedRef<string>;
17
17
  ns: import("@ibiz-template/core").Namespace;
18
18
  position: string;
19
- handleClick: (item: import("@ibiz/model-core").IDEToolbarItem, event: MouseEvent) => Promise<void>;
19
+ handleClick: (item: import("@ibiz/model-core").IDEToolbarItem | import("@ibiz-template/runtime").IExtraButton, event: MouseEvent) => Promise<void>;
20
20
  renderExtraButtons: (extraButtons: import("@ibiz-template/runtime").IExtraButton[]) => JSX.Element[];
21
21
  renderToolbarItem: (item: import("@ibiz/model-core").IDEToolbarItem) => JSX.Element | null;
22
22
  }, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
@@ -20,7 +20,7 @@ export declare const ToolbarControl: import("vue").DefineComponent<{
20
20
  btnSize: import("vue").ComputedRef<string>;
21
21
  ns: import("@ibiz-template/core").Namespace;
22
22
  position: string;
23
- handleClick: (item: IDEToolbarItem, event: MouseEvent) => Promise<void>;
23
+ handleClick: (item: IDEToolbarItem | IExtraButton, event: MouseEvent) => Promise<void>;
24
24
  renderExtraButtons: (extraButtons: IExtraButton[]) => JSX.Element[];
25
25
  renderToolbarItem: (item: IDEToolbarItem) => JSX.Element | null;
26
26
  }, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
@@ -28,7 +28,7 @@ export declare const IBizPickerSelectView: import("vue").DefineComponent<{
28
28
  [x: string]: any;
29
29
  [x: symbol]: any;
30
30
  srfsandbox?: string | undefined;
31
- srfappid?: string | undefined;
31
+ srfappid: string;
32
32
  getOwnContext: () => IData;
33
33
  destroy: () => void;
34
34
  clone: () => IContext;
@@ -62,6 +62,7 @@ const IBizDropdown = /* @__PURE__ */ defineComponent({
62
62
  if (index !== -1) {
63
63
  return items.value[index].text;
64
64
  }
65
+ return "";
65
66
  });
66
67
  const editorRef = ref();
67
68
  if (props.autoFocus) {
@@ -1 +1 @@
1
- .ibiz-file-upload{width:100%}.ibiz-file-upload .van-uploader__preview{display:none}.ibiz-file-upload .ibiz-file-upload-button{height:1.875rem}.ibiz-file-upload .ibiz-file-upload-button span{font-size:var(--ibiz-form-item-font-size);color:var(--ibiz-form-item-text-color)}.ibiz-file-upload .van-uploader__preview .van-uploader__file-icon{display:none}.ibiz-file-upload .van-uploader__preview .van-uploader__file-name{display:none}.ibiz-file-upload .ibiz-file-upload-item-cover{position:absolute;top:0;bottom:0;box-sizing:border-box;display:flex;align-items:center;justify-content:center;width:100%;font-size:.75rem;line-height:initial;color:#fff;text-align:center;background:var(--ibiz-color-overlay-bg)}.ibiz-file-upload .ibiz-file-upload-preview{width:100%}.ibiz-file-upload .ibiz-file-upload-preview-item{display:flex;align-items:center;border-bottom:.0625rem solid var(--ibiz-color-border)}.ibiz-file-upload .ibiz-file-upload-preview-item:last-child{border-width:0}.ibiz-file-upload .ibiz-file-upload-preview-item-img{width:3.125rem;min-width:3.125rem;padding:.625rem}.ibiz-file-upload .ibiz-file-upload-preview-item-img img{width:100%;height:100%;border-radius:.25rem}.ibiz-file-upload .ibiz-file-upload-preview-item-text{overflow:hidden;font-size:.875rem;text-overflow:ellipsis;white-space:nowrap}.ibiz-file-upload .ibiz-file-upload-preview-item-action{display:flex;flex-grow:1;align-items:center;justify-content:flex-end;min-width:3.125rem;color:var(--ibiz-color-overlay-bg);text-align:right}
1
+ .ibiz-file-upload{width:100%}.ibiz-file-upload .van-uploader__preview{display:none}.ibiz-file-upload .ibiz-file-upload-button{width:1.25rem;height:1.25rem;font-size:var(--ibiz-font-size-header-4);color:var(--ibiz-color-text-2);background:0 0;border:none;border-radius:50%}.ibiz-file-upload .van-uploader__preview .van-uploader__file-icon{display:none}.ibiz-file-upload .van-uploader__preview .van-uploader__file-name{display:none}.ibiz-file-upload .ibiz-file-upload-item-cover{position:absolute;top:0;bottom:0;box-sizing:border-box;display:flex;align-items:center;justify-content:center;width:100%;font-size:.75rem;line-height:initial;color:#fff;text-align:center;background:var(--ibiz-color-overlay-bg)}.ibiz-file-upload .ibiz-file-upload-preview{width:100%;margin-top:.625rem}.ibiz-file-upload .ibiz-file-upload-preview-item{display:flex;align-items:center;justify-content:space-between;width:100%;padding:0 var(--ibiz-spacing-tight);margin-bottom:var(--ibiz-spacing-tight);background:var(--ibiz-color-disabled-bg);border-radius:var(--ibiz-border-radius-small)}.ibiz-file-upload .ibiz-file-upload-preview-item:last-child{margin:0;border-width:0}.ibiz-file-upload .ibiz-file-upload-preview-item-img{flex-shrink:0;width:2.5rem;min-width:2.5rem;height:2.5rem;padding:.375rem}.ibiz-file-upload .ibiz-file-upload-preview-item-img img{width:100%;height:100%;border-radius:.25rem}.ibiz-file-upload .ibiz-file-upload-preview-item-left{display:flex;flex-grow:1;align-items:center;width:calc(100% - 1.25rem)}.ibiz-file-upload .ibiz-file-upload-preview-item-text{display:flex;flex:1;align-items:center;width:calc(100% - 2.5rem);padding-left:var(--ibiz-spacing-tight);font-size:.875rem}.ibiz-file-upload .ibiz-file-upload-preview-item-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ibiz-file-upload .ibiz-file-upload-preview-item-action{display:flex;flex-shrink:0;align-items:center;justify-content:flex-end;width:1.25rem;color:var(--ibiz-color-overlay-bg);text-align:right}.ibiz-file-upload .van-uploader__input-wrapper{width:100%;text-align:right}.ibiz-form-item-container--top .ibiz-file-upload .van-uploader{position:absolute;top:0;right:0;width:100%}
@@ -32,6 +32,9 @@ export declare const IBizFileUpload: import("vue").DefineComponent<{
32
32
  beforeUpload: () => void;
33
33
  onDownload: (file: IData) => void;
34
34
  afterRead: (file: IData | IData[]) => Promise<void>;
35
+ getFileSuffix: (name: string) => string;
36
+ getFileName: (filename: string) => string;
37
+ getPreviewImg: (name: string) => string;
35
38
  limit: import("vue").ComputedRef<1 | 9999>;
36
39
  }, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
37
40
  change: (_value: unknown, _name?: string | undefined) => boolean;
@@ -1,4 +1,4 @@
1
- import { resolveComponent, createTextVNode, createVNode, defineComponent } from 'vue';
1
+ import { resolveComponent, createVNode, createTextVNode, defineComponent } from 'vue';
2
2
  import { getUploadProps, getEditorEmits, useNamespace } from '@ibiz-template/vue3-util';
3
3
  import './ibiz-file-upload.css';
4
4
  import { useVanUpload } from '../use/use-van-upload.mjs';
@@ -25,6 +25,27 @@ const IBizFileUpload = /* @__PURE__ */ defineComponent({
25
25
  } = useVanUpload(props, (value) => {
26
26
  emit("change", value);
27
27
  }, c);
28
+ const getFileSuffix = (name) => {
29
+ const lastDotIndex = name.lastIndexOf(".");
30
+ if (lastDotIndex === -1) {
31
+ return "";
32
+ }
33
+ const extension = name.substring(lastDotIndex + 1).toLowerCase();
34
+ return extension;
35
+ };
36
+ const getFileName = (filename) => {
37
+ const lastDotIndex = filename.lastIndexOf(".");
38
+ if (lastDotIndex === -1) {
39
+ return filename;
40
+ }
41
+ const name = filename.substring(0, lastDotIndex);
42
+ return name;
43
+ };
44
+ const getPreviewImg = (name) => {
45
+ const suffix = getFileSuffix(name);
46
+ const type = c.fileTypeMap.get(suffix) || "unknown";
47
+ return `./assets/img/file/${type}.svg`;
48
+ };
28
49
  return {
29
50
  ns,
30
51
  c,
@@ -35,6 +56,9 @@ const IBizFileUpload = /* @__PURE__ */ defineComponent({
35
56
  beforeUpload,
36
57
  onDownload,
37
58
  afterRead,
59
+ getFileSuffix,
60
+ getFileName,
61
+ getPreviewImg,
38
62
  limit
39
63
  };
40
64
  },
@@ -53,17 +77,17 @@ const IBizFileUpload = /* @__PURE__ */ defineComponent({
53
77
  }, {
54
78
  default: () => {
55
79
  return !this.readonly && !this.disabled && createVNode(resolveComponent("van-button"), {
56
- "class": this.ns.b("button")
57
- }, {
58
- default: () => [createTextVNode("\u4E0A\u4F20\u6587\u4EF6")]
59
- });
80
+ "class": this.ns.b("button"),
81
+ "icon": "add-o",
82
+ "type": "primary"
83
+ }, null);
60
84
  },
61
85
  "preview-cover": (file) => {
62
86
  return createVNode("div", {
63
87
  "class": this.ns.b("item-cover")
64
88
  }, [file.name]);
65
89
  }
66
- }), createVNode("div", {
90
+ }), this.files.length > 0 && createVNode("div", {
67
91
  "class": this.ns.b("preview")
68
92
  }, [this.files.map((item) => {
69
93
  return createVNode("div", {
@@ -71,18 +95,25 @@ const IBizFileUpload = /* @__PURE__ */ defineComponent({
71
95
  "onClick": () => {
72
96
  this.onDownload(item);
73
97
  }
98
+ }, [createVNode("div", {
99
+ "class": this.ns.b("preview-item-left")
74
100
  }, [createVNode("div", {
75
101
  "class": this.ns.b("preview-item-img")
76
102
  }, [createVNode("img", {
77
- "src": "./assets/img/file.png",
103
+ "src": this.getPreviewImg(item.name),
78
104
  "alt": ""
79
105
  }, null)]), createVNode("div", {
80
106
  "class": this.ns.b("preview-item-text")
81
- }, [item.name]), !this.readonly && !this.disabled && createVNode("div", {
107
+ }, [createVNode("div", {
108
+ "class": this.ns.b("preview-item-name")
109
+ }, [this.getFileName(item.name)]), this.getFileSuffix(item.name) && createVNode("div", {
110
+ "class": this.ns.b("preview-item-suffix")
111
+ }, [createTextVNode("."), this.getFileSuffix(item.name)])])]), !this.readonly && !this.disabled && createVNode("div", {
82
112
  "class": this.ns.b("preview-item-action")
83
113
  }, [createVNode(resolveComponent("van-icon"), {
84
114
  "name": "cross",
85
- "onClick": () => {
115
+ "onClick": (e) => {
116
+ e.stopPropagation();
86
117
  this.onRemove(item);
87
118
  }
88
119
  }, null)])]);
@@ -27,6 +27,14 @@ export declare class UploadEditorController extends EditorController<IFileUpload
27
27
  * 下载参数
28
28
  */
29
29
  exportParams?: IParams;
30
+ /**
31
+ * 文件类型
32
+ *
33
+ * @author zk
34
+ * @date 2023-12-07 03:12:25
35
+ * @memberof UploadEditorController
36
+ */
37
+ fileTypeMap: Map<string, string>;
30
38
  protected onInit(): Promise<void>;
31
39
  /**
32
40
  * 计算文件的上传路径和下载路径
@@ -32,6 +32,56 @@ class UploadEditorController extends EditorController {
32
32
  * 下载参数
33
33
  */
34
34
  __publicField(this, "exportParams");
35
+ /**
36
+ * 文件类型
37
+ *
38
+ * @author zk
39
+ * @date 2023-12-07 03:12:25
40
+ * @memberof UploadEditorController
41
+ */
42
+ __publicField(this, "fileTypeMap", /* @__PURE__ */ new Map([
43
+ // word文档
44
+ ["docx", "docx"],
45
+ ["doc", "docx"],
46
+ ["dotx", "docx"],
47
+ ["dot", "docx"],
48
+ // pdf
49
+ ["pdf", "pdf"],
50
+ // text
51
+ ["txt", "text"],
52
+ //
53
+ ["xlsx", "excel"],
54
+ ["xls", "excel"],
55
+ ["xlsm", "excel"],
56
+ ["xlsb", "excel"],
57
+ ["csv", "excel"],
58
+ // ppt
59
+ ["pptx", "ppt"],
60
+ // 图片
61
+ ["jpg", "img"],
62
+ ["png", "img"],
63
+ ["gif", "img"],
64
+ ["bmp", "img"],
65
+ ["svg", "img"],
66
+ // 音频
67
+ ["mp3", "audio"],
68
+ ["wav", "audio"],
69
+ ["aac", "audio"],
70
+ ["flac", "audio"],
71
+ ["wma", "audio"],
72
+ // 视频
73
+ ["mp4", "video"],
74
+ ["avi", "video"],
75
+ ["mov", "video"],
76
+ ["mkv", "video"],
77
+ ["wmv", "video"],
78
+ // 压缩
79
+ ["zip", "zip"],
80
+ ["rar", "zip"],
81
+ ["7z", "zip"],
82
+ ["gz", "zip"],
83
+ ["tar", "zip"]
84
+ ]));
35
85
  }
36
86
  async onInit() {
37
87
  var _a;
@@ -10,11 +10,6 @@ function useVanUpload(props, valueChange, c) {
10
10
  });
11
11
  const uploadUrl = ref("");
12
12
  const downloadUrl = ref("");
13
- const uploadCache = {
14
- count: 0,
15
- cacheFiles: []
16
- // iview上传过程中不能改default-file-list,所以需要缓存
17
- };
18
13
  watch(
19
14
  () => props.value,
20
15
  (newVal) => {
@@ -56,34 +51,28 @@ function useVanUpload(props, valueChange, c) {
56
51
  { immediate: true }
57
52
  );
58
53
  const emitValue = () => {
59
- const _files = [...files.value, ...uploadCache.cacheFiles];
54
+ const _files = [...files.value];
60
55
  const value = _files.length > 0 ? JSON.stringify(_files.map((file) => ({ name: file.name, id: file.id }))) : null;
61
- uploadCache.cacheFiles = [];
62
56
  valueChange(value);
63
57
  };
64
58
  const beforeUpload = () => {
65
59
  if (!c.multiple && files.value.length === 1) {
66
60
  return false;
67
61
  }
68
- uploadCache.count += 1;
69
62
  return true;
70
63
  };
71
64
  const onSuccess = (response) => {
72
65
  if (!response) {
73
66
  return;
74
67
  }
75
- uploadCache.cacheFiles.push({
68
+ files.value.push({
76
69
  name: response.filename,
77
70
  id: response.fileid
78
71
  });
79
- uploadCache.count -= 1;
80
- if (uploadCache.count === 0) {
81
- emitValue();
82
- }
72
+ emitValue();
83
73
  };
84
74
  const onError = (...args) => {
85
75
  const error = args[0];
86
- uploadCache.count -= 1;
87
76
  throw new HttpError({
88
77
  response: { data: JSON.parse(error.message), status: error.status }
89
78
  });
package/es/index.mjs CHANGED
@@ -8,13 +8,13 @@ import { IBizPanelComponents } from './panel-component/index.mjs';
8
8
  import { IBizViewEngine } from './view-engine/index.mjs';
9
9
  import './util/index.mjs';
10
10
  import './view/index.mjs';
11
- import { IBizMDCtrlControl } from './control/md-ctrl/index.mjs';
11
+ import { IBizMDCtrlControl } from './control/list/md-ctrl/index.mjs';
12
12
  import { IBizAppMenuControl } from './control/app-menu/index.mjs';
13
13
  import { IBizFormControl } from './control/form/form/index.mjs';
14
14
  import { IBizSearchFormControl } from './control/form/search-form/index.mjs';
15
15
  import { IBizEditFormControl } from './control/form/edit-form/index.mjs';
16
16
  import { IBizPickupViewPanelControl } from './control/pickup-view-panel/index.mjs';
17
- import { IBizListControl } from './control/list/index.mjs';
17
+ import { IBizListControl } from './control/list/list/index.mjs';
18
18
  import { IBizTabExpPanelControl } from './control/tab-exp-panel/index.mjs';
19
19
  import { IBizToolbarControl } from './control/toolbar/index.mjs';
20
20
  import { IBizCaptionBarControl } from './control/caption-bar/index.mjs';
@@ -36,6 +36,7 @@ export { NotificationUtil } from './util/notification-util/notification-util.mjs
36
36
  export { OpenViewUtil } from './util/open-view-util/open-view-util.mjs';
37
37
  export { OverlayController } from './util/overlay-controller/overlay-controller.mjs';
38
38
  export { loadingDirective } from './util/directive/loading.mjs';
39
+ export { ConfirmUtil } from './util/confirm-util/confirm-util.mjs';
39
40
  export { calcUniqueKey, useViewStack } from './util/store/view-stack/view-stack.mjs';
40
41
  export { View404 } from './view/404-view/404-view.mjs';
41
42
  export { LoginView } from './view/login-view/login-view.mjs';
@@ -1,4 +1,4 @@
1
- import { IBizPanelContainer, IBizPanelCtrlPos, IBizNavPos, IBizPanelField, IBizGridContainer, IBizPanelRawItem, IBizSingleDataContainer, IBizMultiDataContainer, IBizPanelContainerImage, IBizScrollContainer } from '@ibiz-template/vue3-util';
1
+ import { IBizPanelContainer, IBizPanelCtrlPos, IBizNavPos, IBizPanelField, IBizGridContainer, IBizPanelRawItem, IBizSingleDataContainer, IBizMultiDataContainer, IBizPanelTabPage, IBizPanelContainerGroup, IBizPanelContainerImage, IBizScrollContainer } from '@ibiz-template/vue3-util';
2
2
  import { IBizViewContentPanelContainer } from './view-content-panel-container/index.mjs';
3
3
  import { IBizViewHeaderPanelContainer } from './view-header-panel-container/index.mjs';
4
4
  import { IBizViewFooterPanelContainer } from './view-footer-panel-container/index.mjs';
@@ -26,7 +26,9 @@ const IBizPanelComponents = {
26
26
  v.use(IBizWFActionButton);
27
27
  v.use(IBizSingleDataContainer);
28
28
  v.use(IBizMultiDataContainer);
29
+ v.use(IBizPanelTabPage);
29
30
  v.use(IBizPanelTabPanel);
31
+ v.use(IBizPanelContainerGroup);
30
32
  v.use(IBizPanelContainerImage);
31
33
  v.use(IBizScrollContainer);
32
34
  }