achieve.vue 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268
  1. <template>
  2. <div id="achieve">
  3. <el-row>
  4. <el-col :span="24" class="style">
  5. <el-col :span="24" class="top">
  6. <!-- <topInfo></topInfo> -->
  7. <NavBar v-show="navShow" :title="title" :isleftarrow="isleftarrow"> </NavBar>
  8. </el-col>
  9. <el-col :span="24" class="main">
  10. <achieves
  11. @clickDialog="opensave"
  12. @submit="onsave"
  13. :peaceAchieveList="peaceAchieveList"
  14. :showPicker="showPicker"
  15. :peaceScore="peaceScore"
  16. @showBtn="showBtn"
  17. @onConfirm="onConfirm"
  18. :achieveList="achieveList"
  19. @submitss="onsist"
  20. :show="show"
  21. :form="form"
  22. :deptList="deptList"
  23. :lesson="lesson"
  24. :lesslist="lesslist"
  25. :names="names"
  26. :score="score"
  27. ></achieves>
  28. </el-col>
  29. </el-col>
  30. </el-row>
  31. </div>
  32. </template>
  33. <script>
  34. import NavBar from '@/layout/common/topInfo.vue';
  35. import achieves from '@/layout/class/achieve.vue';
  36. import { mapState, createNamespacedHelpers, mapGetters } from 'vuex';
  37. const { mapActions: mapStudent } = createNamespacedHelpers('student');
  38. const { mapActions: mapClass } = createNamespacedHelpers('classes');
  39. const { mapActions: mapLesson } = createNamespacedHelpers('lesson');
  40. const { mapActions: mapUploadtask } = createNamespacedHelpers('uploadtask');
  41. const { mapActions: mapSubject } = createNamespacedHelpers('subject');
  42. export default {
  43. name: 'achieve',
  44. props: {},
  45. components: {
  46. NavBar, //头部导航
  47. achieves, //班级学生成绩列表
  48. },
  49. data: () => ({
  50. peaceAchieveList: [],
  51. showPicker: false,
  52. peaceScore: '',
  53. studid: '',
  54. lesson: [],
  55. lesslist: [],
  56. names: '',
  57. score: '',
  58. deptList: [],
  59. achieveList: [],
  60. show: false,
  61. form: {},
  62. title: '',
  63. isleftarrow: '',
  64. transitionName: 'fade',
  65. navShow: true,
  66. // 修改
  67. stuid: '',
  68. taskid: '',
  69. subname: '',
  70. task: [],
  71. }),
  72. created() {
  73. this.search();
  74. this.searchinfo();
  75. },
  76. computed: {
  77. ...mapState(['user']),
  78. classid() {
  79. return this.$route.query.classid;
  80. },
  81. },
  82. mounted() {
  83. this.title = this.$route.meta.title;
  84. this.isleftarrow = this.$route.meta.isleftarrow;
  85. },
  86. watch: {
  87. $route(to, from) {
  88. this.title = to.meta.title;
  89. this.isleftarrow = to.meta.isleftarrow;
  90. },
  91. },
  92. methods: {
  93. ...mapStudent({ list: 'query', add: 'create', fet: 'fetch', updates: 'update' }),
  94. ...mapClass({ classinfo: 'fetch', classlist: 'query' }),
  95. ...mapLesson({ lessoninfo: 'fetch', lessonlist: 'query' }),
  96. ...mapUploadtask({ uploadtaskinfo: 'fetch', uploadtasklist: 'query', uploadtaskupdate: 'update' }),
  97. ...mapSubject({ subjectinfo: 'fetch', subjectlist: 'query' }),
  98. // 平时成绩学生名单查询+作业成绩学生名单查询
  99. async search() {
  100. let classid;
  101. if (this.user.type === '1') classid = this.classid;
  102. else classid = this.user.classid;
  103. const res = await this.list({ classid });
  104. this.$set(this, `peaceAchieveList`, res.data);
  105. let classsid = this.user.classid;
  106. const result = await this.uploadtasklist({ classsid });
  107. for (const accc of res.data) {
  108. var arr = result.data.filter(item => item.studentid === accc.id);
  109. }
  110. // let lessons = [];
  111. let lessone = [];
  112. let stus = [];
  113. for (const val of result.data) {
  114. let newsid = val.lessonid;
  115. let classid = this.user.classid;
  116. //查询这个班的课程
  117. const lessonInfo = await this.lessonlist({ classid });
  118. for (const hic of lessonInfo.data) {
  119. //过滤出有作业的科目
  120. var fff = hic.lessons.filter(item => item._id === newsid);
  121. for (const less of fff) {
  122. this.$set(this, `subname`, less.subname);
  123. }
  124. }
  125. val.subName = this.subname;
  126. const stuInfo = await this.fet(val.studentid);
  127. val.stuName = stuInfo.data.name;
  128. //创建学生名字相关数组
  129. let stu = [{ stuname: stuInfo.data.name, id: val.studentid, lesson: [] }];
  130. //合并数组
  131. stus = [...stu, ...stus];
  132. //去掉重复数组对象
  133. var appArray = _.uniqWith(stus, _.isEqual);
  134. //合并数组
  135. this.$set(this, `achieveList`, appArray);
  136. let lessonss = [{ name: this.subname, id: val.studentid, taskid: val.id, score: val.score }];
  137. lessone = [...lessonss, ...lessone];
  138. }
  139. for (const ss of appArray) {
  140. console.log(ss.id);
  141. console.log(lessone);
  142. var vre = lessone.filter(item => item.id === ss.id);
  143. console.log(vre);
  144. ss.lesson = vre;
  145. }
  146. // for (const eee of appArray) {
  147. // eee.less = lessone;
  148. // var qq = eee.less.filter(item => item.id === eee.id);
  149. console.log(appArray);
  150. // }
  151. this.$set(this, `task`, appArray);
  152. },
  153. // 学委上作业分+存储学生id
  154. clickAchieve({ id }) {
  155. this.$set(this, `stuid`, id);
  156. this.show = true;
  157. },
  158. // 学委上作业分提交
  159. async submitAchieve(form) {
  160. this.form.id = this.stuid;
  161. let data = this.form;
  162. const res = await this.uploadtaskupdate(data);
  163. this.show = false;
  164. },
  165. // 平时成绩上分显示+学生id
  166. showBtn(id) {
  167. this.$set(this, `studid`, id);
  168. this.showPicker = true;
  169. },
  170. // 给学生上分
  171. async onConfirm(peaceScore) {
  172. let data = {};
  173. data.id = this.studid;
  174. data.selfscore = peaceScore;
  175. const res = await this.updates(data);
  176. this.$message({
  177. message: '平时成绩上分成功',
  178. type: 'success',
  179. });
  180. this.showPicker = false;
  181. this.search();
  182. },
  183. // 作业成绩列表
  184. async searchinfo({ ...info } = {}) {
  185. // let classid = this.user.classid;
  186. // const result = await this.uploadtasklist({ classid });
  187. // const res = await this.list({ classid });
  188. // for (const accc of res.data) {
  189. // var arr = result.data.filter(item => item.studentid === accc.id);
  190. // }
  191. // // let lessons = [];
  192. // let lessone = [];
  193. // let stus = [];
  194. // for (const val of result.data) {
  195. // let newsid = val.lessonid;
  196. // let classid = this.user.classid;
  197. // //查询这个班的课程
  198. // const lessonInfo = await this.lessonlist({ classid });
  199. // for (const hic of lessonInfo.data) {
  200. // //过滤出有作业的科目
  201. // var fff = hic.lessons.filter(item => item._id === newsid);
  202. // for (const less of fff) {
  203. // this.$set(this, `subname`, less.subname);
  204. // }
  205. // }
  206. // val.subName = this.subname;
  207. // const stuInfo = await this.fet(val.studentid);
  208. // val.stuName = stuInfo.data.name;
  209. // //创建学生名字相关数组
  210. // let stu = [{ stuname: stuInfo.data.name, id: val.studentid }];
  211. // //合并数组
  212. // stus = [...stu, ...stus];
  213. // //去掉重复数组对象
  214. // var appArray = _.uniqWith(stus, _.isEqual);
  215. // //合并数组
  216. // this.$set(this, `achieveList`, appArray);
  217. // let lessonss = [{ name: this.subname, id: val.studentid, taskid: val.id, score: val.score, less: [] }];
  218. // lessone = [...lessonss, ...lessone];
  219. // var appArrayss = _.uniqWith(lessone, _.isEqual);
  220. // this.$set(this, `task`, lessone);
  221. // console.log(appArrayss);
  222. // }
  223. },
  224. //为了获取当前点击学生id和当前学生上传的作业
  225. async onsist({ id }) {
  226. console.log(id);
  227. var arr = this.task.filter(item => item.id === id);
  228. this.$set(this, `lesson`, arr);
  229. },
  230. async opensave({ id, name, score }) {
  231. this.show = true;
  232. this.$set(this, `names`, name);
  233. this.$set(this.form, `score`, score);
  234. this.$set(this, `taskid`, id);
  235. },
  236. async onsave(form) {
  237. this.form.id = this.taskid;
  238. let res = await this.uploadtaskupdate(this.form);
  239. this.show = false;
  240. },
  241. },
  242. };
  243. </script>
  244. <style lang="less" scoped>
  245. .style {
  246. width: 100%;
  247. min-height: 667px;
  248. position: relative;
  249. background-color: #eeeeee;
  250. }
  251. .top {
  252. height: 46px;
  253. overflow: hidden;
  254. }
  255. .main {
  256. min-height: 570px;
  257. }
  258. </style>