@fecp/designer 5.3.13 → 5.3.15
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.
- package/es/designer.css +130 -52
- package/es/packages/designer/package.json.mjs +1 -1
- package/es/packages/designer/src/api/index.mjs +3 -3
- package/es/packages/designer/src/components/OnlyFLowConfigButton.vue2.mjs +8 -3
- package/es/packages/designer/src/packages/form/property/index.vue.mjs +6 -6
- package/es/packages/designer/src/packages/form/property/pageFooterBtn.vue.mjs +13 -1
- package/es/packages/designer/src/packages/form/property/subTable.vue.mjs +211 -57
- package/es/packages/designer/src/packages/form/property/widgets.vue.mjs +21 -4
- package/es/packages/vue/src/components/details/header/Header.vue.mjs +14 -6
- package/es/packages/vue/src/components/dialog/DialogRenderer.vue2.mjs +1 -1
- package/es/packages/vue/src/components/forms/checkbox/Checkbox.vue.mjs +2 -3
- package/es/packages/vue/src/components/forms/form/Form.vue.mjs +29 -4
- package/es/packages/vue/src/components/forms/radio/Radio.vue.mjs +2 -3
- package/es/packages/vue/src/components/forms/subTable/SubTable.vue.mjs +19 -22
- package/es/packages/vue/src/components/forms/text/Text.vue.mjs +1 -1
- package/es/packages/vue/src/components/table/Table.vue.mjs +15 -6
- package/es/packages/vue/src/components/table/TableColumn.vue.mjs +27 -17
- package/es/packages/vue/src/composables/usePageEvents.mjs +1 -1
- package/es/packages/vue/src/utils/datasource.mjs +1 -1
- package/lib/designer.css +130 -52
- package/lib/packages/designer/package.json.js +1 -1
- package/lib/packages/designer/src/api/index.js +3 -3
- package/lib/packages/designer/src/components/OnlyFLowConfigButton.vue2.js +8 -3
- package/lib/packages/designer/src/packages/form/property/pageFooterBtn.vue.js +13 -1
- package/lib/packages/designer/src/packages/form/property/subTable.vue.js +210 -56
- package/lib/packages/designer/src/packages/form/property/widgets.vue.js +44 -27
- package/lib/packages/vue/src/components/details/header/Header.vue.js +13 -5
- package/lib/packages/vue/src/components/dialog/DialogRenderer.vue2.js +1 -1
- package/lib/packages/vue/src/components/forms/checkbox/Checkbox.vue.js +2 -3
- package/lib/packages/vue/src/components/forms/form/Form.vue.js +29 -4
- package/lib/packages/vue/src/components/forms/radio/Radio.vue.js +2 -3
- package/lib/packages/vue/src/components/forms/subTable/SubTable.vue.js +19 -22
- package/lib/packages/vue/src/components/forms/text/Text.vue.js +1 -1
- package/lib/packages/vue/src/components/table/Table.vue.js +15 -6
- package/lib/packages/vue/src/components/table/TableColumn.vue.js +26 -16
- package/lib/packages/vue/src/composables/usePageEvents.js +1 -1
- package/lib/packages/vue/src/utils/datasource.js +1 -1
- package/package.json +1 -1
|
@@ -78,6 +78,10 @@ const _sfc_main = /* @__PURE__ */ Object.assign({
|
|
|
78
78
|
initFormMode: {
|
|
79
79
|
type: String,
|
|
80
80
|
default: ""
|
|
81
|
+
},
|
|
82
|
+
isApproval: {
|
|
83
|
+
type: Boolean,
|
|
84
|
+
default: false
|
|
81
85
|
}
|
|
82
86
|
},
|
|
83
87
|
emits: [
|
|
@@ -553,6 +557,24 @@ const _sfc_main = /* @__PURE__ */ Object.assign({
|
|
|
553
557
|
(_a = button.eventConfig) == null ? void 0 : _a.find((item) => item.name == "Click")
|
|
554
558
|
);
|
|
555
559
|
};
|
|
560
|
+
const handleApprovalEvent = () => {
|
|
561
|
+
return new Promise((resolve, reject) => {
|
|
562
|
+
var _a, _b;
|
|
563
|
+
const actions = ((_a = localConfig.value.pageFooterConfig) == null ? void 0 : _a.actions) || [];
|
|
564
|
+
const approvalAction = actions.find((item) => item.isApproval);
|
|
565
|
+
if (approvalAction) {
|
|
566
|
+
handleEvent.value(
|
|
567
|
+
formData.value,
|
|
568
|
+
approvalAction,
|
|
569
|
+
(_b = approvalAction.eventConfig) == null ? void 0 : _b.find((item) => item.name == "Click")
|
|
570
|
+
).then(() => {
|
|
571
|
+
resolve();
|
|
572
|
+
}).catch((error) => {
|
|
573
|
+
reject(error);
|
|
574
|
+
});
|
|
575
|
+
}
|
|
576
|
+
});
|
|
577
|
+
};
|
|
556
578
|
const validate = () => {
|
|
557
579
|
var _a;
|
|
558
580
|
return (_a = formRef.value) == null ? void 0 : _a.validate();
|
|
@@ -889,6 +911,7 @@ const _sfc_main = /* @__PURE__ */ Object.assign({
|
|
|
889
911
|
provide("gridLayoutFieldsData", gridLayoutFieldsData);
|
|
890
912
|
provide("setFormItemHeight", setFormItemHeight);
|
|
891
913
|
provide("formCtx", ctx);
|
|
914
|
+
provide("handleEvent", handleEvent);
|
|
892
915
|
__expose({
|
|
893
916
|
validate,
|
|
894
917
|
resetFields,
|
|
@@ -896,7 +919,8 @@ const _sfc_main = /* @__PURE__ */ Object.assign({
|
|
|
896
919
|
setFormData,
|
|
897
920
|
getFormItemRef,
|
|
898
921
|
formRef,
|
|
899
|
-
localConfig
|
|
922
|
+
localConfig,
|
|
923
|
+
handleApprovalEvent
|
|
900
924
|
});
|
|
901
925
|
return (_ctx, _cache) => {
|
|
902
926
|
const _component_el_form = ElForm;
|
|
@@ -912,8 +936,9 @@ const _sfc_main = /* @__PURE__ */ Object.assign({
|
|
|
912
936
|
default: withCtx(() => [
|
|
913
937
|
!configLoading.value && !__props.isSubForm && !__props.isDialog ? (openBlock(), createBlock(unref(header), {
|
|
914
938
|
key: 0,
|
|
939
|
+
isApproval: __props.isApproval,
|
|
915
940
|
pageHeaderConfig: localConfig.value.pageHeaderConfig
|
|
916
|
-
}, null, 8, ["pageHeaderConfig"])) : createCommentVNode("", true),
|
|
941
|
+
}, null, 8, ["isApproval", "pageHeaderConfig"])) : createCommentVNode("", true),
|
|
917
942
|
createVNode(unref(main), null, {
|
|
918
943
|
default: withCtx(() => [
|
|
919
944
|
createVNode(_component_el_form, {
|
|
@@ -968,7 +993,7 @@ const _sfc_main = /* @__PURE__ */ Object.assign({
|
|
|
968
993
|
]),
|
|
969
994
|
_: 1
|
|
970
995
|
}),
|
|
971
|
-
!__props.isSubForm && !__props.isDialog ? (openBlock(), createBlock(unref(footer), {
|
|
996
|
+
!__props.isSubForm && !__props.isDialog && !__props.isApproval ? (openBlock(), createBlock(unref(footer), {
|
|
972
997
|
key: 1,
|
|
973
998
|
formMode: formMode.value,
|
|
974
999
|
pageFooterConfig: localConfig.value.pageFooterConfig,
|
|
@@ -980,7 +1005,7 @@ const _sfc_main = /* @__PURE__ */ Object.assign({
|
|
|
980
1005
|
};
|
|
981
1006
|
}
|
|
982
1007
|
});
|
|
983
|
-
const _Form = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-
|
|
1008
|
+
const _Form = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-bf001c7c"]]);
|
|
984
1009
|
export {
|
|
985
1010
|
_Form as default
|
|
986
1011
|
};
|
|
@@ -64,9 +64,8 @@ const _sfc_main = /* @__PURE__ */ Object.assign({
|
|
|
64
64
|
(openBlock(true), createElementBlock(Fragment, null, renderList(options.value, (option) => {
|
|
65
65
|
return openBlock(), createBlock(_component_el_radio, {
|
|
66
66
|
value: option.value,
|
|
67
|
-
label: option.label
|
|
68
|
-
|
|
69
|
-
}, null, 8, ["value", "label", "disabled"]);
|
|
67
|
+
label: option.label
|
|
68
|
+
}, null, 8, ["value", "label"]);
|
|
70
69
|
}), 256))
|
|
71
70
|
]),
|
|
72
71
|
_: 1
|
|
@@ -28,26 +28,6 @@ const _sfc_main = /* @__PURE__ */ Object.assign({
|
|
|
28
28
|
type: String,
|
|
29
29
|
default: ""
|
|
30
30
|
}
|
|
31
|
-
// subFormId: {
|
|
32
|
-
// type: String,
|
|
33
|
-
// required: true,
|
|
34
|
-
// },
|
|
35
|
-
// subFormKey: {
|
|
36
|
-
// type: String,
|
|
37
|
-
// default: "",
|
|
38
|
-
// },
|
|
39
|
-
// subFormName: {
|
|
40
|
-
// type: String,
|
|
41
|
-
// default: "",
|
|
42
|
-
// },
|
|
43
|
-
// dataSourceFrom: {
|
|
44
|
-
// type: String,
|
|
45
|
-
// default: "",
|
|
46
|
-
// },
|
|
47
|
-
// triggerSubFormPageEvent: {
|
|
48
|
-
// type: Boolean,
|
|
49
|
-
// default: false,
|
|
50
|
-
// },
|
|
51
31
|
},
|
|
52
32
|
setup(__props, { expose: __expose }) {
|
|
53
33
|
const props = __props;
|
|
@@ -55,6 +35,22 @@ const _sfc_main = /* @__PURE__ */ Object.assign({
|
|
|
55
35
|
inject("rowHeight");
|
|
56
36
|
inject("gridLayout");
|
|
57
37
|
const setFormItemHeight = inject("setFormItemHeight");
|
|
38
|
+
const handleEvent = inject("handleEvent");
|
|
39
|
+
const btnRollbackEvent = computed(() => {
|
|
40
|
+
const btnRollback = props.config.btnRollback || [];
|
|
41
|
+
const data = {};
|
|
42
|
+
for (const item of btnRollback) {
|
|
43
|
+
const handleFunc = () => {
|
|
44
|
+
handleEvent.value(
|
|
45
|
+
formData.value,
|
|
46
|
+
{},
|
|
47
|
+
{ eventFlow: item.callbackEventConfig }
|
|
48
|
+
);
|
|
49
|
+
};
|
|
50
|
+
data[item.id] = handleFunc;
|
|
51
|
+
}
|
|
52
|
+
return data;
|
|
53
|
+
});
|
|
58
54
|
const subTableData = computed(() => {
|
|
59
55
|
if (props.config.dataSourceFrom == "main") {
|
|
60
56
|
return formData.value[props.config.fieldName];
|
|
@@ -202,8 +198,9 @@ const _sfc_main = /* @__PURE__ */ Object.assign({
|
|
|
202
198
|
tableData: unref(subTableData),
|
|
203
199
|
initHiddenData: unref(initHiddenData),
|
|
204
200
|
canLoadBySearchData: __props.config.reloadOnParamsChange,
|
|
205
|
-
readonly: __props.config.isSubTableReadOnly || __props.formMode == "query"
|
|
206
|
-
|
|
201
|
+
readonly: __props.config.isSubTableReadOnly || __props.formMode == "query",
|
|
202
|
+
btnRollbackEvent: unref(btnRollbackEvent)
|
|
203
|
+
}, null, 8, ["templateKey", "mode", "titleMode", "hasPagination", "height", "tableData", "initHiddenData", "canLoadBySearchData", "readonly", "btnRollbackEvent"])
|
|
207
204
|
], 64);
|
|
208
205
|
};
|
|
209
206
|
}
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
/* empty css */
|
|
3
3
|
/* empty css */
|
|
4
4
|
import { computed, getCurrentInstance, inject, createElementBlock, openBlock, createVNode, createCommentVNode, mergeProps, toHandlers, createSlots, withCtx, createElementVNode, toDisplayString, createBlock, createTextVNode, unref } from "vue";
|
|
5
|
-
/* empty css */
|
|
6
5
|
/* empty css */
|
|
7
6
|
/* empty css */
|
|
7
|
+
/* empty css */
|
|
8
8
|
import { openDialog } from "../../dialog/index.mjs";
|
|
9
9
|
import api from "../../../api/index.mjs";
|
|
10
10
|
/* empty css */
|
|
@@ -98,6 +98,10 @@ const _sfc_main = /* @__PURE__ */ Object.assign({
|
|
|
98
98
|
initHiddenData: {
|
|
99
99
|
type: Object,
|
|
100
100
|
default: {}
|
|
101
|
+
},
|
|
102
|
+
btnRollbackEvent: {
|
|
103
|
+
type: Object,
|
|
104
|
+
default: {}
|
|
101
105
|
}
|
|
102
106
|
},
|
|
103
107
|
emits: [
|
|
@@ -291,7 +295,7 @@ const _sfc_main = /* @__PURE__ */ Object.assign({
|
|
|
291
295
|
}
|
|
292
296
|
};
|
|
293
297
|
const handleFlowEvent = ref(null);
|
|
294
|
-
const handleCustomBtnClick = ({ btn, event, type }) => {
|
|
298
|
+
const handleCustomBtnClick = async ({ btn, event, type }) => {
|
|
295
299
|
var _a, _b;
|
|
296
300
|
switch (btn.btnType) {
|
|
297
301
|
case "refresh":
|
|
@@ -304,12 +308,16 @@ const _sfc_main = /* @__PURE__ */ Object.assign({
|
|
|
304
308
|
handlePersonalize();
|
|
305
309
|
break;
|
|
306
310
|
default:
|
|
307
|
-
(_b = handleFlowEvent.value) == null ? void 0 : _b.call(
|
|
311
|
+
await ((_b = handleFlowEvent.value) == null ? void 0 : _b.call(
|
|
308
312
|
handleFlowEvent,
|
|
309
313
|
hiddenFormData.value,
|
|
310
314
|
btn,
|
|
311
315
|
(_a = btn.eventConfig) == null ? void 0 : _a.find((item) => item.name == "Click")
|
|
312
|
-
);
|
|
316
|
+
));
|
|
317
|
+
const handleFunc = props.btnRollbackEvent[btn.id];
|
|
318
|
+
if (handleFunc && typeof handleFunc == "function") {
|
|
319
|
+
handleFunc();
|
|
320
|
+
}
|
|
313
321
|
}
|
|
314
322
|
};
|
|
315
323
|
const handleSortChange = ({ property, order }) => {
|
|
@@ -622,7 +630,8 @@ const _sfc_main = /* @__PURE__ */ Object.assign({
|
|
|
622
630
|
"table-data": displayData.value,
|
|
623
631
|
readonly: __props.readonly,
|
|
624
632
|
isDialog: __props.isDialog,
|
|
625
|
-
hiddenFormData: hiddenFormData.value
|
|
633
|
+
hiddenFormData: hiddenFormData.value,
|
|
634
|
+
btnRollbackEvent: __props.btnRollbackEvent
|
|
626
635
|
}, createSlots({ _: 2 }, [
|
|
627
636
|
renderList(fieldsData.value, (field) => {
|
|
628
637
|
return {
|
|
@@ -632,7 +641,7 @@ const _sfc_main = /* @__PURE__ */ Object.assign({
|
|
|
632
641
|
])
|
|
633
642
|
};
|
|
634
643
|
})
|
|
635
|
-
]), 1032, ["fields-data", "show-index", "select-mode", "is-opt-btns", "opt-btns", "mode-key", "modes", "data-source-options", "dictionary-options", "localConfig", "table-ref", "table-data", "readonly", "isDialog", "hiddenFormData"])
|
|
644
|
+
]), 1032, ["fields-data", "show-index", "select-mode", "is-opt-btns", "opt-btns", "mode-key", "modes", "data-source-options", "dictionary-options", "localConfig", "table-ref", "table-data", "readonly", "isDialog", "hiddenFormData", "btnRollbackEvent"])
|
|
636
645
|
];
|
|
637
646
|
}),
|
|
638
647
|
_: 3
|
|
@@ -651,7 +660,7 @@ const _sfc_main = /* @__PURE__ */ Object.assign({
|
|
|
651
660
|
};
|
|
652
661
|
}
|
|
653
662
|
});
|
|
654
|
-
const _Table = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-
|
|
663
|
+
const _Table = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-3c129bed"]]);
|
|
655
664
|
export {
|
|
656
665
|
_Table as default
|
|
657
666
|
};
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
/* empty css */
|
|
2
2
|
/* empty css */
|
|
3
3
|
/* empty css */
|
|
4
|
-
import { getCurrentInstance, computed, createElementBlock, openBlock, createBlock, createCommentVNode, unref, Fragment, renderList, withCtx, renderSlot, toDisplayString,
|
|
4
|
+
import { getCurrentInstance, computed, createElementBlock, openBlock, createBlock, createCommentVNode, unref, Fragment, renderList, withCtx, renderSlot, toDisplayString, createTextVNode, createVNode } from "vue";
|
|
5
5
|
import "../../../../../node_modules/.pnpm/vxe-table@4.17.47_vue@3.5.13_typescript@5.7.3_/node_modules/vxe-table/es/components.mjs";
|
|
6
6
|
import { CopyDocument as copy_document_default } from "../../../../../node_modules/.pnpm/@element-plus_icons-vue@2.3.2_vue@3.5.13_typescript@5.7.3_/node_modules/@element-plus/icons-vue/dist/index.mjs";
|
|
7
7
|
import { checkFilterMatch } from "../../utils/parseFilterConfig.mjs";
|
|
8
8
|
import { removeEmptyValues } from "../../utils/common.mjs";
|
|
9
|
-
/* empty css */
|
|
10
9
|
/* empty css */
|
|
11
10
|
/* empty css */
|
|
11
|
+
/* empty css */
|
|
12
12
|
/* empty css */
|
|
13
13
|
/* empty css */
|
|
14
14
|
import "./index.mjs";
|
|
@@ -103,6 +103,10 @@ const _sfc_main = {
|
|
|
103
103
|
hiddenFormData: {
|
|
104
104
|
type: Object,
|
|
105
105
|
default: {}
|
|
106
|
+
},
|
|
107
|
+
btnRollbackEvent: {
|
|
108
|
+
type: Object,
|
|
109
|
+
default: {}
|
|
106
110
|
}
|
|
107
111
|
},
|
|
108
112
|
setup(__props) {
|
|
@@ -269,7 +273,7 @@ const _sfc_main = {
|
|
|
269
273
|
);
|
|
270
274
|
return Math.max(maxVisibleBtns, 1) * btnWidth + padding;
|
|
271
275
|
});
|
|
272
|
-
const {
|
|
276
|
+
const { handleEvent } = useEventFlow({
|
|
273
277
|
fields: props.fieldsData,
|
|
274
278
|
instance,
|
|
275
279
|
localConfig: props.localConfig,
|
|
@@ -277,13 +281,17 @@ const _sfc_main = {
|
|
|
277
281
|
table: props.tableRef
|
|
278
282
|
}
|
|
279
283
|
});
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
item,
|
|
284
|
+
async function handleButtonClick(row, btn, eventConfig) {
|
|
285
|
+
await handleEvent(
|
|
283
286
|
{ ...row, ...removeEmptyValues(props.hiddenFormData) },
|
|
284
|
-
|
|
287
|
+
btn,
|
|
288
|
+
eventConfig == null ? void 0 : eventConfig.find((item) => item.name == "Click")
|
|
285
289
|
);
|
|
286
|
-
|
|
290
|
+
const handleFunc = props.btnRollbackEvent[btn.id];
|
|
291
|
+
if (handleFunc && typeof handleFunc == "function") {
|
|
292
|
+
handleFunc();
|
|
293
|
+
}
|
|
294
|
+
}
|
|
287
295
|
return (_ctx, _cache) => {
|
|
288
296
|
const _component_el_link = ElLink;
|
|
289
297
|
const _component_el_icon = ElIcon;
|
|
@@ -333,15 +341,16 @@ const _sfc_main = {
|
|
|
333
341
|
field
|
|
334
342
|
}, () => [
|
|
335
343
|
field.prefix ? (openBlock(), createElementBlock("span", _hoisted_2, toDisplayString(field.prefix), 1)) : createCommentVNode("", true),
|
|
336
|
-
field.isLink ? (openBlock(), createBlock(_component_el_link,
|
|
344
|
+
field.isLink ? (openBlock(), createBlock(_component_el_link, {
|
|
337
345
|
key: 1,
|
|
338
|
-
type: "primary"
|
|
339
|
-
|
|
346
|
+
type: "primary",
|
|
347
|
+
onClick: ($event) => handleButtonClick(row, field, field.linkConfig)
|
|
348
|
+
}, {
|
|
340
349
|
default: withCtx(() => [
|
|
341
350
|
createTextVNode(toDisplayString(formatCellValue(row, field)), 1)
|
|
342
351
|
]),
|
|
343
352
|
_: 2
|
|
344
|
-
},
|
|
353
|
+
}, 1032, ["onClick"])) : (openBlock(), createElementBlock(Fragment, { key: 2 }, [
|
|
345
354
|
createTextVNode(toDisplayString(formatCellValue(row, field)), 1)
|
|
346
355
|
], 64)),
|
|
347
356
|
field.suffix ? (openBlock(), createElementBlock("span", _hoisted_3, toDisplayString(field.suffix), 1)) : createCommentVNode("", true),
|
|
@@ -369,17 +378,18 @@ const _sfc_main = {
|
|
|
369
378
|
}, {
|
|
370
379
|
default: withCtx(({ row }) => [
|
|
371
380
|
(openBlock(true), createElementBlock(Fragment, null, renderList(getVisibleOptBtns(row), (btn) => {
|
|
372
|
-
return openBlock(), createBlock(_component_el_button,
|
|
381
|
+
return openBlock(), createBlock(_component_el_button, {
|
|
373
382
|
key: btn.id,
|
|
374
383
|
type: "primary",
|
|
375
384
|
link: "",
|
|
376
|
-
disabled: isBtnDisabled(row, btn)
|
|
377
|
-
|
|
385
|
+
disabled: isBtnDisabled(row, btn),
|
|
386
|
+
onClick: ($event) => handleButtonClick(row, btn, btn.eventConfig)
|
|
387
|
+
}, {
|
|
378
388
|
default: withCtx(() => [
|
|
379
389
|
createTextVNode(toDisplayString(btn.label), 1)
|
|
380
390
|
]),
|
|
381
391
|
_: 2
|
|
382
|
-
},
|
|
392
|
+
}, 1032, ["disabled", "onClick"]);
|
|
383
393
|
}), 128))
|
|
384
394
|
]),
|
|
385
395
|
_: 1
|
|
@@ -388,7 +398,7 @@ const _sfc_main = {
|
|
|
388
398
|
};
|
|
389
399
|
}
|
|
390
400
|
};
|
|
391
|
-
const TableColumn = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-
|
|
401
|
+
const TableColumn = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-77ad8323"]]);
|
|
392
402
|
export {
|
|
393
403
|
TableColumn as default
|
|
394
404
|
};
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { reactive } from "vue";
|
|
2
2
|
import { parseRouteParams } from "./parseRouteParams.mjs";
|
|
3
3
|
/* empty css */
|
|
4
|
-
/* empty css */
|
|
5
4
|
/* empty css */
|
|
6
5
|
/* empty css */
|
|
6
|
+
/* empty css */
|
|
7
7
|
import { ElLoading } from "../../../../node_modules/.pnpm/element-plus@2.13.2_vue@3.5.13_typescript@5.7.3_/node_modules/element-plus/es/components/loading/index.mjs";
|
|
8
8
|
import { ElMessage } from "../../../../node_modules/.pnpm/element-plus@2.13.2_vue@3.5.13_typescript@5.7.3_/node_modules/element-plus/es/components/message/index.mjs";
|
|
9
9
|
class DataSourceManager {
|