Ver Fonte

feat: 扫描进度

zhangjie há 1 semana atrás
pai
commit
1f8bb19926

+ 11 - 13
src/api/types/scan.ts

@@ -4,32 +4,30 @@ export interface ScanItem {
   // 考试名称
   name: string;
   // 考生总数
-  totalStudents: number;
+  totalCount: number;
   // 已扫张数
-  scannedSheets: number;
+  scanSheetCount: number;
   // 已扫人数
-  scannedStudents: number;
+  scanCount: number;
   // 人工指定缺考
-  manualAbsent: number;
-  // 进度
-  progress: number;
+  manualAbsentCount: number;
 }
 
 export type ScanListPageRes = PageResult<ScanItem>;
 
 export interface ScanCourseListFilter {
   // 科目
-  subject: string | null;
+  code: string | null;
   // 层次
   level?: string;
   // 专业类型
-  majorType?: string;
+  category?: string;
 }
 export type ScanCousreListPageParam = PageParams<ScanCourseListFilter>;
 
 export interface ScanPointListFilter {
   // 考点
-  point?: string;
+  examSite?: string;
 }
 export type ScanPointListPageParam = PageParams<ScanPointListFilter>;
 
@@ -37,17 +35,17 @@ export type ScanPointListPageParam = PageParams<ScanPointListFilter>;
 export interface SignPaperStatItem {
   id: number;
   // 签到表编号
-  signPaperNo: string;
+  code: string;
   // 图片数量
-  imageCount: number;
+  picCount: number;
 }
 export type SignPaperStatListPageRes = PageResult<SignPaperStatItem>;
 
 export interface SignPaperStatListFilter {
   // 签到表编号
-  signPaperNo?: string;
+  code?: string;
   // 状态
-  status?: string;
+  upload?: boolean;
 }
 
 export type SignPaperStatListPageParam = PageParams<SignPaperStatListFilter>;

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

@@ -4,9 +4,9 @@ import { ref } from 'vue';
 import useLoading from '@/hooks/loading';
 
 const selectConfig = {
-  // 卷型下拉列表
+  // 卷型: subjectCode
   subjectPaperType: '/api/admin/subject/getPaperType',
-  // 科目层次下拉列表
+  // 科目层次
   subjectLevel: '/api/admin/subject/level/list',
   // 学院
   college: '/api/admin/student/college/list',

+ 18 - 31
src/views/scan/ScanCourseStats.vue

@@ -2,27 +2,15 @@
   <div class="part-box is-border">
     <el-form inline>
       <el-form-item label="科目">
-        <select-subject v-model="searchModel.subject"></select-subject>
+        <select-subject v-model="searchModel.code"></select-subject>
       </el-form-item>
       <el-form-item label="层次">
-        <el-select
-          v-model="searchModel.level"
-          placeholder="请选择"
-          clearable
-          style="width: 120px"
-        >
-          <el-option label="请选择" value="" />
-        </el-select>
+        <select-option v-model="searchModel.level" type="subjectLevel">
+        </select-option>
       </el-form-item>
       <el-form-item label="专业类型">
-        <el-select
-          v-model="searchModel.majorType"
-          placeholder="请选择"
-          clearable
-          style="width: 120px"
-        >
-          <el-option label="请选择" value="" />
-        </el-select>
+        <select-option v-model="searchModel.category" type="subjectCategory">
+        </select-option>
       </el-form-item>
       <el-form-item>
         <el-space wrap>
@@ -44,35 +32,32 @@
     >
       <el-table-column prop="name" label="考试名称" min-width="200" sortable />
       <el-table-column
-        prop="totalStudents"
+        prop="totalCount"
         label="考生总数"
         min-width="100"
         sortable
       />
       <el-table-column
-        prop="scannedSheets"
+        prop="scanSheetCount"
         label="已扫张数"
         min-width="100"
         sortable
       />
       <el-table-column
-        prop="scannedStudents"
+        prop="scanCount"
         label="已扫人数"
         min-width="100"
         sortable
       />
       <el-table-column
-        prop="manualAbsent"
+        prop="manualAbsentCount"
         label="人工指定缺考"
         min-width="100"
         sortable
       />
       <el-table-column label="进度" width="100">
         <template #default="scope">
-          <el-progress
-            :percentage="scope.row.progress"
-            :color="getProgressColor(scope.row.progress)"
-          />
+          {{ getProgress(scope.row) }}
         </template>
       </el-table-column>
     </el-table>
@@ -98,9 +83,9 @@
   });
 
   const searchModel = reactive<ScanCourseListFilter>({
-    subject: null,
+    code: null,
     level: '',
-    majorType: '',
+    category: '',
   });
 
   const {
@@ -112,10 +97,12 @@
     handleSortChange,
   } = useTable<ScanItem>(getScanCourseList, searchModel, false);
 
