📋 订单签名功能
创建日期: 2026-05-07
状态: 待开发
一、涉及终端
- [ ] App端(Android)
- [ ] PC端(后台)
- [ ] H5 端(分享签署页)
二、功能属性
- 插件模式: 否 — 系统内置功能
- 权限控制: PC端后台控制(基本设置 → 订单签名设置)
- 与现有系统关系: 功能新增(赊销订单扩展)
三、部署规划
| 项目 | 目标位置 |
|---|---|
| 后台服务器 | 腾讯云重庆一区爱优零售 |
| 数据库 | CynosDB 读写库(ls_hnjiuheng_cn) |
| 静态资源/CDN | 签名图片存储至 OSS/CDN |
四、人员分工
| 负责人 | 职责 |
|---|---|
| 徐滔(后端) | 数据库表设计、API接口开发、签名图片存储 |
| 张玉杰(PC前端) | 后台设置页、开单挂单页、店内明细列表 |
| 刘文伟(安卓前端) | App内展示、签署流程 |
| 测试 | 功能验收测试 |
五、功能模块清单
| 模块 | 功能描述 | 涉及端 | 负责人 | 优先级 |
|---|---|---|---|---|
| 1. 后台设置 | 基本设置 → 订单签名设置:开关 + 赊销订单勾选项 | PC端 | 张玉杰 | P0 |
| 2. 签署入口-挂单 | 开单挂单页:赊销订单出现签署/已签名入口 | PC端 | 张玉杰 | P0 |
| 3. 签署入口-提交 | 提交订单/订单并打印弹窗:显示分享签署按钮 | PC端 | 张玉杰 | P0 |
| 4. 店内明细列表 | 赊销订单列表:显示分享签署/已签名状态 | PC端 | 张玉杰 | P0 |
| 5. 分享签署页H5 | 二维码+链接+订单信息+签名按钮+重置按钮 | H5 | 刘文伟 | P0 |
| 6. 已签名展示 | 签名图片 + 签名时间 + 重置按钮 | PC端+App | 张玉杰/刘文伟 | P0 |
| 7. App端展示 | 赊销订单已签名状态展示 | App端 | 刘文伟 | P1 |
六、业务逻辑说明
6.1 赊销订单判断逻辑
支付方式 = "赊销" 时,该订单为赊销订单
- 当
order.payment_method = 'credit'或payment_type包含赊销标识时,触发签名流程 - 必须先在「基本设置 → 订单签名设置」中勾选「赊销订单」才生效
6.2 订单签名设置
| 配置项 | 类型 | 说明 |
|---|---|---|
| 开启订单签名 | 开关 | 全局开关,默认关闭 |
| 赊销订单 | 勾选 | 勾选后,赊销订单触发签名流程 |
6.3 签署流程
赊销订单创建
↓
订单签名设置已开启?
├── 否 → 正常流程,不触发签名
└── 是 → 订单标记为「待签名」
↓
客户点击「分享签署」
↓
生成签署链接 + 二维码(H5页面)
↓
客户在H5签署
↓
签名图片 + 签署时间 入库
↓
订单状态更新为「已签名」
6.4 各入口显示逻辑
| 场景 | 条件 | 显示 |
|---|---|---|
| 开单挂单页 | 赊销 + 未签名 + 功能开启 | 显示「分享签署」按钮 |
| 开单挂单页 | 赊销 + 已签名 + 功能开启 | 显示「已签名」+ 点击查看图片+时间 |
| 提交/并打印弹窗 | 赊销 + 未签名 + 功能开启 | 显示「分享签署」按钮 |
| 店内明细列表 | 赊销 + 未签名 + 功能开启 | 显示「分享签署」按钮 |
| 店内明细列表 | 赊销 + 已签名 | 显示「已签名」标签 |
| App订单详情 | 赊销 + 已签名 | 显示签名图片+时间 |
6.5 分享签署页内容
┌─────────────────────────────┐
│ 订单信息 │
│ 订单号:XXX │
│ 客户名:张三 │
│ 商品:螺丝刀 x2 │
│ 金额:¥99.00 │
│ 日期:2026-05-07 │
├─────────────────────────────┤
│ │
│ [ 签名区域 ] │
│ 客户在此签字 │
│ │
│ 签名后自动提交 │
├─────────────────────────────┤
│ [ 重置 ] 按钮 │
└─────────────────────────────┘
七、H5签署页设计要求
-
订单信息展示区(签署页上半部分)
-
订单编号、客户名称、商品明细、应付金额、下单日期
-
只读,不可修改
-
签名区(签署页下半部分)
-
手写签名区域(Canvas 或签名板组件)
-
签名后显示签名图片预览
-
操作按钮
-
确认签署:提交签名图片到服务器
-
重置:清除当前签名,重新签署
-
二维码
-
页面顶部或显著位置显示二维码
-
扫码可快速打开H5签署页
-
链接复制
-
提供签署链接的一键复制功能
八、数据库设计
徐滔负责,需新增表或字段
8.1 订单签名表(新建)
CREATE TABLE order_signatures (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
order_id BIGINT NOT NULL COMMENT '订单ID',
signature_url VARCHAR(500) NOT NULL COMMENT '签名图片OSS地址',
sign_time DATETIME NOT NULL COMMENT '签署时间',
customer_name VARCHAR(100) COMMENT '签署客户名称',
ip_address VARCHAR(50) COMMENT '签署IP地址',
status TINYINT DEFAULT 1 COMMENT '状态:1已签署 0已重置',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
INDEX idx_order_id (order_id),
INDEX idx_sign_time (sign_time)
) COMMENT '订单签名表';
8.2 订单表新增字段
ALTER TABLE orders ADD COLUMN need_sign TINYINT DEFAULT 0 COMMENT '是否需要签名:0否 1是';
ALTER TABLE orders ADD COLUMN sign_status TINYINT DEFAULT 0 COMMENT '签名状态:0未签名 1已签名';
ALTER TABLE orders ADD COLUMN sign_id BIGINT COMMENT '签名记录ID,关联order_signatures.id';
8.3 系统配置表新增配置项
INSERT INTO system_config (key, value, type, description) VALUES
('order_sign_enable', 'false', 'boolean', '订单签名功能总开关'),
('order_sign_credit_only', 'false', 'boolean', '仅赊销订单需签名');
九、API接口设计
9.1 获取签署状态
GET /api/order/{orderId}/signature
Response: {
"needSign": true,
"signStatus": "unsigned|pending|signed",
"signatureUrl": "https://xxx/sig.png",
"signTime": "2026-05-07 15:30:00"
}
9.2 生成签署链接
POST /api/order/{orderId}/signature/link
Response: {
"shareUrl": "https://h5.5jin.top/sign/{token}",
"qrCode": "https://qr.5jin.top?url=..."
}
9.3 提交签名
POST /api/order/{orderId}/signature
Body: {
"signatureData": "data:image/png;base64,..." // 或直接传OSS上传后的URL
}
Response: {
"success": true,
"signTime": "2026-05-07 15:35:00"
}
9.4 重置签名
POST /api/order/{orderId}/signature/reset
Response: {
"success": true
}
9.5 获取系统配置
GET /api/config/order-sign
Response: {
"enable": true,
"creditOnly": true
}
9.6 保存系统配置
POST /api/config/order-sign
Body: {
"enable": true,
"creditOnly": true
}
十、PC端页面详细说明
10.1 基本设置 → 订单签名设置
┌──────────────────────────────────────┐
│ 订单签名设置 │
├──────────────────────────────────────┤
│ ○ 开启订单签名设置 │
│ □ 赊销订单(勾选后赊销订单需签名) │
│ │
│ [ 保存 ] │
└──────────────────────────────────────┘
10.2 开单挂单页
- 赊销订单卡片/列表项显示「分享签署」按钮
- 已签名订单显示「已签名」标签,点击弹出:
- 签名图片
- 签署时间
- 「重置」按钮
10.3 提交/并打印弹窗
- 弹窗底部新增「分享签署」按钮(赊销订单且未签名时显示)
10.4 店内明细列表
- 赊销订单行显示签署状态
- 未签名:显示「分享签署」按钮
- 已签名:显示「已签名」标签(可点击查看详情)
十一、App端说明
| 页面 | 展示内容 |
|---|---|
| 订单详情 | 赊销订单显示签名图片缩略图 + 签署时间,点击可放大 |
| 订单列表 | 已签名订单显示「已签名」标签 |
十二、优先级说明
- P0:核心功能,必须优先完成
- 后台设置 + 数据库 + 签署入口 + H5签署页 + 提交/重置API
- P1:重要功能,核心完成后推进
- App端展示
十三、备注
- 签名图片建议上传至 OSS,数据库只存储 URL
- 签署链接建议有时效性(如 7 天有效)
- 签署页需在微信内置浏览器和普通浏览器均可正常签署
- 重置签名后,订单恢复「待签名」状态,客户需重新签署
- 订单流转到正式订单时,应校验签名状态(已签名才能流转,或允许特殊配置跳过)