jinxia.mo 3 недель назад
Родитель
Сommit
ca22ca0fc6

+ 10 - 1
back-ui/src/views/dz/papers/components/paper-exact-hand.vue

@@ -139,7 +139,16 @@ const handleSubmit = async (questions) => {
         questions
     }
     usePaperStorage(paper)
-    await router.push({name: 'PaperDetail'})
+    // 检查当前路由,避免冗余导航
+    if (router.currentRoute.value.name !== 'PaperDetail') {
+        await router.push({name: 'PaperDetail'})
+    } else {
+        // 如果已经在详情页,添加时间戳参数强制刷新
+        await router.replace({
+            name: 'PaperDetail',
+            query: { _t: Date.now() }
+        })
+    }
 }
 
 let statArg = null

+ 10 - 1
back-ui/src/views/dz/papers/components/paper-full-hand.vue

@@ -125,7 +125,16 @@ const handleSubmit = async (questions) => {
         questions
     }
     usePaperStorage(paper)
-    await router.push({name: 'PaperDetail'})
+    // 检查当前路由,避免冗余导航
+    if (router.currentRoute.value.name !== 'PaperDetail') {
+        await router.push({name: 'PaperDetail'})
+    } else {
+        // 如果已经在详情页,添加时间戳参数强制刷新
+        await router.replace({
+            name: 'PaperDetail',
+            query: { _t: Date.now() }
+        })
+    }
 }
 
 let statArg = null

+ 27 - 4
back-ui/src/views/dz/papers/hooks/usePaperStorage.js

@@ -10,9 +10,14 @@ export const usePaperStorage = function (body) {
 
 export const usePaperResolver = function () {
     const paper = useStorage(key, null)
-    const paperLocal = ref(JSON.parse(paper.value))
+    const paperLocal = ref(paper.value ? JSON.parse(paper.value) : null)
     const groupedQuestions = ref([])
-    const resolvePaper = (function () {
+    
+    const resolvePaper = function () {
+        if (!paperLocal.value || !paperLocal.value.questions) {
+            groupedQuestions.value = []
+            return
+        }
         const results = {}
         paperLocal.value.questions.forEach(q => {
             if (!results[q.qtpye]) results[q.qtpye] = []
@@ -22,9 +27,27 @@ export const usePaperResolver = function () {
             title: g,
             list: results[g],
             num: results[g].length,
-            score: results[g].reduce((acc, current) => acc + current.score, 0)
+            score: results[g].reduce((acc, current) => acc + (current.score || 0), 0)
         }))
-    })()
+    }
+    
+    // 初始化时解析
+    resolvePaper()
+    
+    // 监听 storage 变化,自动更新数据
+    watch(paper, (newVal) => {
+        if (newVal) {
+            try {
+                paperLocal.value = JSON.parse(newVal)
+                resolvePaper()
+            } catch (e) {
+                console.error('解析试卷数据失败:', e)
+            }
+        } else {
+            paperLocal.value = null
+            groupedQuestions.value = []
+        }
+    }, { immediate: false })
 
     const toCommitPaper = function () {
         const questions = []