Prechádzať zdrojové kódy

Merge pull request #84 from Vera-zero/main

新增校区选择
星河欲转 2 týždňov pred
rodič
commit
e2f6a1be47
1 zmenil súbory, kde vykonal 59 pridanie a 92 odobranie
  1. 59 92
      resources/NEU/neu.js

+ 59 - 92
resources/NEU/neu.js

@@ -1,22 +1,23 @@
-// 文件: school.js
+// 文件: neu.js
 
-// 1. 显示一个公告信息弹窗
-async function demoAlert() {
+// 1. 显示校区选择弹窗
+async function showCampusSelection() {
+    const campuses = ["南湖校区", "浑南校区"];
     try {
-        console.log("即将显示公告弹窗...");
-        const confirmed = await window.AndroidBridgePromise.showAlert(
-            "注意",
-            "教务系统网址仅在校园网/连接校内vpn环境下可访问,无法进入时请检查网络连接,本适配仅适配东北大学本科生新教务系统,其他院校或研究生用户请谨慎使用。如有问题请联系开发者反馈。",
-            "我知道了"
+        console.log("即将显示单选列表弹窗...");
+        const selectedIndex = await window.AndroidBridgePromise.showSingleSelection(
+            "选择你所在的校区",
+            JSON.stringify(campuses),
+            2
         );
-        if (confirmed) {
-            return true; // 成功时返回 true
+        if (selectedIndex !== -1) {
+            return campuses[selectedIndex]; // 返回用户选择的校区
         } else {
             return false; // 用户取消时返回 false
         }
     } catch (error) {
-        console.error("显示公告弹窗时发生错误:", error);
-        AndroidBridge.showToast("Alert:显示弹窗出错!" + error.message);
+        console.error("显示单选列表弹窗时发生错误:", error);
+        AndroidBridge.showToast("Single Selection:显示列表出错!" + error.message);
         return false; // 出现错误时也返回 false
     }
 }
@@ -69,11 +70,11 @@ async function extractCoursesFromPage() {
                 });
             } 
         }
-        console.log("信息提取中");
     });
 
     return { lessons: lessons, time_text: time_text };
 }
