From ae52f9a7cca3ebe8803f720e5891a696714347db Mon Sep 17 00:00:00 2001
From: riku <risaku@163.com>
Date: 星期二, 04 十一月 2025 13:04:16 +0800
Subject: [PATCH] 基础数据产品-整改清单中,新增按照任意时段和区县进行统计的功能
---
src/views/fysp/data-product/components/BaseDataProduct.vue | 111 +++++++++++++++++++++++++++++++++++++------------------
1 files changed, 74 insertions(+), 37 deletions(-)
diff --git a/src/views/fysp/data-product/components/BaseDataProduct.vue b/src/views/fysp/data-product/components/BaseDataProduct.vue
index 7054740..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="scope1">
- <span v-html="scope1.row[item1.name]"></span>
+ <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="scope2">
- <span v-html="scope2.row[item2.name]"></span>
+ <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));
}
@@ -229,7 +263,7 @@
// console.log(tableData);
const t = strToTableObj(tableData);
- console.log(t);
+ // console.log(t);
// console.log(head);
// console.log(data);
excelDatas.value.set(sheetName, t);
@@ -296,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];
@@ -311,7 +348,7 @@
console.log(last);
}
if (last.name == '') {
- newHead.push({ name: r });
+ newHead.push({ name: r, prop });
offset++;
} else if (r != '') {
newHead.push({
@@ -320,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