From 025e46e11cb2962fd7692adfa401333758cc779b Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期二, 02 九月 2025 14:00:34 +0800
Subject: [PATCH] 修改组件

---
 src/pages/procurementManagement/procurementInvoiceLedger/index.vue |  312 +++++++++++++++------------------------------------
 1 files changed, 91 insertions(+), 221 deletions(-)

diff --git a/src/pages/procurementManagement/procurementInvoiceLedger/index.vue b/src/pages/procurementManagement/procurementInvoiceLedger/index.vue
index 7e63bfc..3517776 100644
--- a/src/pages/procurementManagement/procurementInvoiceLedger/index.vue
+++ b/src/pages/procurementManagement/procurementInvoiceLedger/index.vue
@@ -3,7 +3,7 @@
 		<!-- 浣跨敤閫氱敤椤甸潰澶撮儴缁勪欢 -->
 		<PageHeader title="鏉ョエ鍙拌处" @back="goBack" />
 		
-		<!-- 鎼滅储鍜岀瓫閫夊尯鍩燂紙淇濇寔涓庨攢鍞彴璐﹂鏍间竴鑷达級 -->
+		<!-- 鎼滅储鍖哄煙 -->
 		<view class="search-filter-section">
 			<view class="search-bar">
 				<view class="search-input">
@@ -15,9 +15,6 @@
 						@confirm="handleQuery"
 					/>
 				</view>
-				<!--				<view class="filter-button" @click="showFilter = true">-->
-				<!--					<up-icon name="list" size="24" color="#999"></up-icon>-->
-				<!--				</view>-->
 				<view class="filter-button" @click="handleQuery">
 					<up-icon name="search" size="24" color="#999"></up-icon>
 				</view>
@@ -90,10 +87,9 @@
 							<text class="detail-label">褰曞叆鏃ユ湡</text>
 							<text class="detail-value">{{ item.createdAt }}</text>
 						</view>
-						
 					</view>
 					<view class="action-buttons">
-						<van-button
+						<u-button
 							type="primary"
 							size="small"
 							class="action-btn"
@@ -101,9 +97,9 @@
 							@click="openEdit(item)"
 						>
 							缂栬緫
-						</van-button>
-						<van-button
-							type="danger"
+						</u-button>
+						<u-button
+							type="error"
 							size="small"
 							plain
 							class="action-btn"
@@ -111,8 +107,8 @@
 							@click="handleDelete(item)"
 						>
 							鍒犻櫎
-						</van-button>
-						<van-button
+						</u-button>
+						<u-button
 							type="default"
 							size="small"
 							plain
@@ -121,8 +117,8 @@
 							@click="openFileActions(item.commonFiles || [])"
 						>
 							鏌ョ湅闄勪欢
-						</van-button>
-						<van-button
+						</u-button>
+						<u-button
 							type="primary"
 							size="small"
 							class="action-btn"
@@ -131,7 +127,7 @@
 							@click="openUpload(item)"
 						>
 							涓婁紶
-						</van-button>
+						</u-button>
 					</view>
 				</view>
 			</view>
@@ -140,84 +136,40 @@
 			<text>鏆傛棤鏉ョエ鍙拌处鏁版嵁</text>
 		</view>
 		
-		<!-- 绛涢�夊脊绐� -->
-		<van-popup v-model:show="showFilter" position="bottom" round>
-			<view class="filter-popup">
-				<van-cell-group title="绛涢�夋潯浠�" inset>
-					<van-field
-						label="鏉ョエ鏃ユ湡"
-						readonly
-						@click="showInvoiceRange = true"
-						:placeholder="invoiceRangeLabel || '璇烽�夋嫨鏃ユ湡鑼冨洿'"
-					/>
-					<van-field
-						label="褰曞叆鏃ユ湡"
-						readonly
-						@click="showCreateDatePicker = true"
-						:placeholder="searchForm.createTimeStart || '璇烽�夋嫨褰曞叆鏃ユ湡'"
-					/>
-					<view class="switch-row">
-						<text class="switch-label">涓嶆樉绀烘湁鍙戠エ琛�</text>
-						<van-switch v-model="searchForm.status" size="20" />
-					</view>
-				</van-cell-group>
-				<view class="filter-actions">
-					<van-button @click="resetFilter">閲嶇疆</van-button>
-					<van-button type="primary" @click="confirmFilter">纭畾</van-button>
-				</view>
-			</view>
-		</van-popup>
-		
-		<!-- 鏃ュ巻锛氭潵绁ㄦ棩鏈熻寖鍥� -->
-		<van-popup v-model:show="showInvoiceRange" position="bottom">
-			<van-calendar
-				title="閫夋嫨鏉ョエ鏃ユ湡鑼冨洿"
-				type="range"
-				color="#2979ff"
-				@confirm="onInvoiceRangeConfirm"
-				@cancel="showInvoiceRange = false"
-			/>
-		</van-popup>
-		
-		<!-- 鏃ユ湡锛氬綍鍏ユ棩鏈� -->
-		<van-popup v-model:show="showCreateDatePicker" position="bottom">
-			<van-date-picker
-				v-model="currentCreateDate"
-				title="閫夋嫨褰曞叆鏃ユ湡"
-				@confirm="onCreateDateConfirm"
-				@cancel="showCreateDatePicker = false"
-			/>
-		</van-popup>
-		
-		
-		
 		<!-- 鍗曡涓婁紶寮圭獥锛堟棤琛ㄥ崟锛� -->
