diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/dept/DeptListReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/dept/DeptListReqVO.java index 131686f2d4b7f83a2e7db0c58010b4aa62759bb1..f73c8cf23408f8809302dbd61d5d1dafc1d82ca4 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/dept/DeptListReqVO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/dept/DeptListReqVO.java @@ -3,6 +3,8 @@ package cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; +import java.util.Collection; + @Schema(description = "管理后台 - 部门列表 Request VO") @Data public class DeptListReqVO { @@ -13,4 +15,7 @@ public class DeptListReqVO { @Schema(description = "展示状态,参见 CommonStatusEnum 枚举类", example = "1") private Integer status; + @Schema(description = "deptId集合") + private Collection deptIds; + } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserSaveReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserSaveReqVO.java index 827f5e95035af7d8c3b23ffdc85f53867f4c7eba..ed6bee1105df8bdb86cc2bccd3eb3b999c6c0784 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserSaveReqVO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserSaveReqVO.java @@ -38,6 +38,7 @@ public class UserSaveReqVO { private String remark; @Schema(description = "部门编号", example = "我是一个用户") + @NotBlank(message = "部门编号不能为空") @DiffLogField(name = "部门", function = DeptParseFunction.NAME) private Long deptId; diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dept/DeptMapper.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dept/DeptMapper.java index a09fcf7d75aab06bfea1a8aaf0ce2e6c24bf6f93..6a1b50c6a8af7602025106147915c093b7c0741e 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dept/DeptMapper.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dept/DeptMapper.java @@ -15,6 +15,7 @@ public interface DeptMapper extends BaseMapperX { default List selectList(DeptListReqVO reqVO) { return selectList(new LambdaQueryWrapperX() .likeIfPresent(DeptDO::getName, reqVO.getName()) + .inIfPresent(DeptDO::getId,reqVO.getDeptIds()) .eqIfPresent(DeptDO::getStatus, reqVO.getStatus())); } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/dept/DeptServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/dept/DeptServiceImpl.java index 95a32593359a7cdd7440f1268feb43fe6f946606..cf2581b85dbb9e59ee3c9dc19550944cb482b932 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/dept/DeptServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/dept/DeptServiceImpl.java @@ -5,6 +5,8 @@ import cn.hutool.core.util.ObjectUtil; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.datapermission.core.annotation.DataPermission; +import cn.iocoder.yudao.framework.security.core.LoginUser; +import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptListReqVO; import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptSaveReqVO; import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO; @@ -167,11 +169,27 @@ public class DeptServiceImpl implements DeptService { @Override public List getDeptList(DeptListReqVO reqVO) { + //只查自己的部门及以下 + Long loginUserDeptId = SecurityFrameworkUtils.getLoginUserDeptId(); + reqVO.setDeptIds(getDeptCondition(loginUserDeptId)); List list = deptMapper.selectList(reqVO); list.sort(Comparator.comparing(DeptDO::getSort)); return list; } - + /** + * 获得部门条件:查询指定部门的子部门编号们,包括自身 + * + * @param deptId 部门编号 + * @return 部门编号集合 + */ + private Set getDeptCondition(Long deptId) { + if (deptId == null) { + return Collections.emptySet(); + } + Set deptIds = convertSet(getChildDeptList(deptId), DeptDO::getId); + deptIds.add(deptId); // 包括自身 + return deptIds; + } @Override public List getChildDeptList(Collection ids) { List children = new LinkedList<>(); diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java index cc37350d96055e21432c4f4258d1ff59fcbb2a19..9977307296fb41d083e1b7e8d12361662891b49a 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java @@ -173,7 +173,8 @@ public class AdminUserServiceImpl implements AdminUserService { if (ObjectUtil.notEqual(updateReqVO.getId(), SecurityFrameworkUtils.getLoginUserId())) { //进入这里说明不是自己,那就根据逻辑是否强制下线 // 新增:如果更新了部门编号,则先查看该用户的id,根据id删除该用户token,强制下线重新登录 - if (Objects.nonNull(updateReqVO.getDeptId())&& !oldUser.getDeptId().equals(updateObj.getDeptId()) ) { + if (Objects.nonNull(updateReqVO.getDeptId()) + && !Objects.equals(updateObj.getDeptId(), oldUser.getDeptId())) { OAuth2AccessTokenPageReqVO reqVO = new OAuth2AccessTokenPageReqVO(); reqVO.setUserId(oldUser.getId()); PageResult accessTokenPage = oauth2TokenService.getAccessTokenPage(reqVO); diff --git a/yudao-module-visit/src/main/java/cn/iocoder/yudao/module/visit/controller/admin/customerinfo/CustomerInfoController.java b/yudao-module-visit/src/main/java/cn/iocoder/yudao/module/visit/controller/admin/customerinfo/CustomerInfoController.java index ce92a1e7d663ea95420b7f190e34221dda670fcc..d7f6175162f2c22385c1e2b31f4012696209145c 100644 --- a/yudao-module-visit/src/main/java/cn/iocoder/yudao/module/visit/controller/admin/customerinfo/CustomerInfoController.java +++ b/yudao-module-visit/src/main/java/cn/iocoder/yudao/module/visit/controller/admin/customerinfo/CustomerInfoController.java @@ -93,16 +93,16 @@ public class CustomerInfoController { @GetMapping("/getByCompanyName") @Operation(summary = "通过公司名称带出基本信息") @Parameter(name = "companyName", description = "公司名称", required = true, example = "郑州小牛") - public CommonResult> getCustomerInfoByCompanyName(@RequestParam("companyName") String companyName) { - List customerInfo = customerInfoService.getCustomerInfoByCompanyName(companyName); - List bean = BeanUtils.toBean(customerInfo, CustomerInfoRespVO.class); + public CommonResult getCustomerInfoByCompanyName(@RequestParam("companyName") String companyName) { + CustomerInfoDO customerInfo = customerInfoService.getCustomerInfoByCompanyName(companyName); + CustomerInfoRespVO bean = BeanUtils.toBean(customerInfo, CustomerInfoRespVO.class); return success(bean); } @GetMapping("/getByPhone") @Operation(summary = "通过手机号带出基本信息") - @Parameter(name = "companyName", description = "联系方式", required = true, example = "156") + @Parameter(name = "contact", description = "联系方式", required = true, example = "156") public CommonResult> getCustomerInfoByContact(@RequestParam("contact") String contact) { List customerInfo = customerInfoService.getCustomerInfoByContact(contact); List bean = BeanUtils.toBean(customerInfo, CustomerInfoRespVO.class); diff --git a/yudao-module-visit/src/main/java/cn/iocoder/yudao/module/visit/dal/mysql/customerinfo/CustomerInfoMapper.java b/yudao-module-visit/src/main/java/cn/iocoder/yudao/module/visit/dal/mysql/customerinfo/CustomerInfoMapper.java index a6765591f391a555ca27bb8775777a8ff94a9fdd..64f495324c12fe0ef867fcc4a4bcedb0df0b5aeb 100644 --- a/yudao-module-visit/src/main/java/cn/iocoder/yudao/module/visit/dal/mysql/customerinfo/CustomerInfoMapper.java +++ b/yudao-module-visit/src/main/java/cn/iocoder/yudao/module/visit/dal/mysql/customerinfo/CustomerInfoMapper.java @@ -53,17 +53,18 @@ public interface CustomerInfoMapper extends BaseMapperX { } // 根据公司名称或手机号查询(根据任一条件带出符合条件的列表) - default List selectListByCompanyName(String companyName) { + default CustomerInfoDO selectListByCompanyName(String companyName) { Long companyId = SecurityFrameworkUtils.getLoginUserDeptId(); - return selectList(new LambdaQueryWrapperX() + return selectOne(new LambdaQueryWrapperX() .eqIfPresent(CustomerInfoDO::getCompanyId, companyId) - .likeIfPresent(CustomerInfoDO::getCompanyName, companyName)); + .eqIfPresent(CustomerInfoDO::getCompanyName, companyName) + .last("LIMIT 1")); } default List selectListByContact(String contact) { Long companyId = SecurityFrameworkUtils.getLoginUserDeptId(); return selectList(new LambdaQueryWrapperX() .eqIfPresent(CustomerInfoDO::getCompanyId, companyId) - .likeIfPresent(CustomerInfoDO::getContact, contact)); + .eqIfPresent(CustomerInfoDO::getContact, contact)); } default List selectList(Long companyId){ diff --git a/yudao-module-visit/src/main/java/cn/iocoder/yudao/module/visit/service/customerinfo/CustomerInfoService.java b/yudao-module-visit/src/main/java/cn/iocoder/yudao/module/visit/service/customerinfo/CustomerInfoService.java index a48afe6b4e5d8fba49a931661347d1d29866ddc7..26d9a53925526bc04053f8f47c2509c74f067a38 100644 --- a/yudao-module-visit/src/main/java/cn/iocoder/yudao/module/visit/service/customerinfo/CustomerInfoService.java +++ b/yudao-module-visit/src/main/java/cn/iocoder/yudao/module/visit/service/customerinfo/CustomerInfoService.java @@ -52,7 +52,7 @@ public interface CustomerInfoService { */ PageResult getCustomerInfoPage(CustomerInfoPageReqVO pageReqVO); - List getCustomerInfoByCompanyName(String companyName); + CustomerInfoDO getCustomerInfoByCompanyName(String companyName); List getCustomerInfoByContact(String contact); diff --git a/yudao-module-visit/src/main/java/cn/iocoder/yudao/module/visit/service/customerinfo/CustomerInfoServiceImpl.java b/yudao-module-visit/src/main/java/cn/iocoder/yudao/module/visit/service/customerinfo/CustomerInfoServiceImpl.java index 6ab4eacc846db8c2e7474332841f8c048ac5f3c7..e328c446c5060d3e3f75655a9eb90085b5184fbd 100644 --- a/yudao-module-visit/src/main/java/cn/iocoder/yudao/module/visit/service/customerinfo/CustomerInfoServiceImpl.java +++ b/yudao-module-visit/src/main/java/cn/iocoder/yudao/module/visit/service/customerinfo/CustomerInfoServiceImpl.java @@ -123,7 +123,7 @@ public class CustomerInfoServiceImpl implements CustomerInfoService { } @Override - public List getCustomerInfoByCompanyName(String companyName) { + public CustomerInfoDO getCustomerInfoByCompanyName(String companyName) { return customerInfoMapper.selectListByCompanyName(companyName); } @Override diff --git a/yudao-ui/yudao-ui-admin-vue3/src/views/Profile/components/BasicInfo.vue b/yudao-ui/yudao-ui-admin-vue3/src/views/Profile/components/BasicInfo.vue index f785affb92fbf0c044082e9054b9a4ae84fa240d..c5af085af028638c6ee624d4a10f47043a7025f8 100644 --- a/yudao-ui/yudao-ui-admin-vue3/src/views/Profile/components/BasicInfo.vue +++ b/yudao-ui/yudao-ui-admin-vue3/src/views/Profile/components/BasicInfo.vue @@ -70,12 +70,12 @@ const schema = reactive([ label: t('profile.user.email'), component: 'Input' }, - { - field: 'sex', - label: t('profile.user.sex'), - component: 'InputNumber', - value: 0 - } + // { + // field: 'sex', + // label: t('profile.user.sex'), + // component: 'InputNumber', + // value: 0 + // } ]) const formRef = ref() // 表单 Ref const submit = () => { diff --git a/yudao-ui/yudao-ui-admin-vue3/src/views/system/user/UserForm.vue b/yudao-ui/yudao-ui-admin-vue3/src/views/system/user/UserForm.vue index 0787318d65979fa2765db0a310d1f55154fe0975..3e7e1676a847bdb12547ff07a79d12b2871a053c 100644 --- a/yudao-ui/yudao-ui-admin-vue3/src/views/system/user/UserForm.vue +++ b/yudao-ui/yudao-ui-admin-vue3/src/views/system/user/UserForm.vue @@ -132,6 +132,7 @@ const formRules = reactive({ username: [{ required: true, message: '用户名称不能为空', trigger: 'blur' }], nickname: [{ required: true, message: '真实姓名不能为空', trigger: 'blur' }], password: [{ required: true, message: '用户密码不能为空', trigger: 'blur' }], + deptId: [{ required: true, message: '所属部门不能为空', trigger: 'blur' }], email: [ { type: 'email', diff --git a/yudao-ui/yudao-ui-admin-vue3/src/views/system/user/index.vue b/yudao-ui/yudao-ui-admin-vue3/src/views/system/user/index.vue index a8688861a2fe2cdf3e7fa51c92f7bab4988d783f..8f7a9dcee94724cc85871d6d803206155262caea 100644 --- a/yudao-ui/yudao-ui-admin-vue3/src/views/system/user/index.vue +++ b/yudao-ui/yudao-ui-admin-vue3/src/views/system/user/index.vue @@ -206,12 +206,13 @@ import UserForm from './UserForm.vue' import UserImportForm from './UserImportForm.vue' import UserAssignRoleForm from './UserAssignRoleForm.vue' import DeptTree from './DeptTree.vue' +import {useUserStore} from "@/store/modules/user"; defineOptions({ name: 'SystemUser' }) const message = useMessage() // 消息弹窗 const { t } = useI18n() // 国际化 - +const userStore = useUserStore()//用户信息 const loading = ref(true) // 列表的加载中 const total = ref(0) // 列表的总页数 const list = ref([]) // 列表的数 @@ -229,6 +230,9 @@ const queryFormRef = ref() // 搜索的表单 /** 查询列表 */ const getList = async () => { loading.value = true + if (userStore.user.deptId!==100){//如果不是总公司用户,再过滤,总公司用户可以看到所有 + queryParams.deptId = userStore.user.deptId + } try { const data = await UserApi.getUserPage(queryParams) list.value = data.list