Selaa lähdekoodia

paper by hand cc.

abpcoder 1 kuukausi sitten
vanhempi
commit
b40faa4222

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

@@ -4,13 +4,16 @@
         <el-aside width="350px">
             <paper-knowledge-tree exact-mode/>
         </el-aside>
-        <el-main></el-main>
+        <el-main>
+            <paper-question-hand exact-mode/>
+        </el-main>
     </el-container>
 </template>
 
 <script setup name="PaperHandExact">
 import PaperExactConditions from "@/views/dz/papers/components/paper-exact-conditions.vue";
 import PaperKnowledgeTree from "@/views/dz/papers/components/paper-knowledge-tree.vue";
+import PaperQuestionHand from "@/views/dz/papers/components/paper-question-hand.vue";
 import {useProvidePaperExactCondition} from "@/views/dz/papers/hooks/usePaperExactCondition.js";
 
 useProvidePaperExactCondition()

+ 53 - 48
back-ui/src/views/dz/papers/components/paper-question-hand.vue

@@ -1,51 +1,56 @@
 <template>
-    <div>
-        <div v-if="knowledgeNode" class="text-xs mb-2">当前查询知识点:<strong>{{ knowledgeNode.name }}</strong></div>
-        <div class="flex flex-row items-center gap-3">
-            <el-input v-model="keywordLocal" clearable prefix-icon="search" placeholder="输入题目关键字-回车触发搜索"
-                      style="width: 250px" @keydown.enter="confirmKeyword" @clear="confirmKeyword"/>
-            <el-select v-model="qtpye" clearable style="width: 220px">
-                <el-option v-for="t in qTypes" :value="t.dictValue" :label="t.dictLabel"></el-option>
-            </el-select>
-            <el-popover width="250">
-                <span v-if="currentSubject" class="text-sm font-bold">科目:{{currentSubject.subjectName}}</span>
-                <div v-for="g in groupedQuestions" class="flex flex-col">
-                    <el-divider style="margin: 10px 0"/>
-                    <span>{{g.qtpye}}:{{g.questions.length}}道</span>
-                    <el-link type="danger" plain icon="delete" class="self-end" @click="removeQuestionGroup(g.qtpye)">清除</el-link>
-                </div>
+    <div v-if="knowledgeNode" class="text-xs mb-2">当前查询知识点:<strong>{{ knowledgeNode.name }}</strong></div>
+    <div class="flex flex-row items-center gap-3">
+        <el-input v-model="keywordLocal" clearable prefix-icon="search" placeholder="输入题目关键字-回车触发搜索"
+                  style="width: 250px" @keydown.enter="confirmKeyword" @clear="confirmKeyword"/>
+        <el-select v-model="qtpye" clearable style="width: 220px">
+            <el-option v-for="t in qTypes" :value="t.dictValue" :label="t.dictLabel"></el-option>
+        </el-select>
+        <el-popover width="250">
+            <span v-if="currentSubject" class="text-sm font-bold">科目:{{ currentSubject.subjectName }}</span>
+            <div v-for="g in groupedQuestions" class="flex flex-col">
                 <el-divider style="margin: 10px 0"/>
-                <div class="flex items-center justify-between">
-                    <el-link type="danger" plain icon="delete" @click="clearCart">全部清除</el-link>
-                    <el-button type="primary">生成试卷</el-button>
-                </div>
-                <template #reference>
-                    <el-button type="primary" icon="shopping-cart" class="ml-auto">试题篮({{ cart.length }})</el-button>
-                </template>
-            </el-popover>
-        </div>
-        <el-divider/>
-        <el-empty v-if="total==0"/>
-        <template v-else v-for="q in questionList">
-            <question-content :question="q" @parse="showParseQuestion=q,showParse=true">
-                <el-button v-if="!hasQuestion(q)" type="primary" icon="plus" class="ml-auto" @click="addQuestion(q)">加入试题篮</el-button>
-                <el-button v-else type="danger" plain icon="delete" class="ml-auto" @click="removeQuestion(q)">移出试题篮</el-button>
-            </question-content>
-            <el-divider/>
-        </template>
-        <pagination v-show="total>0" :total="total" v-model:page="pageNum" v-model:limit="pageSize"
-                    @pagination="getQuestionList"/>
-
-        <el-dialog v-model="showParse" append-to-body show-close @close="showParse=false">
-            <template #title>ID:{{ showParseQuestion.id }} 试题解析</template>
-            <div v-if="showParseQuestion.answer0" v-html="`【正确答案】` + showParseQuestion.answer0"/>
-            <div v-if="showParseQuestion.parse" v-html="`【解析】` + showParseQuestion.parse" class="mt-5"></div>
-            <div v-if="showParseQuestion.parse0" v-html="`【解析】` + showParseQuestion.parse0" class="mt-5"></div>
-            <template #footer>
-                <el-button type="primary" @click="showParse=false">确 定</el-button>
+                <span>{{ g.qtpye }}:{{ g.questions.length }}道</span>
+                <el-link type="danger" plain icon="delete" class="self-end" @click="removeQuestionGroup(g.qtpye)">清除
+                </el-link>
+            </div>
+            <el-divider style="margin: 10px 0"/>
+            <div class="flex items-center justify-between">
+                <el-link type="danger" plain icon="delete" @click="clearCart">全部清除</el-link>
+                <el-button type="primary">生成试卷</el-button>
+            </div>
+            <template #reference>
+                <el-button type="primary" size="large" icon="shopping-cart" class="ml-auto">试题篮({{
+                        cart.length
+                    }})
+                </el-button>
             </template>
