<template>
|
<div class="app-container">
|
<el-form
|
class="responsive-form"
|
:model="queryParams"
|
ref="queryRef"
|
:inline="true"
|
v-show="showSearch"
|
label-position="left"
|
>
|
<el-row :gutter="20">
|
<el-col :span="6">
|
<el-form-item :label="$t('plan.query.statistical')" :style="{ width: '100%' }">
|
<el-select
|
v-model="queryParams.searchType"
|
placeholder="Select"
|
@change="handleChangeSelectType"
|
>
|
<el-option
|
v-for="item in options"
|
:key="item.value"
|
:label="item.label"
|
:value="item.value"
|
/>
|
</el-select>
|
</el-form-item>
|
</el-col>
|
<el-col :span="6">
|
<el-form-item
|
:style="{ width: '250px' }"
|
:label="
|
!dayCom
|
? $t('plan.query.selectDateRange')
|
: $t('plan.query.selectDateMonth')
|
"
|
>
|
<div v-if="!dayCom">
|
<el-date-picker
|
:style="{ width: '100%' }"
|
v-model="queryParams.monthRange"
|
type="monthrange"
|
:range-separator="$t('plan.placeholder.to')"
|
:start-placeholder="$t('plan.placeholder.startMonth')"
|
:end-placeholder="$t('plan.placeholder.endMonth')"
|
/>
|
</div>
|
<div v-else>
|
<el-date-picker
|
:style="{ width: '100%' }"
|
v-model="queryParams.monthDays"
|
type="month"
|
:placeholder="$t('plan.placeholder.selectMonth')"
|
/>
|
</div>
|
</el-form-item>
|
</el-col>
|
<el-col :span="6" v-if="dayCom">
|
<el-form-item
|
:label="$t('basic.table.applicableFactories')"
|
prop="plant"
|
:style="{ width: '100%' }"
|
>
|
<el-select
|
clearable
|
v-model="queryParams.applicableFactory"
|
:placeholder="$t('basic.table.applicableFactories')"
|
>
|
<el-option
|
v-for="item in aps_factory"
|
:key="item.value"
|
:label="item.label"
|
:value="item.value"
|
/>
|
</el-select>
|
</el-form-item>
|
</el-col>
|
<!-- <el-col :span="6" style="text-align:right;">
|
<el-form-item class="column-with-margin">
|
<el-button type="primary" icon="Search" @click="handleQuery">{{
|
$t("common.common.query")
|
}}</el-button>
|
<el-button icon="Refresh" @click="resetQuery">{{
|
$t("common.common.reset")
|
}}</el-button>
|
</el-form-item>
|
</el-col> -->
|
</el-row>
|
</el-form>
|
<el-row :gutter="10" class="mb8">
|
<el-col :span="1.5">
|
<el-button
|
type="warning"
|
plain
|
icon="Download"
|
@click="handleExport"
|
v-hasPermi="['aps:apsGasPipingRouteStat:exportExcel']"
|
:disabled="loading"
|
>{{ $t("common.common.export") }}</el-button
|
>
|
</el-col>
|
<el-col :span="1.5">
|
<el-button
|
type="success"
|
plain
|
icon="Refresh"
|
@click="handleRefresh"
|
v-hasPermi="['aps:apsGasPipingRouteStat:computeCapacity']"
|
:disabled="loading"
|
>{{ $t("common.common.update") }}</el-button
|
>
|
</el-col>
|
<right-toolbar
|
v-model:showSearch="showSearch"
|
@queryTable="handleQuery"
|
@resetTable="resetQuery"
|
></right-toolbar>
|
</el-row>
|
<vxe-grid ref="gridRef" v-bind="gridOptions" :loading="loading"></vxe-grid>
|
</div>
|
</template>
|
|
<script setup name="GasProduceStatics">
|
import {
|
listUpdateGasProduceStatics,
|
listGasProduceStatics,
|
} from "@/api/mainPlan/gasProduceStatics.js";
|
import { ref } from "vue";
|
import * as XLSX from "xlsx";
|
// import { ElMessage } from "element-plus";
|
import { useI18n } from "vue-i18n"; //要在js中使用国际化
|
const { t, locale } = useI18n();
|
const { proxy } = getCurrentInstance();
|
const { aps_factory } = proxy.useDict("aps_factory");
|
const loading = ref(false);
|
const gridRef = ref();
|
const height = ref(document.documentElement.clientHeight - 170 + "px;");
|
const headers = ref([]);
|
// const exportData = ref([]);
|
const showSearch = ref(true);
|
const data = reactive({
|
queryParams: {
|
monthRange: "",
|
monthDays: "",
|
searchType: t("plan.options.monthlyStatic"),
|
},
|
});
|
let searchTypeValue = ref("month");
|
let options = ref([]);
|
const { queryParams } = toRefs(data);
|
const gridOptions = reactive({
|
border: true,
|
stripe: true,
|
loading: false,
|
showOverflow: true,
|
eaderOverflow: true,
|
showFooterOverflow: true,
|
height: height,
|
columnConfig: {
|
resizable: true,
|
},
|
scrollX: {
|
enabled: true,
|
gt: 0,
|
threshold: 50,
|
},
|
scrollY: {
|
enabled: true,
|
gt: 0,
|
threshold: 50,
|
},
|
});
|
const dayCom = ref(false);
|
let tableColumn = [];
|
let tableData = [];
|
// let merges = [];
|
watch(
|
locale,
|
(newLocale) => {
|
options.value = [
|
{
|
value: "month",
|
label: t("plan.options.monthlyStatic"),
|
},
|
{
|
value: "day",
|
label: t("plan.options.dailyStatic"),
|
},
|
];
|
queryParams.value.searchType = t("plan.options.monthlyStatic");
|
if (
|
(!queryParams.value.monthRange && dayCom.value == false) ||
|
(!queryParams.value.monthDays && dayCom.value == true)
|
) {
|
return;
|
}
|
// queryParams.value.pageNum = 1;
|
getGasList();
|
},
|
{ immediate: true, deep: true }
|
);
|
function handleChangeSelectType(e) {
|
searchTypeValue.value = e;
|
if (e === "day") {
|
dayCom.value = true;
|
} else {
|
dayCom.value = false;
|
}
|
}
|
function dateStr(dateTimeString) {
|
const dateTime = new Date(dateTimeString);
|
// 提取年份和月份
|
const year = dateTime.getFullYear();
|
const month = String(dateTime.getMonth() + 1).padStart(2, "0"); // 月份从0开始,所以需要加1,并用padStart补零
|
// 格式化年份和月份为 "yyyy-mm" 格式的字符串
|
return `${year}-${month}`;
|
}
|
function dateRangeStr(monthRange) {
|
// 创建一个Date对象
|
let sDate = new Date(monthRange[0]);
|
let eDate = new Date(monthRange[1]);
|
// 获取年份和月份
|
let sYear = sDate.getFullYear();
|
let sMonth = sDate.getMonth() + 1; // 月份是从0开始的,所以要加1
|
let eYear = eDate.getFullYear();
|
let eMonth = eDate.getMonth() + 1; // 月份是从0开始的,所以要加1
|
// 格式化为"YYYY-MM"的形式
|
return {
|
sYearMonth: `${sYear}-${sMonth.toString().padStart(2, "0")}`,
|
eYearMonth: `${eYear}-${eMonth.toString().padStart(2, "0")}`,
|
};
|
}
|
const formatTypeLabelPlant = (list) => {
|
if (list) {
|
return list
|
.map((type) => {
|
const item = aps_factory.value.find((item) => item.value === type);
|
return item ? item.label : type;
|
})
|
.join("");
|
}
|
return "";
|
};
|
function getGasList() {
|
let rowKey = 0;
|
let colKey = 0;
|
headers.value = [];
|
// exportData.value = [];
|
tableColumn = [];
|
tableData = [];
|
loading.value = true;
|
listGasProduceStatics({
|
searchStartDate: !dayCom.value
|
? dateRangeStr(queryParams.value.monthRange).sYearMonth
|
: dateStr(queryParams.value.monthDays),
|
searchEndDate: !dayCom.value
|
? dateRangeStr(queryParams.value.monthRange).eYearMonth
|
: dateStr(queryParams.value.monthDays),
|
searchType: searchTypeValue.value,
|
major: "gas",
|
plant: !dayCom.value?"": queryParams.value.applicableFactory
|
}).then((response) => {
|
const colList = [];
|
if (response.code == "200") {
|
if (!response.data.planTitle) {
|
loading.value = false;
|
return;
|
}
|
if (!dayCom.value) {
|
colList.push({
|
field: "dateCol",
|
title: t("plan.table.dateYearMonth"),
|
fixed: "left",
|
children: [
|
{
|
field: `resourceName`,
|
title: t("plan.table.processName"),
|
width: 250,
|
type: "html",
|
},
|
{
|
field: `resourceGroupName`,
|
title: t("plan.table.applicableFactories"),
|
width: 250,
|
type: "html",
|
},
|
],
|
width: 160,
|
});
|
}else{
|
colList.push({
|
field: "dateCol",
|
title: t("plan.table.dateYearMonth"),
|
fixed: "left",
|
children: [
|
{
|
field: `resourceName`,
|
title: t("plan.table.processName"),
|
width: 250,
|
type: "html",
|
}
|
],
|
width: 160,
|
});
|
}
|
response.data.planTitle.forEach((item) => {
|
// headersOne.push(item);
|
// headersOne.push("");
|
// headersOne.push("");
|
// headersTwo.push(t("plan.table.designWorkingHours"));
|
// headersTwo.push(t("plan.table.requiredWorkingHours"));
|
// headersTwo.push(t("plan.table.capacityLoad"));
|
colKey++;
|
colList.push({
|
field: `dateColTime${colKey}`,
|
title: item,
|
children: [
|
{
|
field: `designTimes${colKey}`,
|
title: t("plan.table.designWorkingHours"),
|
width: 80,
|
},
|
{
|
field: `requireTimes${colKey}`,
|
title: t("plan.table.requiredWorkingHours"),
|
width: 80,
|
},
|
{
|
field: `capacityLoad${colKey}`,
|
title: t("plan.table.capacityLoad"),
|
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.data.planTable.map((mapItem) => {
|
rowKey++;
|
// let lastCol = startCol + 2;
|
// merges.push({ s: { r: 0, c: startCol }, e: { r: 0, c: lastCol } });
|
// startCol = lastCol + 1;
|
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}`] = formatCapacityLoad(
|
listItem.designTimes,
|
listItem.requireTimes,
|
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;
|
if (!dayCom.value) {
|
const lastIndex = key.lastIndexOf('_');
|
item[`resourceName`] = key.slice(0, lastIndex);
|
item[`resourceGroupName`] = formatTypeLabelPlant([key.slice(lastIndex + 1)]);
|
}else{
|
item[`resourceName`] = 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 formatCapacityLoad(designTimes, requireTimes, capacityLoad) {
|
/**
|
* // 0-100 绿色,101-120黄色,大于120红色
|
listItem.capacityLoad <= 100
|
? `<font color="red">${listItem.capacityLoad}%</font>`
|
: listItem.capacityLoad + "%";
|
*/
|
if (designTimes > 0 && capacityLoad > 0 && capacityLoad <= 100) {
|
return `<font color="#85cf60">${capacityLoad}%</font>`;
|
} else if (designTimes > 0 && capacityLoad > 101 && capacityLoad <= 120) {
|
return `<font color="#ecb869">${capacityLoad}%</font>`;
|
} else if (designTimes > 0 && capacityLoad > 120) {
|
return `<font color="#f89c9c">${capacityLoad}%</font>`;
|
} else if (designTimes == 0 && requireTimes > 0) {
|
return `<font color="#f56c6c">error</font>`;
|
} else {
|
return `${capacityLoad}%`;
|
}
|
}
|
/** 导出按钮操作 */
|
function handleExport() {
|
if (
|
(!queryParams.value.monthRange && dayCom.value == false) ||
|
(!queryParams.value.monthDays && dayCom.value == true)
|
) {
|
ElMessage({
|
message: t("plan.message.errorMonthEmpty"),
|
type: "error",
|
});
|
return;
|
}
|
proxy.download(
|
"/aps/apsGasPipingRouteStat/exportExcel",
|
{
|
searchStartDate: !dayCom.value
|
? dateRangeStr(queryParams.value.monthRange).sYearMonth
|
: dateStr(queryParams.value.monthDays),
|
searchEndDate: !dayCom.value
|
? dateRangeStr(queryParams.value.monthRange).eYearMonth
|
: dateStr(queryParams.value.monthDays),
|
searchType: searchTypeValue.value,
|
major: "gas",
|
},
|
`aps_gas_produce_statics_${new Date().getTime()}.xlsx`
|
);
|
}
|
/** 搜索按钮操作 */
|
function handleQuery() {
|
if (
|
(!queryParams.value.monthRange && dayCom.value == false) ||
|
(!queryParams.value.monthDays && dayCom.value == true)
|
) {
|
ElMessage({
|
message: t("plan.message.errorMonthEmpty"),
|
type: "error",
|
});
|
return;
|
}
|
// queryParams.value.pageNum = 1;
|
getGasList();
|
}
|
|
/** 重置按钮操作 */
|
function resetQuery() {
|
queryParams.value.monthRange = "";
|
queryParams.value.monthDays = "";
|
dayCom.value = false;
|
(queryParams.value.searchType = t("plan.options.monthlyStatic")),
|
(searchTypeValue.value = "month");
|
tableData = [];
|
const $grid = gridRef.value;
|
if ($grid) {
|
$grid.loadColumn([]);
|
$grid.loadData([]);
|
gridOptions.loading = false;
|
}
|
}
|
/** 刷新按钮操作 */
|
function handleRefresh() {
|
if (
|
(!queryParams.value.monthRange && dayCom.value == false) ||
|
(!queryParams.value.monthDays && dayCom.value == true)
|
) {
|
ElMessage({
|
message: t("plan.message.errorMonthEmpty"),
|
type: "error",
|
});
|
return;
|
}
|
loading.value = true;
|
listUpdateGasProduceStatics({
|
major: "gas",
|
}).then((response) => {
|
ElMessage({
|
message: t("plan.message.update"),
|
type: "success",
|
});
|
loading.value = false;
|
getGasList();
|
});
|
}
|
|
// getList();
|
</script>
|
<style lang="scss" scoped>
|
.column-with-margin {
|
margin-right: 0px;
|
}
|
.box_container {
|
width: 100%;
|
margin: 20px auto;
|
background: #fff;
|
border-radius: 5px;
|
box-shadow: 1px 1px 1px 4px#f1f1f1;
|
.title_text {
|
padding-top: 20px;
|
margin-left: 20px;
|
}
|
.tabel_container {
|
width: 98%;
|
margin: 20px auto;
|
}
|
}
|
</style>
|