From dc7df1593a61f5f5fd0768eaeb18a3435b30b652 Mon Sep 17 00:00:00 2001 From: jiangcheng Date: Sat, 28 Mar 2026 16:55:47 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9B=BE=E7=89=87=E9=A2=84=E8=A7=88=E6=94=BE?= =?UTF-8?q?=E5=A4=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/moneyManage/executor/executor.vue | 104 ++++++++++++++++----- .../moneyManage/receiveDetail/receiveFinance.vue | 5 +- .../moneyManage/receiveDetail/receiveManage.vue | 5 +- .../moneyManage/receiveDetail/receiveService.vue | 5 +- .../moneyManage/refundDetail/refundCharge.vue | 58 +++++++++++- .../moneyManage/refundDetail/refundFinance.vue | 56 ++++++++++- .../moneyManage/refundDetail/refundHeader.vue | 58 +++++++++++- .../moneyManage/refundDetail/refundService.vue | 72 ++++++++++++-- 8 files changed, 320 insertions(+), 43 deletions(-) diff --git a/src/views/moneyManage/executor/executor.vue b/src/views/moneyManage/executor/executor.vue index 5e5ab51..308cd41 100644 --- a/src/views/moneyManage/executor/executor.vue +++ b/src/views/moneyManage/executor/executor.vue @@ -474,32 +474,86 @@ const channelOptions = ref([ // 预览图片函数 +// const previewImage = (imageUrl) => { +// // 使用 element-plus 的 el-image 组件实现图片预览功能 +// const imageElement = document.createElement('img'); +// imageElement.src = imageUrl; +// imageElement.style.maxWidth = '80vw'; +// imageElement.style.maxHeight = '80vh'; + +// const viewer = document.createElement('div'); +// viewer.style.position = 'fixed'; +// viewer.style.top = '0'; +// viewer.style.left = '0'; +// viewer.style.width = '100vw'; +// viewer.style.height = '100vh'; +// viewer.style.backgroundColor = 'rgba(0, 0, 0, 0.7)'; +// viewer.style.display = 'flex'; +// viewer.style.justifyContent = 'center'; +// viewer.style.alignItems = 'center'; +// viewer.style.zIndex = '9999'; +// viewer.style.overflow = 'auto'; + +// viewer.appendChild(imageElement); +// document.body.appendChild(viewer); + +// viewer.addEventListener('click', () => { +// document.body.removeChild(viewer); +// }); +// }; const previewImage = (imageUrl) => { - // 使用 element-plus 的 el-image 组件实现图片预览功能 - const imageElement = document.createElement('img'); - imageElement.src = imageUrl; - imageElement.style.maxWidth = '80vw'; - imageElement.style.maxHeight = '80vh'; - - const viewer = document.createElement('div'); - viewer.style.position = 'fixed'; - viewer.style.top = '0'; - viewer.style.left = '0'; - viewer.style.width = '100vw'; - viewer.style.height = '100vh'; - viewer.style.backgroundColor = 'rgba(0, 0, 0, 0.7)'; - viewer.style.display = 'flex'; - viewer.style.justifyContent = 'center'; - viewer.style.alignItems = 'center'; - viewer.style.zIndex = '9999'; - viewer.style.overflow = 'auto'; - - viewer.appendChild(imageElement); - document.body.appendChild(viewer); - - viewer.addEventListener('click', () => { - document.body.removeChild(viewer); - }); + if (!imageUrl) return; + + const imageElement = document.createElement('img'); + imageElement.src = imageUrl; + imageElement.style.maxWidth = '90vw'; + imageElement.style.maxHeight = '90vh'; + imageElement.style.display = 'block'; + + imageElement.style.transition = 'transform 0.2s ease-out'; + imageElement.style.cursor = 'zoom-in'; + imageElement.style.transformOrigin = 'center center'; // 缩放中心点 + + const viewer = document.createElement('div'); + viewer.style.position = 'fixed'; + viewer.style.top = '0'; + viewer.style.left = '0'; + viewer.style.width = '100vw'; + viewer.style.height = '100vh'; + viewer.style.backgroundColor = 'rgba(0, 0, 0, 0.7)'; + + viewer.style.display = 'flex'; + viewer.style.justifyContent = 'center'; + viewer.style.alignItems = 'center'; + + viewer.style.overflow = 'hidden'; + + viewer.style.zIndex = '999999'; + viewer.appendChild(imageElement); + + let currentScale = 1; + const scaleStep = 0.2; + const handleWheel = (e) => { + e.preventDefault(); + if (e.deltaY > 0) { + currentScale -= scaleStep; + } else { + currentScale += scaleStep; + } + if (currentScale < 0.5) currentScale = 0.5; + imageElement.style.transform = `scale(${currentScale})`; + imageElement.style.cursor = currentScale > 1 ? 'zoom-out' : 'zoom-in'; + }; + + viewer.addEventListener('wheel', handleWheel, { passive: false }); + viewer.addEventListener('click', (e) => { + if (e.target === viewer) { + document.body.removeChild(viewer); + viewer.removeEventListener('wheel', handleWheel); + } + }); + + document.body.appendChild(viewer); }; const handleImageChange = (file) => { diff --git a/src/views/moneyManage/receiveDetail/receiveFinance.vue b/src/views/moneyManage/receiveDetail/receiveFinance.vue index ac65b1c..e728ad2 100644 --- a/src/views/moneyManage/receiveDetail/receiveFinance.vue +++ b/src/views/moneyManage/receiveDetail/receiveFinance.vue @@ -467,12 +467,13 @@
- + style="height: 100%; width: 100%; object-fit: cover;" + @click.stop="previewImage(editFormData.voucher)"/> diff --git a/src/views/moneyManage/receiveDetail/receiveManage.vue b/src/views/moneyManage/receiveDetail/receiveManage.vue index 619d80a..044d1ef 100644 --- a/src/views/moneyManage/receiveDetail/receiveManage.vue +++ b/src/views/moneyManage/receiveDetail/receiveManage.vue @@ -467,12 +467,13 @@
- + style="height: 100%; width: 100%; object-fit: cover;" + @click.stop="previewImage(editFormData.voucher)"/> diff --git a/src/views/moneyManage/receiveDetail/receiveService.vue b/src/views/moneyManage/receiveDetail/receiveService.vue index e3a4941..aae7730 100644 --- a/src/views/moneyManage/receiveDetail/receiveService.vue +++ b/src/views/moneyManage/receiveDetail/receiveService.vue @@ -381,11 +381,12 @@ {{ t('common_add.transferVoucher') }} -