From 0b6f688b9aad348f9b7f13d3ecf2fdd2b71a41e3 Mon Sep 17 00:00:00 2001 From: luoyuehang <2830398107@qq.com> Date: Tue, 9 Dec 2025 22:12:47 +0800 Subject: [PATCH 1/3] =?UTF-8?q?app1=E9=A6=96=E9=A1=B5=E5=BE=85=E5=A4=84?= =?UTF-8?q?=E7=90=86=E5=B7=A5=E5=8D=95=E5=B1=95=E7=A4=BA=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../zzz/src/services/authServices.js | 2 +- src/main/resources/zzz/src/stores/auth.js | 9 +- src/main/resources/zzz/src/views/HomePage.vue | 130 ++++++++++++++++-- .../resources/zzz/src/views/LoginPage.vue | 6 +- 4 files changed, 127 insertions(+), 20 deletions(-) diff --git a/src/main/resources/zzz/src/services/authServices.js b/src/main/resources/zzz/src/services/authServices.js index b012884..e5e1828 100644 --- a/src/main/resources/zzz/src/services/authServices.js +++ b/src/main/resources/zzz/src/services/authServices.js @@ -19,7 +19,7 @@ export const authServices = { const requestData = { username: registerData.username, password: registerData.password, - userType: 'repairer', // 固定为repairer类型 + userType: 'repairman', // 固定为repairma 类型 repairmanId: registerData.repairmanId } diff --git a/src/main/resources/zzz/src/stores/auth.js b/src/main/resources/zzz/src/stores/auth.js index 1e4c28f..fa8910e 100644 --- a/src/main/resources/zzz/src/stores/auth.js +++ b/src/main/resources/zzz/src/stores/auth.js @@ -35,10 +35,11 @@ export const useAuthStore = defineStore('auth', () => { return user.value?.userType || localStorage.getItem('userType') }) - // 获取维修人员ID - const getRepairmanId = computed(() => { - return user.value?.repairmanId || localStorage.getItem('repairmanId') - }) + // 获取维修人员ID +const getRepairmanId = computed(() => { + return user.value?.userId || localStorage.getItem('userId') // 使用userId而不是repairmanId +}) + // 登出 const logout = () => { diff --git a/src/main/resources/zzz/src/views/HomePage.vue b/src/main/resources/zzz/src/views/HomePage.vue index 219ee16..a6b810a 100644 --- a/src/main/resources/zzz/src/views/HomePage.vue +++ b/src/main/resources/zzz/src/views/HomePage.vue @@ -16,7 +16,7 @@
-
5
+
{{ processingOrders.length }}
待处理工单
@@ -41,20 +41,30 @@

待处理工单

-
-
紧急
-
-
制水机#A201 - TDS超标
-
教学楼A区 - 10分钟前
+
+
+ {{ getOrderPriorityText(order.priority) }}
-
-
-
一般
-
供水机#B105 - 水位异常
-
图书馆 - 25分钟前
+
{{ order.description || `工单#${order.orderId}` }}
+ +
{{ getTimeAgo(order.createdTime) }}
+ + +
+ 暂无待处理工单 +
+ + +
+ 加载中... +
@@ -77,14 +87,93 @@
- diff --git a/src/main/resources/zzz/src/views/LoginPage.vue b/src/main/resources/zzz/src/views/LoginPage.vue index 60f833f..e39b8a5 100644 --- a/src/main/resources/zzz/src/views/LoginPage.vue +++ b/src/main/resources/zzz/src/views/LoginPage.vue @@ -6,7 +6,7 @@ import { useAuthStore } from '@/stores/auth' const authStore = useAuthStore() const router = useRouter() -const usertype = ref('repairer') +const usertype = ref('repairman') const username = ref('') const password = ref('') const loading = ref(false) @@ -42,7 +42,7 @@ const handleLogin = async () => { username: result.data.username, userType: result.data.userType, userId: result.data.userId, - repairmanId: username.value + repairmanId: result.data.userId }, result.data.token); // 保存到本地存储 @@ -50,7 +50,7 @@ const handleLogin = async () => { localStorage.setItem('userId', result.data.userId); localStorage.setItem('username', result.data.username); localStorage.setItem('userType', result.data.userType); - localStorage.setItem('repairmanId', username.value); + localStorage.setItem('repairmanId', result.data.userId); alert('登录成功!'); router.push('/home'); From e91b5e56ac3e19e9043e05c8874ed49815fb5e2f Mon Sep 17 00:00:00 2001 From: luoyuehang <2830398107@qq.com> Date: Tue, 9 Dec 2025 22:14:25 +0800 Subject: [PATCH 2/3] =?UTF-8?q?app1=E9=A6=96=E9=A1=B5=E5=BE=85=E5=A4=84?= =?UTF-8?q?=E7=90=86=E5=B7=A5=E5=8D=95=E5=B1=95=E7=A4=BA=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=E6=BC=8F=E4=BC=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../resources/zzz/src/services/workOrderService.js | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 src/main/resources/zzz/src/services/workOrderService.js diff --git a/src/main/resources/zzz/src/services/workOrderService.js b/src/main/resources/zzz/src/services/workOrderService.js new file mode 100644 index 0000000..c1419b2 --- /dev/null +++ b/src/main/resources/zzz/src/services/workOrderService.js @@ -0,0 +1,14 @@ +// src/services/workOrderService.js +import api from './api' + +export const workOrderService = { + // 获取我的工单 + async getMyOrders(repairmanId) { + try { + const response = await api.get(`/api/app/repairman/my-orders?repairmanId=${repairmanId}`) + return response.data + } catch (error) { + throw error.response?.data || error.message + } + } +} From 1cb14e428a29b253f48bc8d60d6026c1d44c72c7 Mon Sep 17 00:00:00 2001 From: wanglei <3085637232@qq.com> Date: Tue, 9 Dec 2025 22:19:25 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=99=BB=E5=BD=95?= =?UTF-8?q?=E7=9B=B8=E5=85=B3=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../campus/water/service/RegisterService.java | 83 ++++++++++++------- 1 file changed, 55 insertions(+), 28 deletions(-) diff --git a/src/main/java/com/campus/water/service/RegisterService.java b/src/main/java/com/campus/water/service/RegisterService.java index 045a1a4..7393082 100644 --- a/src/main/java/com/campus/water/service/RegisterService.java +++ b/src/main/java/com/campus/water/service/RegisterService.java @@ -1,35 +1,47 @@ package com.campus.water.service; import com.campus.water.entity.Admin; -import com.campus.water.entity.RepairerAuth; // 改为entity包下的RepairerAuth +import com.campus.water.entity.RepairerAuth; import com.campus.water.entity.User; import com.campus.water.entity.dto.request.RegisterRequest; import com.campus.water.mapper.AdminRepository; import com.campus.water.mapper.RepairerAuthRepository; import com.campus.water.mapper.UserRepository; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.crypto.bcrypt.BCrypt; import org.springframework.stereotype.Service; import org.springframework.util.DigestUtils; import java.nio.charset.StandardCharsets; import java.time.LocalDateTime; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; @Service public class RegisterService { - @Autowired - private AdminRepository adminRepository; - - @Autowired - private UserRepository userRepository; - - @Autowired - private RepairerAuthRepository repairerAuthRepository; + // 允许的管理员角色列表(无前缀,用于校验前端传递的值) + private static final List ALLOWED_ADMIN_ROLES = Arrays.stream(Admin.AdminRole.values()) + .map(role -> role.name().replace("ROLE_", "").toLowerCase()) + .collect(Collectors.toList()); + + private final AdminRepository adminRepository; + private final UserRepository userRepository; + private final RepairerAuthRepository repairerAuthRepository; + + // 构造器注入(Spring 5+ 可省略 @Autowired) + public RegisterService( + AdminRepository adminRepository, + UserRepository userRepository, + RepairerAuthRepository repairerAuthRepository) { + this.adminRepository = adminRepository; + this.userRepository = userRepository; + this.repairerAuthRepository = repairerAuthRepository; + } public boolean register(RegisterRequest request) { String username = request.getUsername(); - // 使用与MD5PasswordEncoder相同的加密逻辑(UTF-8编码) + // 使用 MD5 预处理后再进行 BCrypt 加密(根据实际加密策略调整) String encryptedPwd = DigestUtils.md5DigestAsHex( request.getPassword().getBytes(StandardCharsets.UTF_8) ); @@ -51,9 +63,8 @@ public class RegisterService { return true; } - // RegisterService中handleAdminRegister方法修改 private void handleAdminRegister(String username, String password, RegisterRequest request) { - // 检查用户名/ID/手机号是否已存在 + // 基础校验 if (adminRepository.existsByAdminName(username)) { throw new RuntimeException("管理员用户名已存在"); } @@ -64,23 +75,39 @@ public class RegisterService { throw new RuntimeException("手机号已被注册"); } - // 构建管理员对象,支持指定角色(需从request中接收role参数) + // 角色参数校验与转换 + String rawRole = request.getRole(); + if (rawRole == null || rawRole.trim().isEmpty()) { + throw new RuntimeException("管理员角色不能为空"); + } + String cleanedRole = rawRole.trim().toLowerCase(); + if (!ALLOWED_ADMIN_ROLES.contains(cleanedRole)) { + throw new RuntimeException("无效的管理员角色:" + rawRole + ",允许的值:" + ALLOWED_ADMIN_ROLES); + } + + // 构建角色枚举值 + Admin.AdminRole adminRole; + try { + adminRole = Admin.AdminRole.valueOf("ROLE_" + cleanedRole.toUpperCase()); + } catch (IllegalArgumentException e) { + throw new RuntimeException("角色转换失败:" + rawRole, e); + } + + // 构建并保存管理员对象 Admin admin = new Admin(); admin.setAdminId(request.getAdminId()); admin.setAdminName(username); - admin.setPassword(BCrypt.hashpw(password, BCrypt.gensalt())); // 密码加密 + admin.setPassword(BCrypt.hashpw(password, BCrypt.gensalt())); // BCrypt 加密 admin.setPhone(request.getPhone()); - // 从注册请求中获取角色(需在RegisterRequest添加role字段) - admin.setRole(Admin.AdminRole.valueOf("ROLE_" + request.getRole().toUpperCase())); + admin.setRole(adminRole); admin.setCreatedTime(LocalDateTime.now()); admin.setUpdatedTime(LocalDateTime.now()); adminRepository.save(admin); } - // 学生注册逻辑保持不变 private void handleUserRegister(String studentName, String password, RegisterRequest request) { - // 检查用户名和学号是否已存在(保持不变) + // 学生注册校验 if (userRepository.existsByStudentName(studentName)) { throw new RuntimeException("用户名已存在"); } @@ -88,20 +115,19 @@ public class RegisterService { throw new RuntimeException("学号已被注册"); } - // 创建 User 实体对象(而非 UserPO) + // 构建并保存用户对象 User user = new User(); - user.setPassword(password); // 设置密码 - user.setStudentId(request.getStudentId()); // 设置学号 - user.setStudentName(request.getStudentName()); // 设置学生姓名 - user.setPhone(request.getPhone()); // 新增:保存手机号 - user.setStatus(User.UserStatus.active); // 设置状态(使用 User 类的枚举) + user.setPassword(password); + user.setStudentId(request.getStudentId()); + user.setStudentName(request.getStudentName()); + user.setPhone(request.getPhone()); + user.setStatus(User.UserStatus.active); - // 保存 User 实体(与 UserRepository 类型匹配) userRepository.save(user); } - // 维修人员注册逻辑保持不变 private void handleRepairmanRegister(String username, String password, RegisterRequest request) { + // 维修人员注册校验 if (repairerAuthRepository.existsByUsername(username)) { throw new RuntimeException("维修人员用户名已存在"); } @@ -109,9 +135,10 @@ public class RegisterService { throw new RuntimeException("维修人员ID已被注册"); } + // 构建并保存维修人员对象 RepairerAuth repairman = new RepairerAuth(); repairman.setUsername(username); - repairman.setPassword(password); + repairman.setPassword(password); // 建议统一改为 BCrypt 加密 repairman.setRepairmanId(request.getRepairmanId()); repairman.setAccountStatus(RepairerAuth.AccountStatus.active);