From 2f71101ad75ce34a9f5f9de6e0d0902093b36ce3 Mon Sep 17 00:00:00 2001
From: chenhj <1263187585@qq.com>
Date: 星期二, 17 三月 2026 11:45:06 +0800
Subject: [PATCH] Merge branch 'dev_衡阳_鹏创电子' of http://114.132.189.42:9002/r/product-inventory-management into dev_衡阳_鹏创电子

---
 src/views/qualityManagement/metricMaintenance/StandardFormDialog.vue |    1 
 src/views/productionManagement/productionOrder/index.vue             |   31 ++
 vite.config.js                                                       |   71 ++----
 src/views/productionManagement/productionOrder/Detail/index.vue      |  499 +++++++++++++++++++++++++++++++++++++++++++++
 src/router/index.js                                                  |   15 +
 5 files changed, 563 insertions(+), 54 deletions(-)

diff --git a/src/router/index.js b/src/router/index.js
index e5dc580..a358858 100644
--- a/src/router/index.js
+++ b/src/router/index.js
@@ -106,6 +106,21 @@
       },
     ],
   },
+
+  // 鐢熶骇璁㈠崟-鐢熶骇璇︽儏锛堝伐搴忚繘搴︼級
+  {
+    path: "/productionManagement/productionOrder/detail",
+    component: Layout,
+    hidden: true,
+    children: [
+      {
+        path: "",
+        component: () => import("@/views/productionManagement/productionOrder/Detail/index.vue"),
+        name: "ProductionOrderDetail",
+        meta: { title: "鐢熶骇璇︽儏", activeMenu: "/productionManagement/productionOrder" },
+      },
+    ],
+  },
 ];
 
 // 鍔ㄦ�佽矾鐢憋紝鍩轰簬鐢ㄦ埛鏉冮檺鍔ㄦ�佸幓鍔犺浇