-		<van-popup v-model:show="showUpload" position="bottom" round>
+		<u-popup v-model="showUpload" mode="bottom" border-radius="10">
 			<view class="upload-container">
-				<van-cell-group title="涓婁紶闄勪欢锛堜粎鏀寔 pdf锛屾渶澶�10MB锛屾渶澶�10涓級" inset>
-					<van-uploader
-						accept="*"
-						multiple
-						:max-count="10"
-						:after-read="afterReadRowUpload"
-						:before-read="beforeReadPdf"
-					/>
-					<view class="uploaded-list" v-if="fileList.length">
-						<view class="uploaded-item" v-for="(f, idx) in fileList" :key="idx">
-							<text class="file-name">{{ f.name || getFileNameFromUrl(f.url) }}</text>
-							<van-button size="mini" type="danger" plain @click="removeUploaded(idx)">绉婚櫎</van-button>
-						</view>
+				<view class="popup-header">
+					<text class="popup-title">涓婁紶闄勪欢锛堜粎鏀寔 pdf锛屾渶澶�10MB锛屾渶澶�10涓級</text>
+				</view>
+				<u-upload
+					ref="uploadRef"
+					accept="file"
+					multiple
+					:max-count="10"
+					:show-progress="true"
+					:before-upload="beforeReadPdf"
+					:action="uploadUrl"
+					:header="{ Authorization: 'Bearer ' + getToken() }"
+					name="file"
+					@on-success="onUploadSuccess"
+					@on-error="onUploadError"
+				/>
+				<view class="uploaded-list" v-if="fileList.length">
+					<view class="uploaded-item" v-for="(f, idx) in fileList" :key="idx">
+						<text class="file-name">{{ f.name || getFileNameFromUrl(f.url) }}</text>
+						<u-button size="mini" type="error" plain @click="removeUploaded(idx)">绉婚櫎</u-button>
 					</view>
-				</van-cell-group>
+				</view>
 				<view class="filter-actions">
-					<van-button @click="showUpload = false">鍙栨秷</van-button>
-					<van-button type="primary" @click="confirmUpload">纭</van-button>
+					<u-button @click="showUpload = false" type="default" size="default" style="width: 150px;">鍙栨秷</u-button>
+					<u-button @click="confirmUpload" type="primary" size="default" style="width: 150px;">纭</u-button>
 				</view>
 			</view>
-		</van-popup>
+		</u-popup>
 		
 		<!-- 闄勪欢鍒楄〃閫夋嫨 -->
-		<van-action-sheet v-model:show="showFileSheet" :actions="fileActions" cancel-text="鍙栨秷" close-on-click-action @select="onSelectFile" />
+		<u-action-sheet v-model="showFileSheet" :list="fileActions" :cancel-btn="true" @click="onSelectFile" @close="showFileSheet = false" />
 	</view>
 </template>
 
@@ -241,6 +193,8 @@
 import {onShow} from "@dcloudio/uni-app";
 import {productRecordPage} from "@/api/procurementManagement/procurementInvoiceLedger";
 import {delRegistration} from "@/api/procurementManagement/invoiceEntry";
+import PageHeader from '@/components/PageHeader.vue';
+import FooterButtons from '@/components/FooterButtons.vue';
 
 const userStore = useUserStore()
 
@@ -250,19 +204,12 @@
 const page = reactive({ current: -1, size: -1 })
 const searchForm = reactive({
 	searchText: '',
-	status: false,
-	createTimeStart: ''
 })
-
-// 椤堕儴浜や簰
-const showFilter = ref(false)
-const showInvoiceRange = ref(false)
-const showCreateDatePicker = ref(false)
-const invoiceRangeLabel = ref('')
-const currentCreateDate = ref([new Date().getFullYear(), new Date().getMonth() + 1, new Date().getDate()])
 
 const currentId = ref('')
 const fileList = ref([]) // 琛屼笂浼犳垨閫氱敤涓婁紶鍒楄〃
