Pārlūkot izejas kodu

feat: api-成绩查询

zhangjie 1 nedēļu atpakaļ
vecāks
revīzija
ebf7cfa1eb

+ 20 - 18
src/api/types/score.ts

@@ -8,25 +8,27 @@ export interface ScoreItem {
   // 姓名
   name: string;
   // 学号
-  studentNo: string;
-  // 科目
-  subject: string;
+  studentCode: string;
+  // 科目代码
+  subjectCode: string;
+  // 科目名称
+  subjectName: string;
   // 层次
-  level: string;
+  subjectLevel: string;
   // 专业类型
-  majorType: string;
+  subjectCategory: string;
   // 客观总分
-  objectiveScore: number;
+  objectiveScoreString: string;
   // 主观总分
-  subjectiveScore: number;
+  subjectiveScoreString: string;
   // 全卷总分
-  totalScore: number;
+  totalScoreString: string;
   // 是否缺考
-  isAbsent: boolean;
+  absent: boolean;
   // 是否上传
-  isUpload: boolean;
+  upload: boolean;
   // 是否违纪
-  isDisciplinary: boolean;
+  breach: boolean;
   // 学院
   college: string;
   // 班级
@@ -46,17 +48,17 @@ export interface ScoreListFilter {
   // 准考证号
   examNumber: string;
   // 学号
-  studentNo: string;
-  // 科目
-  subject: string | null;
+  studentCode: string;
+  // 科目代码
+  subjectCode: string | null;
   // 筛选类型
-  filterType: string;
+  filter: string;
   // 是否缺考
-  isAbsent: boolean;
+  absent: boolean;
   // 是否上传
-  isUpload: boolean;
+  upload: boolean;
   // 是否违纪
-  isDisciplinary: boolean;
+  breach: boolean;
   // 总分
   startScore: number | undefined;
   endScore: number | undefined;

+ 3 - 6
src/views/mark/quality-monitor/QualityMonitor.vue

@@ -21,20 +21,17 @@
   .quality-monitor-container {
     display: flex;
     flex-direction: column;
-    height: calc(100vh - 56px);
+    height: calc(100vh - 136px);
     gap: 16px;
-    padding: 16px;
     overflow: hidden;
+    min-width: 800px;
   }
 
   .monitor-section {
     flex: 1;
     display: flex;
     flex-direction: column;
-    min-height: 0;
-    background: #fff;
-    border-radius: 8px;
-    box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
+    margin: 0;
   }
 
   .monitor-section :deep(.page-table) {

+ 18 - 15
src/views/mark/quality-monitor/QualityMonitorGroup.vue

@@ -4,17 +4,15 @@
       <el-form-item label="科目">
         <select-subject v-model="searchModel.subjectCode"></select-subject>
       </el-form-item>
-      <el-form-item label="分组">
+      <el-form-item>
         <el-checkbox v-model="searchModel.group"> 按分组统计 </el-checkbox>
       </el-form-item>
-    </el-form>
-    <el-divider class="form-divider" />
-    <div class="part-action">
-      <el-space wrap>
+      <el-form-item>
         <el-button type="primary" @click="toPage(1)">查询</el-button>
         <el-button @click="exportData">导出</el-button>
-      </el-space>
-    </div>
+      </el-form-item>
+    </el-form>
+    <el-divider class="form-divider" />
 
     <el-table
       class="page-table"
@@ -27,29 +25,34 @@
       <el-table-column
         prop="subjectCode"
         label="科目"
-        min-width="200"
+        min-width="240"
         sortable
       />
       <el-table-column
         v-if="searchModel.group"
         prop="groupNumber"
         label="分组"
-        width="80"
+        min-width="60"
       />
       <el-table-column
         prop="totalCount"
         label="任务总量"
-        width="120"
+        min-width="110"
+        sortable
+      />
+      <el-table-column
+        prop="finishCount"
+        label="已完成"
+        min-width="100"
         sortable
       />
-      <el-table-column prop="finishCount" label="已完成" width="100" sortable />
       <el-table-column
         prop="arbitrateCount"
         label="仲裁卷数"
-        width="120"
+        min-width="110"
         sortable
       />
-      <el-table-column label="仲裁率" width="100" sortable>
+      <el-table-column label="仲裁率" min-width="100" sortable>
         <template #default="scope">
           {{ (scope.row.arbitrateRatio * 100).toFixed(1) }}%
         </template>
@@ -57,13 +60,13 @@
       <el-table-column
         prop="finishArbitrateCount"
         label="已完成仲裁"
-        width="120"
+        min-width="120"
         sortable
       />
       <el-table-column
         prop="waitArbitrateCount"
         label="待处理仲裁"
-        width="120"
+        min-width="120"
         sortable
       />
     </el-table>

+ 1 - 1
src/views/mark/quality-monitor/QualityMonitorMarker.vue

@@ -110,7 +110,7 @@
   } from '@/api/types/mark';
   import useTable from '@/hooks/table';
   import useLoading from '@/hooks/loading';
-  import { ls } from '@/utils/storage';
+  import ls from '@/utils/storage';
   import { downloadExport } from '@/utils/download-export';
 
   defineOptions({

+ 1 - 1
src/views/mark/quality-monitor/ScoreCurve.vue

@@ -46,7 +46,7 @@
   import { qualityMonitorScoreList } from '@/api/mark';
   import { QMScoreItem, MarkQualityMonitorListFilter } from '@/api/types/mark';
   import useLoading from '@/hooks/loading';
-  import { ls } from '@/utils/storage';
+  import ls from '@/utils/storage';
 
   defineOptions({
     name: 'ScoreCurve',

+ 46 - 65
src/views/score/ScoreQuery.vue

@@ -1,6 +1,14 @@
 <template>
   <div class="part-box is-filter">
     <el-form inline>
+      <el-form-item label="姓名">
+        <el-input
+          v-model="searchModel.name"
+          placeholder="请输入姓名"
+          clearable
+          style="width: 120px"
+        />
+      </el-form-item>
       <el-form-item label="准考证号">
         <el-input
           v-model="searchModel.examNumber"
@@ -11,68 +19,58 @@
       </el-form-item>
       <el-form-item label="学号">
         <el-input
-          v-model="searchModel.studentNo"
+          v-model="searchModel.studentCode"
           placeholder="请输入学号"
           clearable
           style="width: 150px"
         />
       </el-form-item>
       <el-form-item label="科目">
-        <select-subject v-model="searchModel.subject"></select-subject>
+        <select-subject v-model="searchModel.subjectCode"></select-subject>
       </el-form-item>
-      <el-form-item label="层次">
+      <el-form-item label="筛选">
         <el-select
-          v-model="searchModel.filterType"
+          v-model="searchModel.filter"
           placeholder="请选择"
           clearable
           style="width: 120px"
         >
-          <el-option label="请选择" value="" />
-          <!-- TODO: 添加层次选项 -->
-        </el-select>
-      </el-form-item>
-      <el-form-item label="专业类型">
-        <el-select
-          v-model="searchModel.college"
-          placeholder="请选择"
-          clearable
-          style="width: 120px"
-        >
-          <el-option label="请选择" value="" />
-          <!-- TODO: 添加专业类型选项 -->
+          <el-option value="0">无</el-option>
+          <el-option value="1">客观0分,主观有分</el-option>
+          <el-option value="2">客观有分,主观0分</el-option>
         </el-select>
       </el-form-item>
       <el-form-item label="是否缺考">
         <el-select
-          v-model="searchModel.isAbsent"
+          v-model="searchModel.absent"
           placeholder="请选择"
           clearable
           style="width: 100px"
         >
-          <el-option label="" :value="true" />
-          <el-option label="" :value="false" />
+          <el-option label="缺考" :value="true" />
+          <el-option label="正常" :value="false" />
         </el-select>
       </el-form-item>
       <el-form-item label="是否上传">
         <el-select
-          v-model="searchModel.isUpload"
+          v-model="searchModel.upload"
           placeholder="请选择"
           clearable
           style="width: 100px"
         >
-          <el-option label="" :value="true" />
-          <el-option label="" :value="false" />
+          <el-option label="已上传" :value="true" />
+          <el-option label="未上传" :value="false" />
         </el-select>
       </el-form-item>
       <el-form-item label="是否违纪">
         <el-select
-          v-model="searchModel.isDisciplinary"
+          v-model="searchModel.breach"
           placeholder="请选择"
           clearable
           style="width: 100px"
         >
-          <el-option label="" :value="true" />
-          <el-option label="" :value="false" />
+          <el-option label="违纪" :value="true" />
+          <el-option label="正常" :value="false" />
         </el-select>
       </el-form-item>
       <el-form-item label="总分">
@@ -100,29 +98,12 @@
           step-strictly
         />
       </el-form-item>
-      <el-form-item label="姓名">
-        <el-input
-          v-model="searchModel.name"
-          placeholder="请输入姓名"
-          clearable
-          style="width: 120px"
-        />
-      </el-form-item>
+
       <el-form-item label="学院">
-        <el-input
-          v-model="searchModel.college"
-          placeholder="请输入学院"
-          clearable
-          style="width: 120px"
-        />
+        <select-option v-model="searchModel.college" type="college" />
       </el-form-item>
       <el-form-item label="班级">
-        <el-input
-          v-model="searchModel.className"
-          placeholder="请输入班级"
-          clearable
-          style="width: 120px"
-        />
+        <select-option v-model="searchModel.className" type="className" />
       </el-form-item>
       <el-form-item label="任课老师">
         <el-input
@@ -167,46 +148,46 @@
     >
       <el-table-column prop="examNumber" label="准考证号" width="120" />
       <el-table-column prop="name" label="姓名" min-width="100" />
-      <el-table-column prop="studentNo" label="学号" width="120" sortable />
-      <el-table-column prop="subject" label="科目" min-width="200" />
-      <el-table-column prop="level" label="层次" min-width="100" />
-      <el-table-column prop="majorType" label="专业类型" width="100" />
+      <el-table-column prop="studentCode" label="学号" width="120" sortable />
+      <el-table-column prop="subjectName" label="科目" min-width="200" />
+      <el-table-column prop="subjectLevel" label="层次" min-width="100" />
+      <el-table-column prop="subjectCategory" label="专业类型" width="100" />
       <el-table-column
-        prop="objectiveScore"
+        prop="objectiveScoreString"
         label="客观总分"
         width="110"
         sortable
       />
       <el-table-column
-        prop="subjectiveScore"
+        prop="subjectiveScoreString"
         label="主观总分"
         width="110"
         sortable
       />
       <el-table-column
-        prop="totalScore"
+        prop="totalScoreString"
         label="全卷总分"
         min-width="110"
         sortable
       />
       <el-table-column label="是否缺考" width="110" sortable>
         <template #default="scope">
-          <el-tag :type="scope.row.isAbsent ? 'danger' : 'success'">
-            {{ scope.row.isAbsent ? '是' : '否' }}
+          <el-tag :type="scope.row.absent ? 'danger' : 'success'">
+            {{ scope.row.absent ? '是' : '否' }}
           </el-tag>
         </template>
       </el-table-column>
       <el-table-column label="是否上传" width="100">
         <template #default="scope">
-          <el-tag :type="scope.row.isUpload ? 'success' : 'warning'">
-            {{ scope.row.isUpload ? '是' : '否' }}
+          <el-tag :type="scope.row.upload ? 'success' : 'warning'">
+            {{ scope.row.upload ? '是' : '否' }}
           </el-tag>
         </template>
       </el-table-column>
       <el-table-column label="是否违纪" width="100">
         <template #default="scope">
-          <el-tag :type="scope.row.isDisciplinary ? 'danger' : 'success'">
-            {{ scope.row.isDisciplinary ? '是' : '否' }}
+          <el-tag :type="scope.row.breach ? 'danger' : 'success'">
+            {{ scope.row.breach ? '是' : '否' }}
           </el-tag>
         </template>
       </el-table-column>
@@ -252,12 +233,12 @@
   const searchModel = reactive<ScoreListFilter>({
     name: '',
     examNumber: '',
-    studentNo: '',
-    subject: null,
-    filterType: '',
-    isAbsent: null,
-    isUpload: null,
-    isDisciplinary: null,
+    studentCode: '',
+    subjectCode: null,
+    filter: '',
+    absent: null,
+    upload: null,
+    breach: null,
     startScore: undefined,
     endScore: undefined,
     college: '',