@fecp/designer 5.3.3 → 5.3.5

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 (53) 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/form/property/approvalHistory.vue.mjs +18 -18
  11. package/es/packages/designer/src/packages/form/property/subForm.vue.mjs +18 -18
  12. package/es/packages/designer/src/packages/form/property/subTable.vue.mjs +17 -17
  13. package/es/packages/designer/src/packages/formulaEditor/index.vue2.mjs +10 -1
  14. package/es/packages/designer/src/packages/table/headerBtn.vue.mjs +2 -0
  15. package/es/packages/designer/src/packages/table/queryModule/DynamicModeConfig.vue.mjs +12 -5
  16. package/es/packages/designer/src/packages/table/queryModule/index.vue.mjs +11 -16
  17. package/es/packages/vue/src/components/bus/approvalHistory/ApprovalHistory.vue.mjs +5 -4
  18. package/es/packages/vue/src/components/forms/form/Form.vue.mjs +234 -139
  19. package/es/packages/vue/src/components/forms/formItem/FormItem.vue.mjs +20 -3
  20. package/es/packages/vue/src/components/forms/subForm/SubForm.vue.mjs +4 -4
  21. package/es/packages/vue/src/components/forms/subTable/SubTable.vue.mjs +11 -5
  22. package/es/packages/vue/src/components/table/CustomButtons.vue.mjs +11 -3
  23. package/es/packages/vue/src/components/table/DynamicQuery.vue.mjs +16 -8
  24. package/es/packages/vue/src/components/table/Table.vue.mjs +7 -5
  25. package/es/packages/vue/src/utils/eventFlow/actionHandlers.mjs +86 -5
  26. package/es/packages/vue/src/utils/parseFilterConfig.mjs +44 -0
  27. package/lib/designer.css +208 -179
  28. package/lib/packages/designer/package.json.js +1 -1
  29. package/lib/packages/designer/src/components/FilterConfigDisplay.vue.js +5 -3
  30. package/lib/packages/designer/src/packages/advancedFilter/ValueInput.vue2.js +2 -2
  31. package/lib/packages/designer/src/packages/dataLinkage/index.vue.js +93 -83
  32. package/lib/packages/designer/src/packages/dialogGlobal/index.vue.js +2 -0
  33. package/lib/packages/designer/src/packages/eventFlow/dialog/action/TableChildRefresh.vue2.js +94 -0
  34. package/lib/packages/designer/src/packages/eventFlow/dialog/action/TableRowDelete.vue2.js +54 -0
  35. package/lib/packages/designer/src/packages/eventFlow/dialog/action/config.js +12 -1
  36. package/lib/packages/designer/src/packages/form/property/approvalHistory.vue.js +20 -20
  37. package/lib/packages/designer/src/packages/form/property/subForm.vue.js +20 -20
  38. package/lib/packages/designer/src/packages/form/property/subTable.vue.js +19 -19
  39. package/lib/packages/designer/src/packages/formulaEditor/index.vue2.js +10 -1
  40. package/lib/packages/designer/src/packages/table/headerBtn.vue.js +2 -0
  41. package/lib/packages/designer/src/packages/table/queryModule/DynamicModeConfig.vue.js +12 -5
  42. package/lib/packages/designer/src/packages/table/queryModule/index.vue.js +11 -16
  43. package/lib/packages/vue/src/components/bus/approvalHistory/ApprovalHistory.vue.js +5 -4
  44. package/lib/packages/vue/src/components/forms/form/Form.vue.js +232 -137
  45. package/lib/packages/vue/src/components/forms/formItem/FormItem.vue.js +19 -2
  46. package/lib/packages/vue/src/components/forms/subForm/SubForm.vue.js +4 -4
  47. package/lib/packages/vue/src/components/forms/subTable/SubTable.vue.js +11 -5
  48. package/lib/packages/vue/src/components/table/CustomButtons.vue.js +11 -3
  49. package/lib/packages/vue/src/components/table/DynamicQuery.vue.js +16 -8
  50. package/lib/packages/vue/src/components/table/Table.vue.js +7 -5
  51. package/lib/packages/vue/src/utils/eventFlow/actionHandlers.js +92 -11
  52. package/lib/packages/vue/src/utils/parseFilterConfig.js +44 -0
  53. package/package.json +1 -1
@@ -5,7 +5,7 @@
5
5
  /* empty css */
