电子签名
This commit is contained in:
215
docs/electronic_signature_api.md
Normal file
215
docs/electronic_signature_api.md
Normal file
@@ -0,0 +1,215 @@
|
||||
# 电子签名后端对接说明
|
||||
|
||||
## 目标
|
||||
|
||||
支持前端在“点击使用电子签名”时,自动获取当前登录人员已配置的电子签名并回填。
|
||||
|
||||
当当前人员未配置电子签名时,后端返回提示:
|
||||
|
||||
`暂未设置电子签名,请在个人资料内设置后重试或使用手动签名`
|
||||
|
||||
## 数据设计
|
||||
|
||||
### 表名
|
||||
|
||||
`sys_user_electronic_signature`
|
||||
|
||||
### 核心设计说明
|
||||
|
||||
- 一条记录对应“当前登录人员”的一份电子签名配置
|
||||
- 人员唯一性通过 `tenant_id + person_key` 控制
|
||||
- `person_key` 生成规则:`loginPort:companyId:businessUserId`
|
||||
- 当 `businessUserId` 为空时,回退为 `loginPort:companyId:userId`
|
||||
- 签名文件本体继续复用现有 OSS 表,不重复存文件内容,只存 `sign_oss_id`
|
||||
- 支持“清空签名”:保留记录,将 `status` 置为 `0`,并清空 `sign_oss_id`
|
||||
|
||||
### 主要字段
|
||||
|
||||
- `person_key`:当前登录人员唯一键
|
||||
- `user_id`:系统用户 ID
|
||||
- `business_user_id`:业务人员 ID,例如驾驶员/安全员 ID
|
||||
- `company_id`:当前企业 ID
|
||||
- `login_port`:当前登录端口
|
||||
- `sign_oss_id`:电子签名图片 OSS ID
|
||||
- `sign_name`:签署人名称快照
|
||||
- `status`:`1=已设置`,`0=未设置`
|
||||
|
||||
建表脚本见:
|
||||
|
||||
- `sql/1289/3_user_electronic_signature.sql`
|
||||
|
||||
## 接口列表
|
||||
|
||||
统一前缀:
|
||||
|
||||
- `/system/user/profile`
|
||||
|
||||
### 1. 查询当前登录人员电子签名信息
|
||||
|
||||
- 方法:`GET`
|
||||
- 路径:`/system/user/profile/electronic-signature/info`
|
||||
- 用途:个人资料页进入时查询当前签名配置状态
|
||||
- 特点:即使未配置,也返回成功,前端通过 `data.configured` 判断
|
||||
|
||||
响应示例:
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "操作成功",
|
||||
"data": {
|
||||
"id": 1,
|
||||
"configured": true,
|
||||
"personKey": "port-driver:1001:DRV0001",
|
||||
"userId": 20001,
|
||||
"businessUserId": "DRV0001",
|
||||
"companyId": 1001,
|
||||
"loginPort": "port-driver",
|
||||
"signOssId": 98765,
|
||||
"signUrl": "https://xxx/signature.png",
|
||||
"signName": "张三",
|
||||
"status": "1"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
未配置时示例:
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "操作成功",
|
||||
"data": {
|
||||
"configured": false,
|
||||
"personKey": "port-driver:1001:DRV0001",
|
||||
"userId": 20001,
|
||||
"businessUserId": "DRV0001",
|
||||
"companyId": 1001,
|
||||
"loginPort": "port-driver",
|
||||
"signOssId": null,
|
||||
"signUrl": null,
|
||||
"signName": "张三",
|
||||
"status": "0"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 2. 业务页获取当前电子签名并回填
|
||||
|
||||
- 方法:`GET`
|
||||
- 路径:`/system/user/profile/electronic-signature/current`
|
||||
- 用途:点击“使用电子签名”时直接调用
|
||||
- 特点:已配置时返回签名信息;未配置时直接返回失败提示,前端弹出 `msg` 即可
|
||||
|
||||
已配置响应示例:
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "操作成功",
|
||||
"data": {
|
||||
"configured": true,
|
||||
"signOssId": 98765,
|
||||
"signUrl": "https://xxx/signature.png",
|
||||
"signName": "张三"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
未配置响应示例:
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 500,
|
||||
"msg": "暂未设置电子签名,请在个人资料内设置后重试或使用手动签名",
|
||||
"data": null
|
||||
}
|
||||
```
|
||||
|
||||
前端建议处理:
|
||||
|
||||
- 当接口成功时,将 `data.signUrl` 回填到下方签名展示区域
|
||||
- 同时保留 `data.signOssId`,提交业务表单时直接透传
|
||||
- 当接口失败时,直接提示后端返回的 `msg`
|
||||
|
||||
### 3. 保存当前登录人员电子签名
|
||||
|
||||
- 方法:`PUT`
|
||||
- 路径:`/system/user/profile/electronic-signature`
|
||||
- 用途:个人资料页设置或更换电子签名
|
||||
|
||||
请求参数:
|
||||
|
||||
```json
|
||||
{
|
||||
"signOssId": 98765
|
||||
}
|
||||
```
|
||||
|
||||
说明:
|
||||
|
||||
- `signOssId` 必填
|
||||
- 文件需要先通过现有 OSS 上传接口上传成功
|
||||
- 后端会校验该文件是否存在,且是否为图片格式
|
||||
|
||||
成功响应示例:
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "操作成功",
|
||||
"data": {
|
||||
"configured": true,
|
||||
"signOssId": 98765,
|
||||
"signUrl": "https://xxx/signature.png",
|
||||
"signName": "张三",
|
||||
"status": "1"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 4. 清空当前登录人员电子签名
|
||||
|
||||
- 方法:`DELETE`
|
||||
- 路径:`/system/user/profile/electronic-signature`
|
||||
- 用途:个人资料页删除当前电子签名配置
|
||||
|
||||
成功响应示例:
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "操作成功",
|
||||
"data": null
|
||||
}
|
||||
```
|
||||
|
||||
## 与前端交互建议
|
||||
|
||||
### 个人资料页
|
||||
|
||||
1. 页面加载时调用 `GET /electronic-signature/info`
|
||||
2. 若 `configured = true`,展示当前签名图片
|
||||
3. 用户更换签名时,先调用现有 OSS 上传接口,再把返回的 `ossId` 提交到保存接口
|
||||
4. 用户删除签名时,调用清空接口
|
||||
|
||||
### 业务签署页
|
||||
|
||||
1. 点击“使用电子签名”
|
||||
2. 调用 `GET /electronic-signature/current`
|
||||
3. 若成功:
|
||||
- 回填 `signUrl`
|
||||
- 保存 `signOssId`
|
||||
4. 若失败:
|
||||
- 直接提示 `msg`
|
||||
- 保留“手动签名”入口
|
||||
|
||||
## 依赖的现有上传接口
|
||||
|
||||
上传签名图片时继续复用现有 OSS 上传能力:
|
||||
|
||||
- 方法:`POST`
|
||||
- 路径:`/resource/oss/upload`
|
||||
- 表单字段:`file`
|
||||
|
||||
返回示例中的 `data.ossId` 即为后续保存电子签名所需的 `signOssId`。
|
||||
Reference in New Issue
Block a user