import { ref, provide, computed } from 'vue'; import { useRoute } from 'vue-router/composables'; import { taskTypeArray } from './components/data/TaskType'; import { fileStatusList } from '@/utils/file'; import { GetCSItemTaskList, GetCSItemTaskStudentList } from '@/api/course'; import store from '@/store'; /** * 文件转换 * @param {Array} list 文件列表 * @returns Array */ function filesTransform(list) { return list.map(({ file_id, file_name, file_size }) => { return { file: { name: file_name, size: file_size }, status: { ...fileStatusList[3], id: file_id } }; }); } /** * 转换任务列表数据格式,转换为显示格式 * @param {Array} list 任务列表 */ function convertDataFormatTaskList(list) { list.forEach((item) => { // 学生列表转换为学生id列表 item.custom_student_id_list = item.custom_student_list.map(({ student_id }) => student_id); // 教材转换 item._coursewares = JSON.parse(JSON.stringify(item.courseware_list)); // 文件转换 item._files = filesTransform(item.accessory_list); item.child_task_list.forEach(({ info_block_list }) => { info_block_list.forEach(({ info_block_type, courseware_list, file_list }, i, arr) => { if (info_block_type === 'courseware') { arr[i]._coursewares = JSON.parse(JSON.stringify(courseware_list)); return; } if (info_block_type === 'file') { arr[i]._files = filesTransform(file_list); return; } }); }); }); return list; } export function useTask() { const route = useRoute(); const id = route.params.id; const task_time_type = Number(route.query.task_time_type); const isTeacher = store.getters.isTeacher; let curStudentId = ref(''); let taskData = ref({}); let taskList = computed( () => taskData.value[taskTypeArray.find(({ time_type }) => time_type === task_time_type).sidebarListName] ); provide('taskList', taskList); let taskType = computed(() => taskTypeArray.find(({ time_type }) => time_type === task_time_type).type); provide('taskType', taskType); /** * 得到课节任务列表 * @param {String} studentId 学生ID */ function getCSItemTaskList(studentId) { GetCSItemTaskList({ cs_item_id: id, task_time_type, data_use: isTeacher ? 'teacher_see_student_task' : 'student_do_task', student_id: isTeacher ? studentId : '' }).then(({ status, pre_task_list, mid_task_list, after_task_list, ...data }) => { if (status !== 1) return; taskData.value = { pre_task_list: convertDataFormatTaskList(pre_task_list), mid_task_list: convertDataFormatTaskList(mid_task_list), after_task_list: convertDataFormatTaskList(after_task_list), ...data }; curStudentId.value = studentId; }); } // 得到学生列表 let studentList = ref([]); GetCSItemTaskStudentList({ cs_item_id: id, task_time_type }).then(({ student_list }) => { studentList.value = student_list; if (student_list.length > 0) getCSItemTaskList(student_list[0].student_id); }); return { taskData, studentList, curStudentId, getCSItemTaskList }; }