6
6
  /* empty css */
7
7
  /* empty css */
8
- import { getCurrentInstance, ref, computed, onMounted, watch, provide, createBlock, openBlock, withCtx, createCommentVNode, createVNode, unref, normalizeStyle, createElementBlock, isRef, Fragment, renderList } from "vue";
8
+ import { getCurrentInstance, ref, onMounted, onBeforeUnmount, watch, provide, createBlock, openBlock, withCtx, createCommentVNode, createVNode, unref, normalizeStyle, createElementBlock, Fragment, renderList } from "vue";
9
9
  import "../../../../../../node_modules/.pnpm/grid-layout-plus@1.1.1_vue@3.5.13_typescript@5.7.3_/node_modules/grid-layout-plus/es/index.mjs";
10
10
  import { getCurrentVueInstance } from "../../../utils/getInstance.mjs";
11
11
  import getJsonAsyncUtil from "../../../utils/getJsonAsyncUtil.mjs";
@@ -31,7 +31,7 @@ import { usePageEvents } from "../../../composables/usePageEvents.mjs";
31
31
  import { header } from "../../details/header/index.mjs";
32
32
  import { main } from "../../details/main/index.mjs";
33
33
  import { footer } from "../../details/footer/index.mjs";
34
- import { checkFilterMatch } from "../../../utils/parseFilterConfig.mjs";
34
+ import { checkFilterMatch, checkFieldInFilterConfig, checkFieldInResultConfig } from "../../../utils/parseFilterConfig.mjs";
35
35
  import hooks from "../../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/dist/moment.mjs";
36
36
  /* empty css */
37
37
  import { ElContainer } from "../../../../../../node_modules/.pnpm/element-plus@2.13.2_vue@3.5.13_typescript@5.7.3_/node_modules/element-plus/es/components/container/index.mjs";
@@ -147,6 +147,9 @@ const _sfc_main = /* @__PURE__ */ Object.assign({
147
147
  });
148
148
  hiddenFields.value = option.hiddenFields || [];
149
149
  await loadFieldDataSources();
150
+ await loadProductData();
151
+ applyProductConfigToForm();
152
+ mergeOptionsToFields();
150
153
  loadFormData();
151
154
  loadEventFlow();
