|
|
@@ -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> => {
|