소스 검색

feat: api-扫描进度

zhangjie 1 주 전
부모
커밋
195a036bc1
6개의 변경된 파일56개의 추가작업 그리고 16개의 파일을 삭제
  1. 27 4
      src/api/scan.ts
  2. 2 0
      src/api/types/scan.ts
  3. 6 0
      src/utils/download-export.ts
  4. 3 2
      src/views/scan/ScanCourseStats.vue
  5. 3 2
      src/views/scan/ScanPointStats.vue
  6. 15 8
      src/views/scan/SignPaperStats.vue

+ 27 - 4
src/api/scan.ts

@@ -1,7 +1,9 @@
-import axios from 'axios';
+import axios, { AxiosResponse } from 'axios';
 import {
   ScanCousreListPageParam,
+  ScanCourseListFilter,
   ScanPointListPageParam,
+  ScanPointListFilter,
   ScanListPageRes,
   SignPaperStatListPageParam,
   SignPaperStatListPageRes,
@@ -12,19 +14,40 @@ import {
 export function getScanCourseList(
   params: ScanCousreListPageParam
 ): Promise<ScanListPageRes> {
-  return axios.post('/api/student/list', {}, { params });
+  return axios.post('/api/admin/scan/subject', {}, { params });
 }
 
 // 按考点统计列表
 export function getScanPointList(
   params: ScanPointListPageParam
 ): Promise<ScanListPageRes> {
-  return axios.post('/api/student/list', {}, { params });
+  return axios.post('/api/admin/scan/examSite', {}, { params });
 }
 
 // 签到表统计列表
 export function getSignPaperStatList(
   params: SignPaperStatListPageParam
 ): Promise<SignPaperStatListPageRes> {
-  return axios.post('/api/student/list', {}, { params });
+  return axios.post('/api/admin/scan/package', {}, { params });
+}
+
+// 按考点导出
+export function exportScanStatByPoint(
+  params: ScanPointListFilter
+): Promise<AxiosResponse<Blob>> {
+  return axios.post(
+    '/api/admin/scan/examSite/export',
+    {},
+    { params, responseType: 'blob' }
+  );
+}
+// 按科目导出
+export function exportScanStatByCourse(
+  params: ScanCourseListFilter
+): Promise<AxiosResponse<Blob>> {
+  return axios.post(
+    '/api/admin/scan/subject/export',
+    {},
+    { params, responseType: 'blob' }
+  );
 }

+ 2 - 0
src/api/types/scan.ts

@@ -38,6 +38,8 @@ export interface SignPaperStatItem {
   code: string;
   // 图片数量
   picCount: number;
+  // 图片
+  urls: string[];
 }
 export type SignPaperStatListPageRes = PageResult<SignPaperStatItem>;
 

+ 6 - 0
src/utils/download-export.ts

@@ -20,6 +20,7 @@ import {
   exportSubjectMainObjective,
   downloadSubjectObjectiveImportTemplate,
 } from '@/api/subject';
+import { exportScanStatByPoint, exportScanStatByCourse } from '@/api/scan';
 
 import useLoading from '@/hooks/loading';
 
@@ -60,6 +61,11 @@ const downloadConfig = {
   exportSubjectMainObjective,
   // 下载主客观题导入模版
   downloadSubjectObjectiveImportTemplate,
+  // scan
+  // 按考点导出
+  exportScanStatByPoint,
+  // 按科目导出
+  exportScanStatByCourse,
 };
 type DownloadType = keyof typeof downloadConfig;
 

+ 3 - 2
src/views/scan/ScanCourseStats.vue

@@ -77,6 +77,7 @@
   import { getScanCourseList } from '@/api/scan';
   import { ScanItem, ScanCourseListFilter } from '@/api/types/scan';
   import useTable from '@/hooks/table';
+  import { downloadExport } from '@/utils/download-export';
 
   defineOptions({
     name: 'ScanCourseStats',
@@ -105,7 +106,7 @@
     ).toFixed(2)}%`;
   }
 
-  function exportData() {
-    // TODO: 实现导出功能
+  async function exportData() {
+    await downloadExport('exportScanStatByCourse', searchModel);
   }
 </script>

+ 3 - 2
src/views/scan/ScanPointStats.vue

@@ -68,6 +68,7 @@
   import { getScanPointList } from '@/api/scan';
   import { ScanItem, ScanPointListFilter } from '@/api/types/scan';
   import useTable from '@/hooks/table';
+  import { downloadExport } from '@/utils/download-export';
 
   defineOptions({
     name: 'ScanPointStats',
@@ -94,7 +95,7 @@
     ).toFixed(2)}%`;
   }
 
-  function exportData() {
-    // TODO: 实现导出功能
+  async function exportData() {
+    await downloadExport('exportScanStatByPoint', searchModel);
   }
 </script>

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

@@ -24,7 +24,7 @@
       <el-form-item>
         <el-space wrap>
           <el-button type="primary" @click="toPage(1)">查询</el-button>
-          <el-button @click="exportData">总数 --</el-button>
+          <el-button>总数 --</el-button>
         </el-space>
       </el-form-item>
     </el-form>
@@ -55,10 +55,18 @@
       @current-change="toPage"
     />
   </div>
+
+  <!-- 查看图片 -->
+  <el-image-viewer
+    v-if="showPreview"
+    :url-list="curStudentSheetUrls"
+    show-progress
+    @close="showPreview = false"
+  />
 </template>
 
 <script setup lang="ts">
-  import { reactive } from 'vue';
+  import { reactive, ref } from 'vue';
   import { getSignPaperStatList } from '@/api/scan';
   import { SignPaperStatItem, SignPaperStatListFilter } from '@/api/types/scan';
   import useTable from '@/hooks/table';
@@ -75,12 +83,11 @@
   const { dataList, pagination, loading, toPage, pageSizeChange } =
     useTable<SignPaperStatItem>(getSignPaperStatList, searchModel, false);
 
+  // 查看图片
+  const showPreview = ref(false);
+  const curStudentSheetUrls = ref<string[]>([]);
   function onView(row: SignPaperStatItem) {
-    // TODO: 实现查看功能
-    console.log('查看签到表:', row);
-  }
-
-  function exportData() {
-    // TODO: 实现导出功能
+    showPreview.value = true;
+    curStudentSheetUrls.value = row.urls || [];
   }
 </script>