hookehuyr

refactor(teacher/myClassPage): 重构班级页面筛选逻辑,使用API动态获取选项

将硬编码的筛选选项改为通过API动态获取
更新变量命名以更清晰表达用途
添加年级、班级和课程的联动筛选功能
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
2 * @Author: hookehuyr hookehuyr@gmail.com 2 * @Author: hookehuyr hookehuyr@gmail.com
3 * @Date: 2025-01-20 10:00:00 3 * @Date: 2025-01-20 10:00:00
4 * @LastEditors: hookehuyr hookehuyr@gmail.com 4 * @LastEditors: hookehuyr hookehuyr@gmail.com
5 - * @LastEditTime: 2025-06-20 11:47:35 5 + * @LastEditTime: 2025-06-25 16:12:36
6 * @FilePath: /mlaj/src/views/teacher/myClassPage.vue 6 * @FilePath: /mlaj/src/views/teacher/myClassPage.vue
7 * @Description: 我的班级页面 7 * @Description: 我的班级页面
8 --> 8 -->
...@@ -31,9 +31,9 @@ ...@@ -31,9 +31,9 @@
31 <div> 31 <div>
32 <van-sticky> 32 <van-sticky>
33 <van-dropdown-menu active-color="#10b981" swipe-threshold="3"> 33 <van-dropdown-menu active-color="#10b981" swipe-threshold="3">
34 - <van-dropdown-item v-model="gradeFilter" :options="gradeOptions" @change="handleGradeChange" /> 34 + <van-dropdown-item v-model="selectGradeValue" :options="gradeOption" @change="handleGradeChange" />
35 - <van-dropdown-item v-model="classFilter" :options="classOptions" @change="handleClassChange" /> 35 + <van-dropdown-item v-model="selectClassValue" :options="classOption" @change="handleClassChange" />
36 - <van-dropdown-item v-model="courseFilter" :options="courseOptions" @change="handleCourseChange" /> 36 + <van-dropdown-item v-model="selectCourseValue" :options="courseOption" @change="handleCourseChange" />
37 </van-dropdown-menu> 37 </van-dropdown-menu>
38 </van-sticky> 38 </van-sticky>
39 </div> 39 </div>
...@@ -157,6 +157,8 @@ import { useRouter } from 'vue-router' ...@@ -157,6 +157,8 @@ import { useRouter } from 'vue-router'
157 import AppLayout from '@/layouts/AppLayout.vue' 157 import AppLayout from '@/layouts/AppLayout.vue'
158 import { useTitle } from '@vueuse/core'; 158 import { useTitle } from '@vueuse/core';
159 159
160 +import { getTeacherGradeClassListAPI } from "@/api/teacher";
161 +
160 const router = useRouter() 162 const router = useRouter()
161 const route = useRoute() 163 const route = useRoute()
162 useTitle(route.meta.title); 164 useTitle(route.meta.title);
...@@ -173,35 +175,18 @@ const userInfo = ref({ ...@@ -173,35 +175,18 @@ const userInfo = ref({
173 }) 175 })
174 176
175 // 筛选器数据 177 // 筛选器数据
176 -const gradeFilter = ref('全部年级') 178 +const selectGradeValue = ref(null);
177 -const classFilter = ref('全部班级') 179 +const selectClassValue = ref(null);
178 -const courseFilter = ref('全部课程') 180 +const selectCourseValue = ref(null);
181 +const gradeOption = ref([]);
182 +const classOption = ref([]);
183 +const courseOption = ref([]);
184 +
179 const sortFilter = ref('按活跃度') 185 const sortFilter = ref('按活跃度')
180 const searchKeyword = ref('') 186 const searchKeyword = ref('')
181 const showSortPopup = ref(false) 187 const showSortPopup = ref(false)
182 188
183 // 筛选器选项 189 // 筛选器选项
184 -const gradeOptions = ref([
185 - { text: '全部年级', value: '全部年级' },
186 - { text: '高一年级', value: '高一年级' },
187 - { text: '高二年级', value: '高二年级' },
188 - { text: '高三年级', value: '高三年级' }
189 -])
190 -
191 -const classOptions = ref([
192 - { text: '全部班级', value: '全部班级' },
193 - { text: '高一(1)班高一(1)班', value: '高一(1)班高一(1)班' },
194 - { text: '高一(2)班', value: '高一(2)班' },
195 - { text: '高一(3)班', value: '高一(3)班' }
196 -])
197 -
198 -const courseOptions = ref([
199 - { text: '全部课程', value: '全部课程' },
200 - { text: '语文', value: '语文' },
201 - { text: '数学', value: '数学' },
202 - { text: '英语', value: '英语' }
203 -])
204 -
205 const sortOptions = ref([ 190 const sortOptions = ref([
206 { text: '按活跃度', value: '按活跃度' }, 191 { text: '按活跃度', value: '按活跃度' },
207 { text: '按姓名', value: '按姓名' }, 192 { text: '按姓名', value: '按姓名' },
...@@ -299,11 +284,6 @@ const finished = ref(false) ...@@ -299,11 +284,6 @@ const finished = ref(false)
299 const filteredStudentList = computed(() => { 284 const filteredStudentList = computed(() => {
300 let filtered = studentList.value 285 let filtered = studentList.value
301 286
302 - // 按班级筛选
303 - if (classFilter.value !== '全部班级') {
304 - filtered = filtered.filter(student => student.className === classFilter.value)
305 - }
306 -
307 // 按搜索关键词筛选 287 // 按搜索关键词筛选
308 if (searchKeyword.value) { 288 if (searchKeyword.value) {
309 filtered = filtered.filter(student => 289 filtered = filtered.filter(student =>
...@@ -333,25 +313,49 @@ const formatPhone = (phone) => { ...@@ -333,25 +313,49 @@ const formatPhone = (phone) => {
333 * 处理年级筛选变化 313 * 处理年级筛选变化
334 * @param {string} value - 选中的年级 314 * @param {string} value - 选中的年级
335 */ 315 */
336 -const handleGradeChange = (value) => { 316 +const handleGradeChange = async (val) => {
337 - console.log('年级筛选:', value) 317 + console.log('val', val);
338 - // 这里可以根据年级筛选更新班级选项 318 + selectGradeValue.value = val;
319 + // 根据年级ID 更新过滤列表
320 + getFilterList(val);
321 + // 重置分页参数
322 + // page.value = 0
323 + // checkinDataList.value = []
324 + // finished.value = false
325 + // // 重新加载数据
326 + // onLoad()
339 } 327 }
340 328
341 /** 329 /**
342 * 处理班级筛选变化 330 * 处理班级筛选变化
343 * @param {string} value - 选中的班级 331 * @param {string} value - 选中的班级
344 */ 332 */
345 -const handleClassChange = (value) => { 333 +const handleClassChange = (val) => {
346 - console.log('班级筛选:', value) 334 + console.log('val', val);
335 + selectClassValue.value = val;
336 + // 根据年级ID和班级ID 更新过滤列表
337 + getFilterList(selectGradeValue.value, val);
338 + // 重置分页参数
339 + // page.value = 0
340 + // checkinDataList.value = []
341 + // finished.value = false
342 + // // 重新加载数据
343 + // onLoad()
347 } 344 }
348 345
349 /** 346 /**
350 * 处理课程筛选变化 347 * 处理课程筛选变化
351 * @param {string} value - 选中的课程 348 * @param {string} value - 选中的课程
352 */ 349 */
353 -const handleCourseChange = (value) => { 350 +const handleCourseChange = (val) => {
354 - console.log('课程筛选:', value) 351 + console.log('val', val);
352 + selectCourseValue.value = val;
353 + // 重置分页参数
354 + // page.value = 0
355 + // checkinDataList.value = []
356 + // finished.value = false
357 + // // 重新加载数据
358 + // onLoad()
355 } 359 }
356 360
357 /** 361 /**
...@@ -402,12 +406,55 @@ const onLoad = () => { ...@@ -402,12 +406,55 @@ const onLoad = () => {
402 }, 1000) 406 }, 1000)
403 } 407 }
404 408
409 +const gradeList = ref([]);
410 +const classList = ref([]);
411 +const courseList = ref([]);
412 +
413 +const getFilterList = async (grade_id=null, class_id=null) => {
414 + const { code, data } = await getTeacherGradeClassListAPI({ grade_id, class_id });
415 + if (code) {
416 + // 处理数据
417 + gradeOption.value = data.grade_list?.map(item => {
418 + return {
419 + text: item.grade_name,
420 + value: item.id,
421 + }
422 + });
423 + gradeOption.value.unshift({
424 + text: '全部年级',
425 + value: null,
426 + });
427 + classOption.value = data.class_list?.map(item => {
428 + return {
429 + text: item.class_name,
430 + value: item.id,
431 + }
432 + });
433 + classOption.value.unshift({
434 + text: '全部班级',
435 + value: null,
436 + });
437 + courseOption.value = data.group_list?.map(item => {
438 + return {
439 + text: item.title,
440 + value: item.id,
441 + }
442 + });
443 + courseOption.value.unshift({
444 + text: '全部课程',
445 + value: null,
446 + });
447 + }
448 +}
449 +
405 /** 450 /**
406 * 组件挂载时初始化数据 451 * 组件挂载时初始化数据
407 */ 452 */
408 -onMounted(() => { 453 +onMounted(async () => {
409 // 这里可以调用API获取实际数据 454 // 这里可以调用API获取实际数据
410 console.log('我的班级页面已加载') 455 console.log('我的班级页面已加载')
456 + // 获取老师的年级、班级、课程列表信息
457 + getFilterList();
411 }) 458 })
412 </script> 459 </script>
413 460
......