Procházet zdrojové kódy

团购订单-支付方式合并(对公+挂账+授信+储值余额+链接支付)

gcz před 1 měsícem
rodič
revize
e45683c6a4

+ 28 - 1
src/api/order/groupBuyingMr.js

@@ -53,4 +53,31 @@ export const teamPayOrderUrlApi = (params) => {
     method: 'get',
     params: params
   })
-}
+}
+
+// 获取余额信息
+// export const getBalanceInfo = (params) => {
+//   return request({
+//     url: '/member/marketTeam/getBalanceInfo',
+//     method: 'get',
+//     params: params
+//   })
+// }
+
+// 余额支付
+export const balancePay = (data) => {
+  return request({
+    url: '/order/orderInfo/gotoTeamBalancePay',
+    method: 'post',
+    data: data
+  })
+}
+
+// 授信额度支付
+export const creditPay = (data) => {
+  return request({
+    url: '/order/orderInfo/gotoTeamQuotaPay',
+    method: 'post',
+    data: data
+  })
+}

+ 3 - 2
src/views/order/groupBuyingMr/dialog/details.vue

@@ -3,7 +3,7 @@
  * @Author: Sugar.
  * @Date: 2023-11-24 13:55:00
  * @LastEditors: gcz
- * @LastEditTime: 2025-03-19 17:43:09
+ * @LastEditTime: 2025-03-20 15:37:39
  * @FilePath: \great_webui\src\views\order\groupBuyingMr\dialog\details.vue
  * @Copyright: Copyright (c) 2016~2023 by Sugar., All Rights Reserved.
 -->
@@ -130,7 +130,7 @@
         </div>
 
         <div class="title-class" v-if="resubmit.id">改签信息</div>
-        <el-row>
+        <el-row  v-if="resubmit.id">
           <el-col :span="12">
             <div class="grid-content bg-purple item-class">
               改签费用: <span>{{ resubmit.diffPrice || 0 }}</span>
