diff --git a/packages/antv-x6-design/src/plugins/logic-design/custom-node/remark-node.ts b/packages/antv-x6-design/src/plugins/logic-design/custom-node/remark-node.ts index 63beb2a598e01a1d8945a95924713ed0468a3671..15c4fba032a80b6f23f881c94b3c5184f746cd82 100644 --- a/packages/antv-x6-design/src/plugins/logic-design/custom-node/remark-node.ts +++ b/packages/antv-x6-design/src/plugins/logic-design/custom-node/remark-node.ts @@ -25,6 +25,13 @@ export class RemarkNode extends Shape.HTML { */ outputNum: number = 0; + /** + * @description 是否注册监听 + * @type {boolean} + * @memberof RemarkNode + */ + isRegisterListener: boolean = false; + constructor(metadata: Node.Metadata = {}) { const data = metadata.data || {}; const nodeSize = { @@ -56,6 +63,7 @@ export class RemarkNode extends Shape.HTML { private setupEvents() { this.on('selected', (): void => { // 选中时使内容可编辑 + this.registerListener(); this.setNodeEditable(true); }); this.on('unselected', (): void => { @@ -138,4 +146,36 @@ export class RemarkNode extends Shape.HTML { } } } + + /** + * @description 注册监听 + * @private + * @returns {*} {Promise} + * @memberof RemarkNode + */ + private async registerListener(): Promise { + const contentEl = document.getElementById(this.id); + if (!contentEl || this.isRegisterListener) return + this.isRegisterListener = true; + const listener = (e: ClipboardEvent | KeyboardEvent) => { + e.preventDefault(); + e.stopPropagation(); + }; + // 禁用粘贴 + contentEl.addEventListener('paste', listener); + // 禁用复制 + contentEl.addEventListener('copy', listener); + // 禁用剪切 + contentEl.addEventListener('cut', listener); + // 禁用快捷键 + contentEl.addEventListener('keydown', e => { + // 禁用回车键和快捷键Ctrl+C、Ctrl+V、Ctrl+X + if ( + e.key === 'Enter' || + ((e.ctrlKey || e.metaKey) && + (e.key === 'c' || e.key === 'v' || e.key === 'x')) + ) + listener(e); + }); + } }