zlwu 1 год назад
Родитель
Сommit
900ca0ad19

+ 262 - 2
mobile/src/pages/xg/xsjcxx/xsjcxx/index.vue

@@ -581,8 +581,30 @@
                         </view>
                     </view>
                     <view class="info-item">
-                        <text class="label">宿舍房间号</text>
-                        <text class="value">{{ form.dormitoryRoom || '-' }}</text>
+                        <text class="label">宿舍房间</text>
+                        <view class="value">
+                            <view v-if="roomDisplayName" class="room-info">
+                                <u-tag
+                                    :text="roomDisplayName"
+                                    :type="getRoomTagType(form.dormitoryRoom)"
+                                    size="mini"
+                                ></u-tag>
+                            </view>
+                            <text v-else>-</text>
+                        </view>
+                    </view>
+                    <view class="info-item">
+                        <text class="label">床位</text>
+                        <view class="value">
+                            <view v-if="bedDisplayName" class="bed-info">
+                                <u-tag
+                                    :text="bedDisplayName"
+                                    :type="getBedTagType(form.extField1)"
+                                    size="mini"
+                                ></u-tag>
+                            </view>
+                            <text v-else>-</text>
+                        </view>
                     </view>
                 </view>
             </view>
@@ -724,6 +746,7 @@ export default {
                 classTeacherName: '',
                 dormitoryBuilding: '',
                 dormitoryRoom: '',
+                extField1: '', // 新增床位信息字段
 
                 // 银行卡信息字段
                 bankCardNo: '',
@@ -751,6 +774,14 @@ export default {
             // 行政区划和宿舍楼栋数据
             regionOptions: [],
             dormBuildingOptions: [],
+
+            // 房间和床位数据
+            dormRoomOptions: [],
+            dormBedOptions: [],
+
+            // 显示名称(异步加载)
+            roomDisplayName: '',
+            bedDisplayName: '',
         };
     },
 
@@ -770,6 +801,13 @@ export default {
             console.error('区域和宿舍数据加载出错:', error);
         }
 
+        try {
+            await this.loadDormRoomAndBedData();
+            console.log('✓ 房间和床位数据加载完成');
+        } catch (error) {
+            console.error('房间和床位数据加载出错:', error);
+        }
+
         try {
             await this.getPersonalInfoData();
             console.log('✓ 个人信息加载完成');
@@ -1224,6 +1262,33 @@ export default {
             });
         },
 
