lrf402788946 4 lat temu
rodzic
commit
2ed5874a0f
2 zmienionych plików z 106 dodań i 5 usunięć
  1. 26 1
      src/views/class/index.vue
  2. 80 4
      src/views/class/newClass/daily.vue

+ 26 - 1
src/views/class/index.vue

@@ -26,7 +26,7 @@
               ></classGroup>
               ></classGroup>
             </el-tab-pane>
             </el-tab-pane>
             <el-tab-pane label="平时成绩" name="third">
             <el-tab-pane label="平时成绩" name="third">
-              <daily :data="studentList"></daily>
+              <daily :data="studentList" :scoreList="pscoreList" :classInfo="classInfo" :lesson="lesson"></daily>
             </el-tab-pane>
             </el-tab-pane>
             <el-tab-pane label="作业成绩" name="forth"></el-tab-pane>
             <el-tab-pane label="作业成绩" name="forth"></el-tab-pane>
           </el-tabs>
           </el-tabs>
@@ -48,6 +48,8 @@ import nameList from './newClass/nameList.vue';
 import daily from './newClass/daily.vue';
 import daily from './newClass/daily.vue';
 import { mapState, createNamespacedHelpers } from 'vuex';
 import { mapState, createNamespacedHelpers } from 'vuex';
 const { mapActions: group } = createNamespacedHelpers('group');
 const { mapActions: group } = createNamespacedHelpers('group');
