| | |
| | | ref="queryRef" |
| | | :inline="true" |
| | | v-show="showSearch" |
| | | label-width="68px" |
| | | label-position="left" |
| | | > |
| | | <el-row type="flex" justify="left"> |
| | | <el-form-item label="统计方式"> |
| | | <el-select |
| | | v-model="queryParams.searchType" |
| | | style="width: 200px" |
| | | 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-form-item label="选择区间"> |
| | | <div v-if="!dayCom"> |
| | | <el-date-picker |
| | | v-model="queryParams.monthRange" |
| | | type="monthrange" |
| | | range-separator="至" |
| | | start-placeholder="选择开始月份" |
| | | end-placeholder="选择结束月份" |
| | | /> |
| | | </div> |
| | | <div v-else> |
| | | <el-date-picker |
| | | v-model="queryParams.monthDays" |
| | | type="month" |
| | | placeholder="选择月份" |
| | | /> |
| | | </div> |
| | | </el-form-item> |
| | | |
| | | <el-form-item class="column-with-margin"> |
| | | <el-button type="primary" icon="Search" @click="handleQuery" |
| | | >查询</el-button |
| | | > |
| | | <el-button icon="Refresh" @click="resetQuery">重置</el-button> |
| | | </el-form-item> |
| | | </el-row> |
| | | <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: '100%' }" |
| | | :label=" |
| | | !dayCom |
| | | ? $t('plan.query.selectDateRange') |
| | | : $t('plan.query.selectDateMonth') |
| | | " |
| | | > |
| | | <div v-if="!dayCom"> |
| | | <el-date-picker |
| | | :style="{ width: '250px' }" |
| | | 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-form> |
| | | <el-row :gutter="10" class="mb8"> |
| | | <el-col :span="1.5"> |
| | |
| | | icon="Download" |
| | | @click="handleExport" |
| | | v-hasPermi="['aps:apsGasPipingRouteStat:exportExcel']" |
| | | >导出</el-button |
| | | >{{ $t("common.common.export") }}</el-button |
| | | > |
| | | </el-col> |
| | | <el-col :span="1.5"> |
| | | <el-button |
| | | type="info" |
| | | type="success" |
| | | plain |
| | | icon="Refresh" |
| | | @click="handleRefresh" |
| | | v-hasPermi="['aps:apsGasPipingRouteStat:computeCapacity']" |
| | | :disabled="loading" |
| | | >更新</el-button |
| | | >{{ $t("common.common.update") }}</el-button |
| | | > |
| | | </el-col> |
| | | <right-toolbar @queryTable="handleQuery" :search="false"></right-toolbar> |
| | | <right-toolbar |
| | | v-model:showSearch="showSearch" |
| | | @queryTable="handleQuery" |
| | | @resetTable="resetQuery" |
| | | ></right-toolbar> |
| | | </el-row> |
| | | <!-- <div class="box_container"> --> |
| | | <!-- <div class="title_text">管路规划产能负载统计</div> --> |
| | | <!-- <div class="tabel_container"> --> |
| | | <vxe-grid |
| | | ref="gridRef" |
| | | v-bind="gridOptions" |
| | | :loading="loading" |
| | | ></vxe-grid> |
| | | <!-- </div> --> |
| | | <!-- <div class="title_text">管路规划产能负载统计</div> --> |
| | | <!-- <div class="tabel_container"> --> |
| | | <vxe-grid ref="gridRef" v-bind="gridOptions" :loading="loading"></vxe-grid> |
| | | <!-- </div> --> |
| | | <!-- </div> --> |
| | | </div> |
| | | </template> |
| | | |
| | | <script setup name="gasProduceStatics"> |
| | | <script setup name="PipeProduceStatics"> |
| | | import { |
| | | listUpdateGasProduceStatics, |
| | | listGasProduceStatics, |
| | | } from "@/api/mainPlan/gasProduceStatics.js"; |
| | | import { ref } from "vue"; |
| | | import * as XLSX from "xlsx"; |
| | | import { ElMessage } from "element-plus"; |
| | | // 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 - 180 + "px;"); |
| | |
| | | queryParams: { |
| | | monthRange: "", |
| | | monthDays: "", |
| | | searchType: "按月统计", |
| | | searchType: t("plan.options.monthlyStatic"), |
| | | }, |
| | | }); |
| | | let searchTypeValue = ref("month"); |
| | | const options = [ |
| | | { |
| | | value: "month", |
| | | label: "按月统计", |
| | | }, |
| | | { |
| | | value: "day", |
| | | label: "按日统计", |
| | | }, |
| | | ]; |
| | | let options = ref([]); |
| | | const { queryParams } = toRefs(data); |
| | | const gridOptions = reactive({ |
| | | border: true, |
| | |
| | | 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; |
| | | getPipeList(); |
| | | }, |
| | | { immediate: true, deep: true } |
| | | ); |
| | | function handleChangeSelectType(e) { |
| | | searchTypeValue.value = e; |
| | | if (e === "day") { |
| | |
| | | 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 getPipeList() { |
| | | let rowKey = 0; |
| | |
| | | searchType: searchTypeValue.value, |
| | | major: "piping", |
| | | }).then((response) => { |
| | | console.log(response.data.planTable, "responseresponseresponse"); |
| | | const colList = []; |
| | | let headersOne = []; |
| | | let headersTwo = []; |
| | | // let headersOne = []; |
| | | // let headersTwo = []; |
| | | if (response.code == "200") { |
| | | if (!response.data.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, |
| | | }); |
| | | // headersOne.push(t("plan.table.dateYearMonth")); |
| | | // headersTwo.push(t("plan.table.processName")); |
| | | 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("设计产能"); |
| | | 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: `designTimes${colKey}`, |
| | | title: t("plan.table.designWorkingHours"), |
| | | width: 80, |
| | | }, |
| | | { |
| | | field: `requireTimes${colKey}`, |
| | | title: t("plan.table.requiredWorkingHours"), |
| | | width: 80, |
| | | }, |
| | | { |
| | | field: `capacityLoad${colKey}`, |
| | | title: "产能负载", |
| | | 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; |
| | | 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}`] = formatCapacityLoad(listItem.designTimes,listItem.requireTimes,listItem.capacityLoad) |
| | | // 0-100 绿色,101-120黄色,大于120红色 |
| | | // 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[`capacityLoad${tableKey}`] = formatCapacityLoad( |
| | | listItem.designTimes, |
| | | listItem.requireTimes, |
| | | listItem.capacityLoad |
| | | ); |
| | | }); |
| | | |
| | | // item[`resourceName`] = flag |
| | | // ? `<div class='el-badge'><sup class="el-badge__content is-fixed is-dot"></sup>${key}</div>` |
| | | // : key; |
| | | item[`resourceName`] = 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); |
| | | }); |
| | | |
| | |
| | | } |
| | | }); |
| | | } |
| | | function formatCapacityLoad(designTimes,requireTimes,capacityLoad){ |
| | | function formatCapacityLoad(designTimes, requireTimes, capacityLoad) { |
| | | /** |
| | | * // 0-100 绿色,101-120黄色,大于120红色 |
| | | listItem.capacityLoad <= 100 |
| | | ? `<font color="red">${listItem.capacityLoad}%</font>` |
| | | : listItem.capacityLoad + "%"; |
| | | */ |
| | | if(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>` |
| | | 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}%`; |
| | | } |
| | | } |
| | | /** 导出按钮操作 */ |
| | |
| | | (!queryParams.value.monthDays && dayCom.value == true) |
| | | ) { |
| | | ElMessage({ |
| | | message: "请选择年月", |
| | | message: t("plan.message.errorMonthEmpty"), |
| | | type: "error", |
| | | }); |
| | | return; |
| | |
| | | (!queryParams.value.monthDays && dayCom.value == true) |
| | | ) { |
| | | ElMessage({ |
| | | message: "请选择年月", |
| | | message: t("plan.message.errorMonthEmpty"), |
| | | type: "error", |
| | | }); |
| | | return; |
| | |
| | | queryParams.value.monthRange = ""; |
| | | queryParams.value.monthDays = ""; |
| | | dayCom.value = false; |
| | | (queryParams.value.searchType = "按月统计"), |
| | | (queryParams.value.searchType = t("plan.options.monthlyStatic")), |
| | | (searchTypeValue.value = "month"); |
| | | tableData = []; |
| | | const $grid = gridRef.value; |
| | |
| | | (!queryParams.value.monthDays && dayCom.value == true) |
| | | ) { |
| | | ElMessage({ |
| | | message: "请选择年月", |
| | | message: t("plan.message.errorMonthEmpty"), |
| | | type: "error", |
| | | }); |
| | | return; |
| | |
| | | major: "piping", |
| | | }).then((response) => { |
| | | ElMessage({ |
| | | message: "数据更新成功", |
| | | message: t("plan.message.update"), |
| | | type: "success", |
| | | }); |
| | | loading.value = false; |
| | |
| | | // getList(); |
| | | </script> |
| | | <style lang="scss" scoped> |
| | | .column-with-margin { |
| | | margin-right: 0px; |
| | | } |
| | | .box_container { |
| | | width: 100%; |
| | | margin: 20px auto; |