@@ -10,11 +10,11 @@ import {
1010
1111import Modal from '@/components/modal' ;
1212
13- import useTimeStore , { computeSemesterAndYear } from '@/store/time' ;
1413import useVisualScheme from '@/store/visualScheme' ;
1514
1615import { commonStyles } from '@/styles/common' ;
1716import { log } from '@/utils/logger' ;
17+ import { calculateSemesterWeekCount } from '@/utils/semesterWeeks' ;
1818
1919import { WeekSelectorProps } from './courseTable/type' ;
2020
@@ -32,19 +32,12 @@ const WeekSelector: FC<WeekSelectorProps> = ({
3232 year,
3333 semester,
3434 semesterOptions,
35+ currentSemester,
36+ actualCurrentWeek,
3537 onApply,
3638 isLoading = false ,
3739} ) => {
3840 const currentStyle = useVisualScheme ( state => state . currentStyle ) ;
39- const getCurrentWeek = useTimeStore ( state => state . getCurrentWeek ) ;
40- const schoolTime = useTimeStore ( state => state . schoolTime ) ;
41-
42- // 根据 schoolTime 推算真实当前学期
43- const actualSemester = useMemo (
44- ( ) => ( schoolTime ? computeSemesterAndYear ( schoolTime ) : null ) ,
45- [ schoolTime ]
46- ) ;
47-
4841 // 本地预选学期状态(箭头切换只改这里,不立即请求)
4942 const [ pendingYear , setPendingYear ] = useState ( year ) ;
5043 const [ pendingSemester , setPendingSemester ] = useState ( semester ) ;
@@ -69,15 +62,24 @@ const WeekSelector: FC<WeekSelectorProps> = ({
6962 pendingIndex >= 0 && pendingIndex < semesterOptions . length - 1 ;
7063 const canGoNext = pendingIndex > 0 ;
7164
65+ const pendingTotalWeeks = useMemo ( ( ) => {
66+ if ( pendingIndex < 0 ) return totalWeeks ;
67+ const option = semesterOptions [ pendingIndex ] ;
68+ return calculateSemesterWeekCount (
69+ option . startTimestamp ,
70+ option . endTimestamp
71+ ) ;
72+ } , [ pendingIndex , semesterOptions , totalWeeks ] ) ;
73+
7274 // 预选学期是否与当前学期不同
7375 const hasSemesterChanged =
7476 pendingYear !== year || pendingSemester !== semester ;
7577
7678 // 预选学期是否为真实当前学期(用于决定是否渲染「当前周」标识)
7779 const isCurrentSemester =
78- actualSemester !== null &&
79- pendingYear === actualSemester . year &&
80- pendingSemester === actualSemester . semester ;
80+ currentSemester !== null &&
81+ pendingYear === currentSemester . year &&
82+ pendingSemester === currentSemester . semester ;
8183
8284 // 向前切换(更早的学期)—— 只改本地状态
8385 const handlePrev = useCallback ( ( ) => {
@@ -257,7 +259,7 @@ const WeekSelector: FC<WeekSelectorProps> = ({
257259 </ View >
258260 { /* 周次选择区域 */ }
259261 < View style = { styles . weekGrid } >
260- { Array . from ( { length : totalWeeks } ) . map ( ( _ , i ) => (
262+ { Array . from ( { length : pendingTotalWeeks } ) . map ( ( _ , i ) => (
261263 < Pressable
262264 key = { i }
263265 onPress = { ( ) => handleWeekSelect ( i + 1 ) }
@@ -280,7 +282,7 @@ const WeekSelector: FC<WeekSelectorProps> = ({
280282 color :
281283 ! hasSemesterChanged && currentWeek === i + 1
282284 ? '#FFFFFF'
283- : isCurrentSemester && getCurrentWeek ( ) === i + 1
285+ : isCurrentSemester && actualCurrentWeek === i + 1
284286 ? '#7878F8'
285287 : currentStyle ?. schedule_text_style ?. color ||
286288 '#000000' ,
@@ -289,7 +291,7 @@ const WeekSelector: FC<WeekSelectorProps> = ({
289291 >
290292 { i + 1 }
291293 </ Text >
292- { isCurrentSemester && getCurrentWeek ( ) === i + 1 && (
294+ { isCurrentSemester && actualCurrentWeek === i + 1 && (
293295 < Text
294296 style = { [
295297 commonStyles . fontSmall ,
@@ -319,7 +321,7 @@ const WeekSelector: FC<WeekSelectorProps> = ({
319321
320322const styles = StyleSheet . create ( {
321323 loadingOverlay : {
322- ...StyleSheet . absoluteFillObject ,
324+ ...StyleSheet . absoluteFill ,
323325 justifyContent : 'center' ,
324326 alignItems : 'center' ,
325327 } ,
0 commit comments