// ==UserScript== // @name BIT 新版物理实验选课系统增强 // @namespace http://tampermonkey.net/ // @version 2025-03-11 // @description 史山破破烂烂,小猫缝缝补补 // @author Charlie // @match https://xk.bit.edu.cn/* // @match https://webvpn.bit.edu.cn/https/*/xsxkapp/sys/xsxkapp/* // @icon https://www.google.com/s2/favicons?sz=64&domain=bit.edu.cn // @grant none // @downloadURL none // ==/UserScript== const style = document.createElement('style') document.head.appendChild(style) style.textContent = ` .cv-public-course .cv-list>.cv-body>.cv-row>.cv-setting-col { width: unset; } ` // 持久化 sessionStorage.token = localStorage.token sessionStorage.getItem = key => localStorage.getItem(key) sessionStorage.removeItem = key => localStorage.removeItem(key) sessionStorage.setItem = (key, value) => { localStorage.setItem(key, value) sessionStorage.token = localStorage.token } const ob = new MutationObserver(() => { // Polyfill async function initCourseprogramGroup($row, callBack) { const packagetype = $row.attr('packagetype') const studentInfo = JSON.parse(sessionStorage.getItem('studentInfo')) const param = { courseCode: $row.attr('coursenumber'), studentCode: studentInfo.code, batchCode: studentInfo.electiveBatch.code, programCode: '', } if (packagetype == '02' || packagetype == '05') { param.programCode = $row .find('.program-item.cv-active') .attr('programCode') } return queryCourseprogramGroup(param).done(res => { let html = $('#tpl-expcourse-group-list').html() const rowhtml = $('#tpl-expcourse-group-list-row').html() let bodyHtml = '' if (res.dataList && res.dataList.length > 0) { const uuid = getUuid() let display = '' const distinctList = [] $.each(res.dataList, function (index, obj) { let cfflag = false $.each(distinctList, function (index1, obj1) { if (obj.expGroupCode == obj1.expGroupCode) { cfflag = true } }) if (!cfflag) { distinctList.push(obj) } }) $.each(distinctList, function (index, obj) { obj = dealEmptyData(obj) if (obj.canSelect == '0') { display = 'cv-hide' } else { display = '' } bodyHtml += rowhtml .replace(/@uuid/g, uuid) .replace(/@expGroupCode/g, obj.expGroupCode) .replace(/@expGroupName/g, obj.expGroupName) .replace(/@display/g, display) .replace(/@programCode/g, obj.programCode) .replace(/@programPackageCode/g, obj.programPackageCode) .replace(/@programName/g, obj.programName) .replace(/@beginSection/g, obj.beginSection) .replace(/@dayOfWeek/g, obj.dayOfWeek) .replace(/@claimsName/g, obj.claimsName) .replace(/@timePlace/g, obj.timePlace ? obj.timePlace : '') .replace(/@teacherName/g, obj.teacherName ? obj.teacherName : '') .replace( /@noChooseReason/g, obj.noChooseReason ? obj.noChooseReason : '' ) .replace(/@teachingClassCapacity/g, obj.teachingClassCapacity) }) $row.find('.detail-buttons').show() } else { bodyHtml = '