diff --git a/packages/designer/src/document/document-model.ts b/packages/designer/src/document/document-model.ts index 64cfaafbf..a6811d687 100644 --- a/packages/designer/src/document/document-model.ts +++ b/packages/designer/src/document/document-model.ts @@ -301,8 +301,11 @@ export class DocumentModel { } import(schema: RootSchema, checkId = false) { + // TODO: do purge + this.nodes.forEach(node => { + this.destroyNode(node); + }); this.rootNode.import(schema as any, checkId); - // todo: purge something // todo: select added and active track added } diff --git a/packages/designer/src/document/node/props/prop.ts b/packages/designer/src/document/node/props/prop.ts index f7f5c7b14..3ba60b5f3 100644 --- a/packages/designer/src/document/node/props/prop.ts +++ b/packages/designer/src/document/node/props/prop.ts @@ -70,11 +70,6 @@ export class Prop implements IPropParent { return undefined; } - // 兼容 vision 之前逻辑 - if (this.key === 'fieldId' && stage === TransformStage.Clone) { - return undefined; - } - if (type === 'literal' || type === 'expression') { // TODO 后端改造之后删除此逻辑 if (this._value === null && stage === TransformStage.Save) { diff --git a/packages/editor-preset-vision/src/editor.ts b/packages/editor-preset-vision/src/editor.ts index e845ce636..d26ba0512 100644 --- a/packages/editor-preset-vision/src/editor.ts +++ b/packages/editor-preset-vision/src/editor.ts @@ -25,10 +25,17 @@ export const designer = new Designer({ editor: editor }); editor.set(Designer, designer); editor.set('designer', designer); +const nodeCache: any = {}; designer.project.onCurrentDocumentChange((doc) => { doc.onRendererReady(() => { bus.emit(VE_EVENTS.VE_PAGE_PAGE_READY); }); + doc.onNodeCreate((node) => { + nodeCache[node.id] = node; + }); + doc.onNodeDestroy((node) => { + delete nodeCache[node.id]; + }); }); interface Variable { @@ -80,11 +87,23 @@ designer.addPropsReducer(upgradePropsReducer, TransformStage.Upgrade); // 节点 props 初始化 designer.addPropsReducer((props, node) => { // run initials + const newProps: any = { + ...props, + }; + if (newProps.fieldId) { + const fieldIds: any = []; + Object.keys(nodeCache).forEach(nodeId => { + const fieldId = nodeCache[nodeId].getPropValue('fieldId'); + if (fieldId) { + fieldIds.push(fieldId); + } + }); + if (fieldIds.indexOf(props.fieldId) >= 0) { + newProps.fieldId = undefined; + } + } const initials = node.componentMeta.getMetadata().experimental?.initials; if (initials) { - const newProps: any = { - ...props, - }; const getRealValue = (propValue: any) => { if (isVariable(propValue)) { return propValue.value; @@ -98,7 +117,7 @@ designer.addPropsReducer((props, node) => { // FIXME! this implements SettingTarget try { // FIXME! item.name could be 'xxx.xxx' - const ov = props[item.name]; + const ov = newProps[item.name]; const v = item.initial(node as any, getRealValue(ov)); if (ov === undefined && v !== undefined) { newProps[item.name] = v; @@ -112,10 +131,8 @@ designer.addPropsReducer((props, node) => { node.props.add(newProps[item.name], item.name); } }); - - return newProps; } - return props; + return newProps; }, TransformStage.Init); designer.addPropsReducer((props: any, node: Node) => {