规范化后的skill

This commit is contained in:
2026-06-01 14:37:23 +08:00
parent 3d8df9b51f
commit 8dc6e5ab06
14 changed files with 1107 additions and 1139 deletions
+112 -194
View File
@@ -1,257 +1,175 @@
# E10 内部 API 参考
# E10 Internal Read-Only APIs
这些是 E10 管理后台前端调用的内部 REST API(非 OpenAPI),在浏览器已登录的情况下可直接用 `fetch()` 调用,session cookie 自动携带。适合替代复杂的 UI 点击操作获取数据。
These APIs are E10 management UI backend APIs, not external OpenAPI endpoints. Use them only inside an authenticated browser session to read metadata needed for documentation. Do not expose these paths, request bodies, response fields, database table names, or internal IDs in the final external-facing documentation.
> **适用场景**:登录后(Phase 1),所有流程发现、表单查询、字段提取均可通过这些 API 完成,无需逐层点击 UI。
## Use cases
---
Use these APIs after login to avoid fragile UI navigation when discovering workflow fields:
## 1. 获取所有工作流列表
1. Get workflow list and target `workflowId`.
2. Search form list and target `formId`.
3. Read form metadata and detect detail tables.
4. Read main-table and detail-table field definitions.
**用途**:按分类树形列出所有工作流,找到目标流程的 `workflowId`(也叫 pathSetId)。
All examples use `fetch()` inside the browser session, so the authenticated session cookie is included automatically.
```
## 1. Get workflow list
Endpoint:
```text
POST /api/bs/workflow/pathdef/baseSet/getBaseInfoListTree
```
**请求体**
Request body:
```json
{
"searchParams": {
"otherSearchDatas": {
"workflowType": "",
"workflowId": "",
"subCompanyId": ""
}
},
"isTemplate": 0,
"belongType": 1
}
```
**响应结构**
```json
{
"code": 200,
"data": {
"total": 42,
"dataGroupTitle": [
{"typeName": "行政类", "count": 9, "id": "1184726218683441153"}
],
"datas": [
{
"typeName": "行政类",
"children": [
{
"id": "1185512781721886720",
"title": "06.用车审批流程",
"defaultWorkflowName": "06.用车审批流程",
"status": "1"
}
]
}
]
"searchParams": {
"otherSearchDatas": {
"workflowType": "",
"workflowId": "",
"subCompanyId": ""
}
},
"isTemplate": 0,
"belongType": 1
}
```
**关键字段**
- `datas[].children[].id` — workflowIdpathSetId),用于后续查询
- `datas[].children[].title` — 流程名称
- `datas[].typeName` — 流程分类(人事类/行政类/财务类/业务类)
Important response fields:
---
- `data.datas[].typeName`: workflow category.
- `data.datas[].children[].id`: workflowId/pathSetId.
- `data.datas[].children[].title`: workflow display name.
## 2. 搜索表单(按名称)
**用途**:根据表单名称搜索,获取 `formId`。名称支持模糊匹配。
Browser snippet:
```python
import json
result = json.loads(js('''
(async () => {
let resp = await fetch("/api/bs/workflow/pathdef/baseSet/getBaseInfoListTree", {
method: "POST",
headers: {"Content-Type": "application/json"},
body: JSON.stringify({
searchParams: { otherSearchDatas: { workflowType: "", workflowId: "", subCompanyId: "" } },
isTemplate: 0,
belongType: 1
})
});
return JSON.stringify(await resp.json());
})();
'''))
```
## 2. Search forms
Endpoint:
```text
POST /api/workflow/core/form/formmanage/getFormList
```
**请求体**
Request body:
```json
{
"module": "workflow",
"pageNo": 1,
"pageSize": 50,
"name": "用车"
"module": "workflow",
"pageNo": 1,
"pageSize": 50,
"name": "<CORE_WORKFLOW_KEYWORD>"
}
```
**响应结构**
Important response fields:
```json
{
"code": 200,
"data": {
"pageDatas": {
"result": [
{
"id": "1185512764483297325",
"name": "用车审批流程"
}
]
}
}
}
```
- `data.pageDatas.result[].id`: formId.
- `data.pageDatas.result[].name`: form name.
**关键字段**
- `data.pageDatas.result[].id` — formId
- `data.pageDatas.result[].name` — 表单名称
Workflow names may include numbering or prefixes, while form names often do not. Search by core business keyword rather than exact full workflow title.
> **注意**:流程名称(如"06.用车审批流程")与表单名称(如"用车审批流程")可能不同(有无编号前缀)。搜索时去掉编号前缀。
## 3. Get form metadata
---
Endpoint:
## 3. 获取表单详情
**用途**:获取表单的元数据(表名、类型、基础设置)。
```
```text
POST /api/workflow/core/form/formmanage/getForm
```
**请求体**
Request body:
```json
{
"module": "workflow",
"form": {
"id": "1185512764483297325"
}
"module": "workflow",
"form": {
"id": "<FORM_ID>"
}
}
```
**响应结构**
Important response fields:
```json
{
"code": 200,
"data": {
"id": "1185512764483297325",
"tableName": "ft_ycsplc",
"name": "用车审批流程",
"tableType": "MAIN",
"systemTable": false,
"editTable": true
}
}
```
- `data.name`: form name.
- `data.tableType`: form table type.
- `data.detailTable`: detail table metadata when available.
- `data.tableName`: internal database table name. Use only for internal reasoning and never include it in final external documentation.
**关键字段**
- `data.tableName` — 数据库表名
- `data.tableType` — MAIN(主表)或 DETAIL(明细表)
- `data.name` — 表单名称
## 4. Get field definitions
---
Endpoint:
## 4. 获取表单字段列表(分页)
**用途**:获取主表或明细表的所有字段定义(含 fieldId、dataKey、类型、分组)。
```
```text
POST /api/workflow/core/form/field/manage/getFormFieldPage
```
**请求体(主表字段)**
Request body:
```json
{
"pageNo": 1,
"pageSize": 20,
"module": "workflow",
"formFieldSearchEntity": {
"isDelete": 0,
"status": "enable",
"formId": "1185512764483297325",
"formTableId": "1185512764483297435"
}
"pageNo": 1,
"pageSize": 100,
"module": "workflow",
"formFieldSearchEntity": {
"isDelete": 0,
"status": "enable",
"formId": "<FORM_ID>"
}
}
```
**请求体(明细表字段)**:同上,`formTableId` 替换为明细表的 table ID。
If needed, add `formTableId` to target a specific main or detail table. If passing `formTableId` returns zero records for the main table, retry without `formTableId`.
**响应结构**
Important response fields:
```json
{
"code": 200,
"data": {
"pageDatas": {
"pageNo": 1,
"pageSize": 20,
"result": [
{
"title": "申请人",
"dataKey": "sqr",
"type": "Employee",
"fieldId": "1185512764483297398",
"showOrder": 0,
"groupName": "基础信息",
"columnName": "sqr",
"formTableId": "1185512764483297435",
"formId": "1185512764483297325"
}
]
}
}
}
```
- `title`: business field display name.
- `dataKey`: request payload field key.
- `fieldId`: internal field ID. Usually not exposed unless the OpenAPI payload explicitly requires it.
- `type`: E10 component/API field type.
- `showOrder`: display order.
- `groupName`: internal UI group. Use only to infer business grouping; do not copy it blindly.
- `columnName`: internal database column. Never include in external documentation.
- `formTableId`: table ID, useful for follow-up field queries.
**关键字段**
- `title` — 字段显示名称
- `dataKey` — 字段编码(API 传参用)
- `fieldId` — 字段 ID(API 传参用,纯数字)
- `type` — 字段类型(Employee/Date/Text/TextArea/Department/SubCompany/File/EBuilder/Flow/Document
- `showOrder` — 显示顺序
- `groupName` — 所属分组
- `columnName` — 数据库列名
## Type mapping for external documentation
**常见字段类型映射**
| E10 type | External description | Common payload guidance |
|---|---|---|
| Employee | Personnel field | Use `dataOptions`, `type: "resource"`, and `userType` such as `JOB_NUM`, `EMAIL`, `MOBILE`, `idNos`, `loginID`, or `account`. |
| Department | Department field | Use `dataOptions`, `type: "department"`, and `deptType` such as `DEPT_CODE` or `DEPT_NAME`. |
| SubCompany | Sub-company field | Use `dataOptions`, `type: "subcompany"`; prefer an external organization code when supported. |
| Date | Date | Use ISO-like date string such as `2026-05-27`. |
| Text | Single-line text | Use `content` string. |
| TextArea | Multi-line text | Use `content` string. |
| File | Attachment | Upload file first, then reference upload result in `dataOptions`. |
| EBuilder | Related e-builder object | Use documented option/object mapping. Mark as needing confirmation if not clear. |
| Flow | Related workflow | Use documented option/object mapping. Mark as needing confirmation if not clear. |
| Document | Related document | Use documented option/object mapping. Mark as needing confirmation if not clear. |
| API type | 中文含义 | formData 传值方式 |
|----------|----------|-------------------|
| Employee | 人员选择 | `dataOptions[].type: "resource"` |
| Department | 部门选择 | `dataOptions[].type: "department"` |
| SubCompany | 分部选择 | `dataOptions[].type: "subcompany"` |
| Date | 日期 | `content: "2026-05-27"` |
| Text | 单行文本 | `content: "文本值"` |
| TextArea | 多行文本 | `content: "文本值"` |
| File | 附件 | `dataOptions[].type: "file"` + uploadParam |
| EBuilder | 关联e-builder | 选项型传值 |
| Flow | 关联流程 | 选项型传值 |
| Document | 关联文档 | 选项型传值 |
## Alternative formId discovery
---
If `getFormList` cannot identify the form, use these fallback methods:
## 5. 获取 formTableId(主表和明细表)
formTableId 可以从以下途径获取:
1. **XHR 拦截**:在字段管理页面切换 主表/明细表 标签时,页面会调用 `getFormFieldPage`,其请求体中的 `formTableId` 即为当前表的 ID。
2. **字段响应反推**:主表任一字段的 `formTableId` 即为主表的 table ID。
3. **明细表为空时**:不需要 formTableId。
---
## formId 的其他获取方式
除了 `getFormList` API 搜索,还可从以下途径获取 formId:
1. **localStorage**:访问过表单管理页面后,`localStorage` 中会有 key `Form_0_<formId>_checkNewForm`,从中提取数字部分。
```js
for (var key in localStorage) {
if (key.startsWith("Form_0_") && key.endsWith("_checkNewForm")) {
return key.replace("Form_0_", "").replace("_checkNewForm", "");
}
}
```
2. **URL 路径**(不可靠,仅作参考):流程详情页 URL 中的 `pathset/` 后数字是 workflowId,不是 formId。
1. After visiting form management UI, inspect localStorage keys matching `Form_0_<formId>_checkNewForm`.
2. Intercept XHR requests to `getFormFieldPage` after switching field tabs and inspect the request body.
3. Do not treat `pathset/<id>` in the workflow detail URL as formId; that value is workflowId/pathSetId.