+const uploadRef = ref()
+const uploadUrl = config.baseUrl + '/invoiceLedger/uploadFile'
 
 // 琛屼笂浼犲脊绐�
 const showUpload = ref(false)
@@ -293,65 +240,19 @@
 
 const getList = async () => {
 	try {
-		showLoadingToast({ message: '鍔犺浇涓�...' })
-		const { invoiceDate, ...rest } = searchForm
-		const res = await productRecordPage({ ...rest, ...page })
+		uni.showLoading({
+			title: '鍔犺浇涓�...'
+		});
+		const res = await productRecordPage({ ...searchForm, ...page })
 		// 鍏煎涓嶅悓杩斿洖缁撴瀯
 		const records = res?.data?.records || res?.records || res?.data || []
 		const totalVal = res?.data?.total || res?.total || records.length || 0
 		ledgerList.value = records
 		total.value = totalVal
-		closeToast()
+		uni.hideLoading();
 	} catch (e) {
-		closeToast()
+		uni.hideLoading();
 		showToast('鑾峰彇鍒楄〃澶辫触')
-	}
-}
-
-// 绛涢�夐�昏緫
-const resetFilter = () => {
-	searchForm.searchText = ''
-	searchForm.status = false
-	const start = dayjs().startOf('month').format('YYYY-MM-DD')
-	const end = dayjs().endOf('month').format('YYYY-MM-DD')
-	searchForm.invoiceDate = [start, end]
-	searchForm.invoiceDateStart = start
-	searchForm.invoiceDateEnd = end
-	searchForm.createTimeStart = ''
-	invoiceRangeLabel.value = ''
-}
-const confirmFilter = () => {
-	showFilter.value = false
-	getList()
-}
-const onInvoiceRangeConfirm = (e) => {
-	// e 涓� [start, end] 鐨� Date 瀵硅薄鎴栧瓧绗︿覆锛寀ni-app 涓� Vant Calendar 杩斿洖鏃堕棿鎴虫暟缁�
-	try {
-		let start, end
-		if (Array.isArray(e)) {
-			const [s, ed] = e
-			start = dayjs(s).format('YYYY-MM-DD')
-			end = dayjs(ed).format('YYYY-MM-DD')
-		} else if (e && e.detail && Array.isArray(e.detail)) {
-			const [s, ed] = e.detail
-			start = dayjs(s).format('YYYY-MM-DD')
-			end = dayjs(ed).format('YYYY-MM-DD')
-		}
-		searchForm.invoiceDateStart = start
-		searchForm.invoiceDateEnd = end
-		invoiceRangeLabel.value = `${start} 鑷� ${end}`
-		showInvoiceRange.value = false
-	} catch (err) {
-		showInvoiceRange.value = false
-	}
-}
-const onCreateDateConfirm = ({ selectedValues }) => {
-	try {
-		searchForm.createTimeStart = selectedValues.join('-')
-		currentCreateDate.value = selectedValues
-		showCreateDatePicker.value = false
-	} catch (err) {
-		showCreateDatePicker.value = false
 	}
 }
 
@@ -376,13 +277,15 @@
 		success: async (res) => {
 			if (res.confirm) {
 				try {
-					showLoadingToast({ message: '澶勭悊涓�...' })
+					uni.showLoading({
+						title: '澶勭悊涓�...'
+					});
 					await delRegistration(ids)
-					closeToast()
+					uni.hideLoading();
 					showToast('鍒犻櫎鎴愬姛')
 					await getList()
 				} catch (e) {
-					closeToast()
+					uni.hideLoading();
 					showToast('鍒犻櫎澶辫触锛岃閲嶈瘯')
 				}
 			}
@@ -399,16 +302,18 @@
 const confirmUpload = async () => {
 	try {
 		const payload = { fileList: fileList.value, id: currentId.value }
-		showLoadingToast({ message: '鎻愪氦涓�...' })
+		uni.showLoading({
+			title: '鎻愪氦涓�...'
+		});
 		await commitFile(payload)
-		closeToast()
+		uni.hideLoading();
 		showToast('鎻愪氦鎴愬姛')
 		showUpload.value = false
 		fileList.value = []
 		currentId.value = ''
 		getList()
 	} catch (e) {
-		closeToast()
+		uni.hideLoading();
 		showToast('鎻愪氦澶辫触锛岃閲嶈瘯')
 	}
 }
@@ -432,59 +337,24 @@
 	return true
 }
 
