# 合同起草功能使用指南 ## 功能概述 合同起草功能允许用户基于预定义的合同模板,通过填写占位符快速生成新的合同文档。 --- ## 核心功能 ✅ **已实现功能**: 1. **创建草稿**:从合同模板创建新的草稿 2. **占位符填写**:通过表单填写合同信息 3. **一键替换**:批量替换文档中的占位符 4. **实时预览**:在线编辑和预览文档 5. **保存草稿**:随时保存当前填写状态 6. **完成起草**:标记草稿为已完成 --- ## 使用流程 ### 1. 浏览合同模板 访问合同模板列表页:`/contract-template` ### 2. 选择模板并起草 1. 点击模板进入详情页 2. 点击"起草合同"按钮 3. 输入合同标题(系统会生成默认标题) 4. 点击确定创建草稿 ### 3. 填写合同信息 进入起草页面后: - **左侧**:文档预览区(60%)- 实时显示文档内容 - **右侧**:占位符表单(40%)- 分组显示需要填写的字段 填写步骤: 1. 按分组填写字段(甲方信息、乙方信息、合同条款等) 2. 必填字段标注红色星号(*) 3. 支持的字段类型: - 文本(text) - 数字(number) - 日期(date) - 电话(tel) - 多行文本(textarea) ### 4. 一键替换占位符 点击"一键替换占位符"按钮: - 系统会将表单中的值批量替换到文档中 - 显示替换进度和结果 - 替换完成后自动保存 ### 5. 手动编辑(可选) 替换后可以继续手动编辑文档: - 使用 Collabora Online 编辑器 - 支持所有 Word 文档编辑功能 - 缩放:Ctrl + 鼠标滚轮 ### 6. 保存草稿 随时点击"保存草稿"按钮保存当前状态 ### 7. 完成起草 确认无误后点击"完成起草"按钮: - 系统会检查必填字段是否都已填写 - 完成后草稿状态变更为"已完成" - 自动跳转回模板列表页 --- ## 占位符规范 ### 占位符格式 在模板文档中使用双花括号标记占位符: ``` {{占位符名称}} ``` 示例: ``` 甲方(以下简称甲方):{{甲方名称}} 地址:{{甲方地址}} 法定代表人:{{甲方法定代表人}} 联系电话:{{甲方联系电话}} 乙方(以下简称乙方):{{乙方名称}} 地址:{{乙方地址}} 法定代表人:{{乙方法定代表人}} 联系电话:{{乙方联系电话}} 合同金额:{{合同金额}}元 签订日期:{{签订日期}} ``` ### 常用占位符 **基本信息**: - `{{合同编号}}` - `{{合同标题}}` **甲方信息**: - `{{甲方名称}}` - `{{甲方地址}}` - `{{甲方法定代表人}}` - `{{甲方联系电话}}` **乙方信息**: - `{{乙方名称}}` - `{{乙方地址}}` - `{{乙方法定代表人}}` - `{{乙方联系电话}}` **合同条款**: - `{{合同金额}}` - `{{签订日期}}` - `{{履行期限}}` - `{{付款方式}}` --- ## 模板管理员指南 ### 配置模板占位符 管理员需要为每个模板配置 `placeholder_schema` 字段,定义占位符表单结构。 #### 配置示例 ```sql UPDATE contract_templates SET placeholder_schema = '{ "fields": [ { "key": "甲方名称", "label": "甲方名称", "type": "text", "required": true, "group": "甲方信息", "placeholder": "请输入甲方名称" }, { "key": "合同金额", "label": "合同金额(元)", "type": "number", "required": true, "group": "合同条款", "placeholder": "请输入金额" }, { "key": "签订日期", "label": "签订日期", "type": "date", "required": true, "group": "合同条款" } ] }'::jsonb WHERE id = 1; ``` #### 字段配置说明 - **key**: 占位符键名(必须与文档中的占位符一致,不含花括号) - **label**: 表单显示标签 - **type**: 字段类型(text, number, date, tel, email, textarea) - **required**: 是否必填(true/false) - **group**: 分组名称(用于表单分组显示) - **placeholder**: 输入提示(可选) - **defaultValue**: 默认值(可选) ### 制作模板文档 1. 使用 Word 创建合同模板 2. 在需要填写的位置插入占位符:`{{占位符名称}}` 3. 保存为 .docx 格式 4. 上传到系统 5. 配置 `placeholder_schema` ### 占位符命名规范 - 使用中文名称,直观易懂 - 避免特殊字符 - 保持命名简洁 - 同一信息使用统一命名 --- ## 技术说明 ### 数据库表结构 #### drafted_contracts(起草合同表) | 字段 | 类型 | 说明 | |------|------|------| | id | SERIAL | 主键ID | | template_id | INTEGER | 关联的模板ID | | file_path | TEXT | 起草后的文件路径 | | title | TEXT | 合同标题 | | placeholder_values | JSONB | 占位符填充值 | | status | TEXT | 状态(draft/completed/archived) | | created_by | INTEGER | 创建人ID | | created_at | TIMESTAMPTZ | 创建时间 | | updated_at | TIMESTAMPTZ | 更新时间 | #### contract_templates 扩展字段 | 字段 | 类型 | 说明 | |------|------|------| | placeholder_schema | JSONB | 占位符配置Schema | ### API 接口 #### 1. 创建草稿 ``` POST /api/contracts/draft ``` **请求**: ```json { "templateId": 123, "title": "采购合同-20250104" } ``` **响应**: ```json { "id": 456, "filePath": "drafts/contract_123_1_1704355200000.docx", "title": "采购合同-20250104", "templateId": 123 } ``` #### 2. 保存占位符值 ``` PUT /api/contracts/draft/:id/placeholders ``` **请求**: ```json { "placeholders": { "甲方名称": "广东省烟草专卖局", "合同金额": "500000" } } ``` **响应**: ```json { "success": true } ``` #### 3. 完成起草 ``` POST /api/contracts/draft/:id/complete ``` **响应**: ```json { "success": true } ``` --- ## 常见问题 ### Q: 占位符没有被替换? **A**: 可能的原因: 1. 占位符格式不正确(必须是 `{{名称}}`) 2. placeholder_schema 中的 key 与文档中的占位符不一致 3. 字段值为空(只替换有值的字段) ### Q: 如何检查模板中有哪些占位符? **A**: 1. 在 Word 中打开模板文档 2. 使用查找功能(Ctrl+F)搜索 `{{` 3. 记录所有占位符名称 ### Q: 可以自定义占位符分组吗? **A**: 可以。在 placeholder_schema 中通过 `group` 字段自定义分组名称。 ### Q: 替换后还能继续编辑吗? **A**: 可以。替换只是批量修改文档内容,之后仍可使用 Collabora 编辑器手动编辑。 ### Q: 草稿保存在哪里? **A**: 草稿文件保存在 MinIO 的 `drafts/` 目录下,数据库记录保存在 `drafted_contracts` 表中。 --- ## 后续规划 🔲 **待实现功能**: 1. 草稿列表页面 2. 草稿历史版本 3. 草稿搜索和筛选 4. 批量起草 5. 模板变量智能推荐 6. 导出为 PDF 7. 审批流程集成 8. 电子签名集成 --- ## 支持与反馈 如有问题或建议,请联系技术支持团队。