From 8e7c814fab227e159299ad0a9c05ecb6b9bdc0a8 Mon Sep 17 00:00:00 2001 From: prr <3099672575@qq.com> Date: Wed, 20 Nov 2024 18:07:12 +0800 Subject: [PATCH] =?UTF-8?q?add:word=E6=B7=BB=E5=8A=A0AI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/stores/model.ts | 2 + packages/word/index.html | 3 + packages/word/src/assets/images/ai-edit.svg | 1 + .../word/src/editor/core/command/Command.ts | 2 + .../src/editor/core/command/CommandAdapt.ts | 15 ++ .../src/editor/core/worker/works/catalog.ts | 4 +- .../src/editor/dataset/constant/Element.ts | 3 +- .../word/src/editor/dataset/enum/Element.ts | 1 + packages/word/src/main.ts | 11 + .../word/src/plugins/floatingToolbar/index.ts | 201 ++++++++++++++---- .../plugins/floatingToolbar/style/index.scss | 18 +- packages/word/src/style.css | 4 + 12 files changed, 216 insertions(+), 49 deletions(-) create mode 100644 packages/word/src/assets/images/ai-edit.svg diff --git a/frontend/src/stores/model.ts b/frontend/src/stores/model.ts index a3d1896..db8292e 100644 --- a/frontend/src/stores/model.ts +++ b/frontend/src/stores/model.ts @@ -153,6 +153,8 @@ export const useModelStore = defineStore('modelStore', () => { return modelList.filter((d: any) => d.action == action) } async function addDownList(data: any) { + console.log(data); + //modelList.value.unshift(data) // const has = modelList.value.find((d: any) => d.model == data.model) // //console.log(has) diff --git a/packages/word/index.html b/packages/word/index.html index 4c139df..f821ec6 100644 --- a/packages/word/index.html +++ b/packages/word/index.html @@ -334,6 +334,9 @@
+ diff --git a/packages/word/src/assets/images/ai-edit.svg b/packages/word/src/assets/images/ai-edit.svg new file mode 100644 index 0000000..d3e202b --- /dev/null +++ b/packages/word/src/assets/images/ai-edit.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/word/src/editor/core/command/Command.ts b/packages/word/src/editor/core/command/Command.ts index e5e53f2..d401400 100644 --- a/packages/word/src/editor/core/command/Command.ts +++ b/packages/word/src/editor/core/command/Command.ts @@ -28,6 +28,7 @@ export class Command { public executeStrikeout: CommandAdapt['strikeout'] public executeSuperscript: CommandAdapt['superscript'] public executeSubscript: CommandAdapt['subscript'] + public executeAiEdit: CommandAdapt['aiEdit'] public executeColor: CommandAdapt['color'] public executeHighlight: CommandAdapt['highlight'] public executeTitle: CommandAdapt['title'] @@ -152,6 +153,7 @@ export class Command { this.executeStrikeout = adapt.strikeout.bind(adapt) this.executeSuperscript = adapt.superscript.bind(adapt) this.executeSubscript = adapt.subscript.bind(adapt) + this.executeAiEdit = adapt.aiEdit.bind(adapt) this.executeColor = adapt.color.bind(adapt) this.executeHighlight = adapt.highlight.bind(adapt) // 标题、对齐方式、列表 diff --git a/packages/word/src/editor/core/command/CommandAdapt.ts b/packages/word/src/editor/core/command/CommandAdapt.ts index c6f8530..ac1a379 100644 --- a/packages/word/src/editor/core/command/CommandAdapt.ts +++ b/packages/word/src/editor/core/command/CommandAdapt.ts @@ -475,6 +475,7 @@ export class CommandAdapt { const isDisabled = this.draw.isReadonly() || this.draw.isDisabled() if (isDisabled) return const selection = this.range.getSelectionElementList() + if (selection?.length) { const noBoldIndex = selection.findIndex(s => !s.bold) selection.forEach(el => { @@ -633,6 +634,20 @@ export class CommandAdapt { this.draw.render({ isSetCursor: false }) } + public aiEdit(operate: string | null) { + console.log('ai edit:', operate) + const isDisabled = this.draw.isReadonly() || this.draw.isDisabled() + if (isDisabled) return + const selection = this.range.getSelectionElementList() + if (!selection) return + let content = '' + selection.forEach(el => { + content += el.value + }) + //console.log('操作内容:', content); + return content + } + public color(payload: string | null) { const isDisabled = this.draw.isReadonly() || this.draw.isDisabled() if (isDisabled) return diff --git a/packages/word/src/editor/core/worker/works/catalog.ts b/packages/word/src/editor/core/worker/works/catalog.ts index ddd7933..3cb1394 100644 --- a/packages/word/src/editor/core/worker/works/catalog.ts +++ b/packages/word/src/editor/core/worker/works/catalog.ts @@ -18,6 +18,7 @@ enum ElementType { SUPERSCRIPT = 'superscript', SUBSCRIPT = 'subscript', SEPARATOR = 'separator', + AIEDIT = 'aiEdit', PAGE_BREAK = 'pageBreak', CONTROL = 'control', CHECKBOX = 'checkbox', @@ -54,7 +55,8 @@ const TEXTLIKE_ELEMENT_TYPE: ElementType[] = [ ElementType.SUBSCRIPT, ElementType.SUPERSCRIPT, ElementType.CONTROL, - ElementType.DATE + ElementType.DATE, + ElementType.AIEDIT ] const ZERO = '\u200B' diff --git a/packages/word/src/editor/dataset/constant/Element.ts b/packages/word/src/editor/dataset/constant/Element.ts index 1db6e52..5d611be 100644 --- a/packages/word/src/editor/dataset/constant/Element.ts +++ b/packages/word/src/editor/dataset/constant/Element.ts @@ -131,7 +131,8 @@ export const TEXTLIKE_ELEMENT_TYPE: ElementType[] = [ ElementType.SUBSCRIPT, ElementType.SUPERSCRIPT, ElementType.CONTROL, - ElementType.DATE + ElementType.DATE, + ElementType.AIEDIT ] export const IMAGE_ELEMENT_TYPE: ElementType[] = [ diff --git a/packages/word/src/editor/dataset/enum/Element.ts b/packages/word/src/editor/dataset/enum/Element.ts index 23a5dc6..4644de6 100644 --- a/packages/word/src/editor/dataset/enum/Element.ts +++ b/packages/word/src/editor/dataset/enum/Element.ts @@ -6,6 +6,7 @@ export enum ElementType { SUPERSCRIPT = 'superscript', SUBSCRIPT = 'subscript', SEPARATOR = 'separator', + AIEDIT = 'aiEdit', PAGE_BREAK = 'pageBreak', CONTROL = 'control', CHECKBOX = 'checkbox', diff --git a/packages/word/src/main.ts b/packages/word/src/main.ts index 5d304a0..9ab3e00 100644 --- a/packages/word/src/main.ts +++ b/packages/word/src/main.ts @@ -237,6 +237,14 @@ window.onload = function () { instance.command.executeSubscript() } + //ai + const aiEditDom = document.querySelector