From 7e30426a06052407167731ed6ce27664299eb4f1 Mon Sep 17 00:00:00 2001
From: yyb <995253665@qq.com>
Date: 星期三, 22 四月 2026 13:29:06 +0800
Subject: [PATCH] 新增入库详情展示功能

---
 src/pages/cooperativeOffice/collaborativeApproval/approve.vue |  203 +++++++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 182 insertions(+), 21 deletions(-)

diff --git a/src/pages/cooperativeOffice/collaborativeApproval/approve.vue b/src/pages/cooperativeOffice/collaborativeApproval/approve.vue
index 6011e7b..969e9e1 100644
--- a/src/pages/cooperativeOffice/collaborativeApproval/approve.vue
+++ b/src/pages/cooperativeOffice/collaborativeApproval/approve.vue
@@ -25,6 +25,78 @@
           <text class="info-label">鐢宠鏃ユ湡</text>
           <text class="info-value">{{ approvalData.approveTime }}</text>
         </view>
+        
+        <!-- approveType=2 璇峰亣鐩稿叧瀛楁 -->
+        <template v-if="approvalData.approveType === 2">
+          <view class="info-row">
+            <text class="info-label">璇峰亣寮�濮嬫椂闂�</text>
+            <text class="info-value">{{ approvalData.startDate || '-' }}</text>
+          </view>
+          <view class="info-row">
+            <text class="info-label">璇峰亣缁撴潫鏃堕棿</text>
+            <text class="info-value">{{ approvalData.endDate || '-' }}</text>
+          </view>
+        </template>
+        
+        <!-- approveType=3 鍑哄樊鐩稿叧瀛楁 -->
+        <view v-if="approvalData.approveType === 3" class="info-row">
+          <text class="info-label">鍑哄樊鍦扮偣</text>
+          <text class="info-value">{{ approvalData.location || '-' }}</text>
+        </view>
+        
+        <!-- approveType=4 鎶ラ攢鐩稿叧瀛楁 -->
+        <view v-if="approvalData.approveType === 4" class="info-row">
+          <text class="info-label">鎶ラ攢閲戦</text>
+          <text class="info-value">{{ approvalData.price ? `楼${approvalData.price}` : '-' }}</text>
+        </view>
+      </view>
+    </view>
+
+    <!-- 鍏ュ簱璇︽儏 -->
+    <view v-if="approvalData.approveType === 9" class="stockin-info">
+      <view class="info-header stockin-header" @click="toggleStockInCollapse">
+        <text class="info-title">鍏ュ簱璇︽儏</text>
+        <text class="collapse-text">{{ stockInCollapsed ? '灞曞紑' : '鏀惰捣' }}</text>
+      </view>
+      <view v-show="!stockInCollapsed" class="stockin-table">
+        <view class="stockin-row">
+          <text class="stockin-label">閿�鍞悎鍚屽彿</text>
+          <text class="stockin-value">{{ stockInOrderInfoData.salesContractNo || '-' }}</text>
+          <text class="stockin-label">瀹㈡埛鍚嶇О</text>
+          <text class="stockin-value">{{ stockInOrderInfoData.customerName || stockInOrderInfoData.supplierName || '-' }}</text>
+        </view>
+        <view class="stockin-row">
+          <text class="stockin-label">椤圭洰鍚嶇О</text>
+          <text class="stockin-value">{{ stockInOrderInfoData.projectName || '-' }}</text>
+          <text class="stockin-label">涓氬姟鍛�</text>
+          <text class="stockin-value">{{ stockInOrderInfoData.businessUserName || stockInOrderInfoData.recorderName || '-' }}</text>
+        </view>
+        <view v-for="(product, index) in stockInProducts" :key="product.id || index">
+          <view class="stockin-row">
+            <text class="stockin-label">浜у搧鍚嶇О</text>
+            <text class="stockin-value">{{ product.speculativeTradingName || product.productCategory || '-' }}</text>
+            <text class="stockin-label">瑙勬牸鍨嬪彿</text>
+            <text class="stockin-value">{{ product.specificationModel || '-' }}</text>
+          </view>
+          <view class="stockin-row">
+            <text class="stockin-label">鍗曚綅</text>
+            <text class="stockin-value">{{ product.unit || '-' }}</text>
+            <text class="stockin-label">鏁伴噺</text>
+            <text class="stockin-value">{{ product.quantity ?? '-' }}</text>
+          </view>
+        </view>
+        <view v-if="!stockInProducts.length" class="stockin-row">
+          <text class="stockin-label">浜у搧鍚嶇О</text>
+          <text class="stockin-value">-</text>
+          <text class="stockin-label">瑙勬牸鍨嬪彿</text>
+          <text class="stockin-value">-</text>
+        </view>
+        <view v-if="!stockInProducts.length" class="stockin-row">
+          <text class="stockin-label">鍗曚綅</text>
+          <text class="stockin-value">-</text>
+          <text class="stockin-label">鏁伴噺</text>
+          <text class="stockin-value">-</text>
+        </view>
       </view>
     </view>
 
@@ -83,30 +155,40 @@
       </view>
       
       <view class="input-content">
-        <van-field
+        <u-textarea
           v-model="approvalOpinion"
-          type="textarea"
           rows="4"
           placeholder="璇疯緭鍏ュ鏍告剰瑙�"
           maxlength="200"
