From c84d30e287673c9eb395d76a1e3be10ee0698f50 Mon Sep 17 00:00:00 2001 From: cat_shark <1716967236@qq.com> Date: Sun, 12 Apr 2026 13:05:23 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=AD=A6=E4=B9=A0=E6=B5=81?= =?UTF-8?q?=E7=A8=8B=E8=B7=AF=E7=94=B1=E5=88=87=E6=8D=A2=E4=B8=8E=E8=AE=A1?= =?UTF-8?q?=E6=97=B6=E5=B1=95=E7=A4=BA=E7=A8=B3=E5=AE=9A=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/StartTask.vue | 425 +++++++++++++++++++------ src/components/Study.vue | 375 +++++++++++++++------- src/components/composables/useTimer.ts | 9 + src/router/index.ts | 15 +- 4 files changed, 595 insertions(+), 229 deletions(-) diff --git a/src/components/StartTask.vue b/src/components/StartTask.vue index c7fd56e..7d15d43 100644 --- a/src/components/StartTask.vue +++ b/src/components/StartTask.vue @@ -1,11 +1,15 @@ - diff --git a/src/components/Study.vue b/src/components/Study.vue index 001c4e4..ba17c3a 100644 --- a/src/components/Study.vue +++ b/src/components/Study.vue @@ -1,28 +1,48 @@ diff --git a/src/components/composables/useTimer.ts b/src/components/composables/useTimer.ts index 242acbb..cd13a1c 100644 --- a/src/components/composables/useTimer.ts +++ b/src/components/composables/useTimer.ts @@ -18,6 +18,14 @@ export function useTimer(audioUrl: string = '/resource/notification.mp3') { timerRunning.value = false; }; + const syncDisplay = (durationMs: number) => { + const safeDuration = Math.max(durationMs, 0); + remainingTime.value = safeDuration; + timerMinutes.value = Math.floor(safeDuration / 1000 / 60); + timerSeconds.value = Math.floor((safeDuration / 1000) % 60); + timerIsOver.value = safeDuration === 0; + }; + const handleCountdownComplete = () => { audio.loop = true; audio.play(); @@ -91,6 +99,7 @@ export function useTimer(audioUrl: string = '/resource/notification.mp3') { timerRunning, timerIsOver, runCountdown, + syncDisplay, clear, checkAudioPermission, requestAudioPermission, diff --git a/src/router/index.ts b/src/router/index.ts index 96415cb..5d86067 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -1,4 +1,5 @@ import { createRouter, createWebHistory, type RouteRecordRaw } from "vue-router"; +import StartTask from "@/components/StartTask.vue"; const routes: RouteRecordRaw[] = [ { @@ -17,6 +18,7 @@ const routes: RouteRecordRaw[] = [ }, { path: "/study", + name: "study", component: () => import("@/components/Study.vue"), meta: { requiresAuth: true }, }, @@ -28,7 +30,7 @@ const routes: RouteRecordRaw[] = [ { path: "/start-task/:taskNum", name: "start-task", - component: () => import("@/components/StartTask.vue"), + component: StartTask, meta: { requiresAuth: true }, }, { @@ -58,6 +60,17 @@ const router = createRouter({ routes, }); +router.onError((error, to) => { + const message = String((error as Error)?.message || ""); + const isChunkLoadError = + message.includes("Failed to fetch dynamically imported module") || + message.includes("Importing a module script failed") || + message.includes("Loading chunk"); + if (isChunkLoadError && typeof window !== "undefined") { + window.location.assign(to.fullPath); + } +}); + router.beforeEach((to) => { if (to.meta.requiresAuth === false) return true; const isLoggedIn = localStorage.getItem("isLoggedIn") === "true";