mirror of
				https://github.com/Tencent/tmagic-editor.git
				synced 2025-11-04 02:28:04 +08:00 
			
		
		
		
	fix(editor): 数据源列表中依赖的key会重复出现
This commit is contained in:
		
							parent
							
								
									801399777b
								
							
						
					
					
						commit
						2d5b7726ef
					
				@ -75,6 +75,26 @@ const getNodeTreeConfig = (id: string, dep: Dep[string], type?: string) => ({
 | 
			
		||||
  children: getKeyTreeConfig(dep, type),
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 生成tree中依赖节点的数据
 | 
			
		||||
 * @param children 节点
 | 
			
		||||
 * @param deps 依赖
 | 
			
		||||
 * @param type 依赖类型
 | 
			
		||||
 */
 | 
			
		||||
const mergeChildren = (children: any[], deps: Dep, type?: string) => {
 | 
			
		||||
  Object.entries(deps).forEach(([id, dep]) => {
 | 
			
		||||
    // 已经生成过的节点
 | 
			
		||||
    const nodeItem = children.find((item) => item.id === id);
 | 
			
		||||
    // 节点存在,则追加依赖的key
 | 
			
		||||
    if (nodeItem) {
 | 
			
		||||
      nodeItem.children = nodeItem.children.concat(getKeyTreeConfig(dep, type));
 | 
			
		||||
    } else {
 | 
			
		||||
      // 节点不存在,则生成
 | 
			
		||||
      children.push(getNodeTreeConfig(id, dep, type));
 | 
			
		||||
    }
 | 
			
		||||
  });
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const list = computed(() =>
 | 
			
		||||
  dataSources.value.map((ds) => {
 | 
			
		||||
    const dsDeps = dsDep.value[ds.id].deps;
 | 
			
		||||
@ -82,21 +102,10 @@ const list = computed(() =>
 | 
			
		||||
    const dsCondDeps = dsCondDep.value[ds.id].deps;
 | 
			
		||||
 | 
			
		||||
    const children: any[] = [];
 | 
			
		||||
 | 
			
		||||
    const mergeChildren = (deps: Dep, type?: string) => {
 | 
			
		||||
      Object.entries(deps).forEach(([id, dep]) => {
 | 
			
		||||
        const nodeItem = children.find((item) => item.id === id);
 | 
			
		||||
        if (nodeItem) {
 | 
			
		||||
          nodeItem.children = nodeItem.children.concat(getKeyTreeConfig(dep, type));
 | 
			
		||||
        } else {
 | 
			
		||||
          children.push(getNodeTreeConfig(id, dep, type));
 | 
			
		||||
        }
 | 
			
		||||
      });
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    mergeChildren(dsDeps);
 | 
			
		||||
    mergeChildren(dsMethodDeps, 'method');
 | 
			
		||||
    mergeChildren(dsCondDeps, 'cond');
 | 
			
		||||
    // 数据源依赖分为三种类型:key/node、method、cond,是分开存储,这里将其合并展示
 | 
			
		||||
    mergeChildren(children, dsDeps);
 | 
			
		||||
    mergeChildren(children, dsMethodDeps, 'method');
 | 
			
		||||
    mergeChildren(children, dsCondDeps, 'cond');
 | 
			
		||||
 | 
			
		||||
    return {
 | 
			
		||||
      id: ds.id,
 | 
			
		||||
 | 
			
		||||
@ -299,7 +299,7 @@ export class Watcher extends EventEmitter {
 | 
			
		||||
        const keyIsItems = key === 'items';
 | 
			
		||||
        const fullKey = prop ? `${prop}.${key}` : key;
 | 
			
		||||
 | 
			
		||||
        if (target.isTarget(key, value)) {
 | 
			
		||||
        if (target.isTarget(fullKey, value)) {
 | 
			
		||||
          target.updateDep(node, fullKey);
 | 
			
		||||
          this.emit('update-dep', node, fullKey);
 | 
			
		||||
        } else if (!keyIsItems && Array.isArray(value)) {
 | 
			
		||||
 | 
			
		||||
@ -58,8 +58,13 @@ export const createDataSourceCondTarget = (id: string) =>
 | 
			
		||||
  new Target({
 | 
			
		||||
    type: DepTargetType.DATA_SOURCE_COND,
 | 
			
		||||
    id,
 | 
			
		||||
    isTarget: (key: string | number, value: any) =>
 | 
			
		||||
      Array.isArray(value) && value[0] === id && Boolean(dataSourceService.getDataSourceById(id)),
 | 
			
		||||
    isTarget: (key: string | number, value: any) => {
 | 
			
		||||
      if (!Array.isArray(value) || value[0] !== id || !`${key}`.startsWith('displayConds')) return false;
 | 
			
		||||
 | 
			
		||||
      const ds = dataSourceService.getDataSourceById(id);
 | 
			
		||||
 | 
			
		||||
      return Boolean(ds?.fields?.find((field) => field.name === value[1]));
 | 
			
		||||
    },
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
export const createDataSourceMethodTarget = (id: string) =>
 | 
			
		||||
 | 
			
		||||
@ -96,7 +96,7 @@ describe('depService', () => {
 | 
			
		||||
        type: 'target',
 | 
			
		||||
        id: 'collect_2',
 | 
			
		||||
        name: 'test2',
 | 
			
		||||
        isTarget: (key: string | number, value: any) => key === 'text1' && value === 'text',
 | 
			
		||||
        isTarget: (key: string | number, value: any) => `${key}`.includes('text1') && value === 'text',
 | 
			
		||||
      }),
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user