From d6924b211f0f03c517536c10ed91042407988fb7 Mon Sep 17 00:00:00 2001 From: zlwu <704541015@qq.com> Date: Fri, 15 Aug 2025 23:01:07 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/XgHolidayStayController.java | 114 ++ .../org/dromara/xg/domain/XgHolidayStay.java | 203 +++ .../dromara/xg/domain/bo/StudentOptionBo.java | 21 + .../dromara/xg/domain/bo/XgHolidayStayBo.java | 213 +++ .../dromara/xg/domain/vo/StudentOptionVo.java | 156 +++ .../dromara/xg/domain/vo/XgHolidayStayVo.java | 250 ++++ .../xg/mapper/XgHolidayStayMapper.java | 37 + .../xg/service/IXgHolidayStayService.java | 80 ++ .../impl/XgHolidayStayServiceImpl.java | 183 +++ .../holidayStay/XgHolidayStayMapper.xml | 82 ++ .../学工管理-宿舍管理/xg_holiday_stay.sql | 105 ++ .../xg_holiday_stay_dict_data.sql | 40 + .../xg_holiday_stay_sample_data.sql | 259 ++++ .../xg/xgss/holidayStay/holidayStay/index.ts | 142 ++ .../xg/xgss/holidayStay/holidayStay/types.ts | 752 ++++++++++ .../xg/xgss/holidayStay/holidayStay/index.vue | 1220 +++++++++++++++++ 16 files changed, 3857 insertions(+) create mode 100644 backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/controller/XgHolidayStayController.java create mode 100644 backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/XgHolidayStay.java create mode 100644 backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/bo/StudentOptionBo.java create mode 100644 backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/bo/XgHolidayStayBo.java create mode 100644 backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/vo/StudentOptionVo.java create mode 100644 backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/vo/XgHolidayStayVo.java create mode 100644 backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/mapper/XgHolidayStayMapper.java create mode 100644 backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/IXgHolidayStayService.java create mode 100644 backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/impl/XgHolidayStayServiceImpl.java create mode 100644 backend/ruoyi-modules/ruoyi-xg/src/main/resources/mapper/holidayStay/XgHolidayStayMapper.xml create mode 100644 docs/设计文档/database/学工管理-宿舍管理/xg_holiday_stay.sql create mode 100644 docs/设计文档/database/学工管理-宿舍管理/xg_holiday_stay_dict_data.sql create mode 100644 docs/设计文档/database/学工管理-宿舍管理/xg_holiday_stay_sample_data.sql create mode 100644 web/src/api/xg/xgss/holidayStay/holidayStay/index.ts create mode 100644 web/src/api/xg/xgss/holidayStay/holidayStay/types.ts create mode 100644 web/src/views/xg/xgss/holidayStay/holidayStay/index.vue diff --git a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/controller/XgHolidayStayController.java b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/controller/XgHolidayStayController.java new file mode 100644 index 00000000..cf1e6914 --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/controller/XgHolidayStayController.java @@ -0,0 +1,114 @@ +package org.dromara.xg.controller; + +import java.util.List; + +import lombok.RequiredArgsConstructor; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.constraints.*; +import cn.dev33.satoken.annotation.SaCheckPermission; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import org.dromara.common.idempotent.annotation.RepeatSubmit; +import org.dromara.common.log.annotation.Log; +import org.dromara.common.web.core.BaseController; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.core.domain.R; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import org.dromara.common.log.enums.BusinessType; +import org.dromara.common.excel.utils.ExcelUtil; +import org.dromara.xg.domain.vo.XgHolidayStayVo; +import org.dromara.xg.domain.bo.XgHolidayStayBo; +import org.dromara.xg.domain.vo.StudentOptionVo; +import org.dromara.xg.domain.bo.StudentOptionBo; +import org.dromara.xg.service.IXgHolidayStayService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 假期留宿管理 + * + * @author zlwu + * @date 2025-08-15 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/holidayStay/holidayStay") +public class XgHolidayStayController extends BaseController { + + private final IXgHolidayStayService xgHolidayStayService; + + /** + * 查询假期留宿管理列表 + */ + @SaCheckPermission("holidayStay:holidayStay:list") + @GetMapping("/list") + public TableDataInfo list(XgHolidayStayBo bo, PageQuery pageQuery) { + return xgHolidayStayService.queryPageList(bo, pageQuery); + } + + /** + * 导出假期留宿管理列表 + */ + @SaCheckPermission("holidayStay:holidayStay:export") + @Log(title = "假期留宿管理", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(XgHolidayStayBo bo, HttpServletResponse response) { + List list = xgHolidayStayService.queryList(bo); + ExcelUtil.exportExcel(list, "假期留宿管理", XgHolidayStayVo.class, response); + } + + /** + * 获取假期留宿管理详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("holidayStay:holidayStay:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") @PathVariable Long id) { + return R.ok(xgHolidayStayService.queryById(id)); + } + + /** + * 新增假期留宿管理 + */ + @SaCheckPermission("holidayStay:holidayStay:add") + @Log(title = "假期留宿管理", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody XgHolidayStayBo bo) { + return toAjax(xgHolidayStayService.insertByBo(bo)); + } + + /** + * 修改假期留宿管理 + */ + @SaCheckPermission("holidayStay:holidayStay:edit") + @Log(title = "假期留宿管理", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody XgHolidayStayBo bo) { + return toAjax(xgHolidayStayService.updateByBo(bo)); + } + + /** + * 删除假期留宿管理 + * + * @param ids 主键串 + */ + @SaCheckPermission("holidayStay:holidayStay:remove") + @Log(title = "假期留宿管理", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") @PathVariable Long[] ids) { + return toAjax(xgHolidayStayService.deleteWithValidByIds(List.of(ids), true)); + } + + /** + * 获取学生选择器选项列表(支持按学号、姓名检索) + */ + @SaCheckPermission("holidayStay:holidayStay:list") + @GetMapping("/studentOptions") + public TableDataInfo getStudentOptions(StudentOptionBo bo, PageQuery pageQuery) { + return xgHolidayStayService.getStudentOptions(bo, pageQuery); + } +} diff --git a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/XgHolidayStay.java b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/XgHolidayStay.java new file mode 100644 index 00000000..88c2263e --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/XgHolidayStay.java @@ -0,0 +1,203 @@ +package org.dromara.xg.domain; + +import org.dromara.common.tenant.core.TenantEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; + +import java.io.Serial; + +/** + * 假期留宿管理对象 xg_holiday_stay + * + * @author zlwu + * @date 2025-08-15 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("xg_holiday_stay") +public class XgHolidayStay extends TenantEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @TableId(value = "id") + private Long id; + + /** + * 删除标志(0代表存在 1代表删除) + */ + private Long deleted; + + /** + * 学生ID,关联xg_student_msg.id + */ + private Long studentId; + + /** + * 学生姓名 + */ + private String studentName; + + /** + * 学号 + */ + private String studentNo; + + /** + * 班级ID + */ + private Long classId; + + /** + * 班级名称 + */ + private String className; + + /** + * 专业ID + */ + private Long majorId; + + /** + * 专业名称 + */ + private String majorName; + + /** + * 学院ID + */ + private Long collegeId; + + /** + * 学院名称 + */ + private String collegeName; + + /** + * 校区ID,关联xg_dorm_campus.id + */ + private Long campusId; + + /** + * 校区名称 + */ + private String campusName; + + /** + * 宿舍区ID,关联xg_dorm_area.id + */ + private Long areaId; + + /** + * 宿舍区名称 + */ + private String areaName; + + /** + * 宿舍楼ID,关联xg_dorm_building.id + */ + private Long buildingId; + + /** + * 宿舍楼名称 + */ + private String buildingName; + + /** + * 房间ID,关联xg_dorm_room.id + */ + private Long roomId; + + /** + * 房间名称 + */ + private String roomName; + + /** + * 床位ID,关联xg_dorm_bed.id + */ + private Long bedId; + + /** + * 床位名称 + */ + private String bedName; + + /** + * 假期类型(寒假、暑假、春节假期、国庆假期等) + */ + private String holidayType; + + /** + * 申请留宿开始日期 + */ + private Date applyStartDate; + + /** + * 申请留宿结束日期 + */ + private Date applyEndDate; + + /** + * 留宿原因(必填) + */ + private String stayReason; + + /** + * 留宿原因类型(学习、实习、家庭困难、其他) + */ + private String stayReasonType; + + /** + * 学生联系电话 + */ + private String studentPhone; + + /** + * 紧急联系人姓名 + */ + private String emergencyContact; + + /** + * 紧急联系人电话 + */ + private String emergencyPhone; + + /** + * 家长同意(0否 1是) + */ + private String parentConsent; + + /** + * 附件OSS文件ID,多个用逗号分隔(申请材料、证明文件等) + */ + private String attachmentOssIds; + + /** + * 扩展字段1 + */ + private String extField1; + + /** + * 扩展字段2 + */ + private String extField2; + + /** + * 扩展字段3 + */ + private String extField3; + + /** + * 备注信息 + */ + private String remark; + + +} diff --git a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/bo/StudentOptionBo.java b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/bo/StudentOptionBo.java new file mode 100644 index 00000000..235289cb --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/bo/StudentOptionBo.java @@ -0,0 +1,21 @@ +package org.dromara.xg.domain.bo; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.dromara.common.mybatis.core.domain.BaseEntity; + +/** + * 学生选择器查询业务对象 + * + * @author zlwu + * @date 2025-08-15 + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class StudentOptionBo extends BaseEntity { + + /** + * 搜索关键字(学号或姓名) + */ + private String keyword; +} diff --git a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/bo/XgHolidayStayBo.java b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/bo/XgHolidayStayBo.java new file mode 100644 index 00000000..a9b2e0ad --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/bo/XgHolidayStayBo.java @@ -0,0 +1,213 @@ +package org.dromara.xg.domain.bo; + +import org.dromara.xg.domain.XgHolidayStay; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import lombok.EqualsAndHashCode; +import jakarta.validation.constraints.*; +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; + +/** + * 假期留宿管理业务对象 xg_holiday_stay + * + * @author zlwu + * @date 2025-08-15 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = XgHolidayStay.class, reverseConvertGenerate = false) +public class XgHolidayStayBo extends BaseEntity { + + /** + * 主键ID + */ + @NotNull(message = "主键ID不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 删除标志(0代表存在 1代表删除) + */ + private Long deleted; + + /** + * 学生ID,关联xg_student_msg.id + */ + @NotNull(message = "学生ID,关联xg_student_msg.id不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long studentId; + + /** + * 学生姓名 + */ + @NotBlank(message = "学生姓名不能为空", groups = { AddGroup.class, EditGroup.class }) + private String studentName; + + /** + * 学号 + */ + @NotBlank(message = "学号不能为空", groups = { AddGroup.class, EditGroup.class }) + private String studentNo; + + /** + * 班级ID + */ + private Long classId; + + /** + * 班级名称 + */ + private String className; + + /** + * 专业ID + */ + private Long majorId; + + /** + * 专业名称 + */ + private String majorName; + + /** + * 学院ID + */ + private Long collegeId; + + /** + * 学院名称 + */ + private String collegeName; + + /** + * 校区ID,关联xg_dorm_campus.id + */ + private Long campusId; + + /** + * 校区名称 + */ + private String campusName; + + /** + * 宿舍区ID,关联xg_dorm_area.id + */ + private Long areaId; + + /** + * 宿舍区名称 + */ + private String areaName; + + /** + * 宿舍楼ID,关联xg_dorm_building.id + */ + private Long buildingId; + + /** + * 宿舍楼名称 + */ + private String buildingName; + + /** + * 房间ID,关联xg_dorm_room.id + */ + private Long roomId; + + /** + * 房间名称 + */ + private String roomName; + + /** + * 床位ID,关联xg_dorm_bed.id + */ + private Long bedId; + + /** + * 床位名称 + */ + private String bedName; + + /** + * 假期类型(寒假、暑假、春节假期、国庆假期等) + */ + @NotBlank(message = "假期类型(寒假、暑假、春节假期、国庆假期等)不能为空", groups = { AddGroup.class, EditGroup.class }) + private String holidayType; + + /** + * 申请留宿开始日期 + */ + @NotNull(message = "申请留宿开始日期不能为空", groups = { AddGroup.class, EditGroup.class }) + private Date applyStartDate; + + /** + * 申请留宿结束日期 + */ + @NotNull(message = "申请留宿结束日期不能为空", groups = { AddGroup.class, EditGroup.class }) + private Date applyEndDate; + + /** + * 留宿原因(必填) + */ + @NotBlank(message = "留宿原因(必填)不能为空", groups = { AddGroup.class, EditGroup.class }) + private String stayReason; + + /** + * 留宿原因类型(学习、实习、家庭困难、其他) + */ + private String stayReasonType; + + /** + * 学生联系电话 + */ + @NotBlank(message = "学生联系电话不能为空", groups = { AddGroup.class, EditGroup.class }) + private String studentPhone; + + /** + * 紧急联系人姓名 + */ + @NotBlank(message = "紧急联系人姓名不能为空", groups = { AddGroup.class, EditGroup.class }) + private String emergencyContact; + + /** + * 紧急联系人电话 + */ + @NotBlank(message = "紧急联系人电话不能为空", groups = { AddGroup.class, EditGroup.class }) + private String emergencyPhone; + + /** + * 家长同意(0否 1是) + */ + @NotBlank(message = "家长同意(0否 1是)不能为空", groups = { AddGroup.class, EditGroup.class }) + private String parentConsent; + + /** + * 附件OSS文件ID,多个用逗号分隔(申请材料、证明文件等) + */ + private String attachmentOssIds; + + /** + * 扩展字段1 + */ + private String extField1; + + /** + * 扩展字段2 + */ + private String extField2; + + /** + * 扩展字段3 + */ + private String extField3; + + /** + * 备注信息 + */ + private String remark; + + +} diff --git a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/vo/StudentOptionVo.java b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/vo/StudentOptionVo.java new file mode 100644 index 00000000..f70481fa --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/vo/StudentOptionVo.java @@ -0,0 +1,156 @@ +package org.dromara.xg.domain.vo; + +import lombok.Data; +import com.fasterxml.jackson.annotation.JsonFormat; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; + +/** + * 学生选择器选项视图对象 + * + * @author zlwu + * @date 2025-08-15 + */ +@Data +public class StudentOptionVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 学生ID + */ + private Long id; + + /** + * 学号 + */ + private String studentNo; + + /** + * 学生姓名 + */ + private String name; + + /** + * 性别:0-男,1-女 + */ + private String gender; + + /** + * 学院ID + */ + private Long collegeId; + + /** + * 学院名称 + */ + private String collegeName; + + /** + * 专业ID + */ + private Long majorId; + + /** + * 专业名称 + */ + private String majorName; + + /** + * 班级ID + */ + private Long classId; + + /** + * 班级名称 + */ + private String className; + + /** + * 学生联系电话 + */ + private String phone; + + /** + * 宿舍信息 + */ + private DormInfo dormInfo; + + /** + * 基础字段 - 创建者 + */ + private Long createBy; + + /** + * 基础字段 - 创建时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date createTime; + + /** + * 基础字段 - 更新者 + */ + private Long updateBy; + + /** + * 基础字段 - 更新时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date updateTime; + + @Data + public static class DormInfo implements Serializable { + /** + * 校区ID + */ + private Long campusId; + + /** + * 校区名称 + */ + private String campusName; + + /** + * 宿舍区ID + */ + private Long areaId; + + /** + * 宿舍区名称 + */ + private String areaName; + + /** + * 宿舍楼ID + */ + private Long buildingId; + + /** + * 宿舍楼名称 + */ + private String buildingName; + + /** + * 房间ID + */ + private Long roomId; + + /** + * 房间名称 + */ + private String roomName; + + /** + * 床位ID + */ + private Long bedId; + + /** + * 床位名称 + */ + private String bedName; + } +} diff --git a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/vo/XgHolidayStayVo.java b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/vo/XgHolidayStayVo.java new file mode 100644 index 00000000..c7887d40 --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/vo/XgHolidayStayVo.java @@ -0,0 +1,250 @@ +package org.dromara.xg.domain.vo; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.dromara.xg.domain.XgHolidayStay; +import cn.idev.excel.annotation.ExcelIgnoreUnannotated; +import cn.idev.excel.annotation.ExcelProperty; +import org.dromara.common.excel.annotation.ExcelDictFormat; +import org.dromara.common.excel.convert.ExcelDictConvert; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; + + + +/** + * 假期留宿管理视图对象 xg_holiday_stay + * + * @author zlwu + * @date 2025-08-15 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = XgHolidayStay.class) +public class XgHolidayStayVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @ExcelProperty(value = "主键ID") + private Long id; + + /** + * 删除标志(0代表存在 1代表删除) + */ + @ExcelProperty(value = "删除标志", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "0=代表存在,1=代表删除") + private Long deleted; + + /** + * 学生ID,关联xg_student_msg.id + */ + @ExcelProperty(value = "学生ID,关联xg_student_msg.id") + private Long studentId; + + /** + * 学生姓名 + */ + @ExcelProperty(value = "学生姓名") + private String studentName; + + /** + * 学号 + */ + @ExcelProperty(value = "学号") + private String studentNo; + + /** + * 班级ID + */ + @ExcelProperty(value = "班级ID") + private Long classId; + + /** + * 班级名称 + */ + @ExcelProperty(value = "班级名称") + private String className; + + /** + * 专业ID + */ + @ExcelProperty(value = "专业ID") + private Long majorId; + + /** + * 专业名称 + */ + @ExcelProperty(value = "专业名称") + private String majorName; + + /** + * 学院ID + */ + @ExcelProperty(value = "学院ID") + private Long collegeId; + + /** + * 学院名称 + */ + @ExcelProperty(value = "学院名称") + private String collegeName; + + /** + * 校区ID,关联xg_dorm_campus.id + */ + @ExcelProperty(value = "校区ID,关联xg_dorm_campus.id") + private Long campusId; + + /** + * 校区名称 + */ + @ExcelProperty(value = "校区名称") + private String campusName; + + /** + * 宿舍区ID,关联xg_dorm_area.id + */ + @ExcelProperty(value = "宿舍区ID,关联xg_dorm_area.id") + private Long areaId; + + /** + * 宿舍区名称 + */ + @ExcelProperty(value = "宿舍区名称") + private String areaName; + + /** + * 宿舍楼ID,关联xg_dorm_building.id + */ + @ExcelProperty(value = "宿舍楼ID,关联xg_dorm_building.id") + private Long buildingId; + + /** + * 宿舍楼名称 + */ + @ExcelProperty(value = "宿舍楼名称") + private String buildingName; + + /** + * 房间ID,关联xg_dorm_room.id + */ + @ExcelProperty(value = "房间ID,关联xg_dorm_room.id") + private Long roomId; + + /** + * 房间名称 + */ + @ExcelProperty(value = "房间名称") + private String roomName; + + /** + * 床位ID,关联xg_dorm_bed.id + */ + @ExcelProperty(value = "床位ID,关联xg_dorm_bed.id") + private Long bedId; + + /** + * 床位名称 + */ + @ExcelProperty(value = "床位名称") + private String bedName; + + /** + * 假期类型(寒假、暑假、春节假期、国庆假期等) + */ + @ExcelProperty(value = "假期类型", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "xg_holiday_type") + private String holidayType; + + /** + * 申请留宿开始日期 + */ + @ExcelProperty(value = "申请留宿开始日期") + private Date applyStartDate; + + /** + * 申请留宿结束日期 + */ + @ExcelProperty(value = "申请留宿结束日期") + private Date applyEndDate; + + /** + * 留宿原因(必填) + */ + @ExcelProperty(value = "留宿原因", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "必=填") + private String stayReason; + + /** + * 留宿原因类型(学习、实习、家庭困难、其他) + */ + @ExcelProperty(value = "留宿原因类型", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "xg_stay_reason_type") + private String stayReasonType; + + /** + * 学生联系电话 + */ + @ExcelProperty(value = "学生联系电话") + private String studentPhone; + + /** + * 紧急联系人姓名 + */ + @ExcelProperty(value = "紧急联系人姓名") + private String emergencyContact; + + /** + * 紧急联系人电话 + */ + @ExcelProperty(value = "紧急联系人电话") + private String emergencyPhone; + + /** + * 家长同意(0否 1是) + */ + @ExcelProperty(value = "家长同意", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "sys_yesno") + private String parentConsent; + + /** + * 附件OSS文件ID,多个用逗号分隔(申请材料、证明文件等) + */ + @ExcelProperty(value = "附件OSS文件ID,多个用逗号分隔", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "申=请材料、证明文件等") + private String attachmentOssIds; + + /** + * 扩展字段1 + */ + @ExcelProperty(value = "扩展字段1") + private String extField1; + + /** + * 扩展字段2 + */ + @ExcelProperty(value = "扩展字段2") + private String extField2; + + /** + * 扩展字段3 + */ + @ExcelProperty(value = "扩展字段3") + private String extField3; + + /** + * 备注信息 + */ + @ExcelProperty(value = "备注信息") + private String remark; + + +} diff --git a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/mapper/XgHolidayStayMapper.java b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/mapper/XgHolidayStayMapper.java new file mode 100644 index 00000000..0ac190b8 --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/mapper/XgHolidayStayMapper.java @@ -0,0 +1,37 @@ +package org.dromara.xg.mapper; + +import org.dromara.xg.domain.XgHolidayStay; +import org.dromara.xg.domain.vo.XgHolidayStayVo; +import org.dromara.xg.domain.vo.StudentOptionVo; +import org.dromara.xg.domain.bo.StudentOptionBo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.apache.ibatis.annotations.Param; + +/** + * 假期留宿管理Mapper接口 + * + * @author zlwu + * @date 2025-08-15 + */ +public interface XgHolidayStayMapper extends BaseMapperPlus { + + /** + * 查询学生选择器选项列表(支持按学号、姓名检索) + * + * @param page 分页参数 + * @param bo 查询条件 + * @return 学生选项列表 + */ + Page selectStudentOptions(IPage page, @Param("bo") StudentOptionBo bo); + + /** + * 测试查询:简化版本,只查询学生基本信息 + * + * @param page 分页参数 + * @param bo 查询条件 + * @return 学生选项列表 + */ + Page selectStudentOptionsSimple(IPage page, @Param("bo") StudentOptionBo bo); +} diff --git a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/IXgHolidayStayService.java b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/IXgHolidayStayService.java new file mode 100644 index 00000000..449b5842 --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/IXgHolidayStayService.java @@ -0,0 +1,80 @@ +package org.dromara.xg.service; + +import org.dromara.xg.domain.vo.XgHolidayStayVo; +import org.dromara.xg.domain.bo.XgHolidayStayBo; +import org.dromara.xg.domain.vo.StudentOptionVo; +import org.dromara.xg.domain.bo.StudentOptionBo; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; + +import java.util.Collection; +import java.util.List; + +/** + * 假期留宿管理Service接口 + * + * @author zlwu + * @date 2025-08-15 + */ +public interface IXgHolidayStayService { + + /** + * 查询假期留宿管理 + * + * @param id 主键 + * @return 假期留宿管理 + */ + XgHolidayStayVo queryById(Long id); + + /** + * 分页查询假期留宿管理列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 假期留宿管理分页列表 + */ + TableDataInfo queryPageList(XgHolidayStayBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的假期留宿管理列表 + * + * @param bo 查询条件 + * @return 假期留宿管理列表 + */ + List queryList(XgHolidayStayBo bo); + + /** + * 新增假期留宿管理 + * + * @param bo 假期留宿管理 + * @return 是否新增成功 + */ + Boolean insertByBo(XgHolidayStayBo bo); + + /** + * 修改假期留宿管理 + * + * @param bo 假期留宿管理 + * @return 是否修改成功 + */ + Boolean updateByBo(XgHolidayStayBo bo); + + /** + * 校验并批量删除假期留宿管理信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + /** + * 获取学生选择器选项列表(支持按学号、姓名检索) + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 学生选项分页列表 + */ + TableDataInfo getStudentOptions(StudentOptionBo bo, PageQuery pageQuery); + +} diff --git a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/impl/XgHolidayStayServiceImpl.java b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/impl/XgHolidayStayServiceImpl.java new file mode 100644 index 00000000..d5e34aa4 --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/impl/XgHolidayStayServiceImpl.java @@ -0,0 +1,183 @@ +package org.dromara.xg.service.impl; + +import org.dromara.common.core.utils.MapstructUtils; +import org.dromara.common.core.utils.StringUtils; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.dromara.xg.domain.bo.XgHolidayStayBo; +import org.dromara.xg.domain.vo.XgHolidayStayVo; +import org.dromara.xg.domain.XgHolidayStay; +import org.dromara.xg.domain.bo.StudentOptionBo; +import org.dromara.xg.domain.vo.StudentOptionVo; +import org.dromara.xg.mapper.XgHolidayStayMapper; +import org.dromara.xg.service.IXgHolidayStayService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 假期留宿管理Service业务层处理 + * + * @author zlwu + * @date 2025-08-15 + */ +@Slf4j +@RequiredArgsConstructor +@Service +public class XgHolidayStayServiceImpl implements IXgHolidayStayService { + + private final XgHolidayStayMapper baseMapper; + + /** + * 查询假期留宿管理 + * + * @param id 主键 + * @return 假期留宿管理 + */ + @Override + public XgHolidayStayVo queryById(Long id) { + return baseMapper.selectVoById(id); + } + + /** + * 分页查询假期留宿管理列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 假期留宿管理分页列表 + */ + @Override + public TableDataInfo queryPageList(XgHolidayStayBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的假期留宿管理列表 + * + * @param bo 查询条件 + * @return 假期留宿管理列表 + */ + @Override + public List queryList(XgHolidayStayBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(XgHolidayStayBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByAsc(XgHolidayStay::getId); + lqw.eq(bo.getDeleted() != null, XgHolidayStay::getDeleted, bo.getDeleted()); + lqw.eq(bo.getStudentId() != null, XgHolidayStay::getStudentId, bo.getStudentId()); + lqw.like(StringUtils.isNotBlank(bo.getStudentName()), XgHolidayStay::getStudentName, bo.getStudentName()); + lqw.like(StringUtils.isNotBlank(bo.getStudentNo()), XgHolidayStay::getStudentNo, bo.getStudentNo()); + lqw.eq(bo.getClassId() != null, XgHolidayStay::getClassId, bo.getClassId()); + lqw.like(StringUtils.isNotBlank(bo.getClassName()), XgHolidayStay::getClassName, bo.getClassName()); + lqw.eq(bo.getMajorId() != null, XgHolidayStay::getMajorId, bo.getMajorId()); + lqw.like(StringUtils.isNotBlank(bo.getMajorName()), XgHolidayStay::getMajorName, bo.getMajorName()); + lqw.eq(bo.getCollegeId() != null, XgHolidayStay::getCollegeId, bo.getCollegeId()); + lqw.like(StringUtils.isNotBlank(bo.getCollegeName()), XgHolidayStay::getCollegeName, bo.getCollegeName()); + lqw.eq(bo.getCampusId() != null, XgHolidayStay::getCampusId, bo.getCampusId()); + lqw.like(StringUtils.isNotBlank(bo.getCampusName()), XgHolidayStay::getCampusName, bo.getCampusName()); + lqw.eq(bo.getAreaId() != null, XgHolidayStay::getAreaId, bo.getAreaId()); + lqw.like(StringUtils.isNotBlank(bo.getAreaName()), XgHolidayStay::getAreaName, bo.getAreaName()); + lqw.eq(bo.getBuildingId() != null, XgHolidayStay::getBuildingId, bo.getBuildingId()); + lqw.like(StringUtils.isNotBlank(bo.getBuildingName()), XgHolidayStay::getBuildingName, bo.getBuildingName()); + lqw.eq(bo.getRoomId() != null, XgHolidayStay::getRoomId, bo.getRoomId()); + lqw.like(StringUtils.isNotBlank(bo.getRoomName()), XgHolidayStay::getRoomName, bo.getRoomName()); + lqw.eq(bo.getBedId() != null, XgHolidayStay::getBedId, bo.getBedId()); + lqw.like(StringUtils.isNotBlank(bo.getBedName()), XgHolidayStay::getBedName, bo.getBedName()); + lqw.eq(StringUtils.isNotBlank(bo.getHolidayType()), XgHolidayStay::getHolidayType, bo.getHolidayType()); + lqw.ge(bo.getApplyStartDate() != null, XgHolidayStay::getApplyStartDate, bo.getApplyStartDate()); + lqw.le(bo.getApplyEndDate() != null, XgHolidayStay::getApplyEndDate, bo.getApplyEndDate()); + lqw.like(StringUtils.isNotBlank(bo.getStayReason()), XgHolidayStay::getStayReason, bo.getStayReason()); + lqw.eq(StringUtils.isNotBlank(bo.getStayReasonType()), XgHolidayStay::getStayReasonType, + bo.getStayReasonType()); + lqw.like(StringUtils.isNotBlank(bo.getStudentPhone()), XgHolidayStay::getStudentPhone, bo.getStudentPhone()); + lqw.like(StringUtils.isNotBlank(bo.getEmergencyContact()), XgHolidayStay::getEmergencyContact, + bo.getEmergencyContact()); + lqw.like(StringUtils.isNotBlank(bo.getEmergencyPhone()), XgHolidayStay::getEmergencyPhone, + bo.getEmergencyPhone()); + lqw.eq(StringUtils.isNotBlank(bo.getParentConsent()), XgHolidayStay::getParentConsent, bo.getParentConsent()); + lqw.like(StringUtils.isNotBlank(bo.getAttachmentOssIds()), XgHolidayStay::getAttachmentOssIds, + bo.getAttachmentOssIds()); + lqw.eq(StringUtils.isNotBlank(bo.getExtField1()), XgHolidayStay::getExtField1, bo.getExtField1()); + lqw.eq(StringUtils.isNotBlank(bo.getExtField2()), XgHolidayStay::getExtField2, bo.getExtField2()); + lqw.eq(StringUtils.isNotBlank(bo.getExtField3()), XgHolidayStay::getExtField3, bo.getExtField3()); + return lqw; + } + + /** + * 新增假期留宿管理 + * + * @param bo 假期留宿管理 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(XgHolidayStayBo bo) { + XgHolidayStay add = MapstructUtils.convert(bo, XgHolidayStay.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改假期留宿管理 + * + * @param bo 假期留宿管理 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(XgHolidayStayBo bo) { + XgHolidayStay update = MapstructUtils.convert(bo, XgHolidayStay.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(XgHolidayStay entity) { + // TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除假期留宿管理信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if (isValid) { + // TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } + + /** + * 获取学生选择器选项列表(支持按学号、姓名检索) + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 学生选项分页列表 + */ + @Override + public TableDataInfo getStudentOptions(StudentOptionBo bo, PageQuery pageQuery) { + Page result = baseMapper.selectStudentOptions(pageQuery.build(), bo); + return TableDataInfo.build(result); + } +} diff --git a/backend/ruoyi-modules/ruoyi-xg/src/main/resources/mapper/holidayStay/XgHolidayStayMapper.xml b/backend/ruoyi-modules/ruoyi-xg/src/main/resources/mapper/holidayStay/XgHolidayStayMapper.xml new file mode 100644 index 00000000..4cf092d0 --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-xg/src/main/resources/mapper/holidayStay/XgHolidayStayMapper.xml @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/设计文档/database/学工管理-宿舍管理/xg_holiday_stay.sql b/docs/设计文档/database/学工管理-宿舍管理/xg_holiday_stay.sql new file mode 100644 index 00000000..4e7ddf56 --- /dev/null +++ b/docs/设计文档/database/学工管理-宿舍管理/xg_holiday_stay.sql @@ -0,0 +1,105 @@ +-- ---------------------------- +-- 假期留宿管理表 +-- 模块:学工管理-宿舍管理 +-- 功能:管理学生假期留宿申请、审批、入住等全流程 +-- 作者:系统设计 +-- 创建时间:2025-01-27 +-- ---------------------------- + +DROP TABLE IF EXISTS `xg_holiday_stay`; +CREATE TABLE `xg_holiday_stay` ( + -- =============基础字段(强制性)============= + `id` bigint(20) NOT NULL COMMENT '主键ID', + `tenant_id` varchar(20) NOT NULL DEFAULT '000000' COMMENT '租户编号', + `create_dept` bigint(20) DEFAULT NULL COMMENT '创建部门', + `create_by` bigint(20) DEFAULT NULL COMMENT '创建者', + `create_time` datetime DEFAULT NULL COMMENT '创建时间', + `update_by` bigint(20) DEFAULT NULL COMMENT '更新者', + `update_time` datetime DEFAULT NULL COMMENT '更新时间', + `deleted` tinyint(1) DEFAULT 0 COMMENT '删除标志(0代表存在 1代表删除)', + + -- =============业务关联字段============= + `student_id` bigint(20) NOT NULL COMMENT '学生ID,关联xg_student_msg.id', + `student_name` varchar(50) NOT NULL COMMENT '学生姓名', + `student_no` varchar(20) NOT NULL COMMENT '学号', + `class_id` bigint(20) DEFAULT NULL COMMENT '班级ID', + `class_name` varchar(100) DEFAULT NULL COMMENT '班级名称', + `major_id` bigint(20) DEFAULT NULL COMMENT '专业ID', + `major_name` varchar(100) DEFAULT NULL COMMENT '专业名称', + `college_id` bigint(20) DEFAULT NULL COMMENT '学院ID', + `college_name` varchar(100) DEFAULT NULL COMMENT '学院名称', + + -- =============宿舍信息字段============= + `campus_id` bigint(20) DEFAULT NULL COMMENT '校区ID,关联xg_dorm_campus.id', + `campus_name` varchar(100) DEFAULT NULL COMMENT '校区名称', + `area_id` bigint(20) DEFAULT NULL COMMENT '宿舍区ID,关联xg_dorm_area.id', + `area_name` varchar(100) DEFAULT NULL COMMENT '宿舍区名称', + `building_id` bigint(20) DEFAULT NULL COMMENT '宿舍楼ID,关联xg_dorm_building.id', + `building_name` varchar(100) DEFAULT NULL COMMENT '宿舍楼名称', + `room_id` bigint(20) DEFAULT NULL COMMENT '房间ID,关联xg_dorm_room.id', + `room_name` varchar(100) DEFAULT NULL COMMENT '房间名称', + `bed_id` bigint(20) DEFAULT NULL COMMENT '床位ID,关联xg_dorm_bed.id', + `bed_name` varchar(100) DEFAULT NULL COMMENT '床位名称', + + -- =============申请信息字段============= + `holiday_type` varchar(50) NOT NULL COMMENT '假期类型(寒假、暑假、春节假期、国庆假期等)', + `apply_start_date` date NOT NULL COMMENT '申请留宿开始日期', + `apply_end_date` date NOT NULL COMMENT '申请留宿结束日期', + `stay_reason` text NOT NULL COMMENT '留宿原因(必填)', + `stay_reason_type` varchar(20) DEFAULT NULL COMMENT '留宿原因类型(学习、实习、家庭困难、其他)', + + -- =============联系信息字段============= + `student_phone` varchar(20) NOT NULL COMMENT '学生联系电话', + `emergency_contact` varchar(50) NOT NULL COMMENT '紧急联系人姓名', + `emergency_phone` varchar(20) NOT NULL COMMENT '紧急联系人电话', + `parent_consent` char(1) NOT NULL DEFAULT '1' COMMENT '家长同意(0否 1是)', + + -- =============附件字段============= + `attachment_oss_ids` varchar(1000) DEFAULT NULL COMMENT '附件OSS文件ID,多个用逗号分隔(申请材料、证明文件等)', + + -- =============扩展字段============= + `ext_field1` varchar(200) DEFAULT NULL COMMENT '扩展字段1', + `ext_field2` varchar(200) DEFAULT NULL COMMENT '扩展字段2', + `ext_field3` varchar(500) DEFAULT NULL COMMENT '扩展字段3', + `remark` varchar(500) DEFAULT NULL COMMENT '备注信息', + + -- =============索引定义============= + PRIMARY KEY (`id`) USING BTREE, + + -- 基础索引(必须) + KEY `idx_tenant_id` (`tenant_id`), + KEY `idx_deleted` (`deleted`), + KEY `idx_create_time` (`create_time`), + KEY `idx_tenant_deleted` (`tenant_id`, `deleted`), + + -- 业务索引 + KEY `idx_student_id` (`student_id`), + KEY `idx_student_no` (`student_no`) + +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='假期留宿管理表'; + +-- =============表说明============= +/* +表功能说明: +1. 支持学生假期留宿申请的全流程管理 +2. 记录申请信息、管理员处理信息、实际入住信息 +3. 支持费用管理和缴费状态跟踪 +4. 关联宿舍管理相关表(校区、宿舍区、宿舍楼、房间、床位) +5. 支持附件上传和扩展字段 +6. 遵循项目数据库设计规范(强制性基础字段、雪花ID、逻辑删除) + +状态说明: +- 0:申请中 - 学生提交申请,等待管理员处理 +- 1:已安排 - 管理员已安排宿舍,可以入住 +- 2:已取消 - 申请被取消(管理员取消或学生取消) +- 3:已入住 - 学生已办理入住手续 +- 4:已退宿 - 学生已办理退宿手续 + +使用场景: +- 寒假、暑假期间学生留宿申请和管理 +- 春节、国庆等长假期间住宿管理 +- 宿舍管理员直接安排和管理假期留宿学生 +- 留宿费用收取和管理 +- 安全管理和紧急联系人管理 +- 简化流程,提高管理效率 +*/ \ No newline at end of file diff --git a/docs/设计文档/database/学工管理-宿舍管理/xg_holiday_stay_dict_data.sql b/docs/设计文档/database/学工管理-宿舍管理/xg_holiday_stay_dict_data.sql new file mode 100644 index 00000000..9453bffb --- /dev/null +++ b/docs/设计文档/database/学工管理-宿舍管理/xg_holiday_stay_dict_data.sql @@ -0,0 +1,40 @@ +-- ---------------------------- +-- 假期留宿管理相关字典数据 +-- 模块:学工管理-宿舍管理 +-- 功能:为假期留宿管理提供字典数据支持 +-- 创建时间:2025-01-27 +-- ---------------------------- + +-- =============假期类型字典============= +-- 1. 假期类型字典类型 +INSERT INTO `sys_dict_type` (`dict_id`, `tenant_id`, `dict_name`, `dict_type`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) +VALUES (1700000001, '000000', '假期类型', 'xg_holiday_type', 1, now(), 1, now(), '学生假期留宿申请中的假期类型选项'); + +-- 2. 假期类型字典数据 +INSERT INTO `sys_dict_data` (`dict_code`, `tenant_id`, `sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES +(1700000001, '000000', 1, '寒假', 'winter_vacation', 'xg_holiday_type', '', 'primary', 'N', 1, now(), 1, now(), '寒假期间留宿'), +(1700000002, '000000', 2, '暑假', 'summer_vacation', 'xg_holiday_type', '', 'success', 'N', 1, now(), 1, now(), '暑假期间留宿'), +(1700000003, '000000', 3, '春节假期', 'spring_festival', 'xg_holiday_type', '', 'warning', 'N', 1, now(), 1, now(), '春节长假期间留宿'), +(1700000004, '000000', 4, '国庆假期', 'national_day', 'xg_holiday_type', '', 'info', 'N', 1, now(), 1, now(), '国庆长假期间留宿'), +(1700000005, '000000', 5, '五一假期', 'labor_day', 'xg_holiday_type', '', 'default', 'N', 1, now(), 1, now(), '五一假期留宿'), +(1700000006, '000000', 6, '清明假期', 'tomb_sweeping_day', 'xg_holiday_type', '', 'default', 'N', 1, now(), 1, now(), '清明假期留宿'), +(1700000007, '000000', 7, '端午假期', 'dragon_boat_festival', 'xg_holiday_type', '', 'default', 'N', 1, now(), 1, now(), '端午假期留宿'), +(1700000008, '000000', 8, '中秋假期', 'mid_autumn_festival', 'xg_holiday_type', '', 'default', 'N', 1, now(), 1, now(), '中秋假期留宿'), +(1700000009, '000000', 9, '其他假期', 'other_holiday', 'xg_holiday_type', '', 'default', 'N', 1, now(), 1, now(), '其他类型假期留宿'); + +-- =============留宿原因类型字典============= +-- 1. 留宿原因类型字典类型 +INSERT INTO `sys_dict_type` (`dict_id`, `tenant_id`, `dict_name`, `dict_type`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) +VALUES (1700000002, '000000', '留宿原因类型', 'xg_stay_reason_type', 1, now(), 1, now(), '学生假期留宿的原因类型分类'); + +-- 2. 留宿原因类型字典数据 +INSERT INTO `sys_dict_data` (`dict_code`, `tenant_id`, `sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES +(1700000011, '000000', 1, '学习研究', 'study', 'xg_stay_reason_type', '', 'primary', 'Y', 1, now(), 1, now(), '因学习、科研等需要留宿'), +(1700000012, '000000', 2, '实习工作', 'internship', 'xg_stay_reason_type', '', 'success', 'N', 1, now(), 1, now(), '因实习、兼职工作等需要留宿'), +(1700000013, '000000', 3, '家庭困难', 'family_difficulty', 'xg_stay_reason_type', '', 'warning', 'N', 1, now(), 1, now(), '因家庭经济困难无法回家'), +(1700000014, '000000', 4, '路程遥远', 'long_distance', 'xg_stay_reason_type', '', 'info', 'N', 1, now(), 1, now(), '因家距离学校较远,回家不便'), +(1700000015, '000000', 5, '考试准备', 'exam_preparation', 'xg_stay_reason_type', '', 'primary', 'N', 1, now(), 1, now(), '因准备各类考试需要留宿'), +(1700000016, '000000', 6, '项目开发', 'project_development', 'xg_stay_reason_type', '', 'success', 'N', 1, now(), 1, now(), '因参与项目开发需要留宿'), +(1700000017, '000000', 7, '社会实践', 'social_practice', 'xg_stay_reason_type', '', 'info', 'N', 1, now(), 1, now(), '因参与社会实践活动需要留宿'), +(1700000018, '000000', 8, '身体原因', 'health_reason', 'xg_stay_reason_type', '', 'warning', 'N', 1, now(), 1, now(), '因身体健康原因无法回家'), +(1700000019, '000000', 9, '其他原因', 'other', 'xg_stay_reason_type', '', 'default', 'N', 1, now(), 1, now(), '其他特殊原因'); diff --git a/docs/设计文档/database/学工管理-宿舍管理/xg_holiday_stay_sample_data.sql b/docs/设计文档/database/学工管理-宿舍管理/xg_holiday_stay_sample_data.sql new file mode 100644 index 00000000..452b4100 --- /dev/null +++ b/docs/设计文档/database/学工管理-宿舍管理/xg_holiday_stay_sample_data.sql @@ -0,0 +1,259 @@ +-- ---------------------------- +-- 假期留宿管理表示例数据(简化流程版) +-- 模块:学工管理-宿舍管理 +-- 功能:提供假期留宿管理的测试和演示数据 +-- 创建时间:2025-01-27 +-- 更新时间:2025-01-27 - 简化流程,移除审批环节 +-- 注意:本文件仅用于开发测试,生产环境请勿执行 +-- ---------------------------- + +-- =============示例数据说明============= +/* +示例数据涵盖以下简化后的流程场景: +1. 申请中 - 学生刚提交的申请 +2. 已安排 - 管理员已安排宿舍 +3. 已取消 - 申请被取消 +4. 已入住 - 正在留宿中 +5. 已退宿 - 完成留宿流程 + +涵盖多种假期类型和留宿原因,提供完整的业务场景测试数据 +新流程:学生申请 → 管理员直接安排 → 入住 → 退宿 +*/ + +-- 清理现有示例数据(开发环境) +-- DELETE FROM xg_holiday_stay WHERE tenant_id = '000000' AND remark LIKE '%示例数据%'; + +-- =============示例数据1:申请中的寒假留宿申请============= +INSERT INTO `xg_holiday_stay` ( + `id`, `tenant_id`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `deleted`, + `student_id`, `student_name`, `student_no`, `class_id`, `class_name`, `major_id`, `major_name`, `college_id`, `college_name`, + `holiday_type`, `apply_start_date`, `apply_end_date`, `stay_duration`, `stay_reason`, `stay_reason_type`, + `student_phone`, `emergency_contact`, `emergency_phone`, `emergency_relation`, `parent_consent`, + `status`, `safety_commitment`, `rule_commitment`, + `accommodation_fee`, `water_fee`, `electricity_fee`, `total_fee`, `payment_status`, + `remark` +) VALUES ( + 1800000001, '000000', 103, 2001, now(), 2001, now(), 0, + 2100000001, '张三', '2021001001', 2200000001, '计算机科学与技术2021级1班', 2300000001, '计算机科学与技术', 2400000001, '信息工程学院', + 'winter_vacation', '2025-01-25', '2025-02-20', 26, '需要准备研究生入学考试,寒假期间需要在图书馆学习', 'exam_preparation', + '13812345001', '张父', '13812345002', 'father', '1', + '0', '1', '1', + 200.00, 50.00, 100.00, 350.00, '0', + '示例数据 - 申请中的寒假留宿申请' +); + +-- =============示例数据2:已安排的暑假留宿申请============= +INSERT INTO `xg_holiday_stay` ( + `id`, `tenant_id`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `deleted`, + `student_id`, `student_name`, `student_no`, `class_id`, `class_name`, `major_id`, `major_name`, `college_id`, `college_name`, + `campus_id`, `campus_name`, `area_id`, `area_name`, `building_id`, `building_name`, `room_id`, `room_name`, `bed_id`, `bed_name`, + `holiday_type`, `apply_start_date`, `apply_end_date`, `stay_duration`, `stay_reason`, `stay_reason_type`, + `student_phone`, `emergency_contact`, `emergency_phone`, `emergency_relation`, `parent_consent`, + `status`, `handle_by`, `handle_name`, `handle_time`, `handle_remark`, + `safety_commitment`, `rule_commitment`, + `manager_id`, `manager_name`, + `accommodation_fee`, `water_fee`, `electricity_fee`, `total_fee`, `payment_status`, + `remark` +) VALUES ( + 1800000002, '000000', 103, 2001, now(), 2001, now(), 0, + 2100000002, '李四', '2021001002', 2200000002, '软件工程2021级1班', 2300000002, '软件工程', 2400000001, '信息工程学院', + 3100000001, '主校区', 3200000001, '学生宿舍区A区', 3300000001, 'A1栋', 3400000002, 'A1-102', 3500000002, 'A1-102-1', + 'summer_vacation', '2024-07-15', '2024-08-25', 41, '参与导师的科研项目开发,需要在暑假期间继续在实验室工作', 'project_development', + '13812345003', '李母', '13812345004', 'mother', '1', + '1', 4001, '王宿管', '2024-07-10 14:30:00', '科研需要,已安排A1-102床位,请及时缴费', + '1', '1', + 4100000001, '王宿管', + 300.00, 80.00, 150.00, 530.00, '1', + '示例数据 - 已安排的暑假留宿申请' +); + +-- =============示例数据3:已取消的国庆留宿申请============= +INSERT INTO `xg_holiday_stay` ( + `id`, `tenant_id`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `deleted`, + `student_id`, `student_name`, `student_no`, `class_id`, `class_name`, `major_id`, `major_name`, `college_id`, `college_name`, + `holiday_type`, `apply_start_date`, `apply_end_date`, `stay_duration`, `stay_reason`, `stay_reason_type`, + `student_phone`, `emergency_contact`, `emergency_phone`, `emergency_relation`, `parent_consent`, + `status`, `handle_by`, `handle_name`, `handle_time`, `handle_remark`, + `safety_commitment`, `rule_commitment`, + `remark` +) VALUES ( + 1800000003, '000000', 103, 2001, now(), 2001, now(), 0, + 2100000003, '王五', '2021001003', 2200000003, '电子信息工程2021级1班', 2300000003, '电子信息工程', 2400000001, '信息工程学院', + 'national_day', '2024-10-01', '2024-10-07', 7, '想在国庆假期打游戏和追剧,不想回家', 'other', + '13812345005', '王父', '13812345006', 'father', '1', + '2', 4001, '王宿管', '2024-09-28 16:45:00', '申请理由不充分,国庆假期建议回家与家人团聚', + '1', '1', + '示例数据 - 已取消的国庆留宿申请' +); + +-- =============示例数据4:学生取消的春节留宿申请============= +INSERT INTO `xg_holiday_stay` ( + `id`, `tenant_id`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `deleted`, + `student_id`, `student_name`, `student_no`, `class_id`, `class_name`, `major_id`, `major_name`, `college_id`, `college_name`, + `holiday_type`, `apply_start_date`, `apply_end_date`, `stay_duration`, `stay_reason`, `stay_reason_type`, + `student_phone`, `emergency_contact`, `emergency_phone`, `emergency_relation`, `parent_consent`, + `status`, `handle_by`, `handle_name`, `handle_time`, `handle_remark`, + `safety_commitment`, `rule_commitment`, + `remark` +) VALUES ( + 1800000004, '000000', 103, 2001, now(), 2001, now(), 0, + 2100000004, '赵六', '2021001004', 2200000004, '网络工程2021级1班', 2300000004, '网络工程', 2400000001, '信息工程学院', + 'spring_festival', '2025-01-28', '2025-02-15', 18, '家庭困难,路费较贵,春节期间计划留校', 'family_difficulty', + '13812345007', '赵母', '13812345008', 'mother', '1', + '2', 2001, '赵六', '2025-01-26 10:00:00', '学生主动取消,已联系到回家车票', + '1', '1', + '示例数据 - 学生主动取消的春节留宿申请' +); + +-- =============示例数据5:已入住的寒假留宿(当前进行中)============= +INSERT INTO `xg_holiday_stay` ( + `id`, `tenant_id`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `deleted`, + `student_id`, `student_name`, `student_no`, `class_id`, `class_name`, `major_id`, `major_name`, `college_id`, `college_name`, + `campus_id`, `campus_name`, `area_id`, `area_name`, `building_id`, `building_name`, `room_id`, `room_name`, `bed_id`, `bed_name`, + `holiday_type`, `apply_start_date`, `apply_end_date`, `stay_duration`, `stay_reason`, `stay_reason_type`, + `student_phone`, `emergency_contact`, `emergency_phone`, `emergency_relation`, `parent_consent`, + `status`, `handle_by`, `handle_name`, `handle_time`, `handle_remark`, + `actual_checkin_date`, `checkin_by`, `checkin_by_name`, + `safety_commitment`, `rule_commitment`, + `manager_id`, `manager_name`, + `accommodation_fee`, `water_fee`, `electricity_fee`, `total_fee`, `payment_status`, `payment_time`, + `remark` +) VALUES ( + 1800000005, '000000', 103, 2001, now(), 2001, now(), 0, + 2100000005, '钱七', '2021001005', 2200000005, '信息安全2021级1班', 2300000005, '信息安全', 2400000001, '信息工程学院', + 3100000001, '主校区', 3200000001, '学生宿舍区A区', 3300000001, 'A1栋', 3400000003, 'A1-103', 3500000003, 'A1-103-1', + 'winter_vacation', '2025-01-20', '2025-02-25', 36, '参与学校实习项目,需要每天到实验室工作', 'internship', + '13812345009', '钱父', '13812345010', 'father', '1', + '3', 4001, '王宿管', '2025-01-15 10:20:00', '实习项目重要,已安排A1-103床位', + '2025-01-20', 4002, '李宿管', + '1', '1', + 4100000001, '王宿管', + 400.00, 100.00, 200.00, 700.00, '1', '2025-01-18 15:30:00', + '示例数据 - 已入住的寒假留宿(当前进行中)' +); + +-- =============示例数据6:已完成的暑假留宿(已退宿)============= +INSERT INTO `xg_holiday_stay` ( + `id`, `tenant_id`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `deleted`, + `student_id`, `student_name`, `student_no`, `class_id`, `class_name`, `major_id`, `major_name`, `college_id`, `college_name`, + `campus_id`, `campus_name`, `area_id`, `area_name`, `building_id`, `building_name`, `room_id`, `room_name`, `bed_id`, `bed_name`, + `holiday_type`, `apply_start_date`, `apply_end_date`, `stay_duration`, `stay_reason`, `stay_reason_type`, + `student_phone`, `emergency_contact`, `emergency_phone`, `emergency_relation`, `parent_consent`, + `status`, `handle_by`, `handle_name`, `handle_time`, `handle_remark`, + `actual_checkin_date`, `actual_checkout_date`, `actual_stay_duration`, + `checkin_by`, `checkin_by_name`, `checkout_by`, `checkout_by_name`, + `safety_commitment`, `rule_commitment`, + `manager_id`, `manager_name`, + `accommodation_fee`, `water_fee`, `electricity_fee`, `total_fee`, `payment_status`, `payment_time`, + `special_requirements`, + `remark` +) VALUES ( + 1800000006, '000000', 103, 2001, now(), 2001, now(), 0, + 2100000006, '孙八', '2021001006', 2200000006, '物联网工程2021级1班', 2300000006, '物联网工程', 2400000001, '信息工程学院', + 3100000001, '主校区', 3200000001, '学生宿舍区A区', 3300000001, 'A1栋', 3400000004, 'A1-104', 3500000004, 'A1-104-1', + 'summer_vacation', '2024-07-10', '2024-08-20', 41, '准备各类证书考试,暑假需要集中学习', 'exam_preparation', + '13812345011', '孙母', '13812345012', 'mother', '1', + '4', 4001, '王宿管', '2024-07-05 09:15:00', '学习计划详细,安排到安静房间', + '2024-07-10', '2024-08-20', 41, + 4002, '李宿管', 4002, '李宿管', + '1', '1', + 4100000001, '王宿管', + 350.00, 90.00, 160.00, 600.00, '1', '2024-07-08 14:20:00', + '学生要求安静的学习环境,已安排到相对安静的房间', + '示例数据 - 已完成的暑假留宿(已退宿)' +); + +-- =============示例数据7:家庭困难的五一留宿申请(已安排)============= +INSERT INTO `xg_holiday_stay` ( + `id`, `tenant_id`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `deleted`, + `student_id`, `student_name`, `student_no`, `class_id`, `class_name`, `major_id`, `major_name`, `college_id`, `college_name`, + `campus_id`, `campus_name`, `area_id`, `area_name`, `building_id`, `building_name`, `room_id`, `room_name`, `bed_id`, `bed_name`, + `holiday_type`, `apply_start_date`, `apply_end_date`, `stay_duration`, `stay_reason`, `stay_reason_type`, + `student_phone`, `emergency_contact`, `emergency_phone`, `emergency_relation`, `parent_consent`, + `status`, `handle_by`, `handle_name`, `handle_time`, `handle_remark`, + `safety_commitment`, `rule_commitment`, + `manager_id`, `manager_name`, + `accommodation_fee`, `water_fee`, `electricity_fee`, `total_fee`, `payment_status`, + `attachment_oss_ids`, + `remark` +) VALUES ( + 1800000007, '000000', 103, 2001, now(), 2001, now(), 0, + 2100000007, '周九', '2021001007', 2200000007, '数据科学与大数据技术2021级1班', 2300000007, '数据科学与大数据技术', 2400000002, '数学与统计学院', + 3100000001, '主校区', 3200000002, '学生宿舍区B区', 3300000002, 'B1栋', 3400000005, 'B1-101', 3500000005, 'B1-101-1', + 'labor_day', '2024-05-01', '2024-05-05', 5, '家庭经济困难,路费负担较重,五一假期申请留校', 'family_difficulty', + '13812345013', '周父', '13812345014', 'father', '1', + '1', 4003, '张宿管', '2024-04-28 11:40:00', '家庭情况属实,给予照顾,已安排B1-101床位', + '1', '1', + 4100000002, '张宿管', + 50.00, 20.00, 30.00, 100.00, '0', + 'oss_id_001,oss_id_002', + '示例数据 - 家庭困难的五一留宿申请,已上传贫困证明材料' +); + +-- =============示例数据8:路程遥远的端午留宿申请============= +INSERT INTO `xg_holiday_stay` ( + `id`, `tenant_id`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `deleted`, + `student_id`, `student_name`, `student_no`, `class_id`, `class_name`, `major_id`, `major_name`, `college_id`, `college_name`, + `holiday_type`, `apply_start_date`, `apply_end_date`, `stay_duration`, `stay_reason`, `stay_reason_type`, + `student_phone`, `emergency_contact`, `emergency_phone`, `emergency_relation`, `parent_consent`, + `status`, `safety_commitment`, `rule_commitment`, + `accommodation_fee`, `water_fee`, `electricity_fee`, `total_fee`, `payment_status`, + `ext_field1`, `ext_field2`, + `remark` +) VALUES ( + 1800000008, '000000', 103, 2001, now(), 2001, now(), 0, + 2100000008, '吴十', '2021001008', 2200000008, '应用数学2021级1班', 2300000008, '应用数学', 2400000002, '数学与统计学院', + 'dragon_boat_festival', '2024-06-08', '2024-06-10', 3, '家在新疆,路程遥远,端午假期只有3天时间,来回路程就需要2天,申请留校', 'long_distance', + '13812345015', '吴母', '13812345016', 'mother', '1', + '0', '1', '1', + 30.00, 10.00, 20.00, 60.00, '0', + '学生家庭地址:新疆乌鲁木齐市', '单程需要1天时间', + '示例数据 - 路程遥远的端午留宿申请' +); + +-- =============统计信息查询============= +/* +-- 查看示例数据统计 +SELECT + holiday_type AS '假期类型', + status AS '申请状态', + COUNT(*) AS '数量' +FROM xg_holiday_stay +WHERE remark LIKE '%示例数据%' +GROUP BY holiday_type, status +ORDER BY holiday_type, status; + +-- 查看不同留宿原因统计 +SELECT + stay_reason_type AS '留宿原因类型', + COUNT(*) AS '数量' +FROM xg_holiday_stay +WHERE remark LIKE '%示例数据%' +GROUP BY stay_reason_type +ORDER BY COUNT(*) DESC; + +-- 查看费用统计 +SELECT + AVG(total_fee) AS '平均费用', + MAX(total_fee) AS '最高费用', + MIN(total_fee) AS '最低费用', + SUM(CASE WHEN payment_status = '1' THEN total_fee ELSE 0 END) AS '已收费用' +FROM xg_holiday_stay +WHERE remark LIKE '%示例数据%'; + +-- 查看简化流程状态分布 +SELECT + CASE status + WHEN '0' THEN '申请中' + WHEN '1' THEN '已安排' + WHEN '2' THEN '已取消' + WHEN '3' THEN '已入住' + WHEN '4' THEN '已退宿' + ELSE '未知状态' + END AS '状态', + COUNT(*) AS '数量' +FROM xg_holiday_stay +WHERE remark LIKE '%示例数据%' +GROUP BY status +ORDER BY status; +*/ \ No newline at end of file diff --git a/web/src/api/xg/xgss/holidayStay/holidayStay/index.ts b/web/src/api/xg/xgss/holidayStay/holidayStay/index.ts new file mode 100644 index 00000000..7feb7655 --- /dev/null +++ b/web/src/api/xg/xgss/holidayStay/holidayStay/index.ts @@ -0,0 +1,142 @@ +import request from '@/utils/request'; +import { AxiosPromise } from 'axios'; +import { HolidayStayVO, HolidayStayForm, HolidayStayQuery, StudentOptionVO, StudentOptionQuery } from '@/api/xg/xgss/holidayStay/holidayStay/types'; + +/** + * 查询假期留宿管理列表 + * @param query + * @returns {*} + */ + +export const listHolidayStay = (query?: HolidayStayQuery): AxiosPromise => { + return request({ + url: '/holidayStay/holidayStay/list', + method: 'get', + params: query + }); +}; + +/** + * 查询假期留宿管理详细 + * @param id + */ +export const getHolidayStay = (id: string | number): AxiosPromise => { + return request({ + url: '/holidayStay/holidayStay/' + id, + method: 'get' + }); +}; + +/** + * 新增假期留宿管理 + * @param data + */ +export const addHolidayStay = (data: HolidayStayForm) => { + return request({ + url: '/holidayStay/holidayStay', + method: 'post', + data: data + }); +}; + +/** + * 修改假期留宿管理 + * @param data + */ +export const updateHolidayStay = (data: HolidayStayForm) => { + return request({ + url: '/holidayStay/holidayStay', + method: 'put', + data: data + }); +}; + +/** + * 删除假期留宿管理 + * @param id + */ +export const delHolidayStay = (id: string | number | Array) => { + return request({ + url: '/holidayStay/holidayStay/' + id, + method: 'delete' + }); +}; + +/** + * 获取学生选择器选项列表(支持按学号、姓名检索) + * @param query 查询参数 + * @returns 学生选项列表 + */ +export const getStudentOptions = (query?: StudentOptionQuery): AxiosPromise<{ + total: number; + rows: StudentOptionVO[]; +}> => { + return request({ + url: '/holidayStay/holidayStay/studentOptions', + method: 'get', + params: query + }); +}; + +/** + * 获取校区选项列表 + * @returns 校区选项列表 + */ +export const getCampusOptions = (): AxiosPromise => { + return request({ + url: '/xqxx/dormCampus/list', + method: 'get' + }); +}; + +/** + * 获取指定校区的宿舍区选项列表 + * @param campusId 校区ID + * @returns 宿舍区选项列表 + */ +export const getAreaOptions = (campusId?: string | number): AxiosPromise => { + return request({ + url: '/ssqxx/dormArea/list', + method: 'get', + params: campusId ? { campusId } : undefined + }); +}; + +/** + * 获取指定宿舍区的宿舍楼选项列表 + * @param areaId 宿舍区ID + * @returns 宿舍楼选项列表 + */ +export const getBuildingOptions = (areaId?: string | number): AxiosPromise => { + return request({ + url: '/sslxx/dormBuilding/list', + method: 'get', + params: areaId ? { areaId } : undefined + }); +}; + +/** + * 获取指定宿舍楼的房间选项列表 + * @param buildingId 宿舍楼ID + * @returns 房间选项列表 + */ +export const getRoomOptions = (buildingId?: string | number): AxiosPromise => { + return request({ + url: '/xgss/dormRoom/list', + method: 'get', + params: buildingId ? { buildingId } : undefined + }); +}; + +/** + * 获取指定房间的床位选项列表 + * @param roomId 房间ID + * @returns 床位选项列表 + */ +export const getBedOptions = (roomId?: string | number): AxiosPromise => { + return request({ + url: '/dormbed/dormBed/list', + method: 'get', + params: roomId ? { roomId } : undefined + }); +}; diff --git a/web/src/api/xg/xgss/holidayStay/holidayStay/types.ts b/web/src/api/xg/xgss/holidayStay/holidayStay/types.ts new file mode 100644 index 00000000..b181516f --- /dev/null +++ b/web/src/api/xg/xgss/holidayStay/holidayStay/types.ts @@ -0,0 +1,752 @@ +export interface HolidayStayVO { + /** + * 主键ID + */ + id: string | number; + + /** + * 删除标志(0代表存在 1代表删除) + */ + deleted: number; + + /** + * 学生ID,关联xg_student_msg.id + */ + studentId: string | number; + + /** + * 学生姓名 + */ + studentName: string; + + /** + * 学号 + */ + studentNo: string; + + /** + * 班级ID + */ + classId: string | number; + + /** + * 班级名称 + */ + className: string; + + /** + * 专业ID + */ + majorId: string | number; + + /** + * 专业名称 + */ + majorName: string; + + /** + * 学院ID + */ + collegeId: string | number; + + /** + * 学院名称 + */ + collegeName: string; + + /** + * 校区ID,关联xg_dorm_campus.id + */ + campusId: string | number; + + /** + * 校区名称 + */ + campusName: string; + + /** + * 宿舍区ID,关联xg_dorm_area.id + */ + areaId: string | number; + + /** + * 宿舍区名称 + */ + areaName: string; + + /** + * 宿舍楼ID,关联xg_dorm_building.id + */ + buildingId: string | number; + + /** + * 宿舍楼名称 + */ + buildingName: string; + + /** + * 房间ID,关联xg_dorm_room.id + */ + roomId: string | number; + + /** + * 房间名称 + */ + roomName: string; + + /** + * 床位ID,关联xg_dorm_bed.id + */ + bedId: string | number; + + /** + * 床位名称 + */ + bedName: string; + + /** + * 假期类型(寒假、暑假、春节假期、国庆假期等) + */ + holidayType: string | number; + + /** + * 申请留宿开始日期 + */ + applyStartDate: string; + + /** + * 申请留宿结束日期 + */ + applyEndDate: string; + + /** + * 留宿原因(必填) + */ + stayReason: string; + + /** + * 留宿原因类型(学习、实习、家庭困难、其他) + */ + stayReasonType: string; + + /** + * 学生联系电话 + */ + studentPhone: string; + + /** + * 紧急联系人姓名 + */ + emergencyContact: string; + + /** + * 紧急联系人电话 + */ + emergencyPhone: string; + + /** + * 家长同意(0否 1是) + */ + parentConsent: string; + + /** + * 附件OSS文件ID,多个用逗号分隔(申请材料、证明文件等) + */ + attachmentOssIds: string | number; + + /** + * 扩展字段1 + */ + extField1: string; + + /** + * 扩展字段2 + */ + extField2: string; + + /** + * 扩展字段3 + */ + extField3: string; + + /** + * 备注信息 + */ + remark: string; + +} + +export interface HolidayStayForm extends BaseEntity { + /** + * 主键ID + */ + id?: string | number; + + /** + * 删除标志(0代表存在 1代表删除) + */ + deleted?: number; + + /** + * 学生ID,关联xg_student_msg.id + */ + studentId?: string | number; + + /** + * 学生姓名 + */ + studentName?: string; + + /** + * 学号 + */ + studentNo?: string; + + /** + * 班级ID + */ + classId?: string | number; + + /** + * 班级名称 + */ + className?: string; + + /** + * 专业ID + */ + majorId?: string | number; + + /** + * 专业名称 + */ + majorName?: string; + + /** + * 学院ID + */ + collegeId?: string | number; + + /** + * 学院名称 + */ + collegeName?: string; + + /** + * 校区ID,关联xg_dorm_campus.id + */ + campusId?: string | number; + + /** + * 校区名称 + */ + campusName?: string; + + /** + * 宿舍区ID,关联xg_dorm_area.id + */ + areaId?: string | number; + + /** + * 宿舍区名称 + */ + areaName?: string; + + /** + * 宿舍楼ID,关联xg_dorm_building.id + */ + buildingId?: string | number; + + /** + * 宿舍楼名称 + */ + buildingName?: string; + + /** + * 房间ID,关联xg_dorm_room.id + */ + roomId?: string | number; + + /** + * 房间名称 + */ + roomName?: string; + + /** + * 床位ID,关联xg_dorm_bed.id + */ + bedId?: string | number; + + /** + * 床位名称 + */ + bedName?: string; + + /** + * 假期类型(寒假、暑假、春节假期、国庆假期等) + */ + holidayType?: string | number; + + /** + * 申请留宿开始日期 + */ + applyStartDate?: string; + + /** + * 申请留宿结束日期 + */ + applyEndDate?: string; + + /** + * 留宿原因(必填) + */ + stayReason?: string; + + /** + * 留宿原因类型(学习、实习、家庭困难、其他) + */ + stayReasonType?: string; + + /** + * 学生联系电话 + */ + studentPhone?: string; + + /** + * 紧急联系人姓名 + */ + emergencyContact?: string; + + /** + * 紧急联系人电话 + */ + emergencyPhone?: string; + + /** + * 家长同意(0否 1是) + */ + parentConsent?: string; + + /** + * 附件OSS文件ID,多个用逗号分隔(申请材料、证明文件等) + */ + attachmentOssIds?: string | number; + + /** + * 扩展字段1 + */ + extField1?: string; + + /** + * 扩展字段2 + */ + extField2?: string; + + /** + * 扩展字段3 + */ + extField3?: string; + + /** + * 备注信息 + */ + remark?: string; + +} + +export interface HolidayStayQuery extends PageQuery { + + /** + * 删除标志(0代表存在 1代表删除) + */ + deleted?: number; + + /** + * 学生ID,关联xg_student_msg.id + */ + studentId?: string | number; + + /** + * 学生姓名 + */ + studentName?: string; + + /** + * 学号 + */ + studentNo?: string; + + /** + * 班级ID + */ + classId?: string | number; + + /** + * 班级名称 + */ + className?: string; + + /** + * 专业ID + */ + majorId?: string | number; + + /** + * 专业名称 + */ + majorName?: string; + + /** + * 学院ID + */ + collegeId?: string | number; + + /** + * 学院名称 + */ + collegeName?: string; + + /** + * 校区ID,关联xg_dorm_campus.id + */ + campusId?: string | number; + + /** + * 校区名称 + */ + campusName?: string; + + /** + * 宿舍区ID,关联xg_dorm_area.id + */ + areaId?: string | number; + + /** + * 宿舍区名称 + */ + areaName?: string; + + /** + * 宿舍楼ID,关联xg_dorm_building.id + */ + buildingId?: string | number; + + /** + * 宿舍楼名称 + */ + buildingName?: string; + + /** + * 房间ID,关联xg_dorm_room.id + */ + roomId?: string | number; + + /** + * 房间名称 + */ + roomName?: string; + + /** + * 床位ID,关联xg_dorm_bed.id + */ + bedId?: string | number; + + /** + * 床位名称 + */ + bedName?: string; + + /** + * 假期类型(寒假、暑假、春节假期、国庆假期等) + */ + holidayType?: string | number; + + /** + * 申请留宿开始日期 + */ + applyStartDate?: string; + + /** + * 申请留宿结束日期 + */ + applyEndDate?: string; + + /** + * 留宿原因(必填) + */ + stayReason?: string; + + /** + * 留宿原因类型(学习、实习、家庭困难、其他) + */ + stayReasonType?: string; + + /** + * 学生联系电话 + */ + studentPhone?: string; + + /** + * 紧急联系人姓名 + */ + emergencyContact?: string; + + /** + * 紧急联系人电话 + */ + emergencyPhone?: string; + + /** + * 家长同意(0否 1是) + */ + parentConsent?: string; + + /** + * 附件OSS文件ID,多个用逗号分隔(申请材料、证明文件等) + */ + attachmentOssIds?: string | number; + + /** + * 扩展字段1 + */ + extField1?: string; + + /** + * 扩展字段2 + */ + extField2?: string; + + /** + * 扩展字段3 + */ + extField3?: string; + + /** + * 日期范围参数 + */ + params?: any; +} + +/** + * 学生选择器选项 + */ +export interface StudentOptionVO { + /** + * 学生ID + */ + id: string | number; + + /** + * 学号 + */ + studentNo: string; + + /** + * 学生姓名 + */ + name: string; + + /** + * 性别:0-男,1-女 + */ + gender: string; + + /** + * 学院ID + */ + collegeId?: string | number; + + /** + * 学院名称 + */ + collegeName?: string; + + /** + * 专业ID + */ + majorId?: string | number; + + /** + * 专业名称 + */ + majorName?: string; + + /** + * 班级ID + */ + classId?: string | number; + + /** + * 班级名称 + */ + className?: string; + + /** + * 学生联系电话 + */ + phone?: string; + + /** + * 宿舍信息 + */ + dormInfo?: { + campusId?: string | number; + campusName?: string; + areaId?: string | number; + areaName?: string; + buildingId?: string | number; + buildingName?: string; + roomId?: string | number; + roomName?: string; + bedId?: string | number; + bedName?: string; + }; +} + +/** + * 学生选择器查询参数 + */ +export interface StudentOptionQuery { + /** + * 搜索关键字(学号或姓名) + */ + keyword?: string; + + /** + * 页码 + */ + pageNum?: number; + + /** + * 每页大小 + */ + pageSize?: number; +} + +/** + * 校区选项 + */ +export interface CampusOptionVO { + /** + * 校区ID + */ + id: string | number; + + /** + * 校区名称 + */ + campusName: string; + + /** + * 校区编码 + */ + campusCode?: string; +} + +/** + * 宿舍区选项 + */ +export interface AreaOptionVO { + /** + * 宿舍区ID + */ + id: string | number; + + /** + * 宿舍区名称 + */ + areaName: string; + + /** + * 校区ID + */ + campusId: string | number; + + /** + * 校区名称 + */ + campusName?: string; +} + +/** + * 宿舍楼选项 + */ +export interface BuildingOptionVO { + /** + * 宿舍楼ID + */ + id: string | number; + + /** + * 宿舍楼名称 + */ + buildingName: string; + + /** + * 宿舍区ID + */ + areaId: string | number; + + /** + * 宿舍区名称 + */ + areaName?: string; +} + +/** + * 房间选项 + */ +export interface RoomOptionVO { + /** + * 房间ID + */ + id: string | number; + + /** + * 房间名称 + */ + roomName: string; + + /** + * 宿舍楼ID + */ + buildingId: string | number; + + /** + * 宿舍楼名称 + */ + buildingName?: string; +} + +/** + * 床位选项 + */ +export interface BedOptionVO { + /** + * 床位ID + */ + id: string | number; + + /** + * 床位名称 + */ + bedName: string; + + /** + * 房间ID + */ + roomId: string | number; + + /** + * 房间名称 + */ + roomName?: string; + + /** + * 床位状态(0-空闲,1-已分配,2-已入住) + */ + bedStatus?: string; +} + + + diff --git a/web/src/views/xg/xgss/holidayStay/holidayStay/index.vue b/web/src/views/xg/xgss/holidayStay/holidayStay/index.vue new file mode 100644 index 00000000..fcb6b82e --- /dev/null +++ b/web/src/views/xg/xgss/holidayStay/holidayStay/index.vue @@ -0,0 +1,1220 @@ + + + + +