@fecp/designer 5.3.4 → 5.3.6

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 (47) hide show
  1. package/es/designer.css +208 -179
  2. package/es/packages/designer/package.json.mjs +1 -1
  3. package/es/packages/designer/src/components/FilterConfigDisplay.vue.mjs +5 -3
  4. package/es/packages/designer/src/packages/advancedFilter/ValueInput.vue2.mjs +2 -2
  5. package/es/packages/designer/src/packages/dataLinkage/index.vue.mjs +85 -75
  6. package/es/packages/designer/src/packages/dialogGlobal/index.vue.mjs +2 -0
  7. package/es/packages/designer/src/packages/eventFlow/dialog/action/TableChildRefresh.vue2.mjs +94 -0
  8. package/es/packages/designer/src/packages/eventFlow/dialog/action/TableRowDelete.vue2.mjs +54 -0
  9. package/es/packages/designer/src/packages/eventFlow/dialog/action/config.mjs +12 -1
  10. package/es/packages/designer/src/packages/formulaEditor/index.vue2.mjs +10 -1
  11. package/es/packages/designer/src/packages/table/headerBtn.vue.mjs +2 -0
  12. package/es/packages/designer/src/packages/table/queryModule/DynamicModeConfig.vue.mjs +12 -5
  13. package/es/packages/designer/src/packages/table/queryModule/index.vue.mjs +11 -16
  14. package/es/packages/vue/src/components/bus/approvalHistory/ApprovalHistory.vue.mjs +5 -4
  15. package/es/packages/vue/src/components/forms/form/Form.vue.mjs +246 -139
  16. package/es/packages/vue/src/components/forms/formItem/FormItem.vue.mjs +20 -3
  17. package/es/packages/vue/src/components/forms/subForm/SubForm.vue.mjs +5 -6
  18. package/es/packages/vue/src/components/forms/subTable/SubTable.vue.mjs +12 -6
  19. package/es/packages/vue/src/components/table/CustomButtons.vue.mjs +11 -3
  20. package/es/packages/vue/src/components/table/DynamicQuery.vue.mjs +16 -8
  21. package/es/packages/vue/src/components/table/Table.vue.mjs +7 -5
  22. package/es/packages/vue/src/utils/eventFlow/actionHandlers.mjs +88 -2
  23. package/es/packages/vue/src/utils/parseFilterConfig.mjs +44 -0
  24. package/lib/designer.css +208 -179
  25. package/lib/packages/designer/package.json.js +1 -1
  26. package/lib/packages/designer/src/components/FilterConfigDisplay.vue.js +5 -3
  27. package/lib/packages/designer/src/packages/advancedFilter/ValueInput.vue2.js +2 -2
  28. package/lib/packages/designer/src/packages/dataLinkage/index.vue.js +93 -83
  29. package/lib/packages/designer/src/packages/dialogGlobal/index.vue.js +2 -0
  30. package/lib/packages/designer/src/packages/eventFlow/dialog/action/TableChildRefresh.vue2.js +94 -0
  31. package/lib/packages/designer/src/packages/eventFlow/dialog/action/TableRowDelete.vue2.js +54 -0
  32. package/lib/packages/designer/src/packages/eventFlow/dialog/action/config.js +12 -1
  33. package/lib/packages/designer/src/packages/formulaEditor/index.vue2.js +10 -1
  34. package/lib/packages/designer/src/packages/table/headerBtn.vue.js +2 -0
  35. package/lib/packages/designer/src/packages/table/queryModule/DynamicModeConfig.vue.js +12 -5
  36. package/lib/packages/designer/src/packages/table/queryModule/index.vue.js +11 -16
  37. package/lib/packages/vue/src/components/bus/approvalHistory/ApprovalHistory.vue.js +5 -4
  38. package/lib/packages/vue/src/components/forms/form/Form.vue.js +244 -137
  39. package/lib/packages/vue/src/components/forms/formItem/FormItem.vue.js +19 -2
  40. package/lib/packages/vue/src/components/forms/subForm/SubForm.vue.js +5 -6
  41. package/lib/packages/vue/src/components/forms/subTable/SubTable.vue.js +12 -6
  42. package/lib/packages/vue/src/components/table/CustomButtons.vue.js +11 -3
  43. package/lib/packages/vue/src/components/table/DynamicQuery.vue.js +16 -8
  44. package/lib/packages/vue/src/components/table/Table.vue.js +7 -5
  45. package/lib/packages/vue/src/utils/eventFlow/actionHandlers.js +94 -8
  46. package/lib/packages/vue/src/utils/parseFilterConfig.js +44 -0
  47. package/package.json +1 -1
