# 矩阵:A7-1 用户管理 + A7-2 权限管理(票 02) - 口径:拍板⑤——接口存在性 + 入参逐字段为主,出参仅记明显缺失块;深 tag 顺带核(拍板④)。 - 双源:文本库 `.scratch/opportunity-bugfix/lanhu-pages/A7-1*.md / A7-2*.md`(证据=控件 id)+ 截图 `shots/a7-1*.png / a7-2*.png`(结构验证)。 - 类型标注:**缺接口** / **缺入参** / **缺出参块** / **校验差距** / **幻影**(代码有原型无)/ **tag 待修** / ✅已覆盖。 - 正式树 7 页全盘;backup「数据共享」3 页不在本票(留票 06 拍板)。 ## 一、A7-1-1 用户列表(文本库 194 行) | # | 原型要素 | 证据 | 应有接口 | 现状 | 差距 | |---|---|---|---|---|---| | 1 | 左栏钉钉部门树(点击过滤右侧列表) | u67/u360 | 部门树 | GET /api/system/depts/tree | ✅ | | 2 | 统计卡片:部门总数/在职员工/离职员工/待分配员工 | u209-u212/u360 | 用户统计 | GET /users/stats(UserStatsDTO 四指标对齐) | **缺出参块**:三个时间戳(最近同步×2、最近移交,u209-u211)DTO 无字段 | | 3 | 筛选:姓名/手机号码/部门/所属角色/状态/职务 | u107/u84/u109/u110/u146/u155 | 列表查询 | POST /users/page(UserPageParam: deptId/employmentStatus/loginFrom/loginTo) | **缺入参**:username、mobile、roleId、title;loginFrom/loginTo 原型无此筛选(代码多余项,可留) | | 4 | 职务下拉枚举值域(营销副总裁/维度管理总监/…) | u156 | — | 无 | **缺口(挂账)**:值域来源待定(OA title 去重 or 字典) | | 5 | 表格列:姓名/手机号/部门/所属角色/状态/最后登录时间 | u183-u188 | — | UserListDTO 全字段齐 | ✅ | | 6 | 行内「分配角色」弹窗(在职/待分配) | u197-u200/u362 | 保存该用户角色 | POST /users/assign-roles(单用户全量替换) | ✅ | | 7 | 弹窗角色清单带「影响 N 人」「启用中」 | u266-u289 | 角色列表 | — | 依赖 A7-2-1 的角色 status/userCount 缺口(见三) | | 8 | 「批量配置角色」弹窗:多选员工+增量授予(「不会覆盖其已有角色」) | u201/u254-u314/u296 | 批量分配 | — | **缺接口**:POST /users/batch-assign-roles(userIds+roleIds,增量语义) | | 9 | 行内「移交数据」弹窗(已离职):接收人+待移交数量(线索/客户/商机/项目) | u317-u338/u368 | 移交预览+执行 | — | **缺接口**×2:移交预览(分域数量)、移交执行(userId+receiverId,跨域改 owner) | | 10 | 「导出数据」按钮(筛选区右侧) | u108/u360 | 导出 | — | **缺接口**:用户列表导出(同筛选入参,返文件流) | ## 二、A7-1-2 同步任务(文本库 189 行) | # | 原型要素 | 证据 | 应有接口 | 现状 | 差距 | |---|---|---|---|---|---| | 1 | 「立即同步」+确认弹窗+同步进度弹窗(任务编号/进度 60%) | u76/u270-u314 | 发起同步(任务化) | POST /sync/dingtalk(同步阻塞,返 DtSyncResultDTO 计数) | ✅核心可用;**缺出参块**:任务编号、进度百分比(任务化改造,重接口——票 06 拍板本期边界) | | 2 | 同步记录列表:筛选(任务编号/开始时间/触发方式/执行状态)+列(任务编号 SYNC-MMDD-序号/开始时间/触发方式/执行状态/部门变更/人员变更/异常数/详情)+分页 | u88-u135/u323 | 分页查询同步记录 | — | **缺接口**:GET /sync/tasks/page(需新建任务记录表) | | 3 | 「详情」弹窗:执行结果/失败对象/接口错误/处理结果/进度/重新同步 | u285-u306/u328 | 任务详情 | — | **缺接口**:GET /sync/tasks/detail?id=;「重新同步」复用发起同步 | | 4 | 同步设置区:自动同步启停/每日执行时间/重试规则(间隔≥1min、次数≥1)/并发规则/当前计划/下次执行/最近修改 | u230-u260/u331 | 设置查询+保存 | — | **缺接口**×2:GET/POST /sync/settings;需定时调度支持(重接口——票 06 拍板) | ## 三、A7-2-1 角色管理(文本库 195 行) | # | 原型要素 | 证据 | 应有接口 | 现状 | 差距 | |---|---|---|---|---|---| | 1 | 顶部统计:角色总数/启用中/已停用/零使用人员角色数 | u23-u33/u204 | 角色统计 | — | **缺接口**:GET /roles/stats(或 page 附带统计块) | | 2 | 筛选:角色名称(keyword)/角色类型/状态 | u35/u207/u204 | 分页查询 | POST /roles/page(RoleParam 仅继承 BaseParam:keyword✅) | **缺入参**:roleType(系统级/管理级/业务级/功能级)、status | | 3 | 列表列:角色名称/角色类型/角色说明/在职使用人数/状态/最后更新 | u39-u58/u204 | — | RoleDTO(roleName/remark/updateTime✅) | **缺出参块**:roleType、status、userCount(在职使用人数,离职不计——u204 定义) | | 4 | 新建角色弹窗:名称(2-30 唯一)/类型(必填单选)/说明 | u137-u146/u204 | 保存 | POST /roles/saveOrUpdate(roleName✅ remark✅) | **缺入参**:roleType;**校验差距**:名称长度/唯一性服务端校验 | | 5 | 复制角色:来源角色+新名称,复制类型/说明/功能权限/数据范围/敏感权限,不复制人员,生成停用草稿 | u149-u160/u204 | 复制 | — | **缺接口**:POST /roles/copy(sourceRoleId+roleName) | | 6 | 停用/启用角色(确认弹窗;启用校验:≥1 有效业务菜单权限+四域数据范围有效) | u163-u186/u204 | 状态切换 | — | **缺接口**:POST /roles/enable、/roles/disable(status 概念现缺) | | 7 | 删除角色(仅在职使用人数=0;二次校验) | u189-u199/u204 | 删除 | POST /roles/delete(级联清理✅) | **校验差距**:使用人数=0 才可删的服务端校验 | | 8 | 「处理使用人员」→ 跳组织与人员页按角色筛选 | u80/u204 | 用户列表按角色筛 | — | 同一(3)缺 roleId 入参(见一#3) | | 9 | 处理使用人员弹窗:选择/姓名/所属部门/职位/当前参与商机数 | u281-u314 | 用户列表 | POST /users/page | 部分覆盖;「当前参与商机数」列为域内统计(挂账,低优先) | ## 四、A7-2-2 编辑角色(基本信息)(文本库 83 行) | # | 原型要素 | 证据 | 应有接口 | 现状 | 差距 | |---|---|---|---|---|---| | 1 | 页头:角色编号/状态/在职使用人数/创建时间/最后更新 | u19-u54/u69 | 详情 | GET /roles/detail(RoleDTO:roleCode/createTime/updateTime✅) | **缺出参块**:status、userCount(同三#3) | | 2 | 权限摘要(功能模块+数据范围只读) | u56-u63/u69 | 详情 | detail 返 resourceIds+moduleScopes | 前端可自算;资源名称需 resources/list 配合(可接受,不强求新端点) | | 3 | 编辑基本信息(启用角色仅名称/说明可改;草稿可改类型) | u69 | 保存 | POST /roles/saveOrUpdate | **校验差距**:启用角色字段可改性校验(roleType 落地后) | | 4 | 「保存为停用」按钮 | u266 | 保存 | saveOrUpdate | 依赖 status 概念(同三#6) | ## 五、A7-2-3 编辑角色(功能权限)(文本库 110 行) | # | 原型要素 | 证据 | 应有接口 | 现状 | 差距 | |---|---|---|---|---|---| | 1 | 第二栏菜单树(按业务模块+已选数量) | u98-u125/u74 | 资源树 | GET /resources/list | ✅ | | 2 | 第三栏权限点分组(搜索/仅看已选;「当前有效」=启用且上级启用) | u155/u74 | 资源树 | listAll 返全量含 status | ✅(前端过滤+派生「上级已停用」可接受) | | 3 | 保存功能权限:一次提交全部菜单+权限点;服务端补齐祖先+校验菜单↔权限点依赖 | u74(3.2/3.6) | 保存授权 | POST /roles/assign-resources(祖先补全✅ ADR-0005) | **校验差距**:选权限点必须选所属菜单的依赖校验 | | 4 | 取消模块权限二次确认+「当前影响:18 名使用人员」 | u23-u36/u74 | 影响人数 | — | 依赖三#3 userCount 出参 | | 5 | 权限合并规则(多角色并集;仅启用角色计入) | u74(3.5) | 计算侧 | PermissionResolver(现有鉴权行为,不在本票深核) | 挂账:核对仅启用角色计入 | ## 六、A7-2-4 编辑角色(数据范围)(文本库 58 行) | # | 原型要素 | 证据 | 应有接口 | 现状 | 差距 | |---|---|---|---|---|---| | 1 | 四域(线索/客户/商机/项目)×四档(仅本人/本部门/本部门及下属部门/全部数据);联系人跟随客户不单独配 | u27-u48/u54 | 模块清单+档位保存 | GET /api/data-scope/modules + detail.moduleScopes + saveOrUpdate.moduleScopesJson(档位 1-4 校验✅) | ✅(模块清单不含联系人即合规) | | 2 | 缩小范围保存确认+影响人数 | u19/u54 | 影响人数 | — | 依赖三#3 userCount 出参 | ## 七、A7-2-2 权限点管理(文本库 490 行) | # | 原型要素 | 证据 | 应有接口 | 现状 | 差距 | |---|---|---|---|---|---| | 1 | 筛选:名称模糊/编码模糊/状态(全部/启用/停用)+分页+命中补父级(父级不计入总数) | u25-u29/u197(3.1) | 树查询 | GET /resources/list(无参全量) | **缺入参**:name、code、status、current、size;补父级行为(服务端或前端实现待定) | | 2 | 列表列:名称/类型/编码/路由路径/API URL/描述/状态/操作 | u235-u247/u197(3.2) | — | ResourceNodeDTO 字段全齐 | ✅ | | 3 | 新增一级菜单:菜单形态(目录/页面)/名称/图标必填/编码/描述/路由(页面必填)/排序 | u379-u397/u200(4.2) | 保存 | POST /resources/saveOrUpdate(type=CATALOG/MENU、icon、perms、route、sort✅;perms 三类必填+全局唯一已实现——ResourceServiceImpl 注释引 v29 u200/u206) | **校验差距**:图标必填、路由页面必填校验;新增默认停用(u197 3.3-6,待核 service 现状) | | 4 | 新增二级菜单(所属上级只读)/新增权限点(API URL 必填) | u427-u499/u200(4.3-4.4) | 保存 | saveOrUpdate(parentId、apiUrl✅) | ✅(apiUrl 必填校验待核) | | 5 | 编辑:类型/编码只读;页面型一级有直挂权限点禁改目录 | u203 | 保存 | saveOrUpdate(编辑模式 perms 只读已实现) | ✅核心;「禁改目录」校验待核 | | 6 | 独立「启用/停用」操作(确认弹窗带编码+角色引用数;被引用禁停用;停用菜单整棵下级暂时退出) | u118-u185/u208-u211 | 状态切换 | — | **缺接口**:POST /resources/enable、/resources/disable(含引用校验);现无独立端点 | | 7 | 删除校验:仅停用可删;无下级;**有角色引用禁止删除**(展示引用角色清单:名称/状态/在职人数/前往配置) | u64-u101/u218-u219 | 删除 | POST /resources/delete(子节点检查✅;**级联清理引用**——与原型「禁止删除」语义相反) | **校验差距(语义相反)**:改为引用即阻止;「仅停用可删」校验 | | 8 | 角色引用查询(删除/启停弹窗数据源) | u85-u98 | 引用清单 | — | **缺接口**:GET /resources/references?id=(返回引用角色列表) | | 9 | 图标上传 | u626-u641 | 上传 | POST /resources/icon/upload | ✅ | | 10 | 页面仅平台超管可访问 | u818/u191(2) | — | ResourceController 类级 hasRole('ADMIN') | ✅ | ## 八、深 tag 对账(拍板④:核对存量端点挂「A7 后台管理/…」完整路径) | 端点 | 现挂 tag | 正式树路径 | 判定 | |---|---|---|---| | /users/* 4 端点 | A7 后台管理/用户管理 | A7 后台管理>A7-1 用户管理>A7-1-1 用户列表 | ✅(页面粒度:可细化 /用户管理/用户列表) | | /depts/tree、save、delete | A7 后台管理/部门管理 | 正式树无「部门管理」页(部门树仅作 A7-1-1 左栏) | **tag 待修**+挂账:save/delete 原型无入口(对应未画的「组织架构」页 u67) | | /sync/dingtalk、/users/admin-role | A7 后台管理/运维 | A7 后台管理>A7-1 用户管理>A7-1-2 同步任务 | **tag 待修**:sync 应挂「用户管理/同步任务」;admin-role 原型无对应页(挂账) | | /roles/* 5 端点、/data-scope/modules | A7 后台管理/权限管理/角色管理 | A7 后台管理>A7-2 权限管理>A7-2-1 角色管理 | ✅ | | /resources/* 4 端点 | A7 后台管理/权限点管理 | A7 后台管理>A7-2 权限管理>A7-2-2 权限点管理 | **tag 待修**:缺一级「权限管理」→「A7 后台管理/权限管理/权限点管理」 | ## 九、缺口汇总(本分区) **缺接口(9)** 1. POST /users/batch-assign-roles —— 批量增量分配角色(A7-1-1) 2. 移交数据预览 + 移交执行(2 端点,跨域改 owner)(A7-1-1) 3. 用户列表导出(A7-1-1) 4. GET/POST /sync/settings + /sync/tasks/page + /sync/tasks/detail(3 端点,依赖任务化+调度,重接口)(A7-1-2) 5. GET /roles/stats(A7-2-1) 6. POST /roles/copy(A7-2-1) 7. POST /roles/enable + /roles/disable(A7-2-1) 8. POST /resources/enable + /resources/disable(A7-2-2 权限点) 9. GET /resources/references?id=(A7-2-2 权限点) **缺入参(3 项)** - UserPageParam:+username、mobile、roleId、title(A7-1-1 筛选 6 项对齐) - RoleParam:+roleType、status(A7-2-1 筛选) - (RoleDTO 表单)+roleType(新建角色必填单选) **缺出参块(2 项)** - UserStatsDTO:+lastSyncTime×2、lastTransferTime(统计卡片时间戳) - RoleDTO/RoleParam 出参:+status、userCount、roleType(角色列表三列+A7-2 各弹窗「影响 N 人」数据源) **校验差距(4 项)** - 角色名称 2-30 唯一;角色删除前使用人数=0;启用校验(≥1 业务菜单权限+四域数据范围);功能权限保存的菜单↔权限点依赖校验 - 资源删除语义改写:有引用禁止(现级联清理,语义相反)+仅停用可删;启停带引用校验 - 资源新增默认停用、图标/路由/apiUrl 必填校验(待核现状后补) **tag 待修(2 处)** - /resources/* 补一级「权限管理」;/sync/* 改挂「用户管理/同步任务」(+dept/save、delete 挂账待拍板) **幻影/挂账(3 项)** - /depts/save、/depts/delete:原型无入口(未画的「组织架构」页) - /users/admin-role:原型无对应页 - 职务下拉值域来源、处理使用人员弹窗「当前参与商机数」列