-        </el-dialog>
+        </el-popover>
     </div>
+    <el-divider/>
+    <el-empty v-if="total==0"/>
+    <template v-else v-for="q in questionList">
+        <question-content :question="q" @parse="showParseQuestion=q,showParse=true">
+            <el-button v-if="!hasQuestion(q)" type="primary" icon="plus" class="ml-auto" @click="addQuestion(q)">
+                加入试题篮
+            </el-button>
+            <el-button v-else type="danger" plain icon="delete" class="ml-auto" @click="removeQuestion(q)">移出试题篮
+            </el-button>
+        </question-content>
+        <el-divider/>
+    </template>
+    <pagination v-show="total>0" :total="total" v-model:page="pageNum" v-model:limit="pageSize"
+                @pagination="getQuestionList"/>
+
+    <el-dialog v-model="showParse" append-to-body show-close @close="showParse=false">
+        <template #title>ID:{{ showParseQuestion.id }} 试题解析</template>
+        <div v-if="showParseQuestion.answer0" v-html="`【正确答案】` + showParseQuestion.answer0"/>
+        <div v-if="showParseQuestion.parse" v-html="`【解析】` + showParseQuestion.parse" class="mt-5"></div>
+        <div v-if="showParseQuestion.parse0" v-html="`【解析】` + showParseQuestion.parse0" class="mt-5"></div>
+        <template #footer>
+            <el-button type="primary" @click="showParse=false">确 定</el-button>
+        </template>
+    </el-dialog>
 </template>
 
 <script setup name="PaperQuestionHand">
@@ -55,10 +60,10 @@ import {useInjectPaperExactCondition} from "@/views/dz/papers/hooks/usePaperExac
 import {useInjectPaperFullCondition} from "@/views/dz/papers/hooks/usePaperFullCondition.js";
 import QuestionContent from "@/views/components/question-content.vue";
 
-const props = defineProps(({
-    exactMode: Boolean,
-    allowMultiple: Boolean
-}))
+const props = defineProps({
+    allowMultiple: Boolean,
+    exactMode: Boolean
+})
 
 const showParse = ref(false)
 const showParseQuestion = ref(null)

+ 1 - 1
back-ui/src/views/dz/papers/hooks/usePaperExactCondition.js

@@ -89,7 +89,7 @@ export const useProvidePaperExactCondition = function () {
     watch([majorPlanId, subjectId], async ([majorPlanId, subjectId]) => {
         // clean
         knowledges.value = []
-        knowledgeId.value = '' // 单选的情况
+        knowledgeNode.value = null // 单选的情况
         knowledgeCheckNodes.value = [] // 多选的情况
 
         if (!subjectId || !majorPlanId) return

+ 2 - 2
back-ui/src/views/dz/papers/hooks/usePaperQuestionCondition.js

@@ -78,8 +78,8 @@ export const useProvidePaperQuestionCondition = function (exactMode, allowMultip
         pageSize: pageSize.value,
         title: keyword.value,
         qtpye: qtpye.value,
-        // knowledgeId: knowledgeId.value,
-        // knowledges: knowledgeIds.value.toString()
+        knowledgeId: knowledgeId.value,
+        knowledges: knowledgeIds.value.toString()
     }))
     const getQuestionList = async function () {
         loading.value = true