@@ -27,6 +27,14 @@ const _sfc_main = {
27
27
  localConfig: {
28
28
  type: Object,
29
29
  default: {}
30
+ },
31
+ readOnly: {
32
+ type: Boolean,
33
+ default: false
34
+ },
35
+ isSubTable: {
36
+ type: Boolean,
37
+ default: false
30
38
  }
31
39
  },
32
40
  emits: ["click"],
@@ -88,10 +96,10 @@ const _sfc_main = {
88
96
  })
89
97
  ])) : createCommentVNode("", true),
90
98
  __props.localConfig.showTitle ? (openBlock(), createElementBlock("div", _hoisted_2, toDisplayString(__props.localConfig.templateName), 1)) : createCommentVNode("", true),
91
- hasButtons.value ? (openBlock(), createBlock(unref(VxeToolbar), {
99
+ !__props.readOnly && !__props.isSubTable && hasButtons.value ? (openBlock(), createBlock(unref(VxeToolbar), {
92
100
  key: 2,
93
101
  ref: "toolbarRef",
94
- style: { "flex": "1" }
102
+ style: { "flex": "1", "margin-bottom": "8px" }
95
103
  }, {
96
104
  buttons: withCtx(() => [
97
105
  leftButtons.value.length ? (openBlock(true), createElementBlock(Fragment, { key: 0 }, renderList(leftButtons.value, (btn) => {
@@ -129,7 +137,7 @@ const _sfc_main = {
129
137
  };
130
138
  }
131
139
  };
132
- const CustomButtons = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-827a5895"]]);
140
+ const CustomButtons = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-4a702348"]]);
133
141
  export {
134
142
  CustomButtons as default
135
143
  };
@@ -50,7 +50,10 @@ const _hoisted_5 = {
50
50
  class: "tab-display-section"
51
51
  };
52
52
  const _hoisted_6 = { class: "search-display-section" };
53
- const _hoisted_7 = { class: "search-input-group" };
53
+ const _hoisted_7 = {
54
+ key: 0,
55
+ class: "search-input-group"
56
+ };
54
57
  const _hoisted_8 = { class: "expand-filter-section" };
55
58
  const _hoisted_9 = { class: "filter-form-section" };
56
59
  const _hoisted_10 = { class: "form-items-draggable" };
@@ -72,6 +75,10 @@ const _sfc_main = {
72
75
  isSubTable: {
73
76
  type: Boolean,
74
77
  default: false
78
+ },
79
+ readOnly: {
80
+ type: Boolean,
81
+ default: false
75
82
  }
76
83
  },
77
84
  emits: ["click", "search"],
@@ -249,7 +256,7 @@ const _sfc_main = {
249
256
  })
250
257
  ])) : createCommentVNode("", true),
251
258
  __props.localConfig.showTitle ? (openBlock(), createElementBlock("div", _hoisted_4, toDisplayString(__props.localConfig.templateName), 1)) : createCommentVNode("", true),
252
- tabConfigs.value.length > 0 ? (openBlock(), createElementBlock("div", _hoisted_5, [
259
+ queryConfig.value.enabled && tabConfigs.value.length > 0 ? (openBlock(), createElementBlock("div", _hoisted_5, [
253
260
  createVNode(_component_el_tabs, {
254
261
  modelValue: activeTab.value,
255
262
  "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => activeTab.value = $event),
@@ -268,7 +275,7 @@ const _sfc_main = {
268
275
  }, 8, ["modelValue"])
269
276
  ])) : createCommentVNode("", true),
270
277
  createElementVNode("div", _hoisted_6, [
271
- createElementVNode("div", _hoisted_7, [
278
+ queryConfig.value.enabled ? (openBlock(), createElementBlock("div", _hoisted_7, [
272
279
  createVNode(_component_el_input, {
273
280
  modelValue: searchInputValue.value,
274
281
  "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => searchInputValue.value = $event),
@@ -293,10 +300,11 @@ const _sfc_main = {
293
300
  key: "0"
294
301
  } : void 0
295
302
  ]), 1032, ["modelValue", "prefix-icon"])
296
- ]),
297
- rightButtons.value.length > 0 ? (openBlock(), createBlock(unref(VxeToolbar), {
298
- key: 0,
299
- ref: "toolbarRef"
303
+ ])) : createCommentVNode("", true),
304
+ !__props.readOnly && !__props.isSubTable && rightButtons.value.length > 0 ? (openBlock(), createBlock(unref(VxeToolbar), {
305
+ key: 1,
306
+ ref: "toolbarRef",
307
+ style: { "margin-bottom": "8px" }
300
308
  }, {
301
309
  tools: withCtx(() => [
302
310
  !__props.isSubTable && rightButtons.value.length ? (openBlock(true), createElementBlock(Fragment, { key: 0 }, renderList(rightButtons.value, (btn) => {
@@ -423,7 +431,7 @@ const _sfc_main = {
423
431
  };
424
432
  }
425
433
  };
426
- const DynamicQuery = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-ba091c4f"]]);
434
+ const DynamicQuery = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-cc8f1fb6"]]);
427
435
  export {
428
436
  DynamicQuery as default
429
437
  };
@@ -564,21 +564,23 @@ const _sfc_main = /* @__PURE__ */ Object.assign({
564
564
  onSearch: handleFilterSearch,
565
565
  onReset: handleFilterReset
566
566
  }, null, 8, ["query-config", "fields-data"]),
567
- !__props.readonly && !__props.isSubTable ? (openBlock(), createBlock(CustomButtons, {
568
- key: 0,
567
+ createVNode(CustomButtons, {
569
568
  "custom-btns": localConfig.value.customBtns,
570
569
  localConfig: localConfig.value,
570
+ readonly: __props.readonly,
571
+ isSubTable: __props.isSubTable,
571
572
  onClick: handleCustomBtnClick
572
- }, null, 8, ["custom-btns", "localConfig"])) : createCommentVNode("", true)
573
+ }, null, 8, ["custom-btns", "localConfig", "readonly", "isSubTable"])
573
574
  ], 64)) : createCommentVNode("", true),
574
575
  localConfig.value.queryConfig.mode == "dynamic" ? (openBlock(), createBlock(DynamicQuery, {
575
576
  key: 1,
577
+ readonly: __props.readonly,
576
578
  isSubTable: __props.isSubTable,
577
579
  localConfig: localConfig.value,
578
580
  "fields-data": fieldsData.value,
579
581
  onSearch: handleFilterSearch,
580
582
  onClick: handleCustomBtnClick
581
- }, null, 8, ["isSubTable", "localConfig", "fields-data"])) : createCommentVNode("", true),
583
+ }, null, 8, ["readonly", "isSubTable", "localConfig", "fields-data"])) : createCommentVNode("", true),
582
584
  createElementVNode("div", _hoisted_1, [
583
585
  createVNode(unref(VxeTable), {
584
586
  ref_key: "tableRef",
@@ -643,7 +645,7 @@ const _sfc_main = /* @__PURE__ */ Object.assign({
643
645
  };
644
646
  }
645
647
  });
646
- const _Table = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-d0a13549"]]);
648
+ const _Table = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-8f3c46b5"]]);
647
649
  export {
648
650
  _Table as default
649
651
  };
@@ -8,8 +8,8 @@ import api from "../../api/index.mjs";
8
8
  /* empty css */
9
9
  /* empty css */
10
10
  /* empty css */
11
- 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";
12
11
  import { ElMessageBox } from "../../../../../node_modules/.pnpm/element-plus@2.13.2_vue@3.5.13_typescript@5.7.3_/node_modules/element-plus/es/components/message-box/index.mjs";
12
+ 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";
13
13
  async function handlePageJump(node, data, fields, context) {
14
14
  const dialogDoms = document.querySelectorAll(".el-modal-dialog");
15
15
  if ((dialogDoms == null ? void 0 : dialogDoms.length) > 0) {
@@ -288,6 +288,88 @@ async function handleTableRefresh(node, data, fields, context) {
288
288
  };
289
289
  }
290
290
  }
291
+ async function handleTableChildRefresh(node, data, fields, context) {
292
+ var _a, _b, _c, _d;
293
+ console.log("[EventFlow] 执行子表格刷新:", node.basic);
294
+ const basic = node.basic || {};
295
+ const formComponent = (_a = context.components) == null ? void 0 : _a.form;
296
+ const getFormItemRefMethod = (_c = (_b = formComponent == null ? void 0 : formComponent.$) == null ? void 0 : _b.exposed) == null ? void 0 : _c.getFormItemRef;
297
+ if (typeof getFormItemRefMethod === "function") {
298
+ const subTableRef = getFormItemRefMethod(String(basic.selectSubTableFieldId));
299
+ context.components.table = {
300
+ $: {
301
+ exposed: {
302
+ refresh: (_d = subTableRef == null ? void 0 : subTableRef.subTableRef) == null ? void 0 : _d.refresh
303
+ }
304
+ }
305
+ };
306
+ return await handleTableRefresh(node, data, fields, context);
307
+ } else {
308
+ console.error("[EventFlow] 未找到表单组件的 getFormItemRef 方法");
309
+ return {
310
+ success: false,
311
+ message: "表单组件未正确配置或 getFormItemRef 方法未暴露",
312
+ shouldShowError: true
313
+ };
314
+ }
315
+ }
316
+ async function handleTableRowDelete(node, data, fields, context) {
317
+ var _a, _b, _c;
318
+ console.log("[EventFlow] 执行表格行删除:", node.basic);
319
+ const basic = node.basic || {};
320
+ if (basic.showConfirmDeleteMessage) {
321
+ try {
322
+ await ElMessageBox.confirm(
323
+ "此操作将永久删除该记录, 是否继续",
324
+ "确认操作",
325
+ {
326
+ type: "warning",
327
+ draggable: true,
328
+ showClose: false
329
+ }
330
+ );
331
+ } catch (error) {
332
+ return {
333
+ success: false,
334
+ message: "用户已取消",
335
+ confirmed: false,
336
+ shouldShowError: false
337
+ // 用户取消不提示错误
338
+ };
339
+ }
340
+ }
341
+ const result = await handleApiCall(node, data, fields, context);
342
+ if (!result.success) {
343
+ return result;
344
+ }
345
+ if (basic.resetTableAfterDelete) {
346
+ const tableComponent = (_a = context.components) == null ? void 0 : _a.table;
347
+ const refreshMethod = (_c = (_b = tableComponent == null ? void 0 : tableComponent.$) == null ? void 0 : _b.exposed) == null ? void 0 : _c.refresh;
348
+ if (typeof refreshMethod === "function") {
349
+ const refreshOptions = {
350
+ resetSort: false,
351
+ resetFilter: false,
352
+ resetPagination: false
353
+ };
354
+ await refreshMethod(refreshOptions);
355
+ return {
356
+ success: true,
357
+ message: "表格已刷新"
358
+ };
359
+ } else {
360
+ console.error("[EventFlow] 未找到表格组件的 refresh 方法");
361
+ return {
362
+ success: false,
363
+ message: "表格组件未正确配置或 refresh 方法未暴露",
364
+ shouldShowError: true
365
+ };
366
+ }
367
+ }
368
+ return {
369
+ success: true,
370
+ message: "列表数据已删除"
371
+ };
372
+ }
291
373
  async function handleCustomAction(node, data, fields, context) {
292
374
  console.log("[EventFlow] 执行自定义动作:", node.basic);
293
375
  return {
@@ -490,6 +572,8 @@ const defaultActionHandlers = {
490
572
  "ui-confirm": handleConfirm,
491
573
  "ui-message": handleMessage,
492
574
  "table-refresh": handleTableRefresh,
575
+ "table-row-delete": handleTableRowDelete,
576
+ "table-child-refresh": handleTableChildRefresh,
493
577
  "form-setValue": handleFormSetValue,
494
578
  "form-submit": handleFormSubmit,
495
579
  "custom": handleCustomAction,
@@ -505,5 +589,7 @@ export {
505
589
  handleMessage,
506
590
  handlePageGoBack,
507
591
  handlePageJump,
508
- handleTableRefresh
592
+ handleTableChildRefresh,
593
+ handleTableRefresh,
594
+ handleTableRowDelete
509
595
  };
@@ -71,6 +71,50 @@ function checkConditionMatch(condition, data, fields) {
71
71
  return dataValue == parsedValue;
72
72
  }
73
73
  }
74
+ function checkFieldInFilterConfig(filterConfig, fieldId) {
75
+ if (!fieldId) {
76
+ return true;
77
+ }
78
+ return checkFieldInGroup(filterConfig, fieldId);
79
+ }
80
+ function checkFieldInGroup(group, targetFieldId) {
81
+ const { conditions, groups } = group;
82
+ if (conditions && conditions.length > 0) {
83
+ const foundInConditions = conditions.some((cond) => cond.field === targetFieldId);
84
+ if (foundInConditions) {
85
+ return true;
86
+ }
87
+ }
88
+ if (groups && groups.length > 0) {
89
+ return groups.some((g) => checkFieldInGroup(g, targetFieldId));
90
+ }
91
+ return false;
92
+ }
93
+ function checkFieldInResultConfig(resultConfig, fieldId, fields = []) {
94
+ var _a, _b;
95
+ if (!fieldId || !Array.isArray(resultConfig)) {
96
+ return true;
97
+ }
98
+ let fieldName = fieldId;
99
+ if (fields && fields.length > 0) {
100
+ const field = fields.find((f) => f.id == fieldId);
101
+ if (field) {
102
+ fieldName = field.fieldName;
103
+ }
104
+ }
105
+ for (const item of resultConfig) {
106
+ if ((_b = (_a = item.formula) == null ? void 0 : _a.value) == null ? void 0 : _b.text) {
107
+ const formulaText = item.formula.value.text;
108
+ const fieldPattern = new RegExp(`\\{${fieldName}\\}`, "i");
109
+ if (fieldPattern.test(formulaText)) {
110
+ return true;
111
+ }
112
+ }
113
+ }
114
+ return false;
115
+ }
74
116
  export {
117
+ checkFieldInFilterConfig,
118
+ checkFieldInResultConfig,
75
119
  checkFilterMatch
76
120
  };