152
155
  if (pageEvents && localConfig.value.pageEventConfig) {
@@ -158,9 +161,6 @@ const _sfc_main = /* @__PURE__ */ Object.assign({
158
161
  await pageEvents.executeEvent("onCreated");
159
162
  }
160
163
  }
161
- await loadProductData();
162
- applyProductConfigToForm();
163
- mergeOptionsToFields();
164
164
  } catch (error) {
165
165
  console.error("加载配置失败:", error);
166
166
  ElMessage.error("加载配置失败");
@@ -174,7 +174,11 @@ const _sfc_main = /* @__PURE__ */ Object.assign({
174
174
  if (fieldsData.value) {
175
175
  fieldsData.value.forEach((component) => {
176
176
  if (component.fieldName) {
177
- defaultData[component.fieldName] = component.defaultValue ? component.defaultValue : null;
177
+ let defaultValue = component.defaultValue || null;
178
+ if (component.fieldType == "number") {
179
+ defaultValue = Number(defaultValue || 0);
180
+ }
181
+ defaultData[component.fieldName] = defaultValue;
178
182
  }
179
183
  if (component.fieldName) {
180
184
  const fieldRules = generateFieldRules(component);
@@ -357,16 +361,6 @@ const _sfc_main = /* @__PURE__ */ Object.assign({
357
361
  prodRules.value[formField.fieldName] = [];
358
362
  }
359
363
  const customValidator = (rule, value, callback) => {
360
- console.log(
361
- "🚀 ~ customValidator 被调用 ~ 字段:",
362
- formField == null ? void 0 : formField.fieldName,
363
- "值:",
364
- value,
365
- "minValue:",
366
- minValue,
367
- "maxValue:",
368
- maxValue
369
- );
370
364
  if (value === null || value === void 0 || value === "") {
371
365
  callback();
372
366
  return;
@@ -472,7 +466,36 @@ const _sfc_main = /* @__PURE__ */ Object.assign({
472
466
  }
473
467
  });
474
468
  }
475
- const gridLayoutDataConfig = ref([]);
469
+ const gridLayoutFieldsData = ref([]);
470
+ const oriGridLayoutData = ref([]);
471
+ const formItemRefs = ref(/* @__PURE__ */ new Map());
472
+ const setFormItemRef = (el, component) => {
473
+ if (!el) {
474
+ if (component && component.id) {
475
+ formItemRefs.value.delete(component.id);
476
+ }
477
+ return;
478
+ }
479
+ if (component && component.id) {
480
+ formItemRefs.value.set(String(component.id), el);
481
+ }
482
+ };
483
+ const getFormItemRef = (fieldId) => {
484
+ const formItem = formItemRefs.value.get(fieldId);
485
+ if (!formItem) {
486
+ console.log(`未找到 fieldId: ${fieldId} 的 FormItem 组件`);
487
+ return null;
488
+ }
489
+ console.log(`找到 FormItem 组件:`, formItem);
490
+ if (typeof formItem.getInnerComponentRef === "function") {
491
+ const innerRef = formItem.getInnerComponentRef();
492
+ console.log(`内部组件 ref:`, innerRef);
493
+ return innerRef;
494
+ } else {
495
+ console.log(`FormItem 组件没有 getInnerComponentRef 方法`);
496
+ return null;
497
+ }
498
+ };
476
499
  function initGridLayoutDataConfig() {
477
500
  let gridLayoutData = cloneDeep(localConfig.value.fieldsData || []);
478
501
  gridLayoutData = gridLayoutData.map((item) => {
@@ -490,125 +513,8 @@ const _sfc_main = /* @__PURE__ */ Object.assign({
490
513
  }
491
514
  return item;
492
515
  });
493
- gridLayoutDataConfig.value = gridLayoutData;
516
+ oriGridLayoutData.value = gridLayoutData;
494
517
  }
495
- const gridLayoutFieldsData = computed(() => {
496
- initGridLayoutDataConfig();
497
- let gridLayoutData = cloneDeep(gridLayoutDataConfig.value || []);
498
- const linkedConfig = localConfig.value.linkedConfig || {};
499
- const dataLink = (linkedConfig == null ? void 0 : linkedConfig.dataLink) || [];
500
- const fields = [...fieldsData.value, ...hiddenFields.value];
501
- dataLink.forEach((item) => {
502
- if (checkFilterMatch(item.filterConfig, formData.value, fields)) {
503
- const fieldAssignments = item.fieldAssignments || [];
504
- fieldAssignments.forEach((assignment) => {
505
- var _a, _b;
506
- const fieldId = assignment.fieldId;
507
- const formulaText = (_b = (_a = assignment.formula) == null ? void 0 : _a.value) == null ? void 0 : _b.text;
508
- const field = fields.find((f) => f.id == fieldId);
509
- if (field && formulaText) {
510
- const calcResult = calculate({
511
- text: formulaText,
512
- marks: [],
513
- value: formData.value
514
- });
515
- formData.value[field.fieldName] = calcResult;
516
- }
517
- });
518
- }
519
- });
520
- const visibility = (linkedConfig == null ? void 0 : linkedConfig.visibility) || [];
521
- visibility.forEach((item) => {
522
- const dataLinkFieldList = item.dataLinkFieldList || [];
523
- if (checkFilterMatch(item.filterConfig, formData.value, fields)) {
524
- dataLinkFieldList.forEach((fieldId) => {
525
- const layoutFieldItem = gridLayoutData.find((g) => g.id == fieldId);
526
- if (layoutFieldItem) {
527
- layoutFieldItem.hidden = false;
528
- }
529
- });
530
- } else {
531
- dataLinkFieldList.forEach((fieldId) => {
532
- const layoutFieldItem = gridLayoutData.find((g) => g.id == fieldId);
533
- if (layoutFieldItem) {
534
- layoutFieldItem.hidden = true;
535
- }
536
- });
537
- }
538
- });
539
- gridLayoutData = gridLayoutData.filter((item) => !item.hidden);
540
- const requiredArr = (linkedConfig == null ? void 0 : linkedConfig.required) || [];
541
- requiredArr.forEach((item) => {
542
- const dataLinkFieldList = item.dataLinkFieldList || [];
543
- if (checkFilterMatch(item.filterConfig, formData.value, fields)) {
544
- dataLinkFieldList.forEach((fieldId) => {
545
- const layoutFieldItem = gridLayoutData.find((g) => g.id == fieldId);
546
- if (layoutFieldItem) {
547
- layoutFieldItem.component.required = true;
548
- }
549
- });
550
- } else {
551
- dataLinkFieldList.forEach((fieldId) => {
552
- const layoutFieldItem = gridLayoutData.find((g) => g.id == fieldId);
553
- if (layoutFieldItem) {
554
- layoutFieldItem.component.required = false;
555
- }
556
- });
557
- }
558
- });
559
- const rules = {};
560
- gridLayoutData.forEach(({ component }) => {
561
- if (component.fieldName) {
562
- const fieldRules = generateFieldRules(component);
563
- if (fieldRules.length > 0) {
564
- rules[component.fieldName] = fieldRules;
565
- }
566
- }
567
- });
568
- for (let fieldName in prodRules.value) {
569
- rules[fieldName] = prodRules.value[fieldName];
570
- }
571
- formRules.value = rules;
572
- const readonlyArr = (linkedConfig == null ? void 0 : linkedConfig.readonly) || [];
573
- readonlyArr.forEach((item) => {
574
- const dataLinkFieldList = item.dataLinkFieldList || [];
575
- if (checkFilterMatch(item.filterConfig, formData.value, fields)) {
576
- dataLinkFieldList.forEach((fieldId) => {
577
- const layoutFieldItem = gridLayoutData.find((g) => g.id == fieldId);
578
- if (layoutFieldItem) {
579
- layoutFieldItem.component.readOnly = true;
580
- }
581
- });
582
- } else {
583
- dataLinkFieldList.forEach((fieldId) => {
584
- const layoutFieldItem = gridLayoutData.find((g) => g.id == fieldId);
585
- if (layoutFieldItem) {
586
- layoutFieldItem.component.readOnly = false;
587
- }
588
- });
589
- }
590
- });
591
- const disabledArr = (linkedConfig == null ? void 0 : linkedConfig.disabled) || [];
592
- disabledArr.forEach((item) => {
593
- const dataLinkFieldList = item.dataLinkFieldList || [];
594
- if (checkFilterMatch(item.filterConfig, formData.value, fields)) {
595
- dataLinkFieldList.forEach((fieldId) => {
596
- const layoutFieldItem = gridLayoutData.find((g) => g.id == fieldId);
597
- if (layoutFieldItem) {
598
- layoutFieldItem.component.disabled = true;
599
- }
600
- });
601
- } else {
602
- dataLinkFieldList.forEach((fieldId) => {
603
- const layoutFieldItem = gridLayoutData.find((g) => g.id == fieldId);
604
- if (layoutFieldItem) {
605
- layoutFieldItem.component.disabled = false;
606
- }
607
- });
608
- }
609
- });
610
- return gridLayoutData;
611
- });
612
518
  const getFieldError = (fieldName) => {
613
519
  var _a;
614
520
  if (!formRef.value) return "";
@@ -746,13 +652,199 @@ const _sfc_main = /* @__PURE__ */ Object.assign({
746
652
  onMounted(() => {
747
653
  loadConfig();
748
654
  });
655
+ onBeforeUnmount(() => {
656
+ formItemRefs.value.clear();
657
+ });
658
+ const prevFormData = ref({});
659
+ const findChangedFields = (newData, oldData) => {
660
+ const changedFields = [];
661
+ const allKeys = /* @__PURE__ */ new Set([
662
+ ...Object.keys(newData || {}),
663
+ ...Object.keys(oldData || {})
664
+ ]);
665
+ for (const key of allKeys) {
666
+ const newVal = newData[key];
667
+ const oldVal = oldData[key];
668
+ if (newVal !== oldVal) {
669
+ changedFields.push(key);
670
+ }
671
+ }
672
+ return changedFields;
673
+ };
674
+ const filterRelevantLinkageConfigs = (changedFieldNames, linkedConfig, fields) => {
675
+ const result = {
676
+ dataLink: [],
677
+ visibility: [],
678
+ required: [],
679
+ readonly: [],
680
+ disabled: []
681
+ };
682
+ if (!linkedConfig || changedFieldNames.length === 0) {
683
+ return result;
684
+ }
685
+ const changedFieldIds = changedFieldNames.map((fieldName) => {
686
+ const field = fields.find((f) => f.fieldName == fieldName);
687
+ return field ? field.id : null;
688
+ }).filter((id) => id !== null);
689
+ if (linkedConfig.dataLink) {
690
+ result.dataLink = linkedConfig.dataLink.filter((item) => {
691
+ return changedFieldIds.some(
692
+ (fieldId) => checkFieldInFilterConfig(item.filterConfig, fieldId) || checkFieldInResultConfig(item.fieldAssignments, fieldId, fields)
693
+ );
694
+ });
695
+ }
696
+ if (linkedConfig.visibility) {
697
+ result.visibility = linkedConfig.visibility;
698
+ }
699
+ if (linkedConfig.required) {
700
+ result.required = linkedConfig.required;
701
+ }
702
+ if (linkedConfig.readonly) {
703
+ result.readonly = linkedConfig.readonly;
704
+ }
705
+ if (linkedConfig.disabled) {
706
+ result.disabled = linkedConfig.disabled;
707
+ }
708
+ return result;
709
+ };
710
+ const applyLinkageEffectsForChangedFields = (changedFieldNames) => {
711
+ console.log(
712
+ "🚀 ~ applyLinkageEffectsForChangedFields ~ 变化的字段:",
713
+ changedFieldNames
714
+ );
715
+ const linkedConfig = localConfig.value.linkedConfig || {};
716
+ const fields = [...fieldsData.value, ...hiddenFields.value];
717
+ const relevantConfigs = filterRelevantLinkageConfigs(
718
+ changedFieldNames,
719
+ linkedConfig,
720
+ fields
721
+ );
722
+ relevantConfigs.dataLink.forEach((item) => {
723
+ if (checkFilterMatch(item.filterConfig, formData.value, fields)) {
724
+ const fieldAssignments = item.fieldAssignments || [];
725
+ fieldAssignments.forEach((assignment) => {
726
+ var _a, _b;
727
+ const fieldId = assignment.fieldId;
728
+ const formulaText = (_b = (_a = assignment.formula) == null ? void 0 : _a.value) == null ? void 0 : _b.text;
729
+ const field = fields.find((f) => f.id == fieldId);
730
+ if (field && formulaText) {
731
+ const calcResult = calculate({
732
+ text: formulaText,
733
+ marks: [],
734
+ value: formData.value
735
+ });
736
+ formData.value[field.fieldName] = calcResult;
737
+ }
738
+ });
739
+ }
740
+ });
741
+ const updatedLayoutData = cloneDeep(oriGridLayoutData.value || []);
742
+ relevantConfigs.visibility.forEach((item) => {
743
+ const dataLinkFieldList = item.dataLinkFieldList || [];
744
+ if (checkFilterMatch(item.filterConfig, formData.value, fields)) {
745
+ dataLinkFieldList.forEach((fieldId) => {
746
+ const layoutFieldItem = updatedLayoutData.find((g) => g.id == fieldId);
747
+ if (layoutFieldItem) {
748
+ layoutFieldItem.hidden = false;
749
+ }
750
+ });
751
+ } else {
752
+ dataLinkFieldList.forEach((fieldId) => {
753
+ const layoutFieldItem = updatedLayoutData.find((g) => g.id == fieldId);
754
+ if (layoutFieldItem) {
755
+ layoutFieldItem.hidden = true;
756
+ }
757
+ });
758
+ }
759
+ });
760
+ relevantConfigs.required.forEach((item) => {
761
+ const dataLinkFieldList = item.dataLinkFieldList || [];
762
+ if (checkFilterMatch(item.filterConfig, formData.value, fields)) {
763
+ dataLinkFieldList.forEach((fieldId) => {
764
+ const layoutFieldItem = updatedLayoutData.find((g) => g.id == fieldId);
765
+ if (layoutFieldItem) {
766
+ layoutFieldItem.component.required = true;
767
+ }
768
+ });
769
+ } else {
770
+ dataLinkFieldList.forEach((fieldId) => {
771
+ const layoutFieldItem = updatedLayoutData.find((g) => g.id == fieldId);
772
+ if (layoutFieldItem) {
773
+ layoutFieldItem.component.required = false;
774
+ }
775
+ });
776
+ }
777
+ });
778
+ const rules = {};
779
+ updatedLayoutData.forEach(({ component }) => {
780
+ if (component.fieldName) {
781
+ const fieldRules = generateFieldRules(component);
782
+ if (fieldRules.length > 0) {
783
+ rules[component.fieldName] = fieldRules;
784
+ }
785
+ }
786
+ });
787
+ for (let fieldName in prodRules.value) {
788
+ rules[fieldName] = prodRules.value[fieldName];
789
+ }
790
+ formRules.value = rules;
791
+ relevantConfigs.readonly.forEach((item) => {
792
+ const dataLinkFieldList = item.dataLinkFieldList || [];
793
+ if (checkFilterMatch(item.filterConfig, formData.value, fields)) {
794
+ dataLinkFieldList.forEach((fieldId) => {
795
+ const layoutFieldItem = updatedLayoutData.find((g) => g.id == fieldId);
796
+ if (layoutFieldItem) {
797
+ layoutFieldItem.component.readOnly = true;
798
+ }
799
+ });
800
+ } else {
801
+ dataLinkFieldList.forEach((fieldId) => {
802
+ const layoutFieldItem = updatedLayoutData.find((g) => g.id == fieldId);
803
+ if (layoutFieldItem) {
804
+ layoutFieldItem.component.readOnly = false;
805
+ }
806
+ });
807
+ }
808
+ });
809
+ relevantConfigs.disabled.forEach((item) => {
810
+ const dataLinkFieldList = item.dataLinkFieldList || [];
811
+ if (checkFilterMatch(item.filterConfig, formData.value, fields)) {
812
+ dataLinkFieldList.forEach((fieldId) => {
813
+ const layoutFieldItem = updatedLayoutData.find((g) => g.id == fieldId);
814
+ if (layoutFieldItem) {
815
+ layoutFieldItem.component.disabled = true;
816
+ }
817
+ });
818
+ } else {
819
+ dataLinkFieldList.forEach((fieldId) => {
820
+ const layoutFieldItem = updatedLayoutData.find((g) => g.id == fieldId);
821
+ if (layoutFieldItem) {
822
+ layoutFieldItem.component.disabled = false;
823
+ }
824
+ });
825
+ }
826
+ });
827
+ gridLayoutFieldsData.value = updatedLayoutData.filter((item) => !item.hidden);
828
+ };
749
829
  watch(
750
830
  formData,
751
- (newVal) => {
831
+ (newVal, oldVal) => {
832
+ initGridLayoutDataConfig();
833
+ const changedFields = findChangedFields(newVal, prevFormData.value);
834
+ if (changedFields.length > 0) {
835
+ applyLinkageEffectsForChangedFields(changedFields);
836
+ }
837
+ prevFormData.value = { ...newVal };
752
838
  emit("update:modelValue", newVal);
753
839
  },
754
840
  { deep: true }
755
841
  );
842
+ function setFormItemHeight(id, h) {
843
+ const item = gridLayoutFieldsData.value.find((item2) => item2.id == id);
844
+ if (item) {
845
+ item.h = h;
846
+ }
847
+ }
756
848
  provide("formData", formData);
757
849
  provide("localConfig", localConfig);
758
850
  provide("fieldsData", fieldsData);
@@ -760,12 +852,14 @@ const _sfc_main = /* @__PURE__ */ Object.assign({
760
852
  provide("rowHeight", rowHeight);
761
853
  provide("gridLayout", gridLayout);
762
854
  provide("gridLayoutFieldsData", gridLayoutFieldsData);
855
+ provide("setFormItemHeight", setFormItemHeight);
763
856
  provide("formCtx", ctx);
764
857
  __expose({
765
858
  validate,
766
859
  resetFields,
767
860
  getFormData,
768
861
  setFormData,
862
+ getFormItemRef,
769
863
  formRef,
770
864
  localConfig
771
865
  });
@@ -801,8 +895,8 @@ const _sfc_main = /* @__PURE__ */ Object.assign({
801
895
  key: 0,
802
896
  ref_key: "gridLayout",
803
897
  ref: gridLayout,
804
- layout: unref(gridLayoutFieldsData),
805
- "onUpdate:layout": _cache[0] || (_cache[0] = ($event) => isRef(gridLayoutFieldsData) ? gridLayoutFieldsData.value = $event : null),
898
+ layout: gridLayoutFieldsData.value,
899
+ "onUpdate:layout": _cache[0] || (_cache[0] = ($event) => gridLayoutFieldsData.value = $event),
806
900
  "row-height": rowHeight.value,
807
901
  margin: [0, 0],
808
902
  "use-css-transforms": false,
@@ -812,6 +906,7 @@ const _sfc_main = /* @__PURE__ */ Object.assign({
812
906
  }, {
813
907
  item: withCtx(({ item: { component } }) => [
814
908
  createVNode(_FormItem, {
909
+ ref: (el) => setFormItemRef(el, component),
815
910
  modelValue: formData.value[component.fieldName],
816
911
  "onUpdate:modelValue": ($event) => formData.value[component.fieldName] = $event,
817
912
  config: component,
@@ -850,7 +945,7 @@ const _sfc_main = /* @__PURE__ */ Object.assign({
850
945
  };
851
946
  }
852
947
  });
853
- const _Form = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-f1c90d7c"]]);
948
+ const _Form = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-5e8468de"]]);
854
949
  export {
855
950
  _Form as default
856
951
  };
@@ -2,7 +2,7 @@
2
2
  /* empty css */
3
3
  import "../../../../../../node_modules/.pnpm/element-plus@2.13.2_vue@3.5.13_typescript@5.7.3_/node_modules/element-plus/theme-chalk/el-tooltip.css.mjs";
4
4
  /* empty css */
5
- import { computed, createBlock, createElementBlock, openBlock, unref, normalizeClass, createSlots, withCtx, createCommentVNode, resolveDynamicComponent, mergeProps, createElementVNode, toDisplayString } from "vue";
5
+ import { computed, ref, createBlock, createElementBlock, openBlock, unref, normalizeClass, createSlots, withCtx, createCommentVNode, resolveDynamicComponent, mergeProps, createElementVNode, toDisplayString } from "vue";
6
6
  import { debounce } from "../form/debounce.mjs";
7
7
  import { SubTitle } from "../subTitle/index.mjs";
8
8
  import { H2 } from "../h2/index.mjs";
@@ -54,7 +54,7 @@ const _sfc_main = /* @__PURE__ */ Object.assign({
54
54
  }
55
55
  },
56
56
  emits: ["update:modelValue", "change"],
57
- setup(__props, { emit: __emit }) {
57
+ setup(__props, { expose: __expose, emit: __emit }) {
58
58
  const props = __props;
59
59
  const emit = __emit;
60
60
  function handleChange(config, val) {
@@ -88,6 +88,7 @@ const _sfc_main = /* @__PURE__ */ Object.assign({
88
88
  }
89
89
  });
90
90
  }, 300);
91
+ const innerComponentRef = ref(null);
91
92
  const compValue = computed({
92
93
  get: () => props.modelValue,
93
94
  set: (val) => {
@@ -97,6 +98,14 @@ const _sfc_main = /* @__PURE__ */ Object.assign({
97
98
  }
98
99
  }
99
100
  });
101
+ const getInnerComponentRef = () => {
102
+ debugger;
103
+ return innerComponentRef.value;
104
+ };
105
+ __expose({
106
+ config: props.config,
107
+ getInnerComponentRef
108
+ });
100
109
  return (_ctx, _cache) => {
101
110
  const _component_el_tooltip = ElTooltip;
102
111
  const _component_el_form_item = ElFormItem;
@@ -108,15 +117,21 @@ const _sfc_main = /* @__PURE__ */ Object.assign({
108
117
  config: __props.config
109
118
  }, null, 8, ["config"])) : __props.config.fieldType == "subForm" ? (openBlock(), createBlock(unref(SubForm), {
110
119
  key: 2,
120
+ ref_key: "innerComponentRef",
121
+ ref: innerComponentRef,
111
122
  config: __props.config,
112
123
  localConfig: __props.localConfig,
113
124
  formMode: __props.formMode
114
125
  }, null, 8, ["config", "localConfig", "formMode"])) : __props.config.fieldType == "subTable" ? (openBlock(), createBlock(unref(SubTable), {
115
126
  key: 3,
127
+ ref_key: "innerComponentRef",
128
+ ref: innerComponentRef,
116
129
  config: __props.config,
117
130
  localConfig: __props.localConfig
118
131
  }, null, 8, ["config", "localConfig"])) : __props.config.fieldType == "approvalHistory" ? (openBlock(), createBlock(unref(ApprovalHistory), {
119
132
  key: 4,
133
+ ref_key: "innerComponentRef",
134
+ ref: innerComponentRef,
120
135
  config: __props.config,
121
136
  localConfig: __props.localConfig
122
137
  }, null, 8, ["config", "localConfig"])) : __props.config.fieldType == "blank" || __props.config.fieldType == "divider" ? (openBlock(), createElementBlock("div", {
@@ -132,6 +147,8 @@ const _sfc_main = /* @__PURE__ */ Object.assign({
132
147
  default: withCtx(() => [
133
148
  __props.config.labelMode != "label" ? (openBlock(), createBlock(resolveDynamicComponent(componentType.value), mergeProps({
134
149
  key: 0,
150
+ ref_key: "innerComponentRef",
151
+ ref: innerComponentRef,
135
152
  modelValue: compValue.value,
136
153
  "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => compValue.value = $event)
137
154
  }, componentProps.value, {
@@ -170,7 +187,7 @@ const _sfc_main = /* @__PURE__ */ Object.assign({
170
187
  };
171
188
  }
172
189
  });
173
- const _FormItem = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-c5553ecf"]]);
190
+ const _FormItem = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-1fbcd248"]]);
174
191
  export {
175
192
  _FormItem as default
176
193
  };
@@ -48,8 +48,8 @@ const _sfc_main = /* @__PURE__ */ Object.assign({
48
48
  const props = __props;
49
49
  const formData = inject("formData");
50
50
  inject("rowHeight");
51
- const gridLayout = inject("gridLayout");
52
- inject("gridLayoutFieldsData");
51
+ inject("gridLayout");
52
+ const setFormItemHeight = inject("setFormItemHeight");
53
53
  function subFormLoaded(subOption) {
54
54
  const fieldsData = subOption.fieldsData;
55
55
  console.log("🚀 ~ loaded ~ subOption:", subOption);
@@ -60,10 +60,10 @@ const _sfc_main = /* @__PURE__ */ Object.assign({
60
60
  (item) => item.id == props.config.id
61
61
  );
62
62
  const y = 1;
63
- const titleHeight = config.titleMode != "none" ? 1 : 0;
63
+ const titleHeight = props.config.titleMode != "none" ? 1 : 0;
64
64
  if (foundItem) {
65
65
  foundItem.h = maxY + y + titleHeight;
66
- gridLayout.value.resizeEvent();
66
+ setFormItemHeight(props.config.id, maxY + y + titleHeight);
67
67
  }
68
68
  }
69
69
  return (_ctx, _cache) => {
@@ -44,12 +44,12 @@ const _sfc_main = /* @__PURE__ */ Object.assign({
44
44
  // default: false,
45
45
  // },
46
46
  },
47
- setup(__props) {
47
+ setup(__props, { expose: __expose }) {
48
48
  const props = __props;
49
49
  const formData = inject("formData");
50
50
  inject("rowHeight");
51
- const gridLayout = inject("gridLayout");
52
- inject("gridLayoutFieldsData");
51
+ inject("gridLayout");
52
+ const setFormItemHeight = inject("setFormItemHeight");
53
53
  const subTableData = computed(() => {
54
54
  if (props.config.dataSourceFrom == "main") {
55
55
  return formData.value[props.config.fieldName];
@@ -83,11 +83,14 @@ const _sfc_main = /* @__PURE__ */ Object.assign({
83
83
  const foundItem = props.localConfig.fieldsData.find(
84
84
  (item) => item.id == props.config.id
85
85
  );
86
- const titleHeight = config.titleMode != "none" ? 60 : 0;
86
+ const titleHeight = props.config.titleMode != "none" ? 60 : 0;
87
87
  if (foundItem) {
88
88
  foundItem.fixedH = true;
89
89
  foundItem.h = props.config.subTableHeight + titleHeight;
90
- gridLayout.value.resizeEvent();
90
+ setFormItemHeight(
91
+ props.config.id,
92
+ props.config.subTableHeight + titleHeight
93
+ );
91
94
  }
92
95
  }
93
96
  const tableRef = ref();
@@ -99,6 +102,9 @@ const _sfc_main = /* @__PURE__ */ Object.assign({
99
102
  type: "custom"
100
103
  });
101
104
  };
105
+ __expose({
106
+ subTableRef: tableRef
107
+ });
102
108
  return (_ctx, _cache) => {
103
109
  const _component_el_button = ElButton;
104
110
  return openBlock(), createElementBlock(Fragment, null, [
@@ -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
  };