From 5d51aeded717c667a22096174168e4e5e59bde39 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期五, 22 八月 2025 15:38:57 +0800
Subject: [PATCH] 1.来票登记开发联调

---
 src/pages/procurementManagement/invoiceEntry/index.vue |  419 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 419 insertions(+), 0 deletions(-)

diff --git a/src/pages/procurementManagement/invoiceEntry/index.vue b/src/pages/procurementManagement/invoiceEntry/index.vue
new file mode 100644
index 0000000..48ac313
--- /dev/null
+++ b/src/pages/procurementManagement/invoiceEntry/index.vue
@@ -0,0 +1,419 @@
+<template>
+	<view class="sales-account">
+		<!-- 浣跨敤閫氱敤椤甸潰澶撮儴缁勪欢 -->
+		<PageHeader title="鏉ョエ鐧昏" @back="goBack" />
+		
+		<!-- 鎼滅储鍜岀瓫閫夊尯鍩� -->
+		<view class="search-filter-section">
+			<view class="search-bar">
+				<view class="search-input">
+					<input
+						class="search-text"
+						placeholder="璇疯緭鍏ラ噰璐悎鍚屽彿/渚涘簲鍟嗗悕绉�"
+						v-model="searchKeyword"
+					/>
+				</view>
+				<view class="filter-button" @click="getList">
+					<up-icon name="search" size="24" color="#999"></up-icon>
+				</view>
+			</view>
+		</view>
+		
+		<!-- 閲囪喘鍙拌处鐎戝竷娴� -->
+		<view class="ledger-list" v-if="ledgerList.length > 0">
+			<view v-for="(item, index) in ledgerList" :key="index">
+				<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.purchaseContractNumber }}</text>
+						</view>
+					</view>
+					<up-divider></up-divider>
+					
+					<view class="item-details">
+						<view class="detail-row">
+							<text class="detail-label">閿�鍞悎鍚屽彿</text>
+							<text class="detail-value">{{ item.salesContractNo }}</text>
+						</view>
+						<view class="detail-row">
+							<text class="detail-label">渚涘簲鍟嗗悕绉�</text>
+							<text class="detail-value">{{ item.supplierName }}</text>
+						</view>
+						<view class="detail-row">
+							<text class="detail-label">椤圭洰鍚嶇О</text>
+							<text class="detail-value">{{ item.projectName }}</text>
+						</view>
+						<view class="detail-row">
+							<text class="detail-label">鍚堝悓閲戦(鍏�)</text>
+							<text class="detail-value highlight">{{ item.contractAmount }}</text>
+						</view>
+						<view class="detail-row">
+							<text class="detail-label">宸插紑绁ㄩ噾棰�(鍏�)</text>
+							<text class="detail-value highlight">{{ item.receiptPaymentAmount }}</text>
+						</view>
+						<view class="detail-row">
+							<text class="detail-label">寰呭紑绁ㄩ噾棰�(鍏�)</text>
+							<text class="detail-value redlight">{{ item.unReceiptPaymentAmount }}</text>
+						</view>
+					</view>
+					
+					<!-- 鎿嶄綔鎸夐挳鍖哄煙 -->
+					<view class="action-buttons">
+						<van-button
+							type="primary"
+							size="small"
+							@click="handleAddInvoice(item)"
+							class="action-btn"
+							:disabled="item.unReceiptPaymentAmount == 0"
+						>
+							鏂板寮�绁�
+						</van-button>
+						<van-button
+							type="default"
+							size="small"
+							@click="handleViewDetail(item)"
+							class="action-btn"
+						>
+							鏌ョ湅璇︽儏
+						</van-button>
+					</view>
+				</view>
+			</view>
+		</view>
+		<view v-else class="no-data">
+			<text>鏆傛棤閲囪喘鍙拌处鏁版嵁</text>
+		</view>
+	</view>
+</template>
+
+<script setup>
+import { ref } from 'vue';
+import { onShow } from '@dcloudio/uni-app';
+import useUserStore from "@/store/modules/user";
+import {gePurchaseListPage} from "@/api/procurementManagement/invoiceEntry";
+const userStore = useUserStore()
+
+// 鎼滅储鍏抽敭璇�
+const searchKeyword = ref('');
+
+// 閲囪喘鍙拌处鏁版嵁
+const ledgerList = ref([]);
+
+// 杩斿洖涓婁竴椤�
+const goBack = () => {
+	uni.navigateBack();
+};
+// 鏌ヨ鍒楄〃
+const getList = () => {
+	const page = {
+		current: -1,
+		size: -1
+	}
+	gePurchaseListPage({...page}).then((res) => {
+		ledgerList.value = res.data.records;
+	}).catch(() => {
+		// tableLoading.value = false;
+	});
+};
+
+// 澶勭悊鏂板鏉ョエ
+const handleAddInvoice = (item) => {
+	try {
+		// 瀛樺偍閫変腑鐨勫悎鍚屼俊鎭�
+		uni.setStorageSync('editData', JSON.stringify(item));
+		// 璺宠浆鍒版柊澧炴潵绁ㄩ〉闈�
+		uni.navigateTo({
+			url: '/pages/procurementManagement/invoiceEntry/add'
+		});
+	} catch (error) {
+		console.error('澶勭悊鏂板鏉ョエ澶辫触:', error);
+		uni.showToast({
+			title: '鎿嶄綔澶辫触锛岃閲嶈瘯',
+			icon: 'error'
+		});
+	}
+};
+
+// 澶勭悊鏌ョ湅璇︽儏
+const handleViewDetail = (item) => {
+	try {
+		// 瀛樺偍鏁版嵁
+		uni.setStorageSync('editData', JSON.stringify(item));
+		
+		// 璺宠浆鍒拌鎯呴〉闈�
+		uni.navigateTo({
+			url: '/pages/procurementManagement/invoiceEntry/view'
+		});
+	} catch (error) {
+		console.error('澶勭悊鏌ョ湅璇︽儏澶辫触:', error);
+		uni.showToast({
+			title: '鎿嶄綔澶辫触锛岃閲嶈瘯',
+			icon: 'error'
+		});
+	}
+};
+
+onShow(() => {
+	// 椤甸潰鏄剧ず鏃跺埛鏂板垪琛�
+	getList();
+});
+</script>
+
+<style scoped lang="scss">
+.u-divider {
+	margin: 0 !important;
+}
+.sales-account {
+	min-height: 100vh;
+	background: #f8f9fa;
+	position: relative;
+}
+
+.page-header {
+	background: #ffffff;
+	padding: 16px 20px;
+	display: flex;
+	align-items: center;
+	justify-content: space-between;
+	border-bottom: 1px solid #f0f0f0;
+	position: sticky;
+	/* 鍏煎 iOS 鍒樻捣/鐏靛姩宀涘畨鍏ㄥ尯 */
+	padding-top: env(safe-area-inset-top);
+	top: 0;
+	z-index: 100;
+}
+
+.header-left {
+	display: flex;
+	align-items: center;
+	gap: 8px;
+}
+
+.nav-icon {
+	width: 24px;
+	height: 24px;
+	background: #2979ff;
+	border-radius: 4px;
+	display: flex;
+	align-items: center;
+	justify-content: center;
+}
+
+.nav-text {
+	font-size: 14px;
+	color: #2979ff;
+	font-weight: 500;
+}
+
+.header-center {
+	flex: 1;
+	display: flex;
+	justify-content: center;
+	align-items: center;
+	position: absolute;
+	left: 0;
+	right: 0;
+	pointer-events: none;
+}
+
+.page-title {
+	font-size: 18px;
+	font-weight: 600;
+	color: #333;
+	pointer-events: auto;
+}
+
+.header-right {
+	display: flex;
+	align-items: center;
+}
+
+.status-bar {
+	display: flex;
+	align-items: center;
+	gap: 4px;
+}
+
+.signal, .wifi, .battery {
+	width: 16px;
+	height: 8px;
+	background: #333;
+	border-radius: 2px;
+}
+
+.search-filter-section {
+	padding: 10px 20px;
+	background: #ffffff;
+}
+
+.search-bar {
+	display: flex;
+	align-items: center;
+	gap: 12px;
+}
+
+.search-input {
+	flex: 1;
+	background: #f5f5f5;
+	border-radius: 24px;
+	padding: 10px 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;
+	display: flex;
+	align-items: center;
+	justify-content: space-between;
+}
+
+.item-left {
+	display: flex;
+	align-items: center;
+	gap: 8px;
+}
+
+.document-icon {
+	width: 24px;
+	height: 24px;
+	background: #2979ff;
+	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.highlight {
+	color: #2979ff;
+	font-weight: 500;
+}
+.detail-value.redlight {
+	color: red;
+	font-weight: 500;
+}
+
+.action-buttons {
+	display: flex;
+	gap: 12px;
+	padding: 0 0 16px 0;
+	justify-content: space-between;
+}
+
+.action-btn {
+	flex: 1;
+}
+
+.no-data {
+	padding: 40px 0;
+	text-align: center;
+	color: #999;
+}
+
+.fab-button {
+	position: fixed;
+	bottom: 30px;
+	right: 30px;
+	width: 56px;
+	height: 56px;
+	background: #2979ff;
+	border-radius: 50%;
+	display: flex;
+	align-items: center;
+	justify-content: center;
+	box-shadow: 0 4px 16px rgba(41, 121, 255, 0.3);
+	z-index: 1000;
+}
+</style>

--
Gitblit v1.9.3