|
|
@@ -145,6 +145,12 @@
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
|
|
|
+ <!-- <el-table-column v-if="columns[9].visible" label="宿舍房间" align="center" prop="dormitoryRoom" width="120">
|
|
|
+ <template #default="scope">
|
|
|
+ <span>{{ getRoomDisplayName(scope.row.dormitoryRoom) }}</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column> -->
|
|
|
+
|
|
|
<el-table-column label="操作" fixed="right" width="240" class-name="small-padding fixed-width">
|
|
|
<template #default="scope">
|
|
|
<el-tooltip content="修改" placement="top">
|
|
|
@@ -826,8 +832,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 :value="getRoomDisplayName(form.dormitoryRoom)" placeholder="宿舍房间" maxlength="20" />
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="8">
|
|
|
+ <el-form-item label="床位" prop="extField1">
|
|
|
+ <el-input disabled :value="getBedDisplayName(form.extField1)" placeholder="床位" maxlength="20" />
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
</el-row>
|
|
|
@@ -1389,8 +1400,13 @@
|
|
|
</el-row>
|
|
|
<el-row :gutter="20">
|
|
|
<el-col :span="8">
|
|
|
- <el-form-item label="宿舍房间号">
|
|
|
- <span class="form-value">{{ detailForm.dormitoryRoom }}</span>
|
|
|
+ <el-form-item label="宿舍房间">
|
|
|
+ <span class="form-value">{{ getRoomDisplayName(detailForm.dormitoryRoom) }}</span>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="8">
|
|
|
+ <el-form-item label="床位">
|
|
|
+ <span class="form-value">{{ getBedDisplayName(detailForm.extField1) }}</span>
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
</el-row>
|
|
|
@@ -1603,6 +1619,8 @@ const classOptions = ref([]);
|
|
|
const regionOptions = ref([]); // 行政区划选项
|
|
|
const dormBuildingOptions = ref([]); // 宿舍楼栋选项
|
|
|
const currentSelectedNode = ref<any>(null); // 当前选中的部门节点
|
|
|
+const roomCache = ref<Map<string | number, string>>(new Map()); // 房间名称缓存
|
|
|
+const bedCache = ref<Map<string | number, string>>(new Map()); // 床位名称缓存
|
|
|
|
|
|
// 计算属性:判断是否显示新增按钮(只有班级节点才显示)
|
|
|
const showAddButton = computed(() => {
|
|
|
@@ -1623,7 +1641,8 @@ const columns = ref([
|
|
|
{ key: 5, label: `班级`, visible: true },
|
|
|
{ key: 6, label: `手机号码`, visible: true },
|
|
|
{ key: 7, label: `状态`, visible: true },
|
|
|
- { key: 8, label: `创建时间`, visible: true }
|
|
|
+ { key: 8, label: `创建时间`, visible: true },
|
|
|
+ { key: 9, label: `宿舍房间`, visible: true }
|
|
|
]);
|
|
|
|
|
|
const deptTreeRef = ref<any>();
|
|
|
@@ -1686,7 +1705,7 @@ const initFormData: StudentMsgForm = {
|
|
|
photoUrl: '',
|
|
|
photoPath: '',
|
|
|
phone: '',
|
|
|
- isBoarder: 0,
|
|
|
+ isBoarder: '0',
|
|
|
|
|
|
// // 扩展信息字段
|
|
|
educationLevel: '2',
|
|
|
@@ -1700,14 +1719,14 @@ const initFormData: StudentMsgForm = {
|
|
|
emergencyContactName: '',
|
|
|
emergencyContactPhone: '',
|
|
|
emergencyContactRelation: '',
|
|
|
- isPoorStudent: 0,
|
|
|
- isMinority: 0,
|
|
|
- isDisabled: 0,
|
|
|
- isOrphan: 0,
|
|
|
- isLeftBehindChild: 0,
|
|
|
- isSingleChild: 0,
|
|
|
- isLowIncome: 0,
|
|
|
- hasLoan: 0,
|
|
|
+ isPoorStudent: '0',
|
|
|
+ isMinority: '0',
|
|
|
+ isDisabled: '0',
|
|
|
+ isOrphan: '0',
|
|
|
+ isLeftBehindChild: '0',
|
|
|
+ isSingleChild: '0',
|
|
|
+ isLowIncome: '0',
|
|
|
+ hasLoan: '0',
|
|
|
loanAmount: undefined,
|
|
|
specialties: '',
|
|
|
awards: '',
|
|
|
@@ -1762,6 +1781,7 @@ const initFormData: StudentMsgForm = {
|
|
|
classTeacherName: '',
|
|
|
dormitoryBuilding: '',
|
|
|
dormitoryRoom: '',
|
|
|
+ extField1: '', // 床位ID
|
|
|
|
|
|
// // 银行卡信息字段
|
|
|
bankCardNo: '',
|
|
|
@@ -1873,6 +1893,152 @@ const getDormBuildingName = (id: string | number) => {
|
|
|
return findBuildingName(dormBuildingOptions.value, id) || String(id);
|
|
|
};
|
|
|
|
|
|
+/** 根据房间ID获取房间名称 */
|
|
|
+const getRoomName = async (roomId: string | number): Promise<string> => {
|
|
|
+ if (!roomId) return '';
|
|
|
+
|
|
|
+ // 检查缓存
|
|
|
+ if (roomCache.value.has(roomId)) {
|
|
|
+ return roomCache.value.get(roomId) || '';
|
|
|
+ }
|
|
|
+
|
|
|
+ try {
|
|
|
+ // 调用房间信息接口
|
|
|
+ const res = await service.get(`/xgss/dormRoom/${roomId}`);
|
|
|
+ if (res && res.code === 200 && res.data) {
|
|
|
+ const roomName = res.data.roomName || res.data.roomCode || String(roomId);
|
|
|
+ // 缓存结果
|
|
|
+ roomCache.value.set(roomId, roomName);
|
|
|
+ return roomName;
|
|
|
+ }
|
|
|
+ } catch (error) {
|
|
|
+ console.error('获取房间信息失败:', error);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 如果获取失败,返回ID并缓存
|
|
|
+ roomCache.value.set(roomId, String(roomId));
|
|
|
+ return String(roomId);
|
|
|
+};
|
|
|
+
|
|
|
+/** 根据床位ID获取床位名称 */
|
|
|
+const getBedName = async (bedId: string | number): Promise<string> => {
|
|
|
+ if (!bedId) return '';
|
|
|
+
|
|
|
+ // 检查缓存
|
|
|
+ if (bedCache.value.has(bedId)) {
|
|
|
+ return bedCache.value.get(bedId) || '';
|
|
|
+ }
|
|
|
+
|
|
|
+ try {
|
|
|
+ // 调用床位信息接口
|
|
|
+ const res = await service.get(`/dormbed/dormBed/${bedId}`);
|
|
|
+ if (res && res.code === 200 && res.data) {
|
|
|
+ const bedName = res.data.bedName || res.data.bedCode || String(bedId);
|
|
|
+ // 缓存结果
|
|
|
+ bedCache.value.set(bedId, bedName);
|
|
|
+ return bedName;
|
|
|
+ }
|
|
|
+ } catch (error) {
|
|
|
+ console.error('获取床位信息失败:', error);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 如果获取失败,返回ID并缓存
|
|
|
+ bedCache.value.set(bedId, String(bedId));
|
|
|
+ return String(bedId);
|
|
|
+};
|
|
|
+
|
|
|
+/** 获取房间显示名称(同步方法,用于弹窗显示) */
|
|
|
+const getRoomDisplayName = (roomId: string | number): string => {
|
|
|
+ if (!roomId) return '-';
|
|
|
+
|
|
|
+ // 优先从缓存中获取
|
|
|
+ if (roomCache.value.has(roomId)) {
|
|
|
+ return roomCache.value.get(roomId) || String(roomId);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 如果缓存中没有,返回ID,并异步加载
|
|
|
+ setTimeout(() => {
|
|
|
+ getRoomName(roomId);
|
|
|
+ }, 0);
|
|
|
+
|
|
|
+ return String(roomId);
|
|
|
+};
|
|
|
+
|
|
|
+/** 获取床位显示名称(同步方法,用于弹窗显示) */
|
|
|
+const getBedDisplayName = (bedId: string | number): string => {
|
|
|
+ if (!bedId) return '-';
|
|
|
+
|
|
|
+ // 优先从缓存中获取
|
|
|
+ if (bedCache.value.has(bedId)) {
|
|
|
+ return bedCache.value.get(bedId) || String(bedId);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 如果缓存中没有,返回ID,并异步加载
|
|
|
+ setTimeout(() => {
|
|
|
+ getBedName(bedId);
|
|
|
+ }, 0);
|
|
|
+
|
|
|
+ return String(bedId);
|
|
|
+};
|
|
|
+
|
|
|
+/** 预加载房间信息 */
|
|
|
+const preloadRoomInfo = async () => {
|
|
|
+ if (!studentList.value || studentList.value.length === 0) return;
|
|
|
+
|
|
|
+ // 收集所有需要查询的房间ID(兼容不同的字段名)
|
|
|
+ const roomIds = studentList.value
|
|
|
+ .map((student) => (student as any).dormitoryRoom || (student as any).dormitory_room)
|
|
|
+ .filter((roomId) => roomId && !roomCache.value.has(roomId));
|
|
|
+
|
|
|
+ if (roomIds.length === 0) return;
|
|
|
+
|
|
|
+ // 批量查询房间信息
|
|
|
+ const uniqueRoomIds = [...new Set(roomIds)];
|
|
|
+
|
|
|
+ for (const roomId of uniqueRoomIds) {
|
|
|
+ try {
|
|
|
+ const res = await service.get(`/xgss/dormRoom/${roomId}`);
|
|
|
+ if (res && res.code === 200 && res.data) {
|
|
|
+ const roomName = res.data.roomName || res.data.roomCode || String(roomId);
|
|
|
+ roomCache.value.set(roomId, roomName);
|
|
|
+ } else {
|
|
|
+ roomCache.value.set(roomId, String(roomId));
|
|
|
+ }
|
|
|
+ } catch (error) {
|
|
|
+ console.error(`获取房间信息失败,房间ID: ${roomId}`, error);
|
|
|
+ roomCache.value.set(roomId, String(roomId));
|
|
|
+ }
|
|
|
+ }
|
|
|
+};
|
|
|
+
|
|
|
+/** 预加载床位信息 */
|
|
|
+const preloadBedInfo = async () => {
|
|
|
+ if (!studentList.value || studentList.value.length === 0) return;
|
|
|
+
|
|
|
+ // 收集所有需要查询的床位ID(从extField1字段获取)
|
|
|
+ const bedIds = studentList.value.map((student) => (student as any).extField1).filter((bedId) => bedId && !bedCache.value.has(bedId));
|
|
|
+
|
|
|
+ if (bedIds.length === 0) return;
|
|
|
+
|
|
|
+ // 批量查询床位信息
|
|
|
+ const uniqueBedIds = [...new Set(bedIds)];
|
|
|
+
|
|
|
+ for (const bedId of uniqueBedIds) {
|
|
|
+ try {
|
|
|
+ const res = await service.get(`/dormbed/dormBed/${bedId}`);
|
|
|
+ if (res && res.code === 200 && res.data) {
|
|
|
+ const bedName = res.data.bedName || res.data.bedCode || String(bedId);
|
|
|
+ bedCache.value.set(bedId, bedName);
|
|
|
+ } else {
|
|
|
+ bedCache.value.set(bedId, String(bedId));
|
|
|
+ }
|
|
|
+ } catch (error) {
|
|
|
+ console.error(`获取床位信息失败,床位ID: ${bedId}`, error);
|
|
|
+ bedCache.value.set(bedId, String(bedId));
|
|
|
+ }
|
|
|
+ }
|
|
|
+};
|
|
|
+
|
|
|
/** 根据行政区划代码获取完整路径(省/市/区) */
|
|
|
const getRegionFullPath = (code: string): string => {
|
|
|
if (!code || !regionOptions.value) return code || '';
|
|
|
@@ -1940,6 +2106,11 @@ const getList = async () => {
|
|
|
if (res && res.code === 200) {
|
|
|
studentList.value = res.rows || [];
|
|
|
total.value = res.total || 0;
|
|
|
+
|
|
|
+ // 预加载房间信息
|
|
|
+ await preloadRoomInfo();
|
|
|
+ // 预加载床位信息
|
|
|
+ await preloadBedInfo();
|
|
|
} else {
|
|
|
ElMessage.error(res?.msg || '查询学生列表失败');
|
|
|
studentList.value = [];
|