From 0796eebe3520fafb0ac5d36ee584af81506d7e9c Mon Sep 17 00:00:00 2001 From: riku <risaku@163.com> Date: 星期六, 20 九月 2025 14:05:52 +0800 Subject: [PATCH] 2025.9.20 数据产品(待完成) --- src/views/fysp/data-product/components/BaseDataProduct.vue | 121 +++++++++++++++++++++++++++------------- 1 files changed, 81 insertions(+), 40 deletions(-) diff --git a/src/views/fysp/data-product/components/BaseDataProduct.vue b/src/views/fysp/data-product/components/BaseDataProduct.vue index b53953e..8f462ba 100644 --- a/src/views/fysp/data-product/components/BaseDataProduct.vue +++ b/src/views/fysp/data-product/components/BaseDataProduct.vue @@ -23,11 +23,11 @@ </template> <template #buttons> <CompReportDownloadDialog - name="闂涓庢暣鏀规眹鎬诲垎鏋愪笌鍔ㄦ�佽窡韪竻鍗�" + :name="fileName" :locations="formSearch.locations" :scenetype="formSearch.scenetype" :time="formSearch.time" - @submit="handleSearch" + @submit="(e) => handleSearch(e, true)" ></CompReportDownloadDialog> </template> </FYSearchBar> @@ -57,27 +57,27 @@ <el-table-column v-for="(item, index) in activeExcelData.head" :key="index" - :prop="item.name" + :prop="item.prop" :label="item.name" > <template v-if="item.children" #default="{ row }"> - <span v-html="row[item.name]"></span> + <span v-html="row[item.prop]"></span> <el-table-column v-for="(item1, index1) in item.children" :key="index1" - :prop="item1.name" + :prop="item1.prop" :label="item1.name" > - <template v-if="item1.children" #default="{ row1 }"> - <span v-html="row1[item1.name]"></span> + <template v-if="item1.children" #default="scope1"> + <span v-html="scope1.row[item1.prop]"></span> <el-table-column v-for="(item2, index2) in item1.children" :key="index2" - :prop="item2.name" + :prop="item2.prop" :label="item2.name" > - <template v-if="item2.children" #default="{ row2 }"> - <span v-html="row2[item2.name]"></span> + <template v-if="item2.children" #default="scope2"> + <span v-html="scope2.row[item2.prop]"></span> </template> </el-table-column> </template> @@ -102,12 +102,16 @@ //寮曞叆鐩稿叧鏍峰紡 import '@vue-office/excel/lib/index.css'; -import { ref, onMounted } from 'vue'; +import { ref, onMounted, computed } from 'vue'; import dayjs from 'dayjs'; import * as XLSX from 'xlsx'; import * as ExcelJS from 'exceljs'; import dataproductApi from '@/api/fysp/dataproductApi'; import CompReportDownloadDialog from './CompReportDownloadDialog.vue'; +import { Base64 } from 'js-base64'; +import { useBgtaskStore } from '@/stores/bgtaskStore'; + +const bgtaskStore = useBgtaskStore(); const emit = defineEmits(['search']); @@ -125,6 +129,19 @@ headNum: { type: Number, default: 1 + } +}); + +const fileName = computed(() => { + switch (props.productType) { + case 1: + return '闂涓庢暣鏀规眹鎬诲垎鏋愪笌鍔ㄦ�佽窡韪竻鍗�'; + case 2: + return '瑙勮寖鎬ц瘎浼颁笌鍒嗘瀽娓呭崟'; + case 3: + return '闂涓庢暣鏀瑰垎甯冨垎鏋愭竻鍗�'; + default: + return '鎶ュ憡娓呭崟'; } }); @@ -158,7 +175,7 @@ getTable(activeSheet.value); } -function handleSearch(forceUpdate) { +function handleSearch(forceUpdate, isDownload) { const locations = formSearch.value.locations; const time = formSearch.value.time; const scenetype = formSearch.value.scenetype; @@ -178,30 +195,47 @@ dataproductApi .downloadProduct(area, props.productType, forceUpdate ? forceUpdate : false) .then(async (res) => { - // const data = new Uint8Array(res); - res.arrayBuffer().then((data) => { - workbook = XLSX.read(data, { type: 'array' }); - sheetNames.value = workbook.SheetNames; - activeSheet.value = sheetNames.value[0]; - getTable(activeSheet.value); - }); + if (res == false) { + alert('鎶ュ憡鐢熸垚涓紝鍙湪鍚庡彴浠诲姟鏌ョ湅鐢熸垚杩涘害'); + bgtaskStore.dialogShow = true; + bgtaskStore.fetchTask(); + } else { + if (isDownload) { + const name = Base64.decode(res.headers.get('filename')); + const url = window.URL.createObjectURL(res.data); + const link = document.createElement('a'); + link.href = url; + link.setAttribute('download', name); + document.body.appendChild(link); + link.click(); + document.body.removeChild(link); + window.URL.revokeObjectURL(url); + } else { + res.data.arrayBuffer().then((data) => { + workbook = XLSX.read(data, { type: 'array' }); + sheetNames.value = workbook.SheetNames; + activeSheet.value = sheetNames.value[0]; + getTable(activeSheet.value); + }); + } - // const workbook = new ExcelJS.Workbook(); - // await workbook.xlsx.load(res); - // workbook.eachSheet(function (worksheet, sheetId) { - // console.log(worksheet.name); - // }); - // const sheet1 = workbook.worksheets[0] - // const row = sheet1.getRow(1) - // console.log(row); + // const workbook = new ExcelJS.Workbook(); + // await workbook.xlsx.load(res); + // workbook.eachSheet(function (worksheet, sheetId) { + // console.log(worksheet.name); + // }); + // const sheet1 = workbook.worksheets[0] + // const row = sheet1.getRow(1) + // console.log(row); - // console.log(res); - // console.log(new ArrayBuffer(res)); - // res.arrayBuffer().then(r=>{ - // excel.value = r - // }) + // console.log(res); + // console.log(new ArrayBuffer(res)); + // res.arrayBuffer().then(r=>{ + // excel.value = r + // }) - // excel.value = new ArrayBuffer(res) + // excel.value = new ArrayBuffer(res) + } }) .finally(() => (loading.value = false)); } @@ -218,14 +252,18 @@ if (matchTxt) { matchTxt.forEach((txt) => { - let newTxt = txt.replace(new RegExp(/\n/, 'g'), '<br />'); + // let newTxt = txt.replace(new RegExp(/\n/, 'g'), '</span><br/><span>'); + // newTxt = newTxt.replace(new RegExp(/"/, 'g'), ''); + // tableData = tableData.replace(txt, `<span>${newTxt}</span>`); + let newTxt = txt.replace(new RegExp(/\n/, 'g'), ''); newTxt = newTxt.replace(new RegExp(/"/, 'g'), ''); tableData = tableData.replace(txt, newTxt); }); - // console.log(tableData); } + // console.log(tableData); const t = strToTableObj(tableData); + // console.log(t); // console.log(head); // console.log(data); excelDatas.value.set(sheetName, t); @@ -292,14 +330,17 @@ const row = rows[i]; if (lastHead.length == 0) { row.forEach((r, y) => { - lastHead.push({ name: r }); - dataKeys.push(r); + const prop = r == '' ? r : `id-${r}-${y}`; + lastHead.push({ name: r, prop }); + dataKeys.push(prop); }); } else { const newHead = []; row.forEach((r, y) => { + const prop = `id-${r}-${y}`; if (dataKeys[y] == '') { - dataKeys[y] = r; + // lastHead[y] = { name: r, prop }; + dataKeys[y] = prop; } const last = lastHead[y]; @@ -307,7 +348,7 @@ console.log(last); } if (last.name == '') { - newHead.push({ name: r }); + newHead.push({ name: r, prop }); offset++; } else if (r != '') { newHead.push({ @@ -316,7 +357,7 @@ }); offset = 1; } else { - newHead.push({ name: '' }); + newHead.push({ name: '', prop }); let _index = newHead.length - 1 - offset; _index = _index >= 0 ? _index : 0; newHead[_index].children.push(last); -- Gitblit v1.9.3