@@ -26,6 +26,7 @@ type FormValues = {
2626 speed : number // 存在 localStorage
2727 studentID : string // 存在 localStorage
2828 password : string // 存在 localStorage (如果记住密码)
29+ network : 'webvpn' | 'intranet' // 存在 localStorage
2930 courses : {
3031 courseID : string ,
3132 classID : string ,
@@ -110,14 +111,15 @@ export function Content() {
110111 } else if ( value . mode === 'WatchCourseSync' ) {
111112 EventsEmit ( 'systemStatus' , '单线程蹲课中' )
112113 }
114+
113115 // 抢课函数
114116 if ( ( value . mode === 'WatchCourseSync' || value . mode === 'WatchCourse' ) && localStorage . getItem ( 'isProtect' ) === 'yes' ) {
115117 // 蹲课保护: Promise 被拒绝时, 会自动重试
116- const autoRetry = async ( func : typeof WatchCoursePub | typeof WatchCoursePubSync | typeof WatchCourseMaj | typeof WatchCourseMajSync , speed : number , studentID : string , password : string , courseID : string [ ] , classID : string [ ] , isHeadless : boolean ) => {
118+ const autoRetry = async ( func : typeof WatchCoursePub | typeof WatchCoursePubSync | typeof WatchCourseMaj | typeof WatchCourseMajSync , speed : number , studentID : string , password : string , courseID : string [ ] , classID : string [ ] , isHeadless : boolean , useWebVpn : boolean ) => {
117119 // eslint-disable-next-line no-constant-condition
118120 while ( true ) {
119121 try {
120- await func ( speed , studentID , password , courseID , classID , isHeadless )
122+ await func ( speed , studentID , password , courseID , classID , isHeadless , useWebVpn )
121123 break
122124 } catch ( err ) {
123125 EventsEmit ( 'currentStatus' , `检测到发生错误: ${ err } ` )
@@ -128,8 +130,8 @@ export function Content() {
128130 // 开始蹲课保护
129131 if ( publicCourses . length > 0 && majorCourses . length > 0 ) {
130132 const res = await Promise . allSettled ( [
131- autoRetry ( funcs . public [ value . mode ] , value . speed , value . studentID , value . password , publicCourses . map ( course => course . courseID ) , publicCourses . map ( course => course . classID ) , localStorage . getItem ( 'isHeadless' ) !== 'no' ) ,
132- autoRetry ( funcs . major [ value . mode ] , value . speed , value . studentID , value . password , majorCourses . map ( course => course . courseID ) , majorCourses . map ( course => course . classID ) , localStorage . getItem ( 'isHeadless' ) !== 'no' ) ,
133+ autoRetry ( funcs . public [ value . mode ] , value . speed , value . studentID , value . password , publicCourses . map ( course => course . courseID ) , publicCourses . map ( course => course . classID ) , localStorage . getItem ( 'isHeadless' ) !== 'no' , localStorage . getItem ( 'network' ) === 'webvpn' ) ,
134+ autoRetry ( funcs . major [ value . mode ] , value . speed , value . studentID , value . password , majorCourses . map ( course => course . courseID ) , majorCourses . map ( course => course . classID ) , localStorage . getItem ( 'isHeadless' ) !== 'no' , localStorage . getItem ( 'network' ) === 'webvpn' ) ,
133135 ] )
134136 res . forEach ( ( res ) => {
135137 if ( res . status === 'rejected' ) {
@@ -139,16 +141,16 @@ export function Content() {
139141 } )
140142 return
141143 } else if ( publicCourses . length > 0 ) {
142- await autoRetry ( funcs . public [ value . mode ] , value . speed , value . studentID , value . password , publicCourses . map ( course => course . courseID ) , publicCourses . map ( course => course . classID ) , localStorage . getItem ( 'isHeadless' ) !== 'no' )
144+ await autoRetry ( funcs . public [ value . mode ] , value . speed , value . studentID , value . password , publicCourses . map ( course => course . courseID ) , publicCourses . map ( course => course . classID ) , localStorage . getItem ( 'isHeadless' ) !== 'no' , localStorage . getItem ( 'network' ) === 'webvpn' )
143145 } else if ( majorCourses . length > 0 ) {
144- await autoRetry ( funcs . major [ value . mode ] , value . speed , value . studentID , value . password , majorCourses . map ( course => course . courseID ) , majorCourses . map ( course => course . classID ) , localStorage . getItem ( 'isHeadless' ) !== 'no' )
146+ await autoRetry ( funcs . major [ value . mode ] , value . speed , value . studentID , value . password , majorCourses . map ( course => course . courseID ) , majorCourses . map ( course => course . classID ) , localStorage . getItem ( 'isHeadless' ) !== 'no' , localStorage . getItem ( 'network' ) === 'webvpn' )
145147 }
146148 } else {
147149 // 关闭蹲课保护或抢课
148150 if ( publicCourses . length > 0 && majorCourses . length > 0 ) {
149151 const res = await Promise . allSettled ( [
150- funcs . public [ value . mode ] ( value . speed , value . studentID , value . password , publicCourses . map ( course => course . courseID ) , publicCourses . map ( course => course . classID ) , localStorage . getItem ( 'isHeadless' ) !== 'no' ) ,
151- funcs . major [ value . mode ] ( value . speed , value . studentID , value . password , majorCourses . map ( course => course . courseID ) , majorCourses . map ( course => course . classID ) , localStorage . getItem ( 'isHeadless' ) !== 'no' ) ,
152+ funcs . public [ value . mode ] ( value . speed , value . studentID , value . password , publicCourses . map ( course => course . courseID ) , publicCourses . map ( course => course . classID ) , localStorage . getItem ( 'isHeadless' ) !== 'no' , localStorage . getItem ( 'network' ) === 'webvpn' ) ,
153+ funcs . major [ value . mode ] ( value . speed , value . studentID , value . password , majorCourses . map ( course => course . courseID ) , majorCourses . map ( course => course . classID ) , localStorage . getItem ( 'isHeadless' ) !== 'no' , localStorage . getItem ( 'network' ) === 'webvpn' ) ,
152154 ] )
153155 res . forEach ( ( res ) => {
154156 if ( res . status === 'rejected' ) {
@@ -158,9 +160,9 @@ export function Content() {
158160 } )
159161 return
160162 } else if ( publicCourses . length > 0 ) {
161- await funcs . public [ value . mode ] ( value . speed , value . studentID , value . password , publicCourses . map ( course => course . courseID ) , publicCourses . map ( course => course . classID ) , localStorage . getItem ( 'isHeadless' ) !== 'no' )
163+ await funcs . public [ value . mode ] ( value . speed , value . studentID , value . password , publicCourses . map ( course => course . courseID ) , publicCourses . map ( course => course . classID ) , localStorage . getItem ( 'isHeadless' ) !== 'no' , localStorage . getItem ( 'network' ) === 'webvpn' )
162164 } else if ( majorCourses . length > 0 ) {
163- await funcs . major [ value . mode ] ( value . speed , value . studentID , value . password , majorCourses . map ( course => course . courseID ) , majorCourses . map ( course => course . classID ) , localStorage . getItem ( 'isHeadless' ) !== 'no' )
165+ await funcs . major [ value . mode ] ( value . speed , value . studentID , value . password , majorCourses . map ( course => course . courseID ) , majorCourses . map ( course => course . classID ) , localStorage . getItem ( 'isHeadless' ) !== 'no' , localStorage . getItem ( 'network' ) === 'webvpn' )
164166 }
165167 }
166168 } catch ( err ) {
@@ -210,6 +212,7 @@ export function Content() {
210212 courseType : localStorage . getItem ( 'courseType' ) || 'public' ,
211213 studentID : localStorage . getItem ( 'studentID' ) || '' ,
212214 password : localStorage . getItem ( 'password' ) || '' ,
215+ network : localStorage . getItem ( 'network' ) || 'intranet' ,
213216 } }
214217 onFinish = { async value => {
215218 await handleSubmit ( browserStatus , systemStatus , { ...value , courses } )
@@ -308,6 +311,22 @@ export function Content() {
308311 ] }
309312 />
310313 </ Form . Item >
314+ < div className = 'text-nowrap bg-gray-100 border border-[#d9d9d9] border-e-0 px-3 flex items-center justify-center' >
315+ 网络环境
316+ </ div >
317+ < Form . Item
318+ noStyle
319+ name = 'network'
320+ rules = { [ { required : true , message : '请选择网络环境' } ] }
321+ >
322+ < Select
323+ id = 'network-select'
324+ options = { [
325+ { label : '校园网' , value : 'intranet' } ,
326+ { label : 'WebVPN' , value : 'webvpn' } ,
327+ ] }
328+ />
329+ </ Form . Item >
311330 < div className = 'flex items-center justify-center border rounded-e-md border-[#d9d9d9] pl-3 pr-1' >
312331 < Checkbox
313332 id = 'headless-select'
0 commit comments