代办已办接口
查询已办列表接口
接口
HttpPost: api/FrontEnd/CartFinishWorkItems
按指定用户账号查询其已完成的工作流待办。结果按完成时间倒序返回,并包含表单跳转地址。路径大小写不敏感,cartFinishWorkItems 也可访问。
请求头
| 参数名 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
Authorization | string | 是 | 登录令牌,格式为 Bearer {token}。令牌可通过 /Permission/GetToken 获取。 |
TnCode | string | 是 | 租户编码。 |
UserId | string | 条件必填 | 数据令牌计算使用的用户标识。非本机或非 IP 白名单环境调用时必填。 |
Timestamp | string | 条件必填 | 非本机或非 IP 白名单环境调用时必填。推荐使用 13 位 Unix 毫秒时间戳,例如 1786550400123。 |
Datatoken | string | 条件必填 | 非本机或非 IP 白名单环境调用时必填;64 位小写十六进制 SM3 摘要,按请求体和 Timestamp 生成,且不可重复使用。 |
本机或 IP 白名单环境调用时,仍必须携带 Authorization,但不需要 Timestamp 和 Datatoken。
Datatoken 生成规则
对 POST 请求,服务端使用最终收到的原始请求体字符串签名。设 body 为最终发送的 UTF-8 JSON 字符串、userId 为请求头 UserId、timestamp 为请求头 Timestamp,则:
bodyHash = SM3(body)
Datatoken = SM3(timestamp + "zhouju@2025" + userId + bodyHash)
每个
Datatoken只能提交一次。
以下为使用 sm-crypto 生成并发送请求的 JavaScript 示例:
import { sm3 } from "sm-crypto";
const payload = {
UserCode: "administrator",
PagingInfo: { PageIndex: 1, PageSize: 20 }
};
const body = JSON.stringify(payload);
const userId = "18f923a7-5a5e-426d-94ae-a55ad1a4b239";
const timestamp = String(Date.now());
const bodyHash = sm3(body);
const datatoken = sm3(`${timestamp}zhouju@2025${userId}${bodyHash}`);
const response = await fetch("https://example.com/baseUrl/api/FrontEnd/CartFinishWorkItems", {
method: "POST",
headers: {
Authorization: "Bearer {token}",
TnCode: "00000000",
UserId: userId,
Timestamp: timestamp,
Datatoken: datatoken,
"Content-Type": "application/json"
},
body
});
请求参数
请求体类型为 PageParams。
| 参数名 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
UserCode | string | 是 | 要查询的用户账号编码。系统将其解析为用户 ObjectID;账号不存在时返回错误。 |
PagingInfo | object | 是 | 分页信息。当前实现会写入分页统计,不能省略。 |
PagingInfo.PageIndex | int | 是 | 页码,从 1 开始。 |
PagingInfo.PageSize | int | 是 | 每页数量,应大于 0。 |
BelongsApp | string | 否 | 限定所属应用编码。 |
SearchCondition | array | 否 | 筛选条件。仅处理 WorkFlowCode、SequenceNo、StartTime、EndTime。 |
SearchCondition 筛选字段
本接口按 Name 和 Value 取值,Operation、ComponentKey、QueryType 不参与筛选计算。
Name | Value 格式 | 说明 |
|---|---|---|
WorkFlowCode | code1,code2 | 流程/功能菜单编码,多个编码用英文逗号分隔。 |
SequenceNo | string | 流程流水号,按包含关系匹配。 |
StartTime | date-time string | 接收时间大于等于该时间。 |
EndTime | date-time string | 接收时间小于等于该时间。 |
请求示例
POST /baseUrl/api/FrontEnd/CartFinishWorkItems HTTP/1.1
Authorization: Bearer eyJhbGciOiJIUzUxMiJ9...
TnCode: 00000000
UserId: 18f923a7-5a5e-426d-94ae-a55ad1a4b239
Timestamp: 1786550400123
Datatoken: {按上方公式计算的 64 位 SM3 十六进制值}
Content-Type: application/json
{
"UserCode": "administrator",
"PagingInfo": {
"PageIndex": 1,
"PageSize": 20
},
"BelongsApp": "app_code",
"SearchCondition": [
{
"Name": "WorkFlowCode",
"Value": "purchase_apply,leave_apply"
},
{
"Name": "StartTime",
"Value": "2026-08-01 00:00:00"
},
{
"Name": "EndTime",
"Value": "2026-08-31 23:59:59"
}
]
}
返回结果
| 参数名 | 类型 | 说明 |
|---|---|---|
CartType | string | 固定为 havetodo,表示已办。 |
Datas | array | 已办工作项列表。 |
PagingInfo | object | 分页结果,包含 PageIndex、PageSize、PageCount、DataCount。 |
Datas 工作项字段
| 参数名 | 类型 | 说明 |
|---|---|---|
FlowItemId | string | 已办工作项 ID。 |
FlowId | string | 流程实例 ID。 |
DataId | string | 关联业务数据 ID。 |
WorkFlowCode | string | 流程/功能菜单编码。 |
Title | string | 表单标题。 |
Description | string | 表单描述。 |
SequenceNo | string | 流程流水号。 |
State | int | 关联业务数据的状态值。 |
Originator | string | 发起人 ID。 |
OriginatorName | string | 发起人名称。 |
OriginatorUnitName | string | 发起人上级组织名称。 |
ReceiveTime | string | 接收时间,格式为 yyyy-MM-dd HH:mm。 |
FinishTime | string | 完成时间,格式为 yyyy-MM-dd HH:mm。 |
OriginateTime | string | 流程发起时间,格式为 yyyy-MM-dd HH:mm。 |
Participants | array | 流程未结束时的当前处理人;流程已结束时可能为空。 |
AppIcon | string | 所属应用图标。 |
AppIconIsUploadIcon | boolean | 是否为上传的应用图标。 |
MessageTemplet | string | 消息模板。 |
MessageTempletValue | string | 使用业务数据解析后的消息内容。 |
FormLink | string | 当前用户访问表单编辑页的相对地址。 |
返回示例
{
"CartType": "havetodo",
"Datas": [
{
"FlowItemId": "c76f48a0-6b2c-4d4a-9a3b-1be8a9e321ab",
"FlowId": "a2d398d0-87aa-47ef-8f9e-5977954f30e5",
"DataId": "6b8c060b-73b4-49f8-af2a-3c536eb9a01d",
"WorkFlowCode": "purchase_apply",
"Title": "采购申请-笔记本电脑",
"SequenceNo": "CGSQ-202608-0001",
"State": 4,
"Originator": "18f923a7-5a5e-426d-94ae-a55ad1a4b239",
"OriginatorName": "张三",
"OriginatorUnitName": "采购部",
"ReceiveTime": "2026-08-06 09:30",
"FinishTime": "2026-08-07 14:20",
"OriginateTime": "2026-08-06 09:15",
"AppIcon": "shopping-cart",
"AppIconIsUploadIcon": false,
"FormLink": "/dataform?authcode=...&formCode=purchase_apply&dataId=6b8c060b-73b4-49f8-af2a-3c536eb9a01d&formViewType=edit"
}
],
"PagingInfo": {
"PageIndex": 1,
"PageSize": 20,
"PageCount": 1,
"DataCount": 1
}
}
调用说明
- 接口只查询
UserCode对应用户的已办记录,不以登录用户自动替换该参数。 - 查询结果固定按
FinishTime降序排列,SortName和SortType不生效。 FormLink含有当前用户的临时访问参数,应仅在可信客户端使用,不应写入日志或公开传播。- 租户和令牌必须有效;令牌缺失或失效时服务端返回 HTTP 401。当前实现不校验
UserCode是否与令牌用户一致,调用方应在接入层控制其数据访问范围
已阅列表查询接口
查询用户下所有已阅数据明细
支持版本:V3+;
接口
HttpPost:api/FrontEnd/cartFinishCirculateItems
请求实体

请求示例:
{
"PagingInfo": {
"PageIndex": 1,
"PageSize": 5
},
"SearchCondition": [{
"Name": "WorkFlowCode",
"Value": ""
}, {
"Name": "SequenceNo",
"Value": ""
}, {
"Name": "StartTime",
"Value": ""
}, {
"Name": "EndTime",
"Value": ""
}],
"UserCode":"Administrator"
}
返回结果

待阅列表查询接口
查询用户下所有待阅数据明细
支持版本:V3+;
接口
HttpPost:api/FrontEnd/cartUnFinishCirculateItems
请求实体

请求示例:
{
"PagingInfo": {
"PageIndex": 1,
"PageSize": 5
},
"SearchCondition": [{
"Name": "WorkFlowCode",
"Value": ""
}, {
"Name": "SequenceNo",
"Value": ""
}, {
"Name": "StartTime",
"Value": ""
}, {
"Name": "EndTime",
"Value": ""
}],
"UserCode":"Administrator"
}
返回结果

待办总数查询接口
查询用户下所有待办总数
支持版本:V3+;
接口
HttpGet:api/FrontEnd/getWorkCount/{userCode}
请求实体

请求示例:
api/FrontEnd/getWorkCount/administrator
返回结果
