daily.vue 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  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)" @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 === '班长'">
  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. this.$set(this, `dailyList`, list);
  56. },
  57. add() {
  58. const { startdate, enddate, id: classid } = this.classInfo;
  59. let obj = { classid, studentid: this.form.id };
  60. // 在分数列表中找到该学生的所有日常分数
  61. let list = _.cloneDeep(this.dailyList);
  62. if (list.length <= 0) {
  63. let lesson = this.findDate(startdate, startdate, enddate);
  64. if (lesson) (obj.date = lesson.date), (obj.subid = lesson.subid);
  65. } else {
  66. let last = _.last(list);
  67. let date = moment(last.date)
  68. .add(1, 'days')
  69. .format('YYYY-MM-DD');
  70. let lesson = this.findDate(date, startdate, enddate);
  71. if (lesson) (obj.date = lesson.date), (obj.subid = lesson.subid);
  72. }
  73. list.push(obj);
  74. if (obj.date) this.$set(this, `dailyList`, list);
  75. else this.$toast('无法添加,已添加本班所有上课的日期');
  76. },
  77. findDate(date, start, end) {
  78. let r = this.lesson.find(f => f.date == date);
  79. while (!r) {
  80. date = moment(date)
  81. .add(1, 'days')
  82. .format('YYYY-MM-DD');
  83. if (moment(date).isBetween(start, end, null, '[]')) {
  84. r = this.lesson.find(f => f.date == date);
  85. } else break;
  86. }
  87. return r;
  88. },
  89. toSave() {
  90. console.log(this.dailyList);
  91. },
  92. },
  93. computed: {
  94. ...mapState(['user']),
  95. pageTitle() {
  96. return `${this.$route.meta.title}`;
  97. },
  98. },
  99. metaInfo() {
  100. return { title: this.$route.meta.title };
  101. },
  102. };
  103. </script>
  104. <style lang="less" scoped></style>