From fdd158306bf6dc3584f5110a385323f4a8dfb463 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期三, 02 九月 2026 14:25:10 +0800
Subject: [PATCH] feat(wms): 重构仓库管理系统并优化图表显示

---
 src/views/dashboard/bagCodeHome/index.vue |  120 +++++++++++++++++++++++++++++++++++++++++++++++++----------
 1 files changed, 99 insertions(+), 21 deletions(-)

diff --git a/src/views/dashboard/bagCodeHome/index.vue b/src/views/dashboard/bagCodeHome/index.vue
index 3887aca..c268b96 100644
--- a/src/views/dashboard/bagCodeHome/index.vue
+++ b/src/views/dashboard/bagCodeHome/index.vue
@@ -1,5 +1,6 @@
 <script lang="ts" setup>
 import type { MesBagCodeHomeApi } from '#/api/mes/bag-code-home';
+import type { MesTraceCrossRegionApi } from '#/api/mes/trace-cross-region';
 
 import { onMounted, ref } from 'vue';
 import { useRouter } from 'vue-router';
@@ -9,12 +10,16 @@
 import { Col, Row, message } from 'ant-design-vue';
 
 import { getBagCodeHomeSummary } from '#/api/mes/bag-code-home';
+import { getTraceCrossRegionSummary } from '#/api/mes/trace-cross-region';
+import { getTraceConsumerScanSummary } from '#/api/mes/trace-consumer-scan';
 
 import { defaultSummary } from './data';
-import BagCodeCards from './modules/bag-code-cards.vue';
+import AlertPanel from './modules/alert-panel.vue';
 import BagCodeStatusChart from './modules/bag-code-status-chart.vue';
-import BasicCards from './modules/basic-cards.vue';
 import BatchStatusChart from './modules/batch-status-chart.vue';
+import BusinessFlow from './modules/business-flow.vue';
+import KpiCards from './modules/kpi-cards.vue';
+import ScanRegionChart from './modules/scan-region-chart.vue';
 import Shortcuts from './modules/shortcuts.vue';
 import TrendChart from './modules/trend-chart.vue';
 
@@ -22,6 +27,8 @@
 
 const router = useRouter();
 const summary = ref<MesBagCodeHomeApi.Summary>(defaultSummary); // 棣栭〉姹囨�荤粺璁�
+const crossRegion = ref<MesTraceCrossRegionApi.Summary>({}); // 绐滆揣棰勮姹囨��
+const scanTotal = ref(0); // 绱鎵爜娆℃暟
 
 /** 璺宠浆鍒扮洰鏍囬〉闈紙鎸夎矾鐢� name锛屾湭鍔犺浇鏃舵彁绀猴級 */
 async function handleNavigate(name: string) {
@@ -32,9 +39,12 @@
   }
 }
 
