zlwu 1 rok temu
rodzic
commit
9ae3f78a26

+ 4 - 2
web/src/api/xg/xgss/holidayStay/holidayStay/index-sg.ts

@@ -83,12 +83,14 @@ export const getStudentOptions = (
 /**
  * 查询单人留宿有效数据
  * 获取所有有效的假期留宿数据,筛选出在同一时间段内该宿舍只有一个学生留宿的记录
+ * @param query 查询参数,支持宿管员权限过滤
  * @returns 单人留宿有效数据列表
  */
-export const getSinglePersonValidStay = (): AxiosPromise<HolidayStayVO[]> => {
+export const getSinglePersonValidStay = (query?: any): AxiosPromise<HolidayStayVO[]> => {
   return request({
     url: '/holidayStay/holidayStay/singlePersonValidStay',
-    method: 'get'
+    method: 'get',
+    params: query
   });
 };
 

+ 32 - 1
web/src/views/xg/xgss/holidayStay/holidayStay/index-sg.vue

@@ -1864,7 +1864,38 @@ const getSinglePersonValidStayData = async () => {
   singlePersonLoading.value = true;
   try {
     console.log('开始获取单人留宿有效数据...');
-    const res = await getSinglePersonValidStay();
+
+    // 确保用户信息已加载
+    if (!userStore.userId) {
+      await userStore.getInfo();
+    }
+
+    // 获取宿管员权限楼栋列表
+    const buildingIds = await getDormManagerBuildingIds();
+
+    // 如果没有宿管员权限,直接返回空列表
+    if (!hasDormManagerPermission.value || buildingIds.length === 0) {
+      singlePersonStayList.value = [];
+      groupedSinglePersonStayList.value = {};
+      console.log('当前用户没有宿管员权限或没有分配管理楼栋,单人留宿数据为空');
+      return;
+    }
+
+    // 构建请求参数,添加宿管员权限过滤
+    const requestParams: any = {};
+
+    // 宿管员权限过滤:添加楼栋ID过滤条件
+    if (buildingIds.length === 1) {
+      // 单个楼栋直接设置buildingId
+      requestParams.buildingId = buildingIds[0];
+    } else {
+      // 多个楼栋使用in查询,通过params传递
+      requestParams.params = {
+        buildingIds: buildingIds.join(',')
+      };
+    }
+
+    const res = await getSinglePersonValidStay(requestParams);
     console.log('单人留宿数据响应:', res);
 
     if (res.code === 200) {

+ 24 - 5
web/src/views/xg/xgss/xsssgly/components/AdminDialog.vue

@@ -7,7 +7,7 @@
         </template>
         <template v-else>
           <el-select
-            v-model="form.name"
+            v-model="selectedTeacherId"
             filterable
             remote
             reserve-keyword
@@ -75,6 +75,7 @@ export default defineComponent({
   setup(props, { emit }) {
     const loading = ref(false);
     const teacherOptions = ref<any[]>([]);
+    const selectedTeacherId = ref(''); // 专门用于下拉框选择的字段
 
     // 根据类型获取对话框标题
     const getDialogTitle = () => {
@@ -142,7 +143,7 @@ export default defineComponent({
           teacherOptions.value = res.data.map((item: any) => {
             return {
               value: item.value,
-              label: item.label,
+              label: item.username ? `${item.label}(${item.username})` : item.label,
               username: item.username,
               nickName: item.label,
               userId: item.value, // 直接使用API返回的value作为userId
@@ -171,11 +172,28 @@ export default defineComponent({
             // 确保性别值为数字类型
             form.sex = Number(form.sex);
           }
+          // 在编辑模式下,设置选中的教师ID
+          if (props.mode === 'edit' && newVal.userId) {
+            selectedTeacherId.value = newVal.userId;
+          }
         }
       },
       { deep: true, immediate: true }
     );
 
+    // 监听选择的教师ID变化
+    watch(selectedTeacherId, (newVal) => {
+      if (!newVal) {
+        // 清空选择时重置相关字段
+        form.userId = null;
+        form.name = '';
+        form.nickName = '';
+        form.phone = '';
+        form.sex = 0;
+        form.remark = '';
+      }
+    });
+
     // 选择教师后处理逻辑
     const handleTeacherSelect = (value: any) => {
       const selectedTeacher = teacherOptions.value.find((item) => item.value === value);
@@ -186,7 +204,7 @@ export default defineComponent({
         // 确保性别值为数字类型
         form.sex = selectedTeacher.sex !== undefined ? Number(selectedTeacher.sex) : 0;
         form.nickName = selectedTeacher.nickName;
-        form.name = selectedTeacher.label;
+        form.name = selectedTeacher.nickName; // 存储纯粹的姓名
         // form.id = selectedTeacher.userId;
         form.remark = '';
         console.log('选中教师信息:', selectedTeacher, '转换后性别值:', form.sex);
@@ -218,7 +236,7 @@ export default defineComponent({
           teacherOptions.value = res.data.map((item: any) => {
             return {
               value: item.value,
-              label: item.label,
+              label: item.username ? `${item.label}(${item.username})` : item.label,
               username: item.username,
               userId: item.value,
               nickName: item.label,
@@ -258,7 +276,7 @@ export default defineComponent({
           teacherOptions.value = res.data.map((item: any) => {
             return {
               value: item.value,
-              label: item.label,
+              label: item.username ? `${item.label}(${item.username})` : item.label,
               username: item.username,
               userId: item.value,
               nickName: item.label,
@@ -337,6 +355,7 @@ export default defineComponent({
       formRef,
       loading,
       teacherOptions,
+      selectedTeacherId,
       rules,
       getDialogTitle,
       queryTeachers,