guhongwei пре 4 година
родитељ
комит
f95b3743a7

+ 6 - 0
src/router/index.js

@@ -213,6 +213,12 @@ const routes = [
         meta: { title: '评分管理' },
         component: () => import('@/views/stuscore/index.vue'),
       },
+      {
+        path: '/stuscore/scoreList',
+        name: 'stuscore_scoreList',
+        meta: { title: '课程教师评分' },
+        component: () => import('@/views/stuscore/scoreList.vue'),
+      },
     ],
   },
   {

+ 2 - 0
src/store/index.js

@@ -33,6 +33,7 @@ import uploadtask from '@frame/store/uploadtask';
 import task from '@frame/store/task';
 import trainvideo from '@frame/store/trainvideo';
 import cerconfirm from '@frame/store/cerconfirm';
+import score from '@frame/store/score';
 import * as ustate from '@frame/store/user/state';
 import * as umutations from '@frame/store/user/mutations';
 import * as dostate from '@frame/store/setting/state';
@@ -74,6 +75,7 @@ export default new Vuex.Store({
     trainvideo,
     cerconfirm,
     task,
+    score,
   },
   state: { ...ustate, ...dostate },
   mutations: { ...umutations, ...domutations },

+ 2 - 1
src/views/classes/name-list.vue

@@ -13,7 +13,7 @@
           <el-button type="primary" size="mini" @click="toComputIsFine()" :disabled="this.defaultOption.classid ? false : true">设置优秀学员</el-button>
         </el-col>
       </el-col>
-      <data-table :fields="fields" :data="list" :opera="opera" @edit="toEdit" @delete="toDelete" @post="toPost"></data-table>
+      <data-table :fields="fields" :data="list" :opera="opera" @edit="toEdit" @delete="toDelete" @post="toPost"> </data-table>
     </list-frame>
     <el-drawer title="任职" :visible.sync="drawer" direction="rtl" @close="toClose">
       <data-form :data="form" :fields="formFields" :rules="rules" :isNew="false">
@@ -86,6 +86,7 @@ export default {
         { label: '专业', prop: 'major' },
         { label: '职务', prop: 'job' },
         { label: '手机号', prop: 'phone' },
+        { label: '是否优秀', prop: 'is_fine', format: i => (i === '0' ? '否' : i === '1' ? '是' : '无资格') },
       ],
       list: [],
       total: 0,

+ 3 - 0
src/views/student/detail.vue

@@ -29,6 +29,9 @@
           </template>
           <template v-else-if="item.model === 'job'">
             <el-radio label="普通学生">普通学生</el-radio>
+            <el-radio label="文艺委员">文艺委员</el-radio>
+            <el-radio label="安全委员">安全委员</el-radio>
+            <el-radio label="宣传委员">宣传委员</el-radio>
             <el-radio label="班长">班长</el-radio>
             <el-radio label="学委">学委</el-radio>
           </template>

+ 62 - 25
src/views/stuscore/index.vue

@@ -1,53 +1,90 @@
 <template>
   <div id="index">
     <list-frame :title="pageTitle" @query="search" :total="total" :needFilter="false" :needAdd="false">
-      <data-table :fields="fields" :data="list" :opera="opera"></data-table>
+      <data-table :fields="fields" :data="tableData" :opera="opera" @view="toTaskList"></data-table>
     </list-frame>
   </div>
 </template>
 
 <script>
-var moment = require('moment');
-import _ from 'lodash';
-import Vue from 'vue';
 import listFrame from '@frame/layout/admin/list-frame';
 import dataTable from '@frame/components/data-table';
-import { mapState, createNamespacedHelpers } from 'vuex';
-const { mapActions: trainplan } = createNamespacedHelpers('trainplan');
+import _ from 'lodash';
+import { mapState, createNamespacedHelpers, mapGetters } from 'vuex';
+const { mapActions: lesson } = createNamespacedHelpers('lesson');
+const { mapActions: util } = createNamespacedHelpers('util');
 export default {
   name: 'index',
   props: {},
   components: { listFrame, dataTable },
-  data: () => {
-    return {
-      opera: [],
-      fields: [{ label: '姓名', prop: 'name' }],
-      info: {},
-      list: [],
-      total: 0,
-    };
-  },
+  data: () => ({
+    opera: [
+      {
+        label: '查看学生评分',
+        icon: 'el-icon-view',
+        method: 'view',
+      },
+    ],
+    fields: [
+      { label: '课程日期', prop: 'date' },
+      { label: '课程名称', prop: 'subname' },
+      { label: '课程教师', prop: 'teaname' },
+    ],
+    tableData: [],
+    total: 0,
+  }),
   created() {
     this.search();
   },
-  methods: {
-    ...trainplan(['query', 'create', 'delete', 'update', 'notice']),
-    async search({ skip = 0, limit = 10, ...info } = {}) {
-      const res = await this.query({ skip, limit, ...info });
-      if (this.$checkRes(res)) {
-        console.log(res);
-      }
-    },
-  },
   computed: {
-    ...mapState(['user']),
+    ...mapState(['user', 'defaultOption']),
     pageTitle() {
       return `${this.$route.meta.title}`;
     },
+    id() {
+      return this.defaultOption.classid;
+    },
   },
   metaInfo() {
     return { title: this.$route.meta.title };
   },
+  methods: {
+    ...lesson({ lessionInfo: 'fetch', lessionList: 'query' }),
+    ...util({ modelFetch: 'fetch' }),
+    async search({ skip, limit, ...info } = {}) {
+      const classid = this.id;
+      const userid = this.user.userid;
+      const lesson = await this.modelFetch({ model: 'lesson', classid });
+      let lessons = _.get(lesson.data, 'lessons', []);
+      // lesson排序,只去时间最早的作为作业的上传lessonid,需要和学生作业列表处相同处理
+      let r = lessons.filter(f => f.subid);
+      r = r.map(r => {
+        let time = r.time.split('-');
+        r.start = `${r.date} ${time[0]}`;
+        return r;
+      });
+      r = Object.values(_.groupBy(r, 'subid'));
+      r = r.map(a => {
+        let na = _.orderBy(a, ['start'], ['asc']);
+        return _.head(na);
+      });
+      console.log(r);
+      this.$set(this, `tableData`, r);
+      this.$set(this, `total`, r.length);
+    },
+    toTaskList(item) {
+      this.$router.push({ path: '/stuscore/scoreList', query: { lessonid: item.data._id, teacherid: item.data.teaid } });
+    },
+  },
+  watch: {
+    id: {
+      handler(val) {
+        if (val) this.search();
+        else this.$set(this, `tableData`, []);
+      },
+      immediate: true,
+    },
+  },
 };
 </script>
 

+ 84 - 0
src/views/stuscore/scoreList.vue

@@ -0,0 +1,84 @@
+<template>
+  <div id="index">
+    <list-frame :title="pageTitle" @query="search" :total="total" :needFilter="false" :needAdd="false">
+      <data-table :fields="fields" :data="list" :opera="opera">
+        <template #custom="{item, row}">
+          <template v-if="item.prop === 'stuid'">
+            {{ getstuname(row.stuid) }}
+          </template>
+        </template>
+      </data-table>
+    </list-frame>
+  </div>
+</template>
+
+<script>
+import listFrame from '@frame/layout/admin/list-frame';
+import dataTable from '@frame/components/data-table';
+import _ from 'lodash';
+import { mapState, createNamespacedHelpers, mapGetters } from 'vuex';
+const { mapActions: student } = createNamespacedHelpers('student');
+const { mapActions: mapScore } = createNamespacedHelpers('score');
+
+export default {
+  name: 'index',
+  props: {},
+  components: { listFrame, dataTable },
+  data: () => ({
+    opera: [],
+    fields: [
+      { label: '学生姓名', prop: 'stuid', custom: true },
+      { label: '评分', prop: 'score' },
+    ],
+    list: [],
+    total: 0,
+    // 學生列表
+    stuList: [],
+  }),
+  created() {
+    this.searchstu();
+    this.search();
+  },
+  methods: {
+    ...student({ stuquery: 'query' }),
+    ...mapScore(['query', 'fetch', 'create', 'update']),
+    async search({ skip, limit = 10, ...info } = {}) {
+      let res = await this.query({ lessonid: this.lessonid, teacherid: this.teacherid, skip, limit, ...info });
+      if (res.errcode === 0) {
+        this.$set(this, `list`, res.data);
+        this.$set(this, `total`, res.total);
+      }
+    },
+    // 过滤学生
+    getstuname(stuid) {
+      var arr = this.stuList.find(item => item.id == stuid);
+      if (arr) {
+        return arr.name;
+      }
+    },
+    async searchstu() {
+      const res = await this.stuquery({ classid: this.defaultOption.classid });
+      if (this.$checkRes(res)) {
+        this.$set(this, `stuList`, res.data);
+      }
+    },
+  },
+  computed: {
+    ...mapState(['user', 'defaultOption']),
+    pageTitle() {
+      return `${this.$route.meta.title}`;
+    },
+    lessonid() {
+      return this.$route.query.lessonid;
+    },
+    teacherid() {
+      return this.$route.query.teacherid;
+    },
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+};
+</script>
+
+<style lang="less" scoped></style>