浏览代码

1. 优化

MONSTER-ygh 1 月之前
父节点
当前提交
1f3ebd17aa

+ 10 - 1
src/api/priceConfiguration/index.js

@@ -9,7 +9,7 @@ export const pageList = (query) => {
   })
 }
 
-// 新增/修改
+// 新增
 export const saveAndEdit = (data) => {
   return request({
     url: '/merchant/priceInfo/insertOrUpdate',
@@ -18,6 +18,15 @@ export const saveAndEdit = (data) => {
   })
 }
 
+// 修改
+export const saveAndUpdate = (data) => {
+  return request({
+    url: '/merchant/priceInfo/update',
+    method: 'put',
+    data: data
+  })
+}
+
 // 查询详情
 export function getSelectById(params) {
   return request({

+ 16 - 10
src/components/seatBox/index.vue

@@ -1,5 +1,5 @@
 <template>
-    <div class="app-container-seat">
+    <div class="app-container-seat" :style="{height: height}">
         <div class="app-container-seat-tool">
             <!--  座位类型  -->
             <slot name="info">
@@ -126,6 +126,10 @@
             default: ()=>{
                 return {}
             }
+        },
+        height: {
+            type: [String],
+            default: 'calc( 100vh - 120px )'
         }
     },
     data() {
@@ -316,16 +320,19 @@
                 this.$message.error('此座已被锁定,请先解锁!!!');
                 return
             }
-            let seatTypeNum = 0
-            this.seatSelectList.forEach((item,index)=>{
-                if(item.seatTypeId == row.seatTypeId) {
-                    seatTypeNum++
+            if(!row.isSelect){
+                let seatTypeNum = 0
+                this.seatSelectList.forEach((item,index)=>{
+                    if(item.seatTypeId == row.seatTypeId) {
+                        seatTypeNum++
+                    }
+                })
+                if( seatTypeNum >= this.seatTypeLimit['seatNum_'+row.seatTypeId].stockTotal-this.seatTypeLimit['seatNum_'+row.seatTypeId].stockYes ) {
+                    this.$message.error('选择的座位类型已超过库存!!!');
+                    return
                 }
-            })
-            if( seatTypeNum >= this.seatTypeLimit['seatNum_'+row.seatTypeId].stockTotal-this.seatTypeLimit['seatNum_'+row.seatTypeId].stockYes ) {
-                this.$message.error('选择的座位类型已超过库存!!!');
-                return
             }
+            
             if(row.occupyStatus == 0){
                 // console.log("weqwrwerewrer")
                 // this.$confirm('此座已被锁定,请先解锁', '提示', {
@@ -447,7 +454,6 @@
   <style lang="scss" scoped>
     .app-container-seat {
         width: 100%;
-        height: calc( 100vh - 120px );
         display: flex;
         flex-direction: column;
     }

+ 71 - 4
src/views/priceConfigurationUilt/dialog/addAndEdit.vue

@@ -74,7 +74,7 @@
             @click="selectWeekDay(item)"
             :type="form.weekName.includes(item.key)?'primary':''">{{ item.name }}</el-button>
           </div>
-          <div style="font-size: 12px;">指定在选定区间内的周几价格进行调整,列如区间选择2018-01-01至2018-01-20,星期选择星期一,则这个区间内的星期一价格都进行调整</div>
+          <div style="font-size: 12px;">指对选定时间内的场次信息进行配置。例如选择2018-01-01至2018-01-20 星期六、星期日,则对该时间内的场次信息进行配置</div>
         </el-form-item>
         <div v-if="['group'].includes(channelType)">
           <el-form-item label="成团要求:" prop="touristLimit">
@@ -95,7 +95,7 @@
         </div>
         
 
-        <el-form-item v-if="!['window','group'].includes(channelType)" label="划线价:" prop="originalAmount">
+        <el-form-item v-if="!['window','group'].includes(channelType)" :label="setSaleAmounttile1()" prop="originalAmount">
           <el-input-number v-model="form.originalAmount" style="width: 350px"></el-input-number>
         </el-form-item>
@@ -130,7 +130,7 @@
 </template>
 
 <script>
-import { saveAndEdit } from "@/api/priceConfiguration/index";
+import { saveAndEdit,saveAndUpdate } from "@/api/priceConfiguration/index";
 import { pageList as goodsPageListApi } from '@/api/ticketMr/ticketMr'
 import moment from "moment"
 export default {
@@ -259,6 +259,52 @@ export default {
         }
       })
     },
+    chcekWeek(){
+      let weekDayList = [
+        {name: "星期日",key: "星期日"},
+        {name: "星期一",key: "星期一"},
+        {name: "星期二",key: "星期二"},
+        {name: "星期三",key: "星期三"},
+        {name: "星期四",key: "星期四"},
+        {name: "星期五",key: "星期五"},
+        {name: "星期六",key: "星期六"},
+      ]
+      // 定义起始日期和结束日期
+      const startDate = moment(this.form.performDate[0]); // 例如:2023年1月1日
+      const endDate = moment(this.form.performDate[1]);   // 例如:2023年1月5日
+      
+      // 创建一个空数组来存储日期
+      const datesInRange = [];
+      
+      // 循环从起始日期到结束日期
+      let currentDate = moment(startDate);
+      while (currentDate.isSameOrBefore(endDate)) {
+          datesInRange.push(currentDate.clone()); // 将当前日期添加到数组中,并复制一份,避免修改原始对象
+          currentDate = currentDate.add(1, 'days'); // 将当前日期增加一天
+      }
+      let list = new Set(datesInRange.map(date => moment(date).day()))
+      let list1 = Array.from(list);
+      console.log("list====",list1)
+      let srt = ''
+      let flog = false
+      let index = -1
+      this.form.weekName.forEach((item1,index1)=>{
+        index = index1
+        list1.forEach((item)=>{
+          if(item1 == weekDayList[item].key){
+            index = -1
+          }
+        })
+        if(index != -1 ) {
+          srt = srt + (srt?",":'') + item1
+          flog = true
+        }
+      })
+      if(flog) {  
+        this.$message.error('选择日期内没有'+srt);
+      }
+      return flog
+    },
     /**
      * 保存
      * @date 2023-11-22
@@ -268,6 +314,9 @@ export default {
       this.$refs["form"].validate(async (valid) => {
         if (valid) {
           try {
+            if(!['group'].includes(this.channelType) && form.weekType != 1 && this.chcekWeek()){
+              return
+            }
             let postEdit = JSON.parse(JSON.stringify(this.form))
             if(postEdit.performDate){
               postEdit['startDate'] = moment(postEdit.performDate[0]).format('YYYY-MM-DD')
@@ -286,7 +335,8 @@ export default {
             }
             delete postEdit.performDate
             this.loading = true;
-            const { code } = await saveAndEdit({ ...postEdit });
+            let fun = postEdit.id ? saveAndUpdate : saveAndEdit
+            const { code } = await fun({ ...postEdit });
             if (code === 200) {
               this.$message.success("操作成功!");
               this.$emit("getList");
@@ -340,6 +390,23 @@ export default {
       if(!this.form.weekType) {
         this.form.weekName = []
       }
+    },
+     /**  */
+     setSaleAmounttile1(){
+      let str = ''
+      if(this.channelType == "applet") {
+        str = "划线价:"
+      }
+      if(this.channelType == "retail") {
+        str = "销售价:"
+      }
+      if(this.channelType == "window") {
+        str = "划线价:"
+      }
+      if(this.channelType == "group") {
+        str = "划线价:"
+      }
+      return str
     },
     /**  */
     setSaleAmounttile(){

+ 9 - 7
src/views/priceConfigurationUilt/dialog/calendarBox.vue

@@ -81,9 +81,10 @@ export default {
     async getList(params) {
       try {
         this.loading = true;
-        let res = await getCalendarList(params)
+        let res = await getCalendarList({...params,pageNum: 1,
+          pageSize: 10000})
         if(res.code == 200) {
-          this.perFormList = res.rows || []
+          this.perFormList = res.data || []
           this.loading = false;
         }
         this.loading = false;
@@ -96,12 +97,13 @@ export default {
       try {
         this.perFormList = []
         this.loading = true;
-        let res = await getCalendarList(params)
+        let res = await getCalendarList({...params,pageNum: 1,
+          pageSize: 10000})
         if(res.code == 200) {
           this.loading = false;
-          if(res.rows && res.rows.length>0){
-            this.perFormList = res.rows || []
-            let date = new Date(res.rows[0].priceDate)
+          if(res.data && res.data.length>0){
+            this.perFormList = res.data || []
+            let date = new Date(res.data[0].priceDate)
             this.timeValue = date
             //this.getRange(date)
           }
@@ -118,7 +120,7 @@ export default {
         if(item.priceDate && item.priceDate.indexOf(data.day) != -1) {
           if(this.channelType == "retail") {
             list = [
-              { title: '划线价', money: item.originalAmount + '元'  },
+              { title: '销售价', money: item.originalAmount + '元'  },
               { title: '分销价', money: item.saleAmount + '元' },
               { title: '佣金', money: item.retailAmount + '元' },
             ]

+ 19 - 2
src/views/priceConfigurationUilt/index.vue

@@ -64,9 +64,9 @@
           </div>
         </template>
       </el-table-column>
-      <el-table-column v-if="!['window','group'].includes(channelType)" label="划线价(元)" align="center" prop="originalAmount" />
+      <el-table-column v-if="!['window','group'].includes(channelType)" :label="setSaleAmounttile1()" align="center" prop="originalAmount" />
       <el-table-column :label="setSaleAmounttile()" align="center" prop="saleAmount" />
-
+      <el-table-column v-if="['retail'].includes(channelType)" label="佣金(元)" align="center" prop="retailAmount" />
       <el-table-column label="创建人" align="center" prop="createBy" />
       <el-table-column label="最后修改时间" align="center" prop="updateTime" />
       <el-table-column label="备注" align="center" prop="remark" />
@@ -276,6 +276,23 @@ export default {
       }).catch(() => {});
     },
     /**  */
+    setSaleAmounttile1(){
+      let str = ''
+      if(this.channelType == "applet") {
+        str = "划线价(元)"
+      }
+      if(this.channelType == "retail") {
+        str = "销售价(元)"
+      }
+      if(this.channelType == "window") {
+        str = "划线价(元)"
+      }
+      if(this.channelType == "group") {
+        str = "划线价(元)"
+      }
+      return str
+    },
+    /**  */
     setSaleAmounttile(){
       let str = ''
       if(this.channelType == "applet") {

+ 34 - 40
src/views/ticket/InventoryTemplate/dialog/addAndEdit.vue

@@ -41,7 +41,7 @@
             <el-form-item label="可配置数量:">
               {{ seatNum }}
             </el-form-item>
-            <el-form-item label="已配置数:">
+            <el-form-item label="已配置数:">
               {{ configStockNum }}
             </el-form-item>
             <el-form-item label="未配置数量:">
@@ -74,6 +74,7 @@
                   v-model="form.chennelListForm[chennelAtion].stockType"
                   @change="setStockType"
                   >
+                    <el-radio :label="-1">不限</el-radio>
                     <el-radio :label="0">根据数量</el-radio>
                     <el-radio :label="1">根据座位</el-radio>
                   </el-radio-group>
@@ -264,6 +265,7 @@ export default {
         this.chennelAtion = null
         this.open = true
         this.activeName = '01';
+        this.countBySeatTypList = []
         this.configStockNumObj = {}
         if(this.channelTypeList.length<0) {
           await this.channelTypeFun()
@@ -312,10 +314,11 @@ export default {
           "channelType":item.dictValue,
           "channelName":item.dictLabel,
           "stockType": this.getStockType(item,obj),
-          "stockNum": this.getStockAllNum(item,obj),
+          "stockNum": '',
           "seatTypeList": [],
           "chennelSeatList": []
         })
+        list[index].stockNum = this.getStockAllNum(list[index],obj)
         list[index].seatTypeList = this.getSeatTypeList(list[index],obj)
         list[index].chennelSeatList = this.getChennelSeatList(list[index],obj)
       })
@@ -323,7 +326,7 @@ export default {
     },
     /**  获取模式  */
     getStockType(obj,data){
-      let stockType = 0
+      let stockType = -1
       if(data.chennelList && data.chennelList.length>0) {
         for(let i = 0;i < data.chennelList.length;i++) {
           if(obj.dictValue == data.chennelList[i].channelType) {
@@ -338,14 +341,18 @@ export default {
     getStockAllNum(obj,data) {
       let num = 0
       let flog = false
-      if(data.chennelList && data.chennelList.length>0) {
-        data.chennelList.forEach((item,index)=>{
-          if(obj.dictValue == item.channelType) {
-            flog = true
-            num = num + item.stockNum
-          }
-        })
+      
+      if(obj.stockType != -1){
+        if(data.chennelList && data.chennelList.length>0) {
+          data.chennelList.forEach((item,index)=>{
+            if(obj.channelType == item.channelType) {
+              flog = true
+              num = num + item.stockNum
+            }
+          })
+        }
       }
+      console.log("dsfsdfsdf===",obj,flog)
       if(flog) {
         return num
       }else {
@@ -432,7 +439,7 @@ export default {
               if(this.form.chennelListForm[i].stockType == 0) {
                 if(this.form.chennelListForm[i].seatTypeList && this.form.chennelListForm[i].seatTypeList.length>0) {
                   for(let j = 0;j< this.form.chennelListForm[i].seatTypeList.length;j++) {
-                    if(this.form.chennelListForm[i].seatTypeList[j].stockNum) {
+                    if(this.form.chennelListForm[i].seatTypeList[j].stockNum ||this.form.chennelListForm[i].seatTypeList[j].stockNum === 0) {
                       postMap.chennelList.push({
                         ...obj,
                         "seatTypeId": this.form.chennelListForm[i].seatTypeList[j].seatTypeId,
@@ -579,26 +586,16 @@ export default {
       })
       this.form.chennelListForm.forEach((item,index)=>{
         stockNum = 0
-        if(!item.stockType && item.seatTypeList && item.seatTypeList.length>0) {
+        if( item.stockType == -1 ){
+          stockNum = '不限'
+        }else if(!item.stockType && item.seatTypeList && item.seatTypeList.length>0) {
           item.seatTypeList.forEach((item1,index1)=>{
             if(item1.stockNum) {
               stockNum = stockNum + item1.stockNum
               stockTotal = stockTotal + item1.stockNum
-              // if(!flog) {
-              //   obj['seatNum_'+item1.seatTypeId].stockYes = item1.stockNum
-              //   flog = true
-              // }else {
-              //   obj['seatNum_'+item1.seatTypeId].stockYes = obj['seatNum_'+item1.seatTypeId].stockYes + item1.stockNum
-              // }
               obj['seatNum_'+item1.seatTypeId].stockYes = obj['seatNum_'+item1.seatTypeId].stockYes + item1.stockNum
             }
             if(item1.stockNum && this.chennelAtion == index){
-              // if(!flog) {
-              //   obj['seatNum_'+item1.seatTypeId].stockYes = 0 - item1.stockNum
-              //   flog = true
-              // }else {
-              //   obj['seatNum_'+item1.seatTypeId].stockYes = obj['seatNum_'+item1.seatTypeId].stockYes - item1.stockNum
-              // }
               obj['seatNum_'+item1.seatTypeId].stockYes = obj['seatNum_'+item1.seatTypeId].stockYes - item1.stockNum
             }
           })
@@ -608,22 +605,10 @@ export default {
               stockNum = stockNum + item.chennelSeatList[item1].length
               stockTotal = stockTotal + item.chennelSeatList[item1].length
               console.log("item1====",item1,item1.replace('seat_',''))
-              // if(!flog) {
-              //   obj[item1.replace('seat_','seatNum_')].stockYes = item.chennelSeatList[item1].length
-              //   flog = true
-              // }else {
-              //   obj[item1.replace('seat_','seatNum_')].stockYes = obj[item1.replace('seat_','seatNum_')].stockYes + item.chennelSeatList[item1].length
-              // }
               obj[item1.replace('seat_','seatNum_')].stockYes = obj[item1.replace('seat_','seatNum_')].stockYes + item.chennelSeatList[item1].length
             }
             
             if(this.chennelAtion == index && item.chennelSeatList[item1]){
-              // if(!flog) {
-              //   obj[item1.replace('seat_','seatNum_')].stockYes = 0 - item.chennelSeatList[item1].length
-              //   flog = true
-              // }else {
-              //   obj[item1.replace('seat_','seatNum_')].stockYes = obj[item1.replace('seat_','seatNum_')].stockYes - item.chennelSeatList[item1].length
-              // }
               obj[item1.replace('seat_','seatNum_')].stockYes = obj[item1.replace('seat_','seatNum_')].stockYes - item.chennelSeatList[item1].length
             }
           })
@@ -639,15 +624,20 @@ export default {
     setStockType(value) {
       console.log('选择模式===',value)
       this.form.chennelListForm[this.chennelAtion].stockNum = 0
-      if(value == 1) {
+      if(value == -1) {
+        this.form.chennelListForm[this.chennelAtion].stockNum = '不限'
+        this.form.chennelListForm[this.chennelAtion].chennelSeatList = null
+        this.form.chennelListForm[this.chennelAtion].seatTypeList.forEach((item,index)=>{
+          this.form.chennelListForm[this.chennelAtion].seatTypeList[index].stockNum = undefined
+        })
+      }else if(value == 1) {
         this.form.chennelListForm[this.chennelAtion].seatTypeList.forEach((item,index)=>{
           this.form.chennelListForm[this.chennelAtion].seatTypeList[index].stockNum = undefined
         })
         this.getSeatSelectById()
-      }else {
+      }else if(value === 0){
         this.form.chennelListForm[this.chennelAtion].chennelSeatList = null
       }
-      
     },
     /**  获取座位  */
     async getSeatSelectById() {
@@ -725,7 +715,11 @@ export default {
       let stockNum = 0
       let stockTotal= 0
       this.form.chennelListForm.forEach((item,index)=>{
-        stockNum = 0
+        if(item.stockType == -1) {
+          stockNum = "不限"
+        }else {
+          stockNum = 0
+        }
         if(item.seatTypeList && item.seatTypeList.length>0) {
           item.seatTypeList.forEach((item1,index1)=>{
             if(item1.stockNum) {

+ 17 - 1
src/views/ticket/schedulingConfiguration/index.vue

@@ -8,7 +8,7 @@
         <template
           slot="dateCell"
           slot-scope="{date, data}">
-          <div @click.stop="selectTime(data.day)">
+          <div @click.stop="selectTime(data.day)" :class="[data.day == today?'today_yes':'today_no']">
             <span>{{ data.day.split('-').slice(1).join('-') }}</span>
             <div style="width: 100%; display: flex;flex-wrap: wrap;" >
               <div 
@@ -61,6 +61,7 @@ export default {
       timeValue: new Date(),
       perFormList: [],
       showCalendar: false,
+      today: moment().format("YYYY-MM-DD")
     };
   },
   created() {
@@ -195,5 +196,20 @@ export default {
 .app-calendar-container ::v-deep .el-calendar-table .el-calendar-day {
     height: auto;
     min-height: 86px;
+}
+.app-calendar-container ::v-deep .is-today {
+  background-color: rgba(255, 240, 24, 0.5);
+}
+.app-calendar-container ::v-deep .prev {
+  background-color: rgba(223, 230, 236,0.5) !important;
+}
+.app-calendar-container ::v-deep .next {
+  background-color: rgba(223, 230, 236,0.5) !important;
+}
+.today_yes {
+
+}
+.today_no {
+
 }
 </style>

+ 8 - 0
src/views/windowTicketSales/mixins/querySeatList.js

@@ -0,0 +1,8 @@
+export default {
+    data() {
+        return {
+           
+        }
+    },
+
+}

+ 171 - 55
src/views/windowTicketSales/model/rebookBox.vue

@@ -3,61 +3,70 @@
     <el-dialog 
     title="订单改签" 
     :visible.sync="rebookDialog" 
-    width="900" 
+    width="95%" 
     append-to-body 
-    class="rebook-dialog"
+    class="rebook1_dialog"
     :close-on-click-modal="false"
     :close-on-press-escape="false"
     :modal="false"
     :before-close="handleClose"
+    center
     >
-        <div class="rebook-box" v-loading="loading">
-            <div class="rebook-from">
-                <div class="tip-box">
-                    <p>温馨提示:每张票仅限改签一次,改签成功后原订单费用将原路返回退还给客户,请知悉。</p>
-                </div>
-                <el-form :model="rebookForm" ref="rebookForm" label-width="100px" :rules="rules">
-                    <el-form-item label="选择日期:" prop="performDate">
-                        <el-date-picker v-model="rebookForm.performDate" type="date" value-format="yyyy-MM-dd"
+        <div class="rebook1_box" v-loading="loading">
+            <div class="rebook1_from-box">
+                <div class="rebook1_from">
+                    <div class="tip-box">
+                        <p>温馨提示:每张票仅限改签一次,改签成功后原订单费用将原路返回退还给客户,请知悉。</p>
+                    </div>
+                    <el-form :model="rebookForm" ref="rebookForm" label-width="100px" :rules="rules">
+                        
+                        
+                        <el-form-item label="选择日期:" prop="performDate">
+                            <el-date-picker 
+                            v-model="rebookForm.performDate" 
+                            type="date" 
+                            style="width: 100%"
+                            value-format="yyyy-MM-dd"
                             placeholder="选择日期" @change="handleDateChange" />
-                    </el-form-item>
-                    <el-form-item label="选择场次:" prop="performTimeId">
-                        <div v-loading="intervalListLoading" element-loading-text="获取场次中...">
-                            <div class="interval-list">
-                                <el-button 
-                                v-for="item in intervalList" 
-                                :key="item.performTimeId"
-                                :type="rebookForm.performTimeId === item.performTimeId ? 'primary' : ''"
-                                @click="selectInterval(item)">
-                                    {{ item.performInterval }}
-                                </el-button>
-                            </div>
-                            <el-alert
-                                v-if="intervalList.length==0"
-                                title="没有可改签的场次!!!"
-                                type="error"
-                                :closable="false"
-                                :show-icon="false">
-                            </el-alert>
-                        </div>
-                    </el-form-item>
-                    <el-form-item label="支付方式 :" prop="paymentType">
-                        <el-radio-group v-model="rebookForm.paymentType">
-                        <el-radio label="1">扫码支付</el-radio>
-                        <!-- <el-radio label="2">现金支付</el-radio> -->
-                        <!-- <el-radio v-if="['10','11','13','14','18','19'].includes(ruleForm.source)" label="3">对公支付</el-radio> -->
-                        <!-- <el-radio v-if="['10','11','13','14','18','19'].includes(ruleForm.source)" label="4">账户余额({{ balance }})</el-radio>
-                        <el-radio v-if="['10','11','13','14','18','19'].includes(ruleForm.source)" label="5">授信余额({{ grantQuota }})</el-radio> -->
-                        </el-radio-group>
-                    </el-form-item>
-
-                    <el-form-item label="">
-                        <div style="width: 100%;display: flex;justify-content: center;">
-                            <el-button @click="rebookDialog = false">取 消</el-button>
-                            <el-button type="primary" @click="submitRebook">确认改签</el-button>
-                        </div>
-                    </el-form-item>
-                </el-form>
+                        </el-form-item>
+                        <el-form-item label="选择场次:" prop="performTimeId">
+                            <el-select
+                                v-model="rebookForm.performTimeId"
+                                placeholder="选择场次"
+                                style="width: 100%"
+                                @change="querySeatListFun"
+                                >
+                                    <el-option
+                                    v-for="item in intervalList"
+                                    :key="item.performTimeId"
+                                    :label="item.performInterval"
+                                    :value="item.performTimeId"
+                                    />
+                            </el-select>
+                        </el-form-item>
+                        <el-form-item label="支付方式 :" prop="paymentType">
+                            <el-radio-group v-model="rebookForm.paymentType">
+                            <el-radio label="1">扫码支付</el-radio>
+                            <!-- <el-radio label="2">现金支付</el-radio> -->
+                            <!-- <el-radio v-if="['10','11','13','14','18','19'].includes(ruleForm.source)" label="3">对公支付</el-radio> -->
+                            <!-- <el-radio v-if="['10','11','13','14','18','19'].includes(ruleForm.source)" label="4">账户余额({{ balance }})</el-radio>
+                            <el-radio v-if="['10','11','13','14','18','19'].includes(ruleForm.source)" label="5">授信余额({{ grantQuota }})</el-radio> -->
+                            </el-radio-group>
+                        </el-form-item>
+                    </el-form>
+                </div>
+                <div class="rebook1_seat">
+                    <seatBox 
+                    ref="seatBox" 
+                    :seatTypeLimit="configStockNumObj"
+                    @selectSeat="selectSeat"
+                    height="100%"
+                    />
+                </div>
+            </div>
+            <div style="width: 100%;display: flex;justify-content: center;">
+                <el-button @click="rebookDialog = false">取 消</el-button>
+                <el-button type="primary" @click="submitRebook">确认改签</el-button>
             </div>
             <!--  支付过程 控制  -->
             <div v-if="payStatus" class="increase-viewers-pay-status">
@@ -147,15 +156,23 @@ import {
  import { pageList as getPrintListApi } from "@/api/device/pda";
  import { printApi } from '@/api/windowTicketSales/ticketingCollection'
  import { rebookApi } from '@/api/windowTicketSales/rebook'
+ import { countBySeatTyp } from '@/api/ticketMr/InventoryTemplate'
+ import { pageList as getSeatType } from '@/api/seatTypeMr/seatTypeMr'
+ import seatBox from '@/components/seatBox/index.vue';
+ import { 
+  querySeatList,
+ } from '@/api/windowTicketSales/ticketingSales'
  const mathM = require('mathjs')
  const https = require('https');
  const axios = require('axios');
 export default {
     name: "RebookBox",
+    components: { seatBox },
     data() {
         return {
             // 改签对话框
             rebookDialog: false,
+            loading: false,
             // 改签表单
             rebookForm: {
                 orderId: undefined,
@@ -182,10 +199,18 @@ export default {
             successDialog: false,
             newOrderId: '',
             printList: [],
+
+            configStockNumObj: {},
+            countBySeatTypList:[],
+            seatTypeListAll: [],
+            setList: [],
         }
     },
+    created(){
+        this.getSeatTypeAllList()
+    },
     methods: {
-        initData(row) {
+        async initData(row) {
             this.rebookDialog = true
             this.payStatus = null
             this.rebookForm = {
@@ -196,6 +221,7 @@ export default {
                 auditoriumId: row.auditoriumId,
                 paymentType: "1", // 支付方式
             }
+            await this.countBySeatTypFun(row.auditoriumId)
             this.$nextTick(()=>{
                 this.$refs.rebookForm.clearValidate()
             })
@@ -800,20 +826,110 @@ export default {
                 this.balance = null
                 this.grantQuota = null
             }
-        }
+        },
+
+
+        /**  获取座位  */
+        async querySeatListFun(type){
+            try {
+                
+                let res = await querySeatList({
+                    auditoriumId: this.rebookForm.auditoriumId,
+                    timeId: this.rebookForm.performTimeId,
+                })
+                if(res.code == 200){
+                    this.setList = res.data;
+                    let list = []
+                    let list3 = []
+                    this.countBySeatTypList.forEach((item,index)=>{
+                        list3.push(item.seatTypeId)
+                    })
+                    let list4 = []
+                    this.seatTypeListAll.forEach((item,index)=>{
+                        if(list3.includes(item.id)) {
+                            list4.push({...item})
+                        }
+                    })
+                    this.$nextTick(() =>{
+                        this.$refs.seatBox.querySeatListFun(true,this.setList,list,list4)
+                    })
+                }
+                
+                this.loading = false
+            } catch (error) {
+                this.loading = false
+                console.error("error===",error)
+            }
+        },
+        /** 获取座位类型  */
+        async countBySeatTypFun(value) {
+            try {
+                if(!value) return
+                let res = await countBySeatTyp({auditoriumId: value})
+                this.countBySeatTypList = res.data ? res.data : []
+                let obj = {}
+                this.countBySeatTypList.forEach((item,index)=>{
+                    obj['seatNum_'+item.seatTypeId] = {
+                        stockTotal: item.stock,
+                        stockSelect: item.stock,
+                        stockYes: 0,
+                        stockNo: 0,
+                    }
+                })
+                this.configStockNumObj = obj
+            } catch (error) {
+                console.error("error1====",error)
+            }
+        },
+        /** 获取座位类型 说明 */
+        async getSeatTypeAllList() {
+            try {
+                let res = await getSeatType({
+                    pageNum: 1,
+                    pageSize: 999,
+                })
+                if(res.code == 200) {
+                    this.seatTypeListAll = res.data.rows || [];
+                }
+            } catch (error) {
+                        
+            }   
+        },
+         /** 选择座位  */
+        selectSeat(list) {
+            console.log("已选择的====",list)
+        },
     }
 }
 </script>
 <style lang="scss" scoped>
-.rebook-dialog ::v-deep .el-dialog__body {
+.rebook1_dialog ::v-deep .el-dialog__body {
     padding: 0 !important;
 }
-.rebook-box {
-    position: relative;
-    .rebook-from {
-        padding: 20px;
+.rebook1_box {
+    width: 100%;
+    height: 100%;
+    padding-bottom: 10px;
+    .rebook1_from-box {
+        display: flex;
+        width: 100%;
+        height: 80vh;
+        box-sizing: border-box;
+        padding: 0 20px 20px;
+    }
+    .rebook1_from {
+        width: 100%;
+        height: 100%;
+        padding: 0 20px 0 0;
+        width: 400px;
+        box-sizing: border-box;
+    }
+    .rebook1_seat {
+        width: calc( 100% - 400px );
+        height: 100%;
     }
 }
+
 .increase-viewers-pay-status {
     width: 100%;
     height: 100%;

+ 83 - 71
src/views/windowTicketSales/rebook.vue

@@ -9,77 +9,88 @@
 -->
 
 <template>
-  <div class="app-container">
-    <!-- 搜索区域 -->
-    <el-form :model="queryParams" ref="queryForm" :inline="true">
-      <el-form-item label="订单号" prop="orderId">
-        <el-input v-model="queryParams.orderId" placeholder="请输入订单号" clearable />
-      </el-form-item>
-      <el-form-item label="购票人手机号" prop="memberMobile">
-        <el-input v-model="queryParams.memberMobile" placeholder="请输入手机号" clearable />
-      </el-form-item>
-      <el-form-item label="身份证号码" prop="idcard">
-        <el-input v-model="queryParams.idcard" placeholder="请输入身份证号码" clearable />
-      </el-form-item>
-      <el-form-item label="票务名称" prop="goodsName">
-        <el-input v-model="queryParams.goodsName" placeholder="请输入票务名称" clearable />
-      </el-form-item>
-      <el-form-item label="订单状态" prop="status">
-        <el-select v-model="queryParams.status" placeholder="请选择订单状态" clearable>
-          <el-option
-            v-for="dict in dict.type.order_status_type"
-            :key="dict.value"
-            :label="dict.label"
-            :value="dict.value"
-          />
-        </el-select>
-      </el-form-item>
-      <el-form-item>
-        <el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
-        <el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
-      </el-form-item>
-    </el-form>
-
-    <!-- 数据列表 -->
-    <el-table v-loading="loading" :data="rebookList">
-      <el-table-column label="序号" type="index" width="50" align="center" />
-      <el-table-column label="姓名" align="center" prop="memberName" />
-      <el-table-column label="身份证号码" align="center" prop="idcard" />
-      <el-table-column label="购票人手机号" align="center" prop="mobile" />
-      <el-table-column label="订单号" align="center" prop="orderId" />
-      <el-table-column label="剧目名称" align="center" prop="performName" />
-      <el-table-column label="票务名称" align="center" prop="goodsName" />
-      <el-table-column label="票档" align="center" prop="seatTypeName" />
-      <el-table-column label="日期" align="center" prop="performDate" />
-      <el-table-column label="场次" align="center" prop="performInterval" />
-      <el-table-column label="下单时间" align="center" prop="createTime" />
-      <el-table-column label="支付金额" align="center" prop="realPrice" />
-      <el-table-column label="购票渠道" align="center" prop="channelType">
-        <template slot-scope="scope">
-            <dict-tag :options="dict.type.channel_type" :value="scope.row.channelType" />
-        </template>
-      </el-table-column>
-      <el-table-column label="订单状态" align="center" prop="status">
-        <template slot-scope="scope">
-            <dict-tag :options="dict.type.order_status_type" :value="scope.row.status" />
-        </template>
-      </el-table-column>
-      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
-        <template slot-scope="scope">
-          <el-button type="primary" @click="handleRebook(scope.row)">改签</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"
-    />
-
+  <div class="app-container app-container-scheduling">
+    <div class="app-container_flex_auto">
+      <!-- 搜索区域 -->
+      <div class="app-container_form">
+        <el-form :model="queryParams" size="small" ref="queryForm" :inline="true">
+          <el-form-item label="订单号" prop="orderId">
+            <el-input v-model="queryParams.orderId" placeholder="请输入订单号" clearable />
+          </el-form-item>
+          <el-form-item label="购票人手机号" prop="memberMobile">
+            <el-input v-model="queryParams.memberMobile" placeholder="请输入手机号" clearable />
+          </el-form-item>
+          <el-form-item label="身份证号码" prop="idcard">
+            <el-input v-model="queryParams.idcard" placeholder="请输入身份证号码" clearable />
+          </el-form-item>
+          <el-form-item label="票务名称" prop="goodsName">
+            <el-input v-model="queryParams.goodsName" placeholder="请输入票务名称" clearable />
+          </el-form-item>
+          <el-form-item label="订单状态" prop="status">
+            <el-select v-model="queryParams.status" placeholder="请选择订单状态" clearable>
+              <el-option
+                v-for="dict in dict.type.order_status_type"
+                :key="dict.value"
+                :label="dict.label"
+                :value="dict.value"
+              />
+            </el-select>
+          </el-form-item>
+          <el-form-item>
+            <el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
+            <el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
+          </el-form-item>
+        </el-form>
+      </div>
+      
+      <div class="app-container_table" :class="showSearch ? 'mt15' : ''">
+        <el-row :gutter="10" class="mb8" style="margin-left: 0;">
+          <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+        </el-row>
+        <div class="app-container_table_main">
+          <!-- 数据列表 -->
+          <el-table v-loading="loading" :data="rebookList" height="100%">
+            <el-table-column label="序号" type="index" width="50" align="center" />
+            <el-table-column label="姓名" align="center" prop="memberName" />
+            <el-table-column label="身份证号码" align="center" prop="idcard" />
+            <el-table-column label="购票人手机号" align="center" prop="mobile" />
+            <el-table-column label="订单号" align="center" prop="orderId" />
+            <el-table-column label="剧目名称" align="center" prop="performName" />
+            <el-table-column label="票务名称" align="center" prop="goodsName" />
+            <el-table-column label="票档" align="center" prop="seatTypeName" />
+            <el-table-column label="日期" align="center" prop="performDate" />
+            <el-table-column label="场次" align="center" prop="performInterval" />
+            <el-table-column label="下单时间" align="center" prop="createTime" />
+            <el-table-column label="支付金额" align="center" prop="realPrice" />
+            <el-table-column label="购票渠道" align="center" prop="channelType">
+              <template slot-scope="scope">
+                  <dict-tag :options="dict.type.channel_type" :value="scope.row.channelType" />
+              </template>
+            </el-table-column>
+            <el-table-column label="订单状态" align="center" prop="status">
+              <template slot-scope="scope">
+                  <dict-tag :options="dict.type.order_status_type" :value="scope.row.status" />
+              </template>
+            </el-table-column>
+            <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+              <template slot-scope="scope">
+                <el-button type="primary" @click="handleRebook(scope.row)">改签</el-button>
+              </template>
+            </el-table-column>
+          </el-table>
+        </div>
+        
+      </div>
+      <div class="app-container_table_page">
+        <!-- 分页组件 -->
+        <pagination
+          :total="total"
+          :page.sync="queryParams.pageNum"
+          :limit.sync="queryParams.pageSize"
+          @pagination="getList"
+        />
+      </div>
+    </div>
     <!-- 改签 -->
      <rebookBox ref="rebookBox" @getList="getList" />
   </div>
@@ -95,6 +106,7 @@ export default {
   data() {
     return {
       loading: false,
+      showSearch: false,
       // 查询参数
       queryParams: {
         pageNum: 1,