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