+const { mapActions: classes } = createNamespacedHelpers('classes');
+const { mapActions: util } = createNamespacedHelpers('util');
 const { mapActions: student } = createNamespacedHelpers('student');
 const { mapActions: student } = createNamespacedHelpers('student');
 const { mapActions: pscore } = createNamespacedHelpers('personalscore');
 const { mapActions: pscore } = createNamespacedHelpers('personalscore');
 export default {
 export default {
@@ -84,17 +86,40 @@ export default {
       studentList: [],
       studentList: [],
       // 平时分列表
       // 平时分列表
       pscoreList: [],
       pscoreList: [],
+      // 班级信息
+      classInfo: {},
+      // 课程信息
+      lesson: [],
     };
     };
   },
   },
   async created() {
   async created() {
+    await this.getClass();
     await this.toGetStudentList();
     await this.toGetStudentList();
     // 查看班级小组
     // 查看班级小组
     await this.findGroup();
     await this.findGroup();
   },
   },
   methods: {
   methods: {
+    ...util({ modelFetch: 'fetch' }),
+    ...classes({ getClassInfo: 'fetch' }),
     ...pscore({ getPScoreList: 'query' }),
     ...pscore({ getPScoreList: 'query' }),
     ...group({ groupQuery: 'query', groupDelete: 'delete', groupCreate: 'create', groupUpdate: 'update', groupInsert: 'insert', groupExit: 'exit' }),
     ...group({ groupQuery: 'query', groupDelete: 'delete', groupCreate: 'create', groupUpdate: 'update', groupInsert: 'insert', groupExit: 'exit' }),
     ...student({ getStudentList: 'query', updateStudent: 'update' }),
     ...student({ getStudentList: 'query', updateStudent: 'update' }),
+    async getClass() {
+      const res = await this.getClassInfo(this.user.classid);
+      if (this.$checkRes(res)) this.$set(this, `classInfo`, res.data);
+      const lres = await this.modelFetch({ model: 'lesson', classid: this.user.classid });
+      if (this.$checkRes(lres)) {
+        let { lessons } = lres.data;
+        if (lessons) {
+          lessons = _.uniqBy(
+            lessons.filter(f => f.subid),
+            'subid'
+          );
+          console.log(lessons);
+          this.$set(this, `lesson`, lessons);
+        }
+      }
+    },
     // first 查学生
     // first 查学生
     async toGetStudentList() {
     async toGetStudentList() {
       const res = await this.getStudentList({ classid: this.user.classid });
       const res = await this.getStudentList({ classid: this.user.classid });

+ 80 - 4
src/views/class/newClass/daily.vue

@@ -1,20 +1,96 @@
 <template>
 <template>
   <div id="daily">
   <div id="daily">
-    <van-cell title="单元格" value="内容" />
+    <van-notice-bar color="#1989fa" background="#ecf9ff" left-icon="info-o" text="点击查看每天的评分" />
+    <van-cell v-for="(stu, index) in data" :key="index" :title="stu.name" :value="getScore(stu.id)" @click="searchDailyList(stu)" />
+    <van-dialog v-model="show" :show-confirm-button="user.job.includes(limitJob)" @confirm="toSave">
+      <template #title>
+        <van-row style="padding:15px 0;" type="flex" justify="center">
+          <van-col span="8">{{ form.name }}</van-col>
+          <van-col span="2" v-if="user.job.includes(limitJob)">
+            <el-button icon="el-icon-plus" type="primary" size="mini" circle @click="add"></el-button>
+          </van-col>
+        </van-row>
+      </template>
+      <van-notice-bar v-if="user.job.includes(limitJob)" color="#1989fa" background="#ecf9ff" left-icon="info-o" text="学委可以添加/修改平时分数" />
+      <template v-if="user.job === '班长'">
+        <van-field v-for="(i, index) in dailyList" :key="index" :v-model="i.score" colon type="number" :label="i.date" placeholder="请输入平时分数" border />
+      </template>
+      <template v-else>
+        <van-cell v-for="(i, index) in dailyList" :key="index" :title="i.date" :value="i.score" />
+      </template>
+    </van-dialog>
   </div>
   </div>
 </template>
 </template>
 
 
 <script>
 <script>
+const moment = require('moment');
 import { mapState, createNamespacedHelpers } from 'vuex';
 import { mapState, createNamespacedHelpers } from 'vuex';
 export default {
 export default {
   name: 'daily',
   name: 'daily',
-  props: {},
+  props: {
+    data: { type: Array, default: () => [] },
+    scoreList: { type: Array, default: () => [] },
+    lesson: { type: Array, default: () => [] },
+    classInfo: { type: Object, default: () => {} },
+  },
   components: {},
   components: {},
   data: function() {
   data: function() {
-    return {};
+    return {
+      show: false,
+      limitJob: '班长',
+      form: {},
+      dailyList: [],
+    };
   },
   },
   created() {},
   created() {},
-  methods: {},
+  methods: {
+    getScore(stuid) {
+      let list = this.scoreList.filter(f => f.studentid === stuid);
+      const res = list.reduce((p, n) => p + (n['score'] * 1 || 0), 0);
+      return res;
+    },
+    searchDailyList(stu) {
+      this.$set(this, `form`, stu);
+      let list = this.scoreList.filter(f => f.studentid === stu.id);
+      this.show = true;
+      this.$set(this, `dailyList`, list);
+    },
+    add() {
+      const { startdate, enddate, id: classid } = this.classInfo;
+      let obj = { classid, studentid: this.form.id };
+      // 在分数列表中找到该学生的所有日常分数
+      let list = _.cloneDeep(this.dailyList);
+      if (list.length <= 0) {
+        let lesson = this.findDate(startdate, startdate, enddate);
+        if (lesson) (obj.date = lesson.date), (obj.subid = lesson.subid);
+      } else {
+        let last = _.last(list);
+        let date = moment(last.date)
+          .add(1, 'days')
+          .format('YYYY-MM-DD');
+        let lesson = this.findDate(date, startdate, enddate);
+        if (lesson) (obj.date = lesson.date), (obj.subid = lesson.subid);
+      }
+      list.push(obj);
+      if (obj.date) this.$set(this, `dailyList`, list);
+      else this.$toast('无法添加,已添加本班所有上课的日期');
+    },
+    findDate(date, start, end) {
+      let r = this.lesson.find(f => f.date == date);
+      while (!r) {
+        date = moment(date)
+          .add(1, 'days')
+          .format('YYYY-MM-DD');
+        if (moment(date).isBetween(start, end, null, '[]')) {
+          r = this.lesson.find(f => f.date == date);
+        } else break;
+      }
+      return r;
+    },
+    toSave() {
+      console.log(this.dailyList);
+    },
+  },
   computed: {
   computed: {
     ...mapState(['user']),
     ...mapState(['user']),
     pageTitle() {
     pageTitle() {