chengxiangling
2025-05-12 177efcfe53a16efa7b2b8cf9b1bb38682b7a82f2
src/views/mainPlan/gasProduceStatics/index.vue
@@ -6,10 +6,10 @@
      ref="queryRef"
      :inline="true"
      v-show="showSearch"
      label-width="68px"
      :label-width="locale === 'zh' ? '68px' : '134px'"
    >
      <el-row type="flex" justify="left">
        <el-form-item label="统计方式">
        <el-form-item :label="$t('plan.query.statistical')">
          <el-select
            v-model="queryParams.searchType"
            style="width: 200px"
@@ -24,30 +24,32 @@
            />
          </el-select>
        </el-form-item>
        <el-form-item label="选择区间">
        <el-form-item :label="$t('plan.query.selectDateRange')">
          <div v-if="!dayCom">
            <el-date-picker
              v-model="queryParams.monthRange"
              type="monthrange"
              range-separator="至"
              start-placeholder="选择开始月份"
              end-placeholder="选择结束月份"
              :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
              v-model="queryParams.monthDays"
              type="month"
              placeholder="选择月份"
              :placeholder="$t('plan.placeholder.selectMonth')"
            />
          </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-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-row>
    </el-form>
@@ -58,58 +60,43 @@
          plain
          icon="Download"
          @click="handleExport"
          v-hasPermi="['apsPartRouteStat:export']"
          >导出</el-button
          v-hasPermi="['aps:apsGasPipingRouteStat:exportExcel']"
          :disabled="loading"
          >{{ $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="['apsPartRouteStat:edit']"
          >更新</el-button
          v-hasPermi="['aps:apsGasPipingRouteStat:computeCapacity']"
          :disabled="loading"
          >{{ $t("common.common.update") }}</el-button
        >
      </el-col>
      <right-toolbar @queryTable="getList" :search="false"></right-toolbar>
      <right-toolbar @queryTable="handleQuery" :search="false"></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>
    <div class="box_container">
      <div class="title_text">气柜规划产能负载统计</div>
      <div class="tabel_container">
        <vxe-grid
          ref="gridRef2"
          v-bind="gridOptions"
          :loading="loading"
        ></vxe-grid>
      </div>
    </div>
    <vxe-grid ref="gridRef" v-bind="gridOptions" :loading="loading"></vxe-grid>
  </div>
</template>
<script setup name="gasProduceStatics">
<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 loading = ref(false);
const gridRef = ref();
const gridRef2 = ref();
const height = ref(document.documentElement.clientHeight - 400 + "px;");
const height = ref(document.documentElement.clientHeight - 180 + "px;");
const headers = ref([]);
const exportData = ref([]);
const showSearch = ref(true);
@@ -117,20 +104,11 @@
  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,
@@ -158,9 +136,29 @@
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
  console.log(e,searchTypeValue.value, "sjcsuhcushc");
  searchTypeValue.value = e;
  if (e === "day") {
    dayCom.value = true;
  } else {
@@ -173,167 +171,24 @@
  const year = dateTime.getFullYear();
  const month = String(dateTime.getMonth() + 1).padStart(2, "0"); // 月份从0开始,所以需要加1,并用padStart补零
  // 格式化年份和月份为 "yyyy-mm" 格式的字符串
  return`${year}-${month}`;
  return `${year}-${month}`;
}
/** 查询零件统计表列表 */
function getPipeList() {
  let sYearMonth = "";
  let eYearMonth = "";
  // let type = "";
  // options.map((item) => {
  //   if (queryParams.value.searchType === item.label) {
  //     type = item.value;
  //   }
  // });
function dateRangeStr(monthRange) {
  // 创建一个Date对象
  let sDate = new Date(queryParams.value.monthRange[0]);
  let eDate = new Date(queryParams.value.monthRange[1]);
  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"的形式
  sYearMonth = `${sYear}-${sMonth.toString().padStart(2, "0")}`;
  eYearMonth = `${eYear}-${eMonth.toString().padStart(2, "0")}`;
  console.log(sYearMonth, eYearMonth, "yearMonth");
  let rowKey = 0;
  let colKey = 0;
  headers.value = [];
  exportData.value = [];
  tableColumn = [];
  tableData = [];
  loading.value = true;
  listGasProduceStatics({
    searchStartDate:
      queryParams.value.searchType === "按月统计"
        ? sYearMonth
        : dateStr(queryParams.value.monthDays),
    searchEndDate:
      queryParams.value.searchType === "按月统计"
        ? eYearMonth
        : dateStr(queryParams.value.monthDays),
    searchType: searchTypeValue.value,
    major:'piping'
  }).then((response) => {
    console.log(response.data.planTable,'responseresponseresponse')
    const colList = [];
    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
        })
      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: `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.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}`] = 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;
    }
  });
  return {
    sYearMonth: `${sYear}-${sMonth.toString().padStart(2, "0")}`,
    eYearMonth: `${eYear}-${eMonth.toString().padStart(2, "0")}`,
  };
}
function getGasList() {
  let sYearMonth = "";
  let eYearMonth = "";
  // let type = "";
  // options.map((item) => {
  //   if (queryParams.value.searchType === item.label) {
  //     type = item.value;
  //   }
  // });
  // 创建一个Date对象
  let sDate = new Date(queryParams.value.monthRange[0]);
  let eDate = new Date(queryParams.value.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"的形式
  sYearMonth = `${sYear}-${sMonth.toString().padStart(2, "0")}`;
  eYearMonth = `${eYear}-${eMonth.toString().padStart(2, "0")}`;
  console.log(sYearMonth, eYearMonth, "yearMonth");
  let rowKey = 0;
  let colKey = 0;
  headers.value = [];
@@ -342,117 +197,176 @@
  tableData = [];
  loading.value = true;
  listGasProduceStatics({
    searchStartDate:
      queryParams.value.searchType === "按月统计"
        ? sYearMonth
        : dateStr(queryParams.value.monthDays),
    searchEndDate:
      queryParams.value.searchType === "按月统计"
        ? eYearMonth
        : dateStr(queryParams.value.monthDays),
    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'
    major: "gas",
  }).then((response) => {
    console.log(response.data.planTable,'responseresponseresponse')
    const colList = [];
    let headersOne = [];
    let headersTwo = [];
    if(response.code == '200'){
    if (response.code == "200") {
      if (!response.data.planTitle) {
        loading.value = false;
        return;
      }
      headersOne.push('日期');
      headersTwo.push('工序名称');
      headersOne.push(t("plan.table.dateYearMonth"));
      headersTwo.push(t("plan.table.processName"));
      colList.push({
          field: 'dateCol',
          title: '日期',
          fixed: 'left',
          children: [
            { field: `resourceName`, title: '工序名称', width: 250, type: 'html'},
          ],
          width: 160
        })
      response.data.planTitle.forEach(item => {
        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++
        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: '设计产能', width: 80},
          { field: `requireTimes${colKey}`, title: '需求产能', width: 80},
          { field: `capacityLoad${colKey}`, title: '产能负载', width: 80, type: 'html'},
            {
              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
        })
          width: 160,
        });
      });
      headers.value.push(headersOne);
      headers.value.push(headersTwo);
      const columnList = [...tableColumn, ...colList]
      const dataList = []
      const columnList = [...tableColumn, ...colList];
      const dataList = [];
      let startCol = 1;
      //获取map
      response.data.planTable.map(mapItem => {
        rowKey++
      response.data.planTable.map((mapItem) => {
        rowKey++;
        let lastCol = startCol + 2;
        merges.push({ s: { r: 0, c: startCol }, e: { r: 0, c:  lastCol} });
        merges.push({ s: { r: 0, c: startCol }, e: { r: 0, c: lastCol } });
        startCol = lastCol + 1;
        let data = [];
        const item = {
          id: `${rowKey}`
        }
          id: `${rowKey}`,
        };
        for (const [key, listValue] of Object.entries(mapItem)) {
          data.push(key);
          let tableKey = 0;
          let flag = false;
          listValue.forEach(listItem => {
            tableKey++
          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+'%';
            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;
            }
            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;
          // item[`resourceName`] = flag
          //   ? `<div class='el-badge'><sup class="el-badge__content is-fixed is-dot"></sup>${key}</div>`
          //   : key;
          item[`resourceName`] = key;
        }
        exportData.value.push(data);
        dataList.push(item);
      });
      const $grid = gridRef2.value
      const $grid = gridRef.value;
      if ($grid) {
        tableColumn = columnList
        tableData = [...tableData, ...dataList]
        $grid.loadColumn(tableColumn)
        $grid.loadData(tableData)
        gridOptions.loading = false
        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`
  );
}
@@ -463,28 +377,52 @@
    (!queryParams.value.monthDays && dayCom.value == true)
  ) {
    ElMessage({
      message: "请选择年月",
      message: t("plan.message.errorMonthEmpty"),
      type: "error",
    });
    return;
  }
  // queryParams.value.pageNum = 1;
  getPipeList();
  getGasList();
}
/** 重置按钮操作 */
function resetQuery() {
  proxy.resetForm("queryRef");
  handleQuery();
  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() {
  updateStat().then((response) => {
    if (response.code == "200") {
        getPipeList();
        getGasList();
    }
  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();
  });
}