index.vue 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. <template>
  2. <div id="index">
  3. <list-frame :title="pageTitle" @query="search" :total="total" :needFilter="false" :needAdd="false">
  4. <data-table :fields="fields" :data="tableData" :opera="opera" @view="toTaskList"></data-table>
  5. </list-frame>
  6. </div>
  7. </template>
  8. <script>
  9. import listFrame from '@frame/layout/admin/list-frame';
  10. import dataTable from '@frame/components/data-table';
  11. import _ from 'lodash';
  12. import { mapState, createNamespacedHelpers, mapGetters } from 'vuex';
  13. const { mapActions: lesson } = createNamespacedHelpers('lesson');
  14. const { mapActions: util } = createNamespacedHelpers('util');
  15. export default {
  16. name: 'index',
  17. props: {},
  18. components: { listFrame, dataTable },
  19. data: () => ({
  20. opera: [
  21. {
  22. label: '查看学生评分',
  23. icon: 'el-icon-view',
  24. method: 'view',
  25. },
  26. ],
  27. fields: [
  28. { label: '课程日期', prop: 'date' },
  29. { label: '课程名称', prop: 'subname' },
  30. { label: '课程教师', prop: 'teaname' },
  31. ],
  32. tableData: [],
  33. total: 0,
  34. }),
  35. created() {
  36. this.search();
  37. },
  38. computed: {
  39. ...mapState(['user', 'defaultOption']),
  40. pageTitle() {
  41. return `${this.$route.meta.title}`;
  42. },
  43. id() {
  44. return this.defaultOption.classid;
  45. },
  46. },
  47. metaInfo() {
  48. return { title: this.$route.meta.title };
  49. },
  50. methods: {
  51. ...lesson({ lessionInfo: 'fetch', lessionList: 'query' }),
  52. ...util({ modelFetch: 'fetch' }),
  53. async search({ skip, limit, ...info } = {}) {
  54. const classid = this.id;
  55. const userid = this.user.userid;
  56. const lesson = await this.modelFetch({ model: 'lesson', classid });
  57. let lessons = _.get(lesson.data, 'lessons', []);
  58. // lesson排序,只去时间最早的作为作业的上传lessonid,需要和学生作业列表处相同处理
  59. let r = lessons.filter(f => f.subid);
  60. r = r.map(r => {
  61. let time = r.time.split('-');
  62. r.start = `${r.date} ${time[0]}`;
  63. return r;
  64. });
  65. r = Object.values(_.groupBy(r, 'subid'));
  66. r = r.map(a => {
  67. let na = _.orderBy(a, ['start'], ['asc']);
  68. return _.head(na);
  69. });
  70. console.log(r);
  71. this.$set(this, `tableData`, r);
  72. this.$set(this, `total`, r.length);
  73. },
  74. toTaskList(item) {
  75. this.$router.push({ path: '/stuscore/scoreList', query: { lessonid: item.data._id, teacherid: item.data.teaid } });
  76. },
  77. },
  78. watch: {
  79. id: {
  80. handler(val) {
  81. if (val) this.search();
  82. else this.$set(this, `tableData`, []);
  83. },
  84. immediate: true,
  85. },
  86. },
  87. };
  88. </script>
  89. <style lang="less" scoped></style>