// ==UserLibrary== // @name bw_learn_tool_api_lib // @namespace https://learn.baowugroup.com/ // @version 1.0.0 // @description 宝武学习平台 API 库 // @author 令狐不太冲 // @license MIT // ==/UserLibrary== (function (window) { 'use strict'; var BW_BASE_URL = 'https://learn.baowugroup.com/learn-gateway/service/tms/ols'; var BW_API = { publicCourses: BW_BASE_URL + '/student/queryPageOpenClass', zoneList: BW_BASE_URL + '/student/myClassPage', zoneCourses: BW_BASE_URL + '/onlineClassCourse/getOnlineClassCourseSortPage', courseScore: BW_BASE_URL + '/onlineClassCourse/finishInfo', getdetailCourse: BW_BASE_URL + '/onlineClassCourse/detailOnlineClassCourse', getCourseInfo: BW_BASE_URL + '/onlineClassCourse/getOnlineClassCourseInfo', saveCourseDetail: BW_BASE_URL + '/computeTask/saveComputeTask4StuCourseDetail' }; function bwGetToken() { try { return JSON.parse(localStorage.getItem('userInfo')).accessToken || null; } catch (e) { return null; } } async function bwPost(url, data, token) { token = token || bwGetToken(); if (!token) return { isSuccess: false }; var resp = await fetch(url, { method: 'POST', headers: { 'Content-Type': 'application/json;charset=UTF-8', 'token': token }, body: JSON.stringify(data) }); return resp.json(); } var BWAPI = { version: '1.0.0', getToken: bwGetToken, fetchPublicCourses: async function(learnStatus, current, size) { learnStatus = learnStatus || ''; current = current || 1; size = size || 100; try { var r = await bwPost(BW_API.publicCourses, { current: current, size: size, data: { learnStatus: learnStatus, searchInfo: '', searchType: '1', sortClass: '1', sortType: 'desc' } }); return (r.isSuccess && r.data && r.data.records) ? r.data.records : []; } catch (e) { return []; } }, fetchZoneList: async function(learnStatus, current, size, classType) { learnStatus = learnStatus || ''; current = current || 1; size = size || 100; classType = classType || 'ZE0'; try { var r = await bwPost(BW_API.zoneList, { current: current, size: size, data: { classType: classType, isLearnNum: '1', keyWord: '', lastLearnTime: '1', learnStatus: learnStatus, sortClass: '1', sortType: 'desc', status: '' } }); return (r.isSuccess && r.data && r.data.records) ? r.data.records : []; } catch (e) { return []; } }, fetchZoneCoursesDetail: async function(centerCode, olClassNo, olClassType) { var all = []; var current = 1; try { while (current <= 50) { var r = await bwPost(BW_API.zoneCourses, { current: current, size: 1000, data: { centerCode: centerCode, courseName: '', courseTypeCode: '', isMine: '1', isRecursiveCourse: '1', olClassNo: olClassNo, olClassType: olClassType } }); if (!r.isSuccess || !r.data) break; var records = r.data.records || []; all = all.concat(records); if (records.length < 1000) break; current++; } } catch (e) {} return all; }, fetchCourseScore: async function(centerCode, courseNo, olClassNo, tenantCode) { tenantCode = tenantCode || 'BSTA'; try { var r = await bwPost(BW_API.courseScore, { centerCode: centerCode, courseNo: courseNo, olClassNo: olClassNo, tenantCode: tenantCode }); if (r.isSuccess && r.data) { var d = null; if (r.data.details) { for (var i = 0; i < r.data.details.length; i++) { if (r.data.details[i].attributeCode === 'CE002') { d = r.data.details[i]; break; } } } return { passScore: r.data.passScore, learnScore: r.data.learnScore, requiredDuration: d ? d.predValue : null, completedDuration: d ? d.finishValue : null }; } } catch (e) {} return null; }, fetchCourseScoreInVideoPage: async function(centerCode, courseNo, olClassNo, tenantCode) { tenantCode = tenantCode || 'BSTA'; try { await bwPost(BW_API.saveCourseDetail, { classNo: olClassNo, courseNo: courseNo }); var r = await bwPost(BW_API.courseScore, { centerCode: centerCode, courseNo: courseNo, olClassNo: olClassNo, tenantCode: tenantCode }); if (r.isSuccess && r.data) { var d = null; if (r.data.details) { for (var i = 0; i < r.data.details.length; i++) { if (r.data.details[i].attributeCode === 'CE002') { d = r.data.details[i]; break; } } } return { passScore: r.data.passScore, learnScore: r.data.learnScore, requiredDuration: d ? d.predValue : null, completedDuration: d ? d.finishValue : null }; } } catch (e) {} return null; }, fetchCourseInfoByVideoUrl: async function(centerCode, guid) { try { var d = await bwPost(BW_API.getdetailCourse, { centerCode: centerCode, guid: guid, stuClient: true }); if (!d.isSuccess || !d.data) return null; var courseNo = d.data.courseNo; var olClassNo = d.data.olClassNo; if (!courseNo || !olClassNo) return null; var i = await bwPost(BW_API.getCourseInfo, { centerCode: centerCode, courseNo: courseNo, olClassNo: olClassNo }); if (!i.isSuccess || !i.data) return null; return { courseName: i.data.courseName, centerCode: i.data.centerCode || centerCode, courseGuid: guid, olClassNo: olClassNo, courseNo: courseNo }; } catch (e) { return null; } }, enrichCoursesWithScores: async function(courses) { return Promise.all(courses.map(async function(c) { if (!c.centerCode || !c.courseNo || !c.olClassNo) return Object.assign({}, c, { score: null }); try { return Object.assign({}, c, { score: await BWAPI.fetchCourseScore(c.centerCode, c.courseNo, c.olClassNo) }); } catch (e) { return Object.assign({}, c, { score: null }); } })); } }; window.BWAPI = BWAPI; })(typeof unsafeWindow !== 'undefined' ? unsafeWindow : window);