+
 // 2.1 解析课程详情字符串,提取周次、教师和地点信息
 function parseCourseDetails(detailStr) {
     // 匹配所有周次模式
@@ -157,64 +158,24 @@ function parseWeeksString(weeksStr) {
     return [...new Set(result)].sort((a, b) => a - b);
 }
 
-// 2.3 解析学期字符串,返回对应的开学日期
-function parseSemesterToDate(semesterStr) {
-    // 使用正则表达式提取年份和学期信息
-    const regex = /(\d{4})-(\d{4})学年(春季|秋季)学期/;
-    const match = semesterStr.match(regex);
-    
-    if (!match) {
-        throw new Error('学期字符串格式不正确,应为:"XXXX-XXXX学年春季/秋季学期"');
-    }
-    
-    const startYear = parseInt(match[1]);  // 前一个年份
-    const endYear = parseInt(match[2]);    // 后一个年份
-    const season = match[3];               // 春季或秋季
-    
-    // 验证年份格式是否正确(后一年份应比前一年份大1)
-    if (endYear !== startYear + 1) {
-        throw new Error('年份格式不正确,后一年份应比前一年份大1');
-    }
-    
-    let resultDate;
-    
-    if (season === '春季') {
-        // 春季学期:使用后一个年份的3月1日
-        resultDate = `${endYear}-03-01`;
-    } else if (season === '秋季') {
-        // 秋季学期:使用前一个年份的9月1日
-        resultDate = `${startYear}-09-01`;
-    } else {
-        throw new Error('学期类型不正确,应为"春季"或"秋季"');
-    }
-    
-    return resultDate;
-}
-
 // 3. 导入课程数据
 async function SaveCourses(lessons) {
-    console.log("正在准备测试课程数据...");
+    console.log("正在准备导入课程数据...");
     const testCourses = lessons;
 
     try {
-        console.log("正在尝试导入课程...");
         const result = await window.AndroidBridgePromise.saveImportedCourses(JSON.stringify(testCourses));
-        if (result === true) {
-            console.log("课程导入成功!");
-        } else {
-            console.log("课程导入未成功,结果:" + result);
-            AndroidBridge.showToast("测试课程导入失败,请查看日志。");
-        }
     } catch (error) {
         console.error("导入课程时发生错误:", error);
         AndroidBridge.showToast("导入课程失败: " + error.message);
     }
 }
 
-// 4. 导入预设时间段
-async function importPresetTimeSlots() {
-    console.log("正在准备预设时间段数据...");
-    const presetTimeSlots = [
+// 4. 根据校区导入对应的时间段
+async function importTimeSlotsByCampus(campus) {
+    console.log(`正在准备${campus}时间段数据...`);
+
+    const hunNanTimeSlots = [
         { "number": 1, "startTime": "08:30", "endTime": "09:15" },
         { "number": 2, "startTime": "09:25", "endTime": "10:10" },
         { "number": 3, "startTime": "10:30", "endTime": "11:15" },
@@ -228,16 +189,27 @@ async function importPresetTimeSlots() {
         { "number": 11, "startTime": "20:30", "endTime": "21:15" },
         { "number": 12, "startTime": "21:15", "endTime": "22:10" },
     ];
+    
+    const nanHuTimeSlots = [
+        { "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": "14:00", "endTime": "14:45" },
+        { "number": 6, "startTime": "14:55", "endTime": "15:40" },
+        { "number": 7, "startTime": "16:00", "endTime": "16:45" },
+        { "number": 8, "startTime": "16:55", "endTime": "17:40" },
+        { "number": 9, "startTime": "18:30", "endTime": "19:15" },
+        { "number": 10, "startTime": "19:25", "endTime": "20:10" },
+        { "number": 11, "startTime": "20:20", "endTime": "21:05" },
+        { "number": 12, "startTime": "21:15", "endTime": "22:00" },
+    ];
+    
+    // 根据校区选择对应的时间表
+    const timeSlotsToImport = (campus === "南湖校区") ? nanHuTimeSlots : hunNanTimeSlots;
 
     try {
-        console.log("正在尝试导入预设时间段...");
-        const result = await window.AndroidBridgePromise.savePresetTimeSlots(JSON.stringify(presetTimeSlots));
-        if (result === true) {
-            console.log("预设时间段导入成功!");
-        } else {
-            console.log("预设时间段导入未成功,结果:" + result);
-            window.AndroidBridge.showToast("测试时间段导入失败,请查看日志。");
-        }
+        const result = await window.AndroidBridgePromise.savePresetTimeSlots(JSON.stringify(timeSlotsToImport));
     } catch (error) {
         console.error("导入时间段时发生错误:", error);
         window.AndroidBridge.showToast("导入时间段失败: " + error.message);
@@ -247,10 +219,8 @@ async function importPresetTimeSlots() {
 // 5. 导入课表配置
 async function SaveConfig(time_text) {
     console.log("正在准备配置数据...");
-    startDate = parseSemesterToDate(time_text);
     // 注意:只传入要修改的字段,其他字段(如 semesterTotalWeeks)会使用 Kotlin 模型中的默认值
     const courseConfigData = {
-        "semesterStartDate": startDate,
         "semesterTotalWeeks": 18,
         "defaultClassDuration": 45,
         "defaultBreakDuration": 10,
@@ -258,17 +228,8 @@ async function SaveConfig(time_text) {
     };
 
     try {
-        console.log("正在尝试导入课表配置...");
         const configJsonString = JSON.stringify(courseConfigData);
-
         const result = await window.AndroidBridgePromise.saveCourseConfig(configJsonString);
-
-        if (result === true) {
-            console.log("课表配置导入成功!");
-        } else {
-            console.log("课表配置导入未成功,结果:" + result);
-            AndroidBridge.showToast("测试配置导入失败,请查看日志。");
-        }
     } catch (error) {
         console.error("导入配置时发生错误:", error);
         AndroidBridge.showToast("导入配置失败: " + error.message);
@@ -279,28 +240,34 @@ async function SaveConfig(time_text) {
  * 编排这些异步操作,并在用户取消时停止后续执行。
  */
 async function runAllDemosSequentially() {
-    AndroidBridge.showToast("所有演示将按顺序开始...");
-    // 1. 提示公告
-    const alertResult = await demoAlert();
-    if (!alertResult) {
-        console.log("用户取消了 Alert 演示,停止后续执行。");
+    AndroidBridge.showToast("开始导入课表...");
+    
+
+    // 2. 校区选择
+    const selectedCampus = await showCampusSelection();
+    if (!selectedCampus) {
+        console.log("用户取消了校区选择,停止后续执行。");
+        AndroidBridge.showToast("已取消导入");
         return; // 用户取消,立即退出函数
     }
 
-    console.log("所有弹窗演示已完成。");
-    AndroidBridge.showToast("所有弹窗演示已完成!");
-
-
-    // 以下是数据导入,与用户交互无关,可以继续
-    const PageInfo = await extractCoursesFromPage();//从课表页面中提取课程数据
+    // 3. 从课表页面中提取课程数据
+    const PageInfo = await extractCoursesFromPage();
     const lessons = PageInfo.lessons;
     const time_text = PageInfo.time_text;
-    await SaveCourses(lessons);//保存课程数据到数据库
-    await importPresetTimeSlots();//导入预设时间槽
-    await SaveConfig(time_text);//保存底层配置
+    
+    // 4. 保存课程数据到数据库
+    await SaveCourses(lessons);
+    
+    // 5. 根据选择的校区导入对应的时间段
+    await importTimeSlotsByCampus(selectedCampus);
+    
+    // 6. 保存底层配置
+    await SaveConfig(time_text);
 
     // 发送最终的生命周期完成信号
     AndroidBridge.notifyTaskCompletion();
+    AndroidBridge.showToast("课表导入完成!");
 }
 
 // 启动所有演示