From 0f34d97b5c0c559b3d132bf1171de43a5ea9a596 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期四, 04 九月 2025 17:43:25 +0800
Subject: [PATCH] 设备保养真机测试,bug修改

---
 src/pages/cooperativeOffice/collaborativeApproval/index.vue |  372 ++++++++++++++++++++++++++---------------------------
 1 files changed, 182 insertions(+), 190 deletions(-)

diff --git a/src/pages/cooperativeOffice/collaborativeApproval/index.vue b/src/pages/cooperativeOffice/collaborativeApproval/index.vue
index 0ae745b..6004a54 100644
--- a/src/pages/cooperativeOffice/collaborativeApproval/index.vue
+++ b/src/pages/cooperativeOffice/collaborativeApproval/index.vue
@@ -5,54 +5,91 @@
 		<PageHeader title="瀹℃壒绠$悊" @back="goBack" />
 
 		<!-- 鎼滅储鍜岀瓫閫夊尯鍩� -->
-		<view class="search-filter-section">
+		<view class="search-section">
 			<view class="search-bar">
 				<view class="search-input">
-					<u-input placeholder="璇疯緭鍏ラ噰璐悎鍚屽彿" class="search-text" v-model="searchKeyword">
-						<template #suffix>
-							<up-icon name="search" size="24" color="#999" @click="getList"></up-icon>
-						</template>
-					</u-input>
+					<up-input
+						class="search-text"
+						placeholder="璇疯緭鍏ユ祦绋嬬紪鍙�"
+						v-model="searchForm.approveId"
+						clearable
+					/>
 				</view>
-				<view class="filter-button" @click="showFilterOptions">
-					<van-icon name="filter-o" size="24" color="#999"></van-icon>
+				<view class="search-button" @click="getList">
+					<up-icon name="search" size="24" color="#999"></up-icon>
 				</view>
 			</view>
 		</view>
 
-		<!-- 閿�鍞彴璐︾�戝竷娴� -->
-		<view class="ledger-list" v-if="total > 0">
+		<!-- 瀹℃壒鍒楄〃 -->
+		<view class="ledger-list" v-if="ledgerList.length > 0">
 			<view v-for="(item, index) in ledgerList" :key="index">
-				<view class="ledger-item" @click="handleItemClick(item)">
+				<view class="ledger-item">
 					<view class="item-header">
 						<view class="item-left">
 							<view class="document-icon">
 								<up-icon name="file-text" size="16" color="#ffffff"></up-icon>
 							</view>
-							<text class="item-id">{{ item.salesContractNo }}</text>
+							<text class="item-id">{{ item.approveId }}</text>
+						</view>
+						<view class="item-tag">
+							<u-tag :type="getTagClass(item.approveStatus)">{{ formatReceiptType(item.approveStatus) }}</u-tag>
 						</view>
 					</view>
 					<up-divider></up-divider>
 
 					<view class="item-details">
-						<view class="detail-info">
-							<view class="detail-row">
-								<text class="detail-label">鐢宠浜�</text>
-								<text class="detail-value">{{ item.entryPersonName }}</text>
-							</view>
-							<view class="detail-row">
-								<text class="detail-label">鐢宠鏃ユ湡</text>
-								<text class="detail-value highlightBlue">{{ item.entryDate }}</text>
-							</view>
+						<view class="detail-row">
+							<text class="detail-label">鐢宠浜�</text>
+							<text class="detail-value">{{ item.approveUserName }}</text>
 						</view>
