@fecp/designer 5.1.6 → 5.2.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 (137) hide show
  1. package/es/config-dev.js +1 -1
  2. package/es/designer.css +2083 -1300
  3. package/es/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 +16 -0
  4. package/es/packages/designer/src/api/index.mjs +16 -1
  5. package/es/packages/designer/src/components/FieldSetMapping.vue2.mjs +407 -0
  6. package/es/packages/designer/src/components/FormulaEditorInput.vue.mjs +1 -1
  7. package/es/packages/designer/src/components/JsonDataDrawer.vue.mjs +1 -2
  8. package/es/packages/designer/src/components/OnlyFLowConfigButton.vue2.mjs +118 -0
  9. package/es/packages/designer/src/components/TemplateDialog.vue.mjs +254 -0
  10. package/es/packages/designer/src/components/TemplateSelector.vue.mjs +22 -175
  11. package/es/packages/designer/src/components/TemplateSelector.vue2.mjs +1 -0
  12. package/es/packages/designer/src/layout/aside/HiddenFieldDialog.vue.mjs +9 -15
  13. package/es/packages/designer/src/layout/header/index.vue.mjs +195 -11
  14. package/es/packages/designer/src/layout/index.vue.mjs +2 -2
  15. package/es/packages/designer/src/packages/dialog/index.vue.mjs +2 -2
  16. package/es/packages/designer/src/packages/dialogGlobal/index.vue.mjs +1004 -0
  17. package/es/packages/designer/src/packages/dialogGlobal/useDialogGlobalDialog.mjs +16 -0
  18. package/es/packages/designer/src/packages/event/index.vue2.mjs +76 -16
  19. package/es/packages/designer/src/packages/event/onlyFlow.vue2.mjs +105 -0
  20. package/es/packages/designer/src/packages/event/useOnlyFlowDialog.mjs +1 -1
  21. package/es/packages/designer/src/packages/eventFlow/dialog/action/Dialog.vue.mjs +225 -24
  22. package/es/packages/designer/src/packages/eventFlow/dialog/action/config.mjs +5 -1
  23. package/es/packages/designer/src/packages/form/aside/index.mjs +24 -10
  24. package/es/packages/designer/src/packages/form/components/ApprovalHistory.vue.mjs +3 -3
  25. package/es/packages/designer/src/packages/form/components/ComponentPreviewWrapper.vue.mjs +152 -69
  26. package/es/packages/designer/src/packages/form/components/DefaultValueEditor.vue.mjs +88 -0
  27. package/es/packages/designer/src/packages/form/components/SubForm.vue.mjs +3 -3
  28. package/es/packages/designer/src/packages/form/components/SubTable.vue.mjs +3 -3
  29. package/es/packages/designer/src/packages/form/components/SubTitle.vue.mjs +27 -0
  30. package/es/packages/designer/src/packages/form/headerBtn.vue.mjs +33 -57
  31. package/es/packages/designer/src/packages/form/index.vue.mjs +20 -8
  32. package/es/packages/designer/src/packages/form/property/index.vue.mjs +5 -3
  33. package/es/packages/designer/src/packages/form/property/subTitleH2.vue.mjs +94 -0
  34. package/es/packages/designer/src/packages/form/property/widgets.vue.mjs +275 -94
  35. package/es/packages/designer/src/packages/formulaEditor/components/FieldVariable.vue2.mjs +84 -0
  36. package/es/packages/designer/src/packages/formulaEditor/components/FormulaList.vue2.mjs +130 -0
  37. package/es/packages/designer/src/packages/formulaEditor/index.vue2.mjs +230 -0
  38. package/es/packages/designer/src/packages/table/default.mjs +1 -0
  39. package/es/packages/designer/src/packages/table/headerBtn.vue.mjs +48 -17
  40. package/es/packages/designer/src/packages/table/index.vue.mjs +1 -3
  41. package/es/packages/designer/src/packages/table/property/filterWidgets.vue.mjs +34 -7
  42. package/es/packages/designer/src/packages/table/queryModule/DynamicModeConfig.vue.mjs +492 -0
  43. package/es/packages/designer/src/packages/table/queryModule/FixedModeConfig.vue.mjs +15 -2
  44. package/es/packages/designer/src/packages/table/queryModule/index.vue.mjs +463 -138
  45. package/es/packages/designer/src/packages/table/tableBtn.vue.mjs +33 -15
  46. package/es/packages/designer/src/utils/optionLoader.mjs +157 -0
  47. package/es/packages/designer/src/utils/simpleCache.mjs +80 -0
  48. package/es/packages/mobile/src/components/form/field/Field.vue.mjs +14 -12
  49. package/es/packages/vue/src/api/index.mjs +3 -0
  50. package/es/packages/vue/src/components/all.mjs +2 -2
  51. package/es/packages/vue/src/components/bus/approvalHistory/ApprovalHistory.vue.mjs +3 -3
  52. package/es/packages/vue/src/components/details/header/Header.vue.mjs +1 -1
  53. package/es/packages/vue/src/components/dialog/DialogRenderer.vue2.mjs +2 -2
  54. package/es/packages/vue/src/components/forms/cascader/Cascader.vue.mjs +3 -2
  55. package/es/packages/vue/src/components/forms/form/Form.vue.mjs +6 -3
  56. package/es/packages/vue/src/components/forms/formItem/FormItem.vue.mjs +14 -12
  57. package/es/packages/vue/src/components/forms/index.mjs +2 -2
  58. package/es/packages/vue/src/components/forms/subForm/SubForm.vue.mjs +2 -2
  59. package/es/packages/vue/src/components/forms/subTable/SubTable.vue.mjs +2 -2
  60. package/es/packages/vue/src/components/forms/subTitle/SubTitle.vue.mjs +27 -0
  61. package/es/packages/vue/src/components/forms/subTitle/index.mjs +7 -0
  62. package/es/packages/vue/src/components/forms/text/Text.vue.mjs +47 -4
  63. package/es/packages/vue/src/components/table/CustomButtons.vue.mjs +32 -4
  64. package/es/packages/vue/src/components/table/DynamicQuery.vue.mjs +425 -0
  65. package/es/packages/vue/src/components/table/Table.vue.mjs +39 -21
  66. package/es/packages/vue/src/components/table/TableFilter.vue.mjs +7 -25
  67. package/es/packages/vue/src/utils/common.mjs +27 -0
  68. package/es/packages/vue/src/utils/eventFlow/actionHandlers.mjs +20 -3
  69. package/lib/config-dev.js +1 -1
  70. package/lib/designer.css +2083 -1300
  71. package/lib/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.js +16 -0
  72. package/lib/packages/designer/src/api/index.js +15 -0
  73. package/lib/packages/designer/src/components/FieldSetMapping.vue2.js +407 -0
  74. package/lib/packages/designer/src/components/FormulaEditorInput.vue.js +1 -1
  75. package/lib/packages/designer/src/components/JsonDataDrawer.vue.js +1 -2
  76. package/lib/packages/designer/src/components/OnlyFLowConfigButton.vue2.js +118 -0
  77. package/lib/packages/designer/src/components/TemplateDialog.vue.js +254 -0
  78. package/lib/packages/designer/src/components/TemplateSelector.vue.js +21 -174
  79. package/lib/packages/designer/src/components/TemplateSelector.vue2.js +1 -0
  80. package/lib/packages/designer/src/layout/aside/HiddenFieldDialog.vue.js +9 -15
  81. package/lib/packages/designer/src/layout/header/index.vue.js +192 -8
  82. package/lib/packages/designer/src/layout/index.vue.js +2 -2
  83. package/lib/packages/designer/src/packages/dialog/index.vue.js +2 -2
  84. package/lib/packages/designer/src/packages/dialogGlobal/index.vue.js +1004 -0
  85. package/lib/packages/designer/src/packages/dialogGlobal/useDialogGlobalDialog.js +16 -0
  86. package/lib/packages/designer/src/packages/event/index.vue2.js +75 -15
  87. package/lib/packages/designer/src/packages/event/onlyFlow.vue2.js +105 -0
  88. package/lib/packages/designer/src/packages/event/useOnlyFlowDialog.js +1 -1
  89. package/lib/packages/designer/src/packages/eventFlow/dialog/action/Dialog.vue.js +226 -25
  90. package/lib/packages/designer/src/packages/eventFlow/dialog/action/config.js +5 -1
  91. package/lib/packages/designer/src/packages/form/aside/index.js +24 -10
  92. package/lib/packages/designer/src/packages/form/components/ApprovalHistory.vue.js +3 -3
  93. package/lib/packages/designer/src/packages/form/components/ComponentPreviewWrapper.vue.js +160 -77
  94. package/lib/packages/designer/src/packages/form/components/DefaultValueEditor.vue.js +88 -0
  95. package/lib/packages/designer/src/packages/form/components/SubForm.vue.js +3 -3
  96. package/lib/packages/designer/src/packages/form/components/SubTable.vue.js +3 -3
  97. package/lib/packages/designer/src/packages/form/components/SubTitle.vue.js +27 -0
  98. package/lib/packages/designer/src/packages/form/headerBtn.vue.js +33 -57
  99. package/lib/packages/designer/src/packages/form/index.vue.js +21 -9
  100. package/lib/packages/designer/src/packages/form/property/index.vue.js +6 -4
  101. package/lib/packages/designer/src/packages/form/property/subTitleH2.vue.js +94 -0
  102. package/lib/packages/designer/src/packages/form/property/widgets.vue.js +271 -90
  103. package/lib/packages/designer/src/packages/formulaEditor/components/FieldVariable.vue2.js +84 -0
  104. package/lib/packages/designer/src/packages/formulaEditor/components/FormulaList.vue2.js +130 -0
  105. package/lib/packages/designer/src/packages/formulaEditor/index.vue2.js +230 -0
  106. package/lib/packages/designer/src/packages/table/default.js +1 -0
  107. package/lib/packages/designer/src/packages/table/headerBtn.vue.js +48 -17
  108. package/lib/packages/designer/src/packages/table/index.vue.js +1 -3
  109. package/lib/packages/designer/src/packages/table/property/filterWidgets.vue.js +33 -6
  110. package/lib/packages/designer/src/packages/table/queryModule/DynamicModeConfig.vue.js +492 -0
  111. package/lib/packages/designer/src/packages/table/queryModule/FixedModeConfig.vue.js +15 -2
  112. package/lib/packages/designer/src/packages/table/queryModule/index.vue.js +463 -138
  113. package/lib/packages/designer/src/packages/table/tableBtn.vue.js +34 -16
  114. package/lib/packages/designer/src/utils/optionLoader.js +157 -0
  115. package/lib/packages/designer/src/utils/simpleCache.js +80 -0
  116. package/lib/packages/mobile/src/components/form/field/Field.vue.js +14 -12
  117. package/lib/packages/vue/src/api/index.js +3 -0
  118. package/lib/packages/vue/src/components/all.js +2 -2
  119. package/lib/packages/vue/src/components/bus/approvalHistory/ApprovalHistory.vue.js +3 -3
  120. package/lib/packages/vue/src/components/details/header/Header.vue.js +1 -1
  121. package/lib/packages/vue/src/components/dialog/DialogRenderer.vue2.js +2 -2
  122. package/lib/packages/vue/src/components/forms/cascader/Cascader.vue.js +3 -2
  123. package/lib/packages/vue/src/components/forms/form/Form.vue.js +6 -3
  124. package/lib/packages/vue/src/components/forms/formItem/FormItem.vue.js +13 -11
  125. package/lib/packages/vue/src/components/forms/index.js +2 -2
  126. package/lib/packages/vue/src/components/forms/subForm/SubForm.vue.js +2 -2
  127. package/lib/packages/vue/src/components/forms/subTable/SubTable.vue.js +2 -2
  128. package/lib/packages/vue/src/components/forms/subTitle/SubTitle.vue.js +27 -0
  129. package/lib/packages/vue/src/components/forms/subTitle/index.js +7 -0
  130. package/lib/packages/vue/src/components/forms/text/Text.vue.js +49 -6
  131. package/lib/packages/vue/src/components/table/CustomButtons.vue.js +41 -13
  132. package/lib/packages/vue/src/components/table/DynamicQuery.vue.js +425 -0
  133. package/lib/packages/vue/src/components/table/Table.vue.js +38 -20
  134. package/lib/packages/vue/src/components/table/TableFilter.vue.js +7 -25
  135. package/lib/packages/vue/src/utils/common.js +27 -0
  136. package/lib/packages/vue/src/utils/eventFlow/actionHandlers.js +30 -13
  137. package/package.json +1 -1
