修复住宿:统一住宿生命周期状态与状态变更入口

住宿状态在数据库与业务上只有 0 预分配 / 1 已入住 / 2 已退宿三种,不存在 3 已调房。
调房是业务操作,真实语义为旧记录置退宿、新记录置在住,不应表现为独立状态值。

- 前端住宿页面移除筛选项与两处状态标签中的"已调房"(status=3),补齐历史表格缺失的预分配标签
- 后端通用 PUT /train/accommodation 封死 accommodation_status 写入路径,
  状态变更只能经办理入住、办理退宿、调房等专属业务操作
- 新增住宿状态白名单守卫,非法整数与新增即退宿一律拒绝入库

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
wangzhibiaoandCursor committed 2026-09-22 17:03:43 +08:00
1 parent ecfd38be17
commit aeb76ce35a
3 files changed
+76 -3

No files matched your search

@@ -30,7 +30,6 @@
<el-option label="预分配" :value="0" />
<el-option label="在住" :value="1" />
<el-option label="已退宿" :value="2" />
<el-option label="已调房" :value="3" />
</el-select>
</el-form-item>
<el-form-item>
@@ -66,11 +65,11 @@
<el-table-column label="房间号" align="center" prop="dormRoom" width="90" />
<el-table-column label="床位号" align="center" prop="bedNo" width="80" />
<el-table-column label="住宿状态" align="center" width="120">
<!-- 住宿状态仅有 0=预分配 / 1=在住 / 2=已退宿 三种;调房由「旧记录置退宿 + 新记录置在住」表达,没有独立状态值 -->
<template slot-scope="scope">
<el-tag v-if="scope.row.accommodationStatus === 1" type="success" size="small">在住</el-tag>
<el-tag v-else-if="scope.row.accommodationStatus === 0" type="info" size="small">预分配</el-tag>
<el-tag v-else-if="scope.row.accommodationStatus === 2" type="danger" size="small">已退宿</el-tag>
<el-tag v-else-if="scope.row.accommodationStatus === 3" type="warning" size="small">已调房</el-tag>
<el-tag v-else size="small">{{ scope.row.accommodationStatus }}</el-tag>
</template>
</el-table-column>
@@ -183,8 +182,8 @@
<el-table-column label="住宿状态" align="center" width="110">
<template slot-scope="scope">
<el-tag v-if="scope.row.accommodationStatus === 1" type="success" size="mini">在住</el-tag>
<el-tag v-else-if="scope.row.accommodationStatus === 0" type="info" size="mini">预分配</el-tag>
<el-tag v-else-if="scope.row.accommodationStatus === 2" type="danger" size="mini">已退宿</el-tag>
<el-tag v-else-if="scope.row.accommodationStatus === 3" type="warning" size="mini">已调房</el-tag>
<el-tag v-else size="mini">{{ scope.row.accommodationStatus }}</el-tag>
</template>
</el-table-column>