跳转至

设计时模块管理(ModuleDesignTimeController)

模块(应用下的子节点)设计时资源管理:按上级获取模块列表、获取/新建/更新/删除模块,以及获取树形结构的全量模块清单(用于「上级模块」下拉)。

  • 接口类型:REST 资源
  • 基址${myapps.context-path.designer:}/api/designtime(类级 @RequestMapping@Component 继承 AbstractDesignTimeController
  • Tag:设计时-模块模块

公共说明

  • 鉴权:是(需 designerToken)。继承自 AbstractDesignTimeController,通过 Security.getDesignerIdFromToken(request) 从 designerToken JWT 中解析设计器用户。鉴权机制详见 index.md「鉴权说明」。
  • 路径变量{applicationId}{moduleId} 均为**明文设计时 ID**(与 designer 其他控制器一致,非 runtime 的 DES 加密密文)。
  • 响应:统一 Resource(见 ../index.md「统一响应结构」)。成功 errcode=0;异常默认 errcode=500errmsg 为异常信息;保存类接口校验失败(重名、名称为空等)返回 errcode=40001
  • HTTP 方法:受 CommonSecurityFilter 限制,仅允许 GET/POST/HEAD/OPTIONS
  • 请求体约定:POST/PUT 接收原始 JSON 字符串(@RequestBody String content);DELETE 接收 String[](JSON 数组反序列化为字符串数组)。
  • 模块校验规则(据源码 validate):
  • 模块名称不能为空;
  • 同级模块(同 parentId)名称不能重复;
  • 模块名称不能与上级模块同名;
  • 更新时下级也不能存在同名模块。

1. 根据上级获取模块列表

parentId 获取其直接子模块列表。parentId 缺省时回退为 applicationId(即获取软件下的顶层模块)。每项额外附带 hasChild 字段(注意取反:有子集时为 false,无子集时为 true,配合前端渲染)。

  • 接口类型:REST 资源
  • 请求方式GET
  • 请求路径/applications/{applicationId}/modules(完整:{designer-context}/api/designtime/applications/{applicationId}/modules
  • 鉴权:是(需 designerToken)
  • Tag:设计时-模块模块

请求参数

参数名 位置 类型 必填 说明
applicationId path string 软件Id
parentId query string 上级Id(缺省时取 applicationId

说明:parentId 形参未标注 @RequestParam,由 Spring MVC 按请求参数绑定,可缺省。

请求示例

GET /api/designtime/applications/{applicationId}/modules?parentId=<parentId> HTTP/1.1

响应

结构:统一 Resource(见 ../index.md「统一响应结构」)。 dataList<Map>,每项 {name, id, superior, uri, applicationId, hasChild}

成功示例

{
  "errcode": 0,
  "errmsg": "ok",
  "data": [
    { "name": "行政部", "id": "...", "superior": "<applicationId>", "uri": "", "applicationId": "<applicationId>", "hasChild": true }
  ],
  "errors": null
}
失败示例
{ "errcode": 500, "errmsg": "<异常信息>", "data": null, "errors": null }


2. 获取模块详情

moduleId 查询模块详情,返回精简字段集(id、name、orderNo、description、uri、superior、superiorName)。superiorName 由上级模块名解析;无上级时为空字符串。

  • 接口类型:REST 资源
  • 请求方式GET
  • 请求路径/applications/{applicationId}/modules/{moduleId}
  • 鉴权:是(需 designerToken)
  • Tag:设计时-模块模块

请求参数

参数名 位置 类型 必填 说明
applicationId path string 软件Id
moduleId path string 模块Id

请求示例

GET /api/designtime/applications/{applicationId}/modules/{moduleId} HTTP/1.1

响应

dataMap,结构如上字段集。

{
  "errcode": 0,
  "errmsg": "ok",
  "data": {
    "id": "...",
    "name": "行政部",
    "orderNo": 1,
    "description": "...",
    "uri": "",
    "superior": "<applicationId>",
    "superiorName": "OA"
  },
  "errors": null
}
失败示例
{ "errcode": 500, "errmsg": "<异常信息>", "data": null, "errors": null }


3. 新建模块

在指定软件下新建模块。请求体反序列化为 Module 后,superior 缺省时 parentIdapplicationId,否则取 superior;经校验通过后分配设计时序列号并保存。

  • 接口类型:REST 资源
  • 请求方式POST
  • 请求路径/applications/{applicationId}/modules
  • 鉴权:是(需 designerToken)
  • Tag:设计时-模块模块

请求参数

参数名 位置 类型 必填 说明
applicationId path string 软件Id
content body string(JSON) 模块对象 JSON

请求体

对应 Module 对象 JSON(name 必填;可选 descriptionorderNosuperior 等)。

{ "name": "行政部", "description": "...", "orderNo": 1, "superior": "<applicationId 或父模块Id>" }

响应

dataJSONObject,仅含 id(新建模块Id)。校验失败时 errcode=40001errmsg 为「模块名称不能为空!」、「同级模块名称已存在!」、「名称不可以跟上级相同!」等。

{ "errcode": 0, "errmsg": "ok", "data": { "id": "<新模块Id>" }, "errors": null }
失败示例
{ "errcode": 40001, "errmsg": "同级模块名称已存在!", "data": null, "errors": null }


4. 更新模块

moduleId 更新模块基本字段(基于旧模块 clone 后修改,避免脏字段写回)。name/description/orderNo/superior 来自请求体;parentIdsuperior 是否为空自动推导。

  • 接口类型:REST 资源
  • 请求方式PUT
  • 请求路径/applications/{applicationId}/modules/{moduleId}
  • 鉴权:是(需 designerToken)
  • Tag:设计时-模块模块

请求参数

参数名 位置 类型 必填 说明
applicationId path string 软件Id
moduleId path string 模块Id
content body string(JSON) 模块对象 JSON(须含 name/description/orderNo/superior)

请求体

{ "name": "行政部", "description": "...", "orderNo": 1, "superior": "<applicationId 或父模块Id>" }

响应

datanull(成功)。校验失败时 errcode=40001(含「下级存在相同名称!」等更新专属校验)。

{ "errcode": 0, "errmsg": "ok", "data": null, "errors": null }
失败示例
{ "errcode": 40001, "errmsg": "下级存在相同名称!", "data": null, "errors": null }


5. 删除模块(可批量)

按模块 Id 数组批量删除模块(含子模块),并收集每个模块的 path 用于日志。

  • 接口类型:REST 资源
  • 请求方式DELETE
  • 请求路径/applications/{applicationId}/modules
  • 鉴权:是(需 designerToken)
  • Tag:设计时-模块模块

请求参数

参数名 位置 类型 必填 说明
applicationId path string 软件Id
ids body string 模块Id字符串数组(JSON 数组反序列化为 String[]

请求体

["<moduleId1>", "<moduleId2>"]

响应

datanull(成功)。

{ "errcode": 0, "errmsg": "ok", "data": null, "errors": null }
失败示例
{ "errcode": 500, "errmsg": "<异常信息>", "data": null, "errors": null }


6. 获取树形结构所有模块列表

返回该软件下全部模块(按 applicationId 列出顶层后递归 deepSearchModuleTree),用于「上级模块」选择下拉。返回前会排除 currentModuleId(编辑当前模块时避免自引用)。每项 value 为带缩进前缀的模块名(深度每加一层前缀增 2 个字符)。

  • 接口类型:REST 资源
  • 请求方式GET
  • 请求路径/applications/{applicationId}/allmodules
  • 鉴权:是(需 designerToken)
  • Tag:设计时-模块模块

请求参数

参数名 位置 类型 必填 说明
applicationId path string 软件Id
currentModuleId query string 当前模块Id(编辑场景下传入,返回列表中会排除该 Id 避免自引用)

说明:currentModuleId 形参未标注 @RequestParam,由 Spring MVC 按请求参数绑定,可缺省。

请求示例

GET /api/designtime/applications/{applicationId}/allmodules?currentModuleId=<moduleId> HTTP/1.1

响应

dataList<Map>,每项 {id, value}id 为模块Id;value 为带 |--... 缩进前缀的模块名(首项恒为 {id:"", value:"无"})。

{
  "errcode": 0,
  "errmsg": "ok",
  "data": [
    { "id": "", "value": "无" },
    { "id": "...", "value": "行政部" },
    { "id": "...", "value": "|--人事组" }
  ],
  "errors": null
}
失败示例
{ "errcode": 500, "errmsg": "<异常信息>", "data": null, "errors": null }