jinxia.mo 1 月之前
父節點
當前提交
06db2cc0ad
共有 1 個文件被更改,包括 74 次插入9 次删除
  1. 74 9
      back-ui/src/views/learn/questions/index.vue

+ 74 - 9
back-ui/src/views/learn/questions/index.vue

@@ -16,15 +16,22 @@
                     <el-option v-for="q in question_type" :label="q.label" :value="q.value"/>
                 </el-select>
             </el-form-item>
+            <el-form-item label="包含子题" prop="isSubType">
+                <el-select v-model="queryParams.isSubType" placeholder="请选择包含子题" clearable style="width: 172px">
+                    <el-option v-for="item in bool_values" :key="item.value" :label="item.label" :value="item.value" />
+                </el-select>
+            </el-form-item>
             <el-form-item label="科目" prop="subjectId">
-                <el-select v-model="queryParams.subjectId" clearable @change="handleSubjectChange" style="width: 172px">
-                    <el-option v-for="s in subjectList" :label="s.subjectName" :value="s.subjectId"/>
+                <el-select v-model="queryParams.subjectId" clearable filterable @change="handleSubjectChange" style="width: 172px" placeholder="请选择科目">
+                    <el-option v-for="s in subjectList" :label="getSubjectDisplayLabel(s)" :value="s.subjectId"/>
                 </el-select>
             </el-form-item>
             <el-form-item label="知识点" prop="knowledgeId">
                 <el-tree-select node-key="id" v-model="queryParams.knowledgeId" :data="filteredKnowledgeTreeList" check-strictly
                                 :render-after-expand="false" style="" :props="{ label: 'name', children: 'children' }"
-                                placeholder="请选择知识点" class="w-[172px]!" @change="handleQuery"/>
+                                placeholder="请选择知识点" class="w-[172px]!" @change="handleQuery"
+                                clearable
+                                filterable/>
             </el-form-item>
             <!-- <el-form-item label="难度" prop="diff">
                 <el-input v-model="queryParams.diff" placeholder="请输入难度" clearable @keyup.enter="handleQuery"/>
@@ -47,11 +54,7 @@
                 <el-input v-model="queryParams.fromSite" placeholder="请输入试题来源" clearable
                           @keyup.enter="handleQuery"/>
             </el-form-item> -->
-            <el-form-item label="包含子题" prop="isSubType">
-                <el-select v-model="queryParams.isSubType" placeholder="请选择包含子题" clearable style="width: 172px">
-                    <el-option v-for="item in bool_values" :key="item.value" :label="item.label" :value="item.value" />
-                </el-select>
-            </el-form-item>
+            
             <el-form-item>
                 <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
                 <el-button icon="Refresh" @click="resetQuery">重置</el-button>
@@ -98,7 +101,10 @@
             <el-table-column label="题型" align="center" prop="qtpye"/>
             <el-table-column label="学科" align="center" prop="subjectId">
                 <template #default="scope">
-                    <span v-if="scope.row.subjectId">
+                    <span v-if="scope.row.knowledgeTrees && scope.row.knowledgeTrees.length > 0">
+                        {{ getSubjectIdsFromKnowledgeTrees(scope.row.knowledgeTrees) }}
+                    </span>
+                    <span v-else-if="scope.row.subjectId">
                         {{ scope.row.subjectId }}-{{ getSubjectName(scope.row.subjectId) }}
                     </span>
                     <span v-else>-</span>
@@ -620,6 +626,7 @@ const {proxy} = getCurrentInstance()
 const {question_type} = proxy.useDict('question_type')
 const {paper_type} = proxy.useDict('paper_type')
 const {bool_values} = proxy.useDict('bool_values')
+const {exam_type} = proxy.useDict('exam_type')
 const questionsList = ref([])
 const open = ref(false)
 const loading = ref(true)
@@ -862,6 +869,64 @@ function getSubjectName(subjectId) {
     return subject ? subject.subjectName : '-'
 }
 
+/** 从knowledgeTrees中获取所有subjectId并格式化显示 */
+function getSubjectIdsFromKnowledgeTrees(knowledgeTrees) {
+    if (!knowledgeTrees || knowledgeTrees.length === 0) {
+        return '-'
+    }
+    
+    // 获取所有不同的subjectId
+    const subjectIds = [...new Set(knowledgeTrees
+        .map(kt => kt.subjectId)
+        .filter(id => id != null && id !== undefined)
+    )]
+    
+    if (subjectIds.length === 0) {
+        return '-'
+    }
+    
+    // 格式化显示:subjectId-科目名称
+    const subjectDisplays = subjectIds.map(subjectId => {
+        return `${subjectId}-${getSubjectName(subjectId)}`
+    })
+    
+    return subjectDisplays.join(', ')
+}
+
+/** 获取科目显示标签(包含subjectName、locations、examTypes) */
+function getSubjectDisplayLabel(subject) {
+    if (!subject) return ''
+    
+    const parts = []
+    
+    // 添加科目名称
+    if (subject.subjectName) {
+        parts.push(subject.subjectName)
+    }
+    if (subject.subjectId) {
+        parts.push(subject.subjectId)
+    }
+    
+    // 添加适合省份
+    if (subject.locations) {
+        parts.push(subject.locations)
+    }
+    
+    // 添加适合类别(通过字典转换,支持多个值用逗号分隔)
+    if (subject.examTypes) {
+        const examTypeValues = subject.examTypes.split(',').map(v => v.trim()).filter(v => v)
+        const examTypeLabels = examTypeValues.map(value => {
+            const dictItem = exam_type.value?.find(item => item.value === value)
+            return dictItem ? dictItem.label : value
+        })
+        if (examTypeLabels.length > 0) {
+            parts.push(examTypeLabels.join(','))
+        }
+    }
+    
+    return parts.join('-')
+}
+
 // 取消按钮
 function cancel() {
     open.value = false