166 lines
4.5 KiB
Vue
166 lines
4.5 KiB
Vue
<template>
|
|
<div class="ele-body">
|
|
<a-card style="width: 100%" :bordered="false">
|
|
<template #title>
|
|
<a-space>
|
|
<a-upload
|
|
:before-upload="importFileCity"
|
|
:showUploadList="false"
|
|
accept=".xls,.xlsx,.csv"
|
|
>
|
|
<a-button>数据导入</a-button>
|
|
</a-upload>
|
|
|
|
</a-space>
|
|
</template>
|
|
<a-tabs v-model:activeKey="activeKey">
|
|
<a-tab-pane tab="环境空气信息" key="">
|
|
<air-bill ref="air"></air-bill>
|
|
</a-tab-pane>
|
|
</a-tabs>
|
|
</a-card>
|
|
</div>
|
|
</template>
|
|
|
|
<script>
|
|
import XLSX from "xlsx";
|
|
import utils from "./utils";
|
|
import { Modal } from "ant-design-vue";
|
|
import AirBill from "./air-bill.vue";
|
|
import { saveAirBill } from "@/api/ecology/air";
|
|
export default {
|
|
name: "AirCollectIndex",
|
|
components: {
|
|
AirBill,
|
|
},
|
|
data() {
|
|
return {
|
|
activeKey: "",
|
|
};
|
|
},
|
|
methods: {
|
|
/* 导入本地excel文件 */
|
|
importFileCity(file) {
|
|
const hide = this.$message.loading("导入中..", 0);
|
|
|
|
let reader = new FileReader();
|
|
reader.onload = (e) => {
|
|
try {
|
|
let data = new Uint8Array(e.target.result);
|
|
let workbook = XLSX.read(data, {
|
|
type: "array",
|
|
cellDates: true
|
|
});
|
|
//0.昼间数据 1.夜间数据 2.其他信息
|
|
let sheetNames = workbook.SheetNames;
|
|
// 解析成二维数组
|
|
let aoa = XLSX.utils.sheet_to_json(workbook.Sheets[sheetNames[0]], {
|
|
header: 1,
|
|
});
|
|
let aoa2 = XLSX.utils.sheet_to_json(workbook.Sheets[sheetNames[1]], {
|
|
header: 1,
|
|
});
|
|
let aoa3 = XLSX.utils.sheet_to_json(workbook.Sheets[sheetNames[2]], {
|
|
header: 1,
|
|
});
|
|
|
|
const airList1 = aoa.filter(
|
|
(item) => {
|
|
return item.length >= 10 && item[0] != "城市"}
|
|
);
|
|
const airList2 = aoa2.filter(
|
|
(item) => item.length >= 10 && item[0] != "城市"
|
|
);
|
|
const airList3 = aoa3.filter(
|
|
(item) => item.length >= 10 && item[0] != "测点名称"
|
|
);
|
|
|
|
|
|
// 解析成对象数组
|
|
const billName1 = sheetNames[0];
|
|
const billData1 = utils.toStationObjData(airList1);
|
|
const billName2 = sheetNames[1];
|
|
const billData2 = utils.toCityObjData(airList2);
|
|
const billName3 = sheetNames[2];
|
|
const billData3 = utils.toAreaObjData(airList3);
|
|
if (
|
|
(!billData1 || billData1.length == 0) &&
|
|
(!billData2 || billData2.length == 0) &&
|
|
(!billData3 || billData3.length == 0)
|
|
) {
|
|
hide()
|
|
Modal.error({
|
|
title: "导入失败",
|
|
content: "找不到数据",
|
|
});
|
|
return;
|
|
}
|
|
|
|
const tasks = [];
|
|
if (billData1.length > 0) {
|
|
tasks.push(
|
|
saveAirBill({
|
|
billName: billName1,
|
|
regionLevel: "站点",
|
|
ambientAirList: billData1,
|
|
})
|
|
);
|
|
}
|
|
if (billData2.length > 0) {
|
|
tasks.push(
|
|
saveAirBill({
|
|
billName: billName2,
|
|
regionLevel: "市级",
|
|
ambientAirList: billData2,
|
|
})
|
|
);
|
|
}
|
|
if (billData3.length > 0) {
|
|
tasks.push(
|
|
saveAirBill({
|
|
billName: billName3,
|
|
regionLevel: "县级",
|
|
ambientAirList: billData3,
|
|
})
|
|
);
|
|
}
|
|
|
|
// 上传到服务器
|
|
|
|
Promise.all(tasks)
|
|
.then(() => {
|
|
Modal.success({
|
|
title: "导入成功",
|
|
content: `成功导入${billData1.length + billData2.length + billData3.length}条数据`,
|
|
});
|
|
this.$refs.air && this.$refs.air.reload();
|
|
})
|
|
.catch(() => {
|
|
Modal.error({
|
|
title: "导入失败",
|
|
content: "数据上传出错",
|
|
});
|
|
})
|
|
.finally(() => {
|
|
hide();
|
|
});
|
|
} catch (error) {
|
|
hide();
|
|
Modal.error({
|
|
title: "导入失败",
|
|
content: error.message,
|
|
});
|
|
}
|
|
// console.log(billData);
|
|
};
|
|
reader.readAsArrayBuffer(file);
|
|
|
|
return false;
|
|
},
|
|
|
|
},
|
|
};
|
|
</script>
|
|
|
|
<style scoped lang="less">
|
|
</style> |