diff --git a/packages/dl-common/src/form/store/index.ts b/packages/dl-common/src/form/store/index.ts index 488791b..ef1c28d 100644 --- a/packages/dl-common/src/form/store/index.ts +++ b/packages/dl-common/src/form/store/index.ts @@ -1,4 +1,4 @@ -import { FormModels, IDetailTableItem, IFormModelItem } from '../types' +import { FormModels, IDetailTableItem, IFormModelItem, IRenderModel } from '../types' import { markRaw, reactive, ref, UnwrapNestedRefs } from 'vue' import { createRandomID, deepCopy, isEmpty, isObject } from '@xuanmo/utils' import { validator } from '../../validator' @@ -263,10 +263,24 @@ class FormStore { * 获取父级信息 * @param id */ - public getParent(id: string) { + public getParent(id: string) { return this.getModel(this.getModel(this.getModelIdByDataKey(id))?.layout.parent) } + /** + * 获取父级集合 + * @param id + */ + public getParents(id: string) { + const parents: IRenderModel[] = [] + let parent = this.getParent(id) + while (parent) { + parents.push(parent) + parent = this.getParent(parent.id) + } + return parents + } + /** * 获取明细表 id * @param id diff --git a/packages/dl-common/src/form/store/view-linkage/index.ts b/packages/dl-common/src/form/store/view-linkage/index.ts index e29c1d9..a689a10 100644 --- a/packages/dl-common/src/form/store/view-linkage/index.ts +++ b/packages/dl-common/src/form/store/view-linkage/index.ts @@ -110,6 +110,13 @@ export class ViewLinkageStore { } getDisplay(id: IRenderModel['id']) { + const parents = this.formStore.getParents(id) + if (parents.length) { + for (let i = 0; i < parents.length; i++) { + // 如果任意父级为隐藏,则当前组件也为隐藏 + if (!this.displayMap.get(parents[i].id)) return false + } + } return this.displayMap.get(id) }