index.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. import { ref, provide, computed } from 'vue';
  2. import { useRoute } from 'vue-router/composables';
  3. import { taskTypeArray } from './components/data/TaskType';
  4. import { fileStatusList } from '@/utils/file';
  5. import { GetCSItemTaskList, GetCSItemTaskStudentList } from '@/api/course';
  6. import store from '@/store';
  7. /**
  8. * 文件转换
  9. * @param {Array} list 文件列表
  10. * @returns Array
  11. */
  12. function filesTransform(list) {
  13. return list.map(({ file_id, file_name, file_size }) => {
  14. return {
  15. file: {
  16. name: file_name,
  17. size: file_size
  18. },
  19. status: { ...fileStatusList[3], id: file_id }
  20. };
  21. });
  22. }
  23. /**
  24. * 转换任务列表数据格式,转换为显示格式
  25. * @param {Array} list 任务列表
  26. */
  27. function convertDataFormatTaskList(list) {
  28. list.forEach((item) => {
  29. // 学生列表转换为学生id列表
  30. item.custom_student_id_list = item.custom_student_list.map(({ student_id }) => student_id);
  31. // 教材转换
  32. item._coursewares = JSON.parse(JSON.stringify(item.courseware_list));
  33. // 文件转换
  34. item._files = filesTransform(item.accessory_list);
  35. item.child_task_list.forEach(({ info_block_list }) => {
  36. info_block_list.forEach(({ info_block_type, courseware_list, file_list }, i, arr) => {
  37. if (info_block_type === 'courseware') {
  38. arr[i]._coursewares = JSON.parse(JSON.stringify(courseware_list));
  39. return;
  40. }
  41. if (info_block_type === 'file') {
  42. arr[i]._files = filesTransform(file_list);
  43. return;
  44. }
  45. });
  46. });
  47. });
  48. return list;
  49. }
  50. export function useTask() {
  51. const route = useRoute();
  52. const id = route.params.id;
  53. const task_time_type = Number(route.query.task_time_type);
  54. const isTeacher = store.getters.isTeacher;
  55. let curStudentId = ref('');
  56. let taskData = ref({});
  57. let taskList = computed(
  58. () => taskData.value[taskTypeArray.find(({ time_type }) => time_type === task_time_type).sidebarListName]
  59. );
  60. provide('taskList', taskList);
  61. let taskType = computed(() => taskTypeArray.find(({ time_type }) => time_type === task_time_type).type);
  62. provide('taskType', taskType);
  63. /**
  64. * 得到课节任务列表
  65. * @param {String} studentId 学生ID
  66. */
  67. function getCSItemTaskList(studentId) {
  68. GetCSItemTaskList({
  69. cs_item_id: id,
  70. task_time_type,
  71. data_use: isTeacher ? 'teacher_see_student_task' : 'student_do_task',
  72. student_id: isTeacher ? studentId : ''
  73. }).then(({ status, pre_task_list, mid_task_list, after_task_list, ...data }) => {
  74. if (status !== 1) return;
  75. taskData.value = {
  76. pre_task_list: convertDataFormatTaskList(pre_task_list),
  77. mid_task_list: convertDataFormatTaskList(mid_task_list),
  78. after_task_list: convertDataFormatTaskList(after_task_list),
  79. ...data
  80. };
  81. curStudentId.value = studentId;
  82. });
  83. }
  84. // 得到学生列表
  85. let studentList = ref([]);
  86. GetCSItemTaskStudentList({ cs_item_id: id, task_time_type }).then(({ student_list }) => {
  87. studentList.value = student_list;
  88. if (student_list.length > 0) getCSItemTaskList(student_list[0].student_id);
  89. });
  90. return {
  91. taskData,
  92. studentList,
  93. curStudentId,
  94. getCSItemTaskList
  95. };
  96. }