Selaa lähdekoodia

fix(mobile): 审批弹窗加大字号、补请假天数并缩小意见框

同步请假类型下线外出/回家、新增临时回寝的安全 SQL(历史单不迁移)。

Co-authored-by: Cursor <cursoragent@cursor.com>
“wuzhen” 1 viikko sitten
vanhempi
commit
b26bf58744

+ 168 - 0
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;

+ 16 - 7
mobile/src/components/Process/submitVerify.vue

@@ -33,6 +33,10 @@
                                 <text class="leave-summary-label">结束时间</text>
                                 <text class="leave-summary-value">{{ formatLeaveDateTime(leaveInfo.endTime) }}</text>
                             </view>
+                            <view class="leave-summary-row">
+                                <text class="leave-summary-label">请假天数</text>
+                                <text class="leave-summary-value">{{ formatLeaveDuration(leaveInfo.leaveDuration) }}</text>
+                            </view>
                             <view class="leave-summary-row">
                                 <text class="leave-summary-label">是否离校</text>
                                 <text class="leave-summary-value">{{ formatLeaveSchool(leaveInfo.isLeaveSchool) }}</text>
@@ -106,7 +110,7 @@
                             v-model="form.message"
                             placeholder="请输入审批意见"
                             :maxlength="500"
-                            height="120"
+                            height="72"
                             count
                         />
                     </view>
@@ -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;