From 64f805cca4ba30c9ff48427c9e43397c08bc0775 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cwuzhen=E2=80=9D?= Date: Tue, 22 Sep 2026 15:37:46 +0800 Subject: [PATCH] =?UTF-8?q?fix(dorm):=20=E7=82=B9=E5=90=8D=E8=AF=B7?= =?UTF-8?q?=E5=81=87=E4=BB=85=E8=AE=A4=E5=AE=A1=E6=89=B9=E5=AE=8C=E6=88=90?= =?UTF-8?q?=EF=BC=8C=E5=B9=B6=E4=BF=AE=E6=AD=A3=E7=82=B9=E5=90=8D=E6=97=B6?= =?UTF-8?q?=E9=97=B4=E6=97=B6=E5=8C=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 宿舍点名/卫生检查只展示 finish 请假;点名提交改用服务端本地时间,避免 toISOString 少 8 小时。 Co-authored-by: Cursor --- .../org/dromara/xg/service/IXgStudentLeaveService.java | 3 ++- .../dromara/xg/service/impl/XgDormRollCallServiceImpl.java | 3 +++ .../dromara/xg/service/impl/XgStudentLeaveServiceImpl.java | 7 ++++--- .../src/pages/xgss/ssdm/components/RoomRollCallPopup.vue | 7 ++++++- .../xgss/dormRollCall/dormRollCall/RoomRollCallPopup.vue | 3 ++- 5 files changed, 17 insertions(+), 6 deletions(-) diff --git a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/IXgStudentLeaveService.java b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/IXgStudentLeaveService.java index 1c877494..20664fcd 100644 --- a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/IXgStudentLeaveService.java +++ b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/IXgStudentLeaveService.java @@ -69,7 +69,8 @@ public interface IXgStudentLeaveService { Boolean deleteWithValidByIds(Collection ids, Boolean isValid); /** - * 根据学生ID列表和检查日期查询学生请假信息 + * 根据学生ID列表和检查日期查询已审批结束的请假信息。 + * 审批中(waiting)、草稿、退回、撤销不返回,宿舍点名和卫生检查因此不显示请假。 * * @param studentIds 学生ID列表 * @param checkDate 检查日期 diff --git a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/impl/XgDormRollCallServiceImpl.java b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/impl/XgDormRollCallServiceImpl.java index 591d1dd6..669dbdd4 100644 --- a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/impl/XgDormRollCallServiceImpl.java +++ b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/impl/XgDormRollCallServiceImpl.java @@ -252,6 +252,9 @@ public class XgDormRollCallServiceImpl implements IXgDormRollCallService { } catch (Exception ignored) { } } + + // 点名时间以服务端本地时间为准。前端 toISOString() 会提交 UTC,北京时间会少 8 小时。 + bo.setCheckDate(new Date()); } @Override diff --git a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/impl/XgStudentLeaveServiceImpl.java b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/impl/XgStudentLeaveServiceImpl.java index 16f4f414..af306b4c 100644 --- a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/impl/XgStudentLeaveServiceImpl.java +++ b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/impl/XgStudentLeaveServiceImpl.java @@ -613,7 +613,8 @@ public class XgStudentLeaveServiceImpl implements IXgStudentLeaveService { } /** - * 根据学生ID列表和检查日期查询学生请假信息 + * 根据学生ID列表和检查日期查询已审批结束的请假信息。 + * 仅 approval_status = finish 且检查时间落在请假区间内的记录会返回。 * * @param studentIds 学生ID列表 * @param checkDate 检查日期 @@ -627,8 +628,8 @@ public class XgStudentLeaveServiceImpl implements IXgStudentLeaveService { LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); lqw.in(XgStudentLeave::getStudentId, studentIds); - // 查询审核状态为"waiting"(待审核)或"finish"(已完成)的请假记录 - lqw.in(XgStudentLeave::getApprovalStatus, "waiting", "finish"); + // 宿舍点名、卫生检查等状态展示:审批未结束不视为请假,仅 finish(审批全部结束) + lqw.eq(XgStudentLeave::getApprovalStatus, BusinessStatusEnum.FINISH.getStatus()); // 检查日期在请假时间段内 lqw.le(XgStudentLeave::getStartTime, checkDate); lqw.ge(XgStudentLeave::getEndTime, checkDate); diff --git a/mobile/src/pages/xgss/ssdm/components/RoomRollCallPopup.vue b/mobile/src/pages/xgss/ssdm/components/RoomRollCallPopup.vue index 715bfbaa..974983cf 100644 --- a/mobile/src/pages/xgss/ssdm/components/RoomRollCallPopup.vue +++ b/mobile/src/pages/xgss/ssdm/components/RoomRollCallPopup.vue @@ -267,6 +267,11 @@ export default { } }, + formatLocalDateTime(date) { + const pad = (n) => String(n).padStart(2, '0'); + return `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())} ${pad(date.getHours())}:${pad(date.getMinutes())}:${pad(date.getSeconds())}`; + }, + async handleSubmit() { if (!this.buildingId || !this.roomId) { uni.showToast({ title: '缺少必要参数', icon: 'none' }); @@ -296,7 +301,7 @@ export default { const submitData = { batchNo: this.batchNo, - checkDate: new Date().toISOString().slice(0, 19).replace('T', ' '), + checkDate: this.formatLocalDateTime(new Date()), buildingId: this.buildingId, roomId: this.roomId, roomName: this.roomName, diff --git a/web/src/views/xg/xgss/dormRollCall/dormRollCall/RoomRollCallPopup.vue b/web/src/views/xg/xgss/dormRollCall/dormRollCall/RoomRollCallPopup.vue index fff6d650..56e0a34c 100644 --- a/web/src/views/xg/xgss/dormRollCall/dormRollCall/RoomRollCallPopup.vue +++ b/web/src/views/xg/xgss/dormRollCall/dormRollCall/RoomRollCallPopup.vue @@ -47,6 +47,7 @@ import { submitRollCall } from '@/api/xg/xgss/dormRollCall/dormRollCall/index'; import { DormRollCallDetailForm, DormRollCallForm } from '@/api/xg/xgss/dormRollCall/dormRollCall/types'; import { getRoomStudents } from '@/api/xg/xgss/dormBedStudent/dormBedStudent/index'; import request from '@/utils/request'; +import { parseTime } from '@/utils/ruoyi'; console.log('[点名调试] RoomRollCallPopup 组件已加载'); @@ -251,7 +252,7 @@ const handleSubmit = async () => { const submitData: DormRollCallForm = { batchNo: props.batchNo, - checkDate: new Date().toISOString().slice(0, 19).replace('T', ' '), + checkDate: parseTime(new Date(), '{y}-{m}-{d} {h}:{i}:{s}'), buildingId: props.buildingId, roomId: props.roomId, roomName: props.roomName,