diff --git a/packages/designer/src/document/document-model.ts b/packages/designer/src/document/document-model.ts index 239560c35..544857bc9 100644 --- a/packages/designer/src/document/document-model.ts +++ b/packages/designer/src/document/document-model.ts @@ -20,14 +20,14 @@ export type GetDataType = T extends undefined : any : T; - export interface ComponentMap { - componentName: string; - package: string; - version?: string; - destructuring?: boolean; - exportName?: string; - subName?: string; - } +export interface ComponentMap { + componentName: string; + package: string; + version?: string; + destructuring?: boolean; + exportName?: string; + subName?: string; +} export class DocumentModel { /** @@ -148,7 +148,12 @@ export class DocumentModel { * 生成唯一id */ nextId() { - return (this.id.slice(-10) + (++this.seqId).toString(36)).toLocaleLowerCase(); + let id; + do { + id = 'node_' + (this.id.slice(-10) + (++this.seqId).toString(36)).toLocaleLowerCase(); + } while (this.nodesMap.get(id)) + + return id; } /** diff --git a/packages/designer/src/document/node/node.ts b/packages/designer/src/document/node/node.ts index 4aaca47ef..384b445e3 100644 --- a/packages/designer/src/document/node/node.ts +++ b/packages/designer/src/document/node/node.ts @@ -148,7 +148,7 @@ export class Node { constructor(readonly document: DocumentModel, nodeSchema: Schema) { const { componentName, id, children, props, ...extras } = nodeSchema; - this.id = id || `node_${document.nextId()}`; + this.id = id || document.nextId(); this.componentName = componentName; if (this.componentName === 'Leaf') { this.props = new Props(this, {