From 93c9b23160dae882b982c97db941fc3bf8d38c25 Mon Sep 17 00:00:00 2001
From: heshaofeng <heshaofeng@hnkhzn.com>
Date: 星期一, 29 十二月 2025 14:36:05 +0800
Subject: [PATCH] 1
---
项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_DTO/Stock/StockInfoDetailWithPalletDto.cs | 1
项目代码/WIDESEA_WMSClient/src/views/charts/wms-dashboard.vue | 710 ++++++++++++++---
项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/BigGreen/BigScreenController.cs | 40
项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Outbound.cs | 2
项目代码/WIDESEA_WMSClient/src/views/stock/stockInfoDetail.vue | 7
项目代码/WMS无仓储版/WIDESEA_WMSServer/BigGreenService/BigGreenService.cs | 47 +
项目代码/WIDESEA_WMSClient/src/views/Home.vue | 1088 +++++++++++++++++++++++++++
项目代码/Dashboard/src/views/Dashboard.vue | 2
项目代码/Dashboard/package-lock.json | 407 ++-------
项目代码/Dashboard/package.json | 2
项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_StockService/StockInfoDetailService.cs | 3
11 files changed, 1,848 insertions(+), 461 deletions(-)
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/Dashboard/package-lock.json" "b/\351\241\271\347\233\256\344\273\243\347\240\201/Dashboard/package-lock.json"
index 3ec41ba..0c149ee 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/Dashboard/package-lock.json"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/Dashboard/package-lock.json"
@@ -41,164 +41,157 @@
"resolved": "https://mirrors.huaweicloud.com/repository/npm/@element-plus/icons-vue/-/icons-vue-2.3.2.tgz",
"integrity": "sha512-OzIuTaIfC8QXEPmJvB4Y4kw34rSXdCJzxcD1kFStBvr8bK6X1zQAYDo0CNMjojnfTqRQCJ0I7prlErcoRiET2A=="
},
- "@esbuild/aix-ppc64": {
- "version": "0.21.5",
- "resolved": "https://mirrors.huaweicloud.com/repository/npm/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz",
- "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==",
- "dev": true,
- "optional": true
- },
"@esbuild/android-arm": {
- "version": "0.21.5",
- "resolved": "https://mirrors.huaweicloud.com/repository/npm/@esbuild/android-arm/-/android-arm-0.21.5.tgz",
- "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==",
+ "version": "0.18.20",
+ "resolved": "https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.18.20.tgz",
+ "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==",
"dev": true,
"optional": true
},
"@esbuild/android-arm64": {
- "version": "0.21.5",
- "resolved": "https://mirrors.huaweicloud.com/repository/npm/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz",
- "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==",
+ "version": "0.18.20",
+ "resolved": "https://registry.npmmirror.com/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz",
+ "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==",
"dev": true,
"optional": true
},
"@esbuild/android-x64": {
- "version": "0.21.5",
- "resolved": "https://mirrors.huaweicloud.com/repository/npm/@esbuild/android-x64/-/android-x64-0.21.5.tgz",
- "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==",
+ "version": "0.18.20",
+ "resolved": "https://registry.npmmirror.com/@esbuild/android-x64/-/android-x64-0.18.20.tgz",
+ "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==",
"dev": true,
"optional": true
},
"@esbuild/darwin-arm64": {
- "version": "0.21.5",
- "resolved": "https://mirrors.huaweicloud.com/repository/npm/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz",
- "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==",
+ "version": "0.18.20",
+ "resolved": "https://registry.npmmirror.com/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz",
+ "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==",
"dev": true,
"optional": true
},
"@esbuild/darwin-x64": {
- "version": "0.21.5",
- "resolved": "https://mirrors.huaweicloud.com/repository/npm/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz",
- "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==",
+ "version": "0.18.20",
+ "resolved": "https://registry.npmmirror.com/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz",
+ "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==",
"dev": true,
"optional": true
},
"@esbuild/freebsd-arm64": {
- "version": "0.21.5",
- "resolved": "https://mirrors.huaweicloud.com/repository/npm/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz",
- "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==",
+ "version": "0.18.20",
+ "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz",
+ "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==",
"dev": true,
"optional": true
},
"@esbuild/freebsd-x64": {
- "version": "0.21.5",
- "resolved": "https://mirrors.huaweicloud.com/repository/npm/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz",
- "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==",
+ "version": "0.18.20",
+ "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz",
+ "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==",
"dev": true,
"optional": true
},
"@esbuild/linux-arm": {
- "version": "0.21.5",
- "resolved": "https://mirrors.huaweicloud.com/repository/npm/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz",
- "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==",
+ "version": "0.18.20",
+ "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz",
+ "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==",
"dev": true,
"optional": true
},
"@esbuild/linux-arm64": {
- "version": "0.21.5",
- "resolved": "https://mirrors.huaweicloud.com/repository/npm/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz",
- "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==",
+ "version": "0.18.20",
+ "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz",
+ "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==",
"dev": true,
"optional": true
},
"@esbuild/linux-ia32": {
- "version": "0.21.5",
- "resolved": "https://mirrors.huaweicloud.com/repository/npm/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz",
- "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==",
+ "version": "0.18.20",
+ "resolved": "https://registry.npmmirror.com/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz",
+ "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==",
"dev": true,
"optional": true
},
"@esbuild/linux-loong64": {
- "version": "0.21.5",
- "resolved": "https://mirrors.huaweicloud.com/repository/npm/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz",
- "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==",
+ "version": "0.18.20",
+ "resolved": "https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz",
+ "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==",
"dev": true,
"optional": true
},
"@esbuild/linux-mips64el": {
- "version": "0.21.5",
- "resolved": "https://mirrors.huaweicloud.com/repository/npm/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz",
- "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==",
+ "version": "0.18.20",
+ "resolved": "https://registry.npmmirror.com/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz",
+ "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==",
"dev": true,
"optional": true
},
"@esbuild/linux-ppc64": {
- "version": "0.21.5",
- "resolved": "https://mirrors.huaweicloud.com/repository/npm/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz",
- "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==",
+ "version": "0.18.20",
+ "resolved": "https://registry.npmmirror.com/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz",
+ "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==",
"dev": true,
"optional": true
},
"@esbuild/linux-riscv64": {
- "version": "0.21.5",
- "resolved": "https://mirrors.huaweicloud.com/repository/npm/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz",
- "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==",
+ "version": "0.18.20",
+ "resolved": "https://registry.npmmirror.com/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz",
+ "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==",
"dev": true,
"optional": true
},
"@esbuild/linux-s390x": {
- "version": "0.21.5",
- "resolved": "https://mirrors.huaweicloud.com/repository/npm/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz",
- "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==",
+ "version": "0.18.20",
+ "resolved": "https://registry.npmmirror.com/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz",
+ "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==",
"dev": true,
"optional": true
},
"@esbuild/linux-x64": {
- "version": "0.21.5",
- "resolved": "https://mirrors.huaweicloud.com/repository/npm/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz",
- "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==",
+ "version": "0.18.20",
+ "resolved": "https://registry.npmmirror.com/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz",
+ "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==",
"dev": true,
"optional": true
},
"@esbuild/netbsd-x64": {
- "version": "0.21.5",
- "resolved": "https://mirrors.huaweicloud.com/repository/npm/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz",
- "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==",
+ "version": "0.18.20",
+ "resolved": "https://registry.npmmirror.com/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz",
+ "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==",
"dev": true,
"optional": true
},
"@esbuild/openbsd-x64": {
- "version": "0.21.5",
- "resolved": "https://mirrors.huaweicloud.com/repository/npm/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz",
- "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==",
+ "version": "0.18.20",
+ "resolved": "https://registry.npmmirror.com/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz",
+ "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==",
"dev": true,
"optional": true
},
"@esbuild/sunos-x64": {
- "version": "0.21.5",
- "resolved": "https://mirrors.huaweicloud.com/repository/npm/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz",
- "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==",
+ "version": "0.18.20",
+ "resolved": "https://registry.npmmirror.com/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz",
+ "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==",
"dev": true,
"optional": true
},
"@esbuild/win32-arm64": {
- "version": "0.21.5",
- "resolved": "https://mirrors.huaweicloud.com/repository/npm/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz",
- "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==",
+ "version": "0.18.20",
+ "resolved": "https://registry.npmmirror.com/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz",
+ "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==",
"dev": true,
"optional": true
},
"@esbuild/win32-ia32": {
- "version": "0.21.5",
- "resolved": "https://mirrors.huaweicloud.com/repository/npm/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz",
- "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==",
+ "version": "0.18.20",
+ "resolved": "https://registry.npmmirror.com/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz",
+ "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==",
"dev": true,
"optional": true
},
"@esbuild/win32-x64": {
- "version": "0.21.5",
- "resolved": "https://mirrors.huaweicloud.com/repository/npm/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz",
- "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==",
+ "version": "0.18.20",
+ "resolved": "https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz",
+ "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==",
"dev": true,
"optional": true
},
@@ -228,171 +221,6 @@
"version": "1.5.5",
"resolved": "https://mirrors.huaweicloud.com/repository/npm/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
"integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og=="
- },
- "@popperjs/core": {
- "version": "npm:@sxzz/popperjs-es@2.11.7",
- "resolved": "https://mirrors.huaweicloud.com/repository/npm/@sxzz/popperjs-es/-/popperjs-es-2.11.7.tgz",
- "integrity": "sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ=="
- },
- "@rollup/rollup-android-arm-eabi": {
- "version": "4.54.0",
- "resolved": "https://mirrors.huaweicloud.com/repository/npm/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.54.0.tgz",
- "integrity": "sha512-OywsdRHrFvCdvsewAInDKCNyR3laPA2mc9bRYJ6LBp5IyvF3fvXbbNR0bSzHlZVFtn6E0xw2oZlyjg4rKCVcng==",
- "dev": true,
- "optional": true
- },
- "@rollup/rollup-android-arm64": {
- "version": "4.54.0",
- "resolved": "https://mirrors.huaweicloud.com/repository/npm/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.54.0.tgz",
- "integrity": "sha512-Skx39Uv+u7H224Af+bDgNinitlmHyQX1K/atIA32JP3JQw6hVODX5tkbi2zof/E69M1qH2UoN3Xdxgs90mmNYw==",
- "dev": true,
- "optional": true
- },
- "@rollup/rollup-darwin-arm64": {
- "version": "4.54.0",
- "resolved": "https://mirrors.huaweicloud.com/repository/npm/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.54.0.tgz",
- "integrity": "sha512-k43D4qta/+6Fq+nCDhhv9yP2HdeKeP56QrUUTW7E6PhZP1US6NDqpJj4MY0jBHlJivVJD5P8NxrjuobZBJTCRw==",
- "dev": true,
- "optional": true
- },
- "@rollup/rollup-darwin-x64": {
- "version": "4.54.0",
- "resolved": "https://mirrors.huaweicloud.com/repository/npm/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.54.0.tgz",
- "integrity": "sha512-cOo7biqwkpawslEfox5Vs8/qj83M/aZCSSNIWpVzfU2CYHa2G3P1UN5WF01RdTHSgCkri7XOlTdtk17BezlV3A==",
- "dev": true,
- "optional": true
- },
- "@rollup/rollup-freebsd-arm64": {
- "version": "4.54.0",
- "resolved": "https://mirrors.huaweicloud.com/repository/npm/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.54.0.tgz",
- "integrity": "sha512-miSvuFkmvFbgJ1BevMa4CPCFt5MPGw094knM64W9I0giUIMMmRYcGW/JWZDriaw/k1kOBtsWh1z6nIFV1vPNtA==",
- "dev": true,
- "optional": true
- },
- "@rollup/rollup-freebsd-x64": {
- "version": "4.54.0",
- "resolved": "https://mirrors.huaweicloud.com/repository/npm/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.54.0.tgz",
- "integrity": "sha512-KGXIs55+b/ZfZsq9aR026tmr/+7tq6VG6MsnrvF4H8VhwflTIuYh+LFUlIsRdQSgrgmtM3fVATzEAj4hBQlaqQ==",
- "dev": true,
- "optional": true
- },
- "@rollup/rollup-linux-arm-gnueabihf": {
- "version": "4.54.0",
- "resolved": "https://mirrors.huaweicloud.com/repository/npm/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.54.0.tgz",
- "integrity": "sha512-EHMUcDwhtdRGlXZsGSIuXSYwD5kOT9NVnx9sqzYiwAc91wfYOE1g1djOEDseZJKKqtHAHGwnGPQu3kytmfaXLQ==",
- "dev": true,
- "optional": true
- },
- "@rollup/rollup-linux-arm-musleabihf": {
- "version": "4.54.0",
- "resolved": "https://mirrors.huaweicloud.com/repository/npm/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.54.0.tgz",
- "integrity": "sha512-+pBrqEjaakN2ySv5RVrj/qLytYhPKEUwk+e3SFU5jTLHIcAtqh2rLrd/OkbNuHJpsBgxsD8ccJt5ga/SeG0JmA==",
- "dev": true,
- "optional": true
- },
- "@rollup/rollup-linux-arm64-gnu": {
- "version": "4.54.0",
- "resolved": "https://mirrors.huaweicloud.com/repository/npm/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.54.0.tgz",
- "integrity": "sha512-NSqc7rE9wuUaRBsBp5ckQ5CVz5aIRKCwsoa6WMF7G01sX3/qHUw/z4pv+D+ahL1EIKy6Enpcnz1RY8pf7bjwng==",
- "dev": true,
- "optional": true
- },
- "@rollup/rollup-linux-arm64-musl": {
- "version": "4.54.0",
- "resolved": "https://mirrors.huaweicloud.com/repository/npm/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.54.0.tgz",
- "integrity": "sha512-gr5vDbg3Bakga5kbdpqx81m2n9IX8M6gIMlQQIXiLTNeQW6CucvuInJ91EuCJ/JYvc+rcLLsDFcfAD1K7fMofg==",
- "dev": true,
- "optional": true
- },
- "@rollup/rollup-linux-loong64-gnu": {
- "version": "4.54.0",
- "resolved": "https://mirrors.huaweicloud.com/repository/npm/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.54.0.tgz",
- "integrity": "sha512-gsrtB1NA3ZYj2vq0Rzkylo9ylCtW/PhpLEivlgWe0bpgtX5+9j9EZa0wtZiCjgu6zmSeZWyI/e2YRX1URozpIw==",
- "dev": true,
- "optional": true
- },
- "@rollup/rollup-linux-ppc64-gnu": {
- "version": "4.54.0",
- "resolved": "https://mirrors.huaweicloud.com/repository/npm/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.54.0.tgz",
- "integrity": "sha512-y3qNOfTBStmFNq+t4s7Tmc9hW2ENtPg8FeUD/VShI7rKxNW7O4fFeaYbMsd3tpFlIg1Q8IapFgy7Q9i2BqeBvA==",
- "dev": true,
- "optional": true
- },
- "@rollup/rollup-linux-riscv64-gnu": {
- "version": "4.54.0",
- "resolved": "https://mirrors.huaweicloud.com/repository/npm/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.54.0.tgz",
- "integrity": "sha512-89sepv7h2lIVPsFma8iwmccN7Yjjtgz0Rj/Ou6fEqg3HDhpCa+Et+YSufy27i6b0Wav69Qv4WBNl3Rs6pwhebQ==",
- "dev": true,
- "optional": true
- },
- "@rollup/rollup-linux-riscv64-musl": {
- "version": "4.54.0",
- "resolved": "https://mirrors.huaweicloud.com/repository/npm/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.54.0.tgz",
- "integrity": "sha512-ZcU77ieh0M2Q8Ur7D5X7KvK+UxbXeDHwiOt/CPSBTI1fBmeDMivW0dPkdqkT4rOgDjrDDBUed9x4EgraIKoR2A==",
- "dev": true,
- "optional": true
- },
- "@rollup/rollup-linux-s390x-gnu": {
- "version": "4.54.0",
- "resolved": "https://mirrors.huaweicloud.com/repository/npm/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.54.0.tgz",
- "integrity": "sha512-2AdWy5RdDF5+4YfG/YesGDDtbyJlC9LHmL6rZw6FurBJ5n4vFGupsOBGfwMRjBYH7qRQowT8D/U4LoSvVwOhSQ==",
- "dev": true,
- "optional": true
- },
- "@rollup/rollup-linux-x64-gnu": {
- "version": "4.54.0",
- "resolved": "https://mirrors.huaweicloud.com/repository/npm/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.54.0.tgz",
- "integrity": "sha512-WGt5J8Ij/rvyqpFexxk3ffKqqbLf9AqrTBbWDk7ApGUzaIs6V+s2s84kAxklFwmMF/vBNGrVdYgbblCOFFezMQ==",
- "dev": true,
- "optional": true
- },
- "@rollup/rollup-linux-x64-musl": {
- "version": "4.54.0",
- "resolved": "https://mirrors.huaweicloud.com/repository/npm/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.54.0.tgz",
- "integrity": "sha512-JzQmb38ATzHjxlPHuTH6tE7ojnMKM2kYNzt44LO/jJi8BpceEC8QuXYA908n8r3CNuG/B3BV8VR3Hi1rYtmPiw==",
- "dev": true,
- "optional": true
- },
- "@rollup/rollup-openharmony-arm64": {
- "version": "4.54.0",
- "resolved": "https://mirrors.huaweicloud.com/repository/npm/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.54.0.tgz",
- "integrity": "sha512-huT3fd0iC7jigGh7n3q/+lfPcXxBi+om/Rs3yiFxjvSxbSB6aohDFXbWvlspaqjeOh+hx7DDHS+5Es5qRkWkZg==",
- "dev": true,
- "optional": true
- },
- "@rollup/rollup-win32-arm64-msvc": {
- "version": "4.54.0",
- "resolved": "https://mirrors.huaweicloud.com/repository/npm/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.54.0.tgz",
- "integrity": "sha512-c2V0W1bsKIKfbLMBu/WGBz6Yci8nJ/ZJdheE0EwB73N3MvHYKiKGs3mVilX4Gs70eGeDaMqEob25Tw2Gb9Nqyw==",
- "dev": true,
- "optional": true
- },
- "@rollup/rollup-win32-ia32-msvc": {
- "version": "4.54.0",
- "resolved": "https://mirrors.huaweicloud.com/repository/npm/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.54.0.tgz",
- "integrity": "sha512-woEHgqQqDCkAzrDhvDipnSirm5vxUXtSKDYTVpZG3nUdW/VVB5VdCYA2iReSj/u3yCZzXID4kuKG7OynPnB3WQ==",
- "dev": true,
- "optional": true
- },
- "@rollup/rollup-win32-x64-gnu": {
- "version": "4.54.0",
- "resolved": "https://mirrors.huaweicloud.com/repository/npm/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.54.0.tgz",
- "integrity": "sha512-dzAc53LOuFvHwbCEOS0rPbXp6SIhAf2txMP5p6mGyOXXw5mWY8NGGbPMPrs4P1WItkfApDathBj/NzMLUZ9rtQ==",
- "dev": true,
- "optional": true
- },
- "@rollup/rollup-win32-x64-msvc": {
- "version": "4.54.0",
- "resolved": "https://mirrors.huaweicloud.com/repository/npm/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.54.0.tgz",
- "integrity": "sha512-hYT5d3YNdSh3mbCU1gwQyPgQd3T2ne0A3KG8KSBdav5TiBg6eInVmV+TeR5uHufiIgSFg0XsOWGW5/RhNcSvPg==",
- "dev": true,
- "optional": true
- },
- "@types/estree": {
- "version": "1.0.8",
- "resolved": "https://mirrors.huaweicloud.com/repository/npm/@types/estree/-/estree-1.0.8.tgz",
- "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
- "dev": true
},
"@types/lodash": {
"version": "4.17.21",
@@ -625,6 +453,13 @@
"lodash-unified": "^1.0.3",
"memoize-one": "^6.0.0",
"normalize-wheel-es": "^1.2.0"
+ },
+ "dependencies": {
+ "@popperjs/core": {
+ "version": "npm:@sxzz/popperjs-es@2.11.7",
+ "resolved": "https://registry.npmmirror.com/@sxzz/popperjs-es/-/popperjs-es-2.11.7.tgz",
+ "integrity": "sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ=="
+ }
}
},
"entities": {
@@ -662,34 +497,33 @@
}
},
"esbuild": {
- "version": "0.21.5",
- "resolved": "https://mirrors.huaweicloud.com/repository/npm/esbuild/-/esbuild-0.21.5.tgz",
- "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==",
+ "version": "0.18.20",
+ "resolved": "https://registry.npmmirror.com/esbuild/-/esbuild-0.18.20.tgz",
+ "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==",
"dev": true,
"requires": {
- "@esbuild/aix-ppc64": "0.21.5",
- "@esbuild/android-arm": "0.21.5",
- "@esbuild/android-arm64": "0.21.5",
- "@esbuild/android-x64": "0.21.5",
- "@esbuild/darwin-arm64": "0.21.5",
- "@esbuild/darwin-x64": "0.21.5",
- "@esbuild/freebsd-arm64": "0.21.5",
- "@esbuild/freebsd-x64": "0.21.5",
- "@esbuild/linux-arm": "0.21.5",
- "@esbuild/linux-arm64": "0.21.5",
- "@esbuild/linux-ia32": "0.21.5",
- "@esbuild/linux-loong64": "0.21.5",
- "@esbuild/linux-mips64el": "0.21.5",
- "@esbuild/linux-ppc64": "0.21.5",
- "@esbuild/linux-riscv64": "0.21.5",
- "@esbuild/linux-s390x": "0.21.5",
- "@esbuild/linux-x64": "0.21.5",
- "@esbuild/netbsd-x64": "0.21.5",
- "@esbuild/openbsd-x64": "0.21.5",
- "@esbuild/sunos-x64": "0.21.5",
- "@esbuild/win32-arm64": "0.21.5",
- "@esbuild/win32-ia32": "0.21.5",
- "@esbuild/win32-x64": "0.21.5"
+ "@esbuild/android-arm": "0.18.20",
+ "@esbuild/android-arm64": "0.18.20",
+ "@esbuild/android-x64": "0.18.20",
+ "@esbuild/darwin-arm64": "0.18.20",
+ "@esbuild/darwin-x64": "0.18.20",
+ "@esbuild/freebsd-arm64": "0.18.20",
+ "@esbuild/freebsd-x64": "0.18.20",
+ "@esbuild/linux-arm": "0.18.20",
+ "@esbuild/linux-arm64": "0.18.20",
+ "@esbuild/linux-ia32": "0.18.20",
+ "@esbuild/linux-loong64": "0.18.20",
+ "@esbuild/linux-mips64el": "0.18.20",
+ "@esbuild/linux-ppc64": "0.18.20",
+ "@esbuild/linux-riscv64": "0.18.20",
+ "@esbuild/linux-s390x": "0.18.20",
+ "@esbuild/linux-x64": "0.18.20",
+ "@esbuild/netbsd-x64": "0.18.20",
+ "@esbuild/openbsd-x64": "0.18.20",
+ "@esbuild/sunos-x64": "0.18.20",
+ "@esbuild/win32-arm64": "0.18.20",
+ "@esbuild/win32-ia32": "0.18.20",
+ "@esbuild/win32-x64": "0.18.20"
}
},
"estree-walker": {
@@ -716,7 +550,7 @@
},
"fsevents": {
"version": "2.3.3",
- "resolved": "https://mirrors.huaweicloud.com/repository/npm/fsevents/-/fsevents-2.3.3.tgz",
+ "resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.3.tgz",
"integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
"dev": true,
"optional": true
@@ -855,34 +689,11 @@
"integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
},
"rollup": {
- "version": "4.54.0",
- "resolved": "https://mirrors.huaweicloud.com/repository/npm/rollup/-/rollup-4.54.0.tgz",
- "integrity": "sha512-3nk8Y3a9Ea8szgKhinMlGMhGMw89mqule3KWczxhIzqudyHdCIOHw8WJlj/r329fACjKLEh13ZSk7oE22kyeIw==",
+ "version": "3.29.5",
+ "resolved": "https://registry.npmmirror.com/rollup/-/rollup-3.29.5.tgz",
+ "integrity": "sha512-GVsDdsbJzzy4S/v3dqWPJ7EfvZJfCHiDqe80IyrF59LYuP+e6U1LJoUqeuqRbwAWoMNoXivMNeNAOf5E22VA1w==",
"dev": true,
"requires": {
- "@rollup/rollup-android-arm-eabi": "4.54.0",
- "@rollup/rollup-android-arm64": "4.54.0",
- "@rollup/rollup-darwin-arm64": "4.54.0",
- "@rollup/rollup-darwin-x64": "4.54.0",
- "@rollup/rollup-freebsd-arm64": "4.54.0",
- "@rollup/rollup-freebsd-x64": "4.54.0",
- "@rollup/rollup-linux-arm-gnueabihf": "4.54.0",
- "@rollup/rollup-linux-arm-musleabihf": "4.54.0",
- "@rollup/rollup-linux-arm64-gnu": "4.54.0",
- "@rollup/rollup-linux-arm64-musl": "4.54.0",
- "@rollup/rollup-linux-loong64-gnu": "4.54.0",
- "@rollup/rollup-linux-ppc64-gnu": "4.54.0",
- "@rollup/rollup-linux-riscv64-gnu": "4.54.0",
- "@rollup/rollup-linux-riscv64-musl": "4.54.0",
- "@rollup/rollup-linux-s390x-gnu": "4.54.0",
- "@rollup/rollup-linux-x64-gnu": "4.54.0",
- "@rollup/rollup-linux-x64-musl": "4.54.0",
- "@rollup/rollup-openharmony-arm64": "4.54.0",
- "@rollup/rollup-win32-arm64-msvc": "4.54.0",
- "@rollup/rollup-win32-ia32-msvc": "4.54.0",
- "@rollup/rollup-win32-x64-gnu": "4.54.0",
- "@rollup/rollup-win32-x64-msvc": "4.54.0",
- "@types/estree": "1.0.8",
"fsevents": "~2.3.2"
}
},
@@ -897,15 +708,15 @@
"integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg=="
},
"vite": {
- "version": "5.4.21",
- "resolved": "https://mirrors.huaweicloud.com/repository/npm/vite/-/vite-5.4.21.tgz",
- "integrity": "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==",
+ "version": "4.5.14",
+ "resolved": "https://registry.npmmirror.com/vite/-/vite-4.5.14.tgz",
+ "integrity": "sha512-+v57oAaoYNnO3hIu5Z/tJRZjq5aHM2zDve9YZ8HngVHbhk66RStobhb1sqPMIPEleV6cNKYK4eGrAbE9Ulbl2g==",
"dev": true,
"requires": {
- "esbuild": "^0.21.3",
- "fsevents": "~2.3.3",
- "postcss": "^8.4.43",
- "rollup": "^4.20.0"
+ "esbuild": "^0.18.10",
+ "fsevents": "~2.3.2",
+ "postcss": "^8.4.27",
+ "rollup": "^3.27.1"
}
},
"vue": {
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/Dashboard/package.json" "b/\351\241\271\347\233\256\344\273\243\347\240\201/Dashboard/package.json"
index c86bf53..976544e 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/Dashboard/package.json"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/Dashboard/package.json"
@@ -19,6 +19,6 @@
},
"devDependencies": {
"@vitejs/plugin-vue": "^5.0.4",
- "vite": "^5.2.0"
+ "vite": "^4.2.0"
}
}
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/Dashboard/src/views/Dashboard.vue" "b/\351\241\271\347\233\256\344\273\243\347\240\201/Dashboard/src/views/Dashboard.vue"
index e97fd1c..d8a44bd 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/Dashboard/src/views/Dashboard.vue"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/Dashboard/src/views/Dashboard.vue"
@@ -247,7 +247,7 @@
}
]
}
- chart.setOption(option)
+ //chart.setOption(option)
return chart
}
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/Home.vue" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/Home.vue"
index 820437a..5f50fb5 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/Home.vue"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/Home.vue"
@@ -1,24 +1,1086 @@
<template>
- <div class="title"></div>
+ <div class="wms-dashboard">
+ <!-- 缁熻鍗$墖鍖哄煙 - 缁戝畾鍝嶅簲寮忔暟鎹� -->
+ <el-row :gutter="20" class="stats-card-row">
+ <el-col :span="4">
+ <div class="stats-card">
+ <div class="metric-icon">
+ <el-icon :size="32">
+ <Box />
+ </el-icon>
+ </div>
+ <div class="card-title">鎬诲簱瀛�</div>
+ <div class="card-value">{{ formatNumber(bigscreendata.totalStockQuantity) }}</div>
+ </div>
+ </el-col>
+ <el-col :span="4">
+ <div class="stats-card">
+ <div class="metric-icon">
+ <el-icon :size="32">
+ <Document />
+ </el-icon>
+ </div>
+ <div class="card-title">寰呭嚭搴撹鍗�</div>
+ <div class="card-value">{{ bigscreendata.unOutBoundOrderCount }}</div>
+ </div>
+ </el-col>
+ <el-col :span="4">
+ <div class="stats-card">
+ <div class="metric-icon">
+ <el-icon :size="32">
+ <Download />
+ </el-icon>
+ </div>
+ <div class="card-title">浠婃棩鍏ュ簱瀹屾垚鏁�</div>
+ <div class="card-value">{{ bigscreendata.inboundCount }}</div>
+ </div>
+ </el-col>
+ <el-col :span="4">
+ <div class="stats-card">
+ <div class="metric-icon">
+ <el-icon :size="32">
+ <Upload />
+ </el-icon>
+ </div>
+ <div class="card-title">浠婃棩鍑哄簱瀹屾垚鏁�</div>
+ <div class="card-value">{{ bigscreendata.outboundCount }}</div>
+ </div>
+ </el-col>
+ <el-col :span="4">
+ <div class="stats-card">
+ <div class="metric-icon">
+ <el-icon :size="32">
+ <Box />
+ </el-icon>
+ </div>
+ <div class="card-title">鏈夎揣鏂欑</div>
+ <div class="card-value">{{ formatNumber(bigscreendata.inStockPallet) }}</div>
+ </div>
+ </el-col>
+ <el-col :span="4">
+ <div class="stats-card">
+ <div class="metric-icon">
+ <el-icon :size="32">
+ <Box />
+ </el-icon>
+ </div>
+ <div class="card-title">绌虹鏁伴噺</div>
+ <div class="card-value">{{ formatNumber(bigscreendata.freeStockPallet) }}</div>
+ </div>
+ </el-col>
+</el-row>
+
+
+ <!-- 鍥捐〃鍖哄煙锛堢涓�琛岋級 -->
+ <el-row :gutter="20" class="chart-row">
+ <el-col :span="12">
+ <!-- 鏇挎崲el-card涓篸iv锛屼繚鐣檆hart-card绫诲悕 -->
+ <div class="chart-card">
+ <div class="chart-title">搴撲綅鍒╃敤鐜�</div>
+ <div ref="locationRateRef" class="chart-container"></div>
+ </div>
+ </el-col>
+ <el-col :span="12">
+ <div class="chart-card">
+ <div class="chart-title">杩�7鏃ュ嚭鍏ュ簱瓒嬪娍锛堝浘鍍忓寲璧板娍锛�</div>
+ <div ref="stockTrendRef" class="chart-container"></div>
+ </div>
+ </el-col>
+ </el-row>
+
+ <!-- 鍥捐〃鍖哄煙锛堢浜岃锛� -->
+ <el-row :gutter="20" class="chart-row">
+ </el-row>
+
+ <!-- 琛ㄦ牸鍖哄煙 - 缁戝畾鍚庣浣滀笟鏁版嵁 -->
+ <el-row :gutter="20" class="table-row" width="100%">
+ <el-col :span="24">
+ <!-- 鏇挎崲el-card涓篸iv锛屼繚鐣檛able-card绫诲悕 -->
+ <div class="table-card">
+ <div class="table-title">瀹炴椂浣滀笟鐩戞帶</div>
+ <el-table :data="showTaskList" border style="width: 100%;">
+ <el-table-column prop="taskNum" label="浠诲姟鍙�" />
+ <el-table-column prop="taskStatus" label="浠诲姟鐘舵��" >
+ <template #default="{ row }">
+ <span class="task-status" :class="getStatusClass(row.taskStatus)">{{ getTaskStatusText(row.taskStatus) }}</span>
+ </template>
+ </el-table-column>
+ <el-table-column prop="taskType" label="浠诲姟绫诲瀷" >
+ <template #default="{ row }">
+ <span class="task-type" :class="getTypeClass(row.taskType)">{{ getTaskTypeText(row.taskType) }}</span>
+ </template>
+ </el-table-column>
+ <el-table-column prop="palletCode" label="鎵樼洏缂栧彿" />
+ <el-table-column prop="sourceAddress" label="璧风偣浣嶇疆"/>
+ <el-table-column prop="targetAddress" label="缁堢偣浣嶇疆"/>
+ <el-table-column prop="createDate" label="鍒涘缓鏃堕棿"/>
+ </el-table>
+ <div class="table-pagination">
+ <el-pagination layout="prev, pager, next, jumper" :current-page="1" :total="50" />
+ </div>
+ </div>
+ </el-col>
+ </el-row>
+ </div>
</template>
-<script>
-import { ref, reactive } from 'vue'
+<script setup>
+import { ref, onMounted, onUnmounted, nextTick } from 'vue';
+import * as echarts from 'echarts';
+import http from "@/api/http.js";
-export default {
- setup() {
- return {
+// 鍝嶅簲寮忔暟鎹�
+const month = ref('month');
+const orderType = ref('return');
- }
+// 鍚庣杩斿洖鏁版嵁锛堝搷搴斿紡锛�
+const bigscreendata = ref({
+ totalStockQuantity: 0,
+ unOutBoundOrderCount: 0,
+ dailyCompletionRate: 0,
+ unhandledExceptionCount: 0,
+ locationUtilizationRate: 0,
+ inStockPallet: 0,
+ freeStockPallet: 0,
+ dailyInOutBoundList: [],
+ taskList: [],
+ inboundCount: 0,
+ outboundCount: 0,
+ inventoryLocationDist: [], // 搴撳瓨搴撲綅鍒嗗竷鏁版嵁
+ exceptionTypeTrend: [] // 寮傚父绫诲瀷瓒嬪娍鏁版嵁
+});
+
+const taskStatusMap = {
+ 100: "鏂板缓",
+ 105: "宸插彂閫�",
+ 200: "鍫嗗灈鏈哄緟鎵ц",
+ 210: "鍫嗗灈鏈烘墽琛屼腑",
+ 220: "鍫嗗灈鏈哄畬鎴�",
+ 400: "杈撻�佺嚎寰呮墽琛�",
+ 410: "杈撻�佺嚎鎵ц涓�",
+ 420: "杈撻�佺嚎瀹屾垚",
+ 300: "AGV寰呮墽琛�",
+ 310: "AGV鎵ц涓�",
+ 315: "AGV鍙栬揣涓�",
+ 320: "AGV寰呯户缁墽琛�",
+ 325: "AGV鏀捐揣涓�",
+ 330: "AGV瀹屾垚",
+ 900: "浠诲姟瀹屾垚",
+ 970: "浠诲姟鎸傝捣",
+ 980: "浠诲姟鍙栨秷",
+ 990: "浠诲姟寮傚父",
+ 110: "鎻愬崌鏈烘墽琛屼腑"
+};
+const getTaskStatusText = (statusNum) => {
+ // 澶勭悊绌哄�笺�佹棤鏁堝�硷紝鍏滃簳鏄剧ず鈥滄湭鐭ョ姸鎬佲��
+ if (statusNum === undefined || statusNum === null || isNaN(statusNum)) {
+ return "鏈煡鐘舵��";
}
-}
+ // 绮惧噯鍖归厤鏄犲皠鍊硷紝鏃犲尮閰嶅垯杩斿洖鈥滄湭鐭ョ姸鎬佲��
+ return taskStatusMap[statusNum] || "鏈煡鐘舵��";
+};
+const showTaskList = ref([]); // 琛ㄦ牸鏄剧ず鐨�5鏉′换鍔★紙杞挱鐢級
+const currentTaskIndex = ref(5); // 涓嬩竴涓鏄剧ず鐨勪换鍔$储寮曪紙鍒濆浠庣6鏉″紑濮嬶紝鍓�5鏉¢粯璁ゆ樉绀猴級
+let taskCarouselTimer = null; // 杞挱瀹氭椂鍣�
+// 鏁板瓧鏍煎紡鍖栵紙鍗冨垎浣嶅垎闅旓級
+const formatNumber = (num) => {
+ if (!num) return '0';
+ return num.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');
+};
+
+const startTaskCarousel = () => {
+ // 娓呴櫎鏃у畾鏃跺櫒锛岄槻姝㈤噸澶嶅惎鍔�
+ if (taskCarouselTimer) clearInterval(taskCarouselTimer);
+
+ const totalTask = bigscreendata.value.taskList.length;
+ // 浠诲姟鏁�<=5鏃讹紝涓嶈疆鎾紙娌℃湁鏇村浠诲姟鍙崲锛�
+ if (totalTask <= 5) {
+ showTaskList.value = [...bigscreendata.value.taskList];
+ return;
+ }
+
+ // 鍚姩5绉掑畾鏃跺櫒
+ taskCarouselTimer = setInterval(() => {
+ // 1. 鏂板涓�1鏉′换鍔″埌鏄剧ず鍒楄〃鏈熬
+ showTaskList.value.push(bigscreendata.value.taskList[currentTaskIndex.value]);
+ // 2. 鍒犻櫎鍒楄〃鏈�鍓嶉潰1鏉℃棫浠诲姟锛堝缁堜繚鎸�5鏉★級
+ showTaskList.value.shift();
+ // 3. 鏇存柊涓嬩竴涓换鍔$储寮曪紝瓒呭嚭鎬绘暟鍒欓噸缃紙寰幆杞挱锛�
+ currentTaskIndex.value++;
+ if (currentTaskIndex.value >= totalTask) {
+ currentTaskIndex.value = 0; // 閲嶇疆涓�0锛屽惊鐜挱鏀�
+ }
+ }, 5000); // 5绉掗棿闅�
+};
+
+const getTaskTypeText = (taskTypeNum) => {
+ // 澶勭悊绌哄��/鏃犳晥鍊�
+ if (!taskTypeNum || isNaN(taskTypeNum)) return "鏈煡绫诲瀷";
+
+ // 瀵瑰簲鍚庣TaskEnumHelper鐨勫垎缁勮鍒�
+ if (taskTypeNum >= 500 && taskTypeNum < 900) return "鍏ュ簱";
+ if (taskTypeNum >= 100 && taskTypeNum < 500) return "鍑哄簱";
+ if (taskTypeNum >= 900 && taskTypeNum < 1000) return "绉诲簱";
+ return "鍏朵粬浣滀笟"; // 鍏滃簳
+};
+
+// 鑾峰彇浠诲姟鐘舵�佹牱寮忕被
+const getStatusClass = (statusNum) => {
+ if (statusNum === undefined || statusNum === null || isNaN(statusNum)) {
+ return "status-unknown";
+ }
+
+ // 鏍规嵁鐘舵�佽寖鍥磋繑鍥炰笉鍚屾牱寮�
+ if (statusNum >= 900) return "status-completed"; // 瀹屾垚
+ if (statusNum >= 400) return "status-processing"; // 杈撻�佺嚎鎵ц涓�
+ if (statusNum >= 300) return "status-processing"; // AGV鎵ц涓�
+ if (statusNum >= 200) return "status-processing"; // 鍫嗗灈鏈烘墽琛屼腑
+ if (statusNum >= 100) return "status-pending"; // 鏂板缓銆佸凡鍙戦��
+ if (statusNum === 970) return "status-suspended"; // 鎸傝捣
+ if (statusNum === 980) return "status-canceled"; // 鍙栨秷
+ if (statusNum === 990) return "status-error"; // 寮傚父
+
+ return "status-unknown";
+};
+
+// 鑾峰彇浠诲姟绫诲瀷鏍峰紡绫�
+const getTypeClass = (taskTypeNum) => {
+ if (!taskTypeNum || isNaN(taskTypeNum)) return "type-unknown";
+
+ // 瀵瑰簲鍚庣TaskEnumHelper鐨勫垎缁勮鍒�
+ if (taskTypeNum >= 500 && taskTypeNum < 900) return "type-inbound"; // 鍏ュ簱
+ if (taskTypeNum >= 100 && taskTypeNum < 500) return "type-outbound"; // 鍑哄簱
+ if (taskTypeNum >= 900 && taskTypeNum < 1000) return "type-transfer"; // 绉诲簱
+
+ return "type-other"; // 鍏朵粬浣滀笟
+};
+
+// 鑾峰彇鍚庣澶у睆鏁版嵁
+const fetchBigGreenData = async () => {
+ try {
+ debugger
+ const res = await http.get('/api/BigScreen/GetBigGreenData');
+ console.log('澶у睆鏁版嵁', res);
+
+ bigscreendata.value = res.data || res;
+ // 鏁版嵁鏇存柊鍚庡埛鏂板浘琛�
+ nextTick(() => {
+ const total = bigscreendata.value.taskList.length;
+ // 鍒濆鍖栨樉绀哄墠5鏉★紙涓嶈冻5鏉″垯鏄剧ず鍏ㄩ儴锛�
+ showTaskList.value = total >=5
+ ? [...bigscreendata.value.taskList.slice(0,5)]
+ : [...bigscreendata.value.taskList];
+ startTaskCarousel(); // 鍚姩浠诲姟杞挱
+ refreshCharts();
+ });
+ } catch (error) {
+ ElMessage.error('鏁版嵁鑾峰彇澶辫触锛岃妫�鏌ュ悗绔帴鍙f槸鍚︽甯�');
+ }
+};
+
+// 澶囩敤妯℃嫙鏁版嵁
+const operationList = ref([
+ { opNo: 'JW251224001', opType: '鍏ュ簱', operator: '寮犱笁', startTime: '15:30:22', status: '澶勭悊涓�' },
+ { opNo: 'CK251224002', opType: '鍑哄簱', operator: '鏉庡洓', startTime: '15:25:10', status: '宸插畬鎴�' },
+ { opNo: 'PD251224003', opType: '鐩樼偣', operator: '鐜嬩簲', startTime: '15:20:05', status: '寰呯‘璁�' },
+ { opNo: 'SC251224005', opType: '涓婃灦', operator: '瀛欎竷', startTime: '15:10:18', status: '寮傚父' }
+]);
+
+// 鍥捐〃瀹瑰櫒Ref
+const inventoryPieRef = ref(null);
+const stockTrendRef = ref(null);
+const locationRateRef = ref(null);
+const exceptionTrendRef = ref(null);
+
+// 鍥捐〃瀹炰緥锛堝叏灞�绠$悊锛岀敤浜庨攢姣佸拰resize锛�
+let inventoryPieChart = null;
+let stockTrendChart = null;
+let locationRateChart = null;
+let exceptionTrendChart = null;
+
+// 鍒濆鍖栧簱瀛樺簱浣嶅垎甯冮ゼ鍥撅紙鍏宠仈鍚庣鏁版嵁锛�
+const initInventoryPie= () => {
+ if (!inventoryPieRef.value) return;
+
+ // 閿�姣佹棫瀹炰緥锛岄槻姝㈠唴瀛樻硠婕�
+ if (inventoryPieChart) {
+ inventoryPieChart.dispose();
+ }
+
+ inventoryPieChart = echarts.init(inventoryPieRef.value);
+ // 浼樺厛浣跨敤鍚庣鏁版嵁锛屾棤鏁版嵁鍒欑敤榛樿鍊�
+ const locationData = bigscreendata.value.inventoryLocationDist.length
+ ? bigscreendata.value.inventoryLocationDist
+ : [
+ { value: 48.7, name: '甯告俯鍖篈鍖�', itemStyle: { color: '#5470c6' } },
+ { value: 29.2, name: '鍐疯棌鍖築鍖�', itemStyle: { color: '#91cc75' } },
+ { value: 21.9, name: '淇濈◣鍖篊鍖�', itemStyle: { color: '#fac858' } },
+ { value: 2.2, name: '娈嬫鍝佸尯D鍖�', itemStyle: { color: '#ee6666' } }
+ ];
+
+ const option = {
+ tooltip: {
+ trigger: 'item',
+ formatter: '{a} <br/>{b}: {c}%'
+ },
+ legend: {
+ bottom: 0,
+ left: 'center',
+ data: locationData.map(item => item.name)
+ },
+ series: [{
+ name: '搴撳瓨搴撲綅鍒嗗竷',
+ type: 'pie',
+ radius: ['40%', '70%'],
+ center: ['50%', '40%'],
+ avoidLabelOverlap: false,
+ itemStyle: {
+ borderRadius: 10,
+ borderColor: '#fff',
+ borderWidth: 2
+ },
+ label: {
+ show: false,
+ position: 'center'
+ },
+ emphasis: {
+ label: {
+ show: true,
+ fontSize: 20,
+ fontWeight: 'bold'
+ }
+ },
+ labelLine: {
+ show: false
+ },
+ data: locationData
+ }]
+ };
+
+ inventoryPieChart.setOption(option);
+ return inventoryPieChart;
+};
+
+// 鍒濆鍖栬繎7鏃ュ嚭鍏ュ簱瓒嬪娍鍥撅紙鍏宠仈鍚庣鏁版嵁锛�
+const initStockTrend = () => {
+ debugger
+ if (!stockTrendRef.value) return;
+
+ if (stockTrendChart) {
+ stockTrendChart.dispose();
+ }
+
+ stockTrendChart = echarts.init(stockTrendRef.value);
+ // 浼樺厛浣跨敤鍚庣鏁版嵁
+ const trendData = bigscreendata.value.dailyInOutBoundList;
+ console.log('鍑哄叆搴撹秼鍔挎暟鎹�', trendData);
+
+ const option = {
+ tooltip: {
+ trigger: 'axis',
+ axisPointer: {
+ type: 'cross'
+ }
+ },
+ legend: {
+ data: ['鍏ュ簱閲�', '鍑哄簱閲�'],
+ top: 10
+ },
+ grid: {
+ left: '3%',
+ right: '4%',
+ bottom: '3%',
+ top: '15%',
+ containLabel: true
+ },
+ xAxis: {
+ type: 'category',
+ boundaryGap: true,
+ data: trendData.map(item => item.date)
+ },
+ yAxis: {
+ type: 'value',
+ name: '鏁伴噺锛堝崈浠讹級',
+ max: 25
+ },
+ series: [
+ {
+ name: '鍏ュ簱閲�',
+ type: 'bar',
+ barWidth: '30%',
+ data: trendData.map(item => item.inNum),
+ itemStyle: { color: '#52c41a' }
+ },
+ {
+ name: '鍑哄簱閲�',
+ type: 'bar',
+ barWidth: '30%',
+ data: trendData.map(item => item.outNum),
+ itemStyle: { color: '#1890ff' }
+ }
+ ]
+ };
+
+ stockTrendChart.setOption(option);
+ return stockTrendChart;
+};
+
+// 鍒濆鍖栧簱浣嶅埄鐢ㄧ巼鐜舰鍥撅紙淇锛氱粺涓�瀹炰緥绠$悊锛屽叧鑱斿悗绔暟鎹級
+const initLocationRate = () => {
+ if (!locationRateRef.value) return;
+
+ // 閿�姣佹棫瀹炰緥
+ if (locationRateChart) {
+ locationRateChart.dispose();
+ }
+
+ locationRateChart = echarts.init(locationRateRef.value);
+ // 浼樺厛浣跨敤鍚庣鏁版嵁锛屾棤鏁版嵁鍒欑敤榛樿鍊�
+ console.log('搴撲綅鍒╃敤鐜囨暟鎹�', bigscreendata.value.locationUtilizationRate);
+ const utilizationRate = bigscreendata.value.locationUtilizationRate || 0;
+ const freeRate = 100 - utilizationRate;
+
+ const option = {
+ tooltip: {
+ trigger: 'item',
+ formatter: '{b}: {c}%'
+ },
+ legend: {
+ bottom: 0,
+ left: 'center',
+ data: ['宸插崰鐢ㄥ簱浣�', '绌洪棽搴撲綅'],
+ textStyle: { fontSize: 12, color: '#666' }
+ },
+ graphic: [
+ {
+ type: 'text',
+ left: 'right',
+ top: '10%',
+ style: {
+ text: `${utilizationRate}%`,
+ fontSize: 24,
+ fontWeight: 'bold',
+ fill: '#333'
+ }
+ },
+ {
+ type: 'text',
+ left: 'right',
+ top: '25%',
+ style: {
+ text: '搴撲綅鍒╃敤鐜�',
+ fontSize: 14,
+ fill: '#666'
+ }
+ }
+ ],
+ series: [
+ {
+ type: 'pie',
+ radius: ['50%', '70%'],
+ center: ['40%', '50%'],
+ avoidLabelOverlap: false,
+ label: { show: false },
+ labelLine: { show: false },
+ data: [
+ { value: utilizationRate, name: '宸插崰鐢ㄥ簱浣�', itemStyle: { color: '#1890ff' } },
+ { value: freeRate, name: '绌洪棽搴撲綅', itemStyle: { color: '#e5e9f2' } }
+ ]
+ }
+ ]
+ };
+
+ locationRateChart.setOption(option);
+ return locationRateChart;
+};
+
+// 鍒濆鍖栧紓甯哥被鍨嬬粺璁¤秼鍔垮浘锛堝叧鑱斿悗绔暟鎹級
+const initExceptionTrend = () => {
+ if (!exceptionTrendRef.value) return;
+
+ if (exceptionTrendChart) {
+ exceptionTrendChart.dispose();
+ }
+
+ exceptionTrendChart = echarts.init(exceptionTrendRef.value);
+ // 浼樺厛浣跨敤鍚庣鏁版嵁
+ const exceptionData = bigscreendata.value.exceptionTypeTrend.length
+ ? bigscreendata.value.exceptionTypeTrend
+ : {
+ dates: ['12-18', '12-19', '12-20', '12-21', '12-22', '12-23', '12-24'],
+ stockShort: [10, 11, 9, 12, 10, 13, 12],
+ orderTimeout: [8, 9, 7, 8, 7, 9, 8],
+ locationException: [4, 5, 2, 4, 3, 5, 4],
+ checkDiff: [2, 3, 1, 2, 1, 3, 2]
+ };
+
+ const option = {
+ tooltip: {
+ trigger: 'axis',
+ axisPointer: {
+ type: 'cross'
+ }
+ },
+ legend: {
+ data: ['搴撳瓨涓嶈冻', '璁㈠崟瓒呮椂', '搴撲綅寮傚父', '鐩樼偣宸紓'],
+ top: 10
+ },
+ grid: {
+ left: '3%',
+ right: '4%',
+ bottom: '3%',
+ top: '15%',
+ containLabel: true
+ },
+ xAxis: {
+ type: 'category',
+ boundaryGap: false,
+ data: exceptionData.dates
+ },
+ yAxis: {
+ type: 'value',
+ name: '寮傚父鏁伴噺'
+ },
+ series: [
+ {
+ name: '搴撳瓨涓嶈冻',
+ type: 'line',
+ smooth: true,
+ symbol: 'circle',
+ symbolSize: 8,
+ data: exceptionData.stockShort,
+ itemStyle: { color: '#ff4d4f' },
+ lineStyle: { width: 3 }
+ },
+ {
+ name: '璁㈠崟瓒呮椂',
+ type: 'line',
+ smooth: true,
+ symbol: 'circle',
+ symbolSize: 8,
+ data: exceptionData.orderTimeout,
+ itemStyle: { color: '#faad14' },
+ lineStyle: { width: 3 }
+ },
+ {
+ name: '搴撲綅寮傚父',
+ type: 'line',
+ smooth: true,
+ symbol: 'circle',
+ symbolSize: 8,
+ data: exceptionData.locationException,
+ itemStyle: { color: '#722ed1' },
+ lineStyle: { width: 3 }
+ },
+ {
+ name: '鐩樼偣宸紓',
+ type: 'line',
+ smooth: true,
+ symbol: 'circle',
+ symbolSize: 8,
+ data: exceptionData.checkDiff,
+ itemStyle: { color: '#13c2c2' },
+ lineStyle: { width: 3 }
+ }
+ ]
+ };
+
+ exceptionTrendChart.setOption(option);
+ return exceptionTrendChart;
+};
+
+// 鍒锋柊鎵�鏈夊浘琛紙绉婚櫎鏃犳晥闆疯揪鍥鹃�昏緫锛�
+const refreshCharts = () => {
+ const charts = [
+ initStockTrend,
+ initLocationRate,
+ ];
+
+ charts.forEach(initFunc => {
+ const chart = initFunc();
+ if (chart) {
+ chart.resize();
+ }
+ });
+};
+
+// 绐楀彛澶у皬鍙樺寲鐩戝惉
+const handleResize = () => {
+ const charts = [
+ inventoryPieChart,
+ stockTrendChart,
+ locationRateChart,
+ exceptionTrendChart
+ ];
+
+ charts.forEach(chart => {
+ if (chart) {
+ chart.resize();
+ }
+ });
+};
+
+// 缁勪欢鎸傝浇鏃讹細鍏堣姹傛暟鎹紝鍐嶅垵濮嬪寲鍥捐〃
+onMounted(() => {
+ // 鍏堣幏鍙栧悗绔暟鎹�
+ fetchBigGreenData();
+ // 鍒濆鍖栧浘琛紙纭繚DOM宸叉覆鏌擄級
+ nextTick(() => {
+ initInventoryPie();
+ initStockTrend();
+ initLocationRate();
+ initExceptionTrend();
+ window.addEventListener('resize', handleResize);
+ });
+});
+
+// 缁勪欢鍗歌浇鏃讹細閿�姣佸浘琛ㄥ疄渚嬶紝绉婚櫎浜嬩欢鐩戝惉
+onUnmounted(() => {
+ const charts = [
+ inventoryPieChart,
+ stockTrendChart,
+ locationRateChart,
+ exceptionTrendChart
+ ];
+
+ charts.forEach(chart => {
+ if (chart) {
+ chart.dispose();
+ }
+ });
+ clearInterval(taskCarouselTimer); // 娓呴櫎杞挱瀹氭椂鍣�
+ window.removeEventListener('resize', handleResize);
+});
</script>
<style scoped>
-.title {
- line-height: 70vh;
- text-align: center;
- font-size: 28px;
- color: orange;
+.wms-dashboard {
+ padding: 24px;
+ background: linear-gradient(135deg, #f0f2f5 0%, #e6e9f0 100%);
+ min-height: 100vh;
+ box-sizing: border-box;
+ font-family: "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif;
}
+
+.header {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ margin-bottom: 20px;
+ background: white;
+ padding: 15px 20px;
+ border-radius: 8px;
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05);
+}
+
+.stats-card-row,
+.chart-row,
+.table-row {
+ margin-bottom: 20px;
+}
+
+/* 鏍稿績淇敼锛氳ˉ鍏卍iv鐗坈ard鐨勫熀纭�鏍峰紡锛屾ā鎷焑l-card鐨勮瑙夋晥鏋� */
+.stats-card, .chart-card, .table-card {
+ background: #fff;
+ border-radius: 8px;
+ box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.04);
+ border: 1px solid #ebeef5;
+}
+
+.stats-card {
+ height: 140px;
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+ padding: 20px 15px;
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
+ position: relative;
+ overflow: hidden;
+ background: linear-gradient(145deg, #ffffff 0%, #f9fafc 100%);
+}
+
+
+.stats-card:hover {
+ transform: translateY(-6px) scale(1.02);
+ box-shadow: 0 12px 24px rgba(0, 0, 0, 0.1);
+ border-color: #409eff;
+ background: linear-gradient(145deg, #ffffff 0%, #f0f2f5 100%);
+}
+
+.metric-icon {
+ width: 56px;
+ height: 56px;
+ border-radius: 16px;
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ color: white;
+ margin-bottom: 12px;
+ box-shadow: 0 4px 12px rgba(102, 126, 234, 0.3);
+ transition: all 0.3s ease;
+}
+
+
+.card-title {
+ font-size: 15px;
+ color: #606266;
+ margin-bottom: 10px;
+ font-weight: 500;
+ letter-spacing: 0.5px;
+}
+
+.card-value {
+ font-size: 26px;
+ font-weight: 600;
+ margin: 4px 0;
+ background: linear-gradient(to right, #409eff, #36cfc9);
+ -webkit-background-clip: text;
+ -webkit-text-fill-color: transparent;
+ background-clip: text;
+}
+
+
+.card-value {
+ font-size: 32px;
+ font-weight: 700;
+ margin: 8px 0 4px;
+ color: #2c3e50;
+ text-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
+ line-height: 1.2;
+}
+
+.card-change {
+ margin-top: 3px;
+}
+
+.chart-card {
+ height: 400px;
+ padding: 24px;
+ display: flex;
+ flex-direction: column;
+ background: linear-gradient(180deg, #ffffff 0%, #f8f9fa 100%);
+ border: none;
+ box-shadow: 0 6px 16px rgba(0, 0, 0, 0.06);
+ border-radius: 12px;
+ transition: all 0.3s ease;
+ overflow: hidden;
+ position: relative;
+}
+
+.chart-card:hover {
+ box-shadow: 0 8px 24px rgba(0, 0, 0, 0.08);
+ transform: translateY(-2px);
+}
+
+.chart-container {
+ width: 100%;
+ height: 100%;
+ min-height: 300px;
+ flex: 1;
+ position: relative;
+ border-radius: 8px;
+ background: rgba(255, 255, 255, 0.7);
+ backdrop-filter: blur(5px);
+ box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.03);
+}
+
+
+.chart-title,
+.table-title {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ margin-bottom: 24px;
+ font-size: 18px;
+ font-weight: 600;
+ color: #2c3e50;
+ padding-left: 12px;
+ border-left: 4px solid #409eff;
+ position: relative;
+ letter-spacing: 0.5px;
+}
+
+
+.view-btn {
+ font-size: 12px;
+}
+
+.table-card {
+ padding: 24px;
+ background: #fff;
+ border-radius: 12px;
+ box-shadow: 0 6px 16px rgba(0, 0, 0, 0.06);
+ border: 1px solid rgba(0, 0, 0, 0.04);
+ overflow: hidden;
+ transition: all 0.3s ease;
+}
+
+.table-card:hover {
+ box-shadow: 0 8px 24px rgba(0, 0, 0, 0.08);
+ transform: translateY(-2px);
+}
+
+.table-pagination {
+ display: flex;
+ justify-content: flex-end;
+ align-items: center;
+ margin-top: 20px;
+ padding-top: 15px;
+ border-top: 1px solid #ebeef5;
+}
+
+/* 琛ㄦ牸鏍峰紡浼樺寲 */
+:deep(.el-table) {
+ border-radius: 6px;
+ overflow: hidden;
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);
+}
+
+:deep(.el-table th) {
+ background-color: #f5f7fa;
+ color: #606266;
+ font-weight: 600;
+ padding: 12px 0;
+}
+
+:deep(.el-table td) {
+ padding: 12px 0;
+}
+
+:deep(.el-table--border) {
+ border-radius: 6px;
+}
+
+:deep(.el-table--border::after) {
+ display: none;
+}
+
+:deep(.el-table--group::after) {
+ display: none;
+}
+
+:deep(.el-table::before) {
+ display: none;
+}
+
+:deep(.el-table__fixed-right::before) {
+ display: none;
+}
+
+:deep(.el-table__fixed::before) {
+ display: none;
+}
+
+/* 鍒嗛〉鍣ㄦ牱寮忎紭鍖� */
+:deep(.el-pagination) {
+ margin-top: 10px;
+}
+
+:deep(.el-pagination .btn-prev),
+:deep(.el-pagination .btn-next),
+:deep(.el-pagination .el-pager li) {
+ border-radius: 4px;
+ margin: 0 2px;
+ transition: all 0.3s;
+}
+
+:deep(.el-pagination .btn-prev:hover),
+:deep(.el-pagination .btn-next:hover),
+:deep(.el-pagination .el-pager li:hover) {
+ transform: translateY(-2px);
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
+}
+
+:deep(.el-pagination .el-pager li.active) {
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
+ color: #fff;
+}
+
+/* 浠诲姟鐘舵�佹牱寮� */
+.task-status {
+ display: inline-block;
+ padding: 6px 12px;
+ border-radius: 20px;
+ font-size: 13px;
+ font-weight: 500;
+ text-align: center;
+ min-width: 80px;
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);
+ transition: all 0.2s ease;
+ letter-spacing: 0.5px;
+}
+
+.status-pending {
+ background-color: rgba(64, 158, 255, 0.1);
+ color: #409eff;
+ border: 1px solid rgba(64, 158, 255, 0.2);
+}
+
+.status-processing {
+ background-color: rgba(103, 194, 58, 0.1);
+ color: #67c23a;
+ border: 1px solid rgba(103, 194, 58, 0.2);
+}
+
+.status-completed {
+ background-color: rgba(103, 194, 58, 0.1);
+ color: #67c23a;
+ border: 1px solid rgba(103, 194, 58, 0.2);
+}
+
+.status-suspended {
+ background-color: rgba(230, 162, 60, 0.1);
+ color: #e6a23c;
+ border: 1px solid rgba(230, 162, 60, 0.2);
+}
+
+.status-canceled {
+ background-color: rgba(144, 147, 153, 0.1);
+ color: #909399;
+ border: 1px solid rgba(144, 147, 153, 0.2);
+}
+
+.status-error {
+ background-color: rgba(245, 108, 108, 0.1);
+ color: #f56c6c;
+ border: 1px solid rgba(245, 108, 108, 0.2);
+}
+
+.status-unknown {
+ background-color: rgba(144, 147, 153, 0.1);
+ color: #909399;
+ border: 1px solid rgba(144, 147, 153, 0.2);
+}
+
+/* 浠诲姟绫诲瀷鏍峰紡 */
+.task-type {
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ padding: 5px 12px;
+ border-radius: 16px;
+ font-size: 13px;
+ font-weight: 600;
+ text-align: center;
+ min-width: 70px;
+ position: relative;
+ overflow: hidden;
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
+ letter-spacing: 0.5px;
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
+}
+
+@keyframes pulse {
+ 0% {
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
+ }
+ 50% {
+ box-shadow: 0 2px 12px rgba(0, 0, 0, 0.12);
+ }
+ 100% {
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
+ }
+}
+
+.task-type::before {
+ content: "";
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.3), transparent);
+ transform: translateX(-100%);
+ transition: transform 0.8s cubic-bezier(0.19, 1, 0.22, 1);
+}
+
+.task-type:hover::before {
+ transform: translateX(0);
+}
+
+.task-type:hover {
+ transform: translateY(-3px);
+ box-shadow: 0 8px 20px rgba(0, 0, 0, 0.15);
+}
+
+.task-type::after {
+ content: "";
+ position: absolute;
+ bottom: 0;
+ left: 0;
+ width: 100%;
+ height: 3px;
+ background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.7), transparent);
+ transform: scaleX(0);
+ transform-origin: center;
+ transition: transform 0.5s cubic-bezier(0.19, 1, 0.22, 1);
+}
+
+.task-type:hover::after {
+ transform: scaleX(1);
+}
+
+.type-inbound:hover {
+ box-shadow: 0 5px 15px rgba(19, 194, 194, 0.4);
+}
+
+.type-outbound:hover {
+ box-shadow: 0 5px 15px rgba(47, 84, 235, 0.4);
+}
+
+.type-transfer:hover {
+ box-shadow: 0 5px 15px rgba(250, 140, 22, 0.4);
+}
+
+.type-other:hover {
+ box-shadow: 0 5px 15px rgba(114, 46, 209, 0.4);
+}
+
+.type-unknown:hover {
+ box-shadow: 0 5px 15px rgba(89, 89, 89, 0.4);
+}
+
+.type-inbound {
+ background: linear-gradient(135deg, #13c2c2 0%, #36cfc9 100%);
+ color: white;
+ box-shadow: 0 3px 5px rgba(19, 194, 194, 0.3);
+ animation: pulse 2s infinite;
+}
+
+.type-outbound {
+ background: linear-gradient(135deg, #2f54eb 0%, #597ef7 100%);
+ color: white;
+ box-shadow: 0 3px 5px rgba(47, 84, 235, 0.3);
+ animation: pulse 2.5s infinite;
+}
+
+.type-transfer {
+ background: linear-gradient(135deg, #fa8c16 0%, #ffc53d 100%);
+ color: white;
+ box-shadow: 0 3px 5px rgba(250, 140, 22, 0.3);
+ animation: pulse 3s infinite;
+}
+
+.type-other {
+ background: linear-gradient(135deg, #722ed1 0%, #b37feb 100%);
+ color: white;
+ box-shadow: 0 3px 5px rgba(114, 46, 209, 0.3);
+ animation: pulse 2.2s infinite;
+}
+
+.type-unknown {
+ background: linear-gradient(135deg, #595959 0%, #8c8c8c 100%);
+ color: white;
+ box-shadow: 0 3px 5px rgba(89, 89, 89, 0.3);
+ animation: pulse 2.8s infinite;
+}
+
+
+.btn-group {
+ margin-left: 10px;
+}
+
+/* 绉婚櫎鍘熸湁鐨別l-card__body鏍峰紡绌块�忥紝鍥犱负宸茬粡鏇挎崲涓虹函div */
</style>
\ No newline at end of file
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/charts/wms-dashboard.vue" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/charts/wms-dashboard.vue"
index 1126002..5f50fb5 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/charts/wms-dashboard.vue"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/charts/wms-dashboard.vue"
@@ -1,118 +1,124 @@
<template>
<div class="wms-dashboard">
- <!-- 椤堕儴鏍囬鏍� -->
- <!-- <div class="header">
- <h1>WMS浠撳偍鍙鍖栧浘琛ㄧ湅鏉�</h1>
- <div class="header-right">
- <span>2025-12-24 16:11:44</span>
- <el-select v-model="month" placeholder="鏈湀" style="margin-left: 10px; width: 80px;">
- <el-option label="鏈湀" value="month"></el-option>
- <el-option label="涓婃湀" value="lastMonth"></el-option>
- </el-select>
- <el-button type="primary" style="margin-left: 10px;" @click="refreshCharts">鍒锋柊</el-button>
- </div>
- </div> -->
-
<!-- 缁熻鍗$墖鍖哄煙 - 缁戝畾鍝嶅簲寮忔暟鎹� -->
<el-row :gutter="20" class="stats-card-row">
- <el-col :span="6">
- <el-card class="stats-card">
- <div class="card-title">鎬诲簱瀛橈紙浠讹級</div>
- <div class="card-value">{{ formatNumber(bigscreendata.totalStockQuantity) }}</div>
- <!-- <div class="card-change"><el-tag type="success">鈫� 2.1% 杈冩槰鏃�</el-tag></div> -->
- </el-card>
- </el-col>
- <el-col :span="6">
- <el-card class="stats-card">
- <div class="card-title">寰呭嚭搴撹鍗�</div>
- <div class="card-value">{{ bigscreendata.unOutBoundOrderCount }}</div>
- <!-- <div class="card-change"><el-tag type="warning">鈫� 5.3% 杈�1灏忔椂鍓�</el-tag></div> -->
- </el-card>
- </el-col>
- <el-col :span="6">
- <el-card class="stats-card">
- <div class="card-title">浠婃棩浣滀笟瀹屾垚鐜�</div>
- <div class="card-value">{{ bigscreendata.dailyCompletionRate ? `${bigscreendata.dailyCompletionRate}%` : '0%' }}</div>
- <!-- <div class="card-change"><el-tag type="success">鈫� 1.8% 杈冩槰鏃�</el-tag></div> -->
- </el-card>
- </el-col>
- <el-col :span="6">
- <el-card class="stats-card">
- <div class="card-title">鏈鐞嗗紓甯�</div>
- <div class="card-value">{{ bigscreendata.unhandledExceptionCount || 0 }}</div>
- <!-- <div class="card-change"><el-tag type="danger">鈫� 1 杈�30鍒嗛挓鍓�</el-tag></div> -->
- </el-card>
- </el-col>
- </el-row>
+ <el-col :span="4">
+ <div class="stats-card">
+ <div class="metric-icon">
+ <el-icon :size="32">
+ <Box />
+ </el-icon>
+ </div>
+ <div class="card-title">鎬诲簱瀛�</div>
+ <div class="card-value">{{ formatNumber(bigscreendata.totalStockQuantity) }}</div>
+ </div>
+ </el-col>
+ <el-col :span="4">
+ <div class="stats-card">
+ <div class="metric-icon">
+ <el-icon :size="32">
+ <Document />
+ </el-icon>
+ </div>
+ <div class="card-title">寰呭嚭搴撹鍗�</div>
+ <div class="card-value">{{ bigscreendata.unOutBoundOrderCount }}</div>
+ </div>
+ </el-col>
+ <el-col :span="4">
+ <div class="stats-card">
+ <div class="metric-icon">
+ <el-icon :size="32">
+ <Download />
+ </el-icon>
+ </div>
+ <div class="card-title">浠婃棩鍏ュ簱瀹屾垚鏁�</div>
+ <div class="card-value">{{ bigscreendata.inboundCount }}</div>
+ </div>
+ </el-col>
+ <el-col :span="4">
+ <div class="stats-card">
+ <div class="metric-icon">
+ <el-icon :size="32">
+ <Upload />
+ </el-icon>
+ </div>
+ <div class="card-title">浠婃棩鍑哄簱瀹屾垚鏁�</div>
+ <div class="card-value">{{ bigscreendata.outboundCount }}</div>
+ </div>
+ </el-col>
+ <el-col :span="4">
+ <div class="stats-card">
+ <div class="metric-icon">
+ <el-icon :size="32">
+ <Box />
+ </el-icon>
+ </div>
+ <div class="card-title">鏈夎揣鏂欑</div>
+ <div class="card-value">{{ formatNumber(bigscreendata.inStockPallet) }}</div>
+ </div>
+ </el-col>
+ <el-col :span="4">
+ <div class="stats-card">
+ <div class="metric-icon">
+ <el-icon :size="32">
+ <Box />
+ </el-icon>
+ </div>
+ <div class="card-title">绌虹鏁伴噺</div>
+ <div class="card-value">{{ formatNumber(bigscreendata.freeStockPallet) }}</div>
+ </div>
+ </el-col>
+</el-row>
+
<!-- 鍥捐〃鍖哄煙锛堢涓�琛岋級 -->
<el-row :gutter="20" class="chart-row">
<el-col :span="12">
- <el-card class="chart-card">
- <div class="chart-title">搴撳瓨搴撲綅鍒嗗竷锛堝浘鍍忓寲鍗犳瘮锛�</div>
- <div ref="inventoryPieRef" class="chart-container"></div>
- </el-card>
+ <!-- 鏇挎崲el-card涓篸iv锛屼繚鐣檆hart-card绫诲悕 -->
+ <div class="chart-card">
+ <div class="chart-title">搴撲綅鍒╃敤鐜�</div>
+ <div ref="locationRateRef" class="chart-container"></div>
+ </div>
</el-col>
<el-col :span="12">
- <el-card class="chart-card">
- <div class="chart-title">杩�7鏃ュ嚭鍏ュ簱瓒嬪娍锛堝浘鍍忓寲璧板娍锛�
- <!-- <el-button-group class="btn-group">
- <el-button type="primary" size="small">鍏ㄩ儴</el-button>
- <el-button type="default" size="small">鍏ュ簱</el-button>
- <el-button type="default" size="small">鍑哄簱</el-button>
- </el-button-group> -->
- </div>
+ <div class="chart-card">
+ <div class="chart-title">杩�7鏃ュ嚭鍏ュ簱瓒嬪娍锛堝浘鍍忓寲璧板娍锛�</div>
<div ref="stockTrendRef" class="chart-container"></div>
- </el-card>
+ </div>
</el-col>
</el-row>
<!-- 鍥捐〃鍖哄煙锛堢浜岃锛� -->
<el-row :gutter="20" class="chart-row">
- <el-col :span="12">
- <el-card class="chart-card">
- <div class="chart-title">搴撲綅鍒╃敤鐜�</div>
- <div ref="locationRateRef" class="chart-container"></div>
- </el-card>
- </el-col>
- <el-col :span="12">
- <el-card class="chart-card">
- <div class="chart-title">寮傚父绫诲瀷缁熻瓒嬪娍<el-button type="text" class="view-btn">绛涢��</el-button></div>
- <div ref="exceptionTrendRef" class="chart-container"></div>
- </el-card>
- </el-col>
</el-row>
<!-- 琛ㄦ牸鍖哄煙 - 缁戝畾鍚庣浣滀笟鏁版嵁 -->
<el-row :gutter="20" class="table-row" width="100%">
<el-col :span="24">
- <el-card class="table-card">
- <div class="table-title">瀹炴椂浣滀笟鐩戞帶
- <el-button-group class="btn-group">
- <el-button type="primary" size="small">鍏ㄩ儴浣滀笟</el-button>
- <el-button type="default" size="small">鍏ュ簱</el-button>
- <el-button type="default" size="small">鍑哄簱</el-button>
- <el-button type="default" size="small">鐩樼偣</el-button>
- </el-button-group>
- </div>
- <el-table :data="bigscreendata.taskList.length ? bigscreendata.taskList : operationList" border style="width: 100%;">
- <el-table-column prop="opNo" label="浣滀笟鍗曞彿" />
- <el-table-column prop="opType" label="浣滀笟绫诲瀷" />
- <el-table-column prop="operator" label="鎿嶄綔浜哄憳" />
- <el-table-column prop="startTime" label="寮�濮嬫椂闂�" />
- <el-table-column prop="status" label="褰撳墠鐘舵��">
- <template #default="scope">
- <el-tag :type="scope.row.status === '澶勭悊涓�' ? 'info' : scope.row.status === '宸插畬鎴�' ? 'success' : 'danger'">
- {{ scope.row.status }}
- </el-tag>
+ <!-- 鏇挎崲el-card涓篸iv锛屼繚鐣檛able-card绫诲悕 -->
+ <div class="table-card">
+ <div class="table-title">瀹炴椂浣滀笟鐩戞帶</div>
+ <el-table :data="showTaskList" border style="width: 100%;">
+ <el-table-column prop="taskNum" label="浠诲姟鍙�" />
+ <el-table-column prop="taskStatus" label="浠诲姟鐘舵��" >
+ <template #default="{ row }">
+ <span class="task-status" :class="getStatusClass(row.taskStatus)">{{ getTaskStatusText(row.taskStatus) }}</span>
</template>
</el-table-column>
- <el-table-column label="鎿嶄綔"><el-button type="text">璇︽儏</el-button></el-table-column>
+ <el-table-column prop="taskType" label="浠诲姟绫诲瀷" >
+ <template #default="{ row }">
+ <span class="task-type" :class="getTypeClass(row.taskType)">{{ getTaskTypeText(row.taskType) }}</span>
+ </template>
+ </el-table-column>
+ <el-table-column prop="palletCode" label="鎵樼洏缂栧彿" />
+ <el-table-column prop="sourceAddress" label="璧风偣浣嶇疆"/>
+ <el-table-column prop="targetAddress" label="缁堢偣浣嶇疆"/>
+ <el-table-column prop="createDate" label="鍒涘缓鏃堕棿"/>
</el-table>
<div class="table-pagination">
<el-pagination layout="prev, pager, next, jumper" :current-page="1" :total="50" />
</div>
- </el-card>
+ </div>
</el-col>
</el-row>
</div>
@@ -134,37 +140,143 @@
dailyCompletionRate: 0,
unhandledExceptionCount: 0,
locationUtilizationRate: 0,
+ inStockPallet: 0,
+ freeStockPallet: 0,
dailyInOutBoundList: [],
taskList: [],
+ inboundCount: 0,
+ outboundCount: 0,
inventoryLocationDist: [], // 搴撳瓨搴撲綅鍒嗗竷鏁版嵁
exceptionTypeTrend: [] // 寮傚父绫诲瀷瓒嬪娍鏁版嵁
});
+const taskStatusMap = {
+ 100: "鏂板缓",
+ 105: "宸插彂閫�",
+ 200: "鍫嗗灈鏈哄緟鎵ц",
+ 210: "鍫嗗灈鏈烘墽琛屼腑",
+ 220: "鍫嗗灈鏈哄畬鎴�",
+ 400: "杈撻�佺嚎寰呮墽琛�",
+ 410: "杈撻�佺嚎鎵ц涓�",
+ 420: "杈撻�佺嚎瀹屾垚",
+ 300: "AGV寰呮墽琛�",
+ 310: "AGV鎵ц涓�",
+ 315: "AGV鍙栬揣涓�",
+ 320: "AGV寰呯户缁墽琛�",
+ 325: "AGV鏀捐揣涓�",
+ 330: "AGV瀹屾垚",
+ 900: "浠诲姟瀹屾垚",
+ 970: "浠诲姟鎸傝捣",
+ 980: "浠诲姟鍙栨秷",
+ 990: "浠诲姟寮傚父",
+ 110: "鎻愬崌鏈烘墽琛屼腑"
+};
+const getTaskStatusText = (statusNum) => {
+ // 澶勭悊绌哄�笺�佹棤鏁堝�硷紝鍏滃簳鏄剧ず鈥滄湭鐭ョ姸鎬佲��
+ if (statusNum === undefined || statusNum === null || isNaN(statusNum)) {
+ return "鏈煡鐘舵��";
+ }
+ // 绮惧噯鍖归厤鏄犲皠鍊硷紝鏃犲尮閰嶅垯杩斿洖鈥滄湭鐭ョ姸鎬佲��
+ return taskStatusMap[statusNum] || "鏈煡鐘舵��";
+};
+const showTaskList = ref([]); // 琛ㄦ牸鏄剧ず鐨�5鏉′换鍔★紙杞挱鐢級
+const currentTaskIndex = ref(5); // 涓嬩竴涓鏄剧ず鐨勪换鍔$储寮曪紙鍒濆浠庣6鏉″紑濮嬶紝鍓�5鏉¢粯璁ゆ樉绀猴級
+let taskCarouselTimer = null; // 杞挱瀹氭椂鍣�
// 鏁板瓧鏍煎紡鍖栵紙鍗冨垎浣嶅垎闅旓級
const formatNumber = (num) => {
if (!num) return '0';
return num.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');
};
+const startTaskCarousel = () => {
+ // 娓呴櫎鏃у畾鏃跺櫒锛岄槻姝㈤噸澶嶅惎鍔�
+ if (taskCarouselTimer) clearInterval(taskCarouselTimer);
+
+ const totalTask = bigscreendata.value.taskList.length;
+ // 浠诲姟鏁�<=5鏃讹紝涓嶈疆鎾紙娌℃湁鏇村浠诲姟鍙崲锛�
+ if (totalTask <= 5) {
+ showTaskList.value = [...bigscreendata.value.taskList];
+ return;
+ }
+
+ // 鍚姩5绉掑畾鏃跺櫒
+ taskCarouselTimer = setInterval(() => {
+ // 1. 鏂板涓�1鏉′换鍔″埌鏄剧ず鍒楄〃鏈熬
+ showTaskList.value.push(bigscreendata.value.taskList[currentTaskIndex.value]);
+ // 2. 鍒犻櫎鍒楄〃鏈�鍓嶉潰1鏉℃棫浠诲姟锛堝缁堜繚鎸�5鏉★級
+ showTaskList.value.shift();
+ // 3. 鏇存柊涓嬩竴涓换鍔$储寮曪紝瓒呭嚭鎬绘暟鍒欓噸缃紙寰幆杞挱锛�
+ currentTaskIndex.value++;
+ if (currentTaskIndex.value >= totalTask) {
+ currentTaskIndex.value = 0; // 閲嶇疆涓�0锛屽惊鐜挱鏀�
+ }
+ }, 5000); // 5绉掗棿闅�
+};
+
+const getTaskTypeText = (taskTypeNum) => {
+ // 澶勭悊绌哄��/鏃犳晥鍊�
+ if (!taskTypeNum || isNaN(taskTypeNum)) return "鏈煡绫诲瀷";
+
+ // 瀵瑰簲鍚庣TaskEnumHelper鐨勫垎缁勮鍒�
+ if (taskTypeNum >= 500 && taskTypeNum < 900) return "鍏ュ簱";
+ if (taskTypeNum >= 100 && taskTypeNum < 500) return "鍑哄簱";
+ if (taskTypeNum >= 900 && taskTypeNum < 1000) return "绉诲簱";
+ return "鍏朵粬浣滀笟"; // 鍏滃簳
+};
+
+// 鑾峰彇浠诲姟鐘舵�佹牱寮忕被
+const getStatusClass = (statusNum) => {
+ if (statusNum === undefined || statusNum === null || isNaN(statusNum)) {
+ return "status-unknown";
+ }
+
+ // 鏍规嵁鐘舵�佽寖鍥磋繑鍥炰笉鍚屾牱寮�
+ if (statusNum >= 900) return "status-completed"; // 瀹屾垚
+ if (statusNum >= 400) return "status-processing"; // 杈撻�佺嚎鎵ц涓�
+ if (statusNum >= 300) return "status-processing"; // AGV鎵ц涓�
+ if (statusNum >= 200) return "status-processing"; // 鍫嗗灈鏈烘墽琛屼腑
+ if (statusNum >= 100) return "status-pending"; // 鏂板缓銆佸凡鍙戦��
+ if (statusNum === 970) return "status-suspended"; // 鎸傝捣
+ if (statusNum === 980) return "status-canceled"; // 鍙栨秷
+ if (statusNum === 990) return "status-error"; // 寮傚父
+
+ return "status-unknown";
+};
+
+// 鑾峰彇浠诲姟绫诲瀷鏍峰紡绫�
+const getTypeClass = (taskTypeNum) => {
+ if (!taskTypeNum || isNaN(taskTypeNum)) return "type-unknown";
+
+ // 瀵瑰簲鍚庣TaskEnumHelper鐨勫垎缁勮鍒�
+ if (taskTypeNum >= 500 && taskTypeNum < 900) return "type-inbound"; // 鍏ュ簱
+ if (taskTypeNum >= 100 && taskTypeNum < 500) return "type-outbound"; // 鍑哄簱
+ if (taskTypeNum >= 900 && taskTypeNum < 1000) return "type-transfer"; // 绉诲簱
+
+ return "type-other"; // 鍏朵粬浣滀笟
+};
+
// 鑾峰彇鍚庣澶у睆鏁版嵁
const fetchBigGreenData = async () => {
try {
- // 淇锛氫唬鐞嗗凡閰嶇疆锛岀Щ闄ゅ浣欑殑/api鍓嶇紑
+ debugger
const res = await http.get('/api/BigScreen/GetBigGreenData');
console.log('澶у睆鏁版嵁', res);
- // 璧嬪�煎搷搴斿紡鏁版嵁锛堝吋瀹瑰悗绔粺涓�杩斿洖鏍煎紡锛�
+
bigscreendata.value = res.data || res;
// 鏁版嵁鏇存柊鍚庡埛鏂板浘琛�
nextTick(() => {
+ const total = bigscreendata.value.taskList.length;
+ // 鍒濆鍖栨樉绀哄墠5鏉★紙涓嶈冻5鏉″垯鏄剧ず鍏ㄩ儴锛�
+ showTaskList.value = total >=5
+ ? [...bigscreendata.value.taskList.slice(0,5)]
+ : [...bigscreendata.value.taskList];
+ startTaskCarousel(); // 鍚姩浠诲姟杞挱
refreshCharts();
});
} catch (error) {
- console.error('鑾峰彇澶у睆鏁版嵁澶辫触锛�', error);
- ElMessage.error('鏁版嵁鑾峰彇澶辫触锛岃妫�鏌ュ悗绔帴鍙f槸鍚︽甯�'); // 鏇挎崲涓篍lement Plus娑堟伅鎻愮ず
+ ElMessage.error('鏁版嵁鑾峰彇澶辫触锛岃妫�鏌ュ悗绔帴鍙f槸鍚︽甯�');
}
};
-
-console.log('澶у睆鏁版嵁111', bigscreendata.value);
// 澶囩敤妯℃嫙鏁版嵁
const operationList = ref([
@@ -187,7 +299,7 @@
let exceptionTrendChart = null;
// 鍒濆鍖栧簱瀛樺簱浣嶅垎甯冮ゼ鍥撅紙鍏宠仈鍚庣鏁版嵁锛�
-const initInventoryPie = () => {
+const initInventoryPie= () => {
if (!inventoryPieRef.value) return;
// 閿�姣佹棫瀹炰緥锛岄槻姝㈠唴瀛樻硠婕�
@@ -251,6 +363,7 @@
// 鍒濆鍖栬繎7鏃ュ嚭鍏ュ簱瓒嬪娍鍥撅紙鍏宠仈鍚庣鏁版嵁锛�
const initStockTrend = () => {
+ debugger
if (!stockTrendRef.value) return;
if (stockTrendChart) {
@@ -259,17 +372,8 @@
stockTrendChart = echarts.init(stockTrendRef.value);
// 浼樺厛浣跨敤鍚庣鏁版嵁
- const trendData = bigscreendata.value.dailyInOutBoundList.length
- ? bigscreendata.value.dailyInOutBoundList
- : [
- { date: '12-18', inNum: 10, outNum: 16 },
- { date: '12-19', inNum: 12, outNum: 18 },
- { date: '12-20', inNum: 10, outNum: 14 },
- { date: '12-21', inNum: 12, outNum: 18 },
- { date: '12-22', inNum: 10, outNum: 16 },
- { date: '12-23', inNum: 12, outNum: 18 },
- { date: '12-24', inNum: 12, outNum: 20 }
- ];
+ const trendData = bigscreendata.value.dailyInOutBoundList;
+ console.log('鍑哄叆搴撹秼鍔挎暟鎹�', trendData);
const option = {
tooltip: {
@@ -333,7 +437,7 @@
locationRateChart = echarts.init(locationRateRef.value);
// 浼樺厛浣跨敤鍚庣鏁版嵁锛屾棤鏁版嵁鍒欑敤榛樿鍊�
console.log('搴撲綅鍒╃敤鐜囨暟鎹�', bigscreendata.value.locationUtilizationRate);
- const utilizationRate = bigscreendata.value.locationUtilizationRate || 86.2;
+ const utilizationRate = bigscreendata.value.locationUtilizationRate || 0;
const freeRate = 100 - utilizationRate;
const option = {
@@ -488,10 +592,8 @@
// 鍒锋柊鎵�鏈夊浘琛紙绉婚櫎鏃犳晥闆疯揪鍥鹃�昏緫锛�
const refreshCharts = () => {
const charts = [
- initInventoryPie,
initStockTrend,
initLocationRate,
- initExceptionTrend
];
charts.forEach(initFunc => {
@@ -546,17 +648,18 @@
chart.dispose();
}
});
-
+ clearInterval(taskCarouselTimer); // 娓呴櫎杞挱瀹氭椂鍣�
window.removeEventListener('resize', handleResize);
});
</script>
<style scoped>
.wms-dashboard {
- padding: 20px;
- background: #f5f7fa;
+ padding: 24px;
+ background: linear-gradient(135deg, #f0f2f5 0%, #e6e9f0 100%);
min-height: 100vh;
box-sizing: border-box;
+ font-family: "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif;
}
.header {
@@ -576,81 +679,408 @@
margin-bottom: 20px;
}
+/* 鏍稿績淇敼锛氳ˉ鍏卍iv鐗坈ard鐨勫熀纭�鏍峰紡锛屾ā鎷焑l-card鐨勮瑙夋晥鏋� */
+.stats-card, .chart-card, .table-card {
+ background: #fff;
+ border-radius: 8px;
+ box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.04);
+ border: 1px solid #ebeef5;
+}
+
.stats-card {
- height: 120px;
+ height: 140px;
display: flex;
flex-direction: column;
justify-content: center;
- padding: 0 20px;
+ align-items: center;
+ padding: 20px 15px;
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
+ position: relative;
+ overflow: hidden;
+ background: linear-gradient(145deg, #ffffff 0%, #f9fafc 100%);
+}
+
+
+.stats-card:hover {
+ transform: translateY(-6px) scale(1.02);
+ box-shadow: 0 12px 24px rgba(0, 0, 0, 0.1);
+ border-color: #409eff;
+ background: linear-gradient(145deg, #ffffff 0%, #f0f2f5 100%);
+}
+
+.metric-icon {
+ width: 56px;
+ height: 56px;
+ border-radius: 16px;
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ color: white;
+ margin-bottom: 12px;
+ box-shadow: 0 4px 12px rgba(102, 126, 234, 0.3);
transition: all 0.3s ease;
}
-.stats-card:hover {
- transform: translateY(-2px);
- box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
-}
.card-title {
- font-size: 14px;
- color: #666;
- margin-bottom: 8px;
+ font-size: 15px;
+ color: #606266;
+ margin-bottom: 10px;
+ font-weight: 500;
+ letter-spacing: 0.5px;
}
.card-value {
- font-size: 28px;
- font-weight: bold;
+ font-size: 26px;
+ font-weight: 600;
+ margin: 4px 0;
+ background: linear-gradient(to right, #409eff, #36cfc9);
+ -webkit-background-clip: text;
+ -webkit-text-fill-color: transparent;
+ background-clip: text;
+}
+
+
+.card-value {
+ font-size: 32px;
+ font-weight: 700;
margin: 8px 0 4px;
- color: #333;
+ color: #2c3e50;
+ text-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
+ line-height: 1.2;
}
.card-change {
- margin-top: 8px;
+ margin-top: 3px;
}
.chart-card {
- height: 350px;
- padding: 15px;
+ height: 400px;
+ padding: 24px;
display: flex;
flex-direction: column;
+ background: linear-gradient(180deg, #ffffff 0%, #f8f9fa 100%);
+ border: none;
+ box-shadow: 0 6px 16px rgba(0, 0, 0, 0.06);
+ border-radius: 12px;
+ transition: all 0.3s ease;
+ overflow: hidden;
+ position: relative;
+}
+
+.chart-card:hover {
+ box-shadow: 0 8px 24px rgba(0, 0, 0, 0.08);
+ transform: translateY(-2px);
}
.chart-container {
width: 100%;
height: 100%;
- min-height: 240px;
+ min-height: 300px;
flex: 1;
+ position: relative;
+ border-radius: 8px;
+ background: rgba(255, 255, 255, 0.7);
+ backdrop-filter: blur(5px);
+ box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.03);
}
+
.chart-title,
.table-title {
display: flex;
justify-content: space-between;
align-items: center;
- margin-bottom: 15px;
- font-size: 16px;
- font-weight: bold;
- color: #333;
+ margin-bottom: 24px;
+ font-size: 18px;
+ font-weight: 600;
+ color: #2c3e50;
+ padding-left: 12px;
+ border-left: 4px solid #409eff;
+ position: relative;
+ letter-spacing: 0.5px;
}
+
.view-btn {
font-size: 12px;
}
+.table-card {
+ padding: 24px;
+ background: #fff;
+ border-radius: 12px;
+ box-shadow: 0 6px 16px rgba(0, 0, 0, 0.06);
+ border: 1px solid rgba(0, 0, 0, 0.04);
+ overflow: hidden;
+ transition: all 0.3s ease;
+}
+
+.table-card:hover {
+ box-shadow: 0 8px 24px rgba(0, 0, 0, 0.08);
+ transform: translateY(-2px);
+}
+
.table-pagination {
display: flex;
- justify-content: space-between;
+ justify-content: flex-end;
align-items: center;
- margin-top: 15px;
+ margin-top: 20px;
+ padding-top: 15px;
+ border-top: 1px solid #ebeef5;
}
+
+/* 琛ㄦ牸鏍峰紡浼樺寲 */
+:deep(.el-table) {
+ border-radius: 6px;
+ overflow: hidden;
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);
+}
+
+:deep(.el-table th) {
+ background-color: #f5f7fa;
+ color: #606266;
+ font-weight: 600;
+ padding: 12px 0;
+}
+
+:deep(.el-table td) {
+ padding: 12px 0;
+}
+
+:deep(.el-table--border) {
+ border-radius: 6px;
+}
+
+:deep(.el-table--border::after) {
+ display: none;
+}
+
+:deep(.el-table--group::after) {
+ display: none;
+}
+
+:deep(.el-table::before) {
+ display: none;
+}
+
+:deep(.el-table__fixed-right::before) {
+ display: none;
+}
+
+:deep(.el-table__fixed::before) {
+ display: none;
+}
+
+/* 鍒嗛〉鍣ㄦ牱寮忎紭鍖� */
+:deep(.el-pagination) {
+ margin-top: 10px;
+}
+
+:deep(.el-pagination .btn-prev),
+:deep(.el-pagination .btn-next),
+:deep(.el-pagination .el-pager li) {
+ border-radius: 4px;
+ margin: 0 2px;
+ transition: all 0.3s;
+}
+
+:deep(.el-pagination .btn-prev:hover),
+:deep(.el-pagination .btn-next:hover),
+:deep(.el-pagination .el-pager li:hover) {
+ transform: translateY(-2px);
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
+}
+
+:deep(.el-pagination .el-pager li.active) {
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
+ color: #fff;
+}
+
+/* 浠诲姟鐘舵�佹牱寮� */
+.task-status {
+ display: inline-block;
+ padding: 6px 12px;
+ border-radius: 20px;
+ font-size: 13px;
+ font-weight: 500;
+ text-align: center;
+ min-width: 80px;
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);
+ transition: all 0.2s ease;
+ letter-spacing: 0.5px;
+}
+
+.status-pending {
+ background-color: rgba(64, 158, 255, 0.1);
+ color: #409eff;
+ border: 1px solid rgba(64, 158, 255, 0.2);
+}
+
+.status-processing {
+ background-color: rgba(103, 194, 58, 0.1);
+ color: #67c23a;
+ border: 1px solid rgba(103, 194, 58, 0.2);
+}
+
+.status-completed {
+ background-color: rgba(103, 194, 58, 0.1);
+ color: #67c23a;
+ border: 1px solid rgba(103, 194, 58, 0.2);
+}
+
+.status-suspended {
+ background-color: rgba(230, 162, 60, 0.1);
+ color: #e6a23c;
+ border: 1px solid rgba(230, 162, 60, 0.2);
+}
+
+.status-canceled {
+ background-color: rgba(144, 147, 153, 0.1);
+ color: #909399;
+ border: 1px solid rgba(144, 147, 153, 0.2);
+}
+
+.status-error {
+ background-color: rgba(245, 108, 108, 0.1);
+ color: #f56c6c;
+ border: 1px solid rgba(245, 108, 108, 0.2);
+}
+
+.status-unknown {
+ background-color: rgba(144, 147, 153, 0.1);
+ color: #909399;
+ border: 1px solid rgba(144, 147, 153, 0.2);
+}
+
+/* 浠诲姟绫诲瀷鏍峰紡 */
+.task-type {
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ padding: 5px 12px;
+ border-radius: 16px;
+ font-size: 13px;
+ font-weight: 600;
+ text-align: center;
+ min-width: 70px;
+ position: relative;
+ overflow: hidden;
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
+ letter-spacing: 0.5px;
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
+}
+
+@keyframes pulse {
+ 0% {
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
+ }
+ 50% {
+ box-shadow: 0 2px 12px rgba(0, 0, 0, 0.12);
+ }
+ 100% {
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
+ }
+}
+
+.task-type::before {
+ content: "";
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.3), transparent);
+ transform: translateX(-100%);
+ transition: transform 0.8s cubic-bezier(0.19, 1, 0.22, 1);
+}
+
+.task-type:hover::before {
+ transform: translateX(0);
+}
+
+.task-type:hover {
+ transform: translateY(-3px);
+ box-shadow: 0 8px 20px rgba(0, 0, 0, 0.15);
+}
+
+.task-type::after {
+ content: "";
+ position: absolute;
+ bottom: 0;
+ left: 0;
+ width: 100%;
+ height: 3px;
+ background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.7), transparent);
+ transform: scaleX(0);
+ transform-origin: center;
+ transition: transform 0.5s cubic-bezier(0.19, 1, 0.22, 1);
+}
+
+.task-type:hover::after {
+ transform: scaleX(1);
+}
+
+.type-inbound:hover {
+ box-shadow: 0 5px 15px rgba(19, 194, 194, 0.4);
+}
+
+.type-outbound:hover {
+ box-shadow: 0 5px 15px rgba(47, 84, 235, 0.4);
+}
+
+.type-transfer:hover {
+ box-shadow: 0 5px 15px rgba(250, 140, 22, 0.4);
+}
+
+.type-other:hover {
+ box-shadow: 0 5px 15px rgba(114, 46, 209, 0.4);
+}
+
+.type-unknown:hover {
+ box-shadow: 0 5px 15px rgba(89, 89, 89, 0.4);
+}
+
+.type-inbound {
+ background: linear-gradient(135deg, #13c2c2 0%, #36cfc9 100%);
+ color: white;
+ box-shadow: 0 3px 5px rgba(19, 194, 194, 0.3);
+ animation: pulse 2s infinite;
+}
+
+.type-outbound {
+ background: linear-gradient(135deg, #2f54eb 0%, #597ef7 100%);
+ color: white;
+ box-shadow: 0 3px 5px rgba(47, 84, 235, 0.3);
+ animation: pulse 2.5s infinite;
+}
+
+.type-transfer {
+ background: linear-gradient(135deg, #fa8c16 0%, #ffc53d 100%);
+ color: white;
+ box-shadow: 0 3px 5px rgba(250, 140, 22, 0.3);
+ animation: pulse 3s infinite;
+}
+
+.type-other {
+ background: linear-gradient(135deg, #722ed1 0%, #b37feb 100%);
+ color: white;
+ box-shadow: 0 3px 5px rgba(114, 46, 209, 0.3);
+ animation: pulse 2.2s infinite;
+}
+
+.type-unknown {
+ background: linear-gradient(135deg, #595959 0%, #8c8c8c 100%);
+ color: white;
+ box-shadow: 0 3px 5px rgba(89, 89, 89, 0.3);
+ animation: pulse 2.8s infinite;
+}
+
.btn-group {
margin-left: 10px;
}
-/* 纭繚鍥捐〃瀹瑰櫒鏈夋槑纭昂瀵� */
-:deep(.el-card__body) {
- height: 100%;
- display: flex;
- flex-direction: column;
-}
+/* 绉婚櫎鍘熸湁鐨別l-card__body鏍峰紡绌块�忥紝鍥犱负宸茬粡鏇挎崲涓虹函div */
</style>
\ No newline at end of file
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/stock/stockInfoDetail.vue" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/stock/stockInfoDetail.vue"
index 6aee2bd..f41f4e4 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/stock/stockInfoDetail.vue"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/stock/stockInfoDetail.vue"
@@ -96,6 +96,13 @@
align: "left",
},
{
+ field: "locationCode",
+ title: "璐т綅缂栧彿",
+ type: "string",
+ width: 150,
+ align: "left",
+ },
+ {
field: "materielCode",
title: "鐗╂枡缂栧彿",
type: "string",
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/BigGreenService/BigGreenService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/BigGreenService/BigGreenService.cs"
index b32da1f..cc3a34a 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/BigGreenService/BigGreenService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/BigGreenService/BigGreenService.cs"
@@ -5,8 +5,10 @@
using System.Linq;
using System.Text;
using System.Threading.Tasks;
+using WIDESEA_Common.CommonEnum;
using WIDESEA_Common.LocationEnum;
using WIDESEA_Common.OrderEnum;
+using WIDESEA_Common.TaskEnum;
using WIDESEA_Core;
using WIDESEA_Core.BaseRepository;
using WIDESEA_Model.Models;
@@ -20,9 +22,11 @@
private readonly IRepository<Dt_LocationInfo> _locationInfoRepository;
private readonly IRepository<Dt_OutboundOrderDetail> _outBoundOrderDetailRepository;
private readonly IRepository<Dt_InboundOrderDetail> _inboundOrderDetailRepository;
+ private readonly IRepository<Dt_Task_Hty> _taskHtyRepository;
private readonly IRepository<Dt_Task> _taskRepository;
+ private readonly IRepository<Dt_StockInfo> _stockInfoRepository;
- public BigGreenService(IRepository<Dt_StockInfoDetail> stockInfoDetailRepository, IRepository<Dt_OutboundOrder> outBoundOrderRepository, IRepository<Dt_LocationInfo> locationInfoRepository,IRepository<Dt_OutboundOrderDetail> outBoundOrderDetailRepository, IRepository<Dt_InboundOrderDetail> inboundOrderDetailRepository,IRepository<Dt_Task> taskRepository)
+ public BigGreenService(IRepository<Dt_StockInfoDetail> stockInfoDetailRepository, IRepository<Dt_OutboundOrder> outBoundOrderRepository, IRepository<Dt_LocationInfo> locationInfoRepository,IRepository<Dt_OutboundOrderDetail> outBoundOrderDetailRepository, IRepository<Dt_InboundOrderDetail> inboundOrderDetailRepository,IRepository<Dt_Task> taskRepository,IRepository<Dt_Task_Hty> taskHtyRepository, IRepository<Dt_StockInfo> stockInfoRepository)
{
_stockInfoDetailRepository = stockInfoDetailRepository;
_outBoundOrderRepository = outBoundOrderRepository;
@@ -30,6 +34,8 @@
_outBoundOrderDetailRepository = outBoundOrderDetailRepository;
_inboundOrderDetailRepository = inboundOrderDetailRepository;
_taskRepository = taskRepository;
+ _taskHtyRepository = taskHtyRepository;
+ _stockInfoRepository = stockInfoRepository;
}
public WebResponseContent GetBigGreenData()
{
@@ -46,12 +52,20 @@
//璁$畻搴撲綅鍒╃敤鐜�
var freeLocation =_locationInfoRepository.Db.Queryable<Dt_LocationInfo>().Where(x=>x.LocationStatus==(int)LocationStatusEnum.Free).Count();
- var inStockLocation =_locationInfoRepository.Db.Queryable<Dt_LocationInfo>().Where(x => x.LocationStatus == (int)LocationStatusEnum.InStock).Count();
+ var inStockLocation =_locationInfoRepository.Db.Queryable<Dt_LocationInfo>().Where(x => x.LocationStatus == (int)LocationStatusEnum.InStock || x.LocationStatus == (int)LocationStatusEnum.Pallet).Count();
int totalLocation = freeLocation + inStockLocation;
decimal locationUtilizationRate = totalLocation == 0
? 0
- : Math.Round((decimal)inStockLocation / totalLocation, 4);
+ : Math.Round((decimal)inStockLocation / totalLocation, 4)*100;
+ //璁$畻鍏ュ簱浠诲姟鍜屽嚭搴撲换鍔″畬鎴愭暟閲�
+ var inboundCount =_taskHtyRepository.Db.Queryable<Dt_Task_Hty>().Where(x => x.TaskType >= 500 && x.TaskType < 900).Count();
+ var outboundCount =_taskHtyRepository.Db.Queryable<Dt_Task_Hty>().Where(x => x.TaskType >= 100 && x.TaskType < 500).Count();
+
+ //璁$畻鏈夎揣鏂欑鏁伴噺
+ var inStockPallet = _stockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x => x.PalletType ==(int) PalletTypeEnum.None).Count();
+ //璁$畻绌虹鏁伴噺
+ var freeStockPallet = _stockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x => x.PalletType == (int)PalletTypeEnum.Empty).Count();
// 4. 鑾峰彇杩�7鏃ユ瘡鏃ュ嚭鍏ュ簱鏄庣粏锛堟牳蹇冧慨鏀癸細璋冪敤涓婇潰鐨勬柟娉曪級
var dailyInOutBoundList = Get7DaysDailyInOutBound();
@@ -64,7 +78,11 @@
UnOutBoundOrderCount = unOutBound,
LocationUtilizationRate = locationUtilizationRate,
DailyInOutBoundList = dailyInOutBoundList,
- TaskList = tasks
+ TaskList = tasks,
+ InboundCount = inboundCount,
+ OutboundCount = outboundCount,
+ InStockPallet = inStockPallet,
+ FreeStockPallet = freeStockPallet
};
return WebResponseContent.Instance.OK(data: bigGreenData);
}
@@ -125,11 +143,21 @@
return dailyInOutBoundList;
}
+
+
/// <summary>
/// 澶у睆/姹囨�绘暟鎹繑鍥濪TO锛堝ぇ缁挎暟鎹眹鎬伙級
/// </summary>
public class BigGreenDataDto
{
+ /// <summary>
+ /// 鍏ュ簱瀹屾垚鏁伴噺
+ /// </summary>
+ public int InboundCount { get; set; }
+ /// <summary>
+ /// 鍑哄簱瀹屾垚鏁伴噺
+ /// </summary>
+ public int OutboundCount { get; set; }
/// <summary>
/// 鎬诲簱瀛樻暟閲�
/// </summary>
@@ -166,9 +194,18 @@
public decimal NetStock7Days { get; set; }
/// <summary>
+ /// 杩�7鏃ュ噣鍏ュ簱閲忥紙鍏ュ簱-鍑哄簱锛�
+ /// </summary>
+ public decimal totalStockChangeRate { get; set; }
+
+ /// <summary>
/// 浠诲姟鍒楄〃
/// </summary>
public List<Dt_Task> TaskList { get; set; } = new List<Dt_Task>();
+
+ public int InStockPallet { get; set; }
+
+ public int FreeStockPallet { get; set; }
}
/// <summary>
@@ -192,5 +229,7 @@
public decimal DailyInboundQuantity { get; set; }
}
+
+
}
}
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_DTO/Stock/StockInfoDetailWithPalletDto.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_DTO/Stock/StockInfoDetailWithPalletDto.cs"
index 4fe42cf..33fed9b 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_DTO/Stock/StockInfoDetailWithPalletDto.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_DTO/Stock/StockInfoDetailWithPalletDto.cs"
@@ -35,5 +35,6 @@
// 涓昏〃鎵樼洏缂栧彿锛堝墠绔渶鏄剧ず鐨勫瓧娈碉級
public string PalletCode { get; set; }
+ public string LocationCode { get; set; }
}
}
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_StockService/StockInfoDetailService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_StockService/StockInfoDetailService.cs"
index d84a515..5165f0e 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_StockService/StockInfoDetailService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_StockService/StockInfoDetailService.cs"
@@ -119,7 +119,8 @@
CreateDate = detail.CreateDate,
Modifier = detail.Modifier,
ModifyDate = detail.ModifyDate,
- PalletCode = item.PalletCode
+ PalletCode = item.PalletCode,
+ LocationCode = item.LocationCode
})
.ToPageList(options.Page, options.Rows, ref totalCount);
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Outbound.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Outbound.cs"
index 87f4d36..474ff58 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Outbound.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Outbound.cs"
@@ -830,7 +830,7 @@
}
-
+
#region 鍒嗘壒鍒嗛厤搴撳瓨
#region 鍐呭瓨閿佺鐞嗗櫒
private static readonly ConcurrentDictionary<string, SemaphoreSlim> _materialLocks =
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/BigGreen/BigScreenController.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/BigGreen/BigScreenController.cs"
index bf058da..205397f 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/BigGreen/BigScreenController.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/BigGreen/BigScreenController.cs"
@@ -2,7 +2,12 @@
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
+using Newtonsoft.Json;
using WIDESEA_Core;
+using WIDESEA_Core.BaseRepository;
+using WIDESEA_Core.Helper;
+using WIDESEA_Core.Util;
+using WIDESEA_Model.Models;
namespace WIDESEA_WMSServer.Controllers.BigGreen
{
@@ -11,15 +16,46 @@
public class BigScreenController : ControllerBase
{
private readonly IBigGreenService _bigGreenService;
- public BigScreenController(IBigGreenService bigGreenService)
+ private readonly HttpClientHelper _httpClientHelper;
+ private readonly IRepository<Dt_LocationInfo> _locationInfoRepository;
+
+ public BigScreenController(IBigGreenService bigGreenService, HttpClientHelper httpClientHelper, IRepository<Dt_LocationInfo> locationInfoRepository)
{
_bigGreenService = bigGreenService;
+ _httpClientHelper = httpClientHelper;
+ _locationInfoRepository = locationInfoRepository;
}
- [HttpGet, Route("GetBigGreenData"),AllowAnonymous]
+ [HttpGet, Route("GetBigGreenData"), AllowAnonymous]
public WebResponseContent GetBigGreenData()
{
return _bigGreenService.GetBigGreenData();
}
+ [HttpGet, Route("Test"), AllowAnonymous]
+ public WebResponseContent Test()
+ {
+ string url = "http://172.21.98.57:9046/location/query";
+ HttpResponseResult<Dictionary<string, object>> result = _httpClientHelper.Post<Dictionary<string, object>>(url, "{\"locationCodes\":[],\"containerCode\":\"\",\"locationTypeCodes\":[\"LT_SHELF_STORAGE\"]}");
+
+ if (result.Data.TryGetValue("data", out object? data))
+ {
+ if (JsonConvert.DeserializeObject<Dictionary<string, object>>(data.Serialize())?.TryGetValue("locations", out object? locations) ?? false)
+ {
+ List<Dictionary<string, object>>? keyValuePairs = JsonConvert.DeserializeObject<List<Dictionary<string, object>>>(locations.Serialize());
+ if (keyValuePairs != null)
+ {
+ List<string> list = keyValuePairs.Select(x => x["locationCode"].ToString() ?? "").ToList();
+
+ List<string> locationCodes = _locationInfoRepository.QueryData().Select(x => x.LocationCode).ToList();
+
+ List<string> notContainLocations = list.Where(x => !locationCodes.Contains(x)).ToList();
+
+ return WebResponseContent.Instance.OK(data: notContainLocations);
+ }
+ }
+ }
+ return WebResponseContent.Instance.OK();
+
+ }
}
}
--
Gitblit v1.9.3