diff --git a/src/resources/plugins/TsSheet/form/component/formtable.vue b/src/resources/plugins/TsSheet/form/component/formtable.vue index 2b2aec5edaa0d378dfe32a0b6bb55ac286ea7d3e..261ba86bc0eaafb877a42b8e938ae81b0b9006b4 100644 --- a/src/resources/plugins/TsSheet/form/component/formtable.vue +++ b/src/resources/plugins/TsSheet/form/component/formtable.vue @@ -16,6 +16,7 @@ :formItemList="$utils.deepClone([...extraFormItemList, ...config.dataConfig, ...formItemList])" :showStatusIcon="false" :readonly="readonly" + :disabled="disabled" :isCustomValue="isCustomValue" :externalData="externalData" :formDataForWatch="{...filterUuid(initFormData),...formDataForWatch, ...row}" diff --git a/src/resources/plugins/TsSheet/form/component/formtableinputer/column-item.vue b/src/resources/plugins/TsSheet/form/component/formtableinputer/column-item.vue index c4808020c1f13af8c383bd7977d63c33ddd0d140..d18008a7d3957a540f16992ce77ce75bf515b915 100644 --- a/src/resources/plugins/TsSheet/form/component/formtableinputer/column-item.vue +++ b/src/resources/plugins/TsSheet/form/component/formtableinputer/column-item.vue @@ -91,7 +91,7 @@ export default { }, mixins: [conditionMixin], inject: [ - 'formDataForWatch', + 'getFormDataForWatch', 'extraFormItemList', 'extendConfigList', 'formItemList', @@ -150,11 +150,13 @@ export default { currentItemMask: false, //当前组件是否不可见 currentItemReadonly: false, //当前组件是否只读 cunrrentRequire: false // - } + }, + formItem: {} }; }, beforeCreate() {}, created() { + this.formItem = this.extraFormItemList.find(d => d.uuid === this.extraUuid); this.initReactionFormItemUuid(); this.updateConfig(); this.initStatus(); @@ -470,10 +472,6 @@ export default { }, filter: {}, computed: { - formItem() { - const formItem = this.extraFormItemList.find(d => d.uuid === this.extraUuid); - return formItem; - }, componentStyle() { return { width: this.mode != 'defaultvalue' ? (this.formItem.config && this.formItem.config.width) || '100%' : '100%' }; }, @@ -565,20 +563,24 @@ export default { }, formItemUuid() { return this.formItem && this.formItem.uuid; + }, + formDataForWatch() { + return this.getFormDataForWatch(); } }, watch: { reactionData: { handler(val, oldVal) { if (val && (this.mode === 'read' || this.mode === 'readSubform')) { - if (!this.$utils.isSame(val, this.reactionFormItemUuidMap)) { + if (!this.$utils.isEmpty(this.reactionFormItemUuidMap) && !this.$utils.isSame(val, this.reactionFormItemUuidMap)) { this.executionReaction(val, this.reactionFormItemUuidMap); this.reactionFormItemUuidMap = this.$utils.deepClone(val); + this.isFirstLoad = false; } - this.isFirstLoad = false; } }, - immediate: true + immediate: true, + deep: true } } }; diff --git a/src/resources/plugins/TsSheet/form/component/formtableinputer/index.vue b/src/resources/plugins/TsSheet/form/component/formtableinputer/index.vue index 8a7b8155f8193c6b7b0e5c933c9c018c1b34651d..d1a8de53279b3ea18f576dcbf9912f14663aa1e3 100644 --- a/src/resources/plugins/TsSheet/form/component/formtableinputer/index.vue +++ b/src/resources/plugins/TsSheet/form/component/formtableinputer/index.vue @@ -179,7 +179,7 @@ export default { }, provide() { return { - formDataForWatch: Object.freeze(this.$utils.deepClone(this.formDataForWatch)), + getFormDataForWatch: () => this.formDataForWatch, extraFormItemList: this.frozenExtraFormItemList, extendConfigList: this.frozenExtendConfigList, formItemList: this.frozenFormItemList, @@ -708,9 +708,11 @@ export default { return false; }, reactionDepsMap() { - const map = {}; + let map = {}; this.extraList.forEach(extra => { - const set = new Set(); + if (extra?.uuid) { + map[extra.uuid] = []; + } const reactionValue = extra.reaction || {}; for (const action in reactionValue) { const reaction = reactionValue[action]; @@ -719,17 +721,47 @@ export default { (reaction.conditionGroupList || []).forEach(group => { (group.conditionList || []).forEach(cond => { const uuid = (cond.formItemUuid || '').split('#')[0]; - if (uuid) set.add(uuid); + if (uuid) { + map[extra.uuid].push(uuid); + } }); }); } else { (reaction.ruleList || []).forEach(rule => { const uuid = (rule.formItemUuid || '').split('#')[0]; - if (uuid) set.add(uuid); + if (uuid) { + map[extra.uuid].push(uuid); + } }); } } - map[extra.uuid] = Array.from(set); + const {dataConfig = []} = extra.config || {}; + if (dataConfig.length > 0) { + dataConfig.forEach(d => { + const innerReactionValue = d.reaction || {}; + for (const action in innerReactionValue) { + const reactionRule = innerReactionValue[action]; + if (!reactionRule) continue; + if (action !== 'filter') { + (reactionRule.conditionGroupList || []).forEach(group => { + (group.conditionList || []).forEach(cond => { + const uuid = (cond.formItemUuid || '').split('#')[0]; + if (uuid) { + map[extra.uuid].push(uuid); + } + }); + }); + } else { + (reactionRule.ruleList || []).forEach(rule => { + const uuid = (rule.formItemUuid || '').split('#')[0]; + if (uuid) { + map[extra.uuid].push(uuid); + } + }); + } + } + }); + } }); return map; },