meta { name: 分配用户角色 type: http seq: 3 tags: [ generated ] } post { url: {{baseUrl}}/api/system/users/assign-roles body: formUrlEncoded auth: inherit } body:form-urlencoded { userId: 100 roleIds: 3,4 } docs { # 分配用户角色 `POST /api/system/users/assign-roles` 给用户分配角色(全量替换,需 ADMIN 角色)。 ## 请求参数 | 参数 | 类型 | 必填 | 默认 | 说明 | | --- | --- | --- | --- | --- | | userId | string | 是 | - | 用户ID | | roleIds | string | 否 | - | 角色ID列表(逗号分隔,全量替换) | ## 请求示例 请求头:Authorization: Bearer {{token}} Content-Type: application/x-www-form-urlencoded POST /api/system/users/assign-roles userId=100&roleIds=3,4 ## 响应 data 结构 null ## 响应示例 // 示例数据,字段结构以上表为准,非真实返回 ```json { "code": 0, "success": true, "message": "success", "data": null } ``` } meta { name: 分配用户部门 type: http seq: 4 tags: [ generated ] } post { url: {{baseUrl}}/api/system/users/assign-depts body: formUrlEncoded auth: inherit } body:form-urlencoded { userId: 100 primaryDeptId: 10 deptIds: 20,21 } docs { # 分配用户部门 `POST /api/system/users/assign-depts` 原子设置用户的主部门与全部兼职部门(全量替换)。 ## 请求参数 | 参数 | 类型 | 必填 | 默认 | 说明 | | --- | --- | --- | --- | --- | | userId | string | 是 | - | 用户ID | | primaryDeptId | string | 否 | - | 主部门 ID(可空) | | deptIds | string | 否 | - | 兼职部门 ID 列表(逗号分隔,全量替换) | ## 请求示例 请求头:Authorization: Bearer {{token}} Content-Type: application/x-www-form-urlencoded POST /api/system/users/assign-depts userId=100&primaryDeptId=10&deptIds=20,21 ## 响应 data 结构 null ## 响应示例 // 示例数据,字段结构以上表为准,非真实返回 ```json { "code": 0, "success": true, "message": "success", "data": null } ``` } meta { name: 导出用户列表 type: http seq: 8 tags: [ generated ] } get { url: {{baseUrl}}/api/system/users/export body: none auth: inherit } params:query { keyword: 张 deptId: 10 employmentStatus: active } docs { # 导出用户列表 `GET /api/system/users/export` 导出用户列表(按筛选条件,返回文件信息):按当前筛选条件全量导出 Excel,前端拿 fileId 走既有下载端点。 ## 请求参数 | 参数 | 类型 | 必填 | 默认 | 说明 | | --- | --- | --- | --- | --- | | current | int | 否 | 1 | 当前页码(导出忽略分页,全量导出) | | size | int | 否 | 10 | 每页条数(导出忽略) | | keyword | string | 否 | - | 模糊搜索关键字,匹配列由接口定义 | | orderBy | string | 否 | - | 排序字段 | | asc | boolean | 否 | false | 是否升序 | | deptId | string | 否 | - | 部门 ID,选中节点含全部子孙;null=全公司 | | employmentStatus | string | 否 | - | 在职状态 active/resigned/unassigned;null=不限 | | loginFrom | date | 否 | - | 最后登录起(含当天 00:00) | | loginTo | date | 否 | - | 最后登录讫(含当天 23:59:59) | ## 请求示例 请求头:Authorization: Bearer {{token}} GET /api/system/users/export?keyword=张&deptId=10&employmentStatus=active ## 响应 data 结构 | 字段 | 类型 | 说明 | | --- | --- | --- | | fileId | string | 文件唯一引用凭据(crm_file_info 主键),业务表只存它 | | originalName | string | 原始文件名 | | size | long | 文件大小(字节) | | contentType | string | MIME 类型 | | bizDomain | string | 业务域 | | creatorId | string | 上传者(无登录态的内部上传为 null) | | createTime | datetime | 生成时间 | | thumbnailStatus | string | 缩略图状态(PENDING/READY/FAILED/UNSUPPORTED) | ## 响应示例 meta { name: 批量分配角色 type: http seq: 5 tags: [ generated ] } post { url: {{baseUrl}}/api/system/users/assign-roles-batch body: formUrlEncoded auth: inherit } body:form-urlencoded { userIds: 2001,2002 roleIds: 3,4 } docs { # 批量分配角色 `POST /api/system/users/assign-roles-batch` 批量分配角色(多用户增量,不覆盖已有角色):只增不删不覆盖,与单用户全量替换的 assign-roles 互补。 ## 请求参数 | 参数 | 类型 | 必填 | 默认 | 说明 | | --- | --- | --- | --- | --- | | userIds | string | 是 | - | 用户 ID 串,逗号分隔 | | roleIds | string | 是 | - | 角色 ID 串,逗号分隔 | ## 请求示例 请求头:Authorization: Bearer {{token}} Content-Type: application/x-www-form-urlencoded POST /api/system/users/assign-roles-batch userIds=2001,2002&roleIds=3,4 ## 响应 data 结构 null ## 响应示例 ```json { "code": 0, "success": true, "message": "success", "data": null } ``` } meta { name: 用户分页 type: http seq: 1 tags: [ generated ] } post { url: {{baseUrl}}/api/system/users/page body: formUrlEncoded auth: inherit } body:form-urlencoded { current: 1 size: 10 keyword: 张 orderBy: createTime asc: false deptId: 10 employmentStatus: active loginFrom: 2026-08-01 loginTo: 2026-08-14 } docs { # 用户分页 `POST /api/system/users/page` 用户管理-用户列表分页(需 ADMIN 角色)。 ## 请求参数 | 参数 | 类型 | 必填 | 默认 | 说明 | | --- | --- | --- | --- | --- | | current | int | 否 | 1 | 当前页码,从 1 开始 | | size | int | 否 | 10 | 每页条数,上限 500 | | keyword | string | 否 | - | 模糊搜索关键字,匹配列由接口定义 | | orderBy | string | 否 | - | 排序字段,驼峰或下划线均可 | | asc | boolean | 否 | false | 是否升序(默认新数据在前) | | deptId | string | 否 | - | 部门ID,选中节点含全部子孙;null=全公司 | | employmentStatus | string | 否 | - | 在职状态 active/resigned/unassigned;null=不限 | | loginFrom | date | 否 | - | 最后登录起(含当天 00:00) | | loginTo | date | 否 | - | 最后登录讫(含当天 23:59:59) | ## 请求示例 请求头:Authorization: Bearer {{token}} Content-Type: application/x-www-form-urlencoded POST /api/system/users/page current=1&size=10&keyword=张&orderBy=createTime&asc=false&deptId=10&employmentStatus=active&loginFrom=2026-08-01&loginTo=2026-08-14 ## 响应 data 结构 | 字段 | 类型 | 说明 | | --- | --- | --- | | content[] | array | 用户列表 | | id | string | 用户ID | meta { name: 用户统计 type: http seq: 2 tags: [ generated ] } get { url: {{baseUrl}}/api/system/users/stats body: none auth: inherit } params:query { deptId: 10 } docs { # 用户统计 `GET /api/system/users/stats` 用户管理-四指标卡统计(需 ADMIN 角色);口径跟随选中部门子树。 ## 请求参数 | 参数 | 类型 | 必填 | 默认 | 说明 | | --- | --- | --- | --- | --- | | deptId | string | 否 | - | 部门ID(口径含子孙);不传=全公司 | ## 请求示例 请求头:Authorization: Bearer {{token}} GET /api/system/users/stats?deptId=10 ## 响应 data 结构 | 字段 | 类型 | 说明 | | --- | --- | --- | | deptCount | int | 部门数(选中节点及其子孙) | | activeCount | long | 在职用户数 | | resignedCount | long | 离职用户数 | | unassignedCount | long | 待分配用户数(在职且无角色) | ## 响应示例 // 示例数据,字段结构以上表为准,非真实返回 ```json { "code": 0, "success": true, "message": "success", "data": { "deptCount": 5, "activeCount": 20, "resignedCount": 2, "unassignedCount": 3 } } meta { name: 移交执行 type: http seq: 7 tags: [ generated ] } post { url: {{baseUrl}}/api/system/users/transfer body: formUrlEncoded auth: inherit } body:form-urlencoded { userId: 1001 receiverId: 1002 } docs { # 移交执行 `POST /api/system/users/transfer` 移交执行(全量替换归属+全局快照):全部业务域归属一次性换主,全局快照落 sys_user_transfer_log。 ## 请求参数 | 参数 | 类型 | 必填 | 默认 | 说明 | | --- | --- | --- | --- | --- | | userId | string | 是 | - | 移交方用户 ID | | receiverId | string | 是 | - | 接收人用户 ID | ## 请求示例 请求头:Authorization: Bearer {{token}} Content-Type: application/x-www-form-urlencoded POST /api/system/users/transfer userId=1001&receiverId=1002 ## 响应 data 结构 | 字段 | 类型 | 说明 | | --- | --- | --- | | fromUserId | string | 移交方用户 ID | | toUserId | string | 接收人用户 ID | | domainCounts | array | 各域移交计数(元素结构同移交预览行) | | domainCounts[].domain | string | 域标识 lead/customer/opportunity/project | | domainCounts[].domainName | string | 域展示名(线索/客户/商机/项目) | | domainCounts[].count | long | 该域移交资产数 | | transferTime | string | 移交时间(全局快照落库时间) | ## 响应示例 // 示例数据,字段结构以上表为准,非真实返回 ```json { "code": 0, "success": true, "message": "success", meta { name: 移交预览 type: http seq: 6 tags: [ generated ] } get { url: {{baseUrl}}/api/system/users/transfer-preview body: none auth: inherit } params:query { id: 1001 } docs { # 移交预览 `GET /api/system/users/transfer-preview` 移交预览(各域归属资产计数):分域统计移交方名下客户/商机/线索/项目计数。 ## 请求参数 | 参数 | 类型 | 必填 | 默认 | 说明 | | --- | --- | --- | --- | --- | | id | string | 是 | - | 移交方用户 ID | ## 请求示例 请求头:Authorization: Bearer {{token}} GET /api/system/users/transfer-preview?id=1001 ## 响应 data 结构 | 字段 | 类型 | 说明 | | --- | --- | --- | | [].domain | string | 域标识 lead/customer/opportunity/project | | [].domainName | string | 域展示名(线索/客户/商机/项目) | | [].count | long | 该域名下归属资产数 | ## 响应示例 // 示例数据,字段结构以上表为准,非真实返回 ```json { "code": 0, "success": true, "message": "success", "data": [ { "domain": "customer", "domainName": "客户", "count": 12 } ] }