CD配唱片
2025-04-25 8bb7824522c4e5a73cbcb642db02ab68d1d1ad4f
提交负载统计页面搭建
已修改4个文件
226 ■■■■■ 文件已修改
.env.development 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mainPlan/gasPlanning/index.vue 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mainPlan/gasProduceStatics/index.vue 209 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
vite.config.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.env.development
@@ -9,4 +9,5 @@
# 标识本地开发服务,用于GateWay转发到本地服务
# 配合后端服务
# VITE_APP_LOCAL = 'int'
VITE_APP_LOCAL = 'zhl'
# VITE_APP_LOCAL = 'zhl'
VITE_APP_LOCAL = 'hjy'
src/views/mainPlan/gasPlanning/index.vue
@@ -56,7 +56,7 @@
          :loading="loading"
          :height="height"
          :edit-config="{ mode: 'row', trigger: 'click', showStatus: true }"
          :data="gasPlanList"
          :data="routePlanList"
          @cell-click="cellClickEvent"
        >
          <vxe-column field="processName" title="标准工序名称" min-width="150">
@@ -282,7 +282,7 @@
</template>
<script setup>
import HxlhTable from "@/components/HxlhTable";
import { ElInputNumber } from "element-plus";
import { ElMessage } from "element-plus";
import { listGasPlan, getGasPlanSave } from "@/api/mainPlan/gasPlanning";
const height = ref(document.documentElement.clientHeight - 400 + "px;");
const loading = ref(false);
@@ -463,7 +463,11 @@
  ...gasPlanList.value,
  ...routePlanList.value
 ])
 proxy.$modal.msgSuccess("保存成功");
 ElMessage({
    message: "数据保存成功",
    type: "success",
  });
  handleQuery()
 console.log(res,"akiwjciwj")
}
onMounted(() => {
src/views/mainPlan/gasProduceStatics/index.vue
@@ -0,0 +1,209 @@
<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>
      <right-toolbar @queryTable="getList" :search="false"></right-toolbar>
    </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,
  stripe: 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>
vite.config.js
@@ -17,7 +17,7 @@
  const proxyConfig = () => {
    const personProxy = {
      "/prod-api": {
        target: "http://192.168.50.13:8080", // 开发环境的后端地址
        target: "http://192.168.50.160:8080",//"http://192.168.50.13:8080", // 开发环境的后端地址
        changeOrigin: true,
        rewrite: (path) => path.replace(/^\/prod-api/, ""),
      },
@@ -48,7 +48,7 @@
    switch (VITE_APP_ENV) {
      case "development":
        return devProxy;
        return personProxy;
      case "int":
        return devProxy;
      case "uat":