From c7b4b9a2f4c0f05aeb60a9e3f5fba5d9a3676f3f Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期一, 18 八月 2025 16:22:42 +0800
Subject: [PATCH] 中强恒兴设备管理页面添加

---
 src/views/procurementManagement/index.vue |  378 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 378 insertions(+), 0 deletions(-)

diff --git a/src/views/procurementManagement/index.vue b/src/views/procurementManagement/index.vue
new file mode 100644
index 0000000..47ec043
--- /dev/null
+++ b/src/views/procurementManagement/index.vue
@@ -0,0 +1,378 @@
+<template>
+  <div class="app-container">
+    <!-- 椤甸潰鏍囬 -->
+    <div class="page-header">
+      <h2>閲囪喘绠$悊绯荤粺</h2>
+      <p>缁熶竴绠$悊閲囪喘鍏ㄦ祦绋嬶紝鎻愬崌閲囪喘鏁堢巼涓庤川閲�</p>
+    </div>
+
+    <!-- 鍔熻兘妯″潡鍗$墖 -->
+    <el-row :gutter="20" class="module-cards">
+      <el-col :span="8">
+        <el-card class="module-card" shadow="hover" @click="navigateTo('/procurementManagement/purchaseOrder')">
+          <div class="card-content">
+            <div class="card-icon">
+              <el-icon size="48" color="#409EFF"><Document /></el-icon>
+            </div>
+            <div class="card-info">
+              <h3>閲囪喘璁㈠崟绠$悊</h3>
+              <p>鏂板缓銆佺紪杈戙�佸垹闄ら噰璐鍗曪紝閫夋嫨渚涘簲鍟嗭紝濉啓鍟嗗搧鏄庣粏</p>
+              <div class="card-stats">
+                <span>寰呭鏍�: {{ stats.pendingOrders }}</span>
+                <span>宸插鏍�: {{ stats.approvedOrders }}</span>
+              </div>
+            </div>
+          </div>
+        </el-card>
+      </el-col>
+
+      <el-col :span="8">
+        <el-card class="module-card" shadow="hover" @click="navigateTo('/procurementManagement/arrivalManagement')">
+          <div class="card-content">
+            <div class="card-icon">
+              <el-icon size="48" color="#67C23A"><Box /></el-icon>
+            </div>
+            <div class="card-info">
+              <h3>鍒拌揣绠$悊</h3>
+              <p>鑷姩鍏宠仈閲囪喘璁㈠崟锛屽綍鍏ュ埌璐у晢鍝佷俊鎭紝鏀寔鎵撳嵃鏌ョ湅</p>
+              <div class="card-stats">
+                <span>寰呮敹璐�: {{ stats.pendingArrivals }}</span>
+                <span>宸叉敹璐�: {{ stats.receivedArrivals }}</span>
+              </div>
+            </div>
+          </div>
+        </el-card>
+      </el-col>
+
+      <el-col :span="8">
+        <el-card class="module-card" shadow="hover" @click="navigateTo('/procurementManagement/qualityInspection')">
+          <div class="card-content">
+            <div class="card-icon">
+              <el-icon size="48" color="#E6A23C"><Search /></el-icon>
+            </div>
+            <div class="card-info">
+              <h3>璐ㄦ绠$悊</h3>
+              <p>鍒拌揣鍚庤嚜鍔ㄧ敓鎴愯川妫�鍗曪紝濉啓鍚堟牸涓庝笉鍚堟牸鍟嗗搧鏁伴噺鍙婂師鍥�</p>
+              <div class="card-stats">
+                <span>寰呰川妫�: {{ stats.pendingInspections }}</span>
+                <span>宸插畬鎴�: {{ stats.completedInspections }}</span>
+              </div>
+            </div>
+          </div>
+        </el-card>
+      </el-col>
+    </el-row>
+
+    <el-row :gutter="20" class="module-cards">
+      <el-col :span="8">
+        <el-card class="module-card" shadow="hover" @click="navigateTo('/procurementManagement/returnManagement')">
+          <div class="card-content">
+            <div class="card-icon">
+              <el-icon size="48" color="#F56C6C"><RefreshLeft /></el-icon>
+            </div>
+            <div class="card-info">
+              <h3>閫�璐х鐞�</h3>
+              <p>鐢熸垚閲囪喘閫�璐у崟鍜岃川妫�閫�璐у崟锛屾敮鎸佺瓫閫夋煡璇笌鍗曟嵁璇︽儏</p>
+              <div class="card-stats">
+                <span>寰呭鏍�: {{ stats.pendingReturns }}</span>
+                <span>宸插鏍�: {{ stats.approvedReturns }}</span>
+              </div>
+            </div>
+          </div>
+        </el-card>
+      </el-col>
+
+      <el-col :span="8">
+        <el-card class="module-card" shadow="hover" @click="navigateTo('/procurementManagement/priceManagement')">
+          <div class="card-content">
+            <div class="card-icon">
+              <el-icon size="48" color="#909399"><Money /></el-icon>
+            </div>
+            <div class="card-info">
+              <h3>浠锋牸绠$悊</h3>
+              <p>鏍规嵁鍟嗗搧鍙婂競鍦轰环鏍煎彉鍖栬繘琛岄噰璐环璋冩暣锛岃嚜鍔ㄦ洿鏂伴噰璐崟鎹�</p>
+              <div class="card-stats">
+                <span>鏈夋晥浠锋牸: {{ stats.activePrices }}</span>
+                <span>寰呯敓鏁�: {{ stats.pendingPrices }}</span>
+              </div>
+            </div>
+          </div>
+        </el-card>
+      </el-col>
+
+      <el-col :span="8">
+        <el-card class="module-card" shadow="hover" @click="navigateTo('/procurementManagement/procurementLedger')">
+          <div class="card-content">
+            <div class="card-icon">
+              <el-icon size="48" color="#9C27B0"><List /></el-icon>
+            </div>
+            <div class="card-info">
+              <h3>閲囪喘鍙拌处</h3>
+              <p>鏌ョ湅閲囪喘鍘嗗彶璁板綍锛岀粺璁″垎鏋愰噰璐暟鎹紝鐢熸垚閲囪喘鎶ヨ〃</p>
+              <div class="card-stats">
+                <span>鎬昏鍗�: {{ stats.totalOrders }}</span>
+                <span>鎬婚噾棰�: 楼{{ stats.totalAmount.toFixed(2) }}</span>
+              </div>
+            </div>
+          </div>
+        </el-card>
+      </el-col>
+    </el-row>
+
+    <!-- 缁熻姒傝 -->
+    <el-card class="stats-card" shadow="never">
+      <template #header>
+        <div class="card-header">
+          <span>閲囪喘缁熻姒傝</span>
+          <el-button type="primary" size="small" @click="refreshStats">鍒锋柊鏁版嵁</el-button>
+        </div>
+      </template>
+      
+      <el-row :gutter="20">
+        <el-col :span="6">
+          <div class="stat-item">
+            <div class="stat-number">{{ stats.totalOrders }}</div>
+            <div class="stat-label">閲囪喘璁㈠崟鎬绘暟</div>
+          </div>
+        </el-col>
+        <el-col :span="6">
+          <div class="stat-item">
+            <div class="stat-number">{{ stats.totalAmount.toFixed(2) }}</div>
+            <div class="stat-label">閲囪喘鎬婚噾棰�(涓囧厓)</div>
+          </div>
+        </el-col>
+        <el-col :span="6">
+          <div class="stat-item">
+            <div class="stat-number">{{ stats.avgDeliveryTime }}</div>
+            <div class="stat-label">骞冲潎浜や粯澶╂暟</div>
+          </div>
+        </el-col>
+        <el-col :span="6">
+          <div class="stat-item">
+            <div class="stat-number">{{ stats.qualityRate }}%</div>
+            <div class="stat-label">璐ㄦ鍚堟牸鐜�</div>
+          </div>
+        </el-col>
+      </el-row>
+    </el-card>
+
+    <!-- 鏈�杩戞椿鍔� -->
+    <el-card class="activity-card" shadow="never">
+      <template #header>
+        <span>鏈�杩戞椿鍔�</span>
+      </template>
+      
+      <el-timeline>
+        <el-timeline-item
+          v-for="(activity, index) in recentActivities"
+          :key="index"
+          :timestamp="activity.time"
+          :type="activity.type"
+        >
+          {{ activity.content }}
+        </el-timeline-item>
+      </el-timeline>
+    </el-card>
+  </div>
+</template>
+
+<script setup>
+import { ref, onMounted } from 'vue'
+import { useRouter } from 'vue-router'
+import { Document, Box, Search, RefreshLeft, Money, List } from '@element-plus/icons-vue'
+
+const router = useRouter()
+
+// 缁熻鏁版嵁
+const stats = ref({
+  pendingOrders: 5,
+  approvedOrders: 25,
+  pendingArrivals: 3,
+  receivedArrivals: 18,
+  pendingInspections: 2,
+  completedInspections: 15,
+  pendingReturns: 1,
+  approvedReturns: 3,
+  activePrices: 45,
+  pendingPrices: 2,
+  totalOrders: 30,
+  totalAmount: 125.8,
+  avgDeliveryTime: 7,
+  qualityRate: 96.5
+})
+
+// 鏈�杩戞椿鍔�
+const recentActivities = ref([
+  {
+    time: '2024-12-01 18:30',
+    content: '鏂板閲囪喘璁㈠崟 PO20241201004',
+    type: 'primary'
+  },
+  {
+    time: '2024-12-01 17:45',
+    content: '瀹屾垚璐ㄦ鍗� QI20241201002',
+    type: 'success'
+  },
+  {
+    time: '2024-12-01 16:20',
+    content: '鍒拌揣鍗� AR20241201003 宸叉敹璐�',
+    type: 'success'
+  },
+  {
+    time: '2024-12-01 15:15',
+    content: '浠锋牸璋冩暣锛氬晢鍝丅 浠� 楼80 璋冩暣涓� 楼75',
+    type: 'warning'
+  },
+  {
+    time: '2024-12-01 14:30',
+    content: '閫�璐у崟 RT20241201003 宸插鏍�',
+    type: 'info'
+  }
+])
+
+// 瀵艰埅鍒版寚瀹氶〉闈�
+const navigateTo = (path) => {
+  router.push(path)
+}
+
+// 鍒锋柊缁熻鏁版嵁
+const refreshStats = () => {
+  // 妯℃嫙鍒锋柊鏁版嵁
+  stats.value.pendingOrders = Math.floor(Math.random() * 10) + 1
+  stats.value.totalAmount = (Math.random() * 100 + 100).toFixed(1)
+}
+
+onMounted(() => {
+  // 椤甸潰鍔犺浇瀹屾垚鍚庣殑鍒濆鍖栭�昏緫
+})
+</script>
+
+<style scoped>
+.app-container {
+  padding: 20px;
+  background-color: #f5f7fa;
+  min-height: 100vh;
+}
+
+.page-header {
+  text-align: center;
+  margin-bottom: 30px;
+  padding: 20px;
+  background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
+  border-radius: 10px;
+  color: white;
+}
+
+.page-header h2 {
+  margin: 0 0 10px 0;
+  font-size: 28px;
+  font-weight: 600;
+}
+
+.page-header p {
+  margin: 0;
+  font-size: 16px;
+  opacity: 0.9;
+}
+
+.module-cards {
+  margin-bottom: 20px;
+}
+
+.module-card {
+  cursor: pointer;
+  transition: all 0.3s ease;
+  border: none;
+  border-radius: 12px;
+}
+
+.module-card:hover {
+  transform: translateY(-5px);
+  box-shadow: 0 8px 25px rgba(0, 0, 0, 0.15);
+}
+
+.card-content {
+  display: flex;
+  align-items: center;
+  padding: 20px;
+}
+
+.card-icon {
+  margin-right: 20px;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  width: 80px;
+  height: 80px;
+  background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%);
+  border-radius: 50%;
+  color: white;
+}
+
+.card-info h3 {
+  margin: 0 0 10px 0;
+  font-size: 18px;
+  font-weight: 600;
+  color: #303133;
+}
+
+.card-info p {
+  margin: 0 0 15px 0;
+  font-size: 14px;
+  color: #606266;
+  line-height: 1.5;
+}
+
+.card-stats {
+  display: flex;
+  gap: 15px;
+}
+
+.card-stats span {
+  font-size: 12px;
+  color: #909399;
+  background-color: #f5f7fa;
+  padding: 4px 8px;
+  border-radius: 4px;
+}
+
+.stats-card {
+  margin-bottom: 20px;
+  border-radius: 12px;
+}
+
+.card-header {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+}
+
+.stat-item {
+  text-align: center;
+  padding: 20px;
+}
+
+.stat-number {
+  font-size: 32px;
+  font-weight: 600;
+  color: #409EFF;
+  margin-bottom: 8px;
+}
+
+.stat-label {
+  font-size: 14px;
+  color: #606266;
+}
+
+.activity-card {
+  border-radius: 12px;
+}
+
+.el-timeline-item {
+  padding-bottom: 20px;
+}
+
+.el-timeline-item:last-child {
+  padding-bottom: 0;
+}
+</style>

--
Gitblit v1.9.3