Browse Source

fix: [YNUFE] streamline the semester list

AxelPLN 3 weeks ago
parent
commit
944a7a3cbe
2 changed files with 48 additions and 4 deletions
  1. 1 1
      resources/YNUFE/adapters.yaml
  2. 47 3
      resources/YNUFE/ynufe.js

+ 1 - 1
resources/YNUFE/adapters.yaml

@@ -6,4 +6,4 @@ adapters:
     asset_js_path: "ynufe.js"
     import_url: "https://xjwis.ynufe.edu.cn/jsxsd/"
     maintainer: "AxelPLN"
-    description: "云南财经大学强智教务适配,登录教务系统账号后直接导入即可。"
+    description: "由于学校已于 2026 年上半年启用 aTrust 验证,登录教务系统之前必须使用云财小程序内登记的手机号完成短信验证,完成验证后再使用教务系统账号登录,若无法完成验证请确认是否在小程序登记了正确的手机号码或者向教务处反馈,对此不便开发者表示无能为力。登录教务系统后直接按下面的“执行导入”即可。"

+ 47 - 3
resources/YNUFE/ynufe.js

@@ -345,7 +345,7 @@ function parseScheduleHtml(html) {
 }
 
 /**
- * 转换课程数据格式以符合时光课表规范
+ * 转换课程数据格式以符合拾光课程表规范
  * @param {Array} rawCourses 原始课程数据
  * @returns {Array} 转换后的课程数据
  */
@@ -474,6 +474,50 @@ async function getSemesterList() {
             }
         });
     }
+
+    // 仅保留最新学期往前五年内的学期选项
+    const semesterYearPattern = /^(\d{4})-(\d{4})-(\d+)$/;
+    const semesterStartYears = [];
+    const semesterRecords = semesterValues.map((value, index) => {
+        const label = semesters[index] || '';
+        const valueMatch = String(value).match(semesterYearPattern);
+        const labelMatch = String(label).match(semesterYearPattern);
+        const startYear = valueMatch ? Number(valueMatch[1]) : (labelMatch ? Number(labelMatch[1]) : null);
+
+        if (startYear !== null) {
+            semesterStartYears.push(startYear);
+        }
+
+        return { index, value, label, startYear };
+    });
+
+    if (semesterStartYears.length > 0) {
+        const latestStartYear = Math.max(...semesterStartYears);
+        const minStartYear = latestStartYear - 4;
+        const filteredSemesters = [];
+        const filteredSemesterValues = [];
+        let filteredDefaultIndex = -1;
+
+        semesterRecords.forEach((record) => {
+            if (record.startYear !== null && record.startYear >= minStartYear) {
+                filteredSemesters.push(record.label);
+                filteredSemesterValues.push(record.value);
+                if (record.index === defaultIndex) {
+                    filteredDefaultIndex = filteredSemesters.length - 1;
+                }
+            }
+        });
+
+        semesters = filteredSemesters;
+        semesterValues = filteredSemesterValues;
+
+        if (filteredDefaultIndex !== -1) {
+            defaultIndex = filteredDefaultIndex;
+        } else if (defaultIndex >= semesterValues.length) {
+            defaultIndex = Math.max(semesterValues.length - 1, 0);
+        }
+    }
+
     return { semesters, semesterValues, defaultIndex, htmlText };
 }
 
@@ -533,7 +577,7 @@ async function fetchAndParseCourses(html) {
 }
 
 /**
- * 保存课程数据到时光课
+ * 保存课程数据到拾光课程
  * @param {Array} courses 课程数组
  * @returns {boolean} 保存是否成功
  */
@@ -550,7 +594,7 @@ async function saveCourses(courses) {
 }
 
 /**
- * 导入预设时间段到时光课
+ * 导入预设时间段到拾光课程
  * @param {number} campusIdx 校区索引
  * @returns {boolean} 导入是否成功
  */