From 207c564c2b8d46fd86160c4f6583c2fc9d4a4e5c Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期二, 21 四月 2026 10:44:45 +0800
Subject: [PATCH] 湟水峡app 1.协同审批功能删减
---
src/pages/cooperativeOffice/collaborativeApproval/approve.vue | 247 ++++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 240 insertions(+), 7 deletions(-)
diff --git a/src/pages/cooperativeOffice/collaborativeApproval/approve.vue b/src/pages/cooperativeOffice/collaborativeApproval/approve.vue
index aaad83e..c17236e 100644
--- a/src/pages/cooperativeOffice/collaborativeApproval/approve.vue
+++ b/src/pages/cooperativeOffice/collaborativeApproval/approve.vue
@@ -9,6 +9,11 @@
<text class="info-title">鐢宠淇℃伅</text>
</view>
<view class="info-content">
+ <!-- 瀹℃壒鏍囬锛堜粎 approveType=9 鎴� 10 鏄剧ず锛� -->
+ <view v-if="approvalData.approveType === 9 || approvalData.approveType === 10" class="info-row">
+ <text class="info-label">瀹℃壒鏍囬</text>
+ <text class="info-value">{{ approvalData.approveTitle || '-' }}</text>
+ </view>
<view class="info-row">
<text class="info-label">鐢宠浜�</text>
<text class="info-value">{{ approvalData.approveUserName }}</text>
@@ -18,14 +23,14 @@
<text class="info-value">{{ approvalData.approveDeptName }}</text>
</view>
<view class="info-row">
- <text class="info-label">鐢宠浜嬬敱</text>
+ <text class="info-label">{{ getApproveReasonLabel() }}</text>
<text class="info-value">{{ approvalData.approveReason }}</text>
</view>
<view class="info-row">
<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">
@@ -37,19 +42,89 @@
<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>
+
+ <!-- 閿�鍞鎯咃紙approveType=9锛� -->
+ <view v-if="isSalesApproval && currentSales.salesContractNo" class="sales-detail">
+ <view class="detail-header">
+ <text class="detail-title">閿�鍞鎯�</text>
+ </view>
+ <view class="detail-content">
+ <view class="detail-row">
+ <text class="detail-label">閿�鍞悎鍚屽彿</text>
+ <text class="detail-value">{{ currentSales.salesContractNo }}</text>
+ </view>
+ <view class="detail-row">
+ <text class="detail-label">瀹㈡埛鍚嶇О</text>
+ <text class="detail-value">{{ currentSales.customerName }}</text>
+ </view>
+ <view class="detail-row">
+ <text class="detail-label">涓氬姟鍛�</text>
+ <text class="detail-value">{{ currentSales.salesman }}</text>
+ </view>
+ <view class="detail-row">
+ <text class="detail-label">褰曞叆浜�</text>
+ <text class="detail-value">{{ currentSales.entryPersonName }}</text>
+ </view>
+ <view class="detail-row">
+ <text class="detail-label">绛捐鏃ユ湡</text>
+ <text class="detail-value">{{ currentSales.executionDate }}</text>
+ </view>
+ <view class="detail-row">
+ <text class="detail-label">浠樻鏂瑰紡</text>
+ <text class="detail-value">{{ currentSales.paymentMethod }}</text>
+ </view>
+ <view class="detail-row total-row">
+ <text class="detail-label">鍚堝悓閲戦</text>
+ <text class="detail-value highlight">楼{{ calculateSalesTotalAmount() }}</text>
+ </view>
+ <!-- 浜у搧鏄庣粏 -->
+ <view v-if="currentSales.productData && currentSales.productData.length > 0" class="product-list">
+ <view class="product-header">
+ <text class="product-title">浜у搧鏄庣粏</text>
+ </view>
+ <view v-for="(product, pIndex) in currentSales.productData" :key="pIndex" class="product-item">
+ <view class="product-row">
+ <text class="product-label">浜у搧鍚嶇О</text>
+ <text class="product-value">{{ product.productCategory }}</text>
+ </view>
+ <view class="product-row">
+ <text class="product-label">瑙勬牸鍨嬪彿</text>
+ <text class="product-value">{{ product.specificationModel }}</text>
+ </view>
+ <view class="product-row">
+ <text class="product-label">鏁伴噺</text>
+ <text class="product-value">{{ product.quantity }}</text>
+ </view>
+ <view class="product-row">
+ <text class="product-label">鍚◣鍗曚环</text>
+ <text class="product-value">楼{{ Number(product.taxInclusiveUnitPrice || 0).toFixed(2) }}</text>
+ </view>
+ <view class="product-row">
+ <text class="product-label">鍚◣鎬讳环</text>
+ <text class="product-value">楼{{ Number(product.taxInclusiveTotalPrice || 0).toFixed(2) }}</text>
+ </view>
+ </view>
+ </view>
+ </view>
+ </view>
+
+ <!-- 鍔犺浇鐘舵�� -->
+ <view v-if="salesLoading" class="loading-state">
+ <text>鍔犺浇閿�鍞鎯呬腑...</text>
</view>
<!-- 瀹℃壒娴佺▼ -->
@@ -128,7 +203,9 @@
<script setup>
import { ref, onMounted, computed } from 'vue'
import { approveProcessGetInfo, approveProcessDetails, updateApproveNode } from '@/api/collaborativeApproval/approvalProcess'
+import { getSalesByCode } from '@/api/procurementManagement/procurementLedger.js'
import useUserStore from '@/store/modules/user'
+
const showToast = (message) => {
uni.showToast({
title: message,
@@ -142,14 +219,44 @@
const approvalSteps = ref([])
const approvalOpinion = ref('')
const approveId = ref('')
+const approveType = ref(0)
+const isSalesApproval = computed(() => Number(approveType.value) === 9)
+const currentSales = ref({})
+const salesLoading = ref(false)
// 浠庤鎯呮帴鍙e瓧娈靛榻� canApprove锛氫粎褰撴湁 isShen 鐨勮妭鐐规椂鍙鎵�
const canApprove = computed(() => {
return approvalSteps.value.some(step => step.isShen === true)
})
+// 鑾峰彇瀹℃壒浜嬬敱鏍囩
+const getApproveReasonLabel = () => {
+ const type = Number(approveType.value)
+ if (type === 5) {
+ return '閲囪喘鍚堝悓鍙�'
+ } else if (type === 9) {
+ return '閿�鍞悎鍚屽彿'
+ } else if (type === 10) {
+ return '瀹℃壒浜嬬敱'
+ }
+ return '鐢宠浜嬬敱'
+}
+
+// 璁$畻閿�鍞悎鍚岄噾棰濓紙浜у搧鏄庣粏鍚◣鎬讳环涔嬪拰锛�
+const calculateSalesTotalAmount = () => {
+ const products = currentSales.value?.productData || []
+ const total = products.reduce((sum, item) => {
+ return sum + Number(item.taxInclusiveTotalPrice || 0)
+ }, 0)
+ return total.toFixed(2)
+}
+
onMounted(() => {
approveId.value = uni.getStorageSync('approveId')
+ const storedApproveType = uni.getStorageSync('approveType')
+ if (storedApproveType) {
+ approveType.value = Number(storedApproveType)
+ }
if (approveId.value) {
loadApprovalData()
}
@@ -159,6 +266,24 @@
// 鍩烘湰鐢宠淇℃伅
approveProcessGetInfo({ id: approveId.value }).then(res => {
approvalData.value = res.data || {}
+ // 璁剧疆瀹℃壒绫诲瀷
+ if (res.data && res.data.approveType) {
+ approveType.value = Number(res.data.approveType)
+ }
+ // 閿�鍞鎵癸細鐢ㄥ鎵逛簨鐢卞瓧娈垫壙杞界殑"閿�鍞悎鍚屽彿"鍘绘煡閿�鍞鎯�
+ if (isSalesApproval.value) {
+ const salesContractNo = res.data?.approveReason
+ if (salesContractNo) {
+ salesLoading.value = true
+ getSalesByCode({ salesContractNo }).then(salesRes => {
+ currentSales.value = salesRes || {}
+ }).catch((err) => {
+ console.error('鏌ヨ閿�鍞鎯呭け璐�:', err)
+ }).finally(() => {
+ salesLoading.value = false
+ })
+ }
+ }
})
// 瀹℃壒鑺傜偣璇︽儏
approveProcessDetails(approveId.value).then(res => {
@@ -505,9 +630,117 @@
}
/* 閫傞厤u-button鏍峰紡 */
- :deep(.u-button) {
- border-radius: 6px;
- }
+:deep(.u-button) {
+ border-radius: 6px;
+}
+
+/* 閿�鍞鎯呮牱寮� */
+.sales-detail {
+ background: #fff;
+ margin: 16px;
+ border-radius: 12px;
+ overflow: hidden;
+}
+
+.detail-header {
+ padding: 16px;
+ border-bottom: 1px solid #f0f0f0;
+ background: #f8f9fa;
+}
+
+.detail-title {
+ font-size: 16px;
+ font-weight: 600;
+ color: #333;
+}
+
+.detail-content {
+ padding: 16px;
+}
+
+.detail-row {
+ display: flex;
+ align-items: center;
+ margin-bottom: 12px;
+}
+
+.detail-label {
+ font-size: 14px;
+ color: #666;
+ width: 80px;
+ flex-shrink: 0;
+}
+
+.detail-value {
+ font-size: 14px;
+ color: #333;
+ flex: 1;
+}
+
+.detail-value.highlight {
+ font-size: 18px;
+ color: #e6a23c;
+ font-weight: bold;
+}
+
+.total-row {
+ padding-top: 8px;
+ border-top: 1px solid #f0f0f0;
+ margin-top: 8px;
+}
+
+.product-list {
+ margin-top: 16px;
+ padding-top: 16px;
+ border-top: 1px solid #f0f0f0;
+}
+
+.product-header {
+ margin-bottom: 12px;
+}
+
+.product-title {
+ font-size: 15px;
+ font-weight: 600;
+ color: #333;
+}
+
+.product-item {
+ background: #f8f9fa;
+ border-radius: 8px;
+ padding: 12px;
+ margin-bottom: 8px;
+}
+
+.product-row {
+ display: flex;
+ align-items: center;
+ margin-bottom: 6px;
+}
+
+.product-row:last-child {
+ margin-bottom: 0;
+}
+
+.product-label {
+ font-size: 13px;
+ color: #666;
+ width: 70px;
+ flex-shrink: 0;
+}
+
+.product-value {
+ font-size: 13px;
+ color: #333;
+ flex: 1;
+}
+
+.loading-state {
+ text-align: center;
+ padding: 16px;
+ color: #999;
+ font-size: 14px;
+}
@keyframes pulse {
0% {
--
Gitblit v1.9.3