跳到主要内容

获取表结构

接口

HttpGet: api/FrontEnd/GetTableStructure/{menuCode}

根据菜单编码返回表单字段结构。返回值为 JSON 对象,键是字段编码,值是字段显示名称;字段未设置显示名称时,值回退为字段编码。

传入 subTableCode 时,返回该主表下指定子表的字段结构。接口会校验子表归属关系,不能通过子表编码读取其他主表的结构。

请求参数

Path 参数

参数名类型是否必填说明
menuCodestring主表所在菜单(表单)编码。

Query 参数

参数名类型是否必填说明
subTableCodestring子表编码。省略时返回主表结构;传入时必须属于 menuCode

请求头

参数名类型是否必填说明
Authorizationstring登录令牌,格式为 Bearer {token}。接口未配置免登录。
TnCodestring租户编码。
UserIdstring条件必填数据令牌签名使用的用户标识;非本机、非 IP 白名单调用时必填。
Timestampstring条件必填非本机、非 IP 白名单调用时必填。使用 13 位 Unix 毫秒时间戳,例如 1786550400123
Datatokenstring条件必填非本机、非 IP 白名单调用时必填。为 64 位小写十六进制 SM3 摘要,且同一值不能重复使用。

本机或 IP 白名单环境仍必须携带 Authorization,但不校验 TimestampDatatoken

Datatoken 生成规则

GET 请求按最终发送的路径和查询串签名,不包含协议、主机和端口。设:

  • pathAndQuery:最终请求的路径与查询串,例如 /api/FrontEnd/GetTableStructure/purchase_apply?subTableCode=purchase_detail
  • userId:请求头 UserId
  • timestamp:请求头 Timestamp
urlHash   = SM3(pathAndQuery)
Datatoken = SM3(timestamp + "zhouju@2025" + userId + urlHash)

lcp@2025 是服务端兼容的备用密钥;调用端应优先使用 zhouju@2025。签名完成后不得修改菜单编码、查询参数、参数顺序或 URL 编码,否则校验失败。每个 Datatoken 只能使用一次。

以下示例使用 sm-crypto 生成签名并请求子表结构:

import { sm3 } from "sm-crypto";

const menuCode = "purchase_apply";
const subTableCode = "purchase_detail";
const userId = "18f923a7-5a5e-426d-94ae-a55ad1a4b239";
const timestamp = String(Date.now());
const pathAndQuery = "/api/FrontEnd/GetTableStructure/"
+ encodeURIComponent(menuCode)
+ "?subTableCode=" + encodeURIComponent(subTableCode);
const datatoken = sm3(`${timestamp}zhouju@2025${userId}${sm3(pathAndQuery)}`);

const response = await fetch(`https://example.com${pathAndQuery}`, {
headers: {
Authorization: "Bearer {token}",
TnCode: "00000000",
UserId: userId,
Timestamp: timestamp,
Datatoken: datatoken
}
});

const fields = await response.json();

请求示例

获取主表结构

GET /api/FrontEnd/GetTableStructure/purchase_apply HTTP/1.1
Authorization: Bearer eyJhbGciOiJIUzUxMiJ9...
TnCode: 00000000
UserId: 18f923a7-5a5e-426d-94ae-a55ad1a4b239
Timestamp: 1786550400123
Datatoken: {按上方公式计算的 64 位 SM3 十六进制值}

获取指定子表结构

GET /api/FrontEnd/GetTableStructure/purchase_apply?subTableCode=purchase_detail HTTP/1.1
Authorization: Bearer eyJhbGciOiJIUzUxMiJ9...
TnCode: 00000000
UserId: 18f923a7-5a5e-426d-94ae-a55ad1a4b239
Timestamp: 1786550400123
Datatoken: {按上方公式计算的 64 位 SM3 十六进制值}

返回结果

成功时直接返回字段映射对象:

{
"ObjectID": "数据ID",
"Title": "采购主题",
"Applicant": "申请人",
"CreatedTime": "创建时间"
}
返回键返回值说明
字段编码字段显示名称每个键值对对应表单数据模型中的一个字段。

错误说明

场景返回信息
menuCode 为空菜单编码为空
子表不属于主表子表[{subTableCode}]不属于菜单[{menuCode}]
表单或数据模型不存在表单数据模型不存在
缺少登录令牌HTTP 401,登录令牌不能为空
数据令牌缺失或签名不正确HTTP 401,数据令牌不能为空URL校验失败,请勿随意调用接口