homework.vue 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. <template>
  2. <div id="homework">
  3. <el-row>
  4. <el-col :span="24" class="style">
  5. <el-col :span="24" class="top">
  6. <NavBar v-show="navShow" :title="title" :isleftarrow="isleftarrow"> </NavBar>
  7. </el-col>
  8. <el-col :span="24" class="main">
  9. <el-col :span="24" class="leaveList">
  10. <workList :workLists="workLists" :display="display"></workList>
  11. </el-col>
  12. <el-col :span="24" class="foot">
  13. <footInfo></footInfo>
  14. </el-col>
  15. </el-col>
  16. </el-col>
  17. </el-row>
  18. </div>
  19. </template>
  20. <script>
  21. import NavBar from '@/layout/common/topInfo.vue';
  22. import footInfo from '@/layout/common/footInfo.vue';
  23. import workList from './homework/workList.vue';
  24. import { mapState, createNamespacedHelpers, mapGetters } from 'vuex';
  25. const { mapActions: mapClass } = createNamespacedHelpers('classes');
  26. const { mapActions: mapLesson } = createNamespacedHelpers('lesson');
  27. const { mapActions: mapTask } = createNamespacedHelpers('task');
  28. const { mapActions: mapSubject } = createNamespacedHelpers('subject');
  29. const { mapActions: uploadtask } = createNamespacedHelpers('uploadtask');
  30. const { mapActions: util } = createNamespacedHelpers('util');
  31. export default {
  32. name: 'homework',
  33. props: {},
  34. components: {
  35. NavBar, //头部导航
  36. workList,
  37. footInfo,
  38. },
  39. data: () => ({
  40. workLists: [],
  41. display: '',
  42. navShow: true,
  43. title: '',
  44. isleftarrow: '',
  45. }),
  46. mounted() {
  47. this.title = this.$route.meta.title;
  48. this.isleftarrow = this.$route.meta.isleftarrow;
  49. },
  50. watch: {
  51. $route(to, from) {
  52. this.title = to.meta.title;
  53. this.isleftarrow = to.meta.isleftarrow;
  54. },
  55. },
  56. created() {
  57. this.search();
  58. },
  59. computed: {
  60. ...mapState(['user']),
  61. },
  62. methods: {
  63. ...util({ modelFetch: 'fetch' }),
  64. ...uploadtask({ getUploadTask: 'query' }),
  65. ...mapTask({ list: 'query', add: 'create', fet: 'fetch', updates: 'update' }),
  66. ...mapClass({ classinfo: 'fetch', classquery: 'query' }),
  67. ...mapLesson({ lessonList: 'query', lessonadd: 'create', lessonfet: 'fetch', lessonupdates: 'update' }),
  68. ...mapSubject({ subjectList: 'query', subjectListadd: 'create', subjectListfet: 'fetch', subjectListpdates: 'update' }),
  69. async search() {
  70. let classid = this.user.classid;
  71. const ress = await this.classinfo(classid);
  72. let lessonid = ress.data.lessonid;
  73. const res = await this.lessonList({ classid });
  74. const resout = await this.list();
  75. let lessons = _.get(res.data[0], `lessons`);
  76. // lesson排序,只去时间最早的作为作业的上传lessonid,需要和教师处相同处理
  77. let r = lessons.filter(f => f.subid);
  78. r = r.map(r => {
  79. let time = r.time.split('-');
  80. r.start = `${r.date} ${time[0]}`;
  81. return r;
  82. });
  83. r = Object.values(_.groupBy(r, 'subid'));
  84. r = r.map(a => {
  85. let na = _.orderBy(a, ['start'], ['asc']);
  86. return _.head(na);
  87. });
  88. var crr = r.filter(item => item.subid);
  89. this.$set(this, `workLists`, crr);
  90. for (const val of resout.data) {
  91. var arr = crr.filter(item => item.subid === val.code);
  92. for (const att of arr) {
  93. att.display = 'second';
  94. }
  95. }
  96. this.getUpload();
  97. },
  98. async getUpload() {
  99. let list = _.cloneDeep(this.workLists);
  100. for (let i of list) {
  101. let res = await this.modelFetch({ model: 'uploadtask', studentid: this.user.userid, lessonid: i._id });
  102. if (this.$checkRes(res)) {
  103. let r = res.data;
  104. if (r) {
  105. const { answers, picurl, score } = r;
  106. if (score) i.score = score;
  107. if (answers && answers.length > 0) i.onlinetask = true;
  108. if (picurl) i.pictask = true;
  109. }
  110. }
  111. }
  112. this.$set(this, `workLists`, list);
  113. },
  114. },
  115. };
  116. </script>
  117. <style lang="less" scoped>
  118. .style {
  119. width: 100%;
  120. min-height: 667px;
  121. position: relative;
  122. background-color: #f9fafc;
  123. }
  124. .top {
  125. height: 46px;
  126. overflow: hidden;
  127. }
  128. .main {
  129. min-height: 570px;
  130. }
  131. .main .leaveBtn {
  132. text-align: center;
  133. padding: 15px 0;
  134. }
  135. .leaveList {
  136. position: relative;
  137. background-color: #f9fafc;
  138. }
  139. </style>