-/** 鍔犺浇棣栭〉姹囨�荤粺璁� */
+/** 鍔犺浇棣栭〉姹囨�荤粺璁°�佺獪璐ч璀︽眹鎬汇�佹秷璐硅�呮壂鐮佹眹鎬� */
 async function loadSummary() {
   summary.value = await getBagCodeHomeSummary();
+  crossRegion.value = await getTraceCrossRegionSummary();
+  const scan = await getTraceConsumerScanSummary();
+  scanTotal.value = scan.total ?? 0;
 }
 
 onMounted(() => {
@@ -44,26 +54,94 @@
 
 <template>
   <Page>
-    <!-- 绗竴琛岋細鍩虹鏁版嵁鍗$墖 -->
-    <BasicCards :summary="summary" class="mb-2" @navigate="handleNavigate" />
+    <div class="agri-dashboard">
+      <!-- 绗竴琛岋細涓氬姟鍏ㄩ摼璺� -->
+      <BusinessFlow
+        :cross-region-total="crossRegion.total ?? 0"
+        :scan-total="scanTotal"
+        :summary="summary"
+        @navigate="handleNavigate"
+      />
 
-    <!-- 绗簩琛岋細涓�琚嬩竴鐮佸崱鐗� -->
-    <BagCodeCards :summary="summary" class="mb-4" @navigate="handleNavigate" />
+      <!-- 绗簩琛岋細鍏ㄩ摼璺� KPI 鎬昏 -->
+      <KpiCards :scan-total="scanTotal" :summary="summary" @navigate="handleNavigate" />
 
-    <!-- 绗笁琛岋細琚嬬爜瓒嬪娍 + 鎵规/琚嬬爜鐘舵�佸垎甯� -->
-    <Row :gutter="16" class="mb-4">
-      <Col :lg="12" :md="24" :sm="24" :xl="12" :xs="24" class="mb-4">
-        <TrendChart />
-      </Col>
-      <Col :lg="6" :md="12" :sm="24" :xl="6" :xs="24" class="mb-4">
-        <BatchStatusChart :list="summary.batchStatusList" />
-      </Col>
-      <Col :lg="6" :md="12" :sm="24" :xl="6" :xs="24" class="mb-4">
-        <BagCodeStatusChart :list="summary.bagCodeStatusList" />
-      </Col>
-    </Row>
+      <!-- 绗笁琛岋細琚嬬爜鐢熸垚瓒嬪娍 + 娑堣垂鑰呮壂鐮佸湴鍖哄垎甯� -->
+      <Row :gutter="16" class="mb-4">
+        <Col :lg="12" :md="24" :sm="24" :xl="12" :xs="24" class="mb-4">
+          <TrendChart />
+        </Col>
+        <Col :lg="12" :md="24" :sm="24" :xl="12" :xs="24" class="mb-4">
+          <ScanRegionChart />
+        </Col>
+      </Row>
 
-    <!-- 绗洓琛岋細蹇嵎鍏ュ彛 -->
-    <Shortcuts @navigate="handleNavigate" />
+      <!-- 绗洓琛岋細鎵规/琚嬬爜鐘舵�佸垎甯� + 寰呭姙涓庨璀� -->
+      <Row :gutter="16" class="mb-4">
+        <Col :lg="6" :md="12" :sm="24" :xl="6" :xs="24" class="mb-4">
+          <BatchStatusChart :list="summary.batchStatusList" />
+        </Col>
+        <Col :lg="6" :md="12" :sm="24" :xl="6" :xs="24" class="mb-4">
+          <BagCodeStatusChart :list="summary.bagCodeStatusList" />
+        </Col>
+        <Col :lg="12" :md="24" :sm="24" :xl="12" :xs="24" class="mb-4">
+          <AlertPanel :cross-region="crossRegion" :summary="summary" @navigate="handleNavigate" />
+        </Col>
+      </Row>
+
+      <!-- 绗簲琛岋細鎸変笟鍔″煙鍒嗙粍鐨勫揩鎹峰叆鍙� -->
+      <Shortcuts @navigate="handleNavigate" />
+    </div>
   </Page>
 </template>
+
+<style lang="scss">
+/* 鍐滀笟缈犵豢鐜荤拑鎷熸�侀椤典富棰� 鈥斺�� 瀵归綈鐧诲綍椤� `agri-auth` 鑹茶皟锛岄噰鐢ㄦ洿娓呮贰鐨勬祬鑹茬幓鐠冧笌楂樼骇娓愬彉 */
+.agri-dashboard {
+  position: relative;
+  padding: 1rem;
+  border-radius: 1.25rem;
+  background:
+    radial-gradient(900px 480px at 8% 0%, rgba(110, 231, 183, 0.42), transparent 55%),
+    radial-gradient(800px 420px at 96% 100%, rgba(6, 95, 70, 0.12), transparent 60%),
+    linear-gradient(160deg, #f0fdf9 0%, #dcf7ea 50%, #c7f0d9 100%);
+  isolation: isolate;
+  color: #0f5c49;
+
+  /* 楂樼骇鐧界幓鐠冨崱鐗囷細鍐呮弿杈� + 纾ㄧ爞 + 鏌斿拰灞傛闃村奖 */
+  .ant-card {
+    color: #135746;
+    background: linear-gradient(160deg, rgba(255, 255, 255, 0.92), rgba(255, 255, 255, 0.55));
+    border: 1px solid rgba(16, 185, 129, 0.18);
+    box-shadow:
+      inset 0 1px 0 rgba(255, 255, 255, 0.8),
+      0 12px 30px rgba(6, 78, 59, 0.08);
+    backdrop-filter: blur(14px);
+  }
+
+  .ant-card-head {
+    border-bottom-color: rgba(16, 185, 129, 0.14);
+  }
+
+  .ant-card-head-title,
+  .ant-card-head-title .anticon {
+    color: #0f766e;
+  }
+
+  .ant-card:hover {
+    box-shadow:
+      inset 0 1px 0 rgba(255, 255, 255, 0.9),
+      0 18px 44px rgba(6, 78, 59, 0.14);
+    border-color: rgba(16, 185, 129, 0.34);
+  }
+
+  /* 瑕嗙洊 App 娴呰壊涓婚鐨勮涔夎壊锛氱粺涓�涓烘煍鍜屽ⅷ缁� */
+  .text-muted-foreground {
+    color: rgba(15, 78, 60, 0.62);
+  }
+
+  .text-2xl.font-bold {
+    color: #047857;
+  }
+}
+</style>

--
Gitblit v1.9.3