diff --git a/backend/script/sql/update/update_20261021_leave_type_temp_back_dorm.sql b/backend/script/sql/update/update_20261021_leave_type_temp_back_dorm.sql
new file mode 100644
index 00000000..18fb37be
--- /dev/null
+++ b/backend/script/sql/update/update_20261021_leave_type_temp_back_dorm.sql
@@ -0,0 +1,168 @@
+-- =============================================================================
+-- 请假类型调整:下线「外出请假」「回家请假」,新增「临时回寝」
+-- 日期:2026-10-21
+--
+-- 客户确认策略:
+-- - 历史请假单:不改类型(仍显示原「外出请假」「回家请假」)
+-- - 新建/编辑可选列表:不再出现外出、回家;可选择「临时回寝」
+--
+-- 影响表:仅 xg_leave_type_config
+-- 1) 旧类型:软删除 deleted=1 + 关闭 is_enabled=0(不物理删)
+-- 2) 新增:临时回寝 TEMP_BACK_DORM
+--
+-- 不碰:xg_student_leave(历史业务数据零修改)
+--
+-- 执行顺序:
+-- ① 只跑「一、执行前核查」
+-- ② 确认后跑「二、变更」
+-- ③ 「三、验收」通过再 COMMIT,否则 ROLLBACK
+-- =============================================================================
+
+-- -----------------------------------------------------------------------------
+-- 一、执行前核查(只读)
+-- -----------------------------------------------------------------------------
+
+-- 1.1 当前类型配置
+SELECT
+ id,
+ leave_type_code,
+ leave_type_name,
+ is_enabled,
+ deleted,
+ sort_order
+FROM xg_leave_type_config
+ORDER BY sort_order, id;
+
+-- 1.2 将被下线的配置(预期:外出 / 回家)
+SELECT id, leave_type_code, leave_type_name, is_enabled, deleted
+FROM xg_leave_type_config
+WHERE deleted = 0
+ AND (
+ leave_type_code IN ('OUT_LEAVE', 'HOME_LEAVE')
+ OR leave_type_name IN ('外出请假', '回家请假')
+ );
+
+-- 1.3 历史单仍保留旧类型(本脚本不会改这些行,仅供对照)
+SELECT leave_type_code, leave_type_name, COUNT(*) AS cnt
+FROM xg_student_leave
+WHERE deleted = 0
+ AND (
+ leave_type_code IN ('OUT_LEAVE', 'HOME_LEAVE')
+ OR leave_type_name IN ('外出请假', '回家请假')
+ )
+GROUP BY leave_type_code, leave_type_name;
+
+-- =============================================================================
+-- 二、变更(事务)
+-- =============================================================================
+
+START TRANSACTION;
+
+-- 2.1 新增「临时回寝」(幂等:已有同编码或同名称则跳过)
+INSERT INTO xg_leave_type_config (
+ id,
+ tenant_id,
+ create_dept,
+ create_by,
+ create_time,
+ update_by,
+ update_time,
+ deleted,
+ leave_type_name,
+ leave_type_code,
+ leave_type_desc,
+ sort_order,
+ need_location_on_apply,
+ need_photo_on_cancel,
+ need_location_on_cancel,
+ need_cancel_for_non_leave,
+ can_apply_in_advance,
+ is_enabled,
+ max_apply_duration,
+ cancel_overdue_reminder
+)
+SELECT
+ 2026102111360000001,
+ '000000',
+ 103,
+ 1,
+ NOW(),
+ 1,
+ NOW(),
+ 0,
+ '临时回寝',
+ 'TEMP_BACK_DORM',
+ '临时回寝请假(替换原外出请假、回家请假选项;历史单类型不迁移)',
+ 3,
+ '1',
+ '1',
+ '1',
+ '1',
+ '1',
+ '1',
+ 24.00,
+ 2.00
+FROM DUAL
+WHERE NOT EXISTS (
+ SELECT 1
+ FROM xg_leave_type_config t
+ WHERE t.leave_type_code = 'TEMP_BACK_DORM'
+ OR t.leave_type_name = '临时回寝'
+);
+
+-- 若主键冲突:ROLLBACK 后换未占用 id 再执行
+-- SELECT id FROM xg_leave_type_config WHERE id = 2026102111360000001;
+
+-- 2.2 下线旧类型:软删 + 关闭(学生端列表按未删除且启用过滤,即选不到)
+UPDATE xg_leave_type_config
+SET
+ deleted = 1,
+ is_enabled = '0',
+ update_by = 1,
+ update_time = NOW(),
+ leave_type_desc = CONCAT(
+ IFNULL(leave_type_desc, ''),
+ '【2026-10-21 已下线,新建请选临时回寝;历史数据保留原类型】'
+ )
+WHERE deleted = 0
+ AND (
+ leave_type_code IN ('OUT_LEAVE', 'HOME_LEAVE')
+ OR leave_type_name IN ('外出请假', '回家请假')
+ );
+
+-- -----------------------------------------------------------------------------
+-- 三、执行后验收(事务内)
+-- -----------------------------------------------------------------------------
+
+-- 3.1 临时回寝应存在且启用
+SELECT id, leave_type_code, leave_type_name, is_enabled, deleted
+FROM xg_leave_type_config
+WHERE leave_type_code = 'TEMP_BACK_DORM'
+ OR leave_type_name = '临时回寝';
+
+-- 3.2 外出/回家应已软删关闭
+SELECT id, leave_type_code, leave_type_name, is_enabled, deleted
+FROM xg_leave_type_config
+WHERE leave_type_code IN ('OUT_LEAVE', 'HOME_LEAVE')
+ OR leave_type_name IN ('外出请假', '回家请假');
+
+-- 3.3 学生端可选类型(deleted=0 且 is_enabled=1):应有临时回寝,无外出/回家
+SELECT leave_type_code, leave_type_name, sort_order, is_enabled, deleted
+FROM xg_leave_type_config
+WHERE deleted = 0
+ AND is_enabled = '1'
+ORDER BY sort_order, id;
+
+-- 3.4 历史单旧类型条数应与执行前 1.3 一致(证明业务表未被改动)
+SELECT leave_type_code, leave_type_name, COUNT(*) AS cnt
+FROM xg_student_leave
+WHERE deleted = 0
+ AND (
+ leave_type_code IN ('OUT_LEAVE', 'HOME_LEAVE')
+ OR leave_type_name IN ('外出请假', '回家请假')
+ )
+GROUP BY leave_type_code, leave_type_name;
+
+-- ========== 确认后 ==========
+-- COMMIT;
+-- 或 ROLLBACK;
diff --git a/mobile/src/components/Process/submitVerify.vue b/mobile/src/components/Process/submitVerify.vue
index 7e751732..85306df6 100644
--- a/mobile/src/components/Process/submitVerify.vue
+++ b/mobile/src/components/Process/submitVerify.vue
@@ -33,6 +33,10 @@
结束时间
{{ formatLeaveDateTime(leaveInfo.endTime) }}
+
+ 请假天数
+ {{ formatLeaveDuration(leaveInfo.leaveDuration) }}
+
是否离校
{{ formatLeaveSchool(leaveInfo.isLeaveSchool) }}
@@ -106,7 +110,7 @@
v-model="form.message"
placeholder="请输入审批意见"
:maxlength="500"
- height="120"
+ height="72"
count
/>
@@ -587,6 +591,11 @@ export default {
return value || '-';
},
+ formatLeaveDuration(value) {
+ if (value === null || value === undefined || value === '') return '-';
+ return `${value} 天`;
+ },
+
// 关闭弹窗
cancel() {
this.visible = false;
@@ -1231,7 +1240,7 @@ export default {
}
.title {
- font-size: 32rpx;
+ font-size: 34rpx;
font-weight: 600;
color: #333;
}
@@ -1243,12 +1252,12 @@ export default {
}
.form-item {
- margin-bottom: 40rpx;
+ margin-bottom: 32rpx;
}
.label {
display: block;
- font-size: 28rpx;
+ font-size: 30rpx;
font-weight: 500;
color: #333;
margin-bottom: 16rpx;
@@ -1273,16 +1282,16 @@ export default {
}
.leave-summary-label {
- width: 160rpx;
+ width: 170rpx;
flex-shrink: 0;
- font-size: 26rpx;
+ font-size: 30rpx;
color: #667085;
line-height: 1.5;
}
.leave-summary-value {
flex: 1;
- font-size: 26rpx;
+ font-size: 30rpx;
color: #1f2937;
line-height: 1.5;
word-break: break-all;