@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.
- package/es/designer.css +208 -179
- package/es/packages/designer/package.json.mjs +1 -1
- package/es/packages/designer/src/components/FilterConfigDisplay.vue.mjs +5 -3
- package/es/packages/designer/src/packages/advancedFilter/ValueInput.vue2.mjs +2 -2
- package/es/packages/designer/src/packages/dataLinkage/index.vue.mjs +85 -75
- package/es/packages/designer/src/packages/dialogGlobal/index.vue.mjs +2 -0
- package/es/packages/designer/src/packages/eventFlow/dialog/action/TableChildRefresh.vue2.mjs +94 -0
- package/es/packages/designer/src/packages/eventFlow/dialog/action/TableRowDelete.vue2.mjs +54 -0
- package/es/packages/designer/src/packages/eventFlow/dialog/action/config.mjs +12 -1
- package/es/packages/designer/src/packages/form/property/approvalHistory.vue.mjs +18 -18
- package/es/packages/designer/src/packages/form/property/subForm.vue.mjs +18 -18
- package/es/packages/designer/src/packages/form/property/subTable.vue.mjs +17 -17
- package/es/packages/designer/src/packages/formulaEditor/index.vue2.mjs +10 -1
- package/es/packages/designer/src/packages/table/headerBtn.vue.mjs +2 -0
- package/es/packages/designer/src/packages/table/queryModule/DynamicModeConfig.vue.mjs +12 -5
- package/es/packages/designer/src/packages/table/queryModule/index.vue.mjs +11 -16
- package/es/packages/vue/src/components/bus/approvalHistory/ApprovalHistory.vue.mjs +5 -4
- package/es/packages/vue/src/components/forms/form/Form.vue.mjs +234 -139
- package/es/packages/vue/src/components/forms/formItem/FormItem.vue.mjs +20 -3
- package/es/packages/vue/src/components/forms/subForm/SubForm.vue.mjs +4 -4
- package/es/packages/vue/src/components/forms/subTable/SubTable.vue.mjs +11 -5
- package/es/packages/vue/src/components/table/CustomButtons.vue.mjs +11 -3
- package/es/packages/vue/src/components/table/DynamicQuery.vue.mjs +16 -8
- package/es/packages/vue/src/components/table/Table.vue.mjs +7 -5
- package/es/packages/vue/src/utils/eventFlow/actionHandlers.mjs +86 -5
- package/es/packages/vue/src/utils/parseFilterConfig.mjs +44 -0
- package/lib/designer.css +208 -179
- package/lib/packages/designer/package.json.js +1 -1
- package/lib/packages/designer/src/components/FilterConfigDisplay.vue.js +5 -3
- package/lib/packages/designer/src/packages/advancedFilter/ValueInput.vue2.js +2 -2
- package/lib/packages/designer/src/packages/dataLinkage/index.vue.js +93 -83
- package/lib/packages/designer/src/packages/dialogGlobal/index.vue.js +2 -0
- package/lib/packages/designer/src/packages/eventFlow/dialog/action/TableChildRefresh.vue2.js +94 -0
- package/lib/packages/designer/src/packages/eventFlow/dialog/action/TableRowDelete.vue2.js +54 -0
- package/lib/packages/designer/src/packages/eventFlow/dialog/action/config.js +12 -1
- package/lib/packages/designer/src/packages/form/property/approvalHistory.vue.js +20 -20
- package/lib/packages/designer/src/packages/form/property/subForm.vue.js +20 -20
- package/lib/packages/designer/src/packages/form/property/subTable.vue.js +19 -19
- package/lib/packages/designer/src/packages/formulaEditor/index.vue2.js +10 -1
- package/lib/packages/designer/src/packages/table/headerBtn.vue.js +2 -0
- package/lib/packages/designer/src/packages/table/queryModule/DynamicModeConfig.vue.js +12 -5
- package/lib/packages/designer/src/packages/table/queryModule/index.vue.js +11 -16
- package/lib/packages/vue/src/components/bus/approvalHistory/ApprovalHistory.vue.js +5 -4
- package/lib/packages/vue/src/components/forms/form/Form.vue.js +232 -137
- package/lib/packages/vue/src/components/forms/formItem/FormItem.vue.js +19 -2
- package/lib/packages/vue/src/components/forms/subForm/SubForm.vue.js +4 -4
- package/lib/packages/vue/src/components/forms/subTable/SubTable.vue.js +11 -5
- package/lib/packages/vue/src/components/table/CustomButtons.vue.js +11 -3
- package/lib/packages/vue/src/components/table/DynamicQuery.vue.js +16 -8
- package/lib/packages/vue/src/components/table/Table.vue.js +7 -5
- package/lib/packages/vue/src/utils/eventFlow/actionHandlers.js +92 -11
- package/lib/packages/vue/src/utils/parseFilterConfig.js +44 -0
- 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,
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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:
|
|
805
|
-
"onUpdate:layout": _cache[0] || (_cache[0] = ($event) =>
|
|
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-
|
|
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-
|
|
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
|
-
|
|
52
|
-
inject("
|
|
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
|
-
|
|
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
|
-
|
|
52
|
-
inject("
|
|
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
|
-
|
|
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-
|
|
140
|
+
const CustomButtons = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-4a702348"]]);
|
|
133
141
|
export {
|
|
134
142
|
CustomButtons as default
|
|
135
143
|
};
|