@ibiz-template/vue3-components 0.7.40 → 0.7.41-alpha.0

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 (82) hide show
  1. package/dist/{index-8ZkS4CI0.js → index-4CBJktLS.js} +1 -1
  2. package/dist/{index-WNFQFxQd.js → index-QL7Ukex9.js} +1 -1
  3. package/dist/index-toTw1DLN.js +4 -0
  4. package/dist/index.min.css +1 -1
  5. package/dist/index.system.min.js +1 -1
  6. package/dist/{wang-editor-f_OOMd4x.js → wang-editor-GTNgz_em.js} +1 -1
  7. package/dist/{xlsx-util-3T0fByLw.js → xlsx-util-_sLiqD2S.js} +1 -1
  8. package/es/control/drbar/drbar.controller.mjs +4 -3
  9. package/es/control/grid/grid/grid-control.util.mjs +48 -2
  10. package/es/control/grid/row-edit-popover/row-edit-popover.css +1 -1
  11. package/es/editor/check-box-list/ibiz-checkbox-list/ibiz-checkbox-list.d.ts +1 -0
  12. package/es/editor/data-picker/ibiz-transfer-picker/components/index.d.ts +1 -0
  13. package/es/editor/data-picker/ibiz-transfer-picker/components/index.mjs +3 -0
  14. package/es/editor/data-picker/ibiz-transfer-picker/components/transfer/icon.d.ts +2 -0
  15. package/es/editor/data-picker/ibiz-transfer-picker/components/transfer/icon.mjs +19 -0
  16. package/es/editor/data-picker/ibiz-transfer-picker/components/transfer/interface.d.ts +99 -0
  17. package/es/editor/data-picker/ibiz-transfer-picker/components/transfer/interface.mjs +89 -0
  18. package/es/editor/data-picker/ibiz-transfer-picker/components/transfer/transfer-util.d.ts +17 -0
  19. package/es/editor/data-picker/ibiz-transfer-picker/components/transfer/transfer-util.mjs +103 -0
  20. package/es/editor/data-picker/ibiz-transfer-picker/components/transfer/transfer.css +1 -0
  21. package/es/editor/data-picker/ibiz-transfer-picker/components/transfer/transfer.d.ts +182 -0
  22. package/es/editor/data-picker/ibiz-transfer-picker/components/transfer/transfer.mjs +146 -0
  23. package/es/editor/data-picker/ibiz-transfer-picker/components/transfer-panel/icon.d.ts +1 -0
  24. package/es/editor/data-picker/ibiz-transfer-picker/components/transfer-panel/icon.mjs +12 -0
  25. package/es/editor/data-picker/ibiz-transfer-picker/components/transfer-panel/interface.d.ts +60 -0
  26. package/es/editor/data-picker/ibiz-transfer-picker/components/transfer-panel/interface.mjs +52 -0
  27. package/es/editor/data-picker/ibiz-transfer-picker/components/transfer-panel/transfer-panel-util.d.ts +14 -0
  28. package/es/editor/data-picker/ibiz-transfer-picker/components/transfer-panel/transfer-panel-util.mjs +130 -0
  29. package/es/editor/data-picker/ibiz-transfer-picker/components/transfer-panel/transfer-panel.css +1 -0
  30. package/es/editor/data-picker/ibiz-transfer-picker/components/transfer-panel/transfer-panel.d.ts +108 -0
  31. package/es/editor/data-picker/ibiz-transfer-picker/components/transfer-panel/transfer-panel.mjs +116 -0
  32. package/es/editor/data-picker/ibiz-transfer-picker/ibiz-transfer-picker.css +1 -0
  33. package/es/editor/data-picker/ibiz-transfer-picker/ibiz-transfer-picker.d.ts +97 -0
  34. package/es/editor/data-picker/ibiz-transfer-picker/ibiz-transfer-picker.mjs +279 -0
  35. package/es/editor/data-picker/index.d.ts +1 -0
  36. package/es/editor/data-picker/index.mjs +1 -0
  37. package/es/editor/data-picker/picker-editor.provider.mjs +3 -0
  38. package/es/editor/dropdown-list/dropdown-list-editor.provider.mjs +3 -0
  39. package/es/editor/dropdown-list/ibiz-tree-picker/ibiz-tree-picker.css +1 -0
  40. package/es/editor/dropdown-list/ibiz-tree-picker/ibiz-tree-picker.d.ts +93 -0
  41. package/es/editor/dropdown-list/ibiz-tree-picker/ibiz-tree-picker.mjs +292 -0
  42. package/es/editor/dropdown-list/index.d.ts +1 -0
  43. package/es/editor/dropdown-list/index.mjs +1 -0
  44. package/es/editor/index.mjs +12 -0
  45. package/es/editor/rate/ibiz-rate/ibiz-rate.d.ts +3 -0
  46. package/es/locale/en/index.d.ts +10 -0
  47. package/es/locale/en/index.mjs +10 -0
  48. package/es/locale/zh-CN/index.d.ts +10 -0
  49. package/es/locale/zh-CN/index.mjs +10 -0
  50. package/es/panel-component/app-switch/app-switch.controller.mjs +11 -1
  51. package/es/panel-component/panel-tab-panel/panel-tab-panel.css +1 -1
  52. package/es/panel-component/searchform-buttons/searchform-buttons.css +1 -1
  53. package/lib/control/drbar/drbar.controller.cjs +4 -3
  54. package/lib/control/grid/grid/grid-control.util.cjs +48 -2
  55. package/lib/control/grid/row-edit-popover/row-edit-popover.css +1 -1
  56. package/lib/editor/data-picker/ibiz-transfer-picker/components/index.cjs +7 -0
  57. package/lib/editor/data-picker/ibiz-transfer-picker/components/transfer/icon.cjs +22 -0
  58. package/lib/editor/data-picker/ibiz-transfer-picker/components/transfer/interface.cjs +99 -0
  59. package/lib/editor/data-picker/ibiz-transfer-picker/components/transfer/transfer-util.cjs +108 -0
  60. package/lib/editor/data-picker/ibiz-transfer-picker/components/transfer/transfer.cjs +148 -0
  61. package/lib/editor/data-picker/ibiz-transfer-picker/components/transfer/transfer.css +1 -0
  62. package/lib/editor/data-picker/ibiz-transfer-picker/components/transfer-panel/icon.cjs +14 -0
  63. package/lib/editor/data-picker/ibiz-transfer-picker/components/transfer-panel/interface.cjs +58 -0
  64. package/lib/editor/data-picker/ibiz-transfer-picker/components/transfer-panel/transfer-panel-util.cjs +133 -0
  65. package/lib/editor/data-picker/ibiz-transfer-picker/components/transfer-panel/transfer-panel.cjs +118 -0
  66. package/lib/editor/data-picker/ibiz-transfer-picker/components/transfer-panel/transfer-panel.css +1 -0
  67. package/lib/editor/data-picker/ibiz-transfer-picker/ibiz-transfer-picker.cjs +281 -0
  68. package/lib/editor/data-picker/ibiz-transfer-picker/ibiz-transfer-picker.css +1 -0
  69. package/lib/editor/data-picker/index.cjs +2 -0
  70. package/lib/editor/data-picker/picker-editor.provider.cjs +3 -0
  71. package/lib/editor/dropdown-list/dropdown-list-editor.provider.cjs +3 -0
  72. package/lib/editor/dropdown-list/ibiz-tree-picker/ibiz-tree-picker.cjs +294 -0
  73. package/lib/editor/dropdown-list/ibiz-tree-picker/ibiz-tree-picker.css +1 -0
  74. package/lib/editor/dropdown-list/index.cjs +2 -0
  75. package/lib/editor/index.cjs +12 -0
  76. package/lib/locale/en/index.cjs +10 -0
  77. package/lib/locale/zh-CN/index.cjs +10 -0
  78. package/lib/panel-component/app-switch/app-switch.controller.cjs +11 -1
  79. package/lib/panel-component/panel-tab-panel/panel-tab-panel.css +1 -1
  80. package/lib/panel-component/searchform-buttons/searchform-buttons.css +1 -1
  81. package/package.json +4 -4
  82. package/dist/index-azhHVxuV.js +0 -4