-const uploadSingleFile = async (fileObj) => {
-	return new Promise((resolve, reject) => {
-		showLoadingToast({ message: '姝e湪涓婁紶...' })
-		uni.uploadFile({
-			url: config.baseUrl + '/invoiceLedger/uploadFile',
-			filePath: fileObj.url || fileObj.file?.path || fileObj.tempFilePath,
-			name: 'file',
-			header: { Authorization: 'Bearer ' + getToken() },
-			success: (res) => {
-				closeToast()
-				try {
-					const data = JSON.parse(res.data || '{}')
-					if (data.code === 200) {
-						resolve(data.data)
-					} else {
-						reject(new Error(data.msg || '涓婁紶澶辫触'))
-					}
-				} catch (err) {
-					reject(err)
-				}
-			},
-			fail: (err) => {
-				closeToast()
-				reject(err)
-			}
-		})
-	})
-}
-
-const afterReadEditUpload = async (file) => {
+// uview-plus 鐨勪笂浼犳垚鍔熷洖璋�
+const onUploadSuccess = (res, file) => {
 	try {
-		const files = Array.isArray(file) ? file : file?.file ? [file] : [file]
-		for (const f of files) {
-			const uploaded = await uploadSingleFile(f)
-			fileList.value.push(uploaded)
+		const data = JSON.parse(res.data || '{}')
+		if (data.code === 200) {
+			fileList.value.push(data.data)
+			showToast('涓婁紶鎴愬姛')
+		} else {
+			showToast('涓婁紶澶辫触: ' + (data.msg || '鏈煡閿欒'))
 		}
-		showToast('涓婁紶鎴愬姛')
-	} catch (e) {
+	} catch (err) {
 		showToast('涓婁紶澶辫触')
 	}
 }
 
-const afterReadRowUpload = async (file) => {
-	try {
-		const files = Array.isArray(file) ? file : file?.file ? [file] : [file]
-		for (const f of files) {
-			const uploaded = await uploadSingleFile(f)
-			fileList.value.push(uploaded)
-		}
-		showToast('涓婁紶鎴愬姛')
-	} catch (e) {
-		showToast('涓婁紶澶辫触')
-	}
+// uview-plus 鐨勪笂浼犲け璐ュ洖璋�
+const onUploadError = (err) => {
+	showToast('涓婁紶澶辫触')
 }
 
 const removeUploaded = (index) => {
@@ -503,18 +373,23 @@
 // 闄勪欢鏌ョ湅
 const openFileActions = (commonFiles) => {
 	currentFilesToOpen = commonFiles || []
-	fileActions.value = (commonFiles || []).map((f, idx) => ({ name: getFileNameFromUrl(f.url || ''), index: idx }))
+	fileActions.value = (commonFiles || []).map((f, idx) => ({
+		title: getFileNameFromUrl(f.url || ''),
+		index: idx
+	}))
 	showFileSheet.value = true
 }
 const onSelectFile = async (action) => {
 	try {
 		const item = currentFilesToOpen[action.index]
 		if (!item || !item.url) return
-		showLoadingToast({ message: '涓嬭浇涓�...' })
+		uni.showLoading({
+			title: '涓嬭浇涓�...'
+		});
 		uni.downloadFile({
 			url: item.url,
 			success: (res) => {
-				closeToast()
+				uni.hideLoading();
 				if (res.statusCode === 200) {
 					uni.openDocument({ filePath: res.tempFilePath })
 				} else {
@@ -522,12 +397,12 @@
 				}
 			},
 			fail: () => {
-				closeToast()
+				uni.hideLoading();
 				showToast('涓嬭浇澶辫触')
 			}
 		})
 	} catch (e) {
-		closeToast()
+		uni.hideLoading();
 		showToast('鎵撳紑澶辫触')
 	}
 }
@@ -687,27 +562,15 @@
 	padding: 12px 12px 20px;
 }
 
-.switch-row {
-	padding: 12px 16px;
-	display: flex;
-	align-items: center;
-	justify-content: space-between;
+.popup-header {
+	padding: 10px 16px;
+	border-bottom: 1px solid #f5f5f5;
 }
 
-.switch-label {
-	font-size: 14px;
+.popup-title {
+	font-size: 16px;
+	font-weight: 500;
 	color: #333;
-}
-
-.filter-actions {
-	display: flex;
-	gap: 12px;
-	padding: 12px 16px 16px;
-	justify-content: space-between;
-}
-
-.edit-container {
-	padding-bottom: 5rem;
 }
 
 .uploaded-list {
@@ -738,6 +601,13 @@
 	color: #888;
 }
 
+.filter-actions {
+	display: flex;
+	gap: 12px;
+	padding: 12px 16px 16px;
+	justify-content: center;
+}
+
 .footer-btns {
 	position: fixed;
 	left: 0;

--
Gitblit v1.9.3