Commit 33ab2e96333472c2b022754bd756b4bea03af8b4
1 parent
2809254a
【修改】修改部门负责人,从 String 字符串,调整成和后台用户的用户编号绑定
Showing
12 changed files
with
112 additions
and
19 deletions
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/dept/vo/dept/SysDeptBaseVO.java
| 1 | 1 | package cn.iocoder.yudao.adminserver.modules.system.controller.dept.vo.dept; |
| 2 | 2 | |
| 3 | +import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; | |
| 4 | +import cn.iocoder.yudao.framework.common.validation.InEnum; | |
| 3 | 5 | import io.swagger.annotations.ApiModelProperty; |
| 4 | 6 | import lombok.Data; |
| 5 | 7 | |
| ... | ... | @@ -28,8 +30,8 @@ public class SysDeptBaseVO { |
| 28 | 30 | @NotNull(message = "显示顺序不能为空") |
| 29 | 31 | private Integer sort; |
| 30 | 32 | |
| 31 | - @ApiModelProperty(value = "负责人", example = "芋道") | |
| 32 | - private String leader; | |
| 33 | + @ApiModelProperty(value = "负责人的用户编号", example = "2048") | |
| 34 | + private Long leaderUserId; | |
| 33 | 35 | |
| 34 | 36 | @ApiModelProperty(value = "联系电话", example = "15601691000") |
| 35 | 37 | @Size(max = 11, message = "联系电话长度不能超过11个字符") |
| ... | ... | @@ -42,7 +44,7 @@ public class SysDeptBaseVO { |
| 42 | 44 | |
| 43 | 45 | @ApiModelProperty(value = "状态", required = true, example = "1", notes = "见 SysCommonStatusEnum 枚举") |
| 44 | 46 | @NotNull(message = "状态不能为空") |
| 45 | -// @InEnum(value = SysCommonStatusEnum.class, message = "修改状态必须是 {value}") | |
| 47 | +// @InEnum(value = CommonStatusEnum.class, message = "修改状态必须是 {value}") | |
| 46 | 48 | private Integer status; |
| 47 | 49 | |
| 48 | 50 | } | ... | ... |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/user/SysUserController.java
| 1 | 1 | package cn.iocoder.yudao.adminserver.modules.system.controller.user; |
| 2 | 2 | |
| 3 | 3 | import cn.hutool.core.collection.CollUtil; |
| 4 | +import cn.iocoder.yudao.adminserver.modules.system.controller.dept.vo.dept.SysDeptListReqVO; | |
| 5 | +import cn.iocoder.yudao.adminserver.modules.system.controller.dept.vo.dept.SysDeptSimpleRespVO; | |
| 4 | 6 | import cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.user.*; |
| 7 | +import cn.iocoder.yudao.adminserver.modules.system.convert.dept.SysDeptConvert; | |
| 5 | 8 | import cn.iocoder.yudao.adminserver.modules.system.convert.user.SysUserConvert; |
| 6 | 9 | import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.dept.SysDeptDO; |
| 7 | 10 | import cn.iocoder.yudao.adminserver.modules.system.service.dept.SysDeptService; |
| ... | ... | @@ -32,6 +35,8 @@ import java.io.IOException; |
| 32 | 35 | import java.util.*; |
| 33 | 36 | |
| 34 | 37 | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; |
| 38 | +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList; | |
| 39 | +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; | |
| 35 | 40 | import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT; |
| 36 | 41 | |
| 37 | 42 | @Api(tags = "用户") |
| ... | ... | @@ -99,7 +104,7 @@ public class SysUserController { |
| 99 | 104 | } |
| 100 | 105 | |
| 101 | 106 | // 获得拼接需要的数据 |
| 102 | - Collection<Long> deptIds = CollectionUtils.convertList(pageResult.getList(), SysUserDO::getDeptId); | |
| 107 | + Collection<Long> deptIds = convertList(pageResult.getList(), SysUserDO::getDeptId); | |
| 103 | 108 | Map<Long, SysDeptDO> deptMap = deptService.getDeptMap(deptIds); |
| 104 | 109 | // 拼接结果返回 |
| 105 | 110 | List<SysUserPageItemRespVO> userList = new ArrayList<>(pageResult.getList().size()); |
| ... | ... | @@ -111,6 +116,15 @@ public class SysUserController { |
| 111 | 116 | return success(new PageResult<>(userList, pageResult.getTotal())); |
| 112 | 117 | } |
| 113 | 118 | |
| 119 | + @GetMapping("/list-all-simple") | |
| 120 | + @ApiOperation(value = "获取用户精简信息列表", notes = "只包含被开启的用户,主要用于前端的下拉选项") | |
| 121 | + public CommonResult<List<SysUserSimpleRespVO>> getSimpleUsers() { | |
| 122 | + // 获用户门列表,只要开启状态的 | |
| 123 | + List<SysUserDO> list = userService.getUsersByStatus(CommonStatusEnum.ENABLE.getStatus()); | |
| 124 | + // 排序后,返回给前端 | |
| 125 | + return success(SysUserConvert.INSTANCE.convertList04(list)); | |
| 126 | + } | |
| 127 | + | |
| 114 | 128 | @GetMapping("/get") |
| 115 | 129 | @ApiOperation("获得用户详情") |
| 116 | 130 | @ApiImplicitParam(name = "id", value = "编号", required = true, example = "1024", dataTypeClass = Long.class) |
| ... | ... | @@ -129,15 +143,19 @@ public class SysUserController { |
| 129 | 143 | List<SysUserDO> users = userService.getUsers(reqVO); |
| 130 | 144 | |
| 131 | 145 | // 获得拼接需要的数据 |
| 132 | - Collection<Long> deptIds = CollectionUtils.convertList(users, SysUserDO::getDeptId); | |
| 146 | + Collection<Long> deptIds = convertList(users, SysUserDO::getDeptId); | |
| 133 | 147 | Map<Long, SysDeptDO> deptMap = deptService.getDeptMap(deptIds); |
| 148 | + Map<Long, SysUserDO> deptLeaderUserMap = userService.getUserMap(convertSet(deptMap.values(), SysDeptDO::getLeaderUserId)); | |
| 134 | 149 | // 拼接数据 |
| 135 | 150 | List<SysUserExcelVO> excelUsers = new ArrayList<>(users.size()); |
| 136 | 151 | users.forEach(user -> { |
| 137 | 152 | SysUserExcelVO excelVO = SysUserConvert.INSTANCE.convert02(user); |
| 153 | + // 设置部门 | |
| 138 | 154 | MapUtils.findAndThen(deptMap, user.getDeptId(), dept -> { |
| 139 | 155 | excelVO.setDeptName(dept.getName()); |
| 140 | - excelVO.setDeptLeader(dept.getLeader()); | |
| 156 | + // 设置部门负责人的名字 | |
| 157 | + MapUtils.findAndThen(deptLeaderUserMap, dept.getLeaderUserId(), | |
| 158 | + deptLeaderUser -> excelVO.setDeptLeaderNickname(deptLeaderUser.getNickname())); | |
| 141 | 159 | }); |
| 142 | 160 | excelUsers.add(excelVO); |
| 143 | 161 | }); | ... | ... |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/user/vo/user/SysUserExcelVO.java
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/user/vo/user/SysUserSimpleRespVO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.user; | |
| 2 | + | |
| 3 | +import io.swagger.annotations.ApiModel; | |
| 4 | +import io.swagger.annotations.ApiModelProperty; | |
| 5 | +import lombok.AllArgsConstructor; | |
| 6 | +import lombok.Data; | |
| 7 | +import lombok.NoArgsConstructor; | |
| 8 | + | |
| 9 | +@ApiModel("用户精简信息 Response VO") | |
| 10 | +@Data | |
| 11 | +@NoArgsConstructor | |
| 12 | +@AllArgsConstructor | |
| 13 | +public class SysUserSimpleRespVO { | |
| 14 | + | |
| 15 | + @ApiModelProperty(value = "用户编号", required = true, example = "1024") | |
| 16 | + private Long id; | |
| 17 | + | |
| 18 | + @ApiModelProperty(value = "用户昵称", required = true, example = "芋道") | |
| 19 | + private String nickname; | |
| 20 | + | |
| 21 | +} | ... | ... |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/convert/user/SysUserConvert.java
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/dataobject/dept/SysDeptDO.java
| 1 | 1 | package cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.dept; |
| 2 | 2 | |
| 3 | +import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; | |
| 3 | 4 | import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; |
| 4 | 5 | import cn.iocoder.yudao.framework.tenant.core.db.TenantBaseDO; |
| 5 | 6 | import com.baomidou.mybatisplus.annotation.TableId; |
| ... | ... | @@ -38,8 +39,10 @@ public class SysDeptDO extends TenantBaseDO { |
| 38 | 39 | private Integer sort; |
| 39 | 40 | /** |
| 40 | 41 | * 负责人 |
| 42 | + * | |
| 43 | + * 关联 {@link SysUserDO#getId()} | |
| 41 | 44 | */ |
| 42 | - private String leader; | |
| 45 | + private Long leaderUserId; | |
| 43 | 46 | /** |
| 44 | 47 | * 联系电话 |
| 45 | 48 | */ | ... | ... |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/mysql/user/SysUserMapper.java
| ... | ... | @@ -55,7 +55,7 @@ public interface SysUserMapper extends BaseMapperX<SysUserDO> { |
| 55 | 55 | return selectList(new QueryWrapperX<SysUserDO>().like("username", username)); |
| 56 | 56 | } |
| 57 | 57 | |
| 58 | - | |
| 58 | + // TODO 芋艿:可废弃该方法 | |
| 59 | 59 | default List<SysUserDO> selectListByDepartIdAndPostId(Long departId, Long postId) { |
| 60 | 60 | return selectList(new QueryWrapperX<SysUserDO>() |
| 61 | 61 | .eq("status", CommonStatusEnum.ENABLE.getStatus()) |
| ... | ... | @@ -64,5 +64,9 @@ public interface SysUserMapper extends BaseMapperX<SysUserDO> { |
| 64 | 64 | .likeIfPresent("post_ids", Optional.ofNullable(postId).map(t -> String.valueOf(postId)).orElse(""))); |
| 65 | 65 | } |
| 66 | 66 | |
| 67 | + default List<SysUserDO> selectListByStatus(Integer status) { | |
| 68 | + return selectList("status", status); | |
| 69 | + } | |
| 70 | + | |
| 67 | 71 | } |
| 68 | 72 | ... | ... |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/user/SysUserService.java
| ... | ... | @@ -169,4 +169,12 @@ public interface SysUserService { |
| 169 | 169 | */ |
| 170 | 170 | SysUserImportRespVO importUsers(List<SysUserImportExcelVO> importUsers, boolean isUpdateSupport); |
| 171 | 171 | |
| 172 | + /** | |
| 173 | + * 获得指定状态的用户们 | |
| 174 | + * | |
| 175 | + * @param status 状态 | |
| 176 | + * @return 用户们 | |
| 177 | + */ | |
| 178 | + List<SysUserDO> getUsersByStatus(Integer status); | |
| 179 | + | |
| 172 | 180 | } | ... | ... |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/user/impl/SysUserServiceImpl.java
yudao-admin-ui/src/api/system/user.js
| ... | ... | @@ -10,6 +10,14 @@ export function listUser(query) { |
| 10 | 10 | }) |
| 11 | 11 | } |
| 12 | 12 | |
| 13 | +// 获取用户精简信息列表 | |
| 14 | +export function listSimpleUsers() { | |
| 15 | + return request({ | |
| 16 | + url: '/system/user/list-all-simple', | |
| 17 | + method: 'get' | |
| 18 | + }) | |
| 19 | +} | |
| 20 | + | |
| 13 | 21 | // 查询用户详细 |
| 14 | 22 | export function getUser(userId) { |
| 15 | 23 | return request({ | ... | ... |
yudao-admin-ui/src/views/system/dept/index.vue
| ... | ... | @@ -25,8 +25,9 @@ |
| 25 | 25 | <el-table v-loading="loading" :data="deptList" row-key="id" default-expand-all |
| 26 | 26 | :tree-props="{children: 'children', hasChildren: 'hasChildren'}"> |
| 27 | 27 | <el-table-column prop="name" label="部门名称" width="260"></el-table-column> |
| 28 | + <el-table-column prop="status" label="负责人" :formatter="userNicknameFormat" width="120"/> | |
| 28 | 29 | <el-table-column prop="sort" label="排序" width="200"></el-table-column> |
| 29 | - <el-table-column prop="status" label="状态" :formatter="statusFormat" width="100"></el-table-column> | |
| 30 | + <el-table-column prop="status" label="状态" :formatter="statusFormat" width="100"/> | |
| 30 | 31 | <el-table-column label="创建时间" align="center" prop="createTime" width="200"> |
| 31 | 32 | <template slot-scope="scope"> |
| 32 | 33 | <span>{{ parseTime(scope.row.createTime) }}</span> |
| ... | ... | @@ -64,8 +65,10 @@ |
| 64 | 65 | </el-form-item> |
| 65 | 66 | </el-col> |
| 66 | 67 | <el-col :span="12"> |
| 67 | - <el-form-item label="负责人" prop="leader"> | |
| 68 | - <el-input v-model="form.leader" placeholder="请输入负责人" maxlength="20" /> | |
| 68 | + <el-form-item label="负责人" prop="leaderUserId"> | |
| 69 | + <el-select v-model="form.leaderUserId" placeholder="请输入负责人" clearable style="width: 100%"> | |
| 70 | + <el-option v-for="item in users" :key="parseInt(item.id)" :label="item.nickname" :value="parseInt(item.id)" /> | |
| 71 | + </el-select> | |
| 69 | 72 | </el-form-item> |
| 70 | 73 | </el-col> |
| 71 | 74 | <el-col :span="12"> |
| ... | ... | @@ -103,6 +106,7 @@ import "@riophae/vue-treeselect/dist/vue-treeselect.css"; |
| 103 | 106 | |
| 104 | 107 | import {SysCommonStatusEnum} from '@/utils/constants' |
| 105 | 108 | import { getDictDataLabel, getDictDatas, DICT_TYPE } from '@/utils/dict' |
| 109 | +import {listSimpleUsers} from "@/api/system/user"; | |
| 106 | 110 | |
| 107 | 111 | export default { |
| 108 | 112 | name: "Dept", |
| ... | ... | @@ -117,6 +121,8 @@ export default { |
| 117 | 121 | deptList: [], |
| 118 | 122 | // 部门树选项 |
| 119 | 123 | deptOptions: [], |
| 124 | + // 用户下拉列表 | |
| 125 | + users: [], | |
| 120 | 126 | // 弹出层标题 |
| 121 | 127 | title: "", |
| 122 | 128 | // 是否显示弹出层 |
| ... | ... | @@ -168,6 +174,10 @@ export default { |
| 168 | 174 | }, |
| 169 | 175 | created() { |
| 170 | 176 | this.getList(); |
| 177 | + // 获得用户列表 | |
| 178 | + listSimpleUsers().then(response => { | |
| 179 | + this.users = response.data; | |
| 180 | + }); | |
| 171 | 181 | }, |
| 172 | 182 | methods: { |
| 173 | 183 | /** 查询部门列表 */ |
| ... | ... | @@ -193,6 +203,18 @@ export default { |
| 193 | 203 | statusFormat(row, column) { |
| 194 | 204 | return getDictDataLabel(DICT_TYPE.SYS_COMMON_STATUS, row.status) |
| 195 | 205 | }, |
| 206 | + // 用户昵称展示 | |
| 207 | + userNicknameFormat(row, column) { | |
| 208 | + if (!row.leaderUserId) { | |
| 209 | + return '未设置'; | |
| 210 | + } | |
| 211 | + for (const user of this.users) { | |
| 212 | + if (row.leaderUserId === user.id) { | |
| 213 | + return user.nickname; | |
| 214 | + } | |
| 215 | + } | |
| 216 | + return '未知【' + row.leaderUserId + '】'; | |
| 217 | + }, | |
| 196 | 218 | // 取消按钮 |
| 197 | 219 | cancel() { |
| 198 | 220 | this.open = false; |
| ... | ... | @@ -205,7 +227,7 @@ export default { |
| 205 | 227 | parentId: undefined, |
| 206 | 228 | name: undefined, |
| 207 | 229 | sort: undefined, |
| 208 | - leader: undefined, | |
| 230 | + leaderUserId: undefined, | |
| 209 | 231 | phone: undefined, |
| 210 | 232 | email: undefined, |
| 211 | 233 | status: SysCommonStatusEnum.ENABLE, | ... | ... |
更新日志.md
| ... | ... | @@ -20,6 +20,12 @@ |
| 20 | 20 | 5. 流程结束 |
| 21 | 21 | * 我的请假中,可以查询本人的请假申请, 和进度 |
| 22 | 22 | |
| 23 | +### 📝 TODO | |
| 24 | + | |
| 25 | +* 支付 | |
| 26 | +* 用户前台的社交登陆 | |
| 27 | +* 用户前台的修改手机、修改密码、忘记密码 | |
| 28 | + | |
| 23 | 29 | ## [v1.3.0] 进行中 |
| 24 | 30 | |
| 25 | 31 | ### ⚠️ Warning |
| ... | ... | @@ -33,6 +39,7 @@ |
| 33 | 39 | * 【新增】待办任务的管理,支持任务的审批通过与不通过 |
| 34 | 40 | * 【新增】已办任务的管理,支持详情的查看 |
| 35 | 41 | * 【新增】引入 bpmn-process-designer 0.0.1 版本,提供流程设计器的能力 |
| 42 | +* 【修改】修改部门负责人,从 String 字符串,调整成和后台用户的用户编号绑定 | |
| 36 | 43 | |
| 37 | 44 | ### 🐞 Bug Fixes |
| 38 | 45 | |
| ... | ... | @@ -45,12 +52,6 @@ |
| 45 | 52 | * 【升级】druid from 1.2.4 to 1.2.8,提升数据库连接池的稳定性 |
| 46 | 53 | * 【升级】dynamic-datasource from 3.3.2 to 3.5.0,修复动态数据源切换的问题 |
| 47 | 54 | |
| 48 | -### 📝 TODO | |
| 49 | - | |
| 50 | -* 支付 | |
| 51 | -* 用户前台的社交登陆 | |
| 52 | -* 用户前台的修改手机、修改密码、忘记密码 | |
| 53 | - | |
| 54 | 55 | ## [v1.2.0] |
| 55 | 56 | |
| 56 | 57 | ### ⚠️ Warning | ... | ... |