+        // 加载房间和床位数据(改为按需加载)
+        async loadDormRoomAndBedData() {
+            console.log('房间和床位数据改为按需加载模式,不再预加载所有数据');
+            // 初始化空数组,数据将在需要时按需查询
+            this.dormRoomOptions = [];
+            this.dormBedOptions = [];
+        },
+
+        // 异步加载房间和床位显示名称
+        async loadRoomAndBedDisplayNames() {
+            try {
+                // 加载房间名称
+                if (this.form.dormitoryRoom) {
+                    this.roomDisplayName = await this.getRoomName(this.form.dormitoryRoom);
+                    console.log('房间名称加载完成:', this.roomDisplayName);
+                }
+
+                // 加载床位名称
+                if (this.form.extField1) {
+                    this.bedDisplayName = await this.getBedName(this.form.extField1);
+                    console.log('床位名称加载完成:', this.bedDisplayName);
+                }
+            } catch (error) {
+                console.error('加载房间和床位显示名称失败:', error);
+            }
+        },
+
         // 获取学生个人信息
         async getPersonalInfoData() {
             try {
@@ -1257,6 +1322,17 @@ export default {
 
                     // 将API返回的数据映射到表单
                     Object.assign(this.form, data);
+
+                    // 调试日志:检查宿舍相关字段
+                    console.log('宿舍信息字段检查:', {
+                        dormitoryBuilding: this.form.dormitoryBuilding,
+                        dormitoryRoom: this.form.dormitoryRoom,
+                        extField1: this.form.extField1,
+                        extField1Type: typeof this.form.extField1,
+                    });
+
+                    // 异步加载房间和床位信息
+                    await this.loadRoomAndBedDisplayNames();
                 } else {
                     uni.showToast({
                         title: response.msg || '获取个人信息失败',
@@ -1468,6 +1544,178 @@ export default {
 
             return findBuilding(this.dormBuildingOptions, buildingId);
         },
+
+        // 根据房间ID获取房间名称(含性别标识)
+        async getRoomName(roomId) {
+            // 防护性检查
+            if (!roomId) {
+                return '';
+            }
+
+            // 如果本地缓存中没有数据,则按需查询
+            if (!this.dormRoomOptions || this.dormRoomOptions.length === 0) {
+                try {
+                    const response = await request({
+                        url: `/xgss/dormRoom/${roomId}`,
+                        method: 'GET',
+                    });
+
+                    if (response.code === 200 && response.data) {
+                        const roomData = response.data;
+                        // 缓存房间数据
+                        if (!this.dormRoomOptions) {
+                            this.dormRoomOptions = [];
+                        }
+                        this.dormRoomOptions.push(roomData);
+
+                        // 返回房间名称
+                        return roomData.roomName || roomData.name || `房间${roomId}`;
+                    } else {
+                        console.warn(`查询房间信息失败,房间ID: ${roomId}`);
+                        return `房间${roomId}`;
+                    }
+                } catch (error) {
+                    console.error(`查询房间信息异常,房间ID: ${roomId}`, error);
+                    return `房间${roomId}`;
+                }
+            }
+
+            // 从本地缓存中查找
+            const room = this.dormRoomOptions.find((item) => String(item.id) === String(roomId));
+            if (room) {
+                return room.roomName || room.name || `房间${roomId}`;
+            }
+
+            // 如果本地缓存中没有找到,则按需查询
+            try {
+                const response = await request({
+                    url: `/xgss/dormRoom/${roomId}`,
+                    method: 'GET',
+                });
+
+                if (response.code === 200 && response.data) {
+                    const roomData = response.data;
+                    // 缓存房间数据
+                    this.dormRoomOptions.push(roomData);
+
+                    // 返回房间名称
+                    return roomData.roomName || roomData.name || `房间${roomId}`;
+                } else {
+                    console.warn(`查询房间信息失败,房间ID: ${roomId}`);
+                    return `房间${roomId}`;
+                }
+            } catch (error) {
+                console.error(`查询房间信息异常,房间ID: ${roomId}`, error);
+                return `房间${roomId}`;
+            }
+        },
+
+        // 根据房间ID获取房间标签类型
+        getRoomTagType(roomId) {
+            if (!roomId) {
+                return 'info'; // 默认类型
+            }
+
+            // 从本地缓存中查找
+            const room = this.dormRoomOptions.find((item) => String(item.id) === String(roomId));
+            if (room) {
+                // 根据房间类型设置标签类型
+                if (room.roomType === '1') {
+                    // 男生房间
+                    return 'warning';
+                } else if (room.roomType === '2') {
+                    // 女生房间
+                    return 'error';
+                }
+            }
+            return 'info'; // 默认类型
+        },
+
+        // 根据床位ID获取床位名称(含性别标识)
+        async getBedName(bedId) {
+            // 防护性检查
+            if (!bedId) {
+                return '';
+            }
+
+            // 如果本地缓存中没有数据,则按需查询
+            if (!this.dormBedOptions || this.dormBedOptions.length === 0) {
+                try {
+                    const response = await request({
+                        url: `/dormbed/dormBed/${bedId}`,
+                        method: 'GET',
+                    });
+
+                    if (response.code === 200 && response.data) {
+                        const bedData = response.data;
+                        // 缓存床位数据
+                        if (!this.dormBedOptions) {
+                            this.dormBedOptions = [];
+                        }
+                        this.dormBedOptions.push(bedData);
+
+                        // 返回床位名称
+                        return bedData.bedName || bedData.name || `床位${bedId}`;
+                    } else {
+                        console.warn(`查询床位信息失败,床位ID: ${bedId}`);
+                        return `床位${bedId}`;
+                    }
+                } catch (error) {
+                    console.error(`查询床位信息异常,床位ID: ${bedId}`, error);
+                    return `床位${bedId}`;
+                }
+            }
+
+            // 从本地缓存中查找
+            const bed = this.dormBedOptions.find((item) => String(item.id) === String(bedId));
+            if (bed) {
+                return bed.bedName || bed.name || `床位${bedId}`;
+            }
+
+            // 如果本地缓存中没有找到,则按需查询
+            try {
+                const response = await request({
+                    url: `/dormbed/dormBed/${bedId}`,
+                    method: 'GET',
+                });
+
+                if (response.code === 200 && response.data) {
+                    const bedData = response.data;
+                    // 缓存床位数据
+                    this.dormBedOptions.push(bedData);
+
+                    // 返回床位名称
+                    return bedData.bedName || bedData.name || `床位${bedId}`;
+                } else {
+                    console.warn(`查询床位信息失败,床位ID: ${bedId}`);
+                    return `床位${bedId}`;
+                }
+            } catch (error) {
+                console.error(`查询床位信息异常,床位ID: ${bedId}`, error);
+                return `床位${bedId}`;
+            }
+        },
+
+        // 根据床位ID获取床位标签类型
+        getBedTagType(bedId) {
+            if (!bedId) {
+                return 'info'; // 默认类型
+            }
+
+            // 从本地缓存中查找
+            const bed = this.dormBedOptions.find((item) => String(item.id) === String(bedId));
+            if (bed) {
+                // 根据床位类型设置标签类型
+                if (bed.bedType === '1') {
+                    // 男生床位
+                    return 'warning';
+                } else if (bed.bedType === '2') {
+                    // 女生床位
+                    return 'error';
+                }
+            }
+            return 'info'; // 默认类型
+        },
     },
 };
 </script>
@@ -1655,6 +1903,18 @@ export default {
     gap: 8rpx;
 }
 
+.room-info {
+    display: flex;
+    align-items: center;
+    gap: 8rpx;
+}
+
+.bed-info {
+    display: flex;
+    align-items: center;
+    gap: 8rpx;
+}
+
 // uview组件样式调整
 ::v-deep .u-tag {
     margin: 0;

+ 66 - 2
mobile/src/pages/xg/xsjcxx/xsws/stuMsgDetailDialog.vue

@@ -747,9 +747,15 @@
                                     </text>
                                 </view>
                                 <view class="info-item">
-                                    <text class="label">宿舍房间号:</text>
+                                    <text class="label">宿舍房间:</text>
                                     <text class="value">
-                                        {{ studentInfo.dormitoryRoom || '-' }}
+                                        {{ dormRoomName || '-' }}
+                                    </text>
+                                </view>
+                                <view class="info-item">
+                                    <text class="label">床位:</text>
+                                    <text class="value">
+                                        {{ dormBedName || '-' }}
                                     </text>
                                 </view>
                             </view>
@@ -881,6 +887,10 @@ export default {
             // 新增:行政区划和宿舍楼栋数据
             regionOptions: [], // 行政区划选项
             dormBuildingOptions: [], // 宿舍楼栋选项
+
+            // 宿舍房间和床位显示名称
+            dormRoomName: '',
+            dormBedName: '',
         };
     },
 
@@ -1293,6 +1303,42 @@ export default {
             }
         },
 
+        // 获取宿舍房间名称
+        async getDormRoomName(roomId) {
+            if (!roomId) return '-';
+            try {
+                const response = await request({
+                    url: `/xgss/dormRoom/${roomId}`,
+                    method: 'GET',
+                });
+                if (response.code === 200 && response.data) {
+                    return response.data.roomName || '-';
+                }
+                return roomId; // 如果没有找到,返回原始ID
+            } catch (error) {
+                console.error('获取宿舍房间名称失败:', error);
+                return roomId;
+            }
+        },
+
+        // 获取床位名称
+        async getDormBedName(bedId) {
+            if (!bedId) return '-';
+            try {
+                const response = await request({
+                    url: `/dormbed/dormBed/${bedId}`,
+                    method: 'GET',
+                });
+                if (response.code === 200 && response.data) {
+                    return response.data.bedName || '-';
+                }
+                return bedId; // 如果没有找到,返回原始ID
+            } catch (error) {
+                console.error('获取床位名称失败:', error);
+                return bedId;
+            }
+        },
+
         // 根据行政区划代码获取完整路径(省/市/区)
         getRegionFullPath(code) {
             if (!code || !this.regionOptions) return code || '';
@@ -1336,6 +1382,21 @@ export default {
             return findBuilding(this.dormBuildingOptions, buildingId) || buildingId;
         },
 
+        // 设置宿舍房间和床位显示名称
+        async setDormDisplayNames() {
+            if (this.studentInfo.dormitoryRoom) {
+                this.dormRoomName = await this.getDormRoomName(this.studentInfo.dormitoryRoom);
+            } else {
+                this.dormRoomName = '-';
+            }
+
+            if (this.studentInfo.extField1) {
+                this.dormBedName = await this.getDormBedName(this.studentInfo.extField1);
+            } else {
+                this.dormBedName = '-';
+            }
+        },
+
         // 加载数据
         async loadData() {
             if (!this.batchInfo || !this.batchInfo.batchId) {
@@ -1407,6 +1468,9 @@ export default {
                     if (this.studentInfo.photoPath) {
                         this.loadPhoto();
                     }
+
+                    // 设置宿舍房间和床位显示名称
+                    await this.setDormDisplayNames();
                 } else {
                     console.log('未获取到学生信息或数据为空');
                 }

+ 121 - 24
mobile/src/pages/xg/xsjcxx/xsws/stuMsgDialog.vue

@@ -77,8 +77,8 @@
                     </view>
                 </view>
 
-                <!-- 快捷操作按钮 v-if="isWechatBrowser"-->
-                 <view class="photo-quick-actions" >
+                <!-- 快捷操作按钮 -->
+                 <view class="photo-quick-actions">
                     <view class="placeholder-tips">
                             <text class="tip-item">• 建议尺寸:2寸证件照 • 支持格式:JPG、PNG • 文件大小:不超过10MB</text>
                     </view>
@@ -1086,20 +1086,21 @@
                             <u-picker
                                 :columns="[trainingModeOptions]"
                                 keyName="label"
+                                :disabled="true"
                                 :defaultIndex="trainingModeIndex"
                                 :show="showTrainingModePicker"
                                 :closeOnClickOverlay="true"
                                 @confirm="onTrainingModeConfirm"
                                 @cancel="onTrainingModeClose"
                             ></u-picker>
-                            <view class="picker-input" @click="showTrainingModePicker = true">
+                            <view class="picker-input disabled">
                                 <text class="picker-text">
                                     {{
                                         getDictLabel(trainingModeOptions, form.trainingType) ||
                                         '请选择培养方式'
                                     }}
                                 </text>
-                                <u-icon name="arrow-down" size="16" color="#c0c4cc"></u-icon>
+                                <u-icon name="arrow-down" size="16" color="#e4e7ed"></u-icon>
                             </view>
                         </view>
                     </view>
@@ -1109,13 +1110,14 @@
                             <u-picker
                                 :columns="[admissionCategoryOptions]"
                                 keyName="label"
+                                :disabled="true"
                                 :defaultIndex="admissionCategoryIndex"
                                 :show="showAdmissionCategoryPicker"
                                 :closeOnClickOverlay="true"
                                 @confirm="onAdmissionCategoryConfirm"
                                 @cancel="onAdmissionCategoryClose"
                             ></u-picker>
-                            <view class="picker-input" @click="showAdmissionCategoryPicker = true">
+                            <view class="picker-input disabled">
                                 <text class="picker-text">
                                     {{
                                         getDictLabel(
@@ -1124,7 +1126,7 @@
                                         ) || '请选择录取类别'
                                     }}
                                 </text>
-                                <u-icon name="arrow-down" size="16" color="#c0c4cc"></u-icon>
+                                <u-icon name="arrow-down" size="16" color="#e4e7ed"></u-icon>
                             </view>
                         </view>
                         <view class="form-item-half">
@@ -1132,37 +1134,38 @@
                             <u-picker
                                 :columns="[studentStatusOptions]"
                                 keyName="label"
+                                :disabled="true"
                                 :defaultIndex="studentStatusIndex"
                                 :show="showStudentStatusPicker"
                                 :closeOnClickOverlay="true"
                                 @confirm="onStudentStatusConfirm"
                                 @cancel="onStudentStatusClose"
                             ></u-picker>
-                            <view class="picker-input" @click="showStudentStatusPicker = true">
+                            <view class="picker-input disabled">
                                 <text class="picker-text">
                                     {{
                                         getDictLabel(studentStatusOptions, form.studentStatus) ||
                                         '请选择学籍状态'
                                     }}
                                 </text>
-                                <u-icon name="arrow-down" size="16" color="#c0c4cc"></u-icon>
+                                <u-icon name="arrow-down" size="16" color="#e4e7ed"></u-icon>
                             </view>
                         </view>
                     </view>
-                    <view class="form-item">
-                        <text class="form-label">是否住校</text>
-                        <u-radio-group v-model="form.isBoarder">
-                            <u-radio
-                                v-for="item in yesNoOptions"
-                                :key="item.value"
-                                :name="item.value"
-                                :disabled="true"
-                            >
-                                {{ item.label }}
-                            </u-radio>
-                        </u-radio-group>
-                    </view>
                     <view class="form-row">
+                        <view class="form-item-half">
+                            <text class="form-label">是否住校</text>
+                            <u-radio-group v-model="form.isBoarder">
+                                <u-radio
+                                    v-for="item in yesNoOptions"
+                                    :key="item.value"
+                                    :name="item.value"
+                                    :disabled="true"
+                                >
+                                    {{ item.label }}
+                                </u-radio>
+                            </u-radio-group>
+                        </view>
                         <view class="form-item-half">
                             <text class="form-label">宿舍楼栋</text>
                             <u-picker
@@ -1185,11 +1188,22 @@
                                 <u-icon name="arrow-down" size="16" color="#e4e7ed"></u-icon>
                             </view>
                         </view>
+                    </view>
+                    <view class="form-row">
+                        <view class="form-item-half">
+                            <text class="form-label">宿舍房间</text>
+                            <u-input
+                                :value="dormRoomName"
+                                placeholder="宿舍房间"
+                                :disabled="true"
+                                border-bottom
+                            ></u-input>
+                        </view>
                         <view class="form-item-half">
-                            <text class="form-label">宿舍房间号</text>
+                            <text class="form-label">床位</text>
                             <u-input
-                                v-model="form.dormitoryRoom"
-                                placeholder="请输入宿舍房间号"
+                                :value="dormBedName"
+                                placeholder="床位"
                                 :disabled="true"
                                 border-bottom
                             ></u-input>
@@ -1387,6 +1401,7 @@ export default {
                 classTeacherName: '',
                 dormitoryBuilding: '',
                 dormitoryRoom: '',
+                extField1: '',
 
                 // 银行卡信息字段
                 bankCardNo: '',
@@ -1453,6 +1468,14 @@ export default {
             showStudentStatusPicker: false,
             showDormBuildingPicker: false,
             showSourceRegionPicker: false,
+
+            // 缓存
+            roomNameCache: {},
+            bedNameCache: {},
+            
+            // 宿舍房间和床位显示名称
+            dormRoomName: '',
+            dormBedName: '',
         };
     },
 
@@ -2106,6 +2129,9 @@ export default {
 
                     // 同步picker索引
                     this.syncPickerIndexes();
+                    
+                    // 设置宿舍房间和床位显示名称
+                    await this.setDormDisplayNames();
                 } else {
                     uni.showToast({
                         title: response.msg || '获取个人信息失败',
@@ -3127,6 +3153,77 @@ export default {
             this.debugMode = !this.debugMode;
             this.addWechatLog(`调试模式已${this.debugMode ? '开启' : '关闭'}`, 'info');
         },
+
+        // 获取宿舍房间名称
+        async getDormRoomName(roomId) {
+            if (!roomId) return '-';
+            
+            // 检查缓存
+            if (this.roomNameCache && this.roomNameCache[roomId]) {
+                return this.roomNameCache[roomId];
+            }
+            
+            try {
+                const response = await request({
+                    url: `/xgss/dormRoom/${roomId}`,
+                    method: 'GET',
+                });
+                if (response.code === 200 && response.data) {
+                    const roomName = response.data.roomName || response.data.roomCode || String(roomId);
+                    // 缓存结果
+                    if (!this.roomNameCache) this.roomNameCache = {};
+                    this.roomNameCache[roomId] = roomName;
+                    return roomName;
+                }
+                return String(roomId); // 如果没有找到,返回原始ID
+            } catch (error) {
+                console.error('获取宿舍房间名称失败:', error);
+                return String(roomId);
+            }
+        },
+
+        // 获取床位名称
+        async getDormBedName(bedId) {
+            if (!bedId) return '-';
+            
+            // 检查缓存
+            if (this.bedNameCache && this.bedNameCache[bedId]) {
+                return this.bedNameCache[bedId];
+            }
+            
+            try {
+                const response = await request({
+                    url: `/dormbed/dormBed/${bedId}`,
+                    method: 'GET',
+                });
+                if (response.code === 200 && response.data) {
+                    const bedName = response.data.bedName || response.data.bedCode || String(bedId);
+                    // 缓存结果
+                    if (!this.bedNameCache) this.bedNameCache = {};
+                    this.bedNameCache[bedId] = bedName;
+                    return bedName;
+                }
+                return String(bedId); // 如果没有找到,返回原始ID
+            } catch (error) {
+                console.error('获取床位名称失败:', error);
+                return String(bedId);
+            }
+        },
+
+        // 设置宿舍房间和床位显示名称
+        async setDormDisplayNames() {
+            if (this.form.dormitoryRoom) {
+                this.dormRoomName = await this.getDormRoomName(this.form.dormitoryRoom);
+            } else {
+                this.dormRoomName = '-';
+            }
+            
+            if (this.form.extField1) {
+                this.dormBedName = await this.getDormBedName(this.form.extField1);
+            } else {
+                this.dormBedName = '-';
+            }
+        },
     },
 };
 </script>

+ 25 - 1
web/src/api/xg/xsjcxx/stuRoster/index.ts

@@ -52,10 +52,34 @@ export function getStudentPersonalInfo(userId?: number): AxiosPromise<any> {
   });
 }
 
+/**
+ * 获取宿舍房间信息
+ * @param roomId 房间ID
+ */
+export function getDormRoomInfo(roomId: number): AxiosPromise<R<any>> {
+  return request({
+    url: `/xgss/dormRoom/${roomId}`,
+    method: 'get'
+  });
+}
+
+/**
+ * 获取宿舍床位信息
+ * @param bedId 床位ID
+ */
+export function getDormBedInfo(bedId: number): AxiosPromise<R<any>> {
+  return request({
+    url: `/dormbed/dormBed/${bedId}`,
+    method: 'get'
+  });
+}
+
 export default {
   XgDeptTreeSelect,
   deptTreeSelect,
   listStudentRoster,
   exportStudentRoster,
-  getStudentPersonalInfo
+  getStudentPersonalInfo,
+  getDormRoomInfo,
+  getDormBedInfo
 };

+ 0 - 1
web/src/views/xg/xsjcxx/stuMsgAudit/auditDialog.vue

@@ -194,7 +194,6 @@
 import { getCurrentInstance, ComponentInternalInstance, ref, reactive, computed, watch, onMounted, nextTick, defineAsyncComponent } from 'vue';
 import ElMessage from 'element-plus/es/components/message/index';
 import ElMessageBox from 'element-plus/es/components/message-box/index';
-// @ts-ignore
 import request from '@/utils/request';
 
 // 动态加载StuMsgDialog组件

+ 47 - 2
web/src/views/xg/xsjcxx/stuMsgAudit/stuMsgDetailDialog.vue

@@ -702,8 +702,13 @@
           </el-row>
           <el-row :gutter="20">
             <el-col :span="8">
-              <el-form-item label="宿舍房间号" prop="dormitoryRoom">
-                <el-input disabled v-model="form.dormitoryRoom" placeholder="请输入宿舍房间号" maxlength="20" />
+              <el-form-item label="宿舍房间" prop="dormitoryRoom">
+                <el-input disabled v-model="dormitoryRoomName" placeholder="宿舍房间" maxlength="20" />
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="床位" prop="bedInfo">
+                <el-input disabled v-model="bedInfo" placeholder="床位" maxlength="20" />
               </el-form-item>
             </el-col>
           </el-row>
@@ -827,6 +832,10 @@ const dormBuildingOptions = ref([]); // 宿舍楼栋选项
 const photoLoading = ref(false); // 照片加载状态
 const asyncPhotoUrl = ref(''); // 异步加载的照片URL
 
+// 宿舍房间和床位信息
+const dormitoryRoomName = ref<string>('');
+const bedInfo = ref<string>('');
+
 // 历史记录相关数据
 const historyLoading = ref(false);
 const historyRecords = ref<any[]>([]);
@@ -1096,6 +1105,9 @@ const getUserHistoryData = async (batchId: number, userId?: number) => {
 
       ElMessage.success('历史数据加载成功');
       console.log('表单数据已更新:', form);
+
+      // 获取宿舍房间和床位信息
+      await getDormitoryInfo(historyData.dormitoryRoom, historyData.extField1);
     } else {
       console.log('未获取到历史数据或数据为空');
       // 如果没有历史数据,保持表单默认值即可
@@ -1108,6 +1120,39 @@ const getUserHistoryData = async (batchId: number, userId?: number) => {
   }
 };
 
+// 获取宿舍房间和床位信息
+const getDormitoryInfo = async (roomId: string | number, bedId: string | number) => {
+  try {
+    // 获取宿舍房间信息
+    if (roomId) {
+      const roomRes = await request.get(`/xgss/dormRoom/${roomId}`);
+      if (roomRes && roomRes.code === 200 && roomRes.data) {
+        dormitoryRoomName.value = roomRes.data.roomName || roomRes.data.name || '未知房间';
+      } else {
+        dormitoryRoomName.value = '未知房间';
+      }
+    } else {
+      dormitoryRoomName.value = '';
+    }
+
+    // 获取床位信息
+    if (bedId) {
+      const bedRes = await request.get(`/dormbed/dormBed/${bedId}`);
+      if (bedRes && bedRes.code === 200 && bedRes.data) {
+        bedInfo.value = bedRes.data.bedName || bedRes.data.name || '未知床位';
+      } else {
+        bedInfo.value = '未知床位';
+      }
+    } else {
+      bedInfo.value = '';
+    }
+  } catch (error) {
+    console.error('获取宿舍信息失败:', error);
+    dormitoryRoomName.value = '获取失败';
+    bedInfo.value = '获取失败';
+  }
+};
+
 // 表单数据
 const form = reactive({
   id: undefined,

+ 47 - 2
web/src/views/xg/xsjcxx/stuMsgAudit/stuMsgDialog.vue

@@ -1350,8 +1350,13 @@
           </el-row>
           <el-row :gutter="20">
             <el-col :span="8">
-              <el-form-item label="宿舍房间号" prop="dormitoryRoom">
-                <el-input disabled v-model="form.dormitoryRoom" placeholder="请输入宿舍房间号" maxlength="20" />
+              <el-form-item label="宿舍房间" prop="dormitoryRoom">
+                <el-input disabled v-model="dormitoryRoomName" placeholder="宿舍房间" maxlength="20" />
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="床位" prop="bedInfo">
+                <el-input disabled v-model="bedInfo" placeholder="床位" maxlength="20" />
               </el-form-item>
             </el-col>
           </el-row>
@@ -1520,6 +1525,10 @@ const changedFields = ref<any[]>([]); // 存储变更的字段信息
 const asyncPhotoUrl = ref<string>('');
 const photoLoading = ref<boolean>(false);
 
+// 宿舍房间和床位信息
+const dormitoryRoomName = ref<string>('');
+const bedInfo = ref<string>('');
+
 const studentFormRef = ref<any>();
 
 /** 获取历史记录数据 */
@@ -1713,6 +1722,9 @@ const getUserHistoryData = async (batchId: number, userId: number) => {
 
       ElMessage.success('历史数据加载成功');
       console.log('表单数据已更新:', form);
+
+      // 获取宿舍房间和床位信息
+      await getDormitoryInfo(historyData.dormitoryRoom, historyData.extField1);
     } else {
       console.log('未获取到历史数据或数据为空');
       // 如果没有历史数据,保持表单默认值即可
@@ -1725,6 +1737,39 @@ const getUserHistoryData = async (batchId: number, userId: number) => {
   }
 };
 
+// 获取宿舍房间和床位信息
+const getDormitoryInfo = async (roomId: string | number, bedId: string | number) => {
+  try {
+    // 获取宿舍房间信息
+    if (roomId) {
+      const roomRes = await request.get(`/xgss/dormRoom/${roomId}`);
+      if (roomRes && roomRes.code === 200 && roomRes.data) {
+        dormitoryRoomName.value = roomRes.data.roomName || roomRes.data.name || '未知房间';
+      } else {
+        dormitoryRoomName.value = '未知房间';
+      }
+    } else {
+      dormitoryRoomName.value = '';
+    }
+
+    // 获取床位信息
+    if (bedId) {
+      const bedRes = await request.get(`/dormbed/dormBed/${bedId}`);
+      if (bedRes && bedRes.code === 200 && bedRes.data) {
+        bedInfo.value = bedRes.data.bedName || bedRes.data.name || '未知床位';
+      } else {
+        bedInfo.value = '未知床位';
+      }
+    } else {
+      bedInfo.value = '';
+    }
+  } catch (error) {
+    console.error('获取宿舍信息失败:', error);
+    dormitoryRoomName.value = '获取失败';
+    bedInfo.value = '获取失败';
+  }
+};
+
 // 获取变更详情
 const getCompareStudentMsg = async (batchId: number, userId: number) => {
   try {

+ 53 - 2
web/src/views/xg/xsjcxx/stuMsgSupply/stuMsgDetailDialog.vue

@@ -700,8 +700,13 @@
           </el-row>
           <el-row :gutter="20">
             <el-col :span="8">
-              <el-form-item label="宿舍房间号" prop="dormitoryRoom">
-                <el-input disabled v-model="form.dormitoryRoom" placeholder="请输入宿舍房间号" maxlength="20" />
+              <el-form-item label="宿舍房间" prop="dormitoryRoom">
+                <el-input disabled v-model="dormitoryRoomName" placeholder="请输入宿舍房间" maxlength="20" />
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="床位" prop="bedInfo">
+                <el-input disabled v-model="bedName" placeholder="请输入床位" maxlength="20" />
               </el-form-item>
             </el-col>
           </el-row>
@@ -825,6 +830,10 @@ const dormBuildingOptions = ref([]); // 宿舍楼栋选项
 const photoLoading = ref(false); // 照片加载状态
 const asyncPhotoUrl = ref(''); // 异步加载的照片URL
 
+// 宿舍信息相关数据
+const dormitoryRoomName = ref(''); // 宿舍房间名称
+const bedName = ref(''); // 床位名称
+
 // 历史记录相关数据
 const historyLoading = ref(false);
 const historyRecords = ref<any[]>([]);
@@ -1089,6 +1098,9 @@ const getUserHistoryData = async (batchId: number) => {
         }
       });
 
+      // 获取宿舍房间和床位信息
+      await getDormitoryInfo(historyData.dormitoryRoom, historyData.extField1);
+
       ElMessage.success('历史数据加载成功');
       console.log('表单数据已更新:', form);
     } else {
@@ -1103,6 +1115,39 @@ const getUserHistoryData = async (batchId: number) => {
   }
 };
 
+/** 获取宿舍房间和床位信息 */
+const getDormitoryInfo = async (roomId: string | number, bedId: string | number) => {
+  try {
+    // 获取宿舍房间信息
+    if (roomId) {
+      const roomRes = await request.get(`/xgss/dormRoom/${roomId}`);
+      if (roomRes && roomRes.code === 200 && roomRes.data) {
+        dormitoryRoomName.value = roomRes.data.roomName || roomRes.data.name || '未知房间';
+      } else {
+        dormitoryRoomName.value = '未知房间';
+      }
+    } else {
+      dormitoryRoomName.value = '';
+    }
+
+    // 获取床位信息
+    if (bedId) {
+      const bedRes = await request.get(`/dormbed/dormBed/${bedId}`);
+      if (bedRes && bedRes.code === 200 && bedRes.data) {
+        bedName.value = bedRes.data.bedName || bedRes.data.name || '未知床位';
+      } else {
+        bedName.value = '未知床位';
+      }
+    } else {
+      bedName.value = '';
+    }
+  } catch (error) {
+    console.error('获取宿舍信息失败:', error);
+    dormitoryRoomName.value = '获取失败';
+    bedName.value = '获取失败';
+  }
+};
+
 // 表单数据
 const form = reactive({
   id: undefined,
@@ -1202,6 +1247,7 @@ const form = reactive({
   classTeacherName: '',
   dormitoryBuilding: '',
   dormitoryRoom: '',
+  bedInfo: '',
 
   // // 银行卡信息字段
   bankCardNo: '',
@@ -1296,6 +1342,10 @@ watch(
 
 // 重置表单数据到默认值
 const resetFormToDefault = () => {
+  // 重置宿舍信息
+  dormitoryRoomName.value = '';
+  bedName.value = '';
+
   // 重置为默认值
   Object.assign(form, {
     id: undefined,
@@ -1395,6 +1445,7 @@ const resetFormToDefault = () => {
     classTeacherName: '',
     dormitoryBuilding: '',
     dormitoryRoom: '',
+    bedInfo: '',
 
     // 银行卡信息字段
     bankCardNo: '',

+ 55 - 5
web/src/views/xg/xsjcxx/stuMsgSupply/stuMsgDialog.vue

@@ -640,7 +640,7 @@
             </el-col>
             <el-col :span="8">
               <el-form-item label="培养方式" prop="trainingType">
-                <el-select v-model="form.trainingType" placeholder="请选择培养方式">
+                <el-select v-model="form.trainingType" placeholder="请选择培养方式" disabled>
                   <!-- <el-option label="全日制" value="全日制" />
                   <el-option label="在职" value="在职" />
                   <el-option label="函授" value="函授" />
@@ -651,7 +651,7 @@
             </el-col>
             <el-col :span="8">
               <el-form-item label="录取类别" prop="admissionCategory">
-                <el-select v-model="form.admissionCategory" placeholder="请选择录取类别">
+                <el-select v-model="form.admissionCategory" placeholder="请选择录取类别" disabled>
                   <!-- <el-option label="统招" value="统招" />
                   <el-option label="自主招生" value="自主招生" />
                   <el-option label="专项计划" value="专项计划" /> -->
@@ -663,7 +663,7 @@
           <el-row :gutter="20">
             <el-col :span="8">
               <el-form-item label="学籍状态" prop="studentStatus">
-                <el-select v-model="form.studentStatus" placeholder="请选择学籍状态">
+                <el-select v-model="form.studentStatus" placeholder="请选择学籍状态" disabled>
                   <!-- <el-option label="在籍" value="1" />
                   <el-option label="休学" value="2" />
                   <el-option label="复学" value="3" />
@@ -706,8 +706,13 @@
           </el-row>
           <el-row :gutter="20">
             <el-col :span="8">
-              <el-form-item label="宿舍房间号" prop="dormitoryRoom">
-                <el-input disabled v-model="form.dormitoryRoom" placeholder="请输入宿舍房间号" maxlength="20" />
+              <el-form-item label="宿舍房间" prop="dormitoryRoom">
+                <el-input disabled v-model="dormitoryRoomName" placeholder="请输入宿舍房间" maxlength="20" />
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="床位" prop="bedInfo">
+                <el-input disabled v-model="bedName" placeholder="请输入床位" maxlength="20" />
               </el-form-item>
             </el-col>
           </el-row>
@@ -830,6 +835,10 @@ const dialogLoading = ref(false); // 对话框整体加载状态
 const regionOptions = ref([]); // 行政区划选项
 const dormBuildingOptions = ref([]); // 宿舍楼栋选项
 
+// 宿舍信息相关数据
+const dormitoryRoomName = ref(''); // 宿舍房间名称
+const bedName = ref(''); // 床位名称
+
 // 历史记录相关数据
 const historyLoading = ref(false);
 const historyRecords = ref<any[]>([]);
@@ -1054,6 +1063,9 @@ const getUserHistoryData = async (batchId: number) => {
         }
       });
 
+      // 获取宿舍房间和床位信息
+      await getDormitoryInfo(historyData.dormitoryRoom, historyData.extField1);
+
       ElMessage.success('历史数据加载成功');
       console.log('表单数据已更新:', form);
     } else {
@@ -1068,6 +1080,39 @@ const getUserHistoryData = async (batchId: number) => {
   }
 };
 
+/** 获取宿舍房间和床位信息 */
+const getDormitoryInfo = async (roomId: string | number, bedId: string | number) => {
+  try {
+    // 获取宿舍房间信息
+    if (roomId) {
+      const roomRes = await request.get(`/xgss/dormRoom/${roomId}`);
+      if (roomRes && roomRes.code === 200 && roomRes.data) {
+        dormitoryRoomName.value = roomRes.data.roomName || roomRes.data.name || '未知房间';
+      } else {
+        dormitoryRoomName.value = '未知房间';
+      }
+    } else {
+      dormitoryRoomName.value = '';
+    }
+
+    // 获取床位信息
+    if (bedId) {
+      const bedRes = await request.get(`/dormbed/dormBed/${bedId}`);
+      if (bedRes && bedRes.code === 200 && bedRes.data) {
+        bedName.value = bedRes.data.bedName || bedRes.data.name || '未知床位';
+      } else {
+        bedName.value = '未知床位';
+      }
+    } else {
+      bedName.value = '';
+    }
+  } catch (error) {
+    console.error('获取宿舍信息失败:', error);
+    dormitoryRoomName.value = '获取失败';
+    bedName.value = '获取失败';
+  }
+};
+
 // 表单数据
 const form = reactive({
   id: undefined,
@@ -1167,6 +1212,7 @@ const form = reactive({
   classTeacherName: '',
   dormitoryBuilding: '',
   dormitoryRoom: '',
+  extField1: '',
 
   // // 银行卡信息字段
   bankCardNo: '',
@@ -1362,6 +1408,10 @@ const resetFormToDefault = () => {
   }
   photoLoading.value = false;
 
+  // 重置宿舍信息
+  dormitoryRoomName.value = '';
+  bedName.value = '';
+
   // 重置为默认值
   Object.assign(form, {
     id: undefined,

+ 59 - 2
web/src/views/xg/xsjcxx/stuPersonalMsg/index.vue

@@ -686,8 +686,13 @@
             </el-row>
             <el-row :gutter="30">
               <el-col :span="8">
-                <el-form-item label="宿舍房间号" prop="dormitoryRoom">
-                  <el-input disabled v-model="form.dormitoryRoom" placeholder="请输入宿舍房间号" maxlength="20" />
+                <el-form-item label="宿舍房间" prop="dormitoryRoom">
+                  <el-input disabled v-model="dormitoryRoomName" placeholder="宿舍房间" maxlength="20" />
+                </el-form-item>
+              </el-col>
+              <el-col :span="8">
+                <el-form-item label="床位" prop="extField1">
+                  <el-input disabled v-model="bedName" placeholder="床位" maxlength="20" />
                 </el-form-item>
               </el-col>
             </el-row>
@@ -786,6 +791,8 @@ const dormBuildingOptions = ref([]); // 宿舍楼栋选项
 const loading = ref(false); // 加载状态
 const photoLoading = ref(false); // 照片加载状态
 const asyncPhotoUrl = ref(''); // 异步加载的照片URL
+const dormitoryRoomName = ref(''); // 宿舍房间名称
+const bedName = ref(''); // 床位名称
 
 // 表单数据
 const form = reactive({
@@ -886,6 +893,9 @@ const form = reactive({
   classTeacherName: '',
   dormitoryBuilding: '',
   dormitoryRoom: '',
+  extField1: '', // 新增床位字段
+  dormitoryRoomName: '', // 新增宿舍房间名称字段
+  bedName: '', // 新增床位名称字段
 
   // 银行卡信息字段
   bankCardNo: '',
@@ -924,6 +934,9 @@ const getPersonalInfoData = async () => {
       });
       // 将API返回的数据映射到表单
       Object.assign(form, data);
+
+      // 获取宿舍房间和床位信息
+      await getDormitoryInfo();
     } else {
       ElMessage.error(response.data.msg || '获取个人信息失败');
     }
@@ -935,6 +948,50 @@ const getPersonalInfoData = async () => {
   }
 };
 
+/** 获取宿舍房间和床位信息 */
+const getDormitoryInfo = async () => {
+  try {
+    // 获取宿舍房间信息
+    if (form.dormitoryRoom) {
+      const roomId = String(form.dormitoryRoom); // 转换为字符串保持精度
+      const roomResponse = await request({
+        url: `/xgss/dormRoom/${roomId}`,
+        method: 'get'
+      });
+      if (roomResponse.code === 200 && roomResponse.data) {
+        const roomData = roomResponse.data;
+        dormitoryRoomName.value = roomData.roomName || roomData.roomCode || '未知房间';
+      } else {
+        dormitoryRoomName.value = '房间信息获取失败';
+      }
+    }
+
+    // 获取床位信息
+    if (form.extField1) {
+      const bedId = String(form.extField1); // 转换为字符串保持精度
+      const bedResponse = await request({
+        url: `/dormbed/dormBed/${bedId}`,
+        method: 'get'
+      });
+      if (bedResponse.code === 200 && bedResponse.data) {
+        const bedData = bedResponse.data;
+        bedName.value = bedData.bedName || bedData.bedCode || '未知床位';
+      } else {
+        bedName.value = '床位信息获取失败';
+      }
+    }
+  } catch (error) {
+    console.error('获取宿舍信息失败:', error);
+    // 不显示错误提示,避免影响主要功能
+    if (form.dormitoryRoom) {
+      dormitoryRoomName.value = '房间信息获取失败';
+    }
+    if (form.extField1) {
+      bedName.value = '床位信息获取失败';
+    }
+  }
+};
+
 /** 根据行政区划代码获取完整路径(省/市/区) */
 const getRegionFullPath = (code: string): string => {
   if (!code || !regionOptions.value) return code || '';

+ 56 - 2
web/src/views/xg/xsjcxx/stuRoster/components/StudentDetailDialog.vue

@@ -682,8 +682,13 @@
             </el-row>
             <el-row :gutter="30">
               <el-col :span="8">
-                <el-form-item label="宿舍房间号" prop="dormitoryRoom">
-                  <el-input disabled v-model="form.dormitoryRoom" placeholder="请输入宿舍房间号" maxlength="20" />
+                <el-form-item label="宿舍房间" prop="dormitoryRoom">
+                  <el-input disabled v-model="form.dormitoryRoomName" placeholder="宿舍房间名称" maxlength="20" />
+                </el-form-item>
+              </el-col>
+              <el-col :span="8">
+                <el-form-item label="床位" prop="extField1">
+                  <el-input disabled v-model="form.bedName" placeholder="床位名称" maxlength="20" />
                 </el-form-item>
               </el-col>
             </el-row>
@@ -905,6 +910,9 @@ const form = reactive({
   classTeacherName: '',
   dormitoryBuilding: '',
   dormitoryRoom: '',
+  dormitoryRoomName: '', // 宿舍房间名称
+  extField1: '', // 床位ID
+  bedName: '', // 床位名称
 
   // 银行卡信息字段
   bankCardNo: '',
@@ -946,6 +954,9 @@ const getPersonalInfoData = async (studentId?: number) => {
       });
       // 将API返回的数据映射到表单
       Object.assign(form, data);
+
+      // 异步获取宿舍房间和床位信息
+      await getDormitoryInfo();
     } else {
       ElMessage.error(response.msg || '获取个人信息失败');
     }
@@ -957,6 +968,44 @@ const getPersonalInfoData = async (studentId?: number) => {
   }
 };
 
+/** 获取宿舍房间和床位信息 */
+const getDormitoryInfo = async () => {
+  try {
+    // 获取宿舍房间信息
+    if (form.dormitoryRoom) {
+      const roomId = String(form.dormitoryRoom); // 转换为字符串保持精度
+      const roomResponse = await api.getDormRoomInfo(roomId);
+      if (roomResponse.code === 200 && roomResponse.data) {
+        const roomData = roomResponse.data as any;
+        form.dormitoryRoomName = roomData.roomName || roomData.name || '未知房间';
+      } else {
+        form.dormitoryRoomName = '房间信息获取失败';
+      }
+    }
+
+    // 获取床位信息
+    if (form.extField1) {
+      const bedId = String(form.extField1); // 转换为字符串保持精度
+      const bedResponse = await api.getDormBedInfo(bedId);
+      if (bedResponse.code === 200 && bedResponse.data) {
+        const bedData = bedResponse.data as any;
+        form.bedName = bedData.bedName || bedResponse.data.name || '未知床位';
+      } else {
+        form.bedName = '床位信息获取失败';
+      }
+    }
+  } catch (error) {
+    console.error('获取宿舍信息失败:', error);
+    // 不显示错误提示,避免影响主要功能
+    if (form.dormitoryRoom) {
+      form.dormitoryRoomName = '房间信息获取失败';
+    }
+    if (form.extField1) {
+      form.bedName = '床位信息获取失败';
+    }
+  }
+};
+
 /** 根据行政区划代码获取完整路径(省/市/区) */
 const getRegionFullPath = (code: string): string => {
   if (!code || !regionOptions.value) return code || '';
@@ -1092,6 +1141,11 @@ watch(
         }
       });
 
+      // 重置宿舍相关字段
+      form.dormitoryRoomName = '';
+      form.extField1 = '';
+      form.bedName = '';
+
       // 获取学生个人信息
       await getPersonalInfoData(studentId);
     }