Parcourir la source

学校与校区关联班级显示

jinxia.mo il y a 1 jour
Parent
commit
4c49c5b8c0

+ 19 - 0
back-ui/src/views/dz/campus/index.vue

@@ -105,6 +105,11 @@
                 </template>
               </el-table-column>
               <el-table-column label="备注" align="center" prop="remark" />
+              <el-table-column label="班级管理" align="center" width="120">
+                <template #default="scope">
+                  <el-button link type="primary" @click="handleViewClasses(scope.row)">点击查看</el-button>
+                </template>
+              </el-table-column>
               <el-table-column label="操作" align="center" class-name="small-padding fixed-width" min-width="140" fixed="right">
                 <template #default="scope">
                   <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)"
@@ -122,6 +127,11 @@
       </splitpanes>
     </el-row>
 
+    <!-- 班级管理对话框 -->
+    <el-dialog title="班级管理" v-model="classesDialogOpen" width="90%" append-to-body>
+      <Classes :key="selectedCampusId" :externalSchoolId="selectedCampusId" />
+    </el-dialog>
+
     <!-- 添加或修改机构校区对话框 -->
     <el-dialog :title="title" v-model="open" width="500px" append-to-body>
       <el-form ref="campusRef" :model="form" :rules="rules" label-width="80px">
@@ -189,6 +199,7 @@ import useAppStore from '@/store/modules/app'
 import { Splitpanes, Pane } from "splitpanes"
 import "splitpanes/dist/splitpanes.css"
 import AddressSelect from '@/components/AddressSelect';
+import Classes from '@/views/dz/classes/index.vue';
 
 const { proxy } = getCurrentInstance()
 const appStore = useAppStore()
@@ -207,6 +218,8 @@ const single = ref(true)
 const multiple = ref(true)
 const total = ref(0)
 const title = ref("")
+const classesDialogOpen = ref(false) // 班级管理对话框显示状态
+const selectedCampusId = ref(null) // 选中的校区ID
 
 const dataList = ref([]);
 const areaIds = ref([]); // 筛选条件中的省市区
@@ -534,6 +547,12 @@ function formatExamTypes(examTypes) {
   return labels.join(',')
 }
 
