From b806c4ad52a661a1e5f0695650ec1a7e42f01633 Mon Sep 17 00:00:00 2001
From: MrShi <1878285526@qq.com>
Date: 星期三, 20 五月 2026 23:08:48 +0800
Subject: [PATCH] 提交
---
admin/src/components/business/OperaManualRefund.vue | 76 ++++++++++++++++++++++++++++---------
1 files changed, 57 insertions(+), 19 deletions(-)
diff --git a/admin/src/components/business/OperaManualRefund.vue b/admin/src/components/business/OperaManualRefund.vue
index 2bf8c9f..61630f9 100644
--- a/admin/src/components/business/OperaManualRefund.vue
+++ b/admin/src/components/business/OperaManualRefund.vue
@@ -5,6 +5,7 @@
:visible.sync="visible"
:confirm-working="submitting"
:confirm-text="'纭閫�娆�'"
+ :withFooter="refundForm.manualRefund !== 1"
@confirm="handleSubmit"
>
<el-form ref="refundForm" :model="refundForm" v-if="orderInfo && orderInfo.order">
@@ -46,16 +47,16 @@
<!-- 閫�娆捐〃鍗� -->
<el-form-item label="閫�娆鹃噾棰�" prop="refundAmount" label-suffix="锛�*" :rules="[{ required: true, message: '璇疯緭鍏ラ��娆鹃噾棰�', trigger: 'blur' }, { validator: this.validateRefundAmount, trigger: 'blur' }]">
- <el-input v-model.number="refundForm.refundAmount" placeholder="璇疯緭鍏ラ��娆鹃噾棰�" suffix-icon="el-icon-yuan"></el-input>
+ <el-input v-model="refundForm.refundAmount" placeholder="璇疯緭鍏ラ��娆鹃噾棰�" suffix-icon="el-icon-yuan"></el-input>
</el-form-item>
- <el-form-item label="瀵勪欢闂ㄥ簵鎵h垂">
- <el-input v-model.number="refundForm.depositShopFee" placeholder="璇疯緭鍏ュ瘎浠堕棬搴楁墸璐�" suffix-icon="el-icon-yuan"></el-input>
+ <el-form-item label="瀵勪欢闂ㄥ簵鎵h垂" prop="depositShopFee" :rules="[{ validator: this.validateDecimal, trigger: 'blur' }]">
+ <el-input v-model="refundForm.depositShopFee" placeholder="璇疯緭鍏ュ瘎浠堕棬搴楁墸璐�" suffix-icon="el-icon-yuan"></el-input>
</el-form-item>
- <el-form-item label="鏀朵欢闂ㄥ簵鎵h垂" v-if="orderInfo.type === 1 && orderInfo.shopId">
- <el-input v-model.number="refundForm.takeShopFee" placeholder="璇疯緭鍏ユ敹浠堕棬搴楁墸璐�" suffix-icon="el-icon-yuan"></el-input>
+ <el-form-item label="鏀朵欢闂ㄥ簵鎵h垂" prop="takeShopFee" v-if="orderInfo.type === 1 && orderInfo.shopId" :rules="[{ validator: this.validateDecimal, trigger: 'blur' }]">
+ <el-input v-model="refundForm.takeShopFee" placeholder="璇疯緭鍏ユ敹浠堕棬搴楁墸璐�" suffix-icon="el-icon-yuan"></el-input>
</el-form-item>
- <el-form-item label="閰嶉�佸徃鏈烘墸璐�" v-if="orderInfo.type === 1">
- <el-input v-model.number="refundForm.driverFee" placeholder="璇疯緭鍏ラ厤閫佸徃鏈烘墸璐�" suffix-icon="el-icon-yuan"></el-input>
+ <el-form-item label="閰嶉�佸徃鏈烘墸璐�" prop="driverFee" v-if="orderInfo.type === 1" :rules="[{ validator: this.validateDecimal, trigger: 'blur' }]">
+ <el-input v-model="refundForm.driverFee" placeholder="璇疯緭鍏ラ厤閫佸徃鏈烘墸璐�" suffix-icon="el-icon-yuan"></el-input>
</el-form-item>
<el-form-item label="澶囨敞璇存槑">
<el-input v-model="refundForm.remark" type="textarea" :rows="4" placeholder="璇疯緭鍏ュ娉ㄨ鏄�"></el-input>
@@ -68,7 +69,7 @@
import BaseOpera from '@/components/base/BaseOpera'
import GlobalWindow from '@/components/common/GlobalWindow'
import { getById } from '@/api/business/orderManagement'
-import { manualRefund } from '@/api/business/orders'
+import { manualRefund, manualRefundDetail } from '@/api/business/orders'
export default {
name: 'OperaManualRefund',
@@ -85,13 +86,25 @@
depositShopFee: null,
takeShopFee: null,
driverFee: null,
- remark: ''
+ remark: '',
+ manualRefund: null
}
}
},
methods: {
validateRefundAmount(rule, value, callback) {
let refundAmount = (((this.orderInfo.order.payAmount||0) - (this.orderInfo.order.refundAmount ||0)) / 100)
+ // 楠岃瘉鏈�澶氫袱浣嶅皬鏁�
+ if (value !== null && value !== '' && value !== undefined) {
+ const str = String(value)
+ if (str.includes('.')) {
+ const decimal = str.split('.')[1]
+ if (decimal.length > 2) {
+ callback(new Error('鏈�澶氭敮鎸佷袱浣嶅皬鏁�'))
+ return
+ }
+ }
+ }
// 閫�娆鹃噾棰濆繀椤诲ぇ浜�0
if (Number(value) <= 0) {
callback(new Error('閫�娆鹃噾棰濆繀椤诲ぇ浜�0'))
@@ -102,21 +115,46 @@
if (Number(value) > refundAmount) {
callback(new Error('閫�娆鹃噾棰濅笉鑳借秴杩囧彲閫�閲戦'))
}
- // 璁$畻鎬绘墸璐归噾棰�
- // const depositShopFee = this.refundForm.depositShopFee || 0
- // const takeShopFee = this.refundForm.takeShopFee || 0
- // const driverFee = this.refundForm.driverFee || 0
- // const totalFee = depositShopFee + takeShopFee + driverFee
-
- // 閫�娆鹃噾棰濆繀椤诲ぇ浜庣瓑浜庢�绘墸璐归噾棰�
- // if (value < totalFee) {
- // callback(new Error('閫�娆鹃噾棰濆繀椤诲ぇ浜庣瓑浜庡悇椤规墸璐规�诲拰'))
- // }
callback()
},
+ validateDecimal(rule, value, callback) {
+ if (value !== null && value !== '' && value !== undefined) {
+ const str = String(value)
+ if (str.includes('.')) {
+ const decimal = str.split('.')[1]
+ if (decimal.length > 2) {
+ callback(new Error('鏈�澶氭敮鎸佷袱浣嶅皬鏁�'))
+ } else {
+ callback()
+ }
+ } else {
+ callback()
+ }
+ } else {
+ callback()
+ }
+ },
open (row) {
this.orderId = row.id
+ if (row.manualRefund === 1) {
+ this.refundForm.manualRefund = row.manualRefund
+ manualRefundDetail(row.id)
+ .then(res => {
+ this.refundForm.refundAmount = ((res.refundAmount || 0) / 100).toFixed(2)
+ this.refundForm.depositShopFee = ((res.depositShopDeduct || 0) / 100).toFixed(2)
+ this.refundForm.takeShopFee = ((res.takeShopDeduct || 0) / 100).toFixed(2)
+ this.refundForm.driverFee = ((res.driverDeduct || 0) / 100).toFixed(2)
+ this.refundForm.remark = res.refundRemark
+ })
+ } else {
+ this.refundForm.manualRefund = null
+ this.refundForm.refundAmount = ''
+ this.refundForm.depositShopFee = ''
+ this.refundForm.takeShopFee = ''
+ this.refundForm.driverFee = ''
+ this.refundForm.remark = ''
+ }
this.orderInfo = null
this.visible = true
this.getOrderDetail()
--
Gitblit v1.9.3