Bladeren bron

Merge branch 'master' of http://git.cc-lotus.info/new_train/train-center

lrf402788946 4 jaren geleden
bovenliggende
commit
74ed11aa44
4 gewijzigde bestanden met toevoegingen van 284 en 10 verwijderingen
  1. 7 0
      src/router/index.js
  2. 7 10
      src/views/centerTeaching/index.vue
  3. 200 0
      src/views/league/index.vue
  4. 70 0
      src/views/league/leagueData.vue

+ 7 - 0
src/router/index.js

@@ -486,6 +486,13 @@ const routes = [
         meta: { title: '课后答疑' },
         component: () => import('@/views/centerTeaching/afterClass.vue'),
       },
+      // 积分榜
+      {
+        path: '/league/index',
+        name: 'league_index',
+        meta: { title: '课后答疑' },
+        component: () => import('@/views/league/index.vue'),
+      },
     ],
   },
   {

+ 7 - 10
src/views/centerTeaching/index.vue

@@ -1,7 +1,7 @@
 <template>
   <div id="index">
     <list-frame :title="mainTitle" @query="search" :total="total" :needFilter="false" :needAdd="false">
-      <data-table :fields="fields" :data="list" :opera="opera" @check="toCheck" @delete="toDelete" :toFormat="toFormat"></data-table>
+      <data-table :fields="fields" :data="list" :opera="opera" @check="toCheck" @delete="toDelete"></data-table>
     </list-frame>
     <el-dialog :visible.sync="dialog" title="审核授课信息" @close="toClose" width="50%">
       <data-form :data="form" :fields="formFields" :rules="{}" @save="turnSave">
@@ -57,7 +57,8 @@ export default {
       ],
       fields: [
         { label: '房间号', prop: 'number' },
-        { label: '科目名称', prop: 'subid', format: true },
+        { label: '教师', prop: 'teacher' },
+        { label: '科目名称', prop: 'subname' },
         { label: '申请说明', prop: 'reason' },
         { label: '状态', prop: 'status', format: i => (i === '0' ? '待审核' : i === '1' ? '审核通过' : '审核拒绝') },
       ],
@@ -96,12 +97,15 @@ export default {
     },
     // 确定
     toCheck({ data }) {
-      console.log(data);
       this.$set(this, `form`, data);
       this.dialog = true;
     },
     // 提交
     async turnSave({ data }) {
+      let subject = this.subjectList.find(f => f.id == data.subid);
+      if (subject) {
+        data.subname = subject.name;
+      }
       let res = await this.update(data);
       if (this.$checkRes(res)) {
         this.$message({
@@ -128,13 +132,6 @@ export default {
       this.form = {};
       this.dialog = false;
     },
-    // 过滤科目名称
-    toFormat({ model, value }) {
-      if (model == 'subid') {
-        const res = this.subjectList.find(f => f.id == value);
-        if (res) return res.name;
-      }
-    },
   },
   computed: {
     mainTitle() {

+ 200 - 0
src/views/league/index.vue

@@ -0,0 +1,200 @@
+<template>
+  <div id="index">
+    <list-frame title="积分榜" :needPag="false" :needFilter="false" :newAdd="false">
+      <el-form :inline="true" size="mini">
+        <el-form-item label="期">
+          <el-select v-model="form.termid" placeholder="请选择期数" @change="getClasses">
+            <el-option v-for="(i, index) in termList" :key="index" :label="`第${i.term}期`" :value="i._id"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="班级">
+          <el-select v-model="form.classid" placeholder="请选择班级">
+            <el-option v-for="(i, index) in classList" :key="index" :label="i.name" :value="i._id"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item>
+          <el-button type="primary" @click="search">查询</el-button>
+        </el-form-item>
+      </el-form>
+      <el-col :span="24">
+        <leagueData :lessonList="lessonList" :list="list"></leagueData>
+      </el-col>
+    </list-frame>
+  </div>
+</template>
+
+<script>
+import _ from 'lodash';
+import leagueData from './leagueData.vue';
+import listFrame from '@frame/layout/admin/list-frame';
+import { mapState, createNamespacedHelpers } from 'vuex';
+const { mapActions: trainplan } = createNamespacedHelpers('trainplan');
+const { mapActions: classes } = createNamespacedHelpers('classes');
+const { mapActions: student } = createNamespacedHelpers('student');
+const { mapActions: lesson } = createNamespacedHelpers('lesson');
+const { mapActions: group } = createNamespacedHelpers('group');
+const { mapActions: uploadtask } = createNamespacedHelpers('uploadtask');
+const { mapActions: util } = createNamespacedHelpers('util');
+export default {
+  metaInfo: { title: '积分榜' },
+  name: 'index',
+  props: {},
+  components: {
+    listFrame,
+    // 积分榜组件
+    leagueData,
+  },
+  data: function() {
+    return {
+      // 查询
+      form: {},
+      // 班级
+      classList: [],
+      // 期
+      termList: [],
+      // 课表
+      lessonList: [
+        {
+          id: '1',
+          name: '测试1',
+        },
+        {
+          id: '2',
+          name: '测试2',
+        },
+        {
+          id: '3',
+          name: '测试3',
+        },
+        {
+          id: '4',
+          name: '测试4',
+        },
+      ],
+      // 学生名单
+      list: [
+        {
+          group: '1',
+          index: '1',
+          name: '测试1',
+          team: '10',
+          person: '10',
+          homework: '10',
+          team1: '10',
+          person1: '10',
+          homework1: '10',
+        },
+        {
+          group: '1',
+          index: '2',
+          name: '测试2',
+          team: '10',
+          person: '10',
+          homework: '10',
+        },
+        {
+          group: '1',
+          index: '3',
+          name: '测试3',
+          team: '10',
+          person: '10',
+          homework: '10',
+        },
+        {
+          group: '2',
+          index: '1',
+          name: '测试4',
+          team: '10',
+          person: '10',
+          homework: '10',
+        },
+        {
+          group: '2',
+          index: '2',
+          name: '测试5',
+          team: '10',
+          person: '10',
+          homework: '10',
+        },
+        {
+          group: '2',
+          index: '3',
+          name: '测试6',
+          team: '10',
+          person: '10',
+          homework: '10',
+        },
+      ],
+    };
+  },
+  created() {
+    this.getPlan();
+  },
+  computed: { ...mapState(['user', 'defaultOption']) },
+  methods: {
+    ...trainplan({ planfetch: 'fetch' }),
+    ...classes({ classesquery: 'query', classesFetch: 'fetch' }),
+    ...student({ studentQuery: 'query', studentFetch: 'fetch' }),
+    ...lesson({ lessonQuery: 'query', lessonFetch: 'fetch' }),
+    ...group({ groupQuery: 'query' }),
+    ...uploadtask({ uploadtaskQuery: 'query' }),
+    ...util({ modelFetch: 'fetch' }),
+    async search() {
+      console.log(this.form);
+      // 查询课表
+      let classid = this.form.classid;
+      let res = await this.modelFetch({ model: 'lesson', classid });
+      let lesson = _.uniqBy(
+        res.data.lessons.filter(item => item.subid != null),
+        'subid'
+      );
+      this.$set(this, `lessonList`, lesson);
+      // 查询学生
+      res = await this.groupQuery({ classid });
+      for (const val of res.data) {
+        for (const student of val.students) {
+          // 组成绩
+          student.groupScore = val.score;
+          let studentInfo = await this.studentFetch(student.stuid);
+          // 平时成绩
+          student.selfscore = studentInfo.data.selfscore;
+        }
+      }
+      // 作业成绩
+      let homeWork = await this.uploadtaskQuery({ classid });
+      console.log(homeWork.data);
+      // console.log(res.data);
+      // let student = res.data.map(item => item.students);
+      // student = _.flattenDeep(student);
+      // console.log(student);
+    },
+    // 期
+    async getPlan() {
+      const res = await this.planfetch(this.defaultOption.planid);
+      let terms = res.data.termnum;
+      this.$set(this, `termList`, terms);
+      if (this.defaultOption.termid) {
+        this.form.termid = this.defaultOption.termid;
+        this.getClasses(this.form.termid);
+      }
+    },
+    // 班级
+    async getClasses(termid) {
+      const res = await this.classesquery({ termid });
+      this.$set(this, `classList`, res.data);
+    },
+  },
+
+  watch: {
+    defaultOption: {
+      handler(val) {
+        this.form.termid = this.defaultOption.termid;
+        this.getClasses(this.form.termid);
+      },
+      deep: true,
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped></style>

+ 70 - 0
src/views/league/leagueData.vue

@@ -0,0 +1,70 @@
+<template>
+  <div id="leagueData">
+    <el-row>
+      <el-col :span="24">
+        <el-table :data="list" border :span-method="objectSpanMethod">
+          <el-table-column label="小组" prop="group" align="center"> </el-table-column>
+          <!-- <el-table-column label="序号" prop="index" align="center"> </el-table-column> -->
+          <el-table-column label="姓名" prop="name" align="center"> </el-table-column>
+          <el-table-column v-for="info in lessonList" :prop="info.subid" :key="info.subid" :label="info.subname" align="center">
+            <template v-slot="{ row }">
+              {{ dirData(info.subid, row) }}
+            </template>
+            <el-table-column label="团队" prop="team" align="center"> </el-table-column>
+            <el-table-column label="个人" prop="person" align="center"> </el-table-column>
+            <el-table-column label="作业" prop="homework" align="center"> </el-table-column>
+          </el-table-column>
+          <el-table-column label="总分" prop="totalScore" align="center">
+            <template v-slot="{ row }">{{ calcTotal(row) }}</template>
+          </el-table-column>
+        </el-table>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import _ from 'lodash';
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  name: 'leagueData',
+  props: {
+    lessonList: { type: Array },
+    list: { type: Array },
+  },
+  components: {},
+  data: function() {
+    return {};
+  },
+  created() {},
+  computed: { ...mapState(['user', 'defaultOption']) },
+  methods: {
+    // 合并
+    objectSpanMethod({ row, column, rowIndex, columnIndex }) {
+      let prop = _.get(column, 'property');
+      if (prop == 'group' || prop == 'team') {
+        let data = _.flatten(_.toPairs(_.groupBy(this.list, 'group'))).filter(_.isArray);
+        let num = data.find(i => i.every(e => e.group === row.group));
+        let head = _.head(num);
+        if (_.isEqual(head, row)) {
+          return {
+            rowspan: num.length,
+            colspan: 1,
+          };
+        } else {
+          return {
+            rowspan: 0,
+            colspan: 0,
+          };
+        }
+      }
+    },
+    // 计算总分
+    calcTotal(data) {
+      // console.log(data);
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped></style>