+/** 查看班级管理 */
+function handleViewClasses(row) {
+  selectedCampusId.value = row.id
+  classesDialogOpen.value = true
+}
+
 onMounted(() => {
   getDeptTree()
   loadAllCampusList() // 加载所有校区列表

+ 49 - 12
back-ui/src/views/dz/classes/index.vue

@@ -14,6 +14,7 @@
                 v-model="queryParams.schoolId"
                 placeholder="请选择所在校区"
                 clearable
+                :disabled="isExternalSchoolIdSet"
                 style="width: 240px"
                 @keyup.enter="handleQuery"
         >
@@ -33,10 +34,10 @@
                 @keyup.enter="handleQuery"
         />
       </el-form-item>
-      <el-form-item label="名称" prop="name">
+      <el-form-item label="班级名称" prop="name">
         <el-input
                 v-model="queryParams.name"
-                placeholder="请输入名称"
+                placeholder="请输入班级名称"
                 clearable
                 @keyup.enter="handleQuery"
         />
@@ -51,14 +52,14 @@
           />
         </el-select>
       </el-form-item>
-      <el-form-item label="状态" prop="status">
+      <!-- <el-form-item label="状态" prop="status">
         <el-input
                 v-model="queryParams.status"
                 placeholder="请输入状态"
                 clearable
                 @keyup.enter="handleQuery"
         />
-      </el-form-item>
+      </el-form-item> -->
       <el-form-item>
         <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
         <el-button icon="Refresh" @click="resetQuery">重置</el-button>
@@ -119,11 +120,11 @@
           <dict-tag :options="bool_values" :value="scope.row.online"/>
         </template>
       </el-table-column>
-      <el-table-column label="状态" align="center" prop="status">
+      <!-- <el-table-column label="状态" align="center" prop="status">
         <template #default="scope">
           <dict-tag :options="bool_values" :value="scope.row.status"/>
         </template>
-      </el-table-column>
+      </el-table-column> -->
       <el-table-column label="统计数据" align="center" prop="stats" />
       <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
         <template #default="scope">
@@ -147,11 +148,14 @@
 <!--        <el-form-item label="学校" prop="schoolId">-->
 <!--          <el-input v-model="form.schoolId" placeholder="请输入学校" />-->
 <!--        </el-form-item>-->
-        <el-form-item label="班级名称" prop="name">
-          <el-input v-model="form.name" placeholder="多个名称使用英文逗号隔开" />
-        </el-form-item>
+        
         <el-form-item label="学校校区" prop="schoolId">
-          <el-select v-model="form.schoolId" placeholder="请选择学校校区" style="width: 100%">
+          <el-select 
+                  v-model="form.schoolId" 
+                  placeholder="请选择学校校区" 
+                  style="width: 100%"
+                  :disabled="isExternalSchoolIdSet || form.classId != null"
+          >
             <el-option
                     v-for="item in schoolOptions"
                     :key="item.id"
@@ -160,6 +164,9 @@
             />
           </el-select>
         </el-form-item>
+        <el-form-item label="班级名称" prop="name">
+          <el-input v-model="form.name" placeholder="多个名称使用英文逗号隔开" />
+        </el-form-item>
         <el-form-item label="毕业年份" prop="year">
           <el-input v-model="form.year" placeholder="请输入毕业年份" />
         </el-form-item>
@@ -174,9 +181,9 @@
             ></el-option>
           </el-select>
         </el-form-item>
-        <el-form-item label="状态" prop="status">
+        <!-- <el-form-item label="状态" prop="status">
           <el-input v-model="form.status" placeholder="请输入状态" />
-        </el-form-item>
+        </el-form-item> -->
       </el-form>
       <template #footer>
         <div class="dialog-footer">
@@ -192,6 +199,14 @@
   import { listClasses, getClasses, delClasses, addClasses, updateClasses } from "@/api/dz/classes"
   import {listAllSchool, listCampusSchoolList} from "@/api/dz/school"
 
+  // 接收外部传入的 schoolId prop
+  const props = defineProps({
+    externalSchoolId: {
+      type: [Number, String],
+      default: null
+    }
+  })
+
   const { proxy } = getCurrentInstance()
   const { bool_values } = proxy.useDict('bool_values')
 
@@ -233,6 +248,24 @@
 
   const { queryParams, form, rules } = toRefs(data)
 
+  // 计算属性:判断是否有外部传入的 schoolId
+  const isExternalSchoolIdSet = computed(() => {
+    const schoolId = props.externalSchoolId
+    return schoolId !== null && schoolId !== undefined && schoolId !== ''
+  })
+
+  // 监听外部传入的 schoolId,并设置到查询参数中
+  watch(() => props.externalSchoolId, (newSchoolId) => {
+    if (newSchoolId !== null && newSchoolId !== undefined && newSchoolId !== '') {
+      queryParams.value.schoolId = newSchoolId
+      queryParams.value.pageNum = 1
+      // 延迟执行查询,确保组件已完全初始化
+      nextTick(() => {
+        getList()
+      })
+    }
+  }, { immediate: true })
+
   /** 查询学生班级列表 */
   function getList() {
     loading.value = true
@@ -294,6 +327,10 @@
   /** 新增按钮操作 */
   function handleAdd() {
     reset()
+    // 如果有外部传入的 schoolId,自动设置到表单中
+    if (isExternalSchoolIdSet.value) {
+      form.value.schoolId = props.externalSchoolId
+    }
     open.value = true
     title.value = "添加学生班级"
   }

+ 19 - 0
back-ui/src/views/dz/school/index.vue

@@ -131,6 +131,11 @@
                 </template>
               </el-table-column>
               <el-table-column label="备注" align="center" prop="remark" />
+              <el-table-column label="班级管理" align="center" width="120">
+                <template #default="scope">
+                  <el-button link type="primary" @click="handleViewClasses(scope.row)">点击查看</el-button>
+                </template>
+              </el-table-column>
               <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
                 <template #default="scope">
                   <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['dz:school:edit']">修改</el-button>
@@ -151,6 +156,11 @@
       </splitpanes>
     </el-row>
 
+    <!-- 班级管理对话框 -->
+    <el-dialog title="班级管理" v-model="classesDialogOpen" width="90%" append-to-body>
+      <Classes :key="selectedSchoolId" :externalSchoolId="selectedSchoolId" />
+    </el-dialog>
+
     <!-- 添加或修改机构校区对话框 -->
     <el-dialog :title="title" v-model="open" width="500px" append-to-body>
       <el-form ref="schoolRef" :model="form" :rules="rules" label-width="80px">
@@ -209,6 +219,7 @@
   import "splitpanes/dist/splitpanes.css"
   import AddressSelect from '@/components/AddressSelect';
   import { debounce } from '@/utils/index';
+  import Classes from '@/views/dz/classes/index.vue';
 
   const { proxy } = getCurrentInstance()
   const appStore = useAppStore()
@@ -227,6 +238,8 @@
   const multiple = ref(true)
   const total = ref(0)
   const title = ref("")
+  const classesDialogOpen = ref(false) // 班级管理对话框显示状态
+  const selectedSchoolId = ref(null) // 选中的学校ID
 
   const dataList = ref([]);
   const areaIds = ref([]); // 筛选条件中的省市区
@@ -558,6 +571,12 @@
     return labels.join(',')
   }
 
+  /** 查看班级管理 */
+  function handleViewClasses(row) {
+    selectedSchoolId.value = row.id
+    classesDialogOpen.value = true
+  }
+
   onMounted(() => {
     // getDeptTree()
     loadAllSchoolList() // 加载所有学校列表