|
@@ -1,137 +1,62 @@
|
|
|
<script setup lang="ts">
|
|
|
-import { GradeList } from "@/api/school/types";
|
|
|
+import { GradeItem } from "@/api/school/types";
|
|
|
+import { watch } from "vue";
|
|
|
+import { useUserStore } from "@/store/modules/user";
|
|
|
+import { CaretBottom } from "@element-plus/icons-vue";
|
|
|
+import { getGradeList, getGradeStudents } from "@/api/school";
|
|
|
|
|
|
defineOptions({
|
|
|
name: "ClassIndex",
|
|
|
inheritAttrs: false,
|
|
|
});
|
|
|
-import { watch } from "vue";
|
|
|
-import { useUserStore } from "@/store/modules/user";
|
|
|
-import { CaretBottom } from "@element-plus/icons-vue";
|
|
|
-import { getGradeList } from "@/api/school";
|
|
|
const userStore = useUserStore();
|
|
|
-watch(
|
|
|
- () => userStore.schoolId,
|
|
|
- (newValue, oldValue) => {
|
|
|
- //console.log(newValue, oldValue);
|
|
|
- getGradeData(newValue);
|
|
|
- }
|
|
|
-);
|
|
|
/**
|
|
|
* 班级数据
|
|
|
*/
|
|
|
-const gradeData = ref<GradeList[]>();
|
|
|
-// 班级编号
|
|
|
-let gradeId = ref(0);
|
|
|
-async function getGradeData(schoolId: number) {
|
|
|
- getGradeList(schoolId)
|
|
|
+const gradeData = ref<GradeItem[]>();
|
|
|
+// 班级status: 0全部1未结课2已结课
|
|
|
+let gradeStatus = ref(0);
|
|
|
+async function getGradeItems(schoolId: number, status: number) {
|
|
|
+ getGradeList(schoolId, status)
|
|
|
.then(({ data }) => {
|
|
|
gradeData.value = data;
|
|
|
- if (gradeId.value == 0) {
|
|
|
- gradeId.value = data[0].id;
|
|
|
- }
|
|
|
})
|
|
|
.catch((error) => {
|
|
|
console.log(error);
|
|
|
});
|
|
|
}
|
|
|
+// 请求班级学生数据
|
|
|
+async function getStudentList(grade: GradeItem) {
|
|
|
+ getGradeStudents(grade.id)
|
|
|
+ .then(({ data }) => {
|
|
|
+ grade.students = data;
|
|
|
+ })
|
|
|
+ .catch((error) => {
|
|
|
+ console.log(error);
|
|
|
+ });
|
|
|
+}
|
|
|
+// 改变班级状态
|
|
|
+function changeStatus() {
|
|
|
+ getGradeItems(userStore.schoolId, gradeStatus.value);
|
|
|
+}
|
|
|
+// 打开班级请求学生
|
|
|
+function changeGrade(grade: GradeItem) {
|
|
|
+ if (!grade.students || grade.students.length === 0) {
|
|
|
+ getStudentList(grade);
|
|
|
+ }
|
|
|
+}
|
|
|
onMounted(() => {
|
|
|
- getGradeData(userStore.schoolId);
|
|
|
+ // 获取班级
|
|
|
+ getGradeItems(userStore.schoolId, gradeStatus.value);
|
|
|
});
|
|
|
-// 折叠面板active
|
|
|
-const activeItem = ref();
|
|
|
-const tableData = ref<any>([
|
|
|
- {
|
|
|
- number: 1,
|
|
|
- name: "TomTomTom",
|
|
|
- phone: 1566666666,
|
|
|
- times: 12,
|
|
|
- },
|
|
|
- {
|
|
|
- number: 2,
|
|
|
- name: "TomTomTom",
|
|
|
- phone: 1566666666,
|
|
|
- times: 12,
|
|
|
- },
|
|
|
- {
|
|
|
- number: 3,
|
|
|
- name: "TomTomTom",
|
|
|
- phone: 1566666666,
|
|
|
- times: 12,
|
|
|
- },
|
|
|
- {
|
|
|
- number: 1,
|
|
|
- name: "TomTomTom",
|
|
|
- phone: 1566666666,
|
|
|
- times: 12,
|
|
|
- },
|
|
|
- {
|
|
|
- number: 2,
|
|
|
- name: "TomTomTom",
|
|
|
- phone: 1566666666,
|
|
|
- times: 12,
|
|
|
- },
|
|
|
- {
|
|
|
- number: 3,
|
|
|
- name: "TomTomTom",
|
|
|
- phone: 1566666666,
|
|
|
- times: 12,
|
|
|
- },
|
|
|
- {
|
|
|
- number: 1,
|
|
|
- name: "TomTomTom",
|
|
|
- phone: 1566666666,
|
|
|
- times: 12,
|
|
|
- },
|
|
|
- {
|
|
|
- number: 2,
|
|
|
- name: "TomTomTom",
|
|
|
- phone: 1566666666,
|
|
|
- times: 12,
|
|
|
- },
|
|
|
- {
|
|
|
- number: 3,
|
|
|
- name: "TomTomTom",
|
|
|
- phone: 1566666666,
|
|
|
- times: 12,
|
|
|
- },
|
|
|
- {
|
|
|
- number: 1,
|
|
|
- name: "TomTomTom",
|
|
|
- phone: 1566666666,
|
|
|
- times: 12,
|
|
|
- },
|
|
|
- {
|
|
|
- number: 2,
|
|
|
- name: "TomTomTom",
|
|
|
- phone: 1566666666,
|
|
|
- times: 12,
|
|
|
- },
|
|
|
- {
|
|
|
- number: 3,
|
|
|
- name: "TomTomTom",
|
|
|
- phone: 1566666666,
|
|
|
- times: 12,
|
|
|
- },
|
|
|
- {
|
|
|
- number: 1,
|
|
|
- name: "TomTomTom",
|
|
|
- phone: 1566666666,
|
|
|
- times: 12,
|
|
|
- },
|
|
|
- {
|
|
|
- number: 2,
|
|
|
- name: "TomTomTom",
|
|
|
- phone: 1566666666,
|
|
|
- times: 12,
|
|
|
- },
|
|
|
- {
|
|
|
- number: 3,
|
|
|
- name: "TomTomTom",
|
|
|
- phone: 1566666666,
|
|
|
- times: 12,
|
|
|
- },
|
|
|
-]);
|
|
|
+watch(
|
|
|
+ () => userStore.schoolId,
|
|
|
+ (newValue, oldValue) => {
|
|
|
+ console.log("userStore.schoolId", newValue, oldValue);
|
|
|
+ // 学校切换后重新加载数据
|
|
|
+ getGradeItems(newValue, gradeStatus.value);
|
|
|
+ }
|
|
|
+);
|
|
|
</script>
|
|
|
|
|
|
<template>
|
|
@@ -139,86 +64,36 @@ const tableData = ref<any>([
|
|
|
<!-- 班级选择 -->
|
|
|
<div class="class-select">
|
|
|
<el-select
|
|
|
- v-model="gradeId"
|
|
|
+ v-model="gradeStatus"
|
|
|
placeholder="全部班级"
|
|
|
size="large"
|
|
|
:suffix-icon="CaretBottom"
|
|
|
+ @change="changeStatus()"
|
|
|
>
|
|
|
- <el-option
|
|
|
- v-for="item in gradeData"
|
|
|
- :key="item.id"
|
|
|
- :label="item.name"
|
|
|
- :value="item.id"
|
|
|
- />
|
|
|
+ <el-option key="0" label="全部班级" :value="Number(0)" />
|
|
|
+ <el-option key="1" label="未结课班级" :value="Number(1)" />
|
|
|
+ <el-option key="1" label="已结课班级" :value="Number(2)" />
|
|
|
</el-select>
|
|
|
</div>
|
|
|
<!-- 班级折叠面板-->
|
|
|
- <div class="list-collapse">
|
|
|
- <el-collapse v-model="activeItem">
|
|
|
+ <div v-for="grade in gradeData" :key="grade.id" class="list-collapse">
|
|
|
+ <el-collapse v-model="grade.active" @change="changeGrade(grade)">
|
|
|
<el-collapse-item name="1">
|
|
|
<template #title>
|
|
|
<div class="title">
|
|
|
- <span class="blue mr-10">向日葵小班</span>
|
|
|
- <span class="mr-10">教师:松阪老师</span>
|
|
|
- <span>班级号:C 2208 887829</span>
|
|
|
- <span class="red ml-10">结课时间:2023-08-11</span>
|
|
|
- <span class="blue fr"
|
|
|
- >学生:12人
|
|
|
- <el-icon
|
|
|
- :class="
|
|
|
- activeItem && activeItem.includes('1') ? 'is-active' : ''
|
|
|
- "
|
|
|
- ><CaretBottom
|
|
|
- /></el-icon>
|
|
|
- </span>
|
|
|
- </div>
|
|
|
- </template>
|
|
|
- <div>
|
|
|
- <el-table :data="tableData" height="400" style="width: 100%">
|
|
|
- <el-table-column
|
|
|
- prop="number"
|
|
|
- label="序号"
|
|
|
- width="80"
|
|
|
- align="center"
|
|
|
- />
|
|
|
- <el-table-column
|
|
|
- prop="name"
|
|
|
- label="学生名称"
|
|
|
- width="180"
|
|
|
- align="center"
|
|
|
- />
|
|
|
- <el-table-column
|
|
|
- prop="phone"
|
|
|
- label="手机号"
|
|
|
- width="180"
|
|
|
- align="center"
|
|
|
- />
|
|
|
- <el-table-column
|
|
|
- prop="times"
|
|
|
- label="训练次数"
|
|
|
- width="180"
|
|
|
- align="center"
|
|
|
- />
|
|
|
- <el-table-column />
|
|
|
- </el-table>
|
|
|
- </div>
|
|
|
- </el-collapse-item>
|
|
|
- </el-collapse>
|
|
|
- </div>
|
|
|
- <div class="list-collapse">
|
|
|
- <el-collapse v-model="activeItem">
|
|
|
- <el-collapse-item name="2">
|
|
|
- <template #title>
|
|
|
- <div class="title">
|
|
|
- <span class="blue mr-10">向日葵小班</span>
|
|
|
- <span class="mr-10">教师:松阪老师</span>
|
|
|
- <span>班级号:C 2208 887829</span>
|
|
|
- <span class="red ml-10">结课时间:2023-08-11</span>
|
|
|
+ <span class="blue mr-10">{{ grade.name }}</span>
|
|
|
+ <span class="mr-10">教师:{{ grade.teacher_name }}</span>
|
|
|
+ <span>班级号:{{ grade.num }}</span>
|
|
|
+ <span v-if="grade.grade_status == 1" class="red ml-10"
|
|
|
+ >结课时间:{{ grade.grade_time }}</span
|
|
|
+ >
|
|
|
<span class="blue fr"
|
|
|
- >学生:12人
|
|
|
+ >学生:{{ grade.count }}人
|
|
|
<el-icon
|
|
|
:class="
|
|
|
- activeItem && activeItem.includes('2') ? 'is-active' : ''
|
|
|
+ grade.active && grade.active.includes('1')
|
|
|
+ ? 'is-active'
|
|
|
+ : ''
|
|
|
"
|
|
|
><CaretBottom
|
|
|
/></el-icon>
|
|
@@ -226,9 +101,13 @@ const tableData = ref<any>([
|
|
|
</div>
|
|
|
</template>
|
|
|
<div>
|
|
|
- <el-table :data="tableData" height="400" style="width: 100%">
|
|
|
+ <el-table
|
|
|
+ :data="grade.students"
|
|
|
+ max-height="400"
|
|
|
+ style="width: 100%"
|
|
|
+ >
|
|
|
<el-table-column
|
|
|
- prop="number"
|
|
|
+ type="index"
|
|
|
label="序号"
|
|
|
width="80"
|
|
|
align="center"
|
|
@@ -246,7 +125,7 @@ const tableData = ref<any>([
|
|
|
align="center"
|
|
|
/>
|
|
|
<el-table-column
|
|
|
- prop="times"
|
|
|
+ prop="count"
|
|
|
label="训练次数"
|
|
|
width="180"
|
|
|
align="center"
|