diff --git a/src/views/productionManagement/productionOrder/Detail/index.vue b/src/views/productionManagement/productionOrder/Detail/index.vue
new file mode 100644
index 0000000..8703826
--- /dev/null
+++ b/src/views/productionManagement/productionOrder/Detail/index.vue
@@ -0,0 +1,499 @@
+<template>
+  <div class="app-container production-order-detail">
+    <PageHeader content="鐢熶骇璇︽儏">
+    </PageHeader>
+
+    <el-card shadow="never" class="mb12">
+      <div class="header">
+        <div class="title">鍩虹淇℃伅</div>
+        <div class="sub">
+          <span class="mr12">鐢熶骇璁㈠崟鍙凤細{{ header.npsNo || "-" }}</span>
+          <span class="mr12">鐢熶骇鎵瑰彿锛歿{ header.lotNo || "-" }}</span>
+          <span class="mr12">浜у搧鍚嶇О锛歿{ header.productCategory || "-" }}</span>
+          <span class="mr12">瑙勬牸锛歿{ header.specificationModel || "-" }}</span>
+        </div>
+      </div>
+    </el-card>
+
+    <el-card shadow="never" class="mb12">
+      <div class="steps-head">
+        <div class="steps-title">宸ュ簭鎵ц杩涘害</div>
+      </div>
+      <div class="steps-body">
+        <div class="steps-left">
+          <div class="steps-wrap">
+            <el-steps
+              class="process-steps"
+              :active="active"
+              finish-status="success"
+              direction="vertical"
+            >
+              <el-step
+                v-for="(p, idx) in processes"
+                :key="p.processCode || idx"
+              >
+                <template #title>
+                  <div
+                    class="step-title"
+                    :class="{ selected: idx === selectedIndex }"
+                    @click="selectProcess(idx)"
+                  >
+                    {{ `${idx + 1}. ${p.processName || "-"}` }}
+                  </div>
+                </template>
+                <template #description>
+                  <div class="step-panel">
+                    <div v-if="idx === active" class="current-progress">
+                      <div class="current-progress-head">
+                        <span class="current-progress-title">褰撳墠宸ュ簭杩涘害</span>
+                        <!-- <span class="current-progress-value">{{ currentProcessPercentage }}%</span> -->
+                      </div>
+                      <el-progress
+                        :percentage="currentProcessPercentage"
+                        :status="currentProcessPercentage >= 100 ? 'success' : ''"
+                        :stroke-width="10"
+                      />
+                    </div>
+                    <div class="step-meta">
+                      <span class="meta-item">
+                        <span class="meta-label">宸ュ簭缂栧彿</span>
+                        <span class="meta-value">{{ p.processCode || "-" }}</span>
+                      </span>
+                      <span class="meta-item">
+                        <span class="meta-label">涓嶈壇鐜�</span>
+                        <span class="meta-value danger">{{ defectRateText(p) }}</span>
+                      </span>
+                    </div>
+                    <div class="step-grid">
+                      <div class="grid-item">
+                        <div class="grid-label">鎶曞叆鏁伴噺</div>
+                        <div class="grid-value">{{ p.inputQty ?? 0 }}</div>
+                      </div>
+                      <div class="grid-item">
+                        <div class="grid-label">浜у嚭鏁伴噺</div>
+                        <div class="grid-value">{{ p.outputQty ?? 0 }}</div>
+                      </div>
+                      <div class="grid-item">
+                        <div class="grid-label">鍚堟牸鏁伴噺</div>
+                        <div class="grid-value success">{{ p.qualifiedQty ?? 0 }}</div>
+                      </div>
+                      <div class="grid-item">
+                        <div class="grid-label">涓嶈壇鏁伴噺</div>
+                        <div class="grid-value danger">{{ p.badQty ?? 0 }}</div>
+                      </div>
+                    </div>
+                  </div>
+                </template>
+              </el-step>
+            </el-steps>
+          </div>
+        </div>
+
+        <div class="steps-right">
+          <div class="right-panel">
+            <div class="right-panel-head">
+              <div class="right-title">鎶ュ伐淇℃伅</div>
+              <div class="right-sub" v-if="selectedProcess">
+                褰撳墠宸ュ簭锛歿{ selectedProcess.processName }}锛坽{ selectedProcess.processCode }}锛�
+              </div>
+            </div>
+
+            <div v-if="!selectedProcess" class="right-empty">
+              鐐瑰嚮宸︿晶鏌愪釜宸ュ簭锛屽彸渚у睍绀鸿宸ュ簭鐨勬姤宸ユ槑缁嗐��
+            </div>
+
+            <div v-else class="right-content">
+              <el-table :data="mockReports" border height="420">
+                <el-table-column label="搴忓彿" type="index" width="60" align="center" />
+                <el-table-column label="鎶ュ伐鍗曞彿" prop="reportNo" min-width="140" show-overflow-tooltip />
+                <el-table-column label="鎶ュ伐浜哄憳" prop="reportUser" min-width="120" show-overflow-tooltip />
+                <el-table-column label="鎶ュ伐鏃堕棿" prop="reportTime" min-width="160" show-overflow-tooltip />
+                <el-table-column label="浜у嚭鏁伴噺" prop="outputQty" min-width="110" />
+                <el-table-column label="涓嶈壇鏁伴噺" prop="badQty" min-width="110" />
+                <el-table-column label="澶囨敞" prop="remark" min-width="160" show-overflow-tooltip />
+              </el-table>
+            </div>
+          </div>
+        </div>
+      </div>
+    </el-card>
+  </div>
+</template>
+
+<script setup>
+import { computed, ref } from "vue";
+import { useRoute, useRouter } from "vue-router";
+
+const route = useRoute();
+
+const header = computed(() => ({
+  orderId: route.query.orderId,
+  npsNo: route.query.npsNo,
+  lotNo: route.query.lotNo,
+  productCategory: route.query.productCategory,
+  specificationModel: route.query.specificationModel,
+}));
+
+// 妯℃嫙宸ュ簭鏁版嵁锛堝悗缁敤鎺ュ彛鏇挎崲锛�
+const processes = computed(() => [
+  {
+    processCode: "GX-001",
+    processName: "澶囨枡",
+    inputQty: 1000,
+    outputQty: 980,
+    qualifiedQty: 970,
+    badQty: 10,
+    status: "success",
+  },
+  {
+    processCode: "GX-002",
+    processName: "鎴愬瀷",
+    inputQty: 980,
+    outputQty: 960,
+    qualifiedQty: 948,
+    badQty: 12,
+    status: "process",
+  },
+  {
+    processCode: "GX-003",
+    processName: "鐑樺共",
+    inputQty: 960,
+    outputQty: 950,
+    qualifiedQty: 948,
+    badQty: 2,
+    status: "wait",
+  },
+  {
+    processCode: "GX-004",
+    processName: "鍖呰鍏ュ簱",
+    inputQty: 950,
+    outputQty: 920,
+    qualifiedQty: 918,
+    badQty: 2,
+    status: "wait",
+  },
+]);
+
+const selectedIndex = ref(null);
+
+const selectProcess = (idx) => {
+  selectedIndex.value = idx;
+};
+
+const selectedProcess = computed(() => {
+  if (selectedIndex.value === null || selectedIndex.value === undefined) return null;
+  return (processes.value || [])[selectedIndex.value] || null;
+});
+
+// 妯℃嫙鎶ュ伐淇℃伅锛堝悗缁敤鎺ュ彛鏇挎崲锛�
+const mockReports = computed(() => {
+  const p = selectedProcess.value;
+  if (!p) return [];
+  const code = p.processCode || "GX";
+  return [
+    {
+      reportNo: `${code}-BG-0001`,
+      reportUser: "寮犱笁",
+      reportTime: "2026-03-14 09:20",
+      outputQty: Math.floor((p.outputQty ?? 0) * 0.4),
+      badQty: Math.floor((p.badQty ?? 0) * 0.4),
+      remark: "姝e父鎶ュ伐",
+    },
+    {
+      reportNo: `${code}-BG-0002`,
+      reportUser: "鏉庡洓",
+      reportTime: "2026-03-14 13:45",
+      outputQty: Math.floor((p.outputQty ?? 0) * 0.35),
+      badQty: Math.floor((p.badQty ?? 0) * 0.35),
+      remark: "璁惧璋冭瘯鍚庢仮澶�",
+    },
+    {
+      reportNo: `${code}-BG-0003`,
+      reportUser: "鐜嬩簲",
+      reportTime: "2026-03-14 17:10",
+      outputQty: Math.max(0, (p.outputQty ?? 0) - Math.floor((p.outputQty ?? 0) * 0.75)),
+      badQty: Math.max(0, (p.badQty ?? 0) - Math.floor((p.badQty ?? 0) * 0.75)),
+      remark: "鏀跺熬",
+    },
+  ];
+});
+
+const clampPercentage = (val) => {
+  const n = Number(val);
+  if (!Number.isFinite(n)) return 0;
+  if (n <= 0) return 0;
+  if (n >= 100) return 100;
+  return Math.round(n);
+};
+
+// el-steps: active 涓哄綋鍓嶈繘琛屼腑鐨勬楠や笅鏍囷紙妯℃嫙锛�
+const active = computed(() => {
+  const list = processes.value || [];
+  const idx = list.findIndex((p) => p.status === "process");
+  return idx >= 0 ? idx : 0;
+});
+
+const currentProcess = computed(() => {
+  const list = processes.value || [];
+  return list[active.value] || null;
+});
+
+// 褰撳墠宸ュ簭杩涘害锛氱敤浜у嚭/鎶曞叆浼扮畻锛圲I 鍏堣窇閫氾紝鍚庣画鎸夌湡瀹炶鍒欐浛鎹級
+const currentProcessPercentage = computed(() => {
+  const p = currentProcess.value;
+  if (!p) return 0;
+  const input = Number(p.inputQty ?? 0);
+  const output = Number(p.outputQty ?? 0);
+  if (!Number.isFinite(input) || input <= 0) return 0;
+  return clampPercentage((output / input) * 100);
+});
+
+// 涓嶈壇鐜囷細涓嶈壇鏁伴噺 / 浜у嚭鏁伴噺锛堝厛鎸夋鍙e緞锛屽悗缁鎺ユ帴鍙e彲璋冩暣锛�
+const defectRateText = (p) => {
+  const bad = Number(p?.badQty ?? 0);
+  const output = Number(p?.outputQty ?? 0);
+  if (!Number.isFinite(bad) || bad <= 0) return "0%";
+  if (!Number.isFinite(output) || output <= 0) return "0%";
+  const rate = (bad / output) * 100;
+  return `${rate.toFixed(2)}%`;
+};
+</script>
+
+<style scoped lang="scss">
+.production-order-detail {
+  // 宸︿晶姝ラ鍖虹殑鍙楂樺害锛氶殢灞忓箷楂樺害鑷�傚簲
+  // 杩欓噷鍑忓幓椤甸潰椤堕儴锛圥ageHeader + 鍩虹淇℃伅鍗$墖 + 杈硅窛绛夛級鐨勫ぇ鑷撮珮搴�
+  --steps-left-height: calc(100vh - 320px);
+
+  .header {
+    display: flex;
+    flex-direction: column;
+    gap: 8px;
+    .title {
+      font-size: 16px;
+      font-weight: 600;
+      color: #303133;
+    }
+    .sub {
+      color: #606266;
+      display: flex;
+      flex-wrap: wrap;
+      row-gap: 6px;
+    }
+  }
+
+  .steps-head {
+    display: flex;
+    flex-direction: column;
+    gap: 4px;
+    margin-bottom: 12px;
+    .steps-title {
+      font-size: 14px;
+      font-weight: 600;
+      color: #303133;
+    }
+    .steps-desc {
+      font-size: 12px;
+      color: #909399;
+    }
+  }
+
+  .steps-wrap {
+    padding: 4px 0 0;
+    height: 100%;
+    overflow-y: auto;
+  }
+
+  .steps-body {
+    display: flex;
+    gap: 16px;
+    align-items: flex-start;
+  }
+  .steps-left {
+    flex: 0 0 50%;
+    max-width: 50%;
+    min-width: 0;
+    height: var(--steps-left-height);
+    overflow: hidden;
+  }
+  .steps-right {
+    flex: 1;
+    min-width: 0;
+  }
+
+  .step-title {
+    cursor: pointer;
+    display: inline-flex;
+    align-items: center;
+    padding: 2px 6px;
+    border-radius: 6px;
+    transition: background-color 0.15s ease;
+    &:hover {
+      background: #f5f7fa;
+    }
+    &.selected {
+      background: rgba(64, 158, 255, 0.12);
+      color: #409eff;
+    }
+  }
+
+  .process-steps {
+    width: 100%;
+    :deep(.el-step__title) {
+      font-weight: 600;
+    }
+    :deep(.el-step__description) {
+      font-size: 12px;
+      color: #606266;
+      line-height: 18px;
+      margin-top: 8px;
+      width: 100%;
+    }
+    :deep(.el-step__main) {
+      padding-bottom: 20px;
+      width: 100%;
+    }
+    :deep(.el-step__icon.is-text) {
+      border-color: #dcdfe6;
+    }
+    :deep(.el-step.is-vertical) {
+      align-items: flex-start;
+    }
+    :deep(.el-step__head) {
+      width: 28px;
+      flex: 0 0 28px;
+    }
+    :deep(.el-step__main) {
+      flex: 1;
+      min-width: 0;
+      padding-right: 6px;
+    }
+  }
+
+  .step-panel {
+    background: #f6f8fb;
+    border: 1px solid #ebeef5;
+    border-radius: 10px;
+    padding: 12px 12px 10px;
+    width: 100%;
+    max-width: none;
+    box-sizing: border-box;
+  }
+
+  .right-panel {
+    border: 1px solid #ebeef5;
+    border-radius: 10px;
+    background: #ffffff;
+    padding: 12px;
+    min-height: 520px;
+    box-sizing: border-box;
+  }
+  .right-panel-head {
+    display: flex;
+    flex-direction: column;
+    gap: 4px;
+    margin-bottom: 12px;
+  }
+  .right-title {
+    font-size: 14px;
+    font-weight: 700;
+    color: #303133;
+  }
+  .right-sub {
+    font-size: 12px;
+    color: #909399;
+  }
+  .right-empty {
+    height: 100%;
+    min-height: 460px;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    color: #909399;
+    background: #fafafa;
+    border: 1px dashed #dcdfe6;
+    border-radius: 10px;
+  }
+
+  .current-progress {
+    background: #ffffff;
+    border: 1px dashed #dcdfe6;
+    border-radius: 10px;
+    padding: 10px 12px 8px;
+    margin-bottom: 10px;
+    .current-progress-head {
+      display: flex;
+      align-items: center;
+      justify-content: space-between;
+      margin-bottom: 6px;
+    }
+    .current-progress-title {
+      color: #303133;
+      font-weight: 600;
+      font-size: 12px;
+    }
+    .current-progress-value {
+      color: #606266;
+      font-size: 12px;
+      font-weight: 600;
+    }
+  }
+
+  .step-meta {
+    display: flex;
+    gap: 16px;
+    margin-bottom: 10px;
+    .meta-item {
+      display: inline-flex;
+      gap: 8px;
+      align-items: center;
+    }
+    .meta-label {
+      color: #909399;
+    }
+    .meta-value {
+      color: #303133;
+      font-weight: 600;
+      &.danger {
+        color: #f56c6c;
+      }
+    }
+  }
+
+  .step-grid {
+    display: grid;
+    grid-template-columns: repeat(4, minmax(0, 1fr));
+    gap: 10px;
+    .grid-item {
+      background: #ffffff;
+      border: 1px solid #ebeef5;
+      border-radius: 10px;
+      padding: 10px 10px 8px;
+    }
+    .grid-label {
+      font-size: 12px;
+      color: #909399;
+      margin-bottom: 6px;
+    }
+    .grid-value {
+      font-size: 16px;
+      font-weight: 700;
+      color: #303133;
+      &.success {
+        color: #67c23a;
+      }
+      &.danger {
+        color: #f56c6c;
+      }
+    }
+  }
+
+  .mb12 {
+    margin-bottom: 12px;
+  }
+  .mr12 {
+    margin-right: 12px;
+  }
+}
+</style>
+
diff --git a/src/views/productionManagement/productionOrder/index.vue b/src/views/productionManagement/productionOrder/index.vue
index 5db077d..7018d63 100644
--- a/src/views/productionManagement/productionOrder/index.vue
+++ b/src/views/productionManagement/productionOrder/index.vue
@@ -58,11 +58,13 @@
                 @selection-change="handleSelectionChange"
                 @pagination="pagination">
         <template #completionStatus="{ row }">
