您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
try to take over the world! maybe……
// ==UserScript== // @name 针对上海电子信息课表错位的问题做的简单修复 // @namespace http://tampermonkey.net/ // @version 1.0.1 // @description try to take over the world! maybe…… // @author u1iz // @match https://os.stiei.edu.cn/teaching/student/* // @icon https://www.google.com/s2/favicons?sz=64&domain=stiei.edu.cn // @homepage https://gitee.com/u1iz/javascript-script/tree/master/TamperMonkey/%E4%BF%AE%E5%A4%8D%E8%AF%BE%E8%A1%A8 // @require https://cdn.jsdelivr.net/npm/[email protected]/dist/jquery.min.js // @grant none // @license MIT // ==/UserScript== // @require https://cdn.bootcss.com/jquery/3.6.0/jquery.min.js (function() { 'use strict'; // 在这里修改占用4节课的课程名的开头字符 const lessonsInfo = { double: ['虚拟现实', '新媒体运营', '三维图像设计'] } const reload = callBack => { $('.ant-menu-item').eq(0).click() clearInterval(window.waittingLoad) return new Promise((resolve, reject) => { window.waittingLoad = setInterval(() => { if (location.href.endsWith('week_schedule')) { clearInterval(window.waittingLoad) callBack && callBack() resolve() } $('.ant-menu-item').eq(1).click() }, 200) }) } const addStyle = () => { if($('#longer').length) return let style = $('<style id="longer"><style>') style.text(`.longer::after { content: ''; position: absolute; left: 0; top: 0; height: 100%; width: 200%; background: linear-gradient(to right, #9bd2fb, transparent); } .longer-sp::after { background: linear-gradient(to right, #fedeab, transparent); } .lesson-cell.lesson-pointer { position: relative; z-index: 1 }`) $('html').append(style) } const fix = () => { if (!location.href.endsWith('week_schedule')) return addStyle() reload().then(() => { $('.schedule-table-wrapper .row.header').html( `<div data-v-247749a0="" class="row-head" style="width: 66px;"></div> <div data-v-247749a0="" class="row-col" style="min-width: 81px;"> <div data-v-247749a0="" class="col-head" style="border-bottom: 1px solid rgb(232, 232, 232); border-right: 1px solid rgba(232, 232, 232, 0.3); background: rgb(104, 180, 235);"> <div data-v-247749a0="" class="title">第一节</div> <div data-v-247749a0="" class="range">8:30-9:10</div> </div> </div> <div data-v-247749a0="" class="row-col" style="min-width: 81px;"> <div data-v-247749a0="" class="col-head" style="border-bottom: 1px solid rgb(232, 232, 232); border-right: 1px solid rgba(232, 232, 232, 0.3); background: rgb(104, 180, 235);"> <div data-v-247749a0="" class="title">第二节</div> <div data-v-247749a0="" class="range">9:10-9:50</div> </div> </div> <div data-v-247749a0="" class="row-col" style="min-width: 81px;"> <div data-v-247749a0="" class="col-head" style="border-bottom: 1px solid rgb(232, 232, 232); border-right: 1px solid rgba(232, 232, 232, 0.3); background: rgb(104, 180, 235);"> <div data-v-247749a0="" class="title">第三节</div> <div data-v-247749a0="" class="range">10:05-10:45</div> </div> </div> <div data-v-247749a0="" class="row-col" style="min-width: 81px;"> <div data-v-247749a0="" class="col-head" style="border-bottom: 1px solid rgb(232, 232, 232); border-right: 1px solid rgba(232, 232, 232, 0.3); background: rgb(104, 180, 235);"> <div data-v-247749a0="" class="title">第四节</div> <div data-v-247749a0="" class="range">10:45-11:25</div> </div> </div> <div data-v-247749a0="" class="row-col" style="min-width: 81px;"> <div data-v-247749a0="" class="col-head" style="border-bottom: 1px solid rgb(232, 232, 232); border-right: 1px solid rgba(232, 232, 232, 0.3); background: rgb(249, 175, 54);"> <div data-v-247749a0="" class="title">第五节</div> <div data-v-247749a0="" class="range">13:00-13:40</div> </div> </div> <div data-v-247749a0="" class="row-col" style="min-width: 81px;"> <div data-v-247749a0="" class="col-head" style="border-bottom: 1px solid rgb(232, 232, 232); border-right: 1px solid rgba(232, 232, 232, 0.3); background: rgb(249, 175, 54);"> <div data-v-247749a0="" class="title">第六节</div> <div data-v-247749a0="" class="range">13:40-14:20</div> </div> </div> <div data-v-247749a0="" class="row-col" style="min-width: 81px;"> <div data-v-247749a0="" class="col-head" style="border-bottom: 1px solid rgb(232, 232, 232); border-right: 1px solid rgba(232, 232, 232, 0.3); background: rgb(249, 175, 54);"> <div data-v-247749a0="" class="title">第七节</div> <div data-v-247749a0="" class="range">14:35-15:15</div> </div> </div> <div data-v-247749a0="" class="row-col" style="min-width: 81px;"> <div data-v-247749a0="" class="col-head" style="border-bottom: 1px solid rgb(232, 232, 232); border-right: 1px solid rgba(232, 232, 232, 0.3); background: rgb(249, 175, 54);"> <div data-v-247749a0="" class="title">第八节</div> <div data-v-247749a0="" class="range">15:15-15:55</div> </div> </div> <div data-v-247749a0="" class="row-col" style="min-width: 81px;"> <div data-v-247749a0="" class="col-head" style="border-bottom: 1px solid rgb(232, 232, 232); border-right: 1px solid rgba(232, 232, 232, 0.3); background: rgb(47, 65, 105);"> <div data-v-247749a0="" class="title">第九节</div> <div data-v-247749a0="" class="range">19:00-19:40</div> </div> </div> <div data-v-247749a0="" class="row-col" style="min-width: 81px;"> <div data-v-247749a0="" class="col-head" style="border-bottom: 1px solid rgb(232, 232, 232); border-right: 1px solid rgba(232, 232, 232, 0.3); background: rgb(47, 65, 105);"> <div data-v-247749a0="" class="title">第十节</div> <div data-v-247749a0="" class="range">19:40-20:20</div> </div> </div> <div data-v-247749a0="" class="row-col" style="min-width: 81px;"> <div data-v-247749a0="" class="col-head" style="border-bottom: 1px solid rgb(232, 232, 232); border-right: 1px solid rgba(232, 232, 232, 0.3); background: rgb(47, 65, 105);"> <div data-v-247749a0="" class="title">第十一节</div> <div data-v-247749a0="" class="range">20:40-21:20</div> </div> </div> <div data-v-247749a0="" class="row-col" style="min-width: 81px;"> <div data-v-247749a0="" class="col-head" style="border-bottom: 1px solid rgb(232, 232, 232); border-right: 1px solid rgba(232, 232, 232, 0.3); background: rgb(47, 65, 105);"> <div data-v-247749a0="" class="title">第十二节</div> <div data-v-247749a0="" class="range">21:20-22:00</div> </div> </div>` ) setTimeout(() => addBtn(), 100) setLessonWidth() }) } const setLessonWidth = () => { $('.schedule-table-wrapper .schedule-table .default-cell').each((i, e) => { const str = $(e).attr('style').split(';')[0] if (str.startsWith('width')) { var val = str.split(': ')[1] lessonsInfo.double.forEach(les => { const name = $(e).find('.name').text() if (name.startsWith(les)) { // $(e).width(`calc(${parseFloat(val) * 2 +'%'} - 100px)`) // 考查课另用背景色 // if (name.includes('考查')) { if ($(e).find('.pm').length) { $(e).addClass('longer-sp') } $(e).addClass('longer') } }) } }) } const addBtn = () => { if (!$('.fix-btn').length && location.href.endsWith('week_schedule')) { let btn = $('<button class="fix-btn">修复</button>') $('.table-header__actions').append(btn) btn.on('click', () => fix()) } setTimeout(() => { if (!$('.fix-btn').length) addBtn() }, 100) } window.onload = () => addBtn() // url变化 异步执行 window.addEventListener('popstate', _ => setTimeout(() => addBtn(), 10)) // 循环监听 let lastUrl = location.href window.loopListener = setInterval(() => { // addBtn() if (location.href != lastUrl) { addBtn() lastUrl = location.href } }, 500) })()