@@ -1,6 +1,6 @@
1
1
  import { inject, createElementBlock, openBlock, Fragment, createCommentVNode, createVNode, createBlock, unref, isRef } from "vue";
2
2
  import { Form } from "../form/index.mjs";
3
- import { Divider } from "../divider/index.mjs";
3
+ import { SubTitle } from "../subTitle/index.mjs";
4
4
  import { H2 } from "../h2/index.mjs";
5
5
  const _hoisted_1 = {
6
6
  key: 0,
@@ -72,7 +72,7 @@ const _sfc_main = /* @__PURE__ */ Object.assign({
72
72
  __props.config.titleMode == "label" ? (openBlock(), createBlock(unref(H2), {
73
73
  key: 0,
74
74
  config: __props.config
75
- }, null, 8, ["config"])) : __props.config.titleMode == "subLabel" ? (openBlock(), createBlock(unref(Divider), {
75
+ }, null, 8, ["config"])) : __props.config.titleMode == "subLabel" ? (openBlock(), createBlock(unref(SubTitle), {
76
76
  key: 1,
77
77
  config: __props.config
78
78
  }, null, 8, ["config"])) : createCommentVNode("", true)
@@ -1,6 +1,6 @@
1
1
  import { inject, computed, createElementBlock, openBlock, Fragment, createCommentVNode, createVNode, createBlock, unref } from "vue";
2
2
  import _Table from "../../table/Table.vue.mjs";
3
- import { Divider } from "../divider/index.mjs";
3
+ import { SubTitle } from "../subTitle/index.mjs";
4
4
  import { H2 } from "../h2/index.mjs";
5
5
  import { parseRouteParams } from "../../../utils/parseRouteParams.mjs";
6
6
  const _hoisted_1 = {
@@ -82,7 +82,7 @@ const _sfc_main = /* @__PURE__ */ Object.assign({
82
82
  __props.config.titleMode == "label" ? (openBlock(), createBlock(unref(H2), {
83
83
  key: 0,
84
84
  config: __props.config
85
- }, null, 8, ["config"])) : __props.config.titleMode == "subLabel" ? (openBlock(), createBlock(unref(Divider), {
85
+ }, null, 8, ["config"])) : __props.config.titleMode == "subLabel" ? (openBlock(), createBlock(unref(SubTitle), {
86
86
  key: 1,
87
87
  config: __props.config
88
88
  }, null, 8, ["config"])) : createCommentVNode("", true)
@@ -0,0 +1,27 @@
1
+ import { createElementBlock, openBlock, createElementVNode, toDisplayString } from "vue";
2
+ /* empty css */
3
+ import _export_sfc from "../../../../../../_virtual/_plugin-vue_export-helper.mjs";
4
+ const _hoisted_1 = { class: "fec-sub-title" };
5
+ const _hoisted_2 = { class: "fec-label-title" };
6
+ const _sfc_main = {
7
+ __name: "SubTitle",
8
+ props: {
9
+ config: {
10
+ type: Object,
11
+ required: true
12
+ }
13
+ },
14
+ setup(__props) {
15
+ return (_ctx, _cache) => {
16
+ return openBlock(), createElementBlock("div", _hoisted_1, [
17
+ _cache[0] || (_cache[0] = createElementVNode("div", { class: "fec-label-line" }, null, -1)),
18
+ createElementVNode("div", _hoisted_2, toDisplayString(__props.config.label), 1),
19
+ _cache[1] || (_cache[1] = createElementVNode("div", { class: "fec-label-line-query" }, null, -1))
20
+ ]);
21
+ };
22
+ }
23
+ };
24
+ const _SubTitle = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-733e1815"]]);
25
+ export {
26
+ _SubTitle as default
27
+ };
@@ -0,0 +1,7 @@
1
+ import _SubTitle from "./SubTitle.vue.mjs";
2
+ import install from "../../../utils/install.mjs";
3
+ const SubTitle = install.withInstall("SubTitle", _SubTitle);
4
+ export {
5
+ SubTitle,
6
+ SubTitle as default
7
+ };
@@ -6,9 +6,11 @@ import { computed, getCurrentInstance, inject, createElementBlock, openBlock, cr
6
6
  /* empty css */
7
7
  /* empty css */
8
8
  import { openDialog } from "../../dialog/index.mjs";
9
+ import api from "../../../api/index.mjs";
9
10
  /* empty css */
10
11
  /* empty css */
11
12
  import { useEventFlow } from "../../../utils/eventFlow/eventFlowHandler.mjs";
13
+ import { getCurrentVueInstance } from "../../../utils/getInstance.mjs";
12
14
  /* empty css */
13
15
  import _export_sfc from "../../../../../../_virtual/_plugin-vue_export-helper.mjs";
14
16
  import { ElInput } from "../../../../../../node_modules/.pnpm/element-plus@2.13.2_vue@3.5.13_typescript@5.7.3_/node_modules/element-plus/es/components/input/index.mjs";
@@ -88,10 +90,35 @@ const _sfc_main = /* @__PURE__ */ Object.assign({
88
90
  formMode: {
89
91
  type: String,
90
92
  default: ""
93
+ },
94
+ dialogSource: {
95
+ type: String,
96
+ default: ""
97
+ },
98
+ selectionMode: {
99
+ type: String,
100
+ default: ""
101
+ },
102
+ displayFormatText: {
103
+ type: String,
104
+ default: ""
105
+ },
106
+ displayFormat: {
107
+ type: Object,
108
+ default: {}
109
+ },
110
+ fieldMapping: {
111
+ type: Array,
112
+ default: []
113
+ },
114
+ callbackEventConfig: {
115
+ type: Object,
116
+ default: {}
91
117
  }
92
118
  },
93
119
  emits: ["update:modelValue", "change"],
94
120
  setup(__props, { emit: __emit }) {
121
+ const ctx = getCurrentVueInstance();
95
122
  const props = __props;
96
123
  const emit = __emit;
97
124
  const inputValue = computed({
@@ -126,9 +153,25 @@ const _sfc_main = /* @__PURE__ */ Object.assign({
126
153
  }
127
154
  });
128
155
  const getEventHandlers = (row, item, eventConfig) => createEventHandlers(item, row, eventConfig);
129
- function openSuffixDialog() {
130
- const dialogsConfig = localConfig.value.dialogs || [];
131
- const dialog = dialogsConfig.find((item) => item.id == props.suffixDialogId);
156
+ async function openSuffixDialog() {
157
+ let dialog = null;
158
+ if (props.dialogSource == "global") {
159
+ const data = await api.getTemplateDialogById(
160
+ ctx.$http,
161
+ props.suffixDialogId
162
+ );
163
+ dialog = JSON.parse(data.config);
164
+ dialog.id = data.id;
165
+ dialog.name = data.name;
166
+ dialog.selectionMode = props.selectionMode;
167
+ dialog.displayFormat = props.displayFormat;
168
+ dialog.displayFormatText = props.displayFormatText;
169
+ dialog.fieldMapping = props.fieldMapping;
170
+ dialog.callbackEventConfig = props.callbackEventConfig;
171
+ } else if (props.dialogSource == "custom") {
172
+ const dialogsConfig = localConfig.value.dialogs || [];
173
+ dialog = dialogsConfig.find((item) => item.id == props.suffixDialogId);
174
+ }
132
175
  if (dialog) {
133
176
  openDialog(
134
177
  props.config.fieldName,
@@ -206,7 +249,7 @@ const _sfc_main = /* @__PURE__ */ Object.assign({
206
249
  };
207
250
  }
208
251
  });
209
- const _Text = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-e18a850d"]]);
252
+ const _Text = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-b0c0d80f"]]);
210
253
  export {
211
254
  _Text as default
212
255
  };
@@ -1,13 +1,19 @@
1
1
  /* empty css */
2
2
  /* empty css */
3
- import { computed, createElementBlock, openBlock, createBlock, createCommentVNode, unref, withCtx, Fragment, renderList, createTextVNode, toDisplayString } from "vue";
3
+ import { computed, createElementBlock, openBlock, createCommentVNode, createBlock, createVNode, withCtx, unref, toDisplayString, Fragment, renderList, createTextVNode } from "vue";
4
4
  import "../../../../../node_modules/.pnpm/vxe-table@4.17.47_vue@3.5.13_typescript@5.7.3_/node_modules/vxe-table/es/components.mjs";
5
- import { Search as search_default, Edit as edit_default, Delete as delete_default, Plus as plus_default, Setting as setting_default, Download as download_default, Refresh as refresh_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";
5
+ import { ArrowLeftBold as arrow_left_bold_default, Search as search_default, Edit as edit_default, Delete as delete_default, Plus as plus_default, Setting as setting_default, Download as download_default, Refresh as refresh_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";
6
+ import { getCurrentVueInstance } from "../../utils/getInstance.mjs";
6
7
  /* empty css */
7
8
  import _export_sfc from "../../../../../_virtual/_plugin-vue_export-helper.mjs";
9
+ import { ElIcon } from "../../../../../node_modules/.pnpm/element-plus@2.13.2_vue@3.5.13_typescript@5.7.3_/node_modules/element-plus/es/components/icon/index.mjs";
8
10
  import { VxeToolbar } from "../../../../../node_modules/.pnpm/vxe-table@4.17.47_vue@3.5.13_typescript@5.7.3_/node_modules/vxe-table/es/toolbar/index.mjs";
9
11
  import { ElButton } from "../../../../../node_modules/.pnpm/element-plus@2.13.2_vue@3.5.13_typescript@5.7.3_/node_modules/element-plus/es/components/button/index.mjs";
10
12
  const _hoisted_1 = { class: "custom-buttons" };
13
+ const _hoisted_2 = {
14
+ key: 1,
15
+ class: "template-name"
16
+ };
11
17
  const _sfc_main = {
12
18
  __name: "CustomButtons",
13
19
  props: {
@@ -17,10 +23,15 @@ const _sfc_main = {
17
23
  left: [],
18
24
  right: []
19
25
  })
26
+ },
27
+ localConfig: {
28
+ type: Object,
29
+ default: {}
20
30
  }
21
31
  },
22
32
  emits: ["click"],
23
33
  setup(__props, { emit: __emit }) {
34
+ const ctx = getCurrentVueInstance();
24
35
  const props = __props;
25
36
  const emit = __emit;
26
37
  const leftButtons = computed(() => {
@@ -57,11 +68,28 @@ const _sfc_main = {
57
68
  type: "custom"
58
69
  });
59
70
  };
71
+ function goBack() {
72
+ ctx.$router.go(-1);
73
+ }
60
74
  return (_ctx, _cache) => {
75
+ const _component_el_icon = ElIcon;
61
76
  const _component_el_button = ElButton;
62
77
  return openBlock(), createElementBlock("div", _hoisted_1, [
63
- hasButtons.value ? (openBlock(), createBlock(unref(VxeToolbar), {
78
+ __props.localConfig.showReturn ? (openBlock(), createElementBlock("div", {
64
79
  key: 0,
80
+ class: "back-icon",
81
+ onClick: goBack
82
+ }, [
83
+ createVNode(_component_el_icon, null, {
84
+ default: withCtx(() => [
85
+ createVNode(unref(arrow_left_bold_default))
86
+ ]),
87
+ _: 1
88
+ })
89
+ ])) : createCommentVNode("", true),
90
+ __props.localConfig.showTitle ? (openBlock(), createElementBlock("div", _hoisted_2, toDisplayString(__props.localConfig.templateName), 1)) : createCommentVNode("", true),
91
+ hasButtons.value ? (openBlock(), createBlock(unref(VxeToolbar), {
92
+ key: 2,
65
93
  ref: "toolbarRef"
66
94
  }, {
67
95
  buttons: withCtx(() => [
@@ -100,7 +128,7 @@ const _sfc_main = {
100
128
  };
101
129
  }
102
130
  };
103
- const CustomButtons = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-92668e19"]]);
131
+ const CustomButtons = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-629c70ce"]]);
104
132
  export {
105
133
  CustomButtons as default
106
134
  };
@@ -0,0 +1,425 @@
1
+ /* empty css */
2
+ /* empty css */
3
+ /* empty css */
4
+ /* empty css */
5
+ /* empty css */
6
+ /* empty css */
7
+ import "../../../../../node_modules/.pnpm/element-plus@2.13.2_vue@3.5.13_typescript@5.7.3_/node_modules/element-plus/theme-chalk/el-date-picker.css.mjs";
8
+ /* empty css */
9
+ /* empty css */
10
+ /* empty css */
11
+ /* empty css */
12
+ /* empty css */
13
+ /* empty css */
14
+ /* empty css */
15
+ /* empty css */
16
+ import "../../../../../node_modules/.pnpm/element-plus@2.13.2_vue@3.5.13_typescript@5.7.3_/node_modules/element-plus/theme-chalk/el-tab-pane.css.mjs";
17
+ import { computed, ref, watch, createElementBlock, openBlock, createElementVNode, createVNode, createCommentVNode, withCtx, unref, toDisplayString, Fragment, renderList, createBlock, createSlots, createTextVNode, withDirectives, normalizeStyle, resolveDynamicComponent, mergeProps, vShow } from "vue";
18
+ import { ArrowLeftBold as arrow_left_bold_default, Search as search_default, Edit as edit_default, Delete as delete_default, Plus as plus_default, Setting as setting_default, Download as download_default, Refresh as refresh_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";
19
+ import "../../../../../node_modules/.pnpm/vxe-table@4.17.47_vue@3.5.13_typescript@5.7.3_/node_modules/vxe-table/es/components.mjs";
20
+ import { Text } from "../forms/text/index.mjs";
21
+ import { Select } from "../forms/select/index.mjs";
22
+ import { MultipleSelection } from "../forms/multipleSelection/index.mjs";
23
+ import { Date } from "../forms/date/index.mjs";
24
+ import { Number } from "../forms/number/index.mjs";
25
+ import { handleSearchData } from "../../utils/common.mjs";
26
+ /* empty css */
27
+ import _export_sfc from "../../../../../_virtual/_plugin-vue_export-helper.mjs";
28
+ import { ElIcon } from "../../../../../node_modules/.pnpm/element-plus@2.13.2_vue@3.5.13_typescript@5.7.3_/node_modules/element-plus/es/components/icon/index.mjs";
29
+ import { ElTabs, ElTabPane } from "../../../../../node_modules/.pnpm/element-plus@2.13.2_vue@3.5.13_typescript@5.7.3_/node_modules/element-plus/es/components/tabs/index.mjs";
30
+ import { ElInput } from "../../../../../node_modules/.pnpm/element-plus@2.13.2_vue@3.5.13_typescript@5.7.3_/node_modules/element-plus/es/components/input/index.mjs";
31
+ import { ElButton } from "../../../../../node_modules/.pnpm/element-plus@2.13.2_vue@3.5.13_typescript@5.7.3_/node_modules/element-plus/es/components/button/index.mjs";
32
+ import { ElCollapseTransition } from "../../../../../node_modules/.pnpm/element-plus@2.13.2_vue@3.5.13_typescript@5.7.3_/node_modules/element-plus/es/components/collapse-transition/index.mjs";
33
+ import { ElForm, ElFormItem } from "../../../../../node_modules/.pnpm/element-plus@2.13.2_vue@3.5.13_typescript@5.7.3_/node_modules/element-plus/es/components/form/index.mjs";
34
+ import { ElCheckboxGroup, ElCheckboxButton } from "../../../../../node_modules/.pnpm/element-plus@2.13.2_vue@3.5.13_typescript@5.7.3_/node_modules/element-plus/es/components/checkbox/index.mjs";
35
+ import { ElDatePicker } from "../../../../../node_modules/.pnpm/element-plus@2.13.2_vue@3.5.13_typescript@5.7.3_/node_modules/element-plus/es/components/date-picker/index.mjs";
36
+ import { ElInputNumber } from "../../../../../node_modules/.pnpm/element-plus@2.13.2_vue@3.5.13_typescript@5.7.3_/node_modules/element-plus/es/components/input-number/index.mjs";
37
+ import { VxeToolbar } from "../../../../../node_modules/.pnpm/vxe-table@4.17.47_vue@3.5.13_typescript@5.7.3_/node_modules/vxe-table/es/toolbar/index.mjs";
38
+ const _hoisted_1 = { class: "dynamic-mode-config" };
39
+ const _hoisted_2 = { class: "dynamic-row" };
40
+ const _hoisted_3 = {
41
+ key: 0,
42
+ class: "back-icon"
43
+ };
44
+ const _hoisted_4 = {
45
+ key: 1,
46
+ class: "template-name"
47
+ };
48
+ const _hoisted_5 = {
49
+ key: 2,
50
+ class: "tab-display-section"
51
+ };
52
+ const _hoisted_6 = { class: "search-display-section" };
53
+ const _hoisted_7 = { class: "search-input-group" };
54
+ const _hoisted_8 = { class: "expand-filter-section" };
55
+ const _hoisted_9 = { class: "filter-form-section" };
56
+ const _hoisted_10 = { class: "form-items-draggable" };
57
+ const _hoisted_11 = {
58
+ key: 1,
59
+ style: { "display": "flex", "align-items": "center", "gap": "8px", "width": "100%" }
60
+ };
61
+ const _sfc_main = {
62
+ __name: "DynamicQuery",
63
+ props: {
64
+ localConfig: {
65
+ type: Object,
66
+ default: () => ({})
67
+ },
68
+ fieldsData: {
69
+ type: Array,
70
+ default: () => []
71
+ }
72
+ },
73
+ emits: ["click", "search"],
74
+ setup(__props, { emit: __emit }) {
75
+ const props = __props;
76
+ const emit = __emit;
77
+ const queryConfig = computed(() => {
78
+ var _a;
79
+ return ((_a = props.localConfig) == null ? void 0 : _a.queryConfig) || {};
80
+ });
81
+ const dynamicConfig = computed(() => {
82
+ var _a;
83
+ return ((_a = queryConfig.value) == null ? void 0 : _a.dynamicConfig) || {};
84
+ });
85
+ const activeTab = ref("");
86
+ const tabConfigs = computed(() => {
87
+ var _a, _b, _c, _d;
88
+ activeTab.value = ((_b = (_a = dynamicConfig.value) == null ? void 0 : _a.tabConfigs) == null ? void 0 : _b.length) > 0 ? (_c = dynamicConfig.value) == null ? void 0 : _c.tabActive : "";
89
+ return ((_d = dynamicConfig.value) == null ? void 0 : _d.tabConfigs) || [];
90
+ });
91
+ const rightButtons = computed(() => {
92
+ var _a;
93
+ return ((_a = props.localConfig) == null ? void 0 : _a.customBtns.right) || [];
94
+ });
95
+ const getBtnIcon = (btnType) => {
96
+ const iconMap = {
97
+ refresh: refresh_default,
98
+ export: download_default,
99
+ personalize: setting_default,
100
+ add: plus_default,
101
+ delete: delete_default,
102
+ edit: edit_default,
103
+ search: search_default
104
+ };
105
+ return iconMap[btnType] || null;
106
+ };
107
+ const getBtnType = (btn) => {
108
+ if (btn.btnType === "custom") {
109
+ return "primary";
110
+ }
111
+ return btn.btnStyle || "default";
112
+ };
113
+ const handleClick = (btn, event) => {
114
+ emit("click", {
115
+ btn,
116
+ event,
117
+ type: "custom"
118
+ });
119
+ };
120
+ const getFieldConfig = (fieldId) => {
121
+ return props.fieldsData.find((field) => field.id === fieldId) || {};
122
+ };
123
+ const filterFields = computed(() => {
124
+ return props.localConfig.queryConfig.filterFields.map((filterField) => {
125
+ const fieldConfig = getFieldConfig(filterField.fieldId);
126
+ return {
127
+ ...filterField,
128
+ ...fieldConfig
129
+ };
130
+ });
131
+ });
132
+ const filterValues = ref({});
133
+ const searchInputValue = ref("");
134
+ const showAdvancedFilter = ref(false);
135
+ const toggleAdvancedFilter = () => {
136
+ const willShow = !showAdvancedFilter.value;
137
+ showAdvancedFilter.value = willShow;
138
+ };
139
+ const handleSearch = () => {
140
+ const filters = handleSearchData(filterValues.value, filterFields.value);
141
+ const filterData = {
142
+ ...currentTab.value,
143
+ dynamicFilter: searchInputValue.value,
144
+ ...filters
145
+ };
146
+ console.log("🚀 ~ 开始执行查询", filterData);
147
+ emit("search", {
148
+ filters: JSON.stringify(filterData)
149
+ });
150
+ };
151
+ const currentTab = ref({});
152
+ watch(
153
+ activeTab,
154
+ (newVal, oldVal) => {
155
+ console.log("🚀 ~ Tab切换:", tabConfigs.value, "->", newVal);
156
+ const tab = tabConfigs.value.find((item) => item.id == newVal);
157
+ if (tab) {
158
+ currentTab.value[tab.fieldName] = tab.fixedValue;
159
+ handleSearch();
160
+ }
161
+ },
162
+ {
163
+ immediate: true
164
+ }
165
+ );
166
+ const onSearchInputKeyup = (event) => {
167
+ if (event.key === "Enter") {
168
+ console.log("🚀 ~ 搜索输入框回车");
169
+ handleSearch();
170
+ }
171
+ };
172
+ const debounce = (fn, delay = 500) => {
173
+ let timer = null;
174
+ return (...args) => {
175
+ if (timer) clearTimeout(timer);
176
+ timer = setTimeout(() => {
177
+ fn(...args);
178
+ }, delay);
179
+ };
180
+ };
181
+ const debouncedSearch = debounce(handleSearch, 500);
182
+ watch(
183
+ filterValues,
184
+ (newVal) => {
185
+ console.log("🚀 ~ 筛选值变化:", newVal);
186
+ debouncedSearch();
187
+ },
188
+ { deep: true }
189
+ );
190
+ const getFilterComponent = (fieldType) => {
191
+ const componentMap = {
192
+ text: Text,
193
+ select: Select,
194
+ date: Date,
195
+ number: Number,
196
+ multipleSelection: MultipleSelection,
197
+ switch: Select
198
+ };
199
+ return componentMap[fieldType] || Text;
200
+ };
201
+ const getComponentConfig = (field) => {
202
+ return { ...field };
203
+ };
204
+ const getPlaceholder = (field, type = "default") => {
205
+ const placeholderMap = {
206
+ text: "请输入",
207
+ select: "请选择",
208
+ date: type === "start" ? "开始日期" : type === "end" ? "结束日期" : "请选择日期",
209
+ number: "请输入",
210
+ number_min: "最小值",
211
+ number_max: "最大值",
212
+ radio: "请选择",
213
+ checkbox: "请选择",
214
+ switch: "请选择"
215
+ };
216
+ if (field.fieldType === "date") {
217
+ return placeholderMap.date;
218
+ }
219
+ if (field.fieldType === "number") {
220
+ return type === "min" ? placeholderMap.number_min : type === "max" ? placeholderMap.number_max : placeholderMap.number;
221
+ }
222
+ return `${placeholderMap[field.fieldType] || "请输入"}${field.label || ""}`;
223
+ };
224
+ return (_ctx, _cache) => {
225
+ const _component_el_icon = ElIcon;
226
+ const _component_el_tab_pane = ElTabPane;
227
+ const _component_el_tabs = ElTabs;
228
+ const _component_el_button = ElButton;
229
+ const _component_el_input = ElInput;
230
+ const _component_el_checkbox_button = ElCheckboxButton;
231
+ const _component_el_checkbox_group = ElCheckboxGroup;
232
+ const _component_el_date_picker = ElDatePicker;
233
+ const _component_el_input_number = ElInputNumber;
234
+ const _component_el_form_item = ElFormItem;
235
+ const _component_el_form = ElForm;
236
+ const _component_el_collapse_transition = ElCollapseTransition;
237
+ return openBlock(), createElementBlock("div", _hoisted_1, [
238
+ createElementVNode("div", _hoisted_2, [
239
+ __props.localConfig.showReturn ? (openBlock(), createElementBlock("div", _hoisted_3, [
240
+ createVNode(_component_el_icon, null, {
241
+ default: withCtx(() => [
242
+ createVNode(unref(arrow_left_bold_default))
243
+ ]),
244
+ _: 1
245
+ })
246
+ ])) : createCommentVNode("", true),
247
+ __props.localConfig.showTitle ? (openBlock(), createElementBlock("div", _hoisted_4, toDisplayString(__props.localConfig.templateName), 1)) : createCommentVNode("", true),
248
+ tabConfigs.value.length > 0 ? (openBlock(), createElementBlock("div", _hoisted_5, [
249
+ createVNode(_component_el_tabs, {
250
+ modelValue: activeTab.value,
251
+ "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => activeTab.value = $event),
252
+ class: "dynamic-tabs"
253
+ }, {
254
+ default: withCtx(() => [
255
+ (openBlock(true), createElementBlock(Fragment, null, renderList(tabConfigs.value, (tab) => {
256
+ return openBlock(), createBlock(_component_el_tab_pane, {
257
+ key: tab.id,
258
+ label: tab.label,
259
+ name: tab.id
260
+ }, null, 8, ["label", "name"]);
261
+ }), 128))
262
+ ]),
263
+ _: 1
264
+ }, 8, ["modelValue"])
265
+ ])) : createCommentVNode("", true),
266
+ createElementVNode("div", _hoisted_6, [
267
+ createElementVNode("div", _hoisted_7, [
268
+ createVNode(_component_el_input, {
269
+ modelValue: searchInputValue.value,
270
+ "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => searchInputValue.value = $event),
271
+ placeholder: "请输入关键词搜索...",
272
+ class: "search-input",
273
+ "prefix-icon": unref(search_default),
274
+ onKeyup: onSearchInputKeyup
275
+ }, createSlots({ _: 2 }, [
276
+ dynamicConfig.value.advancedSearch ? {
277
+ name: "append",
278
+ fn: withCtx(() => [
279
+ createVNode(_component_el_button, {
280
+ type: "primary",
281
+ onClick: toggleAdvancedFilter
282
+ }, {
283
+ default: withCtx(() => [
284
+ createTextVNode(toDisplayString(showAdvancedFilter.value ? "隐藏高级搜索" : "高级搜索"), 1)
285
+ ]),
286
+ _: 1
287
+ })
288
+ ]),
289
+ key: "0"
290
+ } : void 0
291
+ ]), 1032, ["modelValue", "prefix-icon"])
292
+ ]),
293
+ rightButtons.value.length > 0 ? (openBlock(), createBlock(unref(VxeToolbar), {
294
+ key: 0,
295
+ ref: "toolbarRef"
296
+ }, {
297
+ tools: withCtx(() => [
298
+ rightButtons.value.length ? (openBlock(true), createElementBlock(Fragment, { key: 0 }, renderList(rightButtons.value, (btn) => {
299
+ return openBlock(), createBlock(_component_el_button, {
300
+ key: btn.id,
301
+ type: getBtnType(btn),
302
+ icon: getBtnIcon(btn.btnType),
303
+ onClick: ($event) => handleClick(btn, $event)
304
+ }, {
305
+ default: withCtx(() => [
306
+ createTextVNode(toDisplayString(btn.label), 1)
307
+ ]),
308
+ _: 2
309
+ }, 1032, ["type", "icon", "onClick"]);
310
+ }), 128)) : createCommentVNode("", true)
311
+ ]),
312
+ _: 1
313
+ }, 512)) : createCommentVNode("", true)
314
+ ])
315
+ ]),
316
+ createVNode(_component_el_collapse_transition, null, {
317
+ default: withCtx(() => [
318
+ withDirectives(createElementVNode("div", _hoisted_8, [
319
+ createElementVNode("div", _hoisted_9, [
320
+ createVNode(_component_el_form, {
321
+ ref: "formRef",
322
+ model: filterValues.value,
323
+ class: "filter-form",
324
+ "label-width": "100px",
325
+ inline: ""
326
+ }, {
327
+ default: withCtx(() => [
328
+ createElementVNode("div", _hoisted_10, [
329
+ (openBlock(true), createElementBlock(Fragment, null, renderList(filterFields.value, (field) => {
330
+ return openBlock(), createElementBlock("div", {
331
+ key: field.id,
332
+ style: normalizeStyle(field.isExclusiveRow ? "width:100%" : "")
333
+ }, [
334
+ createVNode(_component_el_form_item, {
335
+ label: field.label
336
+ }, {
337
+ default: withCtx(() => [
338
+ field.isButtonStyle ? (openBlock(), createBlock(_component_el_checkbox_group, {
339
+ key: 0,
340
+ modelValue: filterValues.value[field.fieldId],
341
+ "onUpdate:modelValue": ($event) => filterValues.value[field.fieldId] = $event
342
+ }, {
343
+ default: withCtx(() => [
344
+ (openBlock(true), createElementBlock(Fragment, null, renderList(field.optionConfig.options, (option) => {
345
+ return openBlock(), createBlock(_component_el_checkbox_button, {
346
+ key: option.value,
347
+ value: option.value
348
+ }, {
349
+ default: withCtx(() => [
350
+ createTextVNode(toDisplayString(option.label), 1)
351
+ ]),
352
+ _: 2
353
+ }, 1032, ["value"]);
354
+ }), 128))
355
+ ]),
356
+ _: 2
357
+ }, 1032, ["modelValue", "onUpdate:modelValue"])) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [
358
+ field.fieldType == "date" ? (openBlock(), createBlock(_component_el_date_picker, {
359
+ key: 0,
360
+ modelValue: filterValues.value[field.fieldId],
361
+ "onUpdate:modelValue": ($event) => filterValues.value[field.fieldId] = $event,
362
+ type: "daterange",
363
+ "start-placeholder": getPlaceholder(field, "start"),
364
+ "end-placeholder": getPlaceholder(field, "end"),
365
+ format: "YYYY-MM-DD",
366
+ "value-format": "YYYYMMDD",
367
+ clearable: "",
368
+ style: { "width": "100%" }
369
+ }, null, 8, ["modelValue", "onUpdate:modelValue", "start-placeholder", "end-placeholder"])) : field.fieldType == "number" ? (openBlock(), createElementBlock("div", _hoisted_11, [
370
+ createVNode(_component_el_input_number, {
371
+ modelValue: filterValues.value[field.fieldId],
372
+ "onUpdate:modelValue": ($event) => filterValues.value[field.fieldId] = $event,
373
+ placeholder: getPlaceholder(field, "min"),
374
+ controls: false,
375
+ "controls-position": "right",
376
+ style: { "flex": "1" },
377
+ clearable: ""
378
+ }, null, 8, ["modelValue", "onUpdate:modelValue", "placeholder"]),
379
+ _cache[2] || (_cache[2] = createElementVNode("span", null, "-", -1)),
380
+ createVNode(_component_el_input_number, {
381
+ modelValue: filterValues.value[`${field.fieldId}_max`],
382
+ "onUpdate:modelValue": ($event) => filterValues.value[`${field.fieldId}_max`] = $event,
383
+ placeholder: getPlaceholder(field, "max"),
384
+ controls: false,
385
+ "controls-position": "right",
386
+ style: { "flex": "1" },
387
+ clearable: ""
388
+ }, null, 8, ["modelValue", "onUpdate:modelValue", "placeholder"])
389
+ ])) : (openBlock(), createBlock(resolveDynamicComponent(getFilterComponent(field.fieldType)), mergeProps({
390
+ key: 2,
391
+ modelValue: filterValues.value[field.fieldId],
392
+ "onUpdate:modelValue": ($event) => filterValues.value[field.fieldId] = $event,
393
+ config: { ...field, eventHandlers: {} },
394
+ ref_for: true
395
+ }, getComponentConfig(field), {
396
+ placeholder: getPlaceholder(field)
397
+ }), null, 16, ["modelValue", "onUpdate:modelValue", "config", "placeholder"]))
398
+ ], 64))
399
+ ]),
400
+ _: 2
401
+ }, 1032, ["label"])
402
+ ], 4);
403
+ }), 128))
404
+ ])
405
+ ]),
406
+ _: 1
407
+ }, 8, ["model"])
408
+ ])
409
+ ], 512), [
410
+ [
411
+ vShow,
412
+ showAdvancedFilter.value && dynamicConfig.value.advancedSearch && filterFields.value.length > 0
413
+ ]
414
+ ])
415
+ ]),
416
+ _: 1
417
+ })
418
+ ]);
419
+ };
420
+ }
421
+ };
422
+ const DynamicQuery = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-66d8d7cb"]]);
423
+ export {
424
+ DynamicQuery as default
425
+ };