Эх сурвалжийг харах

feat: test-问题卷和数据检查

zhangjie 11 цаг өмнө
parent
commit
915f478650

+ 1 - 1
.gitignore

@@ -3,7 +3,7 @@ node_modules
 dist
 dist-ssr
 *.local
-components.d.ts
+# components.d.ts
 typecheck-errors.txt
 
 # Log files

+ 0 - 1
components.d.ts

@@ -53,7 +53,6 @@ declare module '@vue/runtime-core' {
     ElTabPane: typeof import('element-plus/es')['ElTabPane']
     ElTabs: typeof import('element-plus/es')['ElTabs']
     ElTag: typeof import('element-plus/es')['ElTag']
-    ElTextarea: typeof import('element-plus/es')['ElTextarea']
     ElTooltip: typeof import('element-plus/es')['ElTooltip']
     ElUpload: typeof import('element-plus/es')['ElUpload']
     FileUpload: typeof import('./src/components/file-upload/index.vue')['default']

+ 1 - 1
src/api/mark.ts

@@ -230,7 +230,7 @@ export function markerImportTemplate(): Promise<AxiosResponse<Blob>> {
 export function getMarkGroupList(
   params: MarkGroupListPageParam
 ): Promise<MarkGroupListPageRes> {
-  return axios.post('/api/admin/exam/group/list', params);
+  return axios.post('/api/admin/exam/group/query', params);
 }
 
 // 获取分组信息

+ 5 - 5
src/api/types/analysis.ts

@@ -48,13 +48,13 @@ export interface ScoreSegmentItem {
   // 频率(%)
   rangeRate: number;
 }
-export type ScoreSegmentListRes = PageResult<ScoreSegmentItem>;
+export type ScoreSegmentListRes = ScoreSegmentItem[];
 
 export interface ScoreSegmentFilter {
   // 科目
   subjectCode: string;
   // 分数间隔类型
-  range: string;
+  range: number;
   // 客观题
   objective: boolean;
 }
@@ -204,7 +204,7 @@ export interface QuestionAnalysisItem {
   // 小题号
   subNumber: number;
   // 单题分数
-  score: number;
+  totalScore: number;
   // 单题平均分
   avgScore: number;
   // 单题标准差
@@ -231,9 +231,9 @@ export type QuestionAnalysisListParam = PageParams<QuestionAnalysisFilter>;
 // 大题分析项目
 export interface BigQuestionAnalysisItem {
   // 大题名称
-  mainTitle: string;
+  groupName: string;
   // 大题号
-  mainNumber: number;
+  groupNumber: number;
   // 满分
   totalScore: number;
   // 最高分

+ 1 - 1
src/api/types/check.ts

@@ -6,7 +6,7 @@ export interface ResultCheckDataListFilter {
   // 是否缺考
   absent: boolean | undefined;
   // 准考证号
-  examNumber: string;
+  examNumbers: string;
   // 科目
   subjectCodeInput: string;
   // 科目范围模式

+ 1 - 1
src/api/types/mark.ts

@@ -279,7 +279,7 @@ export interface MarkGroupItem {
   id: number;
   subjectCode: string;
   // 分组序号
-  groupNumber: number;
+  number: number;
   // 大题号
   mainNumber: string;
   // 大题名称

+ 1 - 0
src/components/select-data/index.vue

@@ -86,6 +86,7 @@
     },
     {
       deep: true,
+      immediate: true,
     }
   );
 

+ 2 - 2
src/components/select-data/search.ts

@@ -39,8 +39,8 @@ const selectConfig: Record<string, SelectConfigValue> = {
     url: '/api/admin/exam/group/list',
     transform: (data: MarkGroupItem[]) => {
       return data.map((item) => ({
-        value: item.groupNumber,
-        label: `${item.groupNumber}-${item.mainNumber}`,
+        value: item.number,
+        label: `${item.number}-${item.title}`,
       }));
     },
   },

+ 1 - 0
src/components/select-option/index.vue

@@ -86,6 +86,7 @@
     },
     {
       deep: true,
+      immediate: true,
     }
   );
 

+ 2 - 2
src/views/analysis/BigQuestionAnalysis.vue

@@ -27,8 +27,8 @@
       stripe
     >
       <el-table-column type="index" label="序号" width="60" />
-      <el-table-column prop="mainTitle" label="大题名称" min-width="150" />
-      <el-table-column prop="mainNumber" label="大题号" min-width="80" />
+      <el-table-column prop="groupName" label="大题名称" min-width="300" />
+      <el-table-column prop="groupNumber" label="大题号" min-width="80" />
       <el-table-column prop="totalScore" label="满分" min-width="80" />
       <el-table-column prop="maxScore" label="最高分" min-width="100" />
       <el-table-column prop="minScore" label="最低分" min-width="100" />

+ 2 - 2
src/views/analysis/ObjectiveQuestionAnalysis.vue

@@ -39,10 +39,10 @@
       stripe
     >
       <el-table-column type="index" label="序号" width="60" />
-      <el-table-column prop="questionName" label="题目名称" min-width="150" />
+      <el-table-column prop="questionName" label="题目名称" min-width="300" />
       <el-table-column prop="mainNumber" label="大题号" min-width="80" />
       <el-table-column prop="subNumber" label="小题号" min-width="80" />
-      <el-table-column prop="score" label="单题分数" min-width="100" />
+      <el-table-column prop="totalScore" label="单题分数" min-width="100" />
       <el-table-column prop="avgScore" label="单题平均分" min-width="120">
         <template #default="scope">
           {{ scope.row.avgScore?.toFixed(2) }}

+ 24 - 17
src/views/analysis/SegmentAnalysis.vue

@@ -15,8 +15,8 @@
           placeholder="请选择"
           style="width: 150px"
         >
-          <el-option label="5分间隔" value="5" />
-          <el-option label="10分间隔" value="10" />
+          <el-option label="5分间隔" :value="5" />
+          <el-option label="10分间隔" :value="10" />
         </el-select>
       </el-form-item>
       <el-form-item>
@@ -46,7 +46,7 @@
       <el-table-column prop="range" label="分数段" min-width="120">
         <template #default="scope">
           {{ scope.row.score }} &lt;=X&lt;
-          {{ scope.row.scope + scope.row.range }}
+          {{ scope.row.score + searchRange }}
         </template>
       </el-table-column>
       <el-table-column prop="rangeCount" label="人数" min-width="100" />
@@ -56,14 +56,6 @@
         </template>
       </el-table-column>
     </el-table>
-    <el-pagination
-      v-model:current-page="pagination.pageNumber"
-      v-model:page-size="pagination.pageSize"
-      :layout="pagination.layout"
-      :total="pagination.total"
-      @size-change="pageSizeChange"
-      @current-change="toPage"
-    />
   </div>
 
   <ChartModal
@@ -77,10 +69,10 @@
   import { reactive, ref } from 'vue';
   import { getSegmentAnalysisList } from '@/api/analysis';
   import { ScoreSegmentItem, ScoreSegmentFilter } from '@/api/types/analysis';
-  import useTable from '@/hooks/table';
   import { downloadExport } from '@/utils/download-export';
   import ChartModal from '@/components/chart/ChartModal.vue';
   import type { EChartsOption } from 'echarts';
+  import useLoading from '@/hooks/loading';
 
   defineOptions({
     name: 'SegmentAnalysis',
@@ -88,15 +80,30 @@
 
   const searchModel = reactive<ScoreSegmentFilter>({
     subjectCode: null,
-    range: '10',
+    range: 10,
     objective: false,
   });
 
-  const { dataList, pagination, loading, toPage, pageSizeChange } =
-    useTable<ScoreSegmentItem>(getSegmentAnalysisList, searchModel, false);
+  const searchRange = ref<number>(10);
+
+  const dataList = ref<ScoreSegmentItem[]>([]);
+  const { loading, setLoading } = useLoading();
+  async function getList() {
+    if (loading.value) return;
+
+    setLoading(true);
+    try {
+      dataList.value = await getSegmentAnalysisList(searchModel);
+      searchRange.value = searchModel.range;
+    } catch (error) {
+      console.error(error);
+    } finally {
+      setLoading(false);
+    }
+  }
 
   async function search() {
-    await toPage(1);
+    await getList();
     updateChartOption();
   }
 
@@ -119,7 +126,7 @@
       xAxis: {
         type: 'category',
         data: dataList.value.map(
-          (item) => `${item.score} <=X< ${item.scope + item.range}`
+          (item) => `${item.score} <=X< ${item.score + searchRange.value}`
         ),
       },
       yAxis: [

+ 2 - 2
src/views/analysis/SubjectiveQuestionAnalysis.vue

@@ -27,10 +27,10 @@
       stripe
     >
       <el-table-column type="index" label="序号" width="60" />
-      <el-table-column prop="questionName" label="题目名称" min-width="150" />
+      <el-table-column prop="questionName" label="题目名称" min-width="300" />
       <el-table-column prop="mainNumber" label="大题号" min-width="80" />
       <el-table-column prop="subNumber" label="小题号" min-width="80" />
-      <el-table-column prop="score" label="单题分数" min-width="100" />
+      <el-table-column prop="totalScore" label="单题分数" min-width="100" />
       <el-table-column prop="avgScore" label="单题平均分" min-width="120">
         <template #default="scope">
           {{ scope.row.avgScore?.toFixed(2) }}

+ 5 - 1
src/views/analysis/TotalAnalysis.vue

@@ -27,7 +27,11 @@
       stripe
     >
       <el-table-column type="index" label="序号" width="60" />
-      <el-table-column prop="subjectName" label="科目名称" min-width="120" />
+      <el-table-column prop="subjectCode" label="科目" min-width="240">
+        <template #default="{ row }">
+          {{ row.subjectCode }}-{{ row.subjectName }}
+        </template>
+      </el-table-column>
       <el-table-column prop="totalCount" label="报考人数" min-width="100" />
       <el-table-column prop="absentCount" label="缺考人数" min-width="100" />
       <el-table-column prop="breachCount" label="违纪人数" min-width="100" />

+ 25 - 9
src/views/check/ImageCheck.vue

@@ -6,7 +6,7 @@
           v-model.trim="searchModel.name"
           placeholder="请输入"
           clearable
-          style="width: 120px"
+          style="width: 200px"
         />
       </el-form-item>
       <el-form-item label="准考证号">
@@ -14,7 +14,7 @@
           v-model.trim="searchModel.examNumber"
           placeholder="请输入"
           clearable
-          style="width: 120px"
+          style="width: 200px"
         />
       </el-form-item>
       <el-form-item label="学号">
@@ -22,7 +22,7 @@
           v-model.trim="searchModel.studentCode"
           placeholder="请输入"
           clearable
-          style="width: 120px"
+          style="width: 200px"
         />
       </el-form-item>
       <el-form-item label="科目">
@@ -34,7 +34,9 @@
       <el-space wrap>
         <el-button type="primary" @click="toPage(1)">异常查询</el-button>
         <el-button @click="onExport">导出</el-button>
-        <el-button @click="startCheck">开始检查</el-button>
+        <el-button :disabled="running" @click="startCheck">
+          {{ running ? '正在检查' : '开始检查' }}
+        </el-button>
       </el-space>
     </div>
   </div>
@@ -50,7 +52,11 @@
       <el-table-column prop="examNumber" label="准考证号" width="120" />
       <el-table-column prop="name" label="姓名" min-width="100" />
       <el-table-column prop="studentCode" label="学号" width="120" />
-      <el-table-column prop="subjectCode" label="科目" min-width="100" />
+      <el-table-column prop="subjectCode" label="科目" min-width="240">
+        <template #default="{ row }">
+          {{ row.subjectCode }}-{{ row.subjectName }}
+        </template>
+      </el-table-column>
       <el-table-column prop="batchCode" label="扫描批次" width="120" />
       <el-table-column prop="uploadTime" label="上传时间" width="160" />
     </el-table>
@@ -66,7 +72,7 @@
 </template>
 
 <script setup lang="ts">
-  import { reactive } from 'vue';
+  import { reactive, ref, onMounted } from 'vue';
   import {
     getImageCheckDataList,
     startImageCheck,
@@ -84,6 +90,7 @@
     name: 'ImageCheck',
   });
 
+  const running = ref(false);
   const searchModel = reactive<ImageCheckDataListFilter>({
     name: '',
     examNumber: '',
@@ -98,12 +105,17 @@
     await downloadExport('exportImageCheckData', searchModel);
   }
 
+  async function checkStatus() {
+    const res = await getImageCheckStatus();
+    running.value = res.running;
+  }
+
   async function startCheck() {
-    const checkStatus = await getImageCheckStatus();
-    if (checkStatus) {
-      ElMessage.error('检查已启动');
+    if (running.value) {
+      ElMessage.error('检查正在进行中');
       return;
     }
+
     const res = await startImageCheck();
     if (res.success) {
       ElMessage.success('检查已启动');
@@ -111,4 +123,8 @@
       ElMessage.error(res.message);
     }
   }
+
+  onMounted(async () => {
+    await checkStatus();
+  });
 </script>

+ 7 - 3
src/views/check/ManualConfirm.vue

@@ -21,7 +21,7 @@
     <div class="part-action">
       <el-space wrap>
         <el-button type="primary" @click="toPage(1)">查询</el-button>
-        <el-button @click="startCheck">开始检查</el-button>
+        <el-button @click="startCheck">开始处理</el-button>
       </el-space>
     </div>
   </div>
@@ -37,10 +37,14 @@
       <el-table-column prop="examNumber" label="准考证号" width="120" />
       <el-table-column prop="name" label="姓名" min-width="100" />
       <el-table-column prop="studentCode" label="学号" width="120" />
-      <el-table-column prop="subjectName" label="科目" min-width="100" />
+      <el-table-column prop="subjectCode" label="科目" min-width="240">
+        <template #default="{ row }">
+          {{ row.subjectCode }}-{{ row.subjectName }}
+        </template>
+      </el-table-column>
       <el-table-column prop="examSite" label="考点" width="120" />
       <el-table-column prop="batchCode" label="扫描批次" width="120" />
-      <el-table-column prop="uploadTime" label="上传时间" width="160" />
+      <el-table-column prop="uploadTime" label="上传时间" width="180" />
     </el-table>
     <el-pagination
       v-model:current-page="pagination.pageNumber"

+ 6 - 6
src/views/check/ResultCheck.vue

@@ -1,6 +1,6 @@
 <template>
   <div class="part-box is-filter">
-    <el-form label-width="200px">
+    <el-form label-width="180px">
       <el-form-item label="是否缺考">
         <el-select
           v-model="searchModel.absent"
@@ -14,8 +14,8 @@
       </el-form-item>
       <el-form-item label="准考证号">
         <el-input
-          v-model.trim="searchModel.examNumber"
-          placeholder="多个准考证号用英文逗号分隔"
+          v-model.trim="searchModel.examNumbers"
+          placeholder="多个准考证号用英文逗号或者换行符分隔"
           :rows="4"
           type="textarea"
           style="width: 400px"
@@ -38,7 +38,7 @@
       <el-form-item label="">
         <el-input
           v-model.trim="searchModel.subjectCodeInput"
-          placeholder="多个科目代码用英文逗号分隔"
+          placeholder="多个科目代码用英文逗号或者换行符分隔"
           :rows="4"
           type="textarea"
           style="width: 400px"
@@ -61,7 +61,7 @@
       <el-form-item label="">
         <el-input
           v-model.trim="searchModel.examSiteInput"
-          placeholder="多个考点用英文逗号分隔"
+          placeholder="多个考点用英文逗号或者换行符分隔"
           type="textarea"
           :rows="4"
           style="width: 400px"
@@ -160,7 +160,7 @@
 
   const searchModel = reactive<ResultCheckDataListFilter>({
     absent: undefined,
-    examNumber: '',
+    examNumbers: '',
     subjectCodeInput: '',
     subjectCodeFunction: 'BELONG',
     examSiteInput: '',

+ 26 - 20
src/views/issue-paper/IssuePaper.vue

@@ -5,19 +5,23 @@
         <select-subject v-model="searchModel.subjectCode"></select-subject>
       </el-form-item>
       <el-form-item label="分组">
-        <el-select
+        <select-data
           v-model="searchModel.groupNumber"
-          placeholder="请选择"
-          clearable
-          style="width: 120px"
-        >
-          <el-option label="请选择" value="" />
-          <!-- TODO: 添加分组选项 -->
-        </el-select>
+          type="group"
+          :params="{
+            subjectCode: searchModel.subjectCode,
+          }"
+          param-required
+        />
       </el-form-item>
       <el-form-item label="问题">
-        <Select-data v-model="searchModel.problemId" type="problemType">
-        </Select-data>
+        <select-data
+          v-model="searchModel.problemId"
+          type="problemType"
+          :params="{ examId: appStore.examId }"
+          param-required
+        >
+        </select-data>
       </el-form-item>
       <el-form-item label="状态">
         <el-select
@@ -66,7 +70,11 @@
       @selection-change="handleSelectionChange"
     >
       <el-table-column type="selection" width="55" />
-      <el-table-column prop="subjectName" label="科目" min-width="120" />
+      <el-table-column prop="subjectCode" label="科目" min-width="240">
+        <template #default="{ row }">
+          {{ row.subjectCode }}-{{ row.subjectName }}
+        </template>
+      </el-table-column>
       <el-table-column prop="groupNumber" label="分组序号" min-width="100" />
       <el-table-column prop="status" label="状态" min-width="100">
         <template #default="scope">
@@ -79,14 +87,10 @@
       <el-table-column prop="secretNumber" label="密号" min-width="100" />
       <el-table-column prop="name" label="姓名" min-width="100" />
       <el-table-column prop="markLogin" label="评卷员" min-width="100" />
-      <el-table-column prop="markTime" label="提交时间" min-width="150" />
+      <el-table-column prop="markTime" label="提交时间" width="180" />
       <el-table-column prop="problemType" label="问题类型" min-width="120" />
       <el-table-column prop="problemUserName" label="处理人" min-width="100" />
-      <el-table-column
-        prop="problemRestTime"
-        label="处理时间"
-        min-width="150"
-      />
+      <el-table-column prop="problemRestTime" label="处理时间" width="180" />
       <el-table-column label="操作" width="120" fixed="right">
         <template #default="scope">
           <el-button type="primary" link @click="viewDetail(scope.row)">
@@ -111,7 +115,7 @@
 
 <script setup lang="ts">
   import { reactive, ref } from 'vue';
-  import { ElTable, ElMessage } from 'element-plus';
+  import { ElMessage } from 'element-plus';
   import { getIssuePaperList, resetIssuePaper } from '@/api/issue-paper';
   import {
     IssuePaperItem,
@@ -122,12 +126,14 @@
   import { ISSUE_PAPER_STATUS } from '@/constants/enumerate';
   import { dictFilter } from '@/utils/filter';
   import { downloadExport } from '@/utils/download-export';
+  import { useAppStore } from '@/store';
 
   defineOptions({
     name: 'IssuePaperQuery',
   });
+  const appStore = useAppStore();
 
-  const tableRef = ref<InstanceType<typeof ElTable>>();
+  const tableRef = ref();
 
   const searchModel = reactive<IssuePaperListFilter>({
     subjectCode: null,
@@ -145,7 +151,7 @@
     toPage,
     pageSizeChange,
     handleSelectionChange,
-  } = useTable<IssuePaperItem>(getIssuePaperList, searchModel, false);
+  } = useTable<IssuePaperItem>(getIssuePaperList, searchModel, true);
 
   async function batchReset() {
     if (selectedRows.value.length === 0) {

+ 1 - 1
src/views/mark/GroupManage.vue

@@ -34,7 +34,7 @@
       @selection-change="handleSelectionChange"
     >
       <el-table-column type="selection" width="55" />
-      <el-table-column prop="groupNumber" label="分组序号" width="100" />
+      <el-table-column prop="number" label="分组序号" width="100" />
       <el-table-column prop="mainNumber" label="大题号" width="100" />
       <el-table-column
         prop="title"

+ 5 - 1
src/views/mark/MarkProgress.vue

@@ -56,7 +56,11 @@
       @sort-change="handleSortChange"
     >
       <el-table-column type="selection" width="55" />
-      <el-table-column prop="subjectName" label="科目" min-width="200" />
+      <el-table-column prop="subjectCode" label="科目" min-width="240">
+        <template #default="{ row }">
+          {{ row.subjectCode }}-{{ row.subjectName }}
+        </template>
+      </el-table-column>
       <el-table-column label="选做异常" sortable min-width="110">
         <template #default="scope">
           <el-tag :type="scope.row.selectiveError ? 'danger' : 'success'">

+ 5 - 1
src/views/mark/MarkerManage.vue

@@ -60,7 +60,11 @@
       <el-table-column type="selection" width="55" />
       <el-table-column prop="loginName" label="登录名" width="120" sortable />
       <el-table-column prop="name" label="姓名" width="100" />
-      <el-table-column prop="subjectCode" label="科目" width="120" />
+      <el-table-column prop="subjectCode" label="科目" min-width="240">
+        <template #default="{ row }">
+          {{ row.subjectCode }}-{{ row.subjectName }}
+        </template>
+      </el-table-column>
       <el-table-column prop="groupNumber" label="分组" width="100" sortable />
       <el-table-column prop="statusText" label="状态" width="100">
       </el-table-column>

+ 5 - 6
src/views/mark/quality-monitor/QualityMonitorGroup.vue

@@ -22,12 +22,11 @@
       stripe
       @sort-change="handleSortChange"
     >
-      <el-table-column
-        prop="subjectCode"
-        label="科目"
-        min-width="240"
-        sortable
-      />
+      <el-table-column prop="subjectCode" label="科目" min-width="240" sortable>
+        <template #default="{ row }">
+          {{ row.subjectCode }}-{{ row.subjectName }}
+        </template>
+      </el-table-column>
       <el-table-column
         v-if="searchModel.group"
         prop="groupNumber"

+ 5 - 1
src/views/reject/RejectManage.vue

@@ -57,7 +57,11 @@
       stripe
     >
       <el-table-column type="index" label="序号" width="60" />
-      <el-table-column prop="subjectName" label="科目" min-width="100" />
+      <el-table-column prop="subjectCode" label="科目" min-width="240">
+        <template #default="{ row }">
+          {{ row.subjectCode }}-{{ row.subjectName }}
+        </template>
+      </el-table-column>
       <el-table-column prop="groupNumber" label="分组序号" width="100" />
       <el-table-column prop="examNumber" label="准考证号" width="120" />
       <el-table-column prop="secretNumber" label="密号" width="100" />

+ 5 - 1
src/views/reject/reject-stat/RejectRecord.vue

@@ -58,7 +58,11 @@
       stripe
     >
       <el-table-column type="index" label="序号" width="60" />
-      <el-table-column prop="subjectName" label="科目" min-width="100" />
+      <el-table-column prop="subjectCode" label="科目" min-width="240">
+        <template #default="{ row }">
+          {{ row.subjectCode }}-{{ row.subjectName }}
+        </template>
+      </el-table-column>
       <el-table-column prop="groupNumber" label="分组序号" width="100" />
       <el-table-column prop="examNumber" label="准考证号" width="120" />
       <el-table-column prop="secretNumber" label="密号" width="100" />

+ 5 - 6
src/views/reject/reject-stat/RejectStatistics.vue

@@ -24,12 +24,11 @@
       stripe
       @sort-change="handleSortChange"
     >
-      <el-table-column
-        prop="subjectText"
-        label="科目"
-        min-width="200"
-        sortable
-      />
+      <el-table-column prop="subjectCode" label="科目" min-width="240" sortable>
+        <template #default="{ row }">
+          {{ row.subjectCode }}-{{ row.subjectName }}
+        </template>
+      </el-table-column>
       <el-table-column
         v-if="searchModel.showGroupNumber"
         prop="groupNumber"

+ 5 - 6
src/views/review/AllReview.vue

@@ -207,12 +207,11 @@
       @sort-change="handleSortChange"
     >
       <el-table-column type="selection" width="55" />
-      <el-table-column
-        prop="subjectName"
-        label="科目"
-        min-width="200"
-        sortable
-      />
+      <el-table-column prop="subjectCode" label="科目" min-width="240" sortable>
+        <template #default="{ row }">
+          {{ row.subjectCode }}-{{ row.subjectName }}
+        </template>
+      </el-table-column>
       <el-table-column prop="marked" label="标记卷" width="100">
         <template #default="scope">
           <el-tag :type="scope.row.marked ? 'success' : 'info'">

+ 5 - 1
src/views/review/ScoreCheck.vue

@@ -23,7 +23,11 @@
     >
       <el-table-column type="selection" width="55" />
       <el-table-column prop="studentCode" label="考生编号" width="150" />
-      <el-table-column prop="subjectName" label="科目" width="200" />
+      <el-table-column prop="subjectCode" label="科目" min-width="240">
+        <template #default="{ row }">
+          {{ row.subjectCode }}-{{ row.subjectName }}
+        </template>
+      </el-table-column>
       <el-table-column prop="fullScore" label="满分" width="100" />
       <el-table-column label="状态" width="120">
         <template #default="scope">

+ 5 - 1
src/views/review/ScoreReviewStatistics.vue

@@ -68,7 +68,11 @@
       stripe
       @sort-change="handleSortChange"
     >
-      <el-table-column prop="subjectName" label="科目" min-width="200" />
+      <el-table-column prop="subjectCode" label="科目" min-width="240">
+        <template #default="{ row }">
+          {{ row.subjectCode }}-{{ row.subjectName }}
+        </template>
+      </el-table-column>
       <el-table-column label="选做科目" min-width="110" sortable>
         <template #default="scope">
           <el-tag :type="scope.row.selectiveText ? 'success' : 'info'">

+ 7 - 3
src/views/score/ScoreQuery.vue

@@ -172,10 +172,14 @@
       />
       <el-table-column
         v-if="checkFieldVisible('subjectText')"
-        prop="subjectText"
+        prop="subjectCode"
         label="科目"
-        min-width="200"
-      />
+        min-width="240"
+      >
+        <template #default="{ row }">
+          {{ row.subjectCode }}-{{ row.subjectName }}
+        </template>
+      </el-table-column>
       <el-table-column
         v-if="checkFieldVisible('subjectLevel')"
         prop="subjectLevel"

+ 1 - 1
src/views/student/StudentManage.vue

@@ -221,7 +221,7 @@
       />
       <el-table-column
         v-if="checkFieldVisible('subjectText')"
-        prop="subjectText"
+        prop="subjectCode"
         label="科目"
         min-width="240"
         sortable