-  function getProgressColor(progress: number) {
-    if (progress < 30) return '#f56c6c';
-    if (progress < 70) return '#e6a23c';
-    return '#67c23a';
+  function getProgress(row: ScanItem) {
+    if (!row.totalCount) return '0%';
+    return `${(
+      ((row.scanCount + row.manualAbsentCount) / row.totalCount) *
+      100
+    ).toFixed(2)}%`;
   }
 
   function exportData() {

+ 15 - 21
src/views/scan/ScanPointStats.vue

@@ -2,13 +2,8 @@
   <div class="part-box is-border">
     <el-form inline>
       <el-form-item label="考点">
-        <el-input
-          v-model.trim="searchModel.point"
-          placeholder="请选择"
-          clearable
-          style="width: 120px"
-        >
-        </el-input>
+        <select-option v-model="searchModel.examSite" type="examSite">
+        </select-option>
       </el-form-item>
       <el-form-item>
         <el-space wrap>
@@ -28,35 +23,32 @@
       @sort-change="handleSortChange"
     >
       <el-table-column
-        prop="totalStudents"
+        prop="totalCount"
         label="考生总数"
         min-width="100"
         sortable
       />
       <el-table-column
-        prop="scannedSheets"
+        prop="scanSheetCount"
         label="已扫张数"
         min-width="100"
         sortable
       />
       <el-table-column
-        prop="scannedStudents"
+        prop="scanCount"
         label="已扫人数"
         min-width="100"
         sortable
       />
       <el-table-column
-        prop="manualAbsent"
+        prop="manualAbsentCount"
         label="人工指定缺考"
         min-width="100"
         sortable
       />
-      <el-table-column label="扫描进度" width="120" sortable>
+      <el-table-column label="进度" width="100">
         <template #default="scope">
-          <el-progress
-            :percentage="scope.row.progress"
-            :color="getProgressColor(scope.row.progress)"
-          />
+          {{ getProgress(scope.row) }}
         </template>
       </el-table-column>
     </el-table>
@@ -82,7 +74,7 @@
   });
 
   const searchModel = reactive<ScanPointListFilter>({
-    point: '',
+    examSite: '',
   });
 
   const {
@@ -94,10 +86,12 @@
     handleSortChange,
   } = useTable<ScanItem>(getScanPointList, searchModel, false);
 
-  function getProgressColor(progress: number) {
-    if (progress < 30) return '#f56c6c';
-    if (progress < 70) return '#e6a23c';
-    return '#67c23a';
+  function getProgress(row: ScanItem) {
+    if (!row.totalCount) return '0%';
+    return `${(
+      ((row.scanCount + row.manualAbsentCount) / row.totalCount) *
+      100
+    ).toFixed(2)}%`;
   }
 
   function exportData() {

+ 9 - 8
src/views/scan/SignPaperStats.vue

@@ -3,21 +3,22 @@
     <el-form inline>
       <el-form-item label="签到表编号">
         <el-input
-          v-model.trim="searchModel.signPaperNo"
+          v-model.trim="searchModel.code"
           placeholder="请选择"
           clearable
-          style="width: 120px"
+          style="width: 200px"
         >
         </el-input>
       </el-form-item>
       <el-form-item label="状态">
         <el-select
-          v-model="searchModel.status"
+          v-model="searchModel.upload"
           placeholder="请选择"
           clearable
           style="width: 120px"
         >
-          <el-option label="请选择" value="" />
+          <el-option label="已上传" :value="true" />
+          <el-option label="未上传" :value="false" />
         </el-select>
       </el-form-item>
       <el-form-item>
@@ -35,8 +36,8 @@
       border
       stripe
     >
-      <el-table-column prop="signPaperNo" label="签到表编号" sortable />
-      <el-table-column prop="imageCount" label="图片数量" sortable />
+      <el-table-column prop="code" label="签到表编号" sortable />
+      <el-table-column prop="picCount" label="图片数量" sortable />
       <el-table-column label="操作" width="100" fixed="right">
         <template #default="scope">
           <el-button size="small" link @click="onView(scope.row)">
@@ -67,8 +68,8 @@
   });
 
   const searchModel = reactive<SignPaperStatListFilter>({
-    signPaperNo: '',
-    status: '',
+    code: '',
+    upload: undefined,
   });
 
   const { dataList, pagination, loading, toPage, pageSizeChange } =