|
|
před 2 měsíci | |
|---|---|---|
| docs | před 2 měsíci | |
| public | před 2 měsíci | |
| src | před 2 měsíci | |
| .env | před 2 měsíci | |
| .env.example | před 2 měsíci | |
| .gitignore | před 2 měsíci | |
| .prettierignore | před 2 měsíci | |
| .prettierrc.json | před 2 měsíci | |
| CHANGES.txt | před 2 měsíci | |
| EDITOR_DEFAULT_EDIT_MODE.md | před 2 měsíci | |
| README.md | před 2 měsíci | |
| eslint.config.js | před 2 měsíci | |
| index.html | před 2 měsíci | |
| package-lock.json | před 2 měsíci | |
| package.json | před 2 měsíci | |
| pnpm-lock.yaml | před 2 měsíci | |
| pnpm-workspace.yaml | před 2 měsíci | |
| tsconfig.app.json | před 2 měsíci | |
| tsconfig.json | před 2 měsíci | |
| tsconfig.node.json | před 2 měsíci | |
| vite.config.ts | před 2 měsíci | |
| vitest.config.ts | před 2 měsíci | |
| 阶段性分析报告.md | před 2 měsíci |
企业级文档编辑和管理前端应用,基于 React 18 + TypeScript + Vite 构建。
本项目使用 React 18 而不是 React 19,因为 Ant Design v5 目前仅官方支持 React 16-18。
更多信息请参考:https://u.ant.design/v5-for-19
src/
├── components/ # UI 组件
│ ├── ChatPanel/ # 聊天面板组件
│ ├── EditorPanel/ # 编辑器面板组件
│ ├── DocumentList/ # 文档列表组件
│ ├── Layout/ # 布局组件(双栏、分割器)
│ └── common/ # 通用 UI 组件
├── services/ # 业务服务层
│ ├── api.ts # API 客户端封装
│ ├── documentService.ts # 文档 CRUD 服务
│ ├── exportService.ts # 导出服务
│ └── autoSaveService.ts # 自动保存服务
├── stores/ # Zustand 状态管理
│ ├── documentStore.ts # 文档状态
│ ├── chatStore.ts # 聊天状态
│ └── uiStore.ts # UI 状态
├── types/ # TypeScript 类型定义
│ ├── document.ts # 文档类型
│ ├── chat.ts # 聊天类型
│ └── api.ts # API 类型
├── utils/ # 工具函数
│ ├── debounce.ts # 防抖函数
│ ├── formatDate.ts # 日期格式化
│ └── storage.ts # localStorage 封装
├── hooks/ # 自定义 Hooks
│ ├── useAutoSave.ts # 自动保存 hook
│ ├── useDocumentList.ts # 文档列表 hook
│ └── useResponsive.ts # 响应式布局 hook
├── App.tsx # 根组件
├── main.tsx # 应用入口
└── vite-env.d.ts # Vite 环境类型
npm install
复制 .env.example 文件并重命名为 .env,然后配置环境变量:
# API Base URL - 后端服务地址
VITE_API_BASE_URL=http://localhost:8000
# Application Title - 应用标题
VITE_APP_TITLE=AX Document Editor
# Debug Mode - 调试模式
VITE_DEBUG=false
启动开发服务器(带热重载):
npm run dev
应用将在 http://localhost:5173 运行。
构建生产版本:
npm run build
构建输出将生成在 dist/ 目录。
本地预览生产构建:
npm run preview
单次运行所有测试:
npm run test
以监听模式运行测试(文件变更时自动重新运行):
npm run test:watch
运行 ESLint 检查:
npm run lint
运行 Prettier 格式检查:
npm run format:check
自动格式化代码:
npm run format
项目已启用 TypeScript 严格模式,包括:
strict: true - 启用所有严格类型检查选项noUnusedLocals: true - 检查未使用的局部变量noUnusedParameters: true - 检查未使用的参数noFallthroughCasesInSwitch: true - 检查 switch 语句的 fallthrough构建后的应用可以部署到任何静态托管服务:
server {
listen 80;
server_name example.com;
root /var/www/ax-frontend-app;
index index.html;
# SPA 回退
location / {
try_files $uri $uri/ /index.html;
}
# API 代理(可选)
location /api/ {
proxy_pass http://backend:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
ChatPanel.tsx)debounce.ts)document.ts)MAX_FILE_SIZE)any 类型useStateuseEffectReact.lazy 和 Suspense 进行代码分割React.memo 避免不必要的重新渲染useMemo 和 useCallback 优化计算和回调node_modules 和 package-lock.json 后重新安装npm run lint 检查 ESLint 错误npx tsc --noEmit 检查 TypeScript 错误rm -rf node_modules/.viteCopyright © 2025 Axonix Frontend Team
文档版本: v1.0
最后更新: 2025-01-11
已完成与后端文档管理和导出API的完整集成,提供:
npm run dev
# 访问 http://localhost:5173/document-demo
打开浏览器控制台(F12):
// 运行完整工作流测试
await window.documentTestUtils.testFullWorkflow(
'https://example.com/test.docx',
'test-user',
'test-session'
);
// 测试文档创建
await window.documentTestUtils.testDocumentFlow(
'https://example.com/test.docx',
'test-user',
'test-session'
);
// 测试导出
await window.documentTestUtils.testExportFlow('doc-abc123');
# 运行所有测试
npm test
# 运行特定测试
npm run test:document # 文档服务测试
npm run test:export # 导出服务测试
npm run test:integration # 集成测试
# 监听模式
npm run test:watch
# 生成覆盖率报告
npm run test:coverage
documentService.ts)import { createDocument, getDocument, updateDocument, deleteDocuments, listDocuments } from '@/services/documentService';
// 创建文档
const doc = await createDocument({
userId: 'user-123',
fileUrl: 'https://example.com/document.docx',
sessionId: 'session-456',
});
// 获取文档
const document = await getDocument('doc-abc123');
// 更新文档(全量)
await updateDocument('doc-abc123', {
content: '# 新标题\n\n新内容...',
});
// 更新文档(局部块)
await updateDocument('doc-abc123', {
blocks: [
{ level: 2, index: 0, content: '## 新章节\n\n内容...' },
],
});
// 列出文档
const result = await listDocuments({
userId: 'user-123',
page: 1,
pageSize: 20,
});
// 删除会话文档
await deleteDocuments('session-456');
exportService.ts)import { exportToWord } from '@/services/exportService';
// 导出为Word
const result = await exportToWord({
documentId: 'doc-abc123',
styleId: null, // 使用默认样式
});
// 下载文件
window.open(result.downloadUrl, '_blank');
import { DocumentUpload } from '@/components/DocumentUpload';
<DocumentUpload
userId="user-123"
sessionId="session-456"
onSuccess={(result) => console.log('创建成功:', result)}
showInstructions={true}
/>
import { DocumentManagement } from '@/components/DocumentManagement';
<DocumentManagement
userId="user-123"
sessionId="session-456"
showSessionFilter={true}
pageSize={20}
/>
../ax-backend-shell/docs/npm run test:document # 运行文档服务测试
npm run test:export # 运行导出服务测试
npm run test:integration # 运行集成测试
npm run test:coverage # 生成测试覆盖率报告
确保 .env 文件包含后端API地址:
VITE_API_BASE_URL=http://192.168.0.200:8000