+						<view class="detail-row">
+							<text class="detail-label">鐢宠閮ㄩ棬</text>
+							<text class="detail-value">{{ item.approveDeptName }}</text>
+						</view>
+						<view class="detail-row-approveReason">
+							<text class="detail-label">瀹℃壒浜嬬敱</text>
+							<text class="detail-value highlightBlue">{{ item.approveReason }}</text>
+						</view>
+						<view class="detail-row">
+							<text class="detail-label">鐢宠鏃ユ湡</text>
+							<text class="detail-value">{{ item.approveTime }}</text>
+						</view>
+						<view class="detail-row">
+							<text class="detail-label">缁撴潫鏃ユ湡</text>
+							<text class="detail-value">{{ item.approveOverTime }}</text>
+						</view>
+						<up-divider></up-divider>
 						<view class="detail-info">
-							<view class="detail-row">
-								<text class="detail-label">鐢宠閮ㄩ棬</text>
-								<text class="detail-value">{{ item.entryPersonName }}</text>
+							<view class="detail-row-user">
+								<text class="detail-label">褰撳墠瀹℃壒浜�</text>
+								<view class="detail-value approver-value">
+									<view class="approver-chip">
+										<text class="approver-name">{{ item.approveUserCurrentName || '鏈垎閰�' }}</text>
+									</view>
+								</view>
 							</view>
 							<view class="detail-row">
-								<text class="detail-label">瀹℃壒鐘舵��</text>
-								<text class="detail-value highlightYellow">{{ item.entryDate }}</text>
+								<view class="actions">
+									<u-button
+										type="primary"
+										size="small"
+										class="action-btn edit"
+										:disabled="item.approveStatus == 2 || item.approveStatus == 1 || item.approveStatus == 4"
+										@click="handleItemClick(item)"
+									>
+											缂栬緫
+									</u-button>
+									<u-button
+										type="success"
+										size="small"
+										class="action-btn approve"
+										:disabled="item.approveUserCurrentId == null || item.approveStatus == 2 || item.approveStatus == 3 || item.approveStatus == 4 || item.approveUserCurrentId !== userStore.id"
+										@click="approve(item)"
+									>
+											瀹℃牳
+									</u-button>
+								</view>
 							</view>
 						</view>
 					</view>
@@ -62,7 +99,6 @@
 		<view v-else class="no-data">
 			<text>鏆傛棤瀹℃壒鏁版嵁</text>
 		</view>
-
 		<!-- 娴姩鎿嶄綔鎸夐挳 -->
 		<view class="fab-button" @click="handleAdd">
 			<up-icon name="plus" size="24" color="#ffffff"></up-icon>
@@ -73,20 +109,23 @@
 <script setup>
 	import {
 		ref,
-		reactive,
-		onMounted
+		toRefs,
+		reactive
 	} from "vue";
-	import {
-		ledgerListPage
-	} from "@/api/cooperativeOffice/collaborativeApproval";
 	import PageHeader from "@/components/PageHeader.vue";
-
-	// 鎼滅储鍏抽敭璇�
-	const searchKeyword = ref("");
-
-	// 閿�鍞彴璐︽暟鎹�
+	import {approveProcessListPage} from "@/api/collaborativeApproval/approvalProcess";
+	import {onShow} from "@dcloudio/uni-app";
+	import useUserStore from "@/store/modules/user";
+	
+	const userStore = useUserStore()
+	// 鏁版嵁
 	const ledgerList = ref([]);