@@ -339,6 +339,7 @@ export default {
         this.seatSelectList = res.data.viewersOrderList
         this.resubmit = res.data.resubmit||{};
         this.form = res.data;
+        console.log('this.form',this.form);
         this.form.payOrCredit = null
         if(res.data.corporate){
           this.form.payOrCredit = 1

+ 225 - 137
src/views/order/groupBuyingMr/index.vue

@@ -329,9 +329,10 @@
               <el-dropdown size="mini" @command="(command) => handleCommand(command, scope.row)">
                 <el-button size="mini" type="text" icon="el-icon-d-arrow-right">更多</el-button>
                 <el-dropdown-menu slot="dropdown">
+                  <!-- (scope.row.payWay == 'corporate'||scope.row.status === 0) -->
                   <el-dropdown-item 
                   command="1" 
-                  v-if="hasPermi('groupBuyingMr:groupBuyingMr:duigong') && (scope.row.payWay == 'corporate'||scope.row.status === 0)">对公转账</el-dropdown-item>
+                  v-if="hasPermi('groupBuyingMr:groupBuyingMr:duigong') && (scope.row.status === 0)">代客下单</el-dropdown-item>
                   <el-dropdown-item 
                   command="2" 
                   v-if="hasPermi('groupBuyingMr:groupBuyingMr:cancel') && scope.row.status == 0">关闭订单</el-dropdown-item>
@@ -341,10 +342,10 @@
                   <el-dropdown-item 
                   command="4" 
                   v-if="hasPermi('groupBuyingMr:groupBuyingMr:reset') && scope.row.status == 0">修改订单</el-dropdown-item>
-                  <el-dropdown-item 
+                  <!-- <el-dropdown-item 
                   command="5" 
                   v-if="hasPermi('groupBuyingMr:groupBuyingMr:place')"
-                  >代客下单</el-dropdown-item>
+                  >代客下单</el-dropdown-item> -->
                   <el-dropdown-item 
                   command="6" 
                   v-if="hasPermi('groupBuyingMr:groupBuyingMr:rebook') && scope.row.status == 3 && scope.row.allowReSubmit == 1"
@@ -390,87 +391,98 @@
       </el-dialog>
 
       <el-dialog
-        title="对公信息凭证"
+        title="代客下单"
         :visible.sync="showCorporatePay"
         width="50%"
         @close="handleCorporatePayClose"
         :before-close="handleCorporatePayClose">
         <el-form v-loading="corporatePayLoading" :model="form" :rules="corporatePayRules" ref="ruleForm1" label-width="120px" class="demo-ruleForm">
-          <el-form-item v-if="!form.eaitType" label="类型" prop="payOrCredit">
-            <el-radio-group v-model="form.payOrCredit">
-              <el-radio :label="1">对公支付</el-radio>
+          <el-form-item v-if="!form.eaitType" label="支付方式" prop="payWay">
+            <el-radio-group v-model="form.payWay">
+              <el-radio :label="1">对公转账</el-radio>
               <el-radio :label="2">挂账</el-radio>
+              <el-radio :label="3">链接支付</el-radio>
+              <el-radio :label="4">授信支付</el-radio>
+              <el-radio :label="5">储值余额</el-radio>
             </el-radio-group>
           </el-form-item>
-          <el-form-item v-if="form.eaitType" label="类型" prop="payOrCredit">
-            <span>{{ form.payOrCredit == 1 ? '对公支付':'挂账' }}</span>
-          </el-form-item>
-          <!-- <el-form-item label="凭证上传" prop="photoList" required>
-            <el-upload
-                ref="upload"
-                :class="form.photoList && form.photoList.length>=15 ? 'upload-box':''"
-                :action="uploadObj.url"
-                :headers="uploadObj.headers"
-                accept=".jpg,.png"
-                :on-success="handlePhotoListSuccess"
-                :before-upload="beforeAvatarUpload"
-                list-type="picture-card"
-                :file-list="form.photoList"
-                :on-remove="handleRemove"
-                :limit="15"
-              >
-                <i class="el-icon-plus"></i>
-              </el-upload>
-          </el-form-item> -->
-          <el-form-item v-if="form.payOrCredit == 2" label="账期" prop="rePaymentTime">
-            <el-date-picker
-              v-model="form.rePaymentTime"
-              type="date"
-              value-format="yyyy-MM-dd"
-              placeholder="选择日期">
-            </el-date-picker>
+          <el-form-item v-if="form.eaitType" label="支付方式" prop="payWay">
+            <span>{{ getPayWayText(form.payWay) }}</span>
           </el-form-item>
-          <el-form-item :label="form.payOrCredit != 2?'凭证上传':'挂账类型凭证'" prop="photoList">
-            <div style="display: flex;flex-wrap: wrap;">
-              <div 
-              v-for="(item,index) in form.photoList" 
-              :key="index"
-              style="width: 100px; height: 100px;margin-top: 5px; position: relative;border: 1px solid #999;border-radius: 5px;margin-right: 20px;">
-                <el-image 
-                  style="width: 100%; height: 100%"
-                  :src="item" 
-                  :preview-src-list="form.photoList">
-                </el-image>
-                <span @click="handleRemove(index)" style="position: absolute;top: -15px;right: -15px;color: red;font-size: 24px;z-index: 999;cursor: pointer;">
-                  <i class="el-icon-error"></i>
-                </span>
-              </div>
-              <div 
-              style="width: 100px; height: 100px;margin-top: 5px;" 
-              v-if="!form.photoList||form.photoList.length<15"
-              v-loading="actionUrlLoading"
-              element-loading-text="上传中..."
-              element-loading-spinner="el-icon-loading"
-              element-loading-background="rgba(0, 0, 0, 0.8)"
-              >
-                <el-upload
-                  class="avatar-uploader"
-                  :action="uploadObj.url"
-                  :headers="uploadObj.headers"
-                  :show-file-list="false"
-                  :before-upload="beforeAvatarUpload"
-                  :on-success="handleAvatarSuccess"
-                  :on-progress="handleAvatarProgress"
-                  :disabled="actionUrlLoading"
-                  :on-error="handleAvatarError"
-                  >
-                  <i class="el-icon-plus avatar-uploader-icon"></i>
-                </el-upload>
+
+          <!-- 对公转账和挂账显示原有内容 -->
+          <template v-if="form.payWay === 1 || form.payWay === 2">
+            <el-form-item v-if="form.payWay === 2" label="账期" prop="rePaymentTime">
+              <el-date-picker
+                v-model="form.rePaymentTime"
+                type="date"
+                value-format="yyyy-MM-dd"
+                placeholder="选择日期">
+              </el-date-picker>
+            </el-form-item>
+            <el-form-item :label="form.payWay === 1 ? '凭证上传' : '挂账类型凭证'" prop="photoList">
+              <div style="display: flex;flex-wrap: wrap;">
+                <div 
+                v-for="(item,index) in form.photoList" 
+                :key="index"
+                style="width: 100px; height: 100px;margin-top: 5px; position: relative;border: 1px solid #999;border-radius: 5px;margin-right: 20px;">
+                  <el-image 
+                    style="width: 100%; height: 100%"
+                    :src="item" 
+                    :preview-src-list="form.photoList">
+                  </el-image>
+                  <span @click="handleRemove(index)" style="position: absolute;top: -15px;right: -15px;color: red;font-size: 24px;z-index: 999;cursor: pointer;">
+                    <i class="el-icon-error"></i>
+                  </span>
+                </div>
+                <div 
+                style="width: 100px; height: 100px;margin-top: 5px;" 
+                v-if="!form.photoList||form.photoList.length<15"
+                v-loading="actionUrlLoading"
+                element-loading-text="上传中..."
+                element-loading-spinner="el-icon-loading"
+                element-loading-background="rgba(0, 0, 0, 0.8)"
+                >
+                  <el-upload
+                    class="avatar-uploader"
+                    :action="uploadObj.url"
+                    :headers="uploadObj.headers"
+                    :show-file-list="false"
+                    :before-upload="beforeAvatarUpload"
+                    :on-success="handleAvatarSuccess"
+                    :on-progress="handleAvatarProgress"
+                    :disabled="actionUrlLoading"
+                    :on-error="handleAvatarError"
+                    >
+                    <i class="el-icon-plus avatar-uploader-icon"></i>
+                  </el-upload>
+                </div>
               </div>
-              
-            </div>
-          </el-form-item>
-          <el-form-item label="备注">
+            </el-form-item>
+          </template>
+
+          <!-- 授信支付显示额度信息 -->
+          <template v-if="form.payWay === 4 && balanceInfo">
+            <el-form-item label="剩余授信额度">
+              <span>¥{{ balanceInfo.grantSurplus }}</span>
+            </el-form-item>
+            <el-form-item label="订单金额">
+              <span>¥{{ currentOrder.orderPrice }}</span>
+            </el-form-item>
+          </template>
+
+          <!-- 储值余额支付显示余额信息 -->
+          <template v-if="form.payWay === 5 && balanceInfo">
+            <el-form-item label="剩余储值余额">
+              <span>¥{{ balanceInfo.balance }}</span>
+            </el-form-item>
+            <el-form-item label="订单金额">
+              <span>¥{{ currentOrder.orderPrice }}</span>
+            </el-form-item>
+          </template>
+
+          <!-- 只有对公转账和挂账显示备注 -->
+          <el-form-item label="备注" v-if="form.payWay === 1 || form.payWay === 2">
             <el-input placeholder="请备注" type="textarea" maxlength="300" show-word-limit v-model="form.corporate.remark"></el-input>
           </el-form-item>
         </el-form>
@@ -489,8 +501,11 @@ import {
   pageList,
   gotoCorporatePay, 
   downOrderListXls,
-  teamPayOrderUrlApi 
+  teamPayOrderUrlApi,
+  balancePay,
+  creditPay
  } from '@/api/order/groupBuyingMr';
+ import { getSelectById as getBalanceInfo } from '@/api/team/teamMr'
 import { orderInfoCancel } from '@/api/windowTicketSales/ticketingSales';
 import detailsDia from "./dialog/details.vue";
 import resetOrder from "./dialog/resetOrder.vue";
@@ -563,36 +578,38 @@ export default {
           }
         },
         corporatePayRules: {
-          payOrCredit: [{ required: true, message: "选择类型", trigger: ["change","blur"] }],
-          rePaymentTime: [{ required: true, message: "选择日期", trigger: ["change","blur"] }],
+          payWay: [{ required: true, message: "请选择支付方式", trigger: ["change","blur"] }],
+          rePaymentTime: [{ required: true, message: "请选择账期", trigger: ["change","blur"] }],
           photoList: [{ required: true, message: "请上传凭证", trigger: ["change","blur"] }],
-      },
-      uploadObj: {
-        url: process.env.VUE_APP_UPLOAD_FILE_API + "/upload/single/minio",
-        Headers: { Authorization: "Bearer " + getToken() },
-      },
-      corporatePayLoading:false,
+        },
+        uploadObj: {
+          url: process.env.VUE_APP_UPLOAD_FILE_API + "/upload/single/minio",
+          Headers: { Authorization: "Bearer " + getToken() },
+        },
+        corporatePayLoading:false,
 
