certificate.js 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239
  1. import Card from "../../model/card";
  2. import {
  3. getEventParam,
  4. showLoading,
  5. toast
  6. } from "../../utils/utils";
  7. import {
  8. logicStatus,
  9. courseStatus,
  10. courseTypes
  11. } from "../../model/enum";
  12. import Api from "../../model/api";
  13. import Route from "../../model/route";
  14. Page({
  15. data: {
  16. info: null,
  17. template: {
  18. drawWidth: 350,
  19. drawHeight: 484,
  20. },
  21. image: '',
  22. isGraduated: false,
  23. eInfo: {},
  24. isPCDeviceUnkonw: false,
  25. isPre: logicStatus.NO
  26. },
  27. async onLoad(options) {
  28. const {
  29. detail,
  30. isPre
  31. } = options;
  32. let app = getApp();
  33. let isPCDeviceUnkonw = app.globalData.isPCDeviceUnkonw;
  34. let eInfo = JSON.parse(detail);
  35. this.setData({
  36. eInfo,
  37. isPCDeviceUnkonw,
  38. isPre
  39. });
  40. showLoading();
  41. const res = await Api.getStudentNum(eInfo.eduStuId);
  42. if (res && res.data.graduateType) {
  43. const template = await Api.getTemplate({
  44. stuId: eInfo.eduStuId
  45. });
  46. if (template) {
  47. this.setData({
  48. template: template.data,
  49. });
  50. }
  51. this.setData({
  52. isGraduated: true,
  53. info: new Card().palette(this.data.template),
  54. });
  55. if (eInfo.graduateType != res.data.graduateType) {
  56. const eventChannel = this.getOpenerEventChannel()
  57. eventChannel.emit('get');
  58. }
  59. }
  60. wx.hideLoading();
  61. },
  62. async produce(e) {
  63. let eInfo = this.data.eInfo;
  64. const res = await Api.produceGradu(eInfo.eduStuId, eInfo.teamId,
  65. eInfo.isOnline ? logicStatus.YES : logicStatus.NO, true, (code, msg, data) => {
  66. wx.hideToast();
  67. // console.log(data);
  68. if (!data) {
  69. toast(msg);
  70. return false;
  71. }
  72. if (this.data.isPre == logicStatus.YES) {
  73. toast('班级已结束,不能领取结业证!');
  74. return false;
  75. }
  76. this.handleCheckFail(data);
  77. return false;
  78. });
  79. // console.log(res);
  80. if (!res) {
  81. return;
  82. }
  83. const template = await Api.getTemplate({
  84. stuId: eInfo.eduStuId
  85. });
  86. if (template) {
  87. this.setData({
  88. template: template.data
  89. });
  90. }
  91. const eventChannel = this.getOpenerEventChannel();
  92. eventChannel.emit('get');
  93. this.setData({
  94. isGraduated: true,
  95. info: new Card().palette(this.data.template),
  96. });
  97. },
  98. handleCheckFail(data) {
  99. let courseName = data.courseName;
  100. let courseStartTime = new Date(data.courseStart.replaceAll('-', '/')).getTime(); //解决ios兼容问题
  101. let nowTime = Date.now();
  102. const JUMP_TYPES = {
  103. COURSE: '1',
  104. EXAM: '2',
  105. EVALUATE: '3'
  106. };
  107. if (data.courseProcess == courseStatus.NO_START && courseStartTime > nowTime) {
  108. toast(`课程《${courseName}》尚未开始,暂不能领取结业证`);
  109. return false;
  110. }
  111. let unPassCheck = {};
  112. if (data.courseProcess == courseStatus.NO_START) {
  113. //去学习
  114. // type=3&id=21&detail=%7B%22teamName%22%3A%22%E7%BB%93%E4%B8%9A%E8%AF%81%E9%A2%86%E5%8F%96%E6%B5%8B%E8%AF%95%E7%8F%AD%22%2C%22eduStuName%22%3A%22%E6%AE%B7%E4%B8%B9%22%2C%22idCard%22%3A%22220421199410204926%22%2C%22isReport%22%3A1%2C%22isOnline%22%3Atrue%2C%22graduateType%22%3A0%2C%22questionnaireId%22%3A%2219%22%2C%22teamEnd%22%3A%222022-06-06%22%2C%22isExam%22%3A0%2C%22picUrl%22%3A%22http%3A%2F%2Fcollege-file-1302740389.cos.ap-beijing.myqcloud.com%2F2i0L5Ls63zSod1574457f7c9bac883c7d5e9f7f58c37.jpg%22%2C%22itemName%22%3A%22%E9%A2%86%E5%8F%96%E7%BB%93%E4%B8%9A%E8%AF%81%E6%B5%8B%E8%AF%95%22%2C%22isCheckin%22%3A0%2C%22teamStart%22%3A%222022-06-01%22%2C%22paperId%22%3A0%2C%22isComprehensive%22%3A0%2C%22teamState%22%3A1%2C%22itemEnd%22%3A%222022-06-06%22%2C%22comprehensiveId%22%3A%2221%22%2C%22eduStuId%22%3A13%2C%22groupName%22%3A%22%E4%B8%80%E7%BB%84%22%2C%22teamId%22%3A2%2C%22itemStart%22%3A%222022-06-01%22%2C%22examId%22%3A0%2C%22isQuestionnaire%22%3A0%2C%22isRegister%22%3A1%7D&plan=%7B%22searchValue%22%3Anull%2C%22createBy%22%3Anull%2C%22createTime%22%3A%222022-06-04%2009%3A00%3A06%22%2C%22updateBy%22%3Anull%2C%22updateTime%22%3Anull%2C%22remark%22%3Anull%2C%22params%22%3A%7B%7D%2C%22id%22%3A21%2C%22courseId%22%3A151%2C%22courseName%22%3A%22%E5%BA%86%E7%A5%9D%E4%B8%AD%E5%9B%BD%E5%85%B1%E4%BA%A7%E5%85%9A%E6%88%90%E7%AB%8B100%E5%91%A8%E5%B9%B4%22%2C%22courseThumbnailUrl%22%3A%22https%3A%2F%2Fcollege-file-1254259530.cos.ap-beijing.myqcloud.com%2Fresource%2Fcourse%2Ff6ea43c4-e00d-47d4-935c-24bfc77c2527%2F%25E5%25BE%25AE%25E4%25BF%25A1%25E5%259B%25BE%25E7%2589%2587_20210421164805.jpg%22%2C%22partIds%22%3Anull%2C%22partIdsRemark%22%3Anull%2C%22partNames%22%3Anull%2C%22arrangeId%22%3A5%2C%22courseStart%22%3A%222022-06-01%2000%3A00%3A00%22%2C%22courseEnd%22%3A%222022-06-06%2000%3A00%3A00%22%2C%22comperes%22%3Anull%2C%22comperesRemark%22%3Anull%2C%22comperesDept%22%3Anull%2C%22comperesDeptId%22%3Anull%2C%22comperesName%22%3Anull%2C%22classroomId%22%3Anull%2C%22baseId%22%3Anull%2C%22baseName%22%3Anull%2C%22classroomName%22%3Anull%2C%22enclosureUrl%22%3A%22%5B%7B%5C%22url%5C%22%3A%5C%22https%3A%2F%2F1254259530.vod2.myqcloud.com%2Fe55e0a06vodcq1254259530%2F4de367ce3701925919887166250%2FOk1e6me3wnQA.mp4%5C%22%2C%5C%22name%5C%22%3A%5C%22%E5%BA%86%E7%A5%9D%E4%B8%AD%E5%9B%BD%E5%85%B1%E4%BA%A7%E5%85%9A%E6%88%90%E7%AB%8B100%E5%91%A8%E5%B9%B4.mp4%5C%22%2C%5C%22fileId%5C%22%3A%5C%223701925919887166250%5C%22%2C%5C%22duration%5C%22%3A116%2C%5C%22verifyInterval%5C%22%3A0%7D%5D%22%2C%22groupIds%22%3A%223%22%2C%22groupId%22%3Anull%2C%22groupName%22%3A%22%E4%B8%80%E7%BB%84%22%2C%22teamId%22%3A2%2C%22teacherId%22%3A133%2C%22teacherName%22%3A%22%E8%B7%AF%E4%BA%9A%E5%85%B0%22%2C%22photoUrl%22%3A%22https%3A%2F%2Fcollege-file-1254259530.cos.ap-beijing.myqcloud.com%2Fresource%2Fteacher%2Fzp%2Fzp_2.png%22%2C%22itemId%22%3A2%2C%22itemName%22%3A%22%E9%A2%86%E5%8F%96%E7%BB%93%E4%B8%9A%E8%AF%81%E6%B5%8B%E8%AF%95%22%2C%22teamName%22%3A%22%E7%BB%93%E4%B8%9A%E8%AF%81%E9%A2%86%E5%8F%96%E6%B5%8B%E8%AF%95%E7%8F%AD%22%2C%22treeIds%22%3Anull%2C%22ceremonyContent%22%3Anull%2C%22ceremonyId%22%3Anull%2C%22ceremonyName%22%3Anull%2C%22seatMap%22%3Anull%2C%22status%22%3A0%2C%22courseStatus%22%3Anull%2C%22liveStatus%22%3Anull%2C%22videoPlaybackUrl%22%3Anull%2C%22courseType%22%3A3%2C%22isLive%22%3A0%2C%22isReplay%22%3A0%2C%22isExam%22%3A0%2C%22examId%22%3Anull%2C%22paperId%22%3Anull%2C%22suitangUpper%22%3A%2220%22%2C%22suitangLower%22%3Anull%2C%22performanceId%22%3Anull%2C%22studentId%22%3Anull%2C%22signStatus%22%3Anull%2C%22isDone%22%3A0%2C%22examDone%22%3A2%2C%22questionDone%22%3A2%2C%22courseSynopsis%22%3A%22%E5%BA%86%E7%A5%9D%E4%B8%AD%E5%9B%BD%E5%85%B1%E4%BA%A7%E5%85%9A%E6%88%90%E7%AB%8B100%E5%91%A8%E5%B9%B4%22%2C%22ceremonyCategory%22%3Anull%2C%22isEvaluate%22%3A0%2C%22courseProcess%22%3A0%2C%22ranks%22%3A%22%E5%9B%BD%E5%AE%B6%E8%8D%A3%E8%AA%89%22%2C%22courseModule%22%3A%22%E6%A5%B7%E6%A8%A1%E5%88%86%E4%BA%AB%22%2C%22isQuestion%22%3Anull%7D&isPre=0
  115. console.log('去学习');
  116. unPassCheck.confirmText = '去学习';
  117. unPassCheck.content = `未学完课程《${courseName}》`;
  118. unPassCheck.jumpType = JUMP_TYPES.COURSE;
  119. } else if (!data.examDone) {
  120. //去考试
  121. // id=36&examId=5&stuId=13
  122. console.log('去考试');
  123. unPassCheck.confirmText = '去考试';
  124. unPassCheck.content = `未参加《${courseName}》的随堂考试`;
  125. unPassCheck.jumpType = JUMP_TYPES.EXAM;
  126. } else if (!data.questionDone) {
  127. //去评价
  128. // id=20&teamId=2&courseId=228&scheduleId=20&eduStuId=13
  129. console.log('去评价');
  130. unPassCheck.confirmText = '去评价';
  131. unPassCheck.content = `未参加《${courseName}》的随堂问卷`;
  132. unPassCheck.jumpType = JUMP_TYPES.EVALUATE;
  133. }
  134. wx.showModal({
  135. title: '不能领取结业证',
  136. content: `${unPassCheck.content}`,
  137. confirmText: unPassCheck.confirmText,
  138. success: res => {
  139. if (!res.confirm) {
  140. return;
  141. }
  142. let {eduStuId, teamId} = this.data.eInfo;
  143. let jumpType = unPassCheck.jumpType;
  144. switch (jumpType) {
  145. case JUMP_TYPES.COURSE:
  146. let isPre = logicStatus.NO;
  147. let plan = JSON.stringify(data);
  148. let detail = JSON.stringify(this.data.eInfo);
  149. // let id = data.id;
  150. //start
  151. let type = "";
  152. if (data.courseType == courseTypes.RECORD) {
  153. type = courseTypes.RECORD;
  154. }
  155. // if (item.isReplay && item.isLive && item.liveStatus == liveStatus.LIVEEND && type == "") {
  156. // type = courseTypes.PLAYBACK;
  157. // }
  158. if (data.isLive && type == "") {
  159. type = courseTypes.LIVE;
  160. }
  161. if (type == "") {
  162. type = courseTypes.OFFLINE;
  163. }
  164. //end
  165. Route.toCourseDetail(type, data.id, detail, plan, isPre, {
  166. refresh: () => {
  167. const eventChannel = this.getOpenerEventChannel()
  168. eventChannel.emit('refresh');
  169. }
  170. });
  171. break;
  172. case JUMP_TYPES.EXAM:
  173. // id=36&examId=5&stuId=13
  174. Route.toExamDetail(data.paperId, data.examId, eduStuId, {
  175. answer: () => {
  176. const eventChannel = this.getOpenerEventChannel()
  177. eventChannel.emit('refresh');
  178. }
  179. });
  180. break;
  181. case JUMP_TYPES.EVALUATE:
  182. let qid = "";
  183. if (this.data.eInfo.isOnline) {
  184. qid = data.suitangUpper;
  185. } else {
  186. qid = data.suitangLower;
  187. }
  188. Route.toQuestionDetail(qid, teamId, data.courseId, data.id, eduStuId, {
  189. answer: () => {
  190. // this.triggerEvent("refresh")
  191. const eventChannel = this.getOpenerEventChannel()
  192. eventChannel.emit('refresh');
  193. }
  194. });
  195. break;
  196. }
  197. }
  198. // showCancel: false
  199. });
  200. },
  201. async save(e) {
  202. if (this.data.image && typeof this.data.image === 'string') {
  203. showLoading('保存中...')
  204. try {
  205. await wx.saveImageToPhotosAlbum({
  206. filePath: this.data.image,
  207. })
  208. wx.nextTick(() => {
  209. wx.showToast({
  210. title: '保存成功!',
  211. icon: 'success',
  212. duration: 2000
  213. });
  214. });
  215. } catch (e) {
  216. console.log(e)
  217. if (e.errMsg === "saveImageToPhotosAlbum:fail auth deny") {
  218. wx.showModal({
  219. title: "提示",
  220. content: "请点击右上角进入设置勾选相册后方可保存到相册",
  221. showCancel: false
  222. })
  223. }
  224. }
  225. wx.hideLoading();
  226. }
  227. },
  228. onImgOK(e) {
  229. this.imagePath = getEventParam(e, "path");
  230. this.setData({
  231. image: this.imagePath
  232. })
  233. },
  234. })