|
|
před 1 měsícem | |
|---|---|---|
| .. | ||
| README.md | před 1 měsícem | |
| 新编辑器与聊天面板集成方案.md | před 1 měsícem | |
| 新编辑器功能设计.md | před 1 měsícem | |
| 新编辑器实现路线图.md | před 1 měsícem | |
| 新编辑器开发手册.md | před 1 měsícem | |
| 新编辑器架构设计.md | před 1 měsícem | |
| 集成快速参考.md | před 1 měsícem | |
本文档描述 ax-frontend-app 当前实际运行的前端实现。项目是一个基于 React、TypeScript 和 Vite 的文档工作台,提供:
当前编辑器已经直接使用块编辑器实现,不再通过 Feature Flag 切换到旧的 MDXEditor。新编辑器与聊天面板集成方案.md、集成快速参考.md 等文件保留作为设计和迁移历史参考,不能作为当前代码接口的唯一依据。
在项目目录执行:
npm install
npm run dev
开发服务器默认运行在 http://localhost:5173。
生产构建:
npm run build
npm run preview
性能审计应使用生产预览,而不是 Vite 开发服务器:
npm run serve:prod
然后使用 Lighthouse 访问 http://localhost:4173/。开发服务器返回未压缩模块源码,会夸大 JavaScript 和 CSS 的优化空间。
| 命令 | 用途 |
|---|---|
npm run dev |
启动开发服务器 |
npm run build |
TypeScript 检查并构建生产包 |
npm run preview |
预览已构建的生产包 |
npm run serve:prod |
构建并启动生产预览 |
npm run lighthouse:ready |
构建并启动 Lighthouse 审计目标 |
npm run lint |
检查全部前端代码 |
npm run format:check |
检查格式 |
npm run test |
运行 Vitest 测试 |
npm run test:document |
运行文档块和富文本转换测试 |
npm run test:export |
运行导出服务测试 |
npm run build:analyze |
构建并生成 dist/stats.html |
npm run analyze |
执行构建并输出资源体积统计 |
main.tsx
└─ App
├─ ConfigProvider / ErrorBoundary
├─ ChatPanel (懒加载,左侧)
├─ ExportRecordList (懒加载,右侧默认视图)
├─ EditorPanel (懒加载,打开文档后显示)
├─ SessionList (打开抽屉时才挂载)
└─ ResizableLayout
src/main.tsx 创建 React 根节点并加载全局样式。src/App.tsx 负责双面板布局、网络状态提示、会话抽屉和右侧视图切换。src/components/Layout/ResizableLayout.tsx 负责左右面板拖拽和宽度持久化。src/stores/uiStore.ts 保存文档预览状态和 UI 偏好。右侧面板的选择规则:
previewDocumentId 存在时显示 EditorPanel。ExportRecordList。SessionList,打开后才加载对应 chunk。当前编辑器调用链如下:
EditorPanel
└─ EditorWithOutline
├─ BlockEditor
│ ├─ MainToolbar
│ └─ BlockCanvas
│ └─ BlockRenderer
│ ├─ HeadingBlock
│ ├─ ParagraphBlock
│ ├─ TableBlock
│ ├─ ImageBlock
│ └─ TOCBlock
└─ DocumentOutline
类型定义位于 src/types/editor.ts,当前支持:
| 类型 | 用途 | 主要内容 |
|---|---|---|
heading |
1 至 6 级标题 | RichText[] 或字符串 |
paragraph |
普通段落和列表 | RichText[] 或字符串 |
table |
表格及单元格编辑 | rows、cells、rowspan、colspan |
image |
图片块 | Base64 Data URL、宽高和对齐方式 |
toc |
目录块 | 由文档标题生成 |
块通过 block_order 排序。插入、移动和删除操作由 editorStore 统一处理,必要时进行排序重建和保存。
富文本片段结构:
{
text: '示例文本',
style: {
bold: true,
color: 'FF0000',
font_size: 12
}
}
RichTextEditor 使用 contenteditable。richTextConverter.ts 负责 RichText[] 与 HTML 的双向转换。Range 维护用户选区。src/components/Editor/blocks/TableToolbar.tsx。当前支持:
rowspan 和 colspan表格结构算法主要位于 src/utils/blockOperations.ts,修改表格结构时应优先复用其中的视觉坐标和重建逻辑,不要直接按数组索引插入单元格。
项目使用 Zustand 管理状态:
| Store | 职责 |
|---|---|
chatStore |
消息、会话、流式回复和会话持久化 |
editorStore |
文档、blocks、选中状态、自动保存和重试 |
uiStore |
文档预览、面板偏好和全局 UI 状态 |
documentStore |
文档创建和文档相关操作 |
典型编辑流程:
用户输入
-> RichTextEditor
-> onChange
-> editorStore.updateBlock
-> dirtyBlocks / hasModified
-> 自动保存或 MainToolbar 手动保存
-> blockService / 后端 API
服务层位于 src/services/,API 请求优先通过 src/services/api.ts 的 Axios 实例完成,以获得统一的超时、错误归一化和通知行为。
html2canvas 和 jspdf,仅在点击 PDF 导出时动态加载。mammoth 仅在文档内容解析时动态加载。PDF、截图和 Word 解析库不应改为入口静态 import,否则会增加首屏 JavaScript 和 TBT。
项目当前针对 FCP、LCP、TBT、CLS 的主要策略:
requestAnimationFrame 节流,拖动结束后才写入 localStorage。content-visibility: auto 和 contain-intrinsic-size。loading="lazy" 和 decoding="async",降低 CLS。性能验证建议:
npm run serve:prod。http://localhost:4173/。npm run build:analyze 查看 dist/stats.html。当前代码审查重点:
eval、new Function、document.write 等危险执行接口。dangerouslySetInnerHTML 渲染聊天内容的路径。必须注意:
VITE_* 环境变量会进入浏览器构建产物,因此 VITE_AI_API_KEY 和 VITE_WORKFLOW_API_KEY 不能作为生产秘密。生产环境应使用后端代理:
浏览器 -> 自有后端 -> AI / Workflow 服务
不要把真正的生产密钥继续放在前端环境变量中。
依赖漏洞检查使用官方 npm registry 或支持 audit advisory API 的镜像:
npm config set registry https://registry.npmjs.org/
npm audit --omit=dev
常用配置包括:
| 变量 | 用途 |
|---|---|
VITE_API_BASE_URL |
后端 API 地址 |
VITE_AI_API_URL |
AI 聊天服务地址 |
VITE_AI_API_KEY |
AI 服务访问令牌,不应放生产秘密 |
VITE_WORKFLOW_API_URL |
文档工作流地址 |
VITE_WORKFLOW_API_KEY |
工作流访问令牌,不应放生产秘密 |
VITE_DEBUG |
是否输出 API 调试日志 |
默认后端地址由服务层提供,仅适合本地开发。部署时应显式配置 VITE_API_BASE_URL。
src/
├─ components/
│ ├─ ChatPanel/ 聊天面板和消息列表
│ ├─ Editor/ 块编辑器、表格、图片、富文本
│ ├─ EditorPanel/ 编辑器面板外壳
│ ├─ ExportRecordList/ 导出记录列表
│ ├─ Layout/ 可拖拽双面板布局
│ ├─ SessionList/ 会话历史
│ └─ common/ ErrorBoundary 等通用组件
├─ hooks/ 自定义 hooks
├─ services/ API、文档、聊天和导出服务
├─ stores/ Zustand 状态
├─ types/ TypeScript 数据类型
└─ utils/ 转换、存储、表格和样式工具
| 文档 | 用途 |
|---|---|
| 新编辑器架构设计.md | 块编辑器架构和数据模型设计 |
| 新编辑器功能设计.md | 功能和交互设计 |
| 新编辑器开发手册.md | 开发和调试参考 |
| 新编辑器与聊天面板集成方案.md | 集成过程和历史决策 |
| 集成快速参考.md | 历史集成检查清单 |
| 新编辑器实现路线图.md | 历史计划和里程碑 |
后端配套文档位于工作区的 ax-backend-v1/docs/,包括 blocks 数据模型、编辑器 API 和导出映射说明。
修改组件、Store、服务或构建脚本后,应同步检查本文档中的:
最后更新:2026-07-17