Files
yunzerwebsiteallinone/.mimocode/plans/1784001763172-stellar-sailor.md
T
2026-07-14 15:49:00 +08:00

197 lines
6.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Plan: 用 Tiptap 替换 wangEditor
## 目标
将项目中所有 wangEditor 编辑器替换为 Tiptap,保留全部现有功能(文字格式、标题、列表、表格、图片上传、视频、链接、代码/引用、颜色、撤销重做等),保持 v-model 接口不变。
## 需要修改的文件清单
### 新建文件
| 文件 | 说明 |
|------|------|
| `platform/src/views/components/TiptapEditor.vue` | Tiptap 编辑器组件(替代 WangEditor |
### 修改文件
| 文件 | 改动 |
|------|------|
| `platform/package.json` | 移除 `@wangeditor/editor`,添加 Tiptap 依赖 |
| `backend/package.json` | 同上 |
| `platform/src/main.js` | 替换 WangEditor 全局注册为 TiptapEditor |
| `backend/src/main.js` | 同上 |
| `platform/src/views/tools/notebook/components/edit.vue` | 改用 TiptapEditor |
| `platform/src/views/tools/notebook/components/WangEditor.vue` | 删除此文件 |
| `backend/src/views/apps/cms/articles/components/edit.vue` | 改用 TiptapEditor |
| `backend/src/views/apps/cms/products/components/edit.vue` | 改用 TiptapEditor,更新 import (line 98) |
| `backend/src/views/apps/cms/articles/components/edit.vue` | 改用 TiptapEditor,更新 import (line 174),更新 w-e-* 样式 (line 538-539) |
| `backend/src/views/components/WangEditor.vue` | 替换为 TiptapEditor(或删除后改名) |
| `platform/src/views/Main.vue` | 更新 w-e-* 选择器为新的编辑器选择器 |
| `backend/src/views/Main.vue` | 同上 |
| `platform/src/assets/less/style.less` | 更新 .w-e-* 样式为新编辑器样式 |
| `backend/src/assets/less/style.less` | 同上 |
### 可删除文件
| 文件 | 说明 |
|------|------|
| `platform/src/views/components/WangEditor.vue` | 被 TiptapEditor 替代 |
| `platform/src/views/tools/notebook/components/WangEditor.vue` | 被 TiptapEditor 替代 |
| `backend/src/views/components/WangEditor.vue` | 被 TiptapEditor 替代 |
---
## Step 1: 安装 Tiptap 依赖,移除 wangEditor
两个项目(platform、backend)都需要执行:
```bash
# 移除 wangEditor
npm uninstall @wangeditor/editor
# 安装 Tiptap 核心
npm install @tiptap/vue-3 @tiptap/pm @tiptap/starter-kit
# 安装扩展
npm install @tiptap/extension-underline
npm install @tiptap/extension-text-style
npm install @tiptap/extension-color
npm install @tiptap/extension-highlight
npm install @tiptap/extension-placeholder
npm install @tiptap/extension-link
npm install @tiptap/extension-image
npm install @tiptap/extension-table @tiptap/extension-table-row @tiptap/extension-table-cell @tiptap/extension-table-header
npm install @tiptap/extension-text-align
```
---
## Step 2: 创建 TiptapEditor.vue 组件
路径:`platform/src/views/components/TiptapEditor.vue`
### 组件接口(保持与 WangEditor 一致)
- **Props**: `modelValue: string` (HTML)
- **Emits**: `update:modelValue`
- **Expose**: `clear()`, `getContent()`, `setContent(content)`
### 功能模块
#### 编辑器核心
- 使用 `useEditor` + `EditorContent` from `@tiptap/vue-3`
- Extensions 列表:
- `StarterKit` (bold, italic, strike, headings H1-H6, orderedList, bulletList, code, codeBlock, blockquote, horizontalRule, history/undo/redo)
- `Underline`
- `TextStyle` + `Color` + `Highlight` (文字颜色/背景色)
- `Placeholder` ("请输入内容...")
- `Link` (超链接)
- `Image` (图片)
- `Table` + `TableRow` + `TableCell` + `TableHeader` (表格,支持 resizable)
- `TextAlign` (left/center/right/justify)
#### 工具栏
分组按钮布局,从左到右:
1. **文字格式**: 加粗(B)、斜体(I)、下划线(U)、删除线(S)
2. **标题**: H1-H4 下拉或按钮组
3. **列表**: 有序、无序
4. **引用/代码**: 引用块、代码块
5. **链接**: 插入/编辑链接
6. **图片**: 上传图片按钮
7. **视频**: 插入视频(URL 方式)
8. **表格**: 插入表格、删除行/列、合并单元格
9. **颜色**: 文字颜色、背景色
10. **对齐**: 左/中/右/两端
11. **其他**: 撤销、重做
#### 图片上传
- 复用现有 `uploadFile` API`@/api/file`
- 上传到 `/api/files`,带 Bearer token
- 与现有 WangEditor 上传逻辑一致
#### HTML 双向同步
- `editor.on('update')``emit('update:modelValue', editor.getHTML())`
- `watch(modelValue)``editor.commands.setContent(newVal)` (避免循环触发)
#### 样式
- 保持现有 `.wang-editor-wrapper` 的视觉风格
- 新编辑器使用 `.tiptap-editor-wrapper` 类名
- 编辑区域使用 Tiptap 默认的 `.tiptap` 类名
- 支持 dark mode`html.dark` 选择器)
---
## Step 3: 替换全局注册
### platform/src/main.js
```js
// 移除: import WangEditor from '@/views/components/WangEditor.vue';
// 添加: import TiptapEditor from '@/views/components/TiptapEditor.vue';
// 移除: app.component('WangEditor', WangEditor);
// 添加: app.component('TiptapEditor', TiptapEditor);
```
### backend/src/main.js
同上。
---
## Step 4: 更新消费者页面
3 个消费者页面需要将 `<WangEditor v-model="xxx" />` 改为 `<TiptapEditor v-model="xxx" />`
1. `platform/src/views/tools/notebook/components/edit.vue` (line 19)
-`<WangEditor>``<TiptapEditor>`
- 移除 `import WangEditor from './WangEditor.vue'`
2. `backend/src/views/apps/cms/articles/components/edit.vue`
-`<WangEditor>``<TiptapEditor>`
- 移除或更新 import
3. `backend/src/views/apps/cms/products/components/edit.vue` (line 28)
-`<WangEditor>``<TiptapEditor>`
- 保留 `style="height: 450px;"`
---
## Step 5: 更新 Main.vue 事件处理
两个 Main.vue 中的右键菜单拦截逻辑需要更新选择器:
```
旧: '.wang-editor-wrapper', '.w-e-toolbar', '.w-e-drop-panel', '.w-e-modal', '.w-e-toolbar-menu', '[class*="w-e-"]'
新: '.tiptap-editor-wrapper', '.tiptap-toolbar', '[class*="tiptap-"]'
```
---
## Step 6: 更新全局样式
两个 `style.less` 中将 `.wang-editor-wrapper` / `.w-e-*` 选择器替换为新的 Tiptap 编辑器选择器。
---
## Step 7: 删除旧文件
- 删除 `platform/src/views/components/WangEditor.vue`
- 删除 `platform/src/views/tools/notebook/components/WangEditor.vue`
- 删除 `backend/src/views/components/WangEditor.vue`
---
## Step 8: 更新文档
- `platform/src/views/tools/notebook/README.md` - 更新技术栈描述
- `docs/NOTEBOOK_DEPLOYMENT_CHECKLIST.md` - 更新依赖安装命令
---
## 验证方式
1. `cd platform && npm install` - 确认依赖安装无报错
2. `cd backend && npm install` - 同上
3. 启动 platform 开发服务器,测试:
- 笔记本编辑器:输入文字、格式化、插入表格、上传图片
- 工具栏所有按钮可用
- v-model 双向绑定正常
4. 启动 backend 开发服务器,测试:
- CMS 文章编辑器:所有功能正常
- CMS 产品编辑器:所有功能正常
5. 测试 dark mode 切换下编辑器样式
6. 测试表格内 Backspace/Delete 正常工作