-          <el-progress
-            :percentage="toProgressPercentage(row?.completionStatus)"
-            :color="progressColor(toProgressPercentage(row?.completionStatus))"
-            :status="toProgressPercentage(row?.completionStatus) >= 100 ? 'success' : ''"
-          />
+          <div class="progress-link" @click="goProductionDetail(row)">
+            <el-progress
+              :percentage="toProgressPercentage(row?.completionStatus)"
+              :color="progressColor(toProgressPercentage(row?.completionStatus))"
+              :status="toProgressPercentage(row?.completionStatus) >= 100 ? 'success' : ''"
+            />
+          </div>
         </template>
       </PIMTable>
     </div>
@@ -213,6 +215,7 @@
         {
           name: "宸ヨ壓璺嚎",
           type: "text",
+          showHide: row => row.processRouteCode,
           clickFun: row => {
             showRouteItemModal(row);
           },
@@ -422,6 +425,20 @@
     });
   };
 
+  const goProductionDetail = (row) => {
+    if (!row) return;
+    router.push({
+      path: "/productionManagement/productionOrder/detail",
+      query: {
+        orderId: row.id,
+        npsNo: row.npsNo || "",
+        lotNo: row.lotNo || "",
+        productCategory: row.productCategory || "",
+        specificationModel: row.specificationModel || "",
+      },
+    });
+  };
+
   // 琛ㄦ牸閫夋嫨鏁版嵁
   const handleSelectionChange = (selection) => {
     selectedRows.value = selection;
@@ -491,4 +508,8 @@
 ::v-deep .purple{
   background-color: #F4DEFA;
 }
+.progress-link {
+  cursor: pointer;
+}
+
 </style>
diff --git a/src/views/qualityManagement/metricMaintenance/StandardFormDialog.vue b/src/views/qualityManagement/metricMaintenance/StandardFormDialog.vue
index 38d535a..1ac03aa 100644
--- a/src/views/qualityManagement/metricMaintenance/StandardFormDialog.vue
+++ b/src/views/qualityManagement/metricMaintenance/StandardFormDialog.vue
@@ -25,6 +25,7 @@
           <el-option label="鍘熸潗鏂欐楠�" value="0" />
           <el-option label="杩囩▼妫�楠�" value="1" />
           <el-option label="鍑哄巶妫�楠�" value="2" />
+          <el-option label="宸℃" value="3" />
         </el-select>
       </el-form-item>
       <el-form-item label="宸ュ簭" prop="processId">
diff --git a/vite.config.js b/vite.config.js
index dd8a7e0..337183a 100644
--- a/vite.config.js
+++ b/vite.config.js
@@ -7,74 +7,61 @@
   const env = loadEnv(mode, process.cwd());
   const { VITE_APP_ENV } = env;
   const baseUrl =
-    env.VITE_APP_ENV === "development"
-      ? "http://192.168.1.35:9009"
-      : env.VITE_BASE_API;
+      env.VITE_APP_ENV === "development"
+          ? "http://1.15.17.182:9009"
+          : env.VITE_BASE_API;
   const javaUrl =
-    env.VITE_APP_ENV === "development"
-      ? "http://192.168.1.35:9009"
-      : env.VITE_JAVA_API;
-
+      env.VITE_APP_ENV === "development"
+          ? "http://1.15.17.182:9009"
+          : env.VITE_JAVA_API;
   return {
-    define: {
-      __BASE_API__: JSON.stringify(javaUrl),
+    define:{
+      __BASE_API__: JSON.stringify(javaUrl)
     },
+    // 閮ㄧ讲鐢熶骇鐜鍜屽紑鍙戠幆澧冧笅鐨刄RL銆�
+    // 榛樿鎯呭喌涓嬶紝vite 浼氬亣璁句綘鐨勫簲鐢ㄦ槸琚儴缃插湪涓�涓煙鍚嶇殑鏍硅矾寰勪笂
+    // 渚嬪 https://www.ruoyi.vip/銆傚鏋滃簲鐢ㄨ閮ㄧ讲鍦ㄤ竴涓瓙璺緞涓婏紝浣犲氨闇�瑕佺敤杩欎釜閫夐」鎸囧畾杩欎釜瀛愯矾寰勩�備緥濡傦紝濡傛灉浣犵殑搴旂敤琚儴缃插湪 https://www.ruoyi.vip/admin/锛屽垯璁剧疆 baseUrl 涓� /admin/銆�
     base: VITE_APP_ENV === "production" ? "/" : "/",
     plugins: createVitePlugins(env, command === "build"),
     resolve: {
+      // https://cn.vitejs.dev/config/#resolve-alias
       alias: {
+        // 璁剧疆璺緞
         "~": path.resolve(__dirname, "./"),
+        // 璁剧疆鍒悕
         "@": path.resolve(__dirname, "./src"),
       },
+      // https://cn.vitejs.dev/config/#resolve-extensions
       extensions: [".mjs", ".js", ".ts", ".jsx", ".tsx", ".json", ".vue"],
-      dedupe: ["vue", "axios"], // 鍘婚噸閲嶅渚濊禆
     },
-    // 鍏ㄥ眬寮�鍚瀯寤虹紦瀛橈紙鏍稿績锛�
-    cacheDir:
-      "/var/jenkins_home/workspace/瀹㈡埛-楣忓垱鐢靛瓙鍓嶇/node_modules/.vite",
-    // 渚濊禆棰勬瀯寤轰紭鍖�
-    optimizeDeps: {
-      include: ["vue", "axios", "element-plus", "echarts"], // 鏍规嵁椤圭洰渚濊禆璋冩暣
-      esbuildOptions: {
-        target: "es2020",
-      },
-    },
-    // 鎵撳寘閰嶇疆锛堟牳蹇冧紭鍖栧尯锛�
+    // 鎵撳寘閰嶇疆
     build: {
-      sourcemap: false, // 褰诲簳鍏抽棴鐢熶骇鐜sourcemap
+      // https://vite.dev/config/build-options.html
+      sourcemap: command === "build" ? false : "inline",
       outDir: "dist",
       assetsDir: "assets",
       chunkSizeWarningLimit: 2000,
-      minify: "esbuild", // 浣跨敤 esbuild 鍘嬬缉锛堟棤闇�棰濆渚濊禆锛�
-      reportCompressedSize: false, // 鍏抽棴浜х墿浣撶Н鎶ュ憡锛屽噺灏戣�楁椂
-      commonjsOptions: {
-        include: [/node_modules/, /\.commonjs$/],
-      },
       rollupOptions: {
         output: {
           chunkFileNames: "static/js/[name]-[hash].js",
           entryFileNames: "static/js/[name]-[hash].js",
           assetFileNames: "static/[ext]/[name]-[hash].[ext]",
-          // 鍒嗗寘绛栫暐锛堟媶鍒嗗ぇ渚濊禆锛�
-          manualChunks: {
-            vendor: ["vue", "vue-router", "pinia", "axios"],
-            ui: ["element-plus"], // 鏍规嵁瀹為檯UI搴撹皟鏁�
-            charts: ["echarts"], // 鏈夊浘琛ㄥ簱鍒欎繚鐣欙紝鏃犲垯鍒犻櫎
-          },
         },
-        cache: true,
       },
     },
+    // vite 鐩稿叧閰嶇疆
     server: {
-      port: 8001,
+      port: 80,
       host: true,
       open: true,
       proxy: {
+        // https://cn.vitejs.dev/config/#server-proxy
         "/dev-api": {
           target: baseUrl,
           changeOrigin: true,
           rewrite: (p) => p.replace(/^\/dev-api/, ""),
         },
+        // springdoc proxy
         "^/v3/api-docs/(.*)": {
           target: baseUrl,
           changeOrigin: true,
@@ -96,20 +83,6 @@
           },
         ],
       },
-      // CSS 棰勭紪璇戠紦瀛�
-      preprocessorOptions: {
-        scss: {
-          cacheDirectory: path.resolve(
-            __dirname,
-            "./node_modules/.vite/scss-cache"
-          ),
-        },
-      },
-    },
-    // esbuild 鍏ㄥ眬閰嶇疆
-    esbuild: {
-      logOverride: { "this-is-undefined-in-esm": "silent" },
-      target: "es2020",
     },
   };
 });

--
Gitblit v1.9.3