diff --git a/docs/reports/implementation/2026-07-02-user-role-single-select-implementation.md b/docs/reports/implementation/2026-07-02-user-role-single-select-implementation.md new file mode 100644 index 00000000..d1b3abf7 --- /dev/null +++ b/docs/reports/implementation/2026-07-02-user-role-single-select-implementation.md @@ -0,0 +1,18 @@ +# 用户管理角色下拉单选实施记录 + +## 修改内容 + +- 将用户管理新增、修改用户弹窗中的角色选择组件由多选下拉框改为下拉单选框。 +- 新增前端单选值 `selectedRoleId`,选择角色时同步写回后端原有 `form.roleIds` 数组字段。 +- 修改用户回显时仅取 `response.roleIds` 的第一个角色作为当前选中项,提交时保持 `roleIds: [roleId]` 格式。 + +## 影响范围 + +- 仅影响 `ruoyi-ui/src/views/system/user/index.vue` 的新增用户、修改用户弹窗角色下拉选择交互。 +- 未修改后端接口、数据库、权限逻辑和用户分配角色页面。 + +## 验证情况 + +- 已执行 `nvm use`,使用 Node v14.21.3 / npm 6.14.18。 +- 已执行 `npm run build:prod`,构建通过;仅存在原有资源体积 warning。 +- 已在真实前端页面 `http://localhost:1024/system/user` 验证新增用户弹窗与修改用户弹窗:角色字段均为下拉单选框,无多选标签和单选圆点组件。 diff --git a/ruoyi-ui/src/views/system/user/index.vue b/ruoyi-ui/src/views/system/user/index.vue index 14a0ab18..afb96556 100644 --- a/ruoyi-ui/src/views/system/user/index.vue +++ b/ruoyi-ui/src/views/system/user/index.vue @@ -159,7 +159,7 @@ - + @@ -246,6 +246,8 @@ export default { postOptions: [], // 角色选项 roleOptions: [], + // 当前选择角色 + selectedRoleId: undefined, // 表单参数 form: {}, defaultProps: { @@ -402,8 +404,13 @@ export default { postIds: [], roleIds: [] } + this.selectedRoleId = undefined this.resetForm("form") }, + // 角色单选后仍按后端原有 roleIds 数组提交 + handleRoleChange(roleId) { + this.$set(this.form, "roleIds", roleId ? [roleId] : []) + }, /** 搜索按钮操作 */ handleQuery() { this.queryParams.pageNum = 1 @@ -455,8 +462,10 @@ export default { this.form = response.data this.postOptions = response.posts this.roleOptions = response.roles + const roleId = response.roleIds && response.roleIds.length ? response.roleIds[0] : undefined this.$set(this.form, "postIds", response.postIds) - this.$set(this.form, "roleIds", response.roleIds) + this.$set(this.form, "roleIds", roleId ? [roleId] : []) + this.selectedRoleId = roleId this.open = true this.title = "修改用户" this.form.password = "" @@ -555,4 +564,4 @@ export default { } } } - \ No newline at end of file +