// ==UserScript== // @name bw_learn_tool_api // @namespace http://tampermonkey.net/ // @version 1.0.0 // @description bw learn tool api lib // @author jinxhcn // @grant none // @run-at document-start // ==/UserScript== (function () { 'use strict'; const BASE_CONFIG = { API_queryPageOpenClass: 'https://learn.baowugroup.com/learn-gateway/service/tms/ols/student/queryPageOpenClass', STORAGE_KEY_USER_INFO: 'userInfo', }; /** * 通用 POST 请求 */ const postRequest = async (url, data, headers = {}) => { const response = await fetch(url, { method: 'POST', headers: { 'Content-Type': 'application/json;charset=UTF-8', ...headers }, body: JSON.stringify(data) }); if (!response.ok) throw new Error(`POST 请求失败: ${response.status}`); return response.json(); }; /** * 获取 token */ const getToken = () => { try { const userInfo = JSON.parse(localStorage.getItem(BASE_CONFIG.STORAGE_KEY_USER_INFO)); return userInfo?.accessToken ?? null; } catch { return null; } }; /** * 获取公开课列表(学习中) * @returns {Promise} 课程列表 [{centerCode, guid, courseName}] */ const fetchLearningCourses = async () => { const token = getToken(); if (!token) { console.warn('[API库] 未获取到 token'); return []; } try { const result = await postRequest( BASE_CONFIG.API_queryPageOpenClass, { current: 1, data: { learnStatus: '1', searchInfo: '', searchType: '1', sortClass: '1', sortType: 'desc' }, size: 10 }, { token } ); if (result?.isSuccess && result.data?.records) { return result.data.records.map(record => ({ centerCode: record.centerCode, guid: record.courseGuid, courseName: record.courseName })); } return []; } catch (error) { console.error('[API库] 获取课程失败:', error); return []; } }; // 暴露到全局 const BWAPI = { fetchLearningCourses, getToken, // 可继续添加其他 API 方法 }; // 挂载到 unsafeWindow,主脚本通过 unsafeWindow.BWAPI 访问 if (typeof unsafeWindow !== 'undefined') { unsafeWindow.BWAPI = BWAPI; } else { window.BWAPI = BWAPI; } })();