@@ -0,0 +1,99 @@
1
+ 'use strict';
2
+
3
+ var lodashEs = require('lodash-es');
4
+
5
+ "use strict";
6
+ const UPDATE_MODEL_EVENT = "update:modelValue";
7
+ const CHANGE_EVENT = "change";
8
+ const INPUT_EVENT = "input";
9
+ const LEFT_CHECK_CHANGE_EVENT = "leftCheckChange";
10
+ const RIGHT_CHECK_CHANGE_EVENT = "rightCheckChange";
11
+ const LEFT_AC_SEARCH = "leftAcSearch";
12
+ const transferCheckedChangeFn = (value, movedKeys) => [value, movedKeys].every(lodashEs.isArray) || lodashEs.isArray(value) && lodashEs.isNil(movedKeys);
13
+ const transferProps = {
14
+ data: {
15
+ type: Array,
16
+ default: () => []
17
+ },
18
+ titles: {
19
+ type: Array,
20
+ default: () => []
21
+ },
22
+ buttonTexts: {
23
+ type: Array,
24
+ default: () => []
25
+ },
26
+ filterPlaceholder: String,
27
+ filterMethod: {
28
+ type: Function
29
+ },
30
+ rightSearchMethod: {
31
+ type: Function
32
+ },
33
+ leftDefaultChecked: {
34
+ type: Array,
35
+ default: () => []
36
+ },
37
+ rightDefaultChecked: {
38
+ type: Array,
39
+ default: () => []
40
+ },
41
+ renderContent: {
42
+ type: Function
43
+ },
44
+ modelValue: {
45
+ type: Array,
46
+ default: () => []
47
+ },
48
+ format: {
49
+ type: Object,
50
+ default: () => ({})
51
+ },
52
+ filterable: Boolean,
53
+ props: {
54
+ type: Object,
55
+ default: () => ({
56
+ label: "label",
57
+ key: "key",
58
+ disabled: "disabled"
59
+ })
60
+ },
61
+ targetOrder: {
62
+ type: String,
63
+ values: ["original", "push", "unshift"],
64
+ default: "original"
65
+ },
66
+ enableRemoteSearch: {
67
+ type: Boolean,
68
+ default: false
69
+ },
70
+ validateEvent: {
71
+ type: Boolean,
72
+ default: true
73
+ },
74
+ loading: {
75
+ type: Boolean,
76
+ default: false
77
+ },
78
+ readonly: {
79
+ type: Boolean,
80
+ default: false
81
+ }
82
+ };
83
+ const transferEmits = {
84
+ [CHANGE_EVENT]: (value, direction, movedKeys) => [value, movedKeys].every(lodashEs.isArray) && ["left", "right"].includes(direction),
85
+ [UPDATE_MODEL_EVENT]: (value) => lodashEs.isArray(value),
86
+ [LEFT_CHECK_CHANGE_EVENT]: transferCheckedChangeFn,
87
+ [RIGHT_CHECK_CHANGE_EVENT]: transferCheckedChangeFn,
88
+ [LEFT_AC_SEARCH]: (query) => query
89
+ };
90
+
91
+ exports.CHANGE_EVENT = CHANGE_EVENT;
92
+ exports.INPUT_EVENT = INPUT_EVENT;
93
+ exports.LEFT_AC_SEARCH = LEFT_AC_SEARCH;
94
+ exports.LEFT_CHECK_CHANGE_EVENT = LEFT_CHECK_CHANGE_EVENT;
95
+ exports.RIGHT_CHECK_CHANGE_EVENT = RIGHT_CHECK_CHANGE_EVENT;
96
+ exports.UPDATE_MODEL_EVENT = UPDATE_MODEL_EVENT;
97
+ exports.transferCheckedChangeFn = transferCheckedChangeFn;
98
+ exports.transferEmits = transferEmits;
99
+ exports.transferProps = transferProps;
@@ -0,0 +1,108 @@
1
+ 'use strict';
2
+
3
+ var vue = require('vue');
4
+ var _interface = require('./interface.cjs');
5
+
6
+ "use strict";
7
+ const usePropsAlias = (props) => {
8
+ const initProps = {
9
+ label: "label",
10
+ key: "key",
11
+ disabled: "disabled"
12
+ };
13
+ return vue.computed(() => ({
14
+ ...initProps,
15
+ ...props.props
16
+ }));
17
+ };
18
+ const useComputedData = (props) => {
19
+ const propsAlias = usePropsAlias(props);
20
+ const dataObj = vue.computed(
21
+ () => props.data.reduce(
22
+ // eslint-disable-next-line no-return-assign, no-param-reassign
23
+ (o, cur) => (o[cur[propsAlias.value.key]] = cur) && o,
24
+ {}
25
+ )
26
+ );
27
+ const sourceData = vue.computed(
28
+ () => props.data.filter(
29
+ (item) => !props.modelValue.includes(item[propsAlias.value.key])
30
+ )
31
+ );
32
+ const targetData = vue.computed(() => {
33
+ if (props.targetOrder === "original") {
34
+ return props.data.filter(
35
+ (item) => props.modelValue.includes(item[propsAlias.value.key])
36
+ );
37
+ }
38
+ return props.modelValue.reduce((arr, cur) => {
39
+ const val = dataObj.value[cur];
40
+ if (val) {
41
+ arr.push(val);
42
+ }
43
+ return arr;
44
+ }, []);
45
+ });
46
+ return {
47
+ sourceData,
48
+ targetData
49
+ };
50
+ };
51
+ const useCheckedChange = (checkedState, emit) => {
52
+ const onSourceCheckedChange = (val, movedKeys) => {
53
+ checkedState.leftChecked = val;
54
+ if (!movedKeys)
55
+ return;
56
+ emit(_interface.LEFT_CHECK_CHANGE_EVENT, val, movedKeys);
57
+ };
58
+ const onTargetCheckedChange = (val, movedKeys) => {
59
+ checkedState.rightChecked = val;
60
+ if (!movedKeys)
61
+ return;
62
+ emit(_interface.RIGHT_CHECK_CHANGE_EVENT, val, movedKeys);
63
+ };
64
+ return {
65
+ onSourceCheckedChange,
66
+ onTargetCheckedChange
67
+ };
68
+ };
69
+ const useMove = (props, checkedState, emit) => {
70
+ const propsAlias = usePropsAlias(props);
71
+ const _emit = (value, direction, movedKeys) => {
72
+ emit(_interface.UPDATE_MODEL_EVENT, value);
73
+ emit(_interface.CHANGE_EVENT, value, direction, movedKeys);
74
+ };
75
+ const addToLeft = () => {
76
+ const currentValue = props.modelValue.slice();
77
+ checkedState.rightChecked.forEach((item) => {
78
+ const index = currentValue.indexOf(item);
79
+ if (index > -1) {
80
+ currentValue.splice(index, 1);
81
+ }
82
+ });
83
+ _emit(currentValue, "left", checkedState.rightChecked);
84
+ };
85
+ const addToRight = () => {
86
+ let currentValue = props.modelValue.slice();
87
+ const itemsToBeMoved = props.data.filter((item) => {
88
+ const itemKey = item[propsAlias.value.key];
89
+ return checkedState.leftChecked.includes(itemKey) && !props.modelValue.includes(itemKey);
90
+ }).map((item) => item[propsAlias.value.key]);
91
+ currentValue = props.targetOrder === "unshift" ? itemsToBeMoved.concat(currentValue) : currentValue.concat(itemsToBeMoved);
92
+ if (props.targetOrder === "original") {
93
+ currentValue = props.data.filter(
94
+ (item) => currentValue.includes(item[propsAlias.value.key])
95
+ ).map((item) => item[propsAlias.value.key]);
96
+ }
97
+ _emit(currentValue, "right", checkedState.leftChecked);
98
+ };
99
+ return {
100
+ addToLeft,
101
+ addToRight
102
+ };
103
+ };
104
+
105
+ exports.useCheckedChange = useCheckedChange;
106
+ exports.useComputedData = useComputedData;
107
+ exports.useMove = useMove;
108
+ exports.usePropsAlias = usePropsAlias;
@@ -0,0 +1,148 @@
1
+ 'use strict';
2
+
3
+ var vue = require('vue');
4
+ var ramda = require('ramda');
5
+ var vue3Util = require('@ibiz-template/vue3-util');
6
+ var transferUtil = require('./transfer-util.cjs');
7
+ var _interface = require('./interface.cjs');
8
+ var transferPanel = require('../transfer-panel/transfer-panel.cjs');
9
+ var icon = require('./icon.cjs');
10
+ require('./transfer.css');
11
+
12
+ "use strict";
13
+ const TransferSelect = /* @__PURE__ */ vue.defineComponent({
14
+ name: "IBizTransfer",
15
+ props: _interface.transferProps,
16
+ emits: _interface.transferEmits,
17
+ setup(props, {
18
+ emit,
19
+ slots
20
+ }) {
21
+ const ns = vue3Util.useNamespace("transfer");
22
+ const checkedState = vue.reactive({
23
+ leftChecked: [],
24
+ rightChecked: []
25
+ });
26
+ const propsAlias = transferUtil.usePropsAlias(props);
27
+ const {
28
+ sourceData,
29
+ targetData
30
+ } = transferUtil.useComputedData(props);
31
+ const {
32
+ onSourceCheckedChange,
33
+ onTargetCheckedChange
34
+ } = transferUtil.useCheckedChange(checkedState, emit);
35
+ const {
36
+ addToLeft,
37
+ addToRight
38
+ } = transferUtil.useMove(props, checkedState, emit);
39
+ const leftPanel = vue.ref();
40
+ const rightPanel = vue.ref();
41
+ const clearQuery = (which) => {
42
+ switch (which) {
43
+ case "left":
44
+ leftPanel.value.query = "";
45
+ break;
46
+ case "right":
47
+ rightPanel.value.query = "";
48
+ break;
49
+ default:
50
+ break;
51
+ }
52
+ };
53
+ const onLeftAcSearch = (query) => {
54
+ emit("leftAcSearch", query);
55
+ };
56
+ const hasButtonTexts = vue.computed(() => props.buttonTexts.length === 2);
57
+ const leftPanelTitle = vue.computed(() => props.titles[0] || "\u53EF\u9009\u5217\u8868");
58
+ const rightPanelTitle = vue.computed(() => props.titles[1] || "\u5DF2\u9009\u5217\u8868");
59
+ const panelFilterPlaceholder = vue.computed(() => props.filterPlaceholder || "\u8BF7\u8F93\u5165");
60
+ const optionRender = vue.computed(() => (option) => {
61
+ var _a;
62
+ if (props.renderContent)
63
+ return props.renderContent(vue.h, option);
64
+ const defaultSlotVNodes = (((_a = slots.default) == null ? void 0 : _a.call(slots, {
65
+ option
66
+ })) || []).filter((node) => node.type !== Comment);
67
+ if (defaultSlotVNodes.length) {
68
+ return defaultSlotVNodes;
69
+ }
70
+ return vue.h("span", option[propsAlias.value.label] || option[propsAlias.value.key]);
71
+ });
72
+ return {
73
+ ns,
74
+ targetData,
75
+ rightPanelTitle,
76
+ optionRender,
77
+ panelFilterPlaceholder,
78
+ leftPanelTitle,
79
+ sourceData,
80
+ leftPanel,
81
+ rightPanel,
82
+ hasButtonTexts,
83
+ checkedState,
84
+ addToLeft,
85
+ addToRight,
86
+ clearQuery,
87
+ onLeftAcSearch,
88
+ onSourceCheckedChange,
89
+ onTargetCheckedChange
90
+ };
91
+ },
92
+ render() {
93
+ return vue.createVNode("div", {
94
+ "class": this.ns.b()
95
+ }, [vue.createVNode(transferPanel.TransferPanel, {
96
+ "ref": "leftPanel",
97
+ "data": this.sourceData,
98
+ "readonly": this.readonly,
99
+ "optionRender": this.optionRender,
100
+ "placeholder": this.panelFilterPlaceholder,
101
+ "title": this.leftPanelTitle,
102
+ "filterable": this.filterable,
103
+ "format": this.format,
104
+ "enableAcSearch": this.enableRemoteSearch,
105
+ "loading": this.loading,
106
+ "filterMethod": this.filterMethod,
107
+ "defaultChecked": this.leftDefaultChecked,
108
+ "onAcSearch": this.onLeftAcSearch,
109
+ "props": this.props,
110
+ "onCheckedChange": this.onSourceCheckedChange
111
+ }, null), vue.createVNode("div", {
112
+ "class": this.ns.e("buttons")
113
+ }, [vue.createVNode(vue.resolveComponent("el-button"), {
114
+ "class": [this.ns.e("button"), this.ns.is("with-texts", this.hasButtonTexts)],
115
+ "type": "primary",
116
+ "disabled": !!ramda.isEmpty(this.checkedState.rightChecked) || this.readonly,
117
+ "onClick": this.addToLeft
118
+ }, {
119
+ default: () => [vue.createVNode(vue.resolveComponent("el-icon"), null, {
120
+ default: () => icon.arrowLeft()
121
+ }), this.buttonTexts[0] !== void 0 ? vue.createVNode("span", null, [this.buttonTexts[0]]) : null]
122
+ }), vue.createVNode(vue.resolveComponent("el-button"), {
123
+ "class": [this.ns.e("button"), this.ns.is("with-texts", this.hasButtonTexts)],
124
+ "type": "primary",
125
+ "disabled": !!ramda.isEmpty(this.checkedState.leftChecked) || this.readonly,
126
+ "onClick": this.addToRight
127
+ }, {
128
+ default: () => [this.buttonTexts[1] !== void 0 ? vue.createVNode("span", null, [this.buttonTexts[1]]) : null, vue.createVNode(vue.resolveComponent("el-icon"), null, {
129
+ default: () => icon.arrowRight()
130
+ })]
131
+ })]), vue.createVNode(transferPanel.TransferPanel, {
132
+ "ref": "rightPanel",
133
+ "data": this.targetData,
134
+ "readonly": this.readonly,
135
+ "optionRender": this.optionRender,
136
+ "placeholder": this.panelFilterPlaceholder,
137
+ "filterable": this.filterable,
138
+ "format": this.format,
139
+ "filterMethod": this.filterMethod,
140
+ "title": this.rightPanelTitle,
141
+ "defaultChecked": this.rightDefaultChecked,
142
+ "props": this.props,
143
+ "onCheckedChange": this.onTargetCheckedChange
144
+ }, null)]);
145
+ }
146
+ });
147
+
148
+ exports.TransferSelect = TransferSelect;
@@ -0,0 +1 @@
1
+ .ibiz-transfer__buttons{display:inline-block;padding:0 1.875rem;vertical-align:middle}.ibiz-transfer__button{vertical-align:top}.ibiz-transfer__button:nth-child(2){margin:0 0 0 10px}.ibiz-transfer__button i,.ibiz-transfer__button span{font-size:var(--ibiz-font-size-header-6)}.ibiz-transfer__button .el-icon{font-size:var(--ibiz-font-size-regular)}
@@ -0,0 +1,14 @@
1
+ 'use strict';
2
+
3
+ var vue = require('vue');
4
+
5
+ "use strict";
6
+ const Search = () => vue.createVNode("svg", {
7
+ "xmlns": "http://www.w3.org/2000/svg",
8
+ "viewBox": "0 0 1024 1024"
9
+ }, [vue.createVNode("path", {
10
+ "fill": "currentColor",
11
+ "d": "m795.904 750.72 124.992 124.928a32 32 0 0 1-45.248 45.248L750.656 795.904a416 416 0 1 1 45.248-45.248zM480 832a352 352 0 1 0 0-704 352 352 0 0 0 0 704"
12
+ }, null)]);
13
+
14
+ exports.Search = Search;
@@ -0,0 +1,58 @@
1
+ 'use strict';
2
+
3
+ var lodashEs = require('lodash-es');
4
+
5
+ "use strict";
6
+ const CHECKED_CHANGE_EVENT = "checkedChange";
7
+ const AC_SEARCH = "acSearch";
8
+ const transferCheckedChangeFn = (value, movedKeys) => [value, movedKeys].every(lodashEs.isArray) || lodashEs.isArray(value) && lodashEs.isNil(movedKeys);
9
+ const transferPanelProps = {
10
+ data: {
11
+ type: Array,
12
+ default: () => []
13
+ },
14
+ optionRender: {
15
+ type: Function
16
+ },
17
+ placeholder: String,
18
+ title: String,
19
+ filterable: Boolean,
20
+ enableAcSearch: Boolean,
21
+ format: {
22
+ type: Object,
23
+ default: () => ({})
24
+ },
25
+ filterMethod: {
26
+ type: Function
27
+ },
28
+ defaultChecked: {
29
+ type: Array,
30
+ default: () => []
31
+ },
32
+ props: {
33
+ type: Object,
34
+ default: () => ({
35
+ label: "label",
36
+ key: "key",
37
+ disabled: "disabled"
38
+ })
39
+ },
40
+ loading: {
41
+ type: Boolean,
42
+ default: false
43
+ },
44
+ readonly: {
45
+ type: Boolean,
46
+ default: false
47
+ }
48
+ };
49
+ const transferPanelEmits = {
50
+ [CHECKED_CHANGE_EVENT]: transferCheckedChangeFn,
51
+ [AC_SEARCH]: (query) => query
52
+ };
53
+
54
+ exports.AC_SEARCH = AC_SEARCH;
55
+ exports.CHECKED_CHANGE_EVENT = CHECKED_CHANGE_EVENT;
56
+ exports.transferCheckedChangeFn = transferCheckedChangeFn;
57
+ exports.transferPanelEmits = transferPanelEmits;
58
+ exports.transferPanelProps = transferPanelProps;
@@ -0,0 +1,133 @@
1
+ 'use strict';
2
+
3
+ var vue = require('vue');
4
+ var lodashEs = require('lodash-es');
5
+ var _interface = require('./interface.cjs');
6
+
7
+ "use strict";
8
+ const usePropsAlias = (props) => {
9
+ const initProps = {
10
+ label: "label",
11
+ key: "key",
12
+ disabled: "disabled"
13
+ };
14
+ return vue.computed(() => ({
15
+ ...initProps,
16
+ ...props.props
17
+ }));
18
+ };
19
+ const useCheck = (props, panelState, emit) => {
20
+ const propsAlias = usePropsAlias(props);
21
+ const filteredData = vue.ref([]);
22
+ const checkableData = vue.computed(
23
+ () => filteredData.value.filter((item) => {
24
+ return !item[propsAlias.value.disabled];
25
+ })
26
+ );
27
+ const checkedSummary = vue.computed(() => {
28
+ const checkedLength = panelState.checked.length;
29
+ const dataLength = props.data.length;
30
+ const { noChecked, hasChecked } = props.format;
31
+ if (noChecked && hasChecked) {
32
+ return checkedLength > 0 ? hasChecked.replace(/\${checked}/g, checkedLength.toString()).replace(/\${total}/g, dataLength.toString()) : noChecked.replace(/\${total}/g, dataLength.toString());
33
+ }
34
+ return "".concat(checkedLength, "/").concat(dataLength);
35
+ });
36
+ const isIndeterminate = vue.computed(() => {
37
+ const checkedLength = panelState.checked.length;
38
+ return checkedLength > 0 && checkedLength < checkableData.value.length;
39
+ });
40
+ const handleFilteredData = (value = "") => {
41
+ filteredData.value = props.data.filter((item) => {
42
+ if (lodashEs.isFunction(props.filterMethod)) {
43
+ return props.filterMethod(value, item);
44
+ }
45
+ const label = String(
46
+ item[propsAlias.value.label] || item[propsAlias.value.key]
47
+ );
48
+ return label.toLowerCase().includes(value.toLowerCase());
49
+ });
50
+ };
51
+ const onInputChange = async (value) => {
52
+ if (props.enableAcSearch) {
53
+ emit("acSearch", value);
54
+ } else {
55
+ handleFilteredData(value);
56
+ }
57
+ };
58
+ const updateAllChecked = () => {
59
+ const checkableDataKeys = checkableData.value.map(
60
+ (item) => item[propsAlias.value.key]
61
+ );
62
+ panelState.allChecked = checkableDataKeys.length > 0 && checkableDataKeys.every(
63
+ (item) => panelState.checked.includes(item)
64
+ );
65
+ };
66
+ const handleAllCheckedChange = (value) => {
67
+ panelState.checked = value ? checkableData.value.map((item) => item[propsAlias.value.key]) : [];
68
+ };
69
+ vue.watch(
70
+ () => panelState.checked,
71
+ (val, oldVal) => {
72
+ updateAllChecked();
73
+ if (panelState.checkChangeByUser) {
74
+ const movedKeys = val.concat(oldVal).filter((v) => !val.includes(v) || !oldVal.includes(v));
75
+ emit(_interface.CHECKED_CHANGE_EVENT, val, movedKeys);
76
+ } else {
77
+ emit(_interface.CHECKED_CHANGE_EVENT, val);
78
+ panelState.checkChangeByUser = true;
79
+ }
80
+ }
81
+ );
82
+ vue.watch(checkableData, () => {
83
+ updateAllChecked();
84
+ });
85
+ vue.watch(
86
+ () => props.data,
87
+ () => {
88
+ handleFilteredData(panelState.query);
89
+ const checked = [];
90
+ const filteredDataKeys = filteredData.value.map(
91
+ (item) => item[propsAlias.value.key]
92
+ );
93
+ panelState.checked.forEach((item) => {
94
+ if (filteredDataKeys.includes(item)) {
95
+ checked.push(item);
96
+ }
97
+ });
98
+ panelState.checkChangeByUser = false;
99
+ panelState.checked = checked;
100
+ }
101
+ );
102
+ vue.watch(
103
+ () => props.defaultChecked,
104
+ (val) => {
105
+ const checked = [];
106
+ const checkableDataKeys = props.data.map(
107
+ (item) => item[propsAlias.value.key]
108
+ );
109
+ val.forEach((item) => {
110
+ if (checkableDataKeys.includes(item)) {
111
+ checked.push(item);
112
+ }
113
+ });
114
+ panelState.checkChangeByUser = false;
115
+ panelState.checked = checked;
116
+ },
117
+ {
118
+ immediate: true
119
+ }
120
+ );
121
+ return {
122
+ filteredData,
123
+ checkableData,
124
+ checkedSummary,
125
+ isIndeterminate,
126
+ onInputChange,
127
+ updateAllChecked,
128
+ handleAllCheckedChange
129
+ };
130
+ };
131
+
132
+ exports.useCheck = useCheck;
133
+ exports.usePropsAlias = usePropsAlias;
@@ -0,0 +1,118 @@
1
+ 'use strict';
2
+
3
+ var vue = require('vue');
4
+ var ramda = require('ramda');
5
+ var vue3Util = require('@ibiz-template/vue3-util');
6
+ var _interface = require('./interface.cjs');
7
+ var transferPanelUtil = require('./transfer-panel-util.cjs');
8
+ var icon = require('./icon.cjs');
9
+ require('./transfer-panel.css');
10
+
11
+ "use strict";
12
+ const TransferPanel = /* @__PURE__ */ vue.defineComponent({
13
+ name: "IBizTransferPanel",
14
+ props: _interface.transferPanelProps,
15
+ emits: _interface.transferPanelEmits,
16
+ setup(props, {
17
+ emit,
18
+ slots
19
+ }) {
20
+ const ns = vue3Util.useNamespace("transfer-panel");
21
+ const panelState = vue.reactive({
22
+ checked: [],
23
+ allChecked: false,
24
+ query: "",
25
+ checkChangeByUser: true
26
+ });
27
+ const propsAlias = transferPanelUtil.usePropsAlias(props);
28
+ const {
29
+ filteredData,
30
+ checkedSummary,
31
+ isIndeterminate,
32
+ onInputChange,
33
+ handleAllCheckedChange
34
+ } = transferPanelUtil.useCheck(props, panelState, emit);
35
+ const hasNoMatch = vue.computed(() => !ramda.isEmpty(panelState.query) && ramda.isEmpty(filteredData.value));
36
+ const hasFooter = vue.computed(() => !(slots.default && ramda.isEmpty(slots.default()[0].children)));
37
+ const {
38
+ checked,
39
+ allChecked,
40
+ query
41
+ } = vue.toRefs(panelState);
42
+ return {
43
+ ns,
44
+ query,
45
+ allChecked,
46
+ checkedSummary,
47
+ hasNoMatch,
48
+ hasFooter,
49
+ checked,
50
+ filteredData,
51
+ propsAlias,
52
+ isIndeterminate,
53
+ onInputChange,
54
+ handleAllCheckedChange
55
+ };
56
+ },
57
+ render() {
58
+ var _a, _b;
59
+ return vue.createVNode("div", {
60
+ "class": this.ns.b()
61
+ }, [vue.createVNode("p", {
62
+ "class": this.ns.e("header")
63
+ }, [vue.createVNode(vue.resolveComponent("el-checkbox"), {
64
+ "modelValue": this.allChecked,
65
+ "onUpdate:modelValue": ($event) => this.allChecked = $event,
66
+ "disabled": this.readonly,
67
+ "indeterminate": this.isIndeterminate,
68
+ "validateEvent": false,
69
+ "onChange": this.handleAllCheckedChange
70
+ }, {
71
+ default: () => [this.title, vue.createVNode("span", null, [this.checkedSummary])]
72
+ })]), vue.createVNode("div", {
73
+ "class": [this.ns.e("body"), this.ns.is("with-footer", this.hasFooter)]
74
+ }, [this.filterable ? vue.createVNode(vue.resolveComponent("el-input"), {
75
+ "modelValue": this.query,
76
+ "onUpdate:modelValue": ($event) => this.query = $event,
77
+ "readonly": this.readonly,
78
+ "class": this.ns.e("filter"),
79
+ "size": "default",
80
+ "placeholder": this.placeholder,
81
+ "prefixIcon": () => icon.Search(),
82
+ "clearable": true,
83
+ "validateEvent": false,
84
+ "onInput": this.onInputChange
85
+ }, null) : null, vue.withDirectives(vue.createVNode("div", {
86
+ "class": [this.ns.e("content"), this.ns.is("filterable", this.filterable)]
87
+ }, [!this.hasNoMatch && !ramda.isEmpty(this.data) ? vue.createVNode(vue.resolveComponent("el-checkbox-group"), {
88
+ "modelValue": this.checked,
89
+ "onUpdate:modelValue": ($event) => this.checked = $event,
90
+ "validateEvent": false,
91
+ "disabled": this.readonly,
92
+ "class": [this.ns.e("list")]
93
+ }, {
94
+ default: () => {
95
+ return this.filteredData.map((item) => {
96
+ return vue.createVNode(vue.resolveComponent("el-checkbox"), {
97
+ "class": this.ns.e("item"),
98
+ "key": item[this.propsAlias.key],
99
+ "label": item[this.propsAlias.key],
100
+ "disabled": !!item[this.propsAlias.disabled],
101
+ "validateEvent": false
102
+ }, {
103
+ default: () => {
104
+ var _a2;
105
+ return [(_a2 = this.optionRender) == null ? void 0 : _a2.call(this, item)];
106
+ }
107
+ });
108
+ });
109
+ }
110
+ }) : vue.createVNode("div", {
111
+ "class": this.ns.e("empty")
112
+ }, [this.$slots.empty ? (_b = (_a = this.$slots).empty) == null ? void 0 : _b.call(_a) : vue.createVNode(vue.resolveComponent("iBizNoData"), {
113
+ "class": this.ns.em("empty", "no-data")
114
+ }, null)])]), [[vue.resolveDirective("loading"), this.enableAcSearch && this.loading]])])]);
115
+ }
116
+ });
117
+
118
+ exports.TransferPanel = TransferPanel;
@@ -0,0 +1 @@
1
+ .ibiz-transfer-panel{--ibiz-transfer-panel-border-color:var(--ibiz-editor-default-border-color);--ibiz-transfer-panel-border-radius:var(--ibiz-border-radius-extra-small);--ibiz-transfer-panel-width:200px;--ibiz-transfer-panel-header-height:40px;--ibiz-transfer-panel-header-bg-color:var(--ibiz-color-fill-0);--ibiz-transfer-panel-footer-height:40px;--ibiz-transfer-panel-body-height:278px;--ibiz-transfer-panel-item-height:30px;--ibiz-transfer-panel-filter-height:32px;--ibiz-transfer-panel-spacing-base:var(--ibiz-spacing-base);position:relative;box-sizing:border-box;display:inline-block;width:var(--ibiz-transfer-panel-width);max-height:100%;overflow:hidden;text-align:left;vertical-align:middle;background:var(--ibiz-color-bg-2)}.ibiz-transfer-panel__header{box-sizing:border-box;display:flex;align-items:center;height:var(--ibiz-transfer-panel-header-height);padding-left:var(--ibiz-transfer-panel-spacing-base);margin:0;color:var(--ibiz-color-text-1);background:var(--ibiz-transfer-panel-header-bg-color);border:1px solid var(--ibiz-transfer-panel-border-color);border-top-left-radius:var(--ibiz-transfer-panel-border-radius);border-top-right-radius:var(--ibiz-transfer-panel-border-radius)}.ibiz-transfer-panel__header .el-checkbox{position:relative;display:flex;align-items:center;width:100%}.ibiz-transfer-panel__header .el-checkbox .el-checkbox__label{font-size:var(--ibiz-font-size-header-5);font-weight:400;color:var(--ibiz-color-text-1)}.ibiz-transfer-panel__header .el-checkbox .el-checkbox__label span{position:absolute;top:50%;right:var(--ibiz-transfer-panel-spacing-base);font-size:var(--ibiz-font-size-regular);font-weight:400;color:var(--ibiz-color-text-3);transform:translate3d(0,-50%,0)}.ibiz-transfer-panel__body{height:var(--ibiz-transfer-panel-body-height);overflow:hidden;border-right:1px solid var(--ibiz-transfer-panel-border-color);border-bottom:1px solid var(--ibiz-transfer-panel-border-color);border-left:1px solid var(--ibiz-transfer-panel-border-color);border-bottom-right-radius:var(--ibiz-transfer-panel-border-radius);border-bottom-left-radius:var(--ibiz-transfer-panel-border-radius)}.ibiz-transfer-panel__filter{--el-input-height:var(--ibiz-transfer-panel-filter-height);box-sizing:border-box;padding:var(--ibiz-transfer-panel-spacing-base);text-align:center}.ibiz-transfer-panel__filter .el-icon{font-size:inherit}.ibiz-transfer-panel__content{width:100%;height:var(--ibiz-transfer-panel-body-height);padding:6px 0}.ibiz-transfer-panel__content.is-filterable{height:calc(100% - var(--ibiz-transfer-panel-filter-height) - var(--ibiz-transfer-panel-spacing-base) * 2);padding-top:0}.ibiz-transfer-panel__list{box-sizing:border-box;height:100%;margin:0;overflow:auto;list-style:none}.ibiz-transfer-panel__item{height:var(--ibiz-transfer-panel-item-height);padding-left:var(--ibiz-transfer-panel-spacing-base);line-height:var(--ibiz-transfer-panel-item-height)}.ibiz-transfer-panel__item.el-checkbox{--el-checkbox-font-size:var(--ibiz-font-size-regular);display:flex;align-items:center;color:var(--ibiz-color-text-0)}.ibiz-transfer-panel__item.el-checkbox .el-checkbox__label{box-sizing:border-box;display:block;width:100%;padding-left:22px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ibiz-transfer-panel__item .el-checkbox__input{position:absolute}.ibiz-transfer-panel__empty{padding:6px 15px 0;margin:0;text-align:center}.ibiz-transfer-panel__empty .ibiz-no-data.el-empty{justify-content:flex-start;padding:0}.ibiz-transfer-panel__empty .ibiz-no-data .el-empty__image{width:52px}.ibiz-transfer-panel .el-checkbox__inner{width:1em;height:1em;border-radius:3px}.ibiz-transfer-panel .el-checkbox__label{padding-left:var(--ibiz-spacing-tight)}