Bladeren bron

Merge pull request #334 from XingHeYuZhuan/pending

Pending
星河欲转 3 weken geleden
bovenliggende
commit
8e2310e936
2 gewijzigde bestanden met toevoegingen van 68 en 3 verwijderingen
  1. 9 2
      resources/IMNC/adapters.yaml
  2. 59 1
      resources/IMNC/imnc_01.js

+ 9 - 2
resources/IMNC/adapters.yaml

@@ -1,8 +1,15 @@
 adapters:
   - adapter_id: "IMNC_01"
-    adapter_name: "呼和浩特民族学院教务系统"
+    adapter_name: "通过 WebVPN 登录"
     category: "BACHELOR_AND_ASSOCIATE"
     asset_js_path: "imnc_01.js"
     import_url: "https://webvpn.imnc.edu.cn"
     maintainer: "浮笙-WindDrift"
-    description: "无需校园网,使用 WebVPN 登录,登录后依次点击【教务管理系统】-【本学期课表】-【个人课表】,在【小节课表】页面(即第1节、第2节...)点击下方【执行导入】。"
+    description: "无需校园网,使用 WebVPN 登录,登录后依次点击【教务管理系统】-【本学期课表】-【个人课表】,在【小节课表】页面(即第1节、第2节...)点击下方【执行导入】。"
+  - adapter_id: "IMNC_02"
+    adapter_name: "已连接校园网?"
+    category: "BACHELOR_AND_ASSOCIATE"
+    asset_js_path: "imnc_01.js"
+    import_url: "http://211.82.176.48/academic/login/imnc/loginIds6.jsp"
+    maintainer: "浮笙-WindDrift"
+    description: "需要校园网,适用于上方无法登录的情况,导入方法与上方相同。"

+ 59 - 1
resources/IMNC/imnc_01.js

@@ -1,5 +1,5 @@
 /**
- * 呼和浩特民族学院 (IMNC) 课表解析脚本
+ * 呼和浩特民族学院 (IMNC) 课表解析脚本-通过 WebVPN 登录
  * 放置于测试目录用于真机测试
  */
 
@@ -103,6 +103,55 @@ function fetchAndParseCourses() {
     return courses;
 }
 
+function cleanCellText(cell) {
+    return cell.textContent.replace(/\u00a0/g, ' ').replace(/\s+/g, ' ').trim();
+}
+
+function parseNoArrangementCourses() {
+    let table = document.querySelector('#noArrangement');
+    if (!table) return [];
+
+    let rows = table.querySelectorAll('tr');
+    let courses = [];
+    let seen = {};
+
+    for (let i = 1; i < rows.length; i++) {
+        let cells = rows[i].querySelectorAll('td');
+        if (cells.length < 8) continue;
+
+        let course = {
+            courseId: cleanCellText(cells[0]),
+            name: cleanCellText(cells[1]),
+            sequence: cleanCellText(cells[2]),
+            teacher: cleanCellText(cells[3]) || '未填写教师',
+            combinedClass: cleanCellText(cells[4]),
+            weeks: cleanCellText(cells[5]),
+            day: cleanCellText(cells[6]),
+            position: cleanCellText(cells[7])
+        };
+
+        if (!course.courseId && !course.name) continue;
+
+        let key = [course.courseId, course.name, course.sequence, course.teacher, course.combinedClass, course.weeks, course.day, course.position].join('|');
+        if (seen[key]) continue;
+
+        seen[key] = true;
+        courses.push(course);
+    }
+
+    return courses;
+}
+
+function formatNoArrangementMessage(courses) {
+    let lines = courses.map((course, index) => {
+        let teacher = course.teacher || '未填写教师';
+        let weeks = course.weeks || '未填写周次';
+        return `${index + 1}. ${course.name} / ${teacher} / ${weeks}`;
+    });
+
+    return `检测到 ${courses.length} 门课程没有具体上课时间或地点,无法自动放入课表:\n\n${lines.join('\n')}\n\n请在确认课程时间后重新导入,点击【继续】将导入已知课程。`;
+}
+
 // 调度流程
 async function runImportFlow() {
     try {
@@ -125,6 +174,15 @@ async function runImportFlow() {
             await window.AndroidBridgePromise.showAlert("错误", "未在当前页面找到课表数据,请确认是否处于课表页面,或联系适配开发者。", "好的");
             return;
         }
+
+        let noArrangementCourses = parseNoArrangementCourses();
+        if (noArrangementCourses.length > 0) {
+            await window.AndroidBridgePromise.showAlert(
+                "存在未安排课程",
+                formatNoArrangementMessage(noArrangementCourses),
+                "继续"
+            );
+        }
         
         await window.AndroidBridgePromise.saveImportedCourses(JSON.stringify(courses));
         AndroidBridge.showToast(`成功导入 ${courses.length} 门课程块!`);