-      handleExportLoading: false,
-      pagePerformTimeList: [], // 场次列表
-      multiPerformDate:false,
-      fixed: 'left',
-      actionUrlLoading: false,
+        handleExportLoading: false,
+        pagePerformTimeList: [], // 场次列表
+        multiPerformDate:false,
+        fixed: 'left',
+        actionUrlLoading: false,
 
-      queryShow: {
-        id: true,
-        teamName: true,
-        salerPerson: false,
-        teamTypeId: false,
-        ifSuccessInvoice: false,
-        payWay: false,
-        status: false,
-        time: false,
-        paymentId: false,
-        performDate: true,
-        invoiceTime: false,
-        refundPaymentId: false,
-      },
+        queryShow: {
+          id: true,
+          teamName: true,
+          salerPerson: false,
+          teamTypeId: false,
+          ifSuccessInvoice: false,
+          payWay: false,
+          status: false,
+          time: false,
+          paymentId: false,
+          performDate: true,
+          invoiceTime: false,
+          refundPaymentId: false,
+        },
+        balanceInfo: null, // 余额信息
+        currentOrder: null, // 当前操作的订单
     };
   },
   created() {
@@ -826,31 +843,44 @@ export default {
             this.dialogVisibleLoading = false
           })
         },
-        async handleCorporatePay(row){
+        async handleCorporatePay(row) {
           this.actionUrlLoading = false
-          console.log('corporatePay',row);
-          this.showCorporatePay = true;
-          this.corporatePayLoading = true;
+          this.showCorporatePay = true
+          this.corporatePayLoading = true
+          this.currentOrder = row
+          
           let res = await getSelectById(row.id)
-          this.form.orderId = row.id;
+          this.form.orderId = row.id
           this.$set(this.form,'photoList',[])
           this.form.eaitType = null
+          
+          // 获取余额信息
+          try {
+            const balanceRes = await getBalanceInfo(row.memberId)
+            if(balanceRes.code === 200) {
+              this.balanceInfo = balanceRes.data
+            }
+          } catch(err) {
+            console.error('获取余额信息失败', err)
+          }
+
           if(res.data.corporate && JSON.stringify(res.data.corporate) != '{}'){
             let urlList = res.data.corporate.voucherUrl.split(',')||[]
             this.form.eaitType = 1
-            this.$set(this.form,'payOrCredit',1)
+            this.$set(this.form,'payWay',1)
             this.$set(this.form,'rePaymentTime','')
             this.$set(this.form,'photoList',urlList)
             this.$set(this.form.corporate,'remark',res.data.corporate.remark)
           }else if(res.data.teamCredit && JSON.stringify(res.data.teamCredit) != '{}'){
             this.form.eaitType = 2
             let urlList = res.data.teamCredit.voucherUrl.split(',')||[]
-            this.$set(this.form,'payOrCredit',2)
+            this.$set(this.form,'payWay',2)
             this.$set(this.form,'rePaymentTime',res.data.teamCredit.repaymentTime)
             this.$set(this.form,'photoList',urlList)
             this.$set(this.form.corporate,'remark',res.data.teamCredit.remark)
           }else {
-            this.$set(this.form,'payOrCredit','')
+            // 移除eaitType的设置,只设置默认支付方式
+            this.$set(this.form,'payWay',1)
             this.$set(this.form,'rePaymentTime','')
             this.$set(this.form,'photoList',[])
             this.$set(this.form.corporate,'remark','')
@@ -858,8 +888,7 @@ export default {
           this.$nextTick(()=>{
             this.$refs.ruleForm1.clearValidate()
           })
-          this.corporatePayLoading = false;
-
+          this.corporatePayLoading = false
         },
         handleCorporatePayClose(){
           this.$set(this.form,'photoList',[])
@@ -867,32 +896,80 @@ export default {
           this.corporatePayLoading = false;
           this.showCorporatePay = false;
         },
-        corporatePay(){
-          console.log('form',this.form);
-          this.$refs['ruleForm1'].validate((valid) => {
+        async corporatePay() {
+          this.$refs['ruleForm1'].validate(async (valid) => {
             if (valid) {
-              if(this.form.photoList.length<1){
-                this.$message.error('请上传凭证');
-                return
+              if(this.form.payWay === 1 || this.form.payWay === 2) {
+                if(this.form.photoList.length<1){
+                  this.$message.error('请上传凭证')
+                  return
+                }
+              }
+              
+              this.corporatePayLoading = true
+              try {
+                let res = null
+                
+                // 对公转账和挂账
+                if(this.form.payWay === 1 || this.form.payWay === 2) {
+                  const voucherUrl = this.form.photoList.map(item => item).join(",")
+                  const params = {
+                    orderId: this.form.orderId,
+                    payWay: this.form.payWay,
+                    payOrCredit: this.form.payWay,
+                    corporate: {
+                      voucherUrl,
+                      remark: this.form.corporate.remark
+                    }
+                  }
+                  if(this.form.payWay === 2) {
+                    params.rePaymentTime = this.form.rePaymentTime
+                  }
+                  res = await gotoCorporatePay(params)
+                }
+
+                // 链接支付
+                if(this.form.payWay === 3) {
+                  this.handPlaceAnOrder(this.currentOrder)
+                  this.handleCorporatePayClose()
+                  return
+                }
+                
+                // 授信支付
+                if(this.form.payWay === 4) {
+                  if(this.balanceInfo.grantSurplus < this.currentOrder.orderPrice) {
+                    this.$message.error('授信额度不足')
+                    return
+                  }
+                  console.log('this.form',this.form);
+                  res = await creditPay({
+                    orderId: this.form.orderId
+                  })
+                }
+                
+                // 储值余额支付
+                if(this.form.payWay === 5) {
+                  if(this.balanceInfo.balance < this.currentOrder.orderPrice) {
+                    this.$message.error('储值余额不足')
+                    return
+                  }
+                  res = await balancePay({
+                    orderId: this.form.orderId
+                  })
+                }
+
+                if(res) {
+                  this.$message.success(res.msg)
+                  this.corporatePayLoading = false
+                  this.handleCorporatePayClose()
+                  this.getList()
+                }
+              } catch(err) {
+                this.corporatePayLoading = false
+                this.$message.error(err.msg || '操作失败')
               }
-              this.corporatePayLoading = true;
-              const voucherUrl = this.form.photoList.map(item => item).join(",");
-              this.form.corporate.voucherUrl = voucherUrl;
-              gotoCorporatePay(this.form).then((res)=>{
-                this.$message.success(res.msg);
-                this.corporatePayLoading = false;
-                this.handleCorporatePayClose();
-              }).catch((err)=>{
-                this.corporatePayLoading = false;
-                this.$message.error(err.msg);
-                console.log('corporatePay err',err);
-              })
-            } else {
-              console.log('error submit!!');
-              return false;
             }
-          });
-          
+          })
         },
       /**
      * 剧目海报上传成功
@@ -1081,7 +1158,8 @@ export default {
             this.copyToClipboard(res.data.url)
           }
         });
-      }).catch(() => { });
+      }).catch(() => { }).finally(() => {
+      });
     },
     /**  复制内容  */
     copyToClipboard(text) {
@@ -1130,7 +1208,17 @@ export default {
     },
     openQuery(key) {
       this.$set(this.queryShow,key,true)
-    }
+    },
+    getPayWayText(payWay) {
+      const payWayMap = {
+        1: '对公转账',
+        2: '挂账',
+        3: '链接支付',
+        4: '授信支付',
+        5: '储值余额'
+      }
+      return payWayMap[payWay] || ''
+    },
   },
   beforeDestroy() {
     this.resizeObserver.unobserve(this.$refs.queryFormBox);

+ 2 - 2
src/views/order/orderMr/dialog/details.vue

@@ -3,7 +3,7 @@
  * @Author: Sugar.
  * @Date: 2023-11-24 13:55:00
  * @LastEditors: gcz
- * @LastEditTime: 2025-03-19 17:36:34
+ * @LastEditTime: 2025-03-20 15:30:52
  * @FilePath: \great_webui\src\views\order\orderMr\dialog\details.vue
  * @Copyright: Copyright (c) 2016~2023 by Sugar., All Rights Reserved.
 -->
@@ -106,7 +106,7 @@
         </el-row>
 
         <div class="title-class" v-if="resubmit.id">改签信息</div>
-        <el-row>
+        <el-row  v-if="resubmit.id">
           <el-col :span="12">
             <div class="grid-content bg-purple item-class">
               改签费用: <span>{{ resubmit.diffPrice || 0 }}</span>