| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- /**
- * 华侨大学 (HQU) 教务系统课程导入脚本
- * 版本:2026 春季学期
- * 还有待解决的问题:课程合并
- */
- // 1. 全局验证函数 (由 showPrompt 调用)
- function validateTermInput(input) {
- if (/^\d{4}-\d{4}-\d$/.test(input)) {
- return false; // 校验通过
- } else {
- return "格式错误!请输入如 2025-2026-2";
- }
- }
- async function runImportFlow() {
- AndroidBridge.showToast("正在启动华大教务同步程序...");
- try {
- // --- 1. 获取学期代码 ---
- const termQuery = [
- { name: "CSDM", linkOpt: "AND", builderList: "cbl_String", builder: "equal", value: "PK" },
- { name: "ZCSDM", linkOpt: "AND", builderList: "cbl_String", builder: "equal", value: "XSDXNXQDM" }
- ];
-
- const termResp = await fetch("https://jwapp-hqu-edu-cn-s.atrust.hqu.edu.cn:9443/jwapp/sys/wdkb/modules/xskcb/xtcscx.do?sf_request_type=ajax", {
- method: "POST",
- headers: { "content-type": "application/x-www-form-urlencoded" },
- body: `querySetting=${encodeURIComponent(JSON.stringify(termQuery))}`
- });
- const termJson = await termResp.json();
- const currentXNXQ = termJson.datas.xtcscx.CSZA || "2025-2026-2";
- const parts = currentXNXQ.split('-');
- const currentXN = `${parts}-${parts}`;
- const currentXQ = parts;
- // --- 2. 获取配置与开学日期 ---
- let startDate = "2026-03-02";
- let totalWeeks = 18;
- try {
- const configResp = await fetch("https://jwapp-hqu-edu-cn-s.atrust.hqu.edu.cn:9443/jwapp/sys/wdkb/modules/jshkcb/cxjcs.do?sf_request_type=ajax", {
- method: "POST",
- headers: { "content-type": "application/x-www-form-urlencoded" },
- body: `XN=${currentXN}&XQ=${currentXQ}`
- });
- const configJson = await configResp.json();
- const schoolConfig = configJson.datas.cxjcs.rows;
- if (schoolConfig && schoolConfig.XQKSRQ) {
- startDate = schoolConfig.XQKSRQ.split(' ');
- totalWeeks = parseInt(schoolConfig.ZZC) || 18;
- }
- } catch (e) { console.log("配置抓取跳过"); }
- // --- 3. 抓取课表详情 ---
- const kbResp = await fetch("https://jwapp-hqu-edu-cn-s.atrust.hqu.edu.cn:9443/jwapp/sys/wdkb/modules/xskcb/cxxszhxqkb.do?sf_request_type=ajax", {
- method: "POST",
- headers: { "content-type": "application/x-www-form-urlencoded" },
- body: `XNXQDM=${currentXNXQ}&XNXQDM2=${currentXNXQ}&XNXQDM3=${currentXNXQ}`
- });
- const kbJson = await kbResp.json();
- const rawRows = kbJson.datas.cxxszhxqkb.rows;
- //转换数据结构
- const parsedCourses = rawRows.map(item => {
- // 1. 周次解析:从位图获取最硬核的数据
- const weeks = [];
- const bitMap = item.SKZC || "";
-
- // 华大逻辑:如果位图索引1是1,那就是第一周有课 你看它里面 "SKZC": "011111111111111100",
- for (let i = 0; i < bitMap.length; i++) {
- if (bitMap[i] === '1') {
- weeks.push(i + 1);
- }
- }
-
- // 体育课的标题:体育课加上具体的项目(如:篮球)
- let courseName = item.KCM;
- if (item.TYXMDM_DISPLAY) {
- courseName = `${courseName}(${item.TYXMDM_DISPLAY})`;
- }
- // 地点兜底:优先取具体教室,没有则取教学楼,再没有则标记操场
- const position = item.JASMC || item.JXLDM_DISPLAY || "操场/待定";
- // 2. YPSJDD
- let note = `原始安排:${item.YPSJDD || '无'}`;
- if (item.XF) note += `\n学分:${item.XF}`;
- if (item.KCXZDM_DISPLAY) note += `\n性质:${item.KCXZDM_DISPLAY}`;
- return {
- name: item.KCM,
- teacher: item.SKJS || item.JSM || "未知",
- position: position,
- day: parseInt(item.SKXQ),
- startSection: parseInt(item.KSJC),
- endSection: parseInt(item.JSJC),
- weeks: weeks,
- };
- });
- // --- 5. 提交数据 ---
- await window.AndroidBridgePromise.saveCourseConfig(JSON.stringify({
- semesterStartDate: startDate,
- semesterTotalWeeks: totalWeeks
- }));
- const timeSlots = [
- { number: 1, startTime: "08:00", endTime: "08:45" }, { number: 2, startTime: "08:55", endTime: "09:40" },
- { number: 3, startTime: "10:00", endTime: "10:45" }, { number: 4, startTime: "10:55", endTime: "11:40" },
- { number: 5, startTime: "11:45", endTime: "12:30" }, { number: 6, startTime: "14:30", endTime: "15:15" },
- { number: 7, startTime: "15:25", endTime: "16:10" }, { number: 8, startTime: "16:20", endTime: "17:05" },
- { number: 9, startTime: "17:15", endTime: "18:00" }, { number: 10, startTime: "18:20", endTime: "19:05" },
- { number: 11, startTime: "19:10", endTime: "19:55" }, { number: 12, startTime: "20:05", endTime: "20:50" },
- { number: 13, startTime: "20:55", endTime: "21:40" }
- ];
- await window.AndroidBridgePromise.savePresetTimeSlots(JSON.stringify(timeSlots));
- await window.AndroidBridgePromise.saveImportedCourses(JSON.stringify(parsedCourses));
- AndroidBridge.showToast(`${currentXNXQ} 导入成功!`);
- AndroidBridge.notifyTaskCompletion();
- } catch (e) {
- await window.AndroidBridgePromise.showAlert("导入失败", "错误: " + e.message, "重试");
- }
- }
- runImportFlow();
|