daily.vue 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. <template>
  2. <div id="daily">
  3. <van-notice-bar color="#1989fa" background="#ecf9ff" left-icon="info-o" text="点击查看每天的评分" />
  4. <van-cell v-for="(stu, index) in data" :key="index" :title="stu.name" :value="getScore(stu.id)" @click="searchDailyList(stu)" />
  5. <van-dialog v-model="show" :show-confirm-button="user.job.includes(limitJob)" show-cancel-button @confirm="toSave">
  6. <template #title>
  7. <van-row style="padding:15px 0;" type="flex" justify="center">
  8. <van-col span="8">{{ form.name }}</van-col>
  9. <van-col span="2" v-if="user.job.includes(limitJob)">
  10. <el-button icon="el-icon-plus" type="primary" size="mini" circle @click="add"></el-button>
  11. </van-col>
  12. </van-row>
  13. </template>
  14. <van-notice-bar v-if="user.job.includes(limitJob)" color="#1989fa" background="#ecf9ff" left-icon="info-o" text="学委可以添加/修改平时分数" />
  15. <template v-if="user.job.includes(limitJob)">
  16. <van-field v-for="(i, index) in dailyList" :key="index" v-model="i.score" colon type="number" :label="i.date" placeholder="请输入平时分数" border />
  17. </template>
  18. <template v-else>
  19. <van-cell v-for="(i, index) in dailyList" :key="index" :title="i.date" :value="i.score" />
  20. </template>
  21. </van-dialog>
  22. </div>
  23. </template>
  24. <script>
  25. const moment = require('moment');
  26. import { mapState, createNamespacedHelpers } from 'vuex';
  27. export default {
  28. name: 'daily',
  29. props: {
  30. data: { type: Array, default: () => [] },
  31. scoreList: { type: Array, default: () => [] },
  32. lesson: { type: Array, default: () => [] },
  33. classInfo: { type: Object, default: () => {} },
  34. },
  35. components: {},
  36. data: function() {
  37. return {
  38. show: false,
  39. limitJob: '学委',
  40. form: {},
  41. dailyList: [],
  42. };
  43. },
  44. created() {},
  45. methods: {
  46. getScore(stuid) {
  47. let list = this.scoreList.filter(f => f.studentid === stuid);
  48. const res = list.reduce((p, n) => p + (n['score'] * 1 || 0), 0);
  49. return res;
  50. },
  51. searchDailyList(stu) {
  52. this.$set(this, `form`, stu);
  53. let list = this.scoreList.filter(f => f.studentid === stu.id);
  54. this.show = true;
  55. list = _.orderBy(list, ['date'], ['asc']);
  56. this.$set(this, `dailyList`, list);
  57. },
  58. add() {
  59. const { startdate, enddate, id: classid } = this.classInfo;
  60. let obj = { classid, studentid: this.form.id, score: 0 };
  61. // 在分数列表中找到该学生的所有日常分数
  62. let list = _.cloneDeep(this.dailyList);
  63. if (list.length <= 0) {
  64. let lesson = this.findDate(startdate, startdate, enddate);
  65. if (lesson) (obj.date = lesson.date), (obj.subid = lesson.subid);
  66. } else {
  67. let last = _.last(list);
  68. let date = moment(last.date)
  69. .add(1, 'days')
  70. .format('YYYY-MM-DD');
  71. let lesson = this.findDate(date, startdate, enddate);
  72. if (lesson) (obj.date = lesson.date), (obj.subid = lesson.subid);
  73. }
  74. list.push(obj);
  75. if (obj.date) this.$set(this, `dailyList`, list);
  76. else this.$toast('无法添加,已添加本班所有上课的日期');
  77. },
  78. findDate(date, start, end) {
  79. let r = this.lesson.find(f => f.date == date);
  80. while (!r) {
  81. date = moment(date)
  82. .add(1, 'days')
  83. .format('YYYY-MM-DD');
  84. if (moment(date).isBetween(start, end, null, '[]')) {
  85. r = this.lesson.find(f => f.date == date);
  86. } else break;
  87. }
  88. return r;
  89. },
  90. toSave() {
  91. console.log(this.dailyList);
  92. this.$emit('save', _.cloneDeep(this.dailyList));
  93. },
  94. },
  95. computed: {
  96. ...mapState(['user']),
  97. pageTitle() {
  98. return `${this.$route.meta.title}`;
  99. },
  100. },
  101. metaInfo() {
  102. return { title: this.$route.meta.title };
  103. },
  104. };
  105. </script>
  106. <style lang="less" scoped></style>