mirror of
https://github.com/Tencent/tmagic-editor.git
synced 2025-06-02 13:59:16 +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),
|
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(() =>
|
const list = computed(() =>
|
||||||
dataSources.value.map((ds) => {
|
dataSources.value.map((ds) => {
|
||||||
const dsDeps = dsDep.value[ds.id].deps;
|
const dsDeps = dsDep.value[ds.id].deps;
|
||||||
@ -82,21 +102,10 @@ const list = computed(() =>
|
|||||||
const dsCondDeps = dsCondDep.value[ds.id].deps;
|
const dsCondDeps = dsCondDep.value[ds.id].deps;
|
||||||
|
|
||||||
const children: any[] = [];
|
const children: any[] = [];
|
||||||
|
// 数据源依赖分为三种类型:key/node、method、cond,是分开存储,这里将其合并展示
|
||||||
const mergeChildren = (deps: Dep, type?: string) => {
|
mergeChildren(children, dsDeps);
|
||||||
Object.entries(deps).forEach(([id, dep]) => {
|
mergeChildren(children, dsMethodDeps, 'method');
|
||||||
const nodeItem = children.find((item) => item.id === id);
|
mergeChildren(children, dsCondDeps, 'cond');
|
||||||
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');
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
id: ds.id,
|
id: ds.id,
|
||||||
|
@ -299,7 +299,7 @@ export class Watcher extends EventEmitter {
|
|||||||
const keyIsItems = key === 'items';
|
const keyIsItems = key === 'items';
|
||||||
const fullKey = prop ? `${prop}.${key}` : key;
|
const fullKey = prop ? `${prop}.${key}` : key;
|
||||||
|
|
||||||
if (target.isTarget(key, value)) {
|
if (target.isTarget(fullKey, value)) {
|
||||||
target.updateDep(node, fullKey);
|
target.updateDep(node, fullKey);
|
||||||
this.emit('update-dep', node, fullKey);
|
this.emit('update-dep', node, fullKey);
|
||||||
} else if (!keyIsItems && Array.isArray(value)) {
|
} else if (!keyIsItems && Array.isArray(value)) {
|
||||||
|
@ -58,8 +58,13 @@ export const createDataSourceCondTarget = (id: string) =>
|
|||||||
new Target({
|
new Target({
|
||||||
type: DepTargetType.DATA_SOURCE_COND,
|
type: DepTargetType.DATA_SOURCE_COND,
|
||||||
id,
|
id,
|
||||||
isTarget: (key: string | number, value: any) =>
|
isTarget: (key: string | number, value: any) => {
|
||||||
Array.isArray(value) && value[0] === id && Boolean(dataSourceService.getDataSourceById(id)),
|
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) =>
|
export const createDataSourceMethodTarget = (id: string) =>
|
||||||
|
@ -96,7 +96,7 @@ describe('depService', () => {
|
|||||||
type: 'target',
|
type: 'target',
|
||||||
id: 'collect_2',
|
id: 'collect_2',
|
||||||
name: 'test2',
|
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