MONSTER-ygh hace 2 semanas
padre
commit
2796c9fd9f

+ 3 - 3
src/views/distribution/recordMr/dialog/details.vue

@@ -179,11 +179,11 @@ export default {
      */
     openDialog(title, obj, type) {
       this.open = true;
-      this.getSelectByIdApi(obj);
+      this.getSelectByIdApi(obj,type);
     },
     /** 获取详情 */
-    getSelectByIdApi(row) {
-      const id = row.orderId
+    getSelectByIdApi(row,type) {
+      const id = !type ? row.orderId : row.newOrderId
       getSelectById(id).then(response => {
         this.form = response.data;
       });

+ 45 - 106
src/views/distribution/recordMr/index.vue

@@ -2,49 +2,25 @@
   <div class="app-container app-container-scheduling">
     <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="100px">
       <el-form-item v-if="queryShow.personName" label="分销商名称">
-        <el-input
-          v-model="queryParams.personName"
-          placeholder="分销商名称"
-          clearable
-          style="width: 240px;"
-          @keyup.enter.native="handleQuery"
-        />
+        <el-input v-model="queryParams.personName" placeholder="分销商名称" clearable style="width: 240px;"
+          @keyup.enter.native="handleQuery" />
         <span @click="clearQuery('personName')" class="query_clear"><i class="el-icon-circle-close"></i></span>
       </el-form-item>
       <el-form-item v-if="queryShow.personType" label="分销商类型">
-        <el-select
-          v-model="queryParams.personType"
-          placeholder="分销商类型"
-          clearable
-          style="width: 140px"
-        >
-          <el-option
-            v-for="dict in dict.type.distribution_type"
-            :key="dict.value"
-            :label="dict.label"
-            :value="dict.value"
-          />
+        <el-select v-model="queryParams.personType" placeholder="分销商类型" clearable style="width: 140px">
+          <el-option v-for="dict in dict.type.distribution_type" :key="dict.value" :label="dict.label"
+            :value="dict.value" />
         </el-select>
         <span @click="clearQuery('personType')" class="query_clear"><i class="el-icon-circle-close"></i></span>
       </el-form-item>
       <el-form-item label-width="80px" v-if="queryShow.orderId" label="订单号">
-        <el-input
-          v-model="queryParams.orderId"
-          placeholder="订单号"
-          clearable
-          style="width: 200px;"
-          @keyup.enter.native="handleQuery"
-        />
+        <el-input v-model="queryParams.orderId" placeholder="订单号" clearable style="width: 200px;"
+          @keyup.enter.native="handleQuery" />
         <span @click="clearQuery('orderId')" class="query_clear"><i class="el-icon-circle-close"></i></span>
       </el-form-item>
       <el-form-item v-if="queryShow.memberMobile" label="购买人手机号" label-width="100px">
-        <el-input
-          v-model="queryParams.memberMobile"
-          placeholder="购买人手机号"
-          clearable
-          style="width: 180px;"
-          @keyup.enter.native="handleQuery"
-        />
+        <el-input v-model="queryParams.memberMobile" placeholder="购买人手机号" clearable style="width: 180px;"
+          @keyup.enter.native="handleQuery" />
         <span @click="clearQuery('memberMobile')" class="query_clear"><i class="el-icon-circle-close"></i></span>
       </el-form-item>
       <!-- <el-form-item label="场次时间">
@@ -58,55 +34,29 @@
         </el-select>
       </el-form-item> -->
       <el-form-item v-if="queryShow.performDate" label="场次时间" label-width="80px">
-          <el-date-picker
-            style="width: 250px;"
-            v-model="queryParams.performDate"
-            @change="pagePerformTimeListFun"
-            type="daterange"
-            value-format="yyyy-MM-dd"
-            range-separator="至"
-            start-placeholder="开始日期"
-            end-placeholder="结束日期">
-          </el-date-picker>
-          <span @click="clearQuery('performDate')" class="query_clear"><i class="el-icon-circle-close"></i></span>
-        </el-form-item>
-        <el-form-item label="场次" label-width="60px" v-if="!multiPerformDate && queryShow.performDate">
-          <el-select
-            v-model="queryParams.performTimeId"
-            placeholder="场次"
-            clearable
-            style="width: 100%"
-          >
-            <el-option
-              v-for="dict in pagePerformTimeList"
-              :key="dict.id"
-              :label="dict.timeSnapshot+'('+dict.performTimeStart+'-'+dict.performTimeEnd+')'"
-              :value="dict.id"
-            />
-          </el-select>
-          <span @click="clearQuery('performDate')" class="query_clear"><i class="el-icon-circle-close"></i></span>
-        </el-form-item>
+        <el-date-picker style="width: 250px;" v-model="queryParams.performDate" @change="pagePerformTimeListFun"
+          type="daterange" value-format="yyyy-MM-dd" range-separator="至" start-placeholder="开始日期"
+          end-placeholder="结束日期">
+        </el-date-picker>
+        <span @click="clearQuery('performDate')" class="query_clear"><i class="el-icon-circle-close"></i></span>
+      </el-form-item>
+      <el-form-item label="场次" label-width="60px" v-if="!multiPerformDate && queryShow.performDate">
+        <el-select v-model="queryParams.performTimeId" placeholder="场次" clearable style="width: 100%">
+          <el-option v-for="dict in pagePerformTimeList" :key="dict.id"
+            :label="dict.timeSnapshot+'('+dict.performTimeStart+'-'+dict.performTimeEnd+')'" :value="dict.id" />
+        </el-select>
+        <span @click="clearQuery('performDate')" class="query_clear"><i class="el-icon-circle-close"></i></span>
+      </el-form-item>
       <el-form-item v-if="queryShow.time" label="支付时间">
-          <el-date-picker
-            style="width: 230px;"
-            v-model="queryParams.time"
-            type="daterange"
-            value-format="yyyy-MM-dd"
-            range-separator="至"
-            start-placeholder="开始日期"
-            end-placeholder="结束日期">
-          </el-date-picker>
-          <span @click="clearQuery('time')" class="query_clear"><i class="el-icon-circle-close"></i></span>
+        <el-date-picker style="width: 230px;" v-model="queryParams.time" type="daterange" value-format="yyyy-MM-dd"
+          range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期">
+        </el-date-picker>
+        <span @click="clearQuery('time')" class="query_clear"><i class="el-icon-circle-close"></i></span>
       </el-form-item>
       <el-form-item v-if="queryShow.unionName" label="入驻银联主体名称" label-width="150px">
-          <el-input
-            v-model="queryParams.unionName"
-            placeholder="请输入入驻银联主体名称"
-            clearable
-            style="width: 240px;"
-            @keyup.enter.native="handleQuery"
-          />
-          <span @click="clearQuery('unionName')" class="query_clear"><i class="el-icon-circle-close"></i></span>
+        <el-input v-model="queryParams.unionName" placeholder="请输入入驻银联主体名称" clearable style="width: 240px;"
+          @keyup.enter.native="handleQuery" />
+        <span @click="clearQuery('unionName')" class="query_clear"><i class="el-icon-circle-close"></i></span>
       </el-form-item>
       <el-form-item>
         <el-dropdown @command="openQuery">
@@ -121,24 +71,17 @@
             <el-dropdown-item command="unionName">入驻银联主体名称</el-dropdown-item>
           </el-dropdown-menu>
         </el-dropdown>
-        <el-button style="margin-left: 10px;" type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button style="margin-left: 10px;" type="primary" icon="el-icon-search" size="mini"
+          @click="handleQuery">搜索</el-button>
         <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
       </el-form-item>
     </el-form>
 
     <el-row :gutter="10" class="mb8">
-      <el-button
-        type="primary"
-        size="mini"
-        icon="el-icon-download"
-        :disabled="dataList.length === 0"
-        v-hasPermi="['recordMr:recordMr:downloadExcel']"
-        @click="handleExport"
-        v-loading.fullscreen.lock="handleExportLoading"
-        element-loading-text="正在拼命生成数据中..."
-        element-loading-spinner="el-icon-loading"
-        element-loading-background="rgba(0, 0, 0, 0.5)"
-      >导出excel</el-button>
+      <el-button type="primary" size="mini" icon="el-icon-download" :disabled="dataList.length === 0"
+        v-hasPermi="['recordMr:recordMr:downloadExcel']" @click="handleExport"
+        v-loading.fullscreen.lock="handleExportLoading" element-loading-text="正在拼命生成数据中..."
+        element-loading-spinner="el-icon-loading" element-loading-background="rgba(0, 0, 0, 0.5)">导出excel</el-button>
       <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
     </el-row>
 
@@ -147,7 +90,7 @@
       <el-table-column label="分销商名称" width="120" align="center" prop="personName" fixed="left" />
       <el-table-column label="分销商类型" width="120" align="center" prop="personType" fixed="left">
         <template slot-scope="scope">
-          <dict-tag :options="dict.type.distribution_type" :value="scope.row.personType"/>
+          <dict-tag :options="dict.type.distribution_type" :value="scope.row.personType" />
         </template>
       </el-table-column>
       <el-table-column label="入驻银联主体名称" width="120" align="center" prop="unionName" fixed="left" />
@@ -164,7 +107,8 @@
       <el-table-column label="场次时间" width="120" align="center" prop="performDate" />
       <el-table-column label="场次" width="120" align="center" prop="timeSnapshot">
         <template slot-scope="scope">
-          <span>{{ scope.row.timeSnapshot }} <br /> ({{ scope.row.performTimeStart + '-' + scope.row.performTimeEnd }})</span>
+          <span>{{ scope.row.timeSnapshot }} <br /> ({{ scope.row.performTimeStart + '-' + scope.row.performTimeEnd
+            }})</span>
         </template>
       </el-table-column>
       <el-table-column label="购买人手机号" width="120" align="center" prop="memberMobile" />
@@ -183,20 +127,15 @@
           <span v-if="scope.row.brokeragePriceTotal">¥{{ scope.row.brokeragePriceTotal }}</span>
         </template>
       </el-table-column>
-<!--      <el-table-column label="获得时间" align="center" prop="createTime" width="160" >-->
-<!--        <template slot-scope="scope">-->
-<!--          <span>{{ parseTime(scope.row.createTime) }}</span>-->
-<!--        </template>-->
-<!--      </el-table-column>-->
+      <el-table-column label="新订单(改签/升舱)" width="180" align="center">
+        <template slot-scope="scope">
+          <el-button type="text" @click="openDetails(scope.row,'new')">{{ scope.row.newOrderId }}</el-button>
+        </template>
+      </el-table-column>
     </el-table>
 
-    <pagination
-      v-show="total>0"
-      :total="total"
-      :page.sync="queryParams.pageNum"
-      :limit.sync="queryParams.pageSize"
-      @pagination="getList"
-    />
+    <pagination v-show="total>0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize"
+      @pagination="getList" />
 
     <!-- 详情 -->
     <details-dia ref="detailsDia" @getList="getList"></details-dia>

+ 11 - 4
src/views/windowTicketSales/mixins/pay.js

@@ -2,9 +2,6 @@ import {
     orderInfoSubmit,
     gotoMicroPay,
     gotoCashPay,
-    gotoCorporatePay,
-    gotoBalancePay,
-    gotoQuotaPay,
     payQuery,
     selectRegion,
     orderInfoCancel,
@@ -12,7 +9,11 @@ import {
     selectMarketTeamBySourceApi,
    } from '@/api/windowTicketSales/ticketingSales'
    import { 
+    gotoCorporatePay, 
+    downOrderListXls,
     teamPayOrderUrlApi,
+    balancePay as gotoBalancePay,
+    creditPay as gotoQuotaPay
    } from '@/api/order/groupBuyingMr';
    import { pageList as getPrintListApi } from "@/api/device/pda";
    import { printApi } from '@/api/windowTicketSales/ticketingCollection'
@@ -136,7 +137,13 @@ export default {
                 this.loadingText = "订单入库中..."
                 let res = await gotoCorporatePay({
                     "orderId": orderId, // 订单编号-提交订单返回
-                    "payAmount": this.rebookForm.realPrice
+                    "payAmount": this.rebookForm.realPrice,
+                    payOrCredit: this.rebookForm.paymentType = 3 ? '1' : '2',
+                    rePaymentTime: this.rebookForm.rePaymentTime,
+                    corporate: {
+                        voucherUrl: this.form.photoList.map(item => item).join(","),
+                        remark: this.form.corporate.remark
+                    }
                 })
                 if(res.code == 200){
                     if(this.payTime){

+ 141 - 11
src/views/windowTicketSales/model/rebookBox.vue

@@ -61,28 +61,61 @@
                         <el-form-item v-if="rebookForm.diffPrice > 0" label="改签费用:">
                             <span>补差价{{ Math.abs(rebookForm.diffPrice) }}元</span>
                         </el-form-item>
-                        <el-form-item v-if="rebookForm.diffPrice > 0 && !rebookForm.timeId" label="支付方式 :" prop="paymentType">
+                        <el-form-item v-if="rebookForm.diffPrice > 0 && rebookForm.channelType != 'group'" label="支付方式 :" prop="paymentType">
                             <el-radio-group v-model="rebookForm.paymentType">
                                 <el-radio label="1">扫码支付</el-radio>
                                 <el-radio label="2">现金支付</el-radio>
                             </el-radio-group>
                         </el-form-item>
-                        <el-form-item v-if="rebookForm.diffPrice > 0 && rebookForm.timeId" label="支付方式 :" prop="paymentType">
+                        <el-form-item v-if="rebookForm.diffPrice > 0 && rebookForm.channelType == 'group'" label="支付方式 :" prop="paymentType">
                             <el-radio-group v-model="rebookForm.paymentType">
                                 <el-radio label="3">对公支付</el-radio>
                                 <el-radio label="6">挂账</el-radio>
                                 <el-radio label="7">链接支付</el-radio>
-                                <el-radio label="4">账户余额</el-radio>
-                                <el-radio label="5">授信余额</el-radio>
+                                <el-radio label="4">账户余额({{ balance }})</el-radio>
+                                <el-radio label="5">授信余额({{ grantQuota }})</el-radio>
                             </el-radio-group>
                         </el-form-item>
                         <el-form-item v-if="rebookForm.diffPrice > 0 && rebookForm.paymentType == 2 " label="收取现金 :"  prop="realPrice_1">
-                            <el-input @input="setRealPrice_1" style="width: 200px;" v-model="rebookForm.realPrice_1"></el-input>
+                            <!-- <el-input @input="setRealPrice_1" style="width: 200px;" v-model="rebookForm.realPrice_1"></el-input> -->
+                            <el-input v-model="rebookForm.realPrice_1" @input="setRealPrice_1" controls-position="right"
+                                :min="0"></el-input>
                             <span>元</span>
                         </el-form-item>
-                        <el-form-item label="找零金额 :" v-if="rebookForm.diffPrice > 0 && ruleForm.paymentType == 2">
+                        <el-form-item label="找零金额 :" v-if="rebookForm.diffPrice > 0 && rebookForm.paymentType == 2">
                             ¥{{ rebookForm.small }}元
                         </el-form-item>
+                        <el-form-item v-if="rebookForm.paymentType == 6" label="账期" prop="rePaymentTime">
+                            <el-date-picker v-model="rebookForm.rePaymentTime" type="date" value-format="yyyy-MM-dd"
+                                placeholder="选择日期">
+                            </el-date-picker>
+                        </el-form-item>
+                        <el-form-item v-if="rebookForm.paymentType == 3 || rebookForm.paymentType == 6" :label="rebookForm.paymentType == 3 ? '凭证上传' : '挂账类型凭证'" prop="photoList">
+                            <div style="display: flex;flex-wrap: wrap;">
+                                <div v-for="(item, index) in rebookForm.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="rebookForm.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="!rebookForm.photoList || rebookForm.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>
+                        </el-form-item>
                         <el-form-item label="备注:">
                             <el-input
                                 v-model="rebookForm.resubmitRemark"
@@ -176,10 +209,13 @@
 import {  getDateTimeAll,resubmitInfoApi } from '@/api/windowTicketSales/rebook'
 import { 
   querySeatListNew,
+  selectMarketTeamBySourceApi
 } from '@/api/windowTicketSales/ticketingSales'
+import { getSelectById as getBalanceInfo } from '@/api/team/teamMr'
 import { countBySeatTyp } from '@/api/ticketMr/InventoryTemplate'
 import { pageList as getSeatType } from '@/api/seatTypeMr/seatTypeMr'
 import seatBox from '@/components/seatBox/index.vue';
+import { getToken } from "@/utils/auth";
 import payJs from "../mixins/pay"
 const mathM = require('mathjs')
 export default {
@@ -198,11 +234,13 @@ export default {
                 performTimeId: undefined,
                 performInterval: undefined,
                 performId: undefined,
-                auditoriumId: undefined
+                auditoriumId: undefined,
+                photoList: []
             },
             rules: {
                 performDate: [{ required: true, message: '请选择日期', trigger: ['blur','change'] }],
-                performTimeId: [{ required: true, message: '请选择场次', trigger: ['blur','change'] }]
+                performTimeId: [{ required: true, message: '请选择场次', trigger: ['blur','change'] }],
+                realPrice_1: [{ required: true, message: '请输入金额', trigger: ['blur','change'] }]
             },
             // 场次列表
             intervalList: [],
@@ -225,6 +263,15 @@ export default {
             seatLoading: false,
             seatLoadText: '获取座位中...',
             setList: [],
+
+            balance: null, // 授信额度
+            grantQuota: null, // 授信使用额度
+
+            uploadObj: {
+                url: process.env.VUE_APP_UPLOAD_FILE_API + "/upload/single/minio",
+                Headers: { Authorization: "Bearer " + getToken() },
+            },
+            actionUrlLoading: false,
         }
     },
     created(){
@@ -249,9 +296,15 @@ export default {
                 auditoriumId: row.auditoriumId,
                 paymentType: "1", // 支付方式'
                 touristNum: row.touristNum,
-                seatList: []
+                seatList: [],
+                memberId: row.memberId,
+                channelType: row.channelType,
+                photoList: []
             }
             await this.countBySeatTypFun(row.auditoriumId)
+            if(row.channelType == 'group') {
+                await this.handleCorporatePay(this.rebookForm)
+            }
             this.$nextTick(()=>{
                 this.$refs.rebookForm.clearValidate()
             })
@@ -308,6 +361,19 @@ export default {
                         this.$message.error(`请选择${ this.rebookForm.touristNum }座位!!!`);
                         return
                     }
+
+                    if(this.rebookForm.paymentType == 4 && (!this.balance||this.balance<=0||this.balance < this.rebookForm.realPrice)) {
+                        this.$message.error('团队账户余额不足!!!');
+                        return
+                    }
+                    if(this.rebookForm.paymentType == 5 && (!this.grantQuota||this.grantQuota<=0||this.grantQuota < this.rebookForm.realPrice)) {
+                        this.$message.error('团队授信余额不足!!!');
+                        return
+                    }
+                    if((this.rebookForm.paymentType == 3 || this.rebookForm.paymentType == 6) && this.form.photoList.length<1){
+                        this.$message.error('请上传凭证')
+                        return
+                    }
                     this.orderInfoSubmitFun()
                 } else {
                     return false;
@@ -353,9 +419,13 @@ export default {
                         diffPrice: res.data.reSubmitInfo.diffPrice
                     }
                 }
+                console.log('this.rebookForm.diffPrice <= 0',this.rebookForm.diffPrice <= 0)
+                if(this.rebookForm.diffPrice <= 0) {
+                    this.rebookForm.paymentType = "2"
+                }
                 this.querySeatListFun()
             } catch (error) {
-                
+                console.error(error)
             }
          },
         /**  获取座位  */
@@ -365,7 +435,7 @@ export default {
                     auditoriumId: this.rebookForm.auditoriumId,
                     timeId: this.rebookForm.performTimeId,
                     goodsId: this.rebookForm.goodsId,
-                    channelType: this.rebookForm.timeId ? 'group' : 'window'
+                    channelType: this.rebookForm.channelType 
                 })
                 if(res.code == 200){
                     let list1 = []
@@ -453,6 +523,66 @@ export default {
                 this.$set(this.rebookForm,'small',mathM.format(Number(value) - Number(this.rebookForm.realPrice),10) )
             }
         },
+        /** 获取授信余额和账户余额  */
+        async selectMarketTeamBySourceFun(value) {
+            console.log("value===",value)
+            try {
+                let res = await selectMarketTeamBySourceApi({
+                    source: value
+                })
+                this.balance = res.data.balance
+                if(res.data.grantQuota && res.data.grantUsed) {
+                    this.grantQuota = res.data.grantQuota - res.data.grantUsed
+                }else if(res.data.grantQuota) {
+                    this.grantQuota = res.data.grantQuota
+                }else {
+                    this.grantQuota = 0
+                }
+                
+            } catch (error) {
+                this.balance = null
+                this.grantQuota = null
+            }
+        },
+         /**  上传图片 单张  */
+        handleAvatarSuccess(response, file, fileList) {
+            this.actionUrlLoading = false
+            if (response.code == 200) {
+                this.rebookForm.photoList.push(response.data.url)
+            }
+            this.$refs.rebookForm.validateField('photoList')
+        },
+        beforeAvatarUpload(file) {
+            const isLt2M = file.size / 1024 / 1024 <= 100;
+            let testmsg = file.name.substring(file.name.lastIndexOf('.') + 1)
+            let typeList = ['png', 'jepg', 'jpg', 'gif']
+            const isJPG = typeList.includes(testmsg);
+            if (!isJPG) {
+                this.$message.error(`上传图片图片只能是 ${typeList} 格式!`);
+            }
+            if (!isLt2M) {
+                this.$message.error('上传图片图片大小不能超过 100MB!');
+            }
+            return isJPG && isLt2M;
+        },
+        handleAvatarProgress() {
+            this.actionUrlLoading = true
+        },
+        handleAvatarError() {
+            this.actionUrlLoading = false
+        },
+        async handleCorporatePay(row) {
+          // 获取余额信息
+          try {
+            const balanceRes = await getBalanceInfo(row.memberId)
+            if(balanceRes.code === 200) {
+                this.balance = balanceRes.data.balance
+                this.balance = balanceRes.data.grantQuota 
+            }
+          } catch(err) {
+            console.error('获取余额信息失败', err)
+          }
+        },
     }
 }
 </script>

+ 206 - 71
src/views/windowTicketSales/model/upgradeBox.vue

@@ -1,24 +1,14 @@
 <template>
     <!-- 改签对话框 -->
-    <el-dialog 
-    title="订单升舱" 
-    :visible.sync="rebookDialog" 
-    width="95%" 
-    append-to-body 
-    class="rebook1_dialog"
-    :close-on-click-modal="false"
-    :close-on-press-escape="false"
-    :modal="false"
-    :before-close="handleClose"
-    center
-    >
+    <el-dialog title="订单升舱" :visible.sync="rebookDialog" width="95%" append-to-body class="rebook1_dialog"
+        :close-on-click-modal="false" :close-on-press-escape="false" :modal="false" :before-close="handleClose" center>
         <div class="rebook1_box" v-loading="loading">
             <div class="rebook1_from-box">
                 <div class="rebook1_from">
                     <el-form :model="rebookForm" ref="rebookForm" label-width="100px" :rules="rules">
                         <el-form-item label="剧目名称:" style="margin-bottom: 0px;">
                             <span>{{ rebookForm.performName }}</span>
-                        </el-form-item>    
+                        </el-form-item>
                         <el-form-item label="票务名称:" style="margin-bottom: 0px;">
                             <span>{{ rebookForm.goodsName }}</span>
                         </el-form-item>
@@ -35,18 +25,10 @@
                             <span>{{ rebookForm.performTimeStart }} — {{ rebookForm.performTimeEnd }} </span>
                         </el-form-item>
                         <el-form-item label="票档:" prop="seatTypeId">
-                            <el-select
-                                v-model="rebookForm.seatTypeId"
-                                placeholder="请选择票档"
-                                style="width: 100%"
-                                @change="querySeatListFun"
-                                >
-                                    <el-option
-                                    v-for="item in intervalList"
-                                    :key="item.seatTypeId"
-                                    :label="item.seatTypeName"
-                                    :value="item.seatTypeId"
-                                    />
+                            <el-select v-model="rebookForm.seatTypeId" placeholder="请选择票档" style="width: 100%"
+                                @change="querySeatListFun">
+                                <el-option v-for="item in intervalList" :key="item.seatTypeId"
+                                    :label="item.seatTypeName" :value="item.seatTypeId" />
                             </el-select>
                         </el-form-item>
                         <el-form-item label="订单总额:">
@@ -55,41 +37,73 @@
                         <el-form-item v-if="rebookForm.diffPrice < 0" label="升舱费用:">
                             <span>退费{{ Math.abs(rebookForm.diffPrice) }}元</span>
                         </el-form-item>
-                        <el-form-item v-if="rebookForm.diffPrice > 0" label="升舱费用:">
-                            <el-input-number 
-                            v-model="rebookForm.goodsDiffAmount" 
-                            controls-position="right"
-                            :min="0"></el-input-number>
+                        <el-form-item v-if="rebookForm.diffPrice > 0" label="升舱费用:" prop="goodsDiffAmount">
+                            <el-input v-model="rebookForm.goodsDiffAmount"  type="number" style="width: 200px;" @input="setRealPrice_2"
+                                :min="0"></el-input>
+                            <span>元</span>
                         </el-form-item>
-                        <el-form-item v-if="rebookForm.diffPrice > 0 && !rebookForm.timeId" label="支付方式 :" prop="paymentType">
+                        <el-form-item v-if="rebookForm.diffPrice > 0 && !rebookForm.channelType != 'group'" label="支付方式 :"
+                            prop="paymentType">
                             <el-radio-group v-model="rebookForm.paymentType">
                                 <el-radio label="1">扫码支付</el-radio>
                                 <el-radio label="2">现金支付</el-radio>
                             </el-radio-group>
                         </el-form-item>
-                        <el-form-item v-if="rebookForm.diffPrice > 0 && rebookForm.timeId" label="支付方式 :" prop="paymentType">
+                        <el-form-item v-if="rebookForm.diffPrice > 0 && rebookForm.channelType == 'group'" label="支付方式 :"
+                            prop="paymentType">
                             <el-radio-group v-model="rebookForm.paymentType">
                                 <el-radio label="3">对公支付</el-radio>
                                 <el-radio label="6">挂账</el-radio>
                                 <el-radio label="7">链接支付</el-radio>
-                                <el-radio label="4">账户余额</el-radio>
-                                <el-radio label="5">授信余额</el-radio>
+                                <el-radio label="4">账户余额({{ balance }})</el-radio>
+                                <el-radio label="5">授信余额({{ grantQuota }})</el-radio>
                             </el-radio-group>
                         </el-form-item>
-                        <el-form-item v-if="rebookForm.diffPrice > 0 && rebookForm.paymentType == 2 " label="收取现金 :"  prop="realPrice_1">
-                            <el-input @input="setRealPrice_1" style="width: 200px;" v-model="rebookForm.realPrice_1"></el-input>
+                        <el-form-item v-if="rebookForm.diffPrice > 0 && rebookForm.paymentType == 2 " label="收取现金 :"
+                            prop="realPrice_1">
+                            <el-input v-model="rebookForm.realPrice_1" type="number" style="width: 200px;" @input="setRealPrice_1"
+                                :min="0"></el-input>
+                            <!-- <el-input @input="setRealPrice_1" style="width: 200px;"
+                                v-model="rebookForm.realPrice_1"></el-input> -->
                             <span>元</span>
                         </el-form-item>
-                        <el-form-item label="找零金额 :" v-if="rebookForm.diffPrice > 0 && ruleForm.paymentType == 2">
+                        <el-form-item label="找零金额 :" v-if="rebookForm.diffPrice > 0 && rebookForm.paymentType == 2">
                             ¥{{ rebookForm.small }}元
                         </el-form-item>
+                        <el-form-item v-if="rebookForm.paymentType == 6" label="账期" prop="rePaymentTime">
+                            <el-date-picker v-model="rebookForm.rePaymentTime" type="date" value-format="yyyy-MM-dd"
+                                placeholder="选择日期">
+                            </el-date-picker>
+                        </el-form-item>
+                        <el-form-item v-if="rebookForm.paymentType == 3 || rebookForm.paymentType == 6" :label="rebookForm.paymentType == 3 ? '凭证上传' : '挂账类型凭证'" prop="photoList">
+                            <div style="display: flex;flex-wrap: wrap;">
+                                <div v-for="(item, index) in rebookForm.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="rebookForm.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="!rebookForm.photoList || rebookForm.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>
+                        </el-form-item>
                         <el-form-item label="备注:">
-                            <el-input
-                                v-model="rebookForm.resubmitRemark"
-                                placeholder="请输入备注"
-                                clearable
-                                type="textarea"
-                                />
+                            <el-input v-model="rebookForm.resubmitRemark" placeholder="请输入备注" clearable
+                                type="textarea" />
                         </el-form-item>
                     </el-form>
                     <div class="tip-box">
@@ -97,12 +111,7 @@
                     </div>
                 </div>
                 <div class="rebook1_seat" v-loading="seatLoading" :element-loading-text="seatLoadText">
-                    <seatBox 
-                    ref="seatBox" 
-                    :seatTypeLimit="configStockNumObj"
-                    @selectSeat="selectSeat"
-                    height="100%"
-                    />
+                    <seatBox ref="seatBox" :seatTypeLimit="configStockNumObj" @selectSeat="selectSeat" height="100%" />
                 </div>
             </div>
             <div style="width: 100%;display: flex;justify-content: center;">
@@ -114,8 +123,8 @@
                 <div class="increase-viewers-pay-status-info" v-if="!loading">
                     <span style="font-weight: 600;font-size: 20px;">提示</span>
                     <span style="padding: 10px 0;">
-                        {{ payStatus==1 ? '生成订单失败!!!' : 
-                        payStatus==2 ? '生成订单生成成功,请点击调取扫码盒子' : 
+                        {{ payStatus==1 ? '生成订单失败!!!' :
+                        payStatus==2 ? '生成订单生成成功,请点击调取扫码盒子' :
                         payStatus==4 ? '扫码支付失败!!!' :
                         payStatus==5 ? '请出示付款码!!!' :
                         payStatus==5.5 ? '扫码成功,支付中...' :
@@ -131,7 +140,8 @@
                     <!-- 重新生成订单 1  -->
                     <div v-if="payStatus==1" style="display: flex;">
                         <el-button @click="payStatus = null" type="success">修改信息</el-button>
-                        <el-button @click="orderInfoSubmitFun()" style="margin-left: 20px;" type="primary">重新生成订单</el-button>
+                        <el-button @click="orderInfoSubmitFun()" style="margin-left: 20px;"
+                            type="primary">重新生成订单</el-button>
                     </div>
                     <!--  生成订单成功 选择支付方式  -->
                     <div>
@@ -140,29 +150,29 @@
                         <!-- 扫码支付 4 -->
                         <el-button v-if="payStatus==4" @click="vbar_open(orderId)" type="success">重新扫码支付</el-button>
                         <!-- 重新支付 3 -->
-                        <el-button v-if="payStatus==3" @click="gotoCashPayFun(orderId)" type="success">重新提交入库</el-button>
+                        <el-button v-if="payStatus==3" @click="gotoCashPayFun(orderId)"
+                            type="success">重新提交入库</el-button>
                         <!-- 重新支付 6  7 -->
-                        <el-button v-if="payStatus==6 || payStatus==7" @click="vbar_open(orderId)" type="success">重新连接扫码支付</el-button>
-                    
+                        <el-button v-if="payStatus==6 || payStatus==7" @click="vbar_open(orderId)"
+                            type="success">重新连接扫码支付</el-button>
+
                         <!--   现金支付  -->
                         <el-button v-if="payStatus==2" @click="vbar_open(orderId)" type="success">扫码支付</el-button>
-                        
+
                         <!--   现金支付  -->
                         <el-button v-if="payStatus==2" @click="vbar_open(orderId)" type="success">扫码支付</el-button>
 
                     </div>
-                    
+
                     <!-- 打印 8  -->
                     <div v-if="payStatus==8">
                         <el-select v-model="printListId" placeholder="选择打印机">
-                            <el-option 
-                            :label="item.deviceName" 
-                            :key="item.id" 
-                            :value="item.id" 
-                            v-for="(item) in printList"></el-option>
+                            <el-option :label="item.deviceName" :key="item.id" :value="item.id"
+                                v-for="(item) in printList"></el-option>
                         </el-select>
                         <el-button style="margin-left: 15px" @click="print" type="success">打印门票</el-button>
-                        <el-button style="margin-left: 15px" @click="goTicketingCollections" type="success">跳转取票界面</el-button>
+                        <el-button style="margin-left: 15px" @click="goTicketingCollections"
+                            type="success">跳转取票界面</el-button>
                     </div>
                     <!-- 支付超时 9  -->
                     <div v-if="payStatus==9">
@@ -182,12 +192,15 @@
 <script>
 import { 
   querySeatListNew,
+  selectMarketTeamBySourceApi
  } from '@/api/windowTicketSales/ticketingSales'
+ import { getSelectById as getBalanceInfo } from '@/api/team/teamMr'
  import { rebookApi,getTimeSeatTypeAllApi,resubmitInfoApi } from '@/api/windowTicketSales/rebook'
  import { countBySeatTyp } from '@/api/ticketMr/InventoryTemplate'
  import { pageList as getSeatType } from '@/api/seatTypeMr/seatTypeMr'
  import { getSelectById } from '@/api/order/orderMr'
  import seatBox from '@/components/seatBox/index.vue';
+ import { getToken } from "@/utils/auth";
  import payJs from "../mixins/pay"
  const mathM = require('mathjs')
 export default {
@@ -206,10 +219,13 @@ export default {
                 performTimeId: undefined,
                 performInterval: undefined,
                 performId: undefined,
-                auditoriumId: undefined
+                auditoriumId: undefined,
+                photoList: []
             },
             rules: {
-                seatTypeId: [{ required: true, message: '请选择票档', trigger: ['blur','change'] }]
+                seatTypeId: [{ required: true, message: '请选择票档', trigger: ['blur','change'] }],
+                realPrice_1: [{ required: true, message: '请输入金额', trigger: ['blur','change'] }],
+                goodsDiffAmount: [{ required: true, message: '请输入金额', trigger: ['blur','change'] }],
             },
             // 场次列表
             intervalList: [],
@@ -232,6 +248,15 @@ export default {
             seatLoading: false,
             seatLoadText: '获取座位中...',
             setList: [],
+
+            balance: null, // 授信额度
+            grantQuota: null, // 授信使用额度
+
+            uploadObj: {
+                url: process.env.VUE_APP_UPLOAD_FILE_API + "/upload/single/minio",
+                Headers: { Authorization: "Bearer " + getToken() },
+            },
+            actionUrlLoading: false,
         }
     },
     created(){
@@ -258,10 +283,15 @@ export default {
                 touristNum: row.touristNum,
                 seatList: [],
                 performTimeEnd: row.performTimeEnd,
-                performTimeStart: row.performTimeStart
+                performTimeStart: row.performTimeStart,
+                channelType: row.channelType,
+                photoList: []
             }
             await this.getSelectByIdApi()
             await this.handleDateChange()
+            if(row.channelType == 'group') {
+                await this.handleCorporatePay(this.rebookForm)
+            }
             this.$nextTick(()=>{
                 this.$refs.rebookForm.clearValidate()
             })
@@ -272,6 +302,7 @@ export default {
                 let res = await getSelectById(this.rebookForm.orderId)
                 this.rebookForm = {
                     ...this.rebookForm,
+                    memberId: res.data.memberId,
                     performTimeId: res.data.performTimeId,
                 }
             } catch (error) {
@@ -308,6 +339,18 @@ export default {
                         this.$message.error(`请选择${ this.rebookForm.touristNum }座位!!!`);
                         return
                     }
+                    if(this.rebookForm.paymentType == 4 && (!this.balance||this.balance<=0||this.balance < this.rebookForm.realPrice)) {
+                        this.$message.error('团队账户余额不足!!!');
+                        return
+                    }
+                    if(this.rebookForm.paymentType == 5 && (!this.grantQuota||this.grantQuota<=0||this.grantQuota < this.rebookForm.realPrice)) {
+                        this.$message.error('团队授信余额不足!!!');
+                        return
+                    }
+                    if((this.rebookForm.paymentType == 3 || this.rebookForm.paymentType == 6) && this.form.photoList.length<1){
+                        this.$message.error('请上传凭证')
+                        return
+                    }
                     this.orderInfoSubmitFun()
                 } else {
                     return false;
@@ -350,9 +393,8 @@ export default {
                     realPrice: res.data.reSubmitInfo.realPrice,
                     diffPrice: res.data.reSubmitInfo.diffPrice
                 }
-
                 if(this.rebookForm.diffPrice <= 0) {
-                    this.rebookForm.paymentType == "2"
+                    this.rebookForm.paymentType = "2"
                 }
             } catch (error) {
                 
@@ -368,7 +410,7 @@ export default {
                     auditoriumId: this.rebookForm.auditoriumId,
                     timeId: this.rebookForm.performTimeId,
                     goodsId: this.rebookForm.goodsId,
-                    channelType: this.rebookForm.timeId ? 'group' : 'window'
+                    channelType: this.rebookForm.channelType
                 })
                 if(res.code == 200){
                     let list1 = []
@@ -452,10 +494,79 @@ export default {
             console.log("已选择的====",list)
         },
         setRealPrice_1(value) {
-            if(this.rebookForm.realPrice && !isNaN(this.rebookForm.realPrice) && value && !isNaN(value)) {
-                this.$set(this.rebookForm,'small',mathM.format(Number(value) - Number(this.rebookForm.realPrice),10) )
+            if(this.rebookForm.goodsDiffAmount && !isNaN(this.rebookForm.goodsDiffAmount) && value && !isNaN(value)) {
+                this.$set(this.rebookForm,'small',mathM.format(Number(value) - Number(this.rebookForm.goodsDiffAmount),10) )
             }
         },
+        setRealPrice_2(value) {
+            if(this.rebookForm.realPrice_1 && !isNaN(this.rebookForm.realPrice_1) && value && !isNaN(value)) {
+                this.$set(this.rebookForm,'small',mathM.format(Number(this.rebookForm.realPrice_1) - Number(value),10) )
+            }
+        },
+        /** 获取授信余额和账户余额  */
+        async selectMarketTeamBySourceFun(value) {
+            console.log("value===",value)
+            try {
+                let res = await selectMarketTeamBySourceApi({
+                    source: value
+                })
+                this.balance = res.data.balance
+                if(res.data.grantQuota && res.data.grantUsed) {
+                    this.grantQuota = res.data.grantQuota - res.data.grantUsed
+                }else if(res.data.grantQuota) {
+                    this.grantQuota = res.data.grantQuota
+                }else {
+                    this.grantQuota = 0
+                }
+                
+            } catch (error) {
+                this.balance = null
+                this.grantQuota = null
+            }
+        },
+         /**  上传图片 单张  */
+        handleAvatarSuccess(response, file, fileList) {
+            this.actionUrlLoading = false
+            if (response.code == 200) {
+                this.rebookForm.photoList.push(response.data.url)
+            }
+            this.$refs.rebookForm.validateField('photoList')
+        },
+        beforeAvatarUpload(file) {
+            const isLt2M = file.size / 1024 / 1024 <= 100;
+            let testmsg = file.name.substring(file.name.lastIndexOf('.') + 1)
+            let typeList = ['png', 'jepg', 'jpg', 'gif']
+            const isJPG = typeList.includes(testmsg);
+            if (!isJPG) {
+                this.$message.error(`上传图片图片只能是 ${typeList} 格式!`);
+            }
+            if (!isLt2M) {
+                this.$message.error('上传图片图片大小不能超过 100MB!');
+            }
+            return isJPG && isLt2M;
+        },
+        handleAvatarProgress() {
+            this.actionUrlLoading = true
+        },
+        handleAvatarError() {
+            this.actionUrlLoading = false
+        },
+        handleRemove(index) {
+            this.rebookForm.photoList.splice(index,1)
+            this.$refs.rebookForm.validateField('photoList')
+        },
+        async handleCorporatePay(row) {
+          // 获取余额信息
+          try {
+            const balanceRes = await getBalanceInfo(row.memberId)
+            if(balanceRes.code === 200) {
+                this.balance = balanceRes.data.balance
+                this.balance = balanceRes.data.grantQuota 
+            }
+          } catch(err) {
+            console.error('获取余额信息失败', err)
+          }
+        },
     }
 }
 </script>
@@ -512,4 +623,28 @@ export default {
         color: #fff;
     } 
 } 
+
+::v-deep .avatar-uploader .el-upload {
+    border: 1px dashed #d9d9d9;
+    border-radius: 6px;
+    cursor: pointer;
+    position: relative;
+    overflow: hidden;
+  }
+  ::v-deep .avatar-uploader .el-upload:hover {
+    border-color: #409EFF;
+  }
+  ::v-deep .avatar-uploader-icon {
+    font-size: 28px;
+    color: #8c939d;
+    width: 100px;
+    height: 100px;
+    line-height: 100px;
+    text-align: center;
+  }
+  ::v-deep .avatar {
+    width: 100px;
+    height: 100px;
+    display: block;
+  }
 </style>