-	const total = ref(0);
+	const data = reactive({
+		searchForm: {
+			approveId: "",
+		},
+	});
+	const { searchForm } = toRefs(data);
 
 	// 杩斿洖涓婁竴椤�
 	const goBack = () => {
@@ -94,21 +133,35 @@
 	};
 	// 鏌ヨ鍒楄〃
 	const getList = () => {
+		showLoadingToast('鍔犺浇涓�...')
 		const page = {
 			current: -1,
 			size: -1,
 		};
-		ledgerListPage({
-				...page
+		approveProcessListPage({
+				...page,approveType: 0,...searchForm.value
 			})
 			.then((res) => {
-				ledgerList.value = res.records;
-				total.value = res.total;
+				ledgerList.value = res.data.records;
+				closeToast()
 			})
 			.catch(() => {
-				// tableLoading.value = false;
+				closeToast()
 			});
 	};
+	// 鏄剧ず鍔犺浇鎻愮ず
+	const showLoadingToast = (message) => {
+		uni.showLoading({
+			title: message,
+			mask: true
+		});
+	};
+
+	// 鍏抽棴鎻愮ず
+	const closeToast = () => {
+		uni.hideLoading();
+	};
+
 	// 鏄剧ず绛涢�夐�夐」
 	const showFilterOptions = () => {
 		uni.showActionSheet({
@@ -118,172 +171,92 @@
 			},
 		});
 	};
+	// 鏍煎紡鍖栧洖娆炬柟寮�
+	const formatReceiptType = (params) => {
+		if (params == 0) {
+			return "寰呭鏍�";
+		} else if (params == 1) {
+			return "瀹℃牳涓�";
+		} else if (params == 2) {
+			return "瀹℃牳瀹屾垚";
+		} else if (params == 4) {
+			return "宸查噸鏂版彁浜�";
+		} else {
+			return '涓嶉�氳繃';
+		}
+	};
+	// 鑾峰彇鏍囩鏍峰紡绫�
+	const getTagClass = (type) => {
+		if (type == 0) {
+			return "warning";
+		} else if (type == 1) {
+			return "primary";
+		} else if (type == 2) {
+			return "success";
+		} else if (type == 4) {
+			return "primary";
+		} else {
+			return "error";
+		}
+	};
 
 	// 鐐瑰嚮鍒楄〃椤�
 	const handleItemClick = (item) => {
-		uni.showToast({
-			title: `鏌ョ湅鍚堝悓: ${item.contractId}`,
-			icon: "none",
+		// 浣跨敤鏈湴瀛樺偍浼犻�掓暟鎹�
+		uni.setStorageSync('invoiceLedgerEditRow', JSON.stringify(item));
+		uni.navigateTo({
+			url: `/pages/cooperativeOffice/collaborativeApproval/detail?operationType=edit&approveId=${item.approveId}`,
 		});
 	};
 
 	// 娣诲姞鏂拌褰�
 	const handleAdd = () => {
 		uni.navigateTo({
-			url: "/pages/cooperativeOffice/collaborativeApproval/detail",
+			url: "/pages/cooperativeOffice/collaborativeApproval/detail?operationType=add",
 		});
 	};
+	// 鐐瑰嚮瀹℃牳
+	const approve = (item) => {
+		uni.navigateTo({
+			url: `/pages/cooperativeOffice/collaborativeApproval/approve?approveId=${item.approveId}`
+		})
+	}
 
-	onMounted(() => {
+	onShow(() => {
 		// 椤甸潰鍔犺浇瀹屾垚鍚庣殑鍒濆鍖栭�昏緫
 		getList();
 	});
 </script>
 
 <style scoped lang="scss">
+	@import "../../../styles/sales-common.scss";
+
 	.u-divider {
 		margin: 0 !important;
 	}
 
-	.sales-account {
-		min-height: 100vh;
-		background: #f8f9fa;
-		position: relative;
+	// 鏂囨。鍥炬爣鏍峰紡 - 瑕嗙洊鍏叡鏍峰紡涓殑鑳屾櫙鑹�
+	.document-icon {
+		background: #ed8d05;
 	}
 
-
-
-	.search-filter-section {
-		padding: 10px 20px;
-		background: #ffffff;
+	// 娴姩鎸夐挳鏍峰紡 - 瑕嗙洊鍏叡鏍峰紡涓殑鑳屾櫙鑹�
+	.fab-button {
+		background: #ed8d05;
 	}
 
-	.search-bar {
-		display: flex;
-		align-items: center;
-		gap: 12px;
-	}
-
-	.search-input {
-		flex: 1;
-		background: #f5f5f5;
-		border-radius: 24px;
-		padding: 4px 16px;
-		display: flex;
-		align-items: center;
-		gap: 8px;
-	}
-
-	.search-text {
-		flex: 1;
-		font-size: 14px;
-		color: #333;
-		background: transparent;
-		border: none;
-		outline: none;
-	}
-
-	.search-text::placeholder {
-		color: #999;
-	}
-
-	.filter-button {
-		width: 40px;
-		height: 40px;
-		border-radius: 8px;
-		display: flex;
-		align-items: center;
-		justify-content: center;
-	}
-
-	.ledger-list {
-		padding: 20px;
-	}
-
-	.ledger-item {
-		background: #ffffff;
-		border-radius: 12px;
-		margin-bottom: 16px;
-		overflow: hidden;
-		box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05);
-		padding: 0 16px;
-	}
-
-	.item-header {
-		padding: 16px 0;
+	// 鐗规湁鏍峰紡
+	.detail-row-user {
 		display: flex;
 		align-items: center;
 		justify-content: space-between;
 	}
-
-	.item-left {
+	
+	.detail-row-approveReason {
 		display: flex;
 		align-items: center;
-		gap: 8px;
-	}
-
-	.document-icon {
-		width: 24px;
-		height: 24px;
-		background: #ed8d05;
-		border-radius: 4px;
-		display: flex;
-		align-items: center;
-		justify-content: center;
-	}
-
-	.item-id {
-		font-size: 14px;
-		color: #333;
-		font-weight: 500;
-	}
-
-	.item-tag {
-		background: #4caf50;
-		border-radius: 4px;
-		padding: 2px 4px;
-	}
-
-	.tag-text {
-		font-size: 11px;
-		color: #ffffff;
-		font-weight: 500;
-	}
-
-	.item-details {
-		padding: 16px 0;
-	}
-
-	.detail-row {
-		display: flex;
-		align-items: flex-end;
 		justify-content: space-between;
 		margin-bottom: 8px;
-
-		&:last-child {
-			margin-bottom: 0;
-		}
-	}
-
-	.detail-info {
-		margin-top: 10px;
-		display: flex;
-		align-items: flex-start;
-		justify-content: space-between;
-	}
-
-	.detail-label {
-		font-size: 12px;
-		color: #777777;
-		min-width: 60px;
-	}
-
-	.detail-value {
-		font-size: 12px;
-		color: #000000;
-		text-align: right;
-		flex: 1;
-		margin-left: 16px;
 	}
 
 	.detail-value.highlightBlue {
@@ -296,24 +269,43 @@
 		font-weight: 500;
 	}
 
-	.no-data {
-		padding: 40px 0;
-		text-align: center;
-		color: #999;
+	.approver-value {
+		display: flex;
+		justify-content: flex-end;
+	}
+	
+	.approver-chip {
+		display: inline-flex;
+		align-items: center;
+		gap: 6px;
+		background: #f0f6ff;
+		color: #2b7cff;
+		border: 1px solid #e0efff;
+		border-radius: 999px;
+		padding: 4px 10px;
+		max-width: 100%;
+	}
+	
+	.approver-name {
+		font-size: 12px;
+		color: #2b7cff;
+		overflow: hidden;
+		text-overflow: ellipsis;
+		white-space: nowrap;
 	}
 
-	.fab-button {
-		position: fixed;
-		bottom: 30px;
-		right: 30px;
-		width: 56px;
-		height: 56px;
-		background: #ed8d05;
-		border-radius: 50%;
+	.actions {
 		display: flex;
+		gap: 10px;
 		align-items: center;
-		justify-content: center;
-		box-shadow: 0 4px 16px rgba(41, 121, 255, 0.3);
-		z-index: 1000;
+		justify-content: flex-end;
 	}
+
+	.action-btn {
+		border-radius: 16px;
+		height: 28px;
+		line-height: 28px;
+		padding: 0 12px;
+	}
+
 </style>
\ No newline at end of file

--
Gitblit v1.9.3