Forráskód Böngészése

修改评价码的pdf/excel导出

lm 1 hónapja
szülő
commit
fba35869fa

+ 52 - 14
src/views/reviewManagement/stepComponent/reviewAccountComponent/GenerateReviewCode.vue

@@ -6,8 +6,8 @@
                     <FormSearchGroup :searchList="searchList" @searchChange="HandleSelectSearchChange"></FormSearchGroup>
                 </div>
                 <div class="content_right">
-                    <el-button class="button_refresh"  @click="HandleExportPdf">导出 PDF</el-button>
-                    <el-button class="button_refresh"  @click="HandleExportExcel">导出 Excel</el-button>
+                    <el-button :loading="exportPdfLoading" class="button_refresh"  @click="HandleExportPdf">导出 PDF</el-button>
+                    <el-button :loading="exportExcelLoading" class="button_refresh"  @click="HandleExportExcel">导出 Excel</el-button>
                     <el-button :class="[store.state.evaluationManageStepData.isAllowDeleteOrEdit ?  'button_border' : 'is-disabled']" 
                         @click="store.state.evaluationManageStepData.isAllowDeleteOrEdit ?  GoToReviewAccountConfig() : ''">重新生成</el-button>
                     <el-button :class="[store.state.evaluationManageStepData.isAllowDeleteOrEdit ? 'button_background' : 'is-disabled']" 
@@ -236,12 +236,47 @@ const FinishReviewAccount = async()=>{
     }
 }
 
+// 导出Excel 或者 pdf 时 使用的数据(全部评价码)
+const exportTableData = ref([])
+const exportExcelLoading = ref(false)
+const exportPdfLoading = ref(false)
+
+// 获取 导出时使用的数据
+ const GetExcelOrPdfReviewCode = async ()=>{
+    // 获取评价码信息
+    let params = {
+        evaluationId: route.query.id,
+        evaluationGradeId: searchParams.value.evaluationGradeId == 'all' ? '' : JSON.parse(searchParams.value.evaluationGradeId || '{}')?.id,
+        evaluationClassId:searchParams.value.evaluationClassId == 'all' ? '' : searchParams.value.evaluationClassId ,
+        gender:searchParams.value.gender == 'all' ? '' : searchParams.value.gender,
+        pageNum: 1,
+        pageSize: 100000
+    }
+    let res = await getReviewAccountListApi(params)
+    if(res?.code == 200){
+        const {codeDataList} = res.data
+        exportTableData.value = await Promise.all(codeDataList.records.map(async item=>{
+            return {
+                ...item,
+                qrCode:await makeQRCode(item.requestUrl)
+            }
+        }))
+    }
+}
 
 // 导出 Excel
 const HandleExportExcel = async () => {
+    exportExcelLoading.value = true
+    try{
+        await GetExcelOrPdfReviewCode()
+    }catch{
+        exportExcelLoading.value = false
+        return
+    }
     // 1. 初始化sheet列表
     let finalTableColumn = generateCodeTableColumns.value.slice(1).filter(column => !column.hidden)
-    let finalTableData = tableData.value
+    let finalTableData = exportTableData.value
+
     let sheetName = '评价码'
 
     // 2. 创建工作簿 和 工作表
@@ -340,13 +375,23 @@ const HandleExportExcel = async () => {
     link.click();
     document.body.removeChild(link);
     URL.revokeObjectURL(url);
+    exportExcelLoading.value = false
 };
 
 // 导出 pdf
 const HandleExportPdf = async () => {
+    exportPdfLoading.value = true
+    try{
+        await GetExcelOrPdfReviewCode()
+    }catch{
+        exportPdfLoading.value = false
+        return
+    }
+
   let finalTableColumn = generateCodeTableColumns.value.slice(1).filter(column => !column.hidden)
-  // 表格内容
-  let finalTableData = tableData.value
+    // 表格内容
+    let finalTableData = exportTableData.value
+
   // 1. 表头数据 (注意:在 header 后面,我们要手动加一列用来放二维码,避免 URL 文本和二维码重合)
   const headers = [...finalTableColumn.map(column => column.label || column.name), '快捷扫码'];
 
@@ -354,15 +399,6 @@ const HandleExportPdf = async () => {
   const body = finalTableData.map(row => {
     // 留空给最后一列绘制二维码图片
     return [...finalTableColumn.map(item=>row[item.name]),'']
-
-    // return [
-    //   row.evaluationGradeName,
-    //   row.evaluationClassName,
-    //   row.genderName,
-    //   row.evaluationCode,
-    //   row.requestUrl,
-    //   '' 
-    // ];
   });
 
   // 3. 创建 PDF 实例
@@ -419,6 +455,8 @@ const HandleExportPdf = async () => {
 
   // 6. 保存 PDF 文件
   doc.save('评价码列表.pdf');
+  exportPdfLoading.value = false
+
 }
 // 辅助函数:将字体文件转为 Base64 以便 jsPDF 加载
 const convertFontToBase64 = async (url: string): Promise<string> => {