<template>
|
<div class="app-container">
|
<el-row :gutter="10" class="mb8">
|
<el-col :span="1.5">
|
<el-button
|
type="warning"
|
plain
|
icon="Download"
|
@click="handleExport"
|
v-hasPermi="['apsPartRouteStat:export']"
|
>导出</el-button>
|
</el-col>
|
<el-col :span="1.5">
|
<el-button
|
type="info"
|
plain
|
icon="Refresh"
|
@click="handleRefresh"
|
v-hasPermi="['apsPartRouteStat:edit']"
|
>更新</el-button>
|
</el-col>
|
</el-row>
|
|
<vxe-grid ref="gridRef" v-bind="gridOptions" :loading="loading"></vxe-grid>
|
</div>
|
</template>
|
|
<script setup name="apsPartRouteStat">
|
import { query,updateStat } from "@/api/mainPlan/partRouteStat.js";
|
import { ref } from "vue";
|
import * as XLSX from 'xlsx';
|
|
const { proxy } = getCurrentInstance();
|
|
const loading = ref(true);
|
const gridRef = ref();
|
const height = ref(document.documentElement.clientHeight - 130 + "px;")
|
const headers = ref([]);
|
const exportData = ref([]);
|
|
const gridOptions = reactive({
|
border: true,
|
loading: false,
|
showOverflow: true,
|
showHeaderOverflow: true,
|
showFooterOverflow: true,
|
height: height,
|
columnConfig: {
|
resizable: true
|
},
|
scrollX: {
|
enabled: true,
|
gt: 0,
|
threshold: 50
|
},
|
scrollY: {
|
enabled: true,
|
gt: 0,
|
threshold: 50
|
}
|
});
|
|
let tableColumn = []
|
let tableData = []
|
let merges = [];
|
|
/** 查询零件统计表列表 */
|
function getList() {
|
let rowKey = 0
|
let colKey = 0
|
headers.value = []
|
exportData.value = []
|
tableColumn = []
|
tableData = []
|
loading.value = true;
|
query().then(response => {
|
const colList = []
|
let headersOne = []
|
let headersTwo = []
|
if(response.code == '200'){
|
if (!response.planTitle) {
|
loading.value = false;
|
return;
|
}
|
headersOne.push('日期');
|
headersTwo.push('资源组');
|
colList.push({
|
field: 'dateCol',
|
title: '日期',
|
fixed: 'left',
|
children: [
|
{ field: `resourceName`, title: '资源组', width: 250, type: 'html'},
|
],
|
width: 160
|
})
|
response.planTitle.forEach(item => {
|
headersOne.push(item);
|
headersOne.push('');
|
headersOne.push('');
|
headersTwo.push('设计工时');
|
headersTwo.push('需求工时');
|
headersTwo.push('产能负荷');
|
colKey++
|
colList.push({
|
field: `dateColTime${colKey}`,
|
title: item,
|
children: [
|
{ field: `designTimes${colKey}`, title: '设计工时', width: 80},
|
{ field: `requireTimes${colKey}`, title: '需求工时', width: 80},
|
{ field: `capacityLoad${colKey}`, title: '产能负荷', width: 80, type: 'html'},
|
],
|
width: 160
|
})
|
});
|
|
headers.value.push(headersOne);
|
headers.value.push(headersTwo);
|
|
const columnList = [...tableColumn, ...colList]
|
const dataList = []
|
let startCol = 1;
|
|
//获取map
|
response.planTable.forEach(mapItem => {
|
rowKey++
|
let lastCol = startCol + 2;
|
merges.push({ s: { r: 0, c: startCol }, e: { r: 0, c: lastCol} });
|
startCol = lastCol + 1;
|
let data = [];
|
const item = {
|
id: `${rowKey}`
|
}
|
for (const [key, listValue] of Object.entries(mapItem)) {
|
data.push(key);
|
|
let tableKey = 0;
|
let flag = false;
|
listValue.forEach(listItem => {
|
|
tableKey++
|
item[`designTimes${tableKey}`] = listItem.designTimes;
|
item[`requireTimes${tableKey}`] = listItem.requireTimes;
|
item[`capacityLoad${tableKey}`] = listItem.capacityLoad > 100 ? `<font color="red">${listItem.capacityLoad}%</font>` :listItem.capacityLoad+'%';
|
data.push(listItem.designTimes);
|
data.push(listItem.requireTimes);
|
data.push(listItem.capacityLoad+'%');
|
if (listItem.capacityLoad > 100) {
|
flag = true;
|
}
|
});
|
|
item[`resourceName`] = flag ? `<div class='el-badge'><sup class="el-badge__content is-fixed is-dot"></sup>${key}</div>` : key;
|
}
|
exportData.value.push(data);
|
dataList.push(item);
|
});
|
|
const $grid = gridRef.value
|
if ($grid) {
|
tableColumn = columnList
|
tableData = [...tableData, ...dataList]
|
$grid.loadColumn(tableColumn)
|
$grid.loadData(tableData)
|
gridOptions.loading = false
|
}
|
|
loading.value = false;
|
}
|
});
|
}
|
|
/** 导出按钮操作 */
|
function handleExport() {
|
|
// 合并表头和数据
|
const finalData = [...headers.value, ...exportData.value];
|
|
// 将数据转换为 worksheet
|
const ws = XLSX.utils.aoa_to_sheet(finalData);
|
|
// 合并单元格(如果需要)
|
/* ws['!merges'] = [
|
{ s: { r: 0, c: 1 }, e: { r: 0, c: 3 } },
|
{ s: { r: 0, c: 0 }, e: { r: 0, c: 0 } }
|
]; */
|
|
ws['!merges'] = merges;
|
|
// 创建 workbook
|
const wb = XLSX.utils.book_new();
|
// 将 worksheet 添加到 workbook 中
|
XLSX.utils.book_append_sheet(wb, ws, 'Sheet1');
|
// 导出文件
|
XLSX.writeFile(wb, `apsPartRouteStat_${new Date().getTime()}.xlsx`);
|
|
}
|
|
/** 刷新按钮操作 */
|
function handleRefresh(){
|
updateStat().then(response => {
|
if(response.code == '200'){
|
getList();
|
}
|
});
|
}
|
|
getList();
|
</script>
|