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

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 (104) 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-eIKUlAq_.js +4 -0
  4. package/dist/index.min.css +1 -1
  5. package/dist/index.system.min.js +1 -1
  6. package/dist/{map-chart-user-bTKfT7VH.js → map-chart-user-xOSZGbF2.js} +1 -1
  7. package/dist/{wang-editor-f_OOMd4x.js → wang-editor-6EirGFoh.js} +1 -1
  8. package/dist/{xlsx-util-3T0fByLw.js → xlsx-util-J1RHk00u.js} +1 -1
  9. package/es/common/map-chart-user/map-chart-user.util.mjs +1 -1
  10. package/es/control/app-menu/app-menu.d.ts +2 -2
  11. package/es/control/app-menu/app-menu.mjs +17 -9
  12. package/es/control/calendar/calendar.mjs +6 -2
  13. package/es/control/calendar/components/calendar-daily/use-calendar-daily.mjs +1 -1
  14. package/es/control/calendar/components/calendar-week/use-calendar-week.mjs +3 -3
  15. package/es/control/drbar/drbar.controller.mjs +4 -3
  16. package/es/control/drtab/drtab-control.util.mjs +1 -1
  17. package/es/control/grid/grid/grid-control.util.mjs +48 -2
  18. package/es/control/grid/row-edit-popover/row-edit-popover.css +1 -1
  19. package/es/control/kanban/kanban.mjs +6 -1
  20. package/es/editor/check-box-list/ibiz-checkbox-list/ibiz-checkbox-list.d.ts +1 -0
  21. package/es/editor/data-picker/ibiz-transfer-picker/components/index.d.ts +1 -0
  22. package/es/editor/data-picker/ibiz-transfer-picker/components/index.mjs +3 -0
  23. package/es/editor/data-picker/ibiz-transfer-picker/components/transfer/icon.d.ts +2 -0
  24. package/es/editor/data-picker/ibiz-transfer-picker/components/transfer/icon.mjs +19 -0
  25. package/es/editor/data-picker/ibiz-transfer-picker/components/transfer/interface.d.ts +99 -0
  26. package/es/editor/data-picker/ibiz-transfer-picker/components/transfer/interface.mjs +89 -0
  27. package/es/editor/data-picker/ibiz-transfer-picker/components/transfer/transfer-util.d.ts +17 -0
  28. package/es/editor/data-picker/ibiz-transfer-picker/components/transfer/transfer-util.mjs +103 -0
  29. package/es/editor/data-picker/ibiz-transfer-picker/components/transfer/transfer.css +1 -0
  30. package/es/editor/data-picker/ibiz-transfer-picker/components/transfer/transfer.d.ts +182 -0
  31. package/es/editor/data-picker/ibiz-transfer-picker/components/transfer/transfer.mjs +146 -0
  32. package/es/editor/data-picker/ibiz-transfer-picker/components/transfer-panel/icon.d.ts +1 -0
  33. package/es/editor/data-picker/ibiz-transfer-picker/components/transfer-panel/icon.mjs +12 -0
  34. package/es/editor/data-picker/ibiz-transfer-picker/components/transfer-panel/interface.d.ts +60 -0
  35. package/es/editor/data-picker/ibiz-transfer-picker/components/transfer-panel/interface.mjs +52 -0
  36. package/es/editor/data-picker/ibiz-transfer-picker/components/transfer-panel/transfer-panel-util.d.ts +14 -0
  37. package/es/editor/data-picker/ibiz-transfer-picker/components/transfer-panel/transfer-panel-util.mjs +130 -0
  38. package/es/editor/data-picker/ibiz-transfer-picker/components/transfer-panel/transfer-panel.css +1 -0
  39. package/es/editor/data-picker/ibiz-transfer-picker/components/transfer-panel/transfer-panel.d.ts +108 -0
  40. package/es/editor/data-picker/ibiz-transfer-picker/components/transfer-panel/transfer-panel.mjs +116 -0
  41. package/es/editor/data-picker/ibiz-transfer-picker/ibiz-transfer-picker.css +1 -0
  42. package/es/editor/data-picker/ibiz-transfer-picker/ibiz-transfer-picker.d.ts +97 -0
  43. package/es/editor/data-picker/ibiz-transfer-picker/ibiz-transfer-picker.mjs +279 -0
  44. package/es/editor/data-picker/index.d.ts +1 -0
  45. package/es/editor/data-picker/index.mjs +1 -0
  46. package/es/editor/data-picker/picker-editor.provider.mjs +3 -0
  47. package/es/editor/dropdown-list/dropdown-list-editor.provider.mjs +3 -0
  48. package/es/editor/dropdown-list/ibiz-tree-picker/ibiz-tree-picker.css +1 -0
  49. package/es/editor/dropdown-list/ibiz-tree-picker/ibiz-tree-picker.d.ts +93 -0
  50. package/es/editor/dropdown-list/ibiz-tree-picker/ibiz-tree-picker.mjs +292 -0
  51. package/es/editor/dropdown-list/index.d.ts +1 -0
  52. package/es/editor/dropdown-list/index.mjs +1 -0
  53. package/es/editor/index.mjs +12 -0
  54. package/es/editor/rate/ibiz-rate/ibiz-rate.d.ts +3 -0
  55. package/es/locale/en/index.d.ts +10 -0
  56. package/es/locale/en/index.mjs +10 -0
  57. package/es/locale/zh-CN/index.d.ts +10 -0
  58. package/es/locale/zh-CN/index.mjs +10 -0
  59. package/es/panel-component/app-switch/app-switch.controller.mjs +11 -1
  60. package/es/panel-component/panel-tab-panel/panel-tab-panel.css +1 -1
  61. package/es/panel-component/searchform-buttons/searchform-buttons.css +1 -1
  62. package/es/util/fullscreen/fullscreen-util.mjs +1 -1
  63. package/es/web-app/components/router-shell/router-shell.mjs +6 -4
  64. package/lib/common/map-chart-user/map-chart-user.util.cjs +1 -1
  65. package/lib/control/app-menu/app-menu.cjs +16 -8
  66. package/lib/control/calendar/calendar.cjs +6 -2
  67. package/lib/control/calendar/components/calendar-daily/use-calendar-daily.cjs +1 -1
  68. package/lib/control/calendar/components/calendar-week/use-calendar-week.cjs +3 -3
  69. package/lib/control/drbar/drbar.controller.cjs +4 -3
  70. package/lib/control/drtab/drtab-control.util.cjs +1 -1
  71. package/lib/control/grid/grid/grid-control.util.cjs +48 -2
  72. package/lib/control/grid/row-edit-popover/row-edit-popover.css +1 -1
  73. package/lib/control/kanban/kanban.cjs +6 -1
  74. package/lib/editor/data-picker/ibiz-transfer-picker/components/index.cjs +7 -0
  75. package/lib/editor/data-picker/ibiz-transfer-picker/components/transfer/icon.cjs +22 -0
  76. package/lib/editor/data-picker/ibiz-transfer-picker/components/transfer/interface.cjs +99 -0
  77. package/lib/editor/data-picker/ibiz-transfer-picker/components/transfer/transfer-util.cjs +108 -0
  78. package/lib/editor/data-picker/ibiz-transfer-picker/components/transfer/transfer.cjs +148 -0
  79. package/lib/editor/data-picker/ibiz-transfer-picker/components/transfer/transfer.css +1 -0
  80. package/lib/editor/data-picker/ibiz-transfer-picker/components/transfer-panel/icon.cjs +14 -0
  81. package/lib/editor/data-picker/ibiz-transfer-picker/components/transfer-panel/interface.cjs +58 -0
  82. package/lib/editor/data-picker/ibiz-transfer-picker/components/transfer-panel/transfer-panel-util.cjs +133 -0
  83. package/lib/editor/data-picker/ibiz-transfer-picker/components/transfer-panel/transfer-panel.cjs +118 -0
  84. package/lib/editor/data-picker/ibiz-transfer-picker/components/transfer-panel/transfer-panel.css +1 -0
  85. package/lib/editor/data-picker/ibiz-transfer-picker/ibiz-transfer-picker.cjs +281 -0
  86. package/lib/editor/data-picker/ibiz-transfer-picker/ibiz-transfer-picker.css +1 -0
  87. package/lib/editor/data-picker/index.cjs +2 -0
  88. package/lib/editor/data-picker/picker-editor.provider.cjs +3 -0
  89. package/lib/editor/dropdown-list/dropdown-list-editor.provider.cjs +3 -0
  90. package/lib/editor/dropdown-list/ibiz-tree-picker/ibiz-tree-picker.cjs +294 -0
  91. package/lib/editor/dropdown-list/ibiz-tree-picker/ibiz-tree-picker.css +1 -0
  92. package/lib/editor/dropdown-list/index.cjs +2 -0
  93. package/lib/editor/index.cjs +12 -0
  94. package/lib/locale/en/index.cjs +10 -0
  95. package/lib/locale/zh-CN/index.cjs +10 -0
  96. package/lib/panel-component/app-switch/app-switch.controller.cjs +11 -1
  97. package/lib/panel-component/panel-tab-panel/panel-tab-panel.css +1 -1
  98. package/lib/panel-component/searchform-buttons/searchform-buttons.css +1 -1
  99. package/lib/util/fullscreen/fullscreen-util.cjs +1 -1
  100. package/lib/web-app/components/router-shell/router-shell.cjs +6 -4
  101. package/package.json +5 -5
  102. package/dist/index-azhHVxuV.js +0 -4
  103. /package/es/node_modules/.pnpm/{@ibiz-template_core@0.7.40_axios@1.6.8_lodash-es@4.17.21_qs@6.11.2_qx-util@0.4.8_ramda@0.29.1 → @ibiz-template_core@0.7.41-alpha.1_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 +0 -0
  104. /package/lib/node_modules/.pnpm/{@ibiz-template_core@0.7.40_axios@1.6.8_lodash-es@4.17.21_qs@6.11.2_qx-util@0.4.8_ramda@0.29.1 → @ibiz-template_core@0.7.41-alpha.1_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 +0 -0
@@ -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)}
@@ -0,0 +1,281 @@
1
+ 'use strict';
2
+
3
+ var vue = require('vue');
4
+ var vue3Util = require('@ibiz-template/vue3-util');
5
+ var core = require('@ibiz-template/core');
6
+ var lodashEs = require('lodash-es');
7
+ require('./components/index.cjs');
8
+ require('./ibiz-transfer-picker.css');
9
+ var transfer = require('./components/transfer/transfer.cjs');
10
+
11
+ "use strict";
12
+ const IBizTransferPicker = /* @__PURE__ */ vue.defineComponent({
13
+ name: "IBizTransferPicker",
14
+ props: vue3Util.getDataPickerProps(),
15
+ emits: vue3Util.getEditorEmits(),
16
+ setup(props, {
17
+ emit
18
+ }) {
19
+ const ns = vue3Util.useNamespace("picker");
20
+ const ns2 = vue3Util.useNamespace("transfer-picker");
21
+ const c = props.controller;
22
+ const editorModel = c.model;
23
+ const curValue = vue.ref([]);
24
+ const items = vue.ref([]);
25
+ const selectItems = vue.ref([]);
26
+ const loading = vue.ref(false);
27
+ const editorRef = vue.ref();
28
+ const curIndexs = vue.ref([]);
29
+ const leftChecked = vue.ref([]);
30
+ const rightChecked = vue.ref([]);
31
+ const rightSelects = vue.ref([]);
32
+ const valueType = c.model.valueType;
33
+ const valueSeparator = c.model.valueSeparator || ",";
34
+ let titles = [ibiz.i18n.t("editor.transferPicker.optionalList"), ibiz.i18n.t("editor.transferPicker.selectedList")];
35
+ let buttonTexts = [ibiz.i18n.t("app.delete"), ibiz.i18n.t("app.add")];
36
+ let enableRemoteSearch = false;
37
+ if (editorModel.editorParams) {
38
+ const {
39
+ editorParams
40
+ } = editorModel;
41
+ if (editorParams.titles) {
42
+ try {
43
+ titles = JSON.parse(editorParams.titles);
44
+ } catch (error) {
45
+ ibiz.log.info(error);
46
+ }
47
+ }
48
+ if (editorParams.buttontexts) {
49
+ try {
50
+ buttonTexts = JSON.parse(editorParams.buttontexts);
51
+ } catch (error) {
52
+ ibiz.log.info(error);
53
+ }
54
+ }
55
+ if (editorParams.remotesearch)
56
+ enableRemoteSearch = editorParams.remotesearch === "true";
57
+ }
58
+ vue.watch(() => props.value, (newVal) => {
59
+ curValue.value = [];
60
+ selectItems.value = [];
61
+ if (newVal) {
62
+ if (valueType === "OBJECTS") {
63
+ newVal.forEach((item) => {
64
+ const _item = lodashEs.clone(item);
65
+ Object.assign(_item, {
66
+ [c.keyName]: item[c.objectIdField],
67
+ [c.textName]: item[c.objectNameField]
68
+ });
69
+ if (c.objectValueField) {
70
+ Object.assign(_item, {
71
+ ...item[c.objectValueField]
72
+ });
73
+ delete _item[c.objectValueField];
74
+ }
75
+ if (_item[c.keyName]) {
76
+ selectItems.value.push(_item);
77
+ }
78
+ });
79
+ } else if (c.objectIdField && valueSeparator) {
80
+ const values = newVal.split(valueSeparator);
81
+ values.forEach((value) => {
82
+ selectItems.value.push({
83
+ [c.keyName]: value
84
+ });
85
+ });
86
+ } else {
87
+ try {
88
+ selectItems.value = JSON.parse(newVal);
89
+ } catch (error) {
90
+ ibiz.log.error("SIMPLE\u7C7B\u578B\u5730\u5740\u680F\u503C\u683C\u5F0F".concat(newVal, "\u4E0D\u7B26\u5408JSON\u5B57\u7B26\u4E32\u8981\u6C42"));
91
+ }
92
+ }
93
+ selectItems.value.forEach((item) => {
94
+ curValue.value.push(item[c.keyName]);
95
+ const index = items.value.findIndex((i) => Object.is(i[c.keyName], item[c.keyName]));
96
+ if (index < 0) {
97
+ items.value.push({
98
+ [c.keyName]: item[c.keyName],
99
+ [c.textName]: item[c.textName]
100
+ });
101
+ }
102
+ });
103
+ }
104
+ }, {
105
+ immediate: true,
106
+ deep: true
107
+ });
108
+ vue.watch(editorRef, (newVal) => {
109
+ if (props.autoFocus && newVal && newVal.focus) {
110
+ newVal.focus();
111
+ }
112
+ });
113
+ const handleRightChange = (result) => {
114
+ const selects = [];
115
+ if (result && Array.isArray(result)) {
116
+ result.forEach((select) => {
117
+ Object.assign(select, {
118
+ [c.keyName]: select[c.keyName] ? select[c.keyName] : select.srfkey,
119
+ [c.textName]: select[c.textName] ? select[c.textName] : select.srfmajortext
120
+ });
121
+ if (valueType === "OBJECTS") {
122
+ selects.push(c.handleObjectParams(select));
123
+ } else if (c.objectIdField) {
124
+ selects.push(select[c.keyName]);
125
+ } else {
126
+ selects.push({
127
+ [c.keyName]: select[c.keyName],
128
+ [c.textName]: select[c.textName]
129
+ });
130
+ }
131
+ const index = items.value.findIndex((item) => Object.is(item[c.keyName], select[c.keyName]));
132
+ if (index < 0) {
133
+ items.value.push(select);
134
+ }
135
+ });
136
+ }
137
+ let value = null;
138
+ if (selects.length > 0) {
139
+ if (valueType === "OBJECTS") {
140
+ value = selects;
141
+ } else {
142
+ value = c.objectIdField ? selects.join(valueSeparator) : JSON.stringify(selects);
143
+ }
144
+ }
145
+ emit("change", value);
146
+ };
147
+ const filterMethod = (query, item) => {
148
+ const textName = item[c.textName];
149
+ return !query || (textName == null ? void 0 : textName.toLowerCase().includes(query == null ? void 0 : query.toLowerCase()));
150
+ };
151
+ const onRightChange = (selectKeys) => {
152
+ const selects = selectKeys.map((key) => {
153
+ const selcetItem = items.value.find((item) => item[c.keyName] === key);
154
+ return selcetItem || {};
155
+ });
156
+ handleRightChange(selects);
157
+ };
158
+ const onLeftCheckChange = (selectKeys) => {
159
+ leftChecked.value = selectKeys;
160
+ };
161
+ const onRightCheckChange = (selectKeys) => {
162
+ rightChecked.value = selectKeys;
163
+ };
164
+ const getServiceData = async (query) => {
165
+ let data = [];
166
+ if (c.model.appDataEntityId) {
167
+ try {
168
+ const trimQuery = query.trim();
169
+ const res = await c.getServiceData(trimQuery, props.data);
170
+ if (res) {
171
+ data = res.data;
172
+ }
173
+ } catch (error) {
174
+ ibiz.log.error(error);
175
+ }
176
+ }
177
+ return data;
178
+ };
179
+ const onSearch = async (...args) => {
180
+ rightSelects.value = items.value.filter((item) => !!selectItems.value.find((item2) => item2[c.keyName] === item[c.keyName]));
181
+ const query = args[0] || "";
182
+ loading.value = true;
183
+ const data = await getServiceData(query);
184
+ if (data) {
185
+ items.value = [...rightSelects.value, ...data.filter((item) => !rightSelects.value.find((item2) => item2[c.keyName] === item[c.keyName]))];
186
+ }
187
+ rightChecked.value = [...rightChecked.value];
188
+ leftChecked.value = [...leftChecked.value];
189
+ loading.value = false;
190
+ };
191
+ const debounceSearch = core.debounce(onSearch, 1e3);
192
+ const onLeftAcSearch = (query) => {
193
+ debounceSearch(query);
194
+ };
195
+ const valueText = vue.computed(() => {
196
+ return selectItems.value.map((item) => {
197
+ return item[c.textName];
198
+ }).join(",");
199
+ });
200
+ vue.watch(valueText, (newVal, oldVal) => {
201
+ if (newVal !== oldVal) {
202
+ emit("infoTextChange", newVal);
203
+ }
204
+ }, {
205
+ immediate: true
206
+ });
207
+ vue.onMounted(() => {
208
+ if (c.objectNameField) {
209
+ items.value = [];
210
+ onSearch("");
211
+ }
212
+ });
213
+ const renderContentItem = (h, option) => {
214
+ return h("span", {
215
+ title: option[c.textName]
216
+ }, option[c.textName]);
217
+ };
218
+ return {
219
+ c,
220
+ ns,
221
+ ns2,
222
+ items,
223
+ loading,
224
+ curValue,
225
+ valueText,
226
+ editorRef,
227
+ curIndexs,
228
+ leftChecked,
229
+ rightChecked,
230
+ titles,
231
+ buttonTexts,
232
+ enableRemoteSearch,
233
+ onSearch,
234
+ filterMethod,
235
+ onRightChange,
236
+ onLeftCheckChange,
237
+ onRightCheckChange,
238
+ renderContentItem,
239
+ onLeftAcSearch
240
+ };
241
+ },
242
+ render() {
243
+ const editContent = vue.createVNode("div", {
244
+ "class": [this.ns.e("autocomplete")]
245
+ }, [vue.createVNode(transfer.TransferSelect, vue.mergeProps({
246
+ "ref": "editorRef",
247
+ "modelValue": this.curValue,
248
+ "onUpdate:modelValue": ($event) => this.curValue = $event,
249
+ "data": this.items,
250
+ "readonly": this.readonly || this.disabled,
251
+ "left-default-checked": this.leftChecked,
252
+ "right-default-checked": this.rightChecked,
253
+ "props": {
254
+ key: this.c.keyName,
255
+ label: this.c.textName
256
+ },
257
+ "filterable": true,
258
+ "filter-placeholder": this.c.placeHolder,
259
+ "enableRemoteSearch": this.enableRemoteSearch,
260
+ "titles": this.titles,
261
+ "button-texts": this.buttonTexts,
262
+ "format": {
263
+ noChecked: "${total}",
264
+ hasChecked: "${checked}/${total}"
265
+ },
266
+ "target-order": this.enableRemoteSearch ? "push" : "original",
267
+ "loading": this.loading,
268
+ "filterMethod": this.filterMethod,
269
+ "renderContent": this.renderContentItem,
270
+ "onChange": this.onRightChange,
271
+ "onLeftCheckChange": this.onLeftCheckChange,
272
+ "onRightCheckChange": this.onRightCheckChange,
273
+ "onLeftAcSearch": this.onLeftAcSearch
274
+ }, this.$attrs), null)]);
275
+ return vue.createVNode("div", {
276
+ "class": [this.ns.b(), this.ns2.b(), this.disabled ? this.ns.m("disabled") : ""]
277
+ }, [editContent]);
278
+ }
279
+ });
280
+
281
+ exports.IBizTransferPicker = IBizTransferPicker;
@@ -0,0 +1 @@
1
+ .ibiz-transfer-picker{width:100%;height:100%}
@@ -6,6 +6,7 @@ var ibizPickerDropdown = require('./ibiz-picker-dropdown/ibiz-picker-dropdown.cj
6
6
  var ibizPickerLink = require('./ibiz-picker-link/ibiz-picker-link.cjs');
7
7
  var ibizPickerEmbedView = require('./ibiz-picker-embed-view/ibiz-picker-embed-view.cjs');
8
8
  var ibizPickerSelectView = require('./ibiz-picker-select-view/ibiz-picker-select-view.cjs');
9
+ var ibizTransferPicker = require('./ibiz-transfer-picker/ibiz-transfer-picker.cjs');
9
10
  var pickerEditor_controller = require('./picker-editor.controller.cjs');
10
11
  var pickerEditor_provider = require('./picker-editor.provider.cjs');
11
12
 
@@ -17,5 +18,6 @@ exports.IBizPickerDropDown = ibizPickerDropdown.IBizPickerDropDown;
17
18
  exports.IBizPickerLink = ibizPickerLink.IBizPickerLink;
18
19
  exports.IBizPickerEmbedView = ibizPickerEmbedView.IBizPickerEmbedView;
19
20
  exports.IBizPickerSelectView = ibizPickerSelectView.IBizPickerSelectView;
21
+ exports.IBizTransferPicker = ibizTransferPicker.IBizTransferPicker;
20
22
  exports.PickerEditorController = pickerEditor_controller.PickerEditorController;
21
23
  exports.DataPickerEditorProvider = pickerEditor_provider.DataPickerEditorProvider;
@@ -34,6 +34,9 @@ class DataPickerEditorProvider {
34
34
  case "PICKUPVIEW":
35
35
  componentName = "IBizPickerEmbedView";
36
36
  break;
37
+ case "TRANSFER_PICKER":
38
+ componentName = "IBizTransferPicker";
39
+ break;
37
40
  default:
38
41
  }
39
42
  this.formEditor = componentName;
@@ -21,6 +21,9 @@ class DropDownListEditorProvider {
21
21
  case "VIRTUALIZED_LIST":
22
22
  componentName = "IBizVirtualizedList";
23
23
  break;
24
+ case "TREE_PICKER":
25
+ componentName = "IBizTreePicker";
26
+ break;
24
27
  default:
25
28
  }
26
29
  this.formEditor = componentName;