From e675f06edee3c315781fbe243ffdba9e99d50e7f Mon Sep 17 00:00:00 2001 From: Trae AI Date: Sat, 24 Jan 2026 17:00:15 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4=E7=AD=9B=E9=80=89=E6=A0=8F?= =?UTF-8?q?=E5=B8=83=E5=B1=80=E4=B8=BA=E4=B8=A4=E8=A1=8C=E7=BB=93=E6=9E=84?= =?UTF-8?q?=EF=BC=8C=E5=B9=B6=E6=81=A2=E5=A4=8D=E5=88=9B=E5=BB=BA=E6=97=B6?= =?UTF-8?q?=E9=97=B4=E9=87=8D=E7=BD=AE=E6=8C=89=E9=92=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../web/controller/UserController.java | 5 + .../java/com/example/web/entity/Managers.java | 9 + .../example/web/mapper/ManagersMapper.java | 4 + .../com/example/web/service/UserService.java | 3 + .../web/service/impl/UserServiceImpl.java | 50 + .../main/resources/mapper/ManagersMapper.xml | 6 + web/src/main/resources/static/index.html | 936 ++++++++++++++++-- 7 files changed, 948 insertions(+), 65 deletions(-) diff --git a/web/src/main/java/com/example/web/controller/UserController.java b/web/src/main/java/com/example/web/controller/UserController.java index d7d965a..a66c10c 100644 --- a/web/src/main/java/com/example/web/controller/UserController.java +++ b/web/src/main/java/com/example/web/controller/UserController.java @@ -102,4 +102,9 @@ public class UserController { public Map assignCustomers(@RequestBody Map params) { return userService.assignCustomers(params); } + + @PostMapping("/users/updateAllocationStatus") + public Map updateAllocationStatus(@RequestBody List> params) { + return userService.updateAllocationStatus(params); + } } diff --git a/web/src/main/java/com/example/web/entity/Managers.java b/web/src/main/java/com/example/web/entity/Managers.java index c1030a3..d9b0e9c 100644 --- a/web/src/main/java/com/example/web/entity/Managers.java +++ b/web/src/main/java/com/example/web/entity/Managers.java @@ -25,6 +25,7 @@ public class Managers { private LocalDateTime updated_at; // 更新时间 private String userName;//负责人姓名 private String assistant;//协助人 + private Integer allocationstatus;//分配状态 public Integer getManager_id() { return manager_id; @@ -121,4 +122,12 @@ public class Managers { public void setAssistant(String assistant) { this.assistant = assistant; } + + public Integer getAllocationstatus() { + return allocationstatus; + } + + public void setAllocationstatus(Integer allocationstatus) { + this.allocationstatus = allocationstatus; + } } diff --git a/web/src/main/java/com/example/web/mapper/ManagersMapper.java b/web/src/main/java/com/example/web/mapper/ManagersMapper.java index 41ab1db..b0c0bca 100644 --- a/web/src/main/java/com/example/web/mapper/ManagersMapper.java +++ b/web/src/main/java/com/example/web/mapper/ManagersMapper.java @@ -4,6 +4,7 @@ import com.example.web.entity.Managers; import com.example.web.annotation.DataSource; import java.util.List; +import java.util.Map; public interface ManagersMapper { @DataSource("primary") @@ -11,4 +12,7 @@ public interface ManagersMapper { @DataSource("primary") Managers findByManagerId(String managerId); + + @DataSource("primary") + int updateAllocationStatus(Map params); } \ No newline at end of file diff --git a/web/src/main/java/com/example/web/service/UserService.java b/web/src/main/java/com/example/web/service/UserService.java index cfb5824..dd30529 100644 --- a/web/src/main/java/com/example/web/service/UserService.java +++ b/web/src/main/java/com/example/web/service/UserService.java @@ -16,5 +16,8 @@ public interface UserService { List getPersonalUsers(int page, int size, String userName); List getPublicUsers(int page, int size); List getManagersList(); + Map assignCustomers(Map params); + + Map updateAllocationStatus(List> params); } diff --git a/web/src/main/java/com/example/web/service/impl/UserServiceImpl.java b/web/src/main/java/com/example/web/service/impl/UserServiceImpl.java index 0252567..a002279 100644 --- a/web/src/main/java/com/example/web/service/impl/UserServiceImpl.java +++ b/web/src/main/java/com/example/web/service/impl/UserServiceImpl.java @@ -493,6 +493,13 @@ public class UserServiceImpl implements UserService { return result; } + // 2. 检查负责人的分配状态 + if (selectedManager.getAllocationstatus() == null || selectedManager.getAllocationstatus() != 1) { + result.put("success", false); + result.put("message", "该负责人不允许分配客户"); + return result; + } + // 2. 遍历客户ID列表,为每个客户分配负责人 for (String userId : userIds) { // 3. 检查客户是否已经在usersmanagements表中有记录 @@ -589,4 +596,47 @@ public class UserServiceImpl implements UserService { tra.setOperationEvent("跟进系统-" + operationEvent); return tra; } + + @Override + public Map updateAllocationStatus(List> params) { + Map result = new HashMap<>(); + + try { + if (params == null || params.isEmpty()) { + result.put("success", false); + result.put("message", "缺少必要参数"); + return result; + } + + // 遍历权限设置列表,更新每个负责人的分配状态 + for (Map param : params) { + String managerId = (String) param.get("managerId"); + Integer allocationstatus = (Integer) param.get("allocationstatus"); + + if (managerId == null || allocationstatus == null) { + result.put("success", false); + result.put("message", "参数格式错误"); + return result; + } + + // 构建参数Map + Map updateParam = new HashMap<>(); + updateParam.put("managerId", managerId); + updateParam.put("allocationstatus", allocationstatus); + + // 执行更新操作 + managersMapper.updateAllocationStatus(updateParam); + } + + result.put("success", true); + result.put("message", "权限设置更新成功"); + + } catch (Exception e) { + e.printStackTrace(); + result.put("success", false); + result.put("message", "权限设置更新失败: " + e.getMessage()); + } + + return result; + } } diff --git a/web/src/main/resources/mapper/ManagersMapper.xml b/web/src/main/resources/mapper/ManagersMapper.xml index 6b00865..4272b96 100644 --- a/web/src/main/resources/mapper/ManagersMapper.xml +++ b/web/src/main/resources/mapper/ManagersMapper.xml @@ -11,4 +11,10 @@ WHERE managerId = #{managerId} LIMIT 1 + + + UPDATE managers + SET allocationstatus = #{allocationstatus}, updated_at = NOW() + WHERE managerId = #{managerId} + \ No newline at end of file diff --git a/web/src/main/resources/static/index.html b/web/src/main/resources/static/index.html index 9d7677f..a1643ef 100644 --- a/web/src/main/resources/static/index.html +++ b/web/src/main/resources/static/index.html @@ -79,23 +79,23 @@ .user-details { background: white; - padding: 20px; + padding: 15px; border-radius: 8px; box-shadow: 0 2px 8px rgba(0,0,0,0.1); - margin-bottom: 30px; + margin-bottom: 20px; } .user-details h2 { - font-size: 18px; + font-size: 16px; font-weight: bold; - margin-bottom: 15px; + margin-bottom: 12px; color: #333; } .detail-grid { display: grid; - grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); - gap: 15px; + grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); + gap: 12px; } .detail-item { @@ -106,7 +106,7 @@ .detail-label { font-size: 12px; color: #999; - margin-bottom: 5px; + margin-bottom: 4px; } .detail-value { @@ -161,43 +161,66 @@ } .filter-bar { - margin-bottom: 20px; + margin-bottom: 10px; display: flex; - gap: 10px; - align-items: center; flex-wrap: wrap; + gap: 8px; + align-content: flex-start; + } + + .filter-bar > *:nth-child(-n+8) { + flex: 0 0 auto; + } + + .filter-bar > span:nth-child(9), + .filter-bar > select:nth-child(10), + .filter-bar > span:nth-child(11), + .filter-bar > select:nth-child(12) { + flex: 0 0 auto; + } + + .filter-bar > span:nth-child(13) { + flex-basis: 100%; + margin-top: 8px; } .filter-bar span { white-space: nowrap; + font-size: 13px; } .filter-bar input[type="date"] { white-space: nowrap; - min-width: 130px; + min-width: 120px; + padding: 6px 8px; + font-size: 13px; } .filter-bar select { white-space: nowrap; - min-width: 100px; + min-width: 90px; + padding: 6px 8px; + font-size: 13px; } .filter-bar input[type="text"] { white-space: nowrap; - min-width: 150px; + min-width: 140px; + padding: 6px 8px; + font-size: 13px; } .filter-bar button { - padding: 8px 12px; + padding: 6px 10px; background-color: #1890ff; color: white; border: none; border-radius: 4px; cursor: pointer; - font-size: 14px; + font-size: 13px; transition: all 0.3s ease; white-space: nowrap; - min-width: 80px; + min-width: 70px; } .filter-bar button:hover { @@ -550,6 +573,7 @@ @@ -610,8 +634,9 @@ - - 负责人: + +
+ 负责人: -
- 总数: 0 - -
@@ -680,7 +697,9 @@ - 负责人: + +
+ 负责人: -
- -
@@ -802,16 +814,20 @@ document.getElementById('organization').innerHTML = personnel ? personnel.organization : '-'; document.getElementById('role').innerHTML = usersManagements ? usersManagements.role : '-'; - // 只有管理员显示分配按钮 + // 只有管理员显示分配按钮和权限管理按钮 var isAdmin = loginInfo.projectName === '管理员'; var assignButton = document.getElementById('assignButton'); var publicAssignButton = document.getElementById('publicAssignButton'); + var permissionButton = document.getElementById('permissionButton'); if (assignButton) { assignButton.style.display = isAdmin ? 'inline-block' : 'none'; } if (publicAssignButton) { publicAssignButton.style.display = isAdmin ? 'inline-block' : 'none'; } + if (permissionButton) { + permissionButton.style.display = isAdmin ? 'inline-block' : 'none'; + } } function switchTab(tabName, button) { @@ -1003,7 +1019,9 @@ }); // 更新统计信息 - personalTotalCount.textContent = filteredUsers.length; + if (personalTotalCount) { + personalTotalCount.textContent = filteredUsers.length; + } console.log('过滤后的数据量:', filteredUsers.length); @@ -1061,7 +1079,7 @@ } // 渲染分页控件 - renderPersonalPagination(personalPage, totalPages); + renderPersonalPagination(personalPage, totalPages, filteredUsers.length); } else { personalEmpty.style.display = 'block'; // 没有数据时隐藏分页控件 @@ -1752,7 +1770,7 @@ allPublicData = data.users; } displayPublicData(data); - renderPublicPagination(data.page, data.pages); + renderPublicPagination(data.page, data.pages, data.total); } }; xhr.send(); @@ -2025,6 +2043,12 @@ transition: all 0.3s ease; font-size: 14px; ">广东地区 +
海南地区
+
+

权限管理

+
+ + + + + + + + + + + + +
负责人ID负责人姓名负责公司分配状态
+
+
+ + +
+
+
+ `; + // 提示弹窗HTML var alertModalHTML = `