-          show-word-limit
+          count
         />
       </view>
     </view>
 
     <!-- 搴曢儴鎿嶄綔鎸夐挳 -->
     <view v-if="canApprove" class="footer-actions">
-      <van-button class="reject-btn" @click="handleReject">椹冲洖</van-button>
-      <van-button class="approve-btn" @click="handleApprove">閫氳繃</van-button>
+      <u-button class="reject-btn" @click="handleReject">椹冲洖</u-button>
+      <u-button class="approve-btn" @click="handleApprove">閫氳繃</u-button>
     </view>
   </view>
 </template>
 
 <script setup>
 import { ref, onMounted, computed } from 'vue'
-import { approveProcessGetInfo, approveProcessDetails, updateApproveNode } from '@/api/collaborativeApproval/approvalProcess'
+import {
+  approveProcessGetInfo,
+  approveProcessDetails,
+  updateApproveNode,
+  stockInOrderInfo,
+  stockInProductList
+} from '@/api/collaborativeApproval/approvalProcess'
 import useUserStore from '@/store/modules/user'
-import { showToast } from 'vant'
+const showToast = (message) => {
+	uni.showToast({
+		title: message,
+		icon: 'none'
+	})
+}
 import PageHeader from "@/components/PageHeader.vue";
 
 const userStore = useUserStore()
@@ -114,6 +196,9 @@
 const approvalSteps = ref([])
 const approvalOpinion = ref('')
 const approveId = ref('')
+const stockInOrderInfoData = ref({})
+const stockInProducts = ref([])
+const stockInCollapsed = ref(false)
 
 // 浠庤鎯呮帴鍙e瓧娈靛榻� canApprove锛氫粎褰撴湁 isShen 鐨勮妭鐐规椂鍙鎵�
 const canApprove = computed(() => {
@@ -121,9 +206,7 @@
 })
 
 onMounted(() => {
-  const pages = getCurrentPages()
-  const currentPage = pages[pages.length - 1]
-  approveId.value = currentPage.options.approveId
+  approveId.value = uni.getStorageSync('approveId')
   if (approveId.value) {
     loadApprovalData()
   }
@@ -133,6 +216,12 @@
   // 鍩烘湰鐢宠淇℃伅
   approveProcessGetInfo({ id: approveId.value }).then(res => {
     approvalData.value = res.data || {}
+    if (approvalData.value.approveType === 9) {
+      loadStockInInfo()
+    } else {
+      stockInOrderInfoData.value = {}
+      stockInProducts.value = []
+    }
   })
   // 瀹℃壒鑺傜偣璇︽儏
   approveProcessDetails(approveId.value).then(res => {
@@ -159,7 +248,26 @@
   })
 }
 
+const loadStockInInfo = () => {
+  const query = { approveId: approveId.value, id: approveId.value }
+  Promise.all([stockInOrderInfo(query), stockInProductList(query)])
+    .then(([orderRes, productRes]) => {
+      const orderInfo = orderRes?.data?.orderInfo || {}
+      stockInOrderInfoData.value = orderInfo
+      stockInProducts.value = Array.isArray(productRes?.data) ? productRes.data : []
+    })
+    .catch(() => {
+      stockInOrderInfoData.value = {}
+      stockInProducts.value = []
+    })
+}
+
+const toggleStockInCollapse = () => {
+  stockInCollapsed.value = !stockInCollapsed.value
+}
+
 const goBack = () => {
+  uni.removeStorageSync('approveId');
   uni.navigateBack()
 }
 
@@ -291,6 +399,56 @@
   margin: 16px;
   border-radius: 12px;
   overflow: hidden;
+}
+
+.stockin-info {
+  background: #fff;
+  margin: 16px;
+  border-radius: 12px;
+  overflow: hidden;
+}
+
+.stockin-header {
+  display: flex;
+  align-items: center;
+  justify-content: space-between;
+}
+
+.collapse-text {
+  font-size: 10px;
+  color: #666;
+}
+
+.stockin-table {
+  border-top: 1px solid #f0f0f0;
+}
+
+.stockin-row {
+  display: grid;
+  grid-template-columns: 22% 28% 22% 28%;
+}
+
+.stockin-label {
+  font-size: 11px;
+  color: #666;
+  padding: 12px 10px;
+  background: #f7f8fa;
+  border-right: 1px solid #f0f0f0;
+  border-bottom: 1px solid #f0f0f0;
+}
+
+.stockin-value {
+  font-size: 11px;
+  color: #333;
+  padding: 12px 10px;
+  border-right: 1px solid #f0f0f0;
+  border-bottom: 1px solid #f0f0f0;
+  word-break: break-all;
+}
+
+.stockin-row .stockin-value:last-child,
+.stockin-row .stockin-label:last-child {
+  border-right: none;
 }
 
 .process-header {
@@ -466,18 +624,21 @@
 }
 
 .reject-btn {
-  width: 120px;
-  background: #ff4d4f;
-  color: #fff;
-  border: none;
-}
+    width: 120px;
+    background: #ff4d4f;
+    color: #fff;
+  }
 
-.approve-btn {
-  width: 120px;
-  background: #52c41a;
-  color: #fff;
-  border: none;
-}
+  .approve-btn {
+    width: 120px;
+    background: #52c41a;
+    color: #fff;
+  }
+  
+  /* 閫傞厤u-button鏍峰紡 */
+  :deep(.u-button) {
+    border-radius: 6px;
+  }
 
 @keyframes pulse {
   0% {

--
Gitblit v1.9.3