edu-plan.js 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347
  1. import {
  2. getDataSet,
  3. getEventParam,
  4. toast
  5. } from "../../../../utils/utils";
  6. import Route from "../../../../model/route";
  7. import {
  8. courseTypes,
  9. liveStatus,
  10. logicStatus,
  11. courseStatus
  12. } from "../../../../model/enum";
  13. import Api from '../../../../model/api';
  14. const SEARCH_TAB_MAP = {
  15. ALL: 'all',
  16. FINISHED: 'finished',
  17. NOT_FINISH: 'notfinish'
  18. };
  19. Component({
  20. properties: {
  21. isPre: {
  22. type: Number,
  23. },
  24. courseList: {
  25. type: Array
  26. },
  27. obj: {
  28. type: Object,
  29. },
  30. },
  31. data: {
  32. liveStatusEnum: liveStatus,
  33. courseTypesEnum: courseTypes,
  34. courseStatusEnum: courseStatus,
  35. filterCourseDate: '',
  36. searchCourseList: [],
  37. searchName: '', //搜索的课程名称
  38. // searchTabMap: SEARCH_TAB_MAP,
  39. activeSearchTab: SEARCH_TAB_MAP.ALL,
  40. searchTabs: [{
  41. name: SEARCH_TAB_MAP.ALL,
  42. label: '全部课程',
  43. info: 0
  44. },
  45. {
  46. name: SEARCH_TAB_MAP.FINISHED,
  47. label: '已完成',
  48. info: 0
  49. },
  50. {
  51. name: SEARCH_TAB_MAP.NOT_FINISH,
  52. label: '未完成',
  53. info: 0
  54. },
  55. ],
  56. showCollapseButton: false,
  57. showMaxNum: 20,
  58. expandAll: {
  59. [SEARCH_TAB_MAP.ALL]: false,
  60. [SEARCH_TAB_MAP.FINISHED]: false,
  61. [SEARCH_TAB_MAP.NOT_FINISH]: false,
  62. },
  63. defaultPicture: 'https://college-file-1254259530.cos.ap-beijing.myqcloud.com/resource/course/kc.jpg'
  64. // expandAll: false
  65. },
  66. observers: {
  67. courseList() {
  68. this.queryCourse();
  69. }
  70. },
  71. attached: function () {
  72. this.queryCourse();
  73. },
  74. ready() {
  75. this.selectComponent('#searchTabs').resize();
  76. },
  77. methods: {
  78. setCourseTabInfo(courseList) {
  79. // let searchName = this.data.searchName.trim();
  80. // let courseList = list.filter(item => {
  81. // let flag = true;
  82. // if (item.ceremonyCategory) {
  83. // //活动仪式
  84. // flag = searchName ? item.ceremonyName.indexOf(searchName) !== -1 : true;
  85. // } else {
  86. // //课程
  87. // flag = searchName ? item.courseName.indexOf(searchName) !== -1 : true;
  88. // }
  89. // return flag;
  90. // });
  91. // console.log('courseList', courseList);
  92. let total = courseList.length;
  93. let finishList = courseList.filter(item => item.courseProcess == courseStatus.COMPLETE);
  94. let finishLen = finishList.length;
  95. let tabs = this.data.searchTabs;
  96. tabs.forEach((item, index) => {
  97. switch (item.name) {
  98. case SEARCH_TAB_MAP.ALL:
  99. item.info = total;
  100. break;
  101. case SEARCH_TAB_MAP.FINISHED:
  102. item.info = finishLen;
  103. break;
  104. case SEARCH_TAB_MAP.NOT_FINISH:
  105. item.info = total - finishLen;
  106. break;
  107. }
  108. });
  109. // console.log('tabs -> ', tabs);
  110. this.setData({
  111. searchTabs: tabs
  112. });
  113. },
  114. onSearchChange(e) {
  115. // console.log('onSearchChange', e.detail);
  116. this.setData({
  117. searchName: e.detail
  118. });
  119. },
  120. // handleClearSearch() {
  121. // console.log('clear!!!!!!');
  122. // this.data.searchName = '';
  123. // this.setData({
  124. // searchName: ''
  125. // });
  126. // },
  127. onSearchTabChange(e) {
  128. // console.log(e);
  129. let name = e.detail.name;
  130. // this.activeSearchTab = name;
  131. this.setData({
  132. activeSearchTab: name
  133. });
  134. this.queryCourse(false);
  135. },
  136. queryCourse(updateTabInfo = true) {
  137. if (this.data.expandAll[this.data.activeSearchTab]) {
  138. wx.showLoading({
  139. title: '加载中',
  140. });
  141. }
  142. wx.nextTick(() => {
  143. // console.log('this.data.searchName', this.data.searchName);
  144. let searchName = this.data.searchName.trim();
  145. let courseFilterTab = this.data.activeSearchTab;
  146. let courseDate = this.data.filterCourseDate;
  147. let startTime, endTime;
  148. if (courseDate) {
  149. courseDate = this.data.filterCourseDate.replaceAll('-', '/');
  150. startTime = new Date(`${courseDate} 00:00:00`).getTime();
  151. endTime = new Date(`${courseDate} 23:59:59`).getTime();
  152. }
  153. //按照搜索的课程名称、课程日期筛选
  154. let courseList = this.data.courseList.filter(item => {
  155. let flag = true;
  156. if (item.ceremonyCategory) {
  157. //活动仪式
  158. flag = searchName ? item.ceremonyName.indexOf(searchName) !== -1 : true;
  159. } else {
  160. //课程
  161. flag = searchName ? item.courseName.indexOf(searchName) !== -1 : true;
  162. }
  163. if (courseDate && flag) {
  164. //按日期筛选
  165. // courseDate = this.data.filterCourseDate.replaceAll('-', '/');
  166. // let startTime = new Date(`${courseDate} 00:00:00`).getTime();
  167. // let endTime = new Date(`${courseDate} 23:59:59`).getTime();
  168. let courseStartTime = new Date(`${item.courseStart.replaceAll('-', '/')}`).getTime();
  169. let courseEndTime = new Date(`${item.courseEnd.replaceAll('-', '/')}`).getTime();
  170. // //开始时间 和 结束时间 都在当日
  171. // let flag1 = courseStartTime >= startTime && courseEndTime <= endTime;
  172. //1. 开始时间和结束时间包含当日
  173. let flag1 = courseStartTime <= startTime && courseEndTime >= endTime;
  174. //2. 开始时间在当日
  175. let flag2 = courseStartTime >= startTime && courseStartTime <= endTime;
  176. //3. 结束时间在当日
  177. let flag3 = courseEndTime >= startTime && courseEndTime <= endTime;
  178. //三种情况满足任意一种就可以
  179. return flag1 || flag2 || flag3;
  180. }
  181. return flag;
  182. });
  183. // console.log(courseList.length);
  184. //按照课程状态(全部、已学、未学)tab筛选
  185. let list = courseList.filter(item => {
  186. let flag = true;
  187. if (courseFilterTab == SEARCH_TAB_MAP.FINISHED) {
  188. flag = item.courseProcess == courseStatus.COMPLETE;
  189. } else if (courseFilterTab == SEARCH_TAB_MAP.NOT_FINISH) {
  190. flag = item.courseProcess != courseStatus.COMPLETE;
  191. }
  192. return flag;
  193. });
  194. // console.log('list -> ', list.length);
  195. // console.log('list -> ', list);
  196. this.setData({
  197. searchCourseList: this.data.expandAll[this.data.activeSearchTab] ? list : list.slice(0, this.data.showMaxNum),
  198. showCollapseButton: list.length > this.data.showMaxNum
  199. });
  200. if (updateTabInfo) {
  201. this.setCourseTabInfo(courseList);
  202. }
  203. wx.nextTick(() => {
  204. setTimeout(() => {
  205. wx.hideLoading({
  206. success: (res) => {},
  207. });
  208. }, 1500);
  209. });
  210. });
  211. },
  212. handleExpandChange() {
  213. let key = this.data.activeSearchTab;
  214. let prop = `expandAll.${key}`
  215. let value = !this.data.expandAll[key];
  216. this.setData({
  217. [prop]: value
  218. });
  219. // if (value) {
  220. // wx.showLoading({
  221. // title: '加载中',
  222. // });
  223. // }
  224. this.queryCourse(false);
  225. },
  226. scrollToSchedule(info) {
  227. const query = this.createSelectorQuery();
  228. query.select(`#course-${info.id}`).boundingClientRect();
  229. query.exec(function (res) {
  230. console.log('query-res', res);
  231. wx.pageScrollTo({
  232. duration: 0,
  233. scrollTop: res[0].top - 80
  234. });
  235. });
  236. },
  237. async toLive(e) {
  238. // console.log('e --> ', e);
  239. // let item = getDataSet(e, "item");
  240. let item = e.type ? getDataSet(e, "item") : e;
  241. let plan = JSON.stringify(item);
  242. let isPre = this.data.isPre;
  243. if (isPre) {
  244. if (item.isReplay == logicStatus.NO) {
  245. if (item.courseType == courseTypes.RECORD) {
  246. toast('课程不允许回放!');
  247. }
  248. if (item.isLive && item.liveStatus == liveStatus.LIVEEND) {
  249. toast('课程不允许回放!');
  250. }
  251. return;
  252. } else if (item.isReplay == logicStatus.YES) {
  253. if (item.isLive && item.liveStatus != liveStatus.LIVEEND) {
  254. return;
  255. }
  256. }
  257. }
  258. let type = "";
  259. if (item.courseType == courseTypes.RECORD) {
  260. type = courseTypes.RECORD;
  261. let res = await Api.getCourseOpenStatus(item.id, (code, msg) => {
  262. wx.hideToast();
  263. wx.showModal({
  264. title: msg || '课程还未开始~',
  265. content: `${item.courseStart} 开始上课`,
  266. showCancel: false
  267. });
  268. return false;
  269. });
  270. if (!res) {
  271. return;
  272. }
  273. }
  274. if (item.isReplay && item.isLive && item.liveStatus == liveStatus.LIVEEND && type == "") {
  275. type = courseTypes.PLAYBACK;
  276. }
  277. if (item.isLive && type == "") {
  278. type = courseTypes.LIVE;
  279. }
  280. if (type == "") {
  281. type = courseTypes.OFFLINE;
  282. }
  283. // let detail = JSON.stringify(this.data.obj);
  284. //暂时解决解析json报错问题 start
  285. let detail = this.data.obj;
  286. let paramsDetail = JSON.stringify({
  287. ...detail,
  288. picUrl: '',
  289. teamName: '',
  290. itemName: ''
  291. });
  292. //暂时解决解析json报错问题 end
  293. Route.toCourseDetail(type, item.id, paramsDetail, plan, isPre, {
  294. refresh: () => {
  295. this.triggerEvent("refresh")
  296. }
  297. });
  298. },
  299. selectDate(e) {
  300. // this.triggerEvent("select", getEventParam(e))
  301. let courseDate = getEventParam(e, "date");
  302. // console.log('courseStart -> ', courseDate);
  303. this.setData({
  304. filterCourseDate: courseDate
  305. });
  306. this.queryCourse();
  307. // let courseList = [];
  308. // if (!courseDate) {
  309. // //全部
  310. // courseList = this.data.courseList;
  311. // } else {
  312. // //按日期筛选
  313. // courseDate = courseDate.replaceAll('-', '/');
  314. // let startTime = new Date(`${courseDate} 00:00:00`).getTime();
  315. // let endTime = new Date(`${courseDate} 23:59:59`).getTime();
  316. // // if (startTime)
  317. // courseList = this.data.courseList.filter(course => {
  318. // let courseStartTime = new Date(`${course.courseStart.replaceAll('-', '/')}`).getTime();
  319. // let courseEndTime = new Date(`${course.courseEnd.replaceAll('-', '/')}`).getTime();
  320. // // //开始时间 和 结束时间 都在当日
  321. // // let flag1 = courseStartTime >= startTime && courseEndTime <= endTime;
  322. // //开始时间和结束时间包含当日
  323. // let flag1 = courseStartTime <= startTime && courseEndTime >= endTime;
  324. // //开始时间在当日
  325. // let flag2 = courseStartTime >= startTime && courseStartTime <= endTime;
  326. // //结束时间在当日
  327. // let flag3 = courseEndTime >= startTime && courseEndTime <= endTime;
  328. // return flag1 || flag2 || flag3;
  329. // });
  330. // }
  331. },
  332. refresh(e) {
  333. this.triggerEvent("refresh")
  334. }
  335. }
  336. });