8.0 KiB
8.0 KiB
合同起草功能测试指南
当前测试配置
系统当前配置为使用测试文档进行占位符提取测试,无需真实的数据库记录。
测试文档
- 文件路径:
public/testWork/买卖合同 (1).docx - 包含占位符: 18个
- 占位符格式:
{{占位符名称}}
提取的占位符列表
| 序号 | 占位符 | 类型 | 分组 | 必填 |
|---|---|---|---|---|
| 1 | 地市名称 | text | 基本信息 | 是 |
| 2 | 合同名称 | text | 基本信息 | 是 |
| 3 | 合同编号 | text | 基本信息 | 是 |
| 4 | 项目编号 | text | 基本信息 | 是 |
| 5 | 市名 | text | 基本信息 | 是 |
| 6 | 区名 | text | 基本信息 | 是 |
| 7 | 年 | text | 基本信息 | 是 |
| 8 | 月 | text | 基本信息 | 是 |
| 9 | 日 | text | 基本信息 | 是 |
| 10 | 有效期限 | text | 基本信息 | 是 |
| 11 | 甲方名称 | text | 甲方信息 | 是 |
| 12 | 甲方注册地址 | textarea | 甲方信息 | 是 |
| 13 | 甲方法定代表人 | text | 甲方信息 | 是 |
| 14 | 甲方联系电话 | text | 甲方信息 | 是 |
| 15 | 乙方名称 | text | 乙方信息 | 是 |
| 16 | 乙方注册地址 | textarea | 乙方信息 | 是 |
| 17 | 乙方法定代表人 | text | 乙方信息 | 是 |
| 18 | 乙方联系电话 | text | 乙方信息 | 是 |
测试步骤
1. 启动开发服务器
npm run dev
访问地址:http://localhost:5173
2. 访问草稿页面
由于使用的是临时测试数据,可以直接访问任意草稿ID:
http://localhost:5173/contract-draft/1
http://localhost:5173/contract-draft/999
http://localhost:5173/contract-draft/test
任意ID都会加载测试文档。
3. 验证占位符提取
查看控制台日志
打开浏览器开发者工具(F12),查看 Console 标签,应该能看到:
[Loader] 使用测试文档: D:\remix_project\docreview\public\testWork\买卖合同 (1).docx
[DOCX Parser] 开始读取文件: ...
[DOCX Parser] 文档 XML 长度: 33378
[DOCX Parser] 提取到的占位符: ["地市名称", "合同名称", ...]
[Loader] 提取到的占位符: [...]
[Loader] 生成的 schema: {...}
验证表单渲染
右侧应该显示占位符表单,包含以下分组:
- 基本信息 (10个字段)
- 甲方信息 (4个字段)
- 乙方信息 (4个字段)
4. 测试填写表单
在右侧表单中填写测试数据,例如:
基本信息:
- 地市名称:广州市
- 合同名称:设备采购合同
- 合同编号:HT-2025-001
- ...
甲方信息:
- 甲方名称:XX烟草公司
- 甲方注册地址:广州市天河区...
- 甲方法定代表人:张三
- 甲方联系电话:020-12345678
乙方信息:
- 乙方名称:XX供应商
- ...
5. 测试一键替换功能
⚠️ 前置条件
一键替换功能需要 CollaboraViewer 组件加载完成。当前系统中:
- 如果文件是 PDF:使用 react-pdf 预览(不支持替换)
- 如果文件是 DOCX:需要 Collabora Online 集成(尚未实现)
临时测试方法:
- 点击"一键替换占位符"按钮
- 查看控制台输出,应该显示:
[Draft] 开始批量替换占位符: {...}
[Draft] 替换: {{地市名称}} -> 广州市
[Draft] 替换: {{合同名称}} -> 设备采购合同
...
- 如果 Collabora 未集成,会显示警告:
- "文档尚未加载完成,请稍候..."
- 或 "unoCommands.replaceAll 方法不可用"
6. 测试导出文档
点击"导出文档"按钮,应该:
- 显示"正在下载文件..."提示
- 浏览器触发文件下载
- 下载的文件名为:
买卖合同-测试草稿.docx
注意:当前导出的是原始模板文档,不包含替换后的内容(需要 Collabora 集成后才能保存修改)
7. 测试完成起草
点击"完成起草"按钮,应该:
- 先下载文件
- 延迟500ms后显示"草稿已删除"
- 自动跳转到
/contract-template页面
8. 测试返回按钮
点击"返回"按钮,应该:
- 弹出确认对话框:"确定要返回吗?草稿将被删除。"
- 点击确定后删除草稿
- 跳转到模板列表页
测试要点
✅ 应该正常工作的功能
-
占位符提取
- 从测试文档中正确提取18个占位符
- 自动推测字段类型(text/textarea)
- 自动分组(基本信息/甲方信息/乙方信息)
-
表单渲染
- 右侧显示分组表单
- 字段按组展示
- 输入框正常工作
-
文档预览
- 左侧显示文档预览(需要 Collabora/react-pdf)
- 60% 宽度布局
-
导出功能
- 可以下载原始文档
-
自动清理
- 关闭页面时删除草稿记录(sendBeacon)
- 路由跳转时删除草稿记录(fetch keepalive)
⚠️ 待实现的功能
-
文件替换
- 需要集成 Collabora Online
- 参考
docs/docxtemplater-placeholder-extraction.md中的集成计划
-
真实数据库操作
- 当前使用临时模拟数据
- 后续需要连接真实的
drafted_contracts表
-
MinIO 文件复制
draft-service.server.ts中的copyMinioFile()待实现- 参考
docs/minio-file-copy-implementation.md
调试技巧
查看提取的 Schema
在浏览器控制台执行:
// 获取 loader 数据
const loaderData = window.__remixContext.state.loaderData;
console.log('Placeholder Schema:', loaderData['routes/contract-draft.$draftId'].template.placeholder_schema);
查看占位符值
// 在 React DevTools 中查找 ContractDraftPage 组件
// 查看 placeholderValues state
测试占位符提取逻辑
运行测试脚本:
node scripts/test-docx-parser.cjs
应该输出:
============================================================
测试从 DOCX 文件提取占位符功能
============================================================
✅ 文件存在
✅ 文件读取成功, 大小: 18.95 KB
✅ PizZip 解压成功
✅ document.xml 读取成功
✅ XML 内容长度: 33378
✅ 提取纯文本成功
文本长度: 5047
找到 18 个占位符:
1. {{地市名称}}
2. {{合同名称}}
...
切换到真实数据
当需要切换到真实数据库操作时,修改 contract-draft.$draftId.tsx:
- 取消注释第55-72行(获取草稿和模板)
- 删除第54-102行(临时测试代码)
- 从数据库中读取模板的
file_path - 使用真实的
file_path提取占位符
// 恢复真实数据库查询
const draft = await getDraftById(draftId, parseInt(userInfo.sub), jwt);
const { postgrestGet } = await import('~/api/postgrest-client');
const templateResult = await postgrestGet('contract_templates', {
select: '*',
filter: { id: `eq.${draft.template_id}` },
token: jwt
});
const template = templateResult.data[0];
// 使用模板的真实文件路径
const placeholders = await extractPlaceholdersFromDocx(template.file_path);
常见问题
Q1: 页面显示"草稿不存在"
原因:真实数据库查询被注释了,但错误处理没更新
解决:使用临时测试模式,任意ID都可以访问
Q2: 控制台报错"template is not defined"
原因:修改后的代码中 template 变量已定义,不应该出现此错误
解决:清除浏览器缓存,重新加载页面
Q3: "一键替换"点击无反应
原因:Collabora Online 尚未集成
解决:这是正常现象,查看控制台日志确认替换逻辑正常执行即可
Q4: 下载的文件没有替换内容
原因:当前导出的是原始模板,Collabora 修改保存功能待实现
解决:需要集成 Collabora Online 的保存功能
总结
✅ 已完成功能:
- 占位符自动提取
- 智能类型推断
- 表单动态渲染
- 文档导出
- 草稿自动清理
⏳ 待完成功能:
- Collabora Online 集成
- 文件内容替换保存
- MinIO 文件复制
- 真实数据库CRUD
🎯 下一步:
- 测试占位符提取功能
- 验证表单渲染正确性
- 集成 Collabora Online(参考
collabora-test项目) - 实现文件替换和保存功能