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