shipeng 4 сар өмнө
parent
commit
fc6d79c6f3

+ 284 - 187
src/views/windowTicketSales/model/ticketInfo.vue

@@ -1,8 +1,9 @@
 <template>
   <!-- <el-dialog title="添加观影人" :visible.sync="dialogVisible" width="90%" :before-close="handleClose"> -->
   <div style="width: 100%;">
-    <div v-loading="loading" :element-loading-text="loadingText" element-loading-spinner="el-icon-loading"
-      element-loading-background="rgba(0, 0, 0, 0.8)" class="increase-viewers-box">
+    <!-- <div v-loading="loading" :element-loading-text="loadingText" element-loading-spinner="el-icon-loading"
+      element-loading-background="rgba(0, 0, 0, 0.8)" class="increase-viewers-box"> -->
+    <div class="increase-viewers-box">
       <!-- <div class="increase-viewers-info">
         <el-table :data="viewerList" border style="width: 100%">
           <el-table-column label="序号" type="index" width="50">
@@ -14,9 +15,9 @@
                 <el-input size="mini" v-else v-model="tableForm.name" placeholder="请输入姓名"></el-input>
               </div>
             </template>
-          </el-table-column>
-          <el-table-column label="身份证号" width="250">
-            <template slot-scope="scope">
+</el-table-column>
+<el-table-column label="身份证号" width="250">
+  <template slot-scope="scope">
               <div>
                 <span v-if="actionIndex != scope.row.id">{{ scope.row.idcard }}</span>
                 <el-input size="mini" v-else v-model="tableForm.idcard" placeholder="请输入身份证号" clearable
@@ -26,24 +27,24 @@
                 </el-input>
               </div>
             </template>
-          </el-table-column>
-          <el-table-column label="座位类型">
-            <template slot-scope="scope">
+</el-table-column>
+<el-table-column label="座位类型">
+  <template slot-scope="scope">
               <span>{{ scope.row.seatTypeName }}</span>
             </template>
-          </el-table-column>
-          <el-table-column prop="date" label="座位号">
-            <template slot-scope="scope">
+</el-table-column>
+<el-table-column prop="date" label="座位号">
+  <template slot-scope="scope">
               <span>{{ scope.row.seatName }}</span>
             </template>
-          </el-table-column>
-          <el-table-column prop="date" label="价格(元)">
-            <template slot-scope="scope">
+</el-table-column>
+<el-table-column prop="date" label="价格(元)">
+  <template slot-scope="scope">
               <span>{{ scope.row.salePrice }}</span>
             </template>
-          </el-table-column>
-          <el-table-column label="人员类别" width="140">
-            <template slot-scope="scope">
+</el-table-column>
+<el-table-column label="人员类别" width="140">
+  <template slot-scope="scope">
               <div>
                 <dict-tag v-if="actionIndex != scope.row.id" :options="dict.type.personnel_type"
                   :value="scope.row.identity" />
@@ -54,9 +55,9 @@
                 </el-select>
               </div>
             </template>
-          </el-table-column>
-          <el-table-column label="应收金额(元)">
-            <template slot-scope="scope">
+</el-table-column>
+<el-table-column label="应收金额(元)">
+  <template slot-scope="scope">
               <span v-if="(scope.$index != 0 && oneMany == 1 && personnelNum != 0)">{{ scope.row.realPrice }}</span>
               <div v-else>
                 <span v-if="actionIndex != scope.row.id">{{ scope.row.realPrice }}</span>
@@ -64,26 +65,26 @@
                   controls-position="right" label="请输入应收金额(元)"></el-input-number>
               </div>
             </template>
-          </el-table-column>
-          <el-table-column label="备注" width="180">
-            <template slot-scope="scope">
+</el-table-column>
+<el-table-column label="备注" width="180">
+  <template slot-scope="scope">
               <div>
                 <span v-if="actionIndex != scope.row.id">{{ scope.row.remark }}</span>
                 <el-input size="mini" v-else v-model="tableForm.remark" placeholder="请输入备注"></el-input>
               </div>
             </template>
-          </el-table-column>
-          <el-table-column label="操作" width="80">
-            <template slot-scope="scope" v-if="(scope.$index != 0 && oneMany != 2) || scope.$index == 0">
+</el-table-column>
+<el-table-column label="操作" width="80">
+  <template slot-scope="scope" v-if="(scope.$index != 0 && oneMany != 2) || scope.$index == 0">
               <el-button size="mini" type="success" :loading="factorAuthLoading" v-if="actionIndex == scope.row.id"
                 @click="handleSeva(scope.$index, scope.row)">{{ factorAuthLoading ? '保存中....' : '保存' }}</el-button>
               <el-button :disabled="!!actionIndex" size="mini" type="primary" v-if="actionIndex != scope.row.id"
                 @click="handleEdit(scope.$index, scope.row)">编辑</el-button>
             </template>
-          </el-table-column>
-        </el-table>
-      </div>
-      <div style="padding: 10px 0 20px;">合计:累计观影人员{{ viewerList.length }}人,应收总额¥{{ moneyAll }}(元)</div> -->
+</el-table-column>
+</el-table>
+</div>
+<div style="padding: 10px 0 20px;">合计:累计观影人员{{ viewerList.length }}人,应收总额¥{{ moneyAll }}(元)</div> -->
       <div>
         <el-form :model="ruleForm" :rules="rules" ref="ruleForm11" label-width="100px" class="demo-ruleForm"
           size="mini">
@@ -114,14 +115,14 @@
           </el-form-item>
           <el-form-item label="支付方式 :" prop="paymentType">
             <el-radio-group v-model="ruleForm.paymentType">
-              <el-radio label="1">扫码</el-radio>
               <el-radio label="2">现金</el-radio>
+              <el-radio v-if="ruleForm.source == '7'" label="1">扫码</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 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> -->
             </el-radio-group>
           </el-form-item>
           <el-form-item label="应收金额 :">
@@ -144,20 +145,14 @@
               show-word-limit></el-input>
           </el-form-item>
           <el-form-item>
-            <el-button 
-              v-if="!orderId && !payStatus" 
-              :loading="loading" 
-              :disabled="checkViewerList()"
-              type="danger"
-              style="width: 120px;height: 40px;font-size: 18px;"
-              @click="submitForm('ruleForm11')"
-            >结 算</el-button>
+            <el-button :loading="loading" :disabled="isFlag" type="danger"
+              style="width: 120px;height: 40px;font-size: 18px;" @click="submitForm('ruleForm11')">结 算</el-button>
           </el-form-item>
-            
+
         </el-form>
       </div>
       <!--  支付过程 控制  -->
-      <div v-if="payStatus" class="increase-viewers-pay-status">
+      <div v-if="false" class="increase-viewers-pay-status">
         <div class="increase-viewers-pay-status-info" v-if="!loading">
           <span style="font-weight: 600;font-size: 20px;">提示</span>
           <span style="padding: 10px 0;">
@@ -195,7 +190,7 @@
                 v-for="(item, index) 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">
@@ -210,7 +205,6 @@
         </div>
       </div>
 
-      
     </div>
 
     <!-- <span slot="footer" class="dialog-footer">
@@ -218,90 +212,165 @@
       <el-button v-if="!orderId && !payStatus" :loading="loading" type="primary"
         @click="submitForm('ruleForm11')">确定支付</el-button>
     </span> -->
-    <!-- 添加观影人 -->
-    <el-dialog title="观影人员实名" modal modal-append-to-body :visible.sync="isVisible" width="80%" >
+
+    <!-- 添加 观影人员实名 -->
+    <el-dialog 
+      title="观影人员实名" 
+      modal-append-to-body 
+      :close-on-click-modal="false" 
+      :visible.sync="isVisible" 
+      width="80%"
+    >
       <el-table :data="viewerList" border style="width: 100%">
-          <el-table-column label="序号" type="index" width="50">
-          </el-table-column>
-          <el-table-column label="姓名" width="180">
-            <template slot-scope="scope">
-              <div>
-                <span v-if="actionIndex != scope.row.id">{{ scope.row.name }}</span>
-                <el-input size="mini" v-else v-model="tableForm.name" placeholder="请输入姓名"></el-input>
-              </div>
-            </template>
-          </el-table-column>
-          <el-table-column label="身份证号" width="250">
-            <template slot-scope="scope">
-              <div>
-                <span v-if="actionIndex != scope.row.id">{{ scope.row.idcard }}</span>
-                <el-input size="mini" v-else v-model="tableForm.idcard" placeholder="请输入身份证号" clearable
-                  style="width: 230px;" @keyup.enter.native="handleQuery">
-                  <el-button slot="append" :loading="idcardLoading" size="mini" type="primary" @click="readCert">{{
-                    idcardLoading ? '识别中' : '识别' }}</el-button>
-                </el-input>
-              </div>
-            </template>
-          </el-table-column>
-          <el-table-column label="座位类型">
-            <template slot-scope="scope">
-              <span>{{ scope.row.seatTypeName }}</span>
-            </template>
-          </el-table-column>
-          <el-table-column prop="date" label="座位号">
-            <template slot-scope="scope">
-              <span>{{ scope.row.seatName }}</span>
-            </template>
-          </el-table-column>
-          <el-table-column prop="date" label="价格(元)">
-            <template slot-scope="scope">
-              <span>{{ scope.row.salePrice }}</span>
-            </template>
-          </el-table-column>
-          <el-table-column label="人员类别" width="140">
-            <template slot-scope="scope">
-              <div>
-                <dict-tag v-if="actionIndex != scope.row.id" :options="dict.type.personnel_type"
-                  :value="scope.row.identity" />
-                <el-select size="mini" v-else v-model="tableForm.identity" placeholder="请选择人员类别" clearable
-                  style="width: 100%">
-                  <el-option v-for="dict in dict.type.personnel_type" :key="dict.value" :label="dict.label"
-                    :value="dict.value" />
-                </el-select>
-              </div>
-            </template>
-          </el-table-column>
-          <el-table-column label="应收金额(元)">
-            <template slot-scope="scope">
-              <span v-if="(scope.$index != 0 && oneMany == 1 && personnelNum != 0)">{{ scope.row.realPrice }}</span>
-              <div v-else>
-                <span v-if="actionIndex != scope.row.id">{{ scope.row.realPrice }}</span>
-                <el-input-number size="mini" style="width: 120px;" v-else v-model="tableForm.realPrice"
-                  controls-position="right" label="请输入应收金额(元)"></el-input-number>
-              </div>
-            </template>
-          </el-table-column>
-          <el-table-column label="备注" width="180">
-            <template slot-scope="scope">
-              <div>
-                <span v-if="actionIndex != scope.row.id">{{ scope.row.remark }}</span>
-                <el-input size="mini" v-else v-model="tableForm.remark" placeholder="请输入备注"></el-input>
-              </div>
-            </template>
-          </el-table-column>
-          <el-table-column label="操作" width="80">
-            <template slot-scope="scope" v-if="(scope.$index != 0 && oneMany != 2) || scope.$index == 0">
-              <el-button size="mini" type="success" :loading="factorAuthLoading" v-if="actionIndex == scope.row.id"
-                @click="handleSeva(scope.$index, scope.row)">{{ factorAuthLoading ? '保存中....' : '保存' }}</el-button>
-              <el-button :disabled="!!actionIndex" size="mini" type="primary" v-if="actionIndex != scope.row.id"
-                @click="handleEdit(scope.$index, scope.row)">编辑</el-button>
-            </template>
-          </el-table-column>
-        </el-table>
-        <span slot="footer" class="dialog-footer">
-          <el-button type="primary" @click="handleSubmit">保 存</el-button>
-          <el-button @click="isVisible = false">取 消</el-button>
-        </span>
+        <el-table-column label="序号" type="index" width="50">
+        </el-table-column>
+        <el-table-column label="姓名" width="180">
+          <template slot-scope="scope">
+            <div>
+              <span v-if="actionIndex != scope.row.id">{{ scope.row.name }}</span>
+              <el-input size="mini" v-else v-model="tableForm.name" placeholder="请输入姓名"></el-input>
+            </div>
+          </template>
+        </el-table-column>
+        <el-table-column label="身份证号" width="250">
+          <template slot-scope="scope">
+            <div>
+              <span v-if="actionIndex != scope.row.id">{{ scope.row.idcard }}</span>
+              <el-input size="mini" v-else v-model="tableForm.idcard" placeholder="请输入身份证号" clearable
+                style="width: 230px;" @keyup.enter.native="handleQuery">
+                <el-button slot="append" :loading="idcardLoading" size="mini" type="primary" @click="readCert">{{
+                  idcardLoading ? '识别中' : '识别' }}</el-button>
+              </el-input>
+            </div>
+          </template>
+        </el-table-column>
+        <el-table-column label="座位类型">
+          <template slot-scope="scope">
+            <span>{{ scope.row.seatTypeName }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="date" label="座位号">
+          <template slot-scope="scope">
+            <span>{{ scope.row.seatName }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="date" label="价格(元)">
+          <template slot-scope="scope">
+            <span>{{ scope.row.salePrice }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="人员类别" width="140">
+          <template slot-scope="scope">
+            <div>
+              <dict-tag v-if="actionIndex != scope.row.id" :options="dict.type.personnel_type"
+                :value="scope.row.identity" />
+              <el-select size="mini" v-else v-model="tableForm.identity" placeholder="请选择人员类别" clearable
+                style="width: 100%">
+                <el-option v-for="dict in dict.type.personnel_type" :key="dict.value" :label="dict.label"
+                  :value="dict.value" />
+              </el-select>
+            </div>
+          </template>
+        </el-table-column>
+        <el-table-column label="应收金额(元)">
+          <template slot-scope="scope">
+            <span v-if="(scope.$index != 0 && oneMany == 1 && personnelNum != 0)">{{ scope.row.realPrice }}</span>
+            <div v-else>
+              <span v-if="actionIndex != scope.row.id">{{ scope.row.realPrice }}</span>
+              <el-input-number size="mini" style="width: 120px;" v-else v-model="tableForm.realPrice"
+                controls-position="right" label="请输入应收金额(元)"></el-input-number>
+            </div>
+          </template>
+        </el-table-column>
+        <el-table-column label="备注" width="180">
+          <template slot-scope="scope">
+            <div>
+              <span v-if="actionIndex != scope.row.id">{{ scope.row.remark }}</span>
+              <el-input size="mini" v-else v-model="tableForm.remark" placeholder="请输入备注"></el-input>
+            </div>
+          </template>
+        </el-table-column>
+        <el-table-column label="操作" width="80">
+          <template slot-scope="scope" v-if="(scope.$index != 0 && oneMany != 2) || scope.$index == 0">
+            <el-button size="mini" type="success" :loading="factorAuthLoading" v-if="actionIndex == scope.row.id"
+              @click="handleSeva(scope.$index, scope.row)">{{ factorAuthLoading ? '保存中....' : '保存' }}</el-button>
+            <el-button :disabled="!!actionIndex" size="mini" type="primary" v-if="actionIndex != scope.row.id"
+              @click="handleEdit(scope.$index, scope.row)">编辑</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <span slot="footer" class="dialog-footer">
+        <el-button :disabled="isFlag" type="primary" @click="handleSubmit">保 存</el-button>
+        <el-button @click="isVisible = false">取 消</el-button>
+      </span>
+    </el-dialog>
+
+    <!-- 订单结算 提示 -->
+    <el-dialog title="提示!" 
+      modal-append-to-body 
+      :show-close="false"
+      :close-on-click-modal="false"
+      :visible.sync="isShow" width="45%"
+    >
+      <!--  支付过程 控制  -->
+      <div v-loading="loading" :element-loading-text="loadingText" element-loading-spinner="el-icon-loading"
+        element-loading-background="rgba(0, 0, 0, 0.8)" class="increase-viewers-box1">
+        <div v-if="payStatus" class="increase-viewers-pay-status">
+          <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 == 4 ? '扫码支付失败!!!' :
+                    payStatus == 5 ? '请出示付款码!!!' :
+                      payStatus == 5.5 ? '扫码成功,支付中...' :
+                        payStatus == 5.6 ? '扫码成功,支付中...' :
+                          payStatus == 6 ? '连接扫码器失败!!!' :
+                            payStatus == 7 ? '用户支付失败或未支付,请重新连接支付!!!' :
+                              payStatus == 8 ? '用户支付成功,用户支付成功,请选择打印机后点击打印门票!!!' :
+                                payStatus == 9 ? '支付超时!!!' :
+                                  payStatus == 10 ? '订单已关闭,请重新选择座位,再购买!!!' :
+                                    payStatus == 3 ? '现金支付记录入库失败,请重新提交' : '未知状态' }}
+            </span>
+            <!-- 重新生成订单 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>
+            </div>
+            <!-- 扫码支付 2 -->
+            <el-button v-if="payStatus == 2" @click="vbar_open(orderId)" type="success">扫码支付</el-button>
+            <!-- 扫码支付 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>
+            <!-- 重新支付 6  7 -->
+            <el-button v-if="payStatus == 6 || payStatus == 7" @click="vbar_open(orderId)"
+              type="success">重新连接扫码支付</el-button>
+            <!-- 打印 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, index) 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> -->
+            </div>
+            <!-- 支付超时 9  -->
+            <div v-if="payStatus == 9">
+              <!-- <el-button @click="print" type="danger">取消支付</el-button> -->
+              <el-button @click="orderInfoSubmitFun()" type="primary">重新扫码</el-button>
+            </div>
+            <!-- 订单被关闭 10  -->
+            <div v-if="payStatus == 10">
+              <!-- <el-button @click="print" type="danger">取消支付</el-button> -->
+              <el-button @click="handleClose()" type="primary">关闭</el-button>
+            </div>
+          </div>
+        </div>
+
+
+      </div>
+
     </el-dialog>
   </div>
   <!-- </el-dialog> -->
@@ -334,7 +403,8 @@ export default {
       loadingText: '',
       dialogVisible: false,
       actionIndex: false,
-      isVisible: false,
+      isVisible: false, // 观影人员实名
+      isShow: false, // 结算提示
       tableForm: {
         name: '', // 姓名
         mobile: '', // 电话
@@ -411,6 +481,25 @@ export default {
     };
 
   },
+  // 
+  watch: {
+    payStatus(newVal, oldVal) {
+      if (newVal) {
+        this.isShow = true
+      } else {
+        this.isShow = false
+      }
+    }
+  },
+  computed: {
+    isFlag() {
+      let flag = true
+      if(this.viewerList.length >0 ) {
+        flag = this.checkViewerList();
+      }
+      return flag;
+    }
+  },
   methods: {
     async initData(list, params) {
       try {
@@ -438,21 +527,22 @@ export default {
           purchaser: {},// 购票人信息
           viewerList: [], // 观影人列表
           orderIdOrQrCode: '',
-          paymentType: '', // 支付方式
+          paymentType: '2', // 支付方式
           small: '',// 实收金额
           realPrice: '', // 实收金额
           remark: '', // 订单备注
           sourceRemark: '', //  来源备注
         }
+        console.log(this.ruleForm,'this.ruleForm');
         this.payStatus = null
         this.orderId = null
         this.websocket_connected = false
-        this.dialogVisible = true
+        // this.dialogVisible = true
         this.loading = true
         this.actionIndex = null
         this.viewerList = []
         let perform = await this.selectRegionFun(params, list[0].seatTypeId)
-        console.log("perform===", perform)
+        // console.log("perform===", perform)
         // let perform = {
         //     money: params.salePrice,
         //     //name: params.goodsName,
@@ -460,32 +550,36 @@ export default {
         //     seatTypeName: params.seatTypeName,
         // }
         let listCopy = []
-        let listCopy1 = []
-        list.forEach((item, index) => {
-          listCopy.push({
-            id: index + 1,
-            name: '', // 姓名
-            mobile: '', // 电话
-            idcard: '', // 身份证
-            identity: 0, // 观影人身份
-            remark: '', // 备注信息
-            salePrice: this.oneMany == 2 || (this.oneMany == 1 && this.personnelNum != 0) ? index == 0 ? perform.money : 0 : perform.money, // 原价
-            realPrice: this.oneMany == 2 || (this.oneMany == 1 && this.personnelNum != 0) ? index == 0 ? perform.money : 0 : perform.money, // 实收金额
-            seatId: item.id, // 座位ID
-            seatName: item.name ? item.name : '暂无命名', // 座位名称
-            seatType: perform.seatTypeId, // 座位类型
-            seatTypeId: perform.seatTypeId,
-            seatTypeName: perform.seatTypeName,
+        if(list.length > 0) {
+          list.forEach((item, index) => {
+            listCopy.push({
+              id: index + 1,
+              name: '', // 姓名
+              mobile: '', // 电话
+              idcard: '', // 身份证
+              identity: '0', // 观影人身份
+              remark: '', // 备注信息
+              salePrice: this.oneMany == 2 || (this.oneMany == 1 && this.personnelNum != 0) ? index == 0 ? perform.money : 0 : perform.money, // 原价
+              realPrice: this.oneMany == 2 || (this.oneMany == 1 && this.personnelNum != 0) ? index == 0 ? perform.money : 0 : perform.money, // 实收金额
+              seatId: item.id, // 座位ID
+              seatName: item.name ? item.name : '暂无命名', // 座位名称
+              seatType: perform.seatTypeId, // 座位类型
+              seatTypeId: perform.seatTypeId,
+              seatTypeName: perform.seatTypeName,
+            })
           })
-        })
+        }
         //this.goodsList = 
         this.viewerList = JSON.parse(JSON.stringify(listCopy))
-        this.setMoneyAll()
-
-        console.log(this.viewerList)
+        if(list.length > 0) {
+          this.setMoneyAll()
+        } else {
+          this.moneyAll = ''
+          this.$set(this.ruleForm, 'realPrice', this.moneyAll)
+        }
+        // console.log(this.viewerList)
         this.loading = false
 
-        
         this.$nextTick(() => {
           this.$refs.ruleForm11.clearValidate()
         })
@@ -536,25 +630,24 @@ export default {
             } else {
               this.$message.error('存在座位未设置价格,请选择其他票!!!');
               this.loading = false
-              this.dialogVisible = false
+              // this.dialogVisible = false
             }
 
           } else {
             this.$message.error('存在座位未设置价格,请选择其他票!!!');
             this.loading = false
-            this.dialogVisible = false
+            // this.dialogVisible = false
           }
-          console.log("res====", res)
         } else {
           this.$message.error(res.msg);
           this.loading = false
-          this.dialogVisible = false
+          // this.dialogVisible = false
         }
       } catch (error) {
         console.error("error=====", error)
         this.$message.error('价格查询出错');
         this.loading = false
-        this.dialogVisible = false
+        // this.dialogVisible = false
       }
     },
     // 观影人员实名
@@ -563,11 +656,7 @@ export default {
     },
     // 保存 观影人员实名信息
     handleSubmit() {
-      if (this.checkViewerList()) {
-        this.orderInfoSubmitFun()
-      } else {
-        this.isVisible = false
-      }
+      this.isVisible = false
     },
     /**  取消订单   */
     async orderInfoCancelFun(type) {
@@ -587,7 +676,7 @@ export default {
               this.orderId = null
               this.payStatus = null
               this.$emit('clearDialogVisible')
-              this.dialogVisible = false
+              // this.dialogVisible = false
             } else {
               this.payStatus = 9
               this.loading = false
@@ -615,7 +704,7 @@ export default {
             document.removeEventListener('keydown', this.keydownAdd);
             this.orderInfoCancelFun(true)
           } else {
-            this.dialogVisible = false
+            // this.dialogVisible = false
           }
         })
         .catch(_ => { });
@@ -682,20 +771,19 @@ export default {
       this.actionIndex = row.id
       this.tableForm = JSON.parse(JSON.stringify(row))
 
-      console.log(index, row);
     },
     handleDelete(index, row) {
-      console.log(index, row);
+      // console.log(index, row);
     },
     setMoneyAll() {
       let moneyAll = 0
       this.viewerList.forEach((item, index) => {
-        console.log("item.realPrice====", item.realPrice)
+        // console.log("item.realPrice====", item.realPrice)
         if (item.realPrice && !isNaN(Number(item.realPrice))) {
           moneyAll = mathM.format(Number(moneyAll) + Number(item.realPrice), 10)
         }
       })
-      console.log("dsfsfdsf", moneyAll)
+      // console.log("dsfsfdsf", moneyAll)
       this.moneyAll = moneyAll ? moneyAll : ''
       this.$set(this.ruleForm, 'realPrice', this.moneyAll)
     },
@@ -718,25 +806,25 @@ export default {
       for (let i = 0; i < this.viewerList.length; i++) {
         let obj = this.viewerList[i]
         if (!obj.name) {
-          this.$message.error('请填写观影人姓名!!!');
+          // this.$message.error('请填写观影人姓名!!!');
           flog = true
           break;
         }
         if (!obj.idcard) {
-          this.$message.error('请填写观影人身份证号!!!');
+          // this.$message.error('请填写观影人身份证号!!!');
           flog = true
           break;
         }
         if (obj.identity && obj.identity != 0) {
           if (!obj.remark) {
-            this.$message.error('请填写观影人备注!!!');
+            // this.$message.error('请填写观影人备注!!!');
             flog = true
             break;
           }
         }
       }
       if (this.actionIndex) {
-        this.$message.error('请先保存观影影人信息!!!');
+        // this.$message.error('请先保存观影影人信息!!!');
         flog = true
       }
       return flog
@@ -945,7 +1033,8 @@ export default {
     // 跳转取票界面
     goTicketingCollections() {
       this.$router.push({
-        path: "/windowTicketSales/ticketingCollections",
+        // path: "/windowTicketSales/ticketingCollections",
+        path: "/window/ticketingCollections",
         query: {
           orderId: this.orderId
         }
@@ -1006,9 +1095,9 @@ export default {
                   type: 'success'
                 });
                 this.loading = false
-                // this.payStatus = 8
-                // this.getPrintListApi()
-                this.goTicketingCollections()
+                this.payStatus = 8
+                this.getPrintListApi()
+                // this.goTicketingCollections()
 
               } else {
                 this.$message({
@@ -1017,11 +1106,11 @@ export default {
                 });
                 // 开始 打印
                 this.loading = false
-                // this.payStatus = 8
-                // this.getPrintListApi()
-                this.goTicketingCollections()
+                this.payStatus = 8
+                this.getPrintListApi()
+                // this.goTicketingCollections()
               }
-              this.dialogVisible = false
+              // this.dialogVisible = false
 
             } else if (res.data.payStatus == 2) {
 
@@ -1105,8 +1194,8 @@ export default {
     },
     // 拼接字符串
     keydownAdd(e) {
-      console.log("e=====", e)
-      console.log("this.code=====", this.code)
+      // console.log("e=====", e)
+      // console.log("this.code=====", this.code)
       if (this.payStatus == 5 && e.key != 'Enter') {
         this.code = this.code + e.key
       }
@@ -1121,8 +1210,8 @@ export default {
     },
     //接收扫码完整结果处理
     websocket_decode(code) {
-      console.log("orderId=========", this.orderId)
-      console.log("code=========", code)
+      // console.log("orderId=========", this.orderId)
+      // console.log("code=========", code)
       if (this.orderId && this.payStatus == 5.5 && regex.test(code)) {
         this.payStatus = 5.6 // 支付中
         let codeCopy = code.replace("%%%", "").replace("%%%", "")
@@ -1230,7 +1319,7 @@ export default {
       ignoreSSL.post(url,
         { ...data }
       ).then(() => {
-        this.dialogVisible = false
+        // this.dialogVisible = false
         this.loading = false
       }).catch(() => {
         this.loading = false
@@ -1256,7 +1345,7 @@ export default {
     },
     /** 获取授信余额和账户余额  */
     async selectMarketTeamBySourceFun(value) {
-      console.log("value===", value)
+      // console.log("value===", value)
       try {
         if (!['10', '11', '13', '14', '18', '19'].includes(value)) return
         let res = await selectMarketTeamBySourceApi({
@@ -1293,6 +1382,14 @@ export default {
   overflow-y: auto;
   // position: relative;
 }
+.increase-viewers-box1 {
+  width: 100%;
+  height: 400px;
+  box-sizing: border-box;
+  overflow: hidden;
+  overflow-y: auto;
+  // position: relative;
+}
 
 .increase-viewers-pay-status {
   width: 100%;

+ 1556 - 0
src/views/windowTicketSales/ticketSales.vue

@@ -0,0 +1,1556 @@
+<template>
+    <div class="app-container app-container-me">
+        <!-- <el-form
+        :model="queryParams"
+        ref="queryForm"
+        size="small"
+        :inline="true"
+        :rules="rules"
+        label-width="80px"
+      >
+        <el-form-item label="演出厅" prop="auditoriumId">
+          <el-select
+            v-model="queryParams.auditoriumId"
+            placeholder="演出厅"
+            clearable
+            style="width: 100%"
+            @change="changeTime($event,'auditoriumId')"
+          >
+            <el-option
+              v-for="dict in merchantTheatreAuditoriumListS"
+              :key="dict.id"
+              :label="dict.name"
+              :value="dict.id"
+            />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="场次时间" prop="performDate">
+            <el-date-picker
+            type="date"
+            placeholder="选择场次时间"
+            v-model="queryParams.performDate"
+            @change="changeTime($event,'performDate')"
+            value-format="yyyy-MM-dd"
+            ></el-date-picker>
+        </el-form-item>
+        <el-form-item label="场次" prop="timeId">
+          <el-select
+            v-model="queryParams.timeId"
+            placeholder="场次"
+            clearable
+            style="width: 100%"
+            @change="changeTime($event,'timeId')"
+          >
+            <el-option
+              v-for="dict in merchantPerformTimeListS"
+              :key="dict.id"
+              :label="dict.timeSnapshot+'('+dict.performTimeStart+'-'+dict.performTimeEnd+')'"
+              :value="dict.id"
+            />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="票种" prop="goodsId">
+          <el-select
+            v-model="queryParams.goodsId"
+            placeholder="请选择票种"
+            clearable
+            style="width: 100%"
+            @change="changeTime($event,'goodsId')"
+          >
+            <el-option
+              v-for="dict in goodsPageListS"
+              :key="dict.goodsId"
+              :label="dict.goodsName"
+              :value="dict.goodsId"
+              :disabled="dict.status==1"
+            />
+          </el-select>
+        </el-form-item>
+        <el-form-item>
+          <el-button :loading="loading" type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+          <el-button :loading="loading" icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+        </el-form-item>
+      </el-form> -->
+
+        <div style="margin-bottom: 15px;font-size: 16px;">
+            <span @click="goBack" style="cursor: pointer;">
+                <i class="el-icon-arrow-left" style="font-size: 20px;"></i>
+                返回上一页
+            </span>
+        </div>
+
+        <div class="seat-tool-box">
+            <span class="demonstration">座位大小</span>
+            <div class="seat-tool-box-slider">
+                <el-slider v-model="scaleNum" :min="30" :max="100" @change="scaleNumChange"></el-slider>
+            </div>
+            <div style="display: flex;margin-left: 20px;" v-if="seatMapList && JSON.stringify(seatMapList) != '{}'">
+                <div>各类型座位的剩余数量:</div>
+                <div :key="index" v-for="(item, index) in seatTypeList" style="margin-left: 10px;align-items: center;">
+                    <span :style="{ color: item.color ? item.color : 'none' }">{{ item.name ? (item.name + '(剩余:' +
+                        (item.num || 0)
+                        + ')') : '暂未命名' }}</span>
+                </div>
+            </div>
+        </div>
+        <div class="seat-box" :style="{ '--scaleNum': scaleNum / 100 }">
+            <!-- 选择座位  -->
+            <div class="seat-list-box" v-loading="loading">
+                <!--  座位排版  -->
+                <div id="sm-scroll-box" ref="seatbox" class="dialog" @mousedown="mousedownFun"
+                    @mouseleave="mouseleaveFun" @scroll="scrollFun">
+                    <div class="dialog-box"
+                        :style="{ width: width * (scaleNum / 100) + 'px', margin: justifyContent ? 'auto' : 'unset' }">
+                        <div style="width: 100%;position: absolute;" class="seat-box-class clearfix" v-if="seatMapList">
+                            <div class="seat-item-class-box" v-for="(item1, index1) in seatMapListKey" :key="item1.key">
+                                <div class="seat-item-class seat-box-class-row" style="">{{ index1 != 0 ? ((index1) +
+                                    '排') : '' }}</div>
+
+                                <div :class="[
+                                    'seat-item-class',
+                                    showSearStyle(item1, item)
+                                ]" v-for="(item, index) in seatMapList[item1.key]"
+                                    :style="{ backgroundColor: item.color && !(item.isDisabled || item.status != 1) ? item.color : 'none' }"
+                                    @click.stop="seatClick(item)" @mouseenter="lockOrUnLockDeatilFun($event, item)"
+                                    @mouseleave="lockOrUnLockDeatilFun1" :dragSelectId="item.id"
+                                    :index="item1.key + '_' + index" :key="index">
+                                    <p v-if="item1.key != 'my_column'" class="text-class">{{ item.status != 1 ?
+                                        '不可售' : (item.name ? item.name : '暂未命名') }}</p>
+                                    <p v-else>{{ (index + 1) + '号' }}</p>
+                                </div>
+                            </div>
+                        </div>
+                    </div>
+
+
+                    <!-- 鼠标拖拽出的遮罩 (定位为 position:absolute)-->
+                    <!-- 遮罩最好是在绑定了mouseover事件的元素内部,并且不要阻止遮罩的冒泡事件。这样鼠标移到了遮罩上面,依然可以利用冒泡执行父元素的mouseover事件,就不会出现遮罩只能扩大,不能缩小的情况了(亲自试过) -->
+                    <div id="moveSelected"></div>
+                </div>
+                <div class="bottom-warp">
+                    <div style="flex-shrink: 0;">
+                        <span>已勾选可售座位:{{ seatSelectList.length }}</span>
+                        <!-- <span>已勾选锁定座位:{{ seatSelectListNo.length }}</span> -->
+                        <el-button size="mini" type="warning" style="margin: 0 15px;"
+                            @click="clearSeatSelectListAll">清空已选座位</el-button>
+                        <el-button size="mini" type="text" @click="performChange">更换场次</el-button>
+                    </div>
+                    <!-- <div style="width: 100%;display: flex;justify-content: center;height: 30px;">
+                        <el-button size="mini" v-hasPermi="['windowTicketSales:ticketingSales:lock']" type="warning"
+                            :loading="lockOrUnLockLoading" @click="lockOrUnLockFun(0)">{{
+                            seatSelectListNo.length>0?'解锁':'锁定' }}</el-button>
+                        <el-button size="mini" v-hasPermi="['windowTicketSales:ticketingSales:buy']" type="primary"
+                            @click="increaseViewersFun">购票</el-button>
+                    </div> -->
+                    <div class="selectInfo">
+                        <div class="selectItem" :key="index" v-for="(item, index) in seatSelectList">
+                            <div>
+                                <span>{{ item.name ? item.name : '暂未命名' }}</span>
+                                <span v-if="item.salePrice">¥{{ item.salePrice }}</span>
+                                <span v-else style="color: #ff6d6d;">未配置价格</span>
+                                <!-- <span>{{ setSeatTypeShow(item.seatTypeId) }}</span> -->
+                            </div>
+                            <div>
+                                <!-- <span @click="delSeatSelect(item)">删除</span> -->
+                                <span>
+                                    <i class="el-icon-close" @click="delSeatSelect(item)"></i>
+                                </span>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+            </div>
+
+            <div class="seat-select-box">
+                <div class="seat-select-box-top"
+                    style="text-align: center;margin: 10px 0;font-size: 16px;font-weight: 600;">
+                    购票信息
+                    <!-- <el-tabs v-model="activeName" @tab-click="handleClickTab">
+                        <el-tab-pane label="已选座位" name="first"></el-tab-pane>
+                    </el-tabs> -->
+                </div>
+                <ticketInfo ref="increaseViewers" @clearDialogVisible="clearDialogVisible" />
+
+
+                <!-- <div class="seat-select-info" v-if="activeName == 'first'">
+                    <div class="seat-select-item" :key="index" v-for="(item, index) in seatSelectList">
+                        <div>
+                            <span>{{ item.name ? item.name : '暂未命名' }}</span>
+                            <span>{{ setSeatTypeShow(item.seatTypeId) }}</span>
+                        </div>
+                        <div>
+                            <span @click="delSeatSelect(item)">删除</span>
+                        </div>
+                    </div>
+                </div>
+                <div class="seat-select-info" v-if="activeName == 'second'">
+                    <div class="seat-select-color-item" :key="index" v-for="(item, index) in seatTypeList">
+                        <span :style="{ backgroundColor: item.color ? item.color : 'none' }"></span>
+                        <span>{{ item.name ? item.name : '暂未命名' }}</span>
+                    </div>
+                </div> -->
+            </div>
+        </div>
+        <!--  锁座备注  -->
+        <lock-seat ref="lockSeat" @querySeatListFun="querySeatListFun" />
+        <!--  添加观影人  -->
+        <!-- <increaseViewers ref="increaseViewers" @clearDialogVisible="clearDialogVisible" /> -->
+
+        <!-- 提示信息  -->
+        <div :style="lockStyle" v-if="isLcokShow" class="lock-style-box">
+            <div><span>锁定人:</span><span>{{ lockObj.auth }}</span></div>
+            <div><span>锁定原因:</span><span>{{ lockObj.remark }}</span></div>
+        </div>
+        <!-- 更换场次 -->
+        <el-dialog title="更换场次" modal-append-to-body :close-on-click-modal="false" :visible.sync="isOpen" width="30%">
+            <el-form :model="queryParams" ref="queryForm" size="small" :rules="rules" label-width="80px">
+                <el-form-item label="场次时间" prop="performDate">
+                    <el-date-picker type="date" placeholder="选择场次时间" v-model="queryParams.performDate"
+                        @change="hanldeChangeTime($event, 'performDate')" value-format="yyyy-MM-dd"></el-date-picker>
+                </el-form-item>
+                <el-form-item label="场次" prop="timeId">
+                    <el-select v-model="queryParams.timeId" placeholder="场次" clearable style="width: 100%"
+                        @change="hanldeChangeTime($event, 'timeId')">
+                        <el-option v-for="dict in merchantPerformTimeListS" :key="dict.id"
+                            :label="dict.timeSnapshot + '(' + dict.performTimeStart + '-' + dict.performTimeEnd + ')'"
+                            :value="dict.id" />
+                    </el-select>
+                </el-form-item>
+                <el-form-item label="票种" prop="goodsId">
+                    <el-select v-model="queryParams.goodsId" placeholder="请选择票种" clearable style="width: 100%">
+                        <el-option v-for="dict in goodsPageListS" :key="dict.goodsId" :label="dict.goodsName"
+                            :value="dict.goodsId" :disabled="dict.status == 1" />
+                    </el-select>
+                </el-form-item>
+            </el-form>
+            <span slot="footer" class="dialog-footer">
+                <el-button @click="isOpen = false">取 消</el-button>
+                <el-button type="primary" @click="handleSave">保 存</el-button>
+            </span>
+        </el-dialog>
+
+
+
+
+    </div>
+</template>
+
+<script>
+import {
+    querySeatList,
+    merchantPerformTimeList,
+    merchantPerformTimeListNew,
+    lockOrUnLock,
+    merchantTheatreAuditoriumList,
+    goodsPageList,
+    getGoodsPerformApi,
+    lockOrUnLockApi,
+    querySeatListNew,
+} from '@/api/windowTicketSales/ticketingSales'
+//import increaseViewers from "./model/increaseViewers"
+import increaseViewers from "./model/increaseViewersNew"
+import ticketInfo from "./model/ticketInfo"
+
+import moment from "moment"
+import { pageList as getSeatType } from '@/api/seatTypeMr/seatTypeMr'
+import selectListMixin from "./mixins/selectList"
+import LockSeat from './model/lockSeat.vue'
+import { tr } from 'voca'
+export default {
+    name: "TicketSales",
+    components: {
+        increaseViewers,
+        ticketInfo,
+        LockSeat
+    },
+    mixins: [selectListMixin],
+    dicts: ['channel_type'],
+    data() {
+        return {
+            // 遮罩层
+            loading: false,
+            // 查询参数
+            queryParams: {
+                timeId: '',
+                performDate: null,
+                auditoriumId: null,
+                goodsId: null,
+            },
+            rules: {
+                auditoriumId: [
+                    { required: true, message: '请选择演出厅', trigger: ['blur', 'change'] }
+                ],
+                performDate: [
+                    { required: true, message: '请选择时间', trigger: ['blur', 'change'] }
+                ],
+                timeId: [
+                    { required: true, message: '请选择场次', trigger: ['blur', 'change'] }
+                ],
+                goodsId: [
+                    { required: true, message: '请选择票种', trigger: ['blur', 'change'] }
+                ],
+            },
+            merchantTheatreAuditoriumListS: [], // 演出厅
+            merchantPerformTimeListS: [], // 场次
+            querySeatListS: [], // 座位
+            goodsPageListS: [], // 票务
+            goodsPageListSAll: [], // 票务全部
+            setList: [],
+            seatMapList: {},
+            seatMapListKey: [], // key
+            seatSelectList: [],
+            seatSelectListNo: [], // 锁定的座位
+
+            lockOrUnLockLoading: false,
+
+            performId: '',// 剧目ID
+            scaleNum: 30,
+
+            width: 0,
+            justifyContent: false,
+            activeName: 'first',
+            seatTypeList: [],
+
+            // 限购条件
+            ifRealUser: 0,// 散客是否实名:0-否 1-是
+            ifRealTeam: 0,// 团购是否实名:0否 1-是
+            oneMany: 0,// 证件要求: 1一证一票,2一证多票
+            personnelNum: 0,// 人员要求:0-表示不限制 其他数字表示限制人数
+
+            isLcokShow: false,
+            lckTime: null,
+            seatId: null,
+            lockStyle: {
+
+            },
+            lockObj: {
+                auth: '',
+                remark: ''
+            },
+            salePrice: null,
+            stockType: null,
+            debounceTimer: null,
+            isOpen: false,
+        };
+    },
+    created() {
+        console.log(this.$route.params, 'this.$route.params');
+        if (this.$route.params.auditoriumId) {
+            this.$set(this.queryParams, 'auditoriumId', this.$route.params.auditoriumId)
+            this.$set(this.queryParams, 'performDate', this.$route.params.performDate)
+            this.$set(this.queryParams, 'timeId', this.$route.params.timeId)
+            this.$set(this.queryParams, 'goodsId', this.$route.params.goodsId)
+            this.getOptions();
+        }
+        this.merchantTheatreAuditoriumListFun()
+        this.goodsPageListFun()
+        this.getSeatTypeList()
+    },
+    mounted() {
+        // this.$set(this.queryParams, 'performDate', moment().format("yyyy-MM-DD"))
+        if (this.queryParams.goodsId) {
+            this.changeTime(this.queryParams.goodsId, 'goodsId')
+        }
+    },
+    watch: {
+        seatSelectList(newVal, oldVal) {
+            if (newVal) {
+                if (this.debounceTimer) {
+                    clearTimeout(this.debounceTimer);
+                }
+                this.debounceTimer = setTimeout(() => {
+                    this.increaseViewersFun()
+                }, 1000);
+            }
+        }
+    },
+    methods: {
+        moment,
+
+        setChanneltype(key) {
+            let srt = ''
+            this.dict.type.channel_type.forEach((item, index) => {
+                if (key == item.value) {
+                    srt = item.label
+                }
+            })
+            return srt
+        },
+        // 返回上一页
+        goBack() {
+            const obj = { path: "/window/ticket" };
+            this.$tab.closeOpenPage(obj);
+        },
+        /**  票务信息  */
+        async goodsPageListFun() {
+            try {
+                let res = await goodsPageList({
+                    pageNum: 1,
+                    pageSize: 999,
+                    classifyId: 1,
+                    goodsType: 2,
+                })
+                if (res.code == 200) {
+                    this.goodsPageListSAll = res.data.rows
+                    // let list = []
+                    // res.data.rows.forEach((item,index)=>{
+                    //     if(item.status != 1) {
+                    //         list.push(item)
+                    //     }
+                    // })
+                    // this.goodsPageListS = list
+                }
+            } catch (error) {
+
+            }
+        },
+        /**  获取演出厅  */
+        async merchantTheatreAuditoriumListFun() {
+            try {
+                let res = await merchantTheatreAuditoriumList({
+                    pageNum: 1,
+                    pageSize: 999
+                })
+                if (res.code == 200) {
+                    this.merchantTheatreAuditoriumListS = res.data.rows
+                    // if(this.merchantTheatreAuditoriumListS.length>0){
+                    //     this.$set(this.queryParams,'auditoriumId',this.merchantTheatreAuditoriumListS[0].id)
+                    //     this.changeTime(this.queryParams.auditoriumId,'auditoriumId')
+                    // }
+                    // if (this.$route.params.auditoriumId) {
+                    // if (this.queryParams.auditoriumId) {
+                    //     // this.$set(this.queryParams, 'auditoriumId', this.$route.params.auditoriumId)
+                    //     // this.$set(this.queryParams, 'performDate', this.$route.params.performDate)
+                    //     this.changeTime(this.queryParams.auditoriumId, 'auditoriumId')
+                    // }
+                }
+            } catch (error) {
+
+            }
+        },
+        /**  获取场次  */
+        async merchantPerformTimeListFun() {
+            try {
+                let param = JSON.parse(JSON.stringify(this.queryParams));
+                param.status = 1;
+                let res = await merchantPerformTimeListNew(param)
+                if (res.code == 200) {
+                    // console.log('merchantPerformTimeListS', res.data.rows);
+                    this.merchantPerformTimeListS = res.data.list
+
+                }
+            } catch (error) {
+
+            }
+        },
+        /**  座位锁定/解锁  */
+        async lockOrUnLockFun(type) {
+            try {
+                let listS = this.seatSelectListNo.length > 0 ? this.seatSelectListNo : this.seatSelectList
+                if (listS.length <= 0) {
+                    this.$message.error(`请选择锁定的座位!!!`);
+                    return
+                }
+                if (this.seatSelectListNo.length == 0) {
+                    this.$refs.lockSeat.open(this.seatSelectListNo, this.seatSelectList, this.queryParams.auditoriumId, this.queryParams.timeId)
+                } else {
+                    this.lockOrUnLockLoading = true
+                    let list = []
+                    listS.forEach((item, index) => {
+                        list.push({
+                            "auditoriumId": this.queryParams.auditoriumId,
+                            "seatId": item.id,
+                            "timeId": this.queryParams.timeId
+                        })
+                    })
+                    let res = await lockOrUnLock({
+                        type: this.seatSelectListNo.length > 0 ? 1 : 0,
+                        seatList: list
+                    })
+                    this.lockOrUnLockLoading = false
+                    if (res.code) {
+                        this.$message({
+                            showClose: true,
+                            message: res.msg,
+                            type: 'success'
+                        });
+                        this.querySeatListFun(true)
+                    }
+                }
+
+            } catch (error) {
+                this.lockOrUnLockLoading = false
+                this.$message({
+                    showClose: true,
+                    message: "操作失败!!!",
+                    type: 'error'
+                });
+                console.error('error===', error)
+            }
+
+        },
+        /**  获取座位  */
+        async querySeatListFun(type) {
+            try {
+                this.loading = true
+                this.performId = ''
+                this.screenTop = 0
+                this.scrollLeft = 0
+                if (type) { // 是否清除已选
+                    this.seatSelectList = []
+                    this.seatSelectListNo = []
+                }
+                this.seatMapList = {}
+                this.seatList = []
+                let res = await querySeatListNew({
+                    ...this.queryParams,
+                    channelType: 'window'
+                })
+                if (res.code == 200) {
+                    this.querySeatListS = res.data;
+                    this.setList = res.data;
+                    if (this.setList && this.setList.length > 0) {
+                        this.setSeatMapList(this.setList);
+                    }
+                }
+                this.loading = false
+            } catch (error) {
+                this.loading = false
+                console.error("error===", error)
+            }
+        },
+        // 设置座位集合
+        setSeatMapList(list) {
+            if (list && list.length > 0) {
+                let listCopy = {}
+                let lisyCopy1 = {}
+                let listNum = JSON.parse(JSON.stringify(this.seatTypeList))
+                listNum.forEach((item, index) => {
+                    listNum[index]['num'] = 0
+                })
+                list.forEach(item => {
+                    item.isDisabled = item.occupyStatus == 1 || (item.occupyStatus == 0 && item.occupyOrderId) ? true : false //(item.occupyStatus != null && (item.occupyStatus == 0 || item.occupyStatus == 1) ? true : false); // 座位是否已被选择
+                    item.isSelect = this.setIsSelect(item);
+                    if (item.rowNo) {
+                        listNum.forEach((item1, index) => {
+                            if (item1.id == item.seatTypeId && item.status == 1 && !item.occupyStatus && item.occupyStatus != 0) {
+                                listNum[index]['num'] = listNum[index]['num'] + 1
+                            }
+                        })
+                        if (listCopy['my' + item.rowNo]) {
+                            listCopy['my' + item.rowNo].push(item)
+                        } else {
+                            listCopy['my' + item.rowNo] = [item]
+                        }
+                    }
+                })
+                this.seatTypeList = JSON.parse(JSON.stringify(listNum))
+                let width = 0
+                let flog = 0
+                let seatMapListKey = []
+                Object.keys(listCopy).forEach((item) => {
+                    if (listCopy[item].length > flog) {
+                        flog = listCopy[item].length
+                    }
+                    seatMapListKey.push({
+                        key: item,
+                        sort: Number(item.replace('my', ''))
+                    })
+                })
+                seatMapListKey.sort((a, b) => {
+                    return a.sort - b.sort
+                })
+                this.seatMapListKey = seatMapListKey
+                console.log("seatMapListKey=====", seatMapListKey)
+                this.width = 70 * (flog + 1)
+                this.$nextTick(() => {
+                    if (this.$refs.seatbox) {
+                        var ele = this.$refs.seatbox
+                        console.log(ele.getBoundingClientRect().width); // 100
+                        if (this.width < ele.getBoundingClientRect().width) {
+                            this.justifyContent = true
+                        } else {
+                            //this.justifyContent = false
+                            this.justifyContent = true
+                        }
+                        //this.$refs.seatbox.scrollTo(this.width/4,0)
+                    }
+                })
+
+                console.log("list====", listCopy)
+
+                let columnList = []
+                listCopy[seatMapListKey[0].key].forEach((item, index) => {
+                    columnList.push({
+                        ...item,
+                        occupyStatus: 2,
+                        isDisabled: true,
+                        status: 0
+                    })
+                })
+                this.seatMapListKey.unshift({
+                    key: "my_column",
+                    sort: -99
+                })
+                listCopy['my_column'] = columnList
+                this.seatMapList = JSON.parse(JSON.stringify(listCopy))
+            }
+        },
+        setIsSelect(item) {
+            if (!this.seatSelectList || this.seatSelectList.length == 0) {
+                return false
+            }
+            let flog = false
+            this.seatSelectList.forEach((item1, index1) => {
+                if (item.id == item1.id) {
+                    flog = true
+                }
+            })
+            return flog
+        },
+        // 选择日期 场次
+        hanldeChangeTime(value, type) {
+            console.log(value, '6666');
+            if (type == 'performDate' && this.queryParams.performDate) {
+                this.$set(this.queryParams, 'timeId', '')
+                this.$set(this.queryParams, 'goodsId', '')
+                this.merchantPerformTimeListS = []
+                this.goodsPageListS = []
+                //  获取场次
+                this.merchantPerformTimeListFun()
+            } else if (type == 'timeId' && this.queryParams.timeId) {
+                this.$set(this.queryParams, 'goodsId', '')
+                this.goodsPageListS = []
+                // 获取 票种
+                // this.getOptions();
+                if (this.queryParams.timeId) {
+                    // let flog = false
+                    let list2 = []
+                    this.merchantPerformTimeListS.forEach((item, index) => {
+                        if (item.id == this.queryParams.timeId) {
+                            // flog = true
+                            list2 = item.goodsList
+                            this.stockType = item.stockType
+                        }
+                    })
+                    this.goodsPageListS = []
+                    setTimeout(() => {
+                        this.goodsPageListS = list2
+                    }, 500)
+                } else {
+                    this.goodsPageListS = []
+                }
+            }
+        },
+        /**  选择场次时间  */
+        changeTime(value, type) {
+            // console.log("fsdfsdf----",value,type)
+            if (type == 'timeId') {
+                this.$set(this.queryParams, 'goodsId', '')
+                this.stockType = null
+                if (value) {
+                    let flog = false
+                    let list2 = []
+                    this.merchantPerformTimeListS.forEach((item, index) => {
+                        if (item.id == value) {
+                            flog = true
+                            list2 = item.goodsList
+                            this.stockType = item.stockType
+                        }
+                    })
+                    this.goodsPageListS = []
+                    setTimeout(() => {
+                        this.goodsPageListS = list2
+                        // // if (this.$route.params.goodsId) {
+                        // if (this.queryParams.goodsId) {
+                        //     // this.$set(this.queryParams, 'goodsId', this.$route.params.goodsId)
+                        //     this.changeTime(this.queryParams.goodsId, 'goodsId')
+                        // }
+                    }, 500)
+
+                } else {
+                    this.goodsPageListS = []
+                }
+            }
+            this.changeTimeCheck(value, type)
+
+        },
+        /**  选择场次时间  */
+        async changeTimeCheck(value, type) {
+            // console.log("fsdfsdf")
+            if (this.queryParams && this.queryParams.timeId && type != 'timeId' && type != 'goodsId') {
+                this.$set(this.queryParams, 'timeId', '')
+                this.$set(this.queryParams, 'goodsId', '')
+                this.merchantPerformTimeListS = []
+                this.goodsPageListS = []
+            }
+            if (this.queryParams.auditoriumId && this.queryParams.performDate && type != 'timeId' && type != 'goodsId') {
+                //  获取场次
+                this.merchantPerformTimeListFun()
+            }
+            if (type == 'goodsId') {
+                //this.$refs.queryForm.clearValidate("goodsId")
+                if (value) {
+                    // console.log("dsfsdfdsfds===",value)
+                    await this.getGoodsPerformFun(value);
+
+                    this.handleQuery()
+                }
+            } else {
+                this.ifRealUser = 0  // 散客是否实名:0-否 1-是
+                this.ifRealTeam = 0   // 团购是否实名:0否 1-是
+                this.oneMany = 1   // 证件要求: 1一证一票,2一证多票
+                this.personnelNum = 0   // 人员要求:0-表示不限制 其他数字表示限制人数
+            }
+            this.seatMapListKey = {}
+            this.performId = ''
+            this.seatSelectList = []
+            this.seatSelectListNo = []
+            this.seatMapList = {}
+            this.seatList = []
+            // this.handleQuery()
+
+        },
+        /**  设置 场次 对应得剧目ID */
+        changePerformId(value) {
+            console.log("value=====", value)
+            this.performId = ''
+            this.merchantPerformTimeListS.forEach((item, index) => {
+                if (item.id == value) {
+                    this.performId = item.performId
+                    console.log("value==this.performId", value)
+                }
+            })
+        },
+        /**  设置 票务 对应价格 */
+        changeSalePrice(value) {
+            // console.log("value=====", value)
+            this.salePrice = null
+            this.goodsPageListS.forEach((item, index) => {
+                if (item.goodsId == value) {
+                    this.salePrice = item.salePrice
+                }
+            })
+        },
+        // 更换场次
+        performChange() {
+            this.isOpen = true;
+            this.getOptions();
+        },
+        // 获取数据源
+        getOptions() {
+            // 获取场次
+            if (this.queryParams.performDate && this.queryParams.auditoriumId) {
+                this.merchantPerformTimeListFun()
+            }
+            // 获取票种数据源
+            if (this.queryParams.timeId) {
+                // let flog = false
+                let list2 = []
+                this.merchantPerformTimeListS.forEach((item, index) => {
+                    if (item.id == this.queryParams.timeId) {
+                        // flog = true
+                        list2 = item.goodsList
+                        this.stockType = item.stockType
+                    }
+                })
+                this.goodsPageListS = []
+                setTimeout(() => {
+                    this.goodsPageListS = list2
+                }, 500)
+            } else {
+                this.goodsPageListS = []
+            }
+        },
+        // 更换场次 保存
+        handleSave() {
+            this.$refs.queryForm.validate(async (valid) => {
+                if (valid) {
+                    this.isOpen = false;
+                    await this.getGoodsPerformFun(this.queryParams.goodsId);
+                    this.querySeatListFun(true);
+                } else {
+                    console.log('error submit!!', valid);
+                    return false;
+                }
+            });
+        },
+        /** 搜索按钮操作 */
+        handleQuery() {
+            this.querySeatListFun(true);
+            // this.$refs.queryForm.validate((valid) => {
+            // if (valid) {
+            //     this.querySeatListFun(true);
+            // } else {
+            //     console.log('error submit!!',valid);
+            //     return false;
+            // }
+            // });
+
+        },
+        /** 重置按钮操作 */
+        resetQuery() {
+            this.$refs.queryForm.resetFields()
+            this.performId = ''
+            this.seatSelectList = []
+            this.seatSelectListNo = []
+            this.seatMapList = {}
+            this.seatList = []
+            this.handleQuery();
+
+        },
+
+        // 座位点击事件
+        seatClick(row) {
+            if (row.isDisabled || row.status == 2) {
+                return false
+            }
+            if (row.channelType != 'window') {
+                if (row.channelType) {
+                    this.$message.error(`该座位仅限${this.setChanneltype(row.channelType)}渠道购买!!!`);
+                    return false
+                } else if (row.isUse == 2) {
+                    this.$message.error(`该座位仅限其他渠道购买!!!`);
+                    return false
+                }
+            }
+
+            if (this.seatSelectListNo.length > 0 && row.occupyStatus != 0) {
+                this.$message.error('你已选择锁定座位,只能再选择被锁定的座位!!!');
+                return
+            }
+            if (this.seatSelectList.length > 0 && row.occupyStatus == 0) {
+                this.$message.error('此座已被锁定,请先解锁!!!');
+                return
+            }
+            if (row.occupyStatus == 0) {
+                // console.log("weqwrwerewrer")
+                // this.$confirm('此座已被锁定,请先解锁', '提示', {
+                //     confirmButtonText: '确定',
+                //     cancelButtonText: '取消',
+                //     type: 'warning'
+                // }).then(() => {
+                //     this.lockOrUnLockFun([row],1)
+                // }).catch((error) => {
+                //     console.log("error====",error)
+                // });
+                row.isSelect = !row.isSelect
+                if (row.isSelect) {
+                    this.seatSelectListNo.push(JSON.parse(JSON.stringify(row)))
+                } else {
+                    let list = JSON.parse(JSON.stringify(this.seatSelectListNo))
+                    list.forEach((item, index) => {
+                        if (item.id == row.id) {
+                            this.seatSelectListNo.splice(index, 1)
+                        }
+                    })
+                }
+            } else if (row.isDisabled || row.status == 2) {
+                return false
+            } else {
+                let flog = false;
+                this.seatSelectList.forEach((item, index) => {
+                    if (item.seatTypeId != row.seatTypeId) {
+                        flog = true
+                    }
+                })
+                if (flog) {
+                    this.$message.error('只能选同一类型的座位');
+                    return
+                }
+                row.isSelect = !row.isSelect
+                if (row.isSelect) {
+                    this.seatSelectList.push(JSON.parse(JSON.stringify(row)))
+                } else {
+                    let list = JSON.parse(JSON.stringify(this.seatSelectList))
+                    list.forEach((item, index) => {
+                        if (item.id == row.id) {
+                            this.seatSelectList.splice(index, 1)
+                        }
+                    })
+                }
+                //this.$forceUpdate()
+            }
+
+        },
+        /** 删除已选座位  */
+        delSeatSelect(row) {
+            console.log(row, 'row222');
+
+            // row.isSelect = !row.isSelect
+            // if(row.isSelect){
+            //     this.seatSelectList.push(JSON.parse(JSON.stringify(row)))
+            // }else {
+            //     let list = JSON.parse(JSON.stringify(this.seatSelectList))
+            //     list.forEach((item,index)=>{
+            //         if(item.id == row.id) {
+            //             this.seatSelectList.splice(index, 1)
+            //         }
+            //     })
+            // }
+            let list = JSON.parse(JSON.stringify(this.seatSelectList))
+            list.forEach((item, index) => {
+                if (item.id == row.id) {
+                    this.seatSelectList.splice(index, 1)
+                }
+            })
+            Object.keys(this.seatMapList).forEach((item1, index) => {
+                this.seatMapList[item1].forEach((item, index) => {
+                    if (item.id == row.id) {
+                        item.isSelect = !item.isSelect
+                    }
+                })
+
+            })
+            this.$forceUpdate()
+        },
+        increaseViewersFun() {
+            if (this.seatSelectList.length > 0) {
+                // if(this.ifRealUser != 0 || this.ifRealTeam != 0 ) {
+                //     if(this.personnelNum != 0) {
+                //         if( this.seatSelectList.length != this.personnelNum ) {
+                //             this.$message.error(`票务类型设置了实名要求,选择人数为${ this.personnelNum }人`);
+                //             return
+                //         }
+                //     }
+                // }
+                if (this.personnelNum != 0) {
+                    if (this.seatSelectList.length != this.personnelNum) {
+                        this.$message.error(`票务类型设置了实名要求,选择人数为${this.personnelNum}人`);
+                        return
+                    }
+                }
+                this.changePerformId(this.queryParams.timeId)
+                this.changeSalePrice(this.queryParams.goodsId)
+                console.log(this.queryParams, 'this.queryParams');
+
+                this.$refs.increaseViewers.initData(this.seatSelectList, {
+                    ...this.queryParams,
+                    performId: this.performId,
+                    ifRealUser: this.ifRealUser,  // 散客是否实名:0-否 1-是
+                    ifRealTeam: this.ifRealTeam,   // 团购是否实名:0否 1-是
+                    oneMany: this.oneMany,   // 证件要求: 1一证一票,2一证多票
+                    personnelNum: this.personnelNum,   // 人员要求:0-表示不限制 其他数字表示限制人数
+                    seatTypeId: this.seatSelectList[0].seatTypeId,
+                    seatTypeName: this.seatSelectList[0].seatLabel,
+                    salePrice: this.salePrice,
+                    source: this.$route.params.source || '',
+                })
+            } else {
+                this.$refs.increaseViewers.initData([], {
+                    ...this.queryParams,
+                    performId: this.performId,
+                    ifRealUser: this.ifRealUser,  // 散客是否实名:0-否 1-是
+                    ifRealTeam: this.ifRealTeam,   // 团购是否实名:0否 1-是
+                    oneMany: this.oneMany,   // 证件要求: 1一证一票,2一证多票
+                    personnelNum: this.personnelNum,   // 人员要求:0-表示不限制 其他数字表示限制人数
+                    seatTypeId: '',
+                    seatTypeName: '',
+                    salePrice: 0
+                })
+                // this.$alert('请先选择座位!!!', '提示', {
+                //     confirmButtonText: '确定',
+                //     callback: action => {
+
+                //     }
+                // });
+            }
+
+        },
+        /**  弹窗关闭 */
+        clearDialogVisible() {
+            //this.
+            this.querySeatListFun(true)
+        },
+        /**  选择tab */
+        handleClickTab() {
+
+        },
+        /** 获取座位类型 说明 */
+        getSeatTypeList() {
+            getSeatType({
+                pageNum: 1,
+                pageSize: 999,
+            })
+                .then(response => {
+                    this.seatTypeList = response.data.rows;
+                }
+                );
+        },
+        /**   显示座位类型  */
+        setSeatTypeShow(value) {
+            let srt = ''
+            this.seatTypeList.forEach((item, index) => {
+                if (value == item.id) {
+                    srt = item.name
+                }
+            })
+
+            return srt
+        },
+
+        //  获取限购标准
+        async getGoodsPerformFun(id) {
+            try {
+                let res = await getGoodsPerformApi({
+                    goodsId: id
+                })
+                if (res.code == 200) {
+                    this.ifRealUser = res.data.ifRealUser  // 散客是否实名:0-否 1-是
+                    this.ifRealTeam = res.data.ifRealTeam   // 团购是否实名:0否 1-是
+                    this.oneMany = res.data.oneMany   // 证件要求: 1一证一票,2一证多票
+                    this.personnelNum = res.data.personnelNum   // 人员要求:0-表示不限制 其他数字表示限制人数
+                } else {
+                    this.ifRealUser = 0  // 散客是否实名:0-否 1-是
+                    this.ifRealTeam = 0   // 团购是否实名:0否 1-是
+                    this.oneMany = 1   // 证件要求: 1一证一票,2一证多票
+                    this.personnelNum = 0   // 人员要求:0-表示不限制 其他数字表示限制人数
+                }
+
+            } catch (error) {
+                this.ifRealUser = 0  // 散客是否实名:0-否 1-是
+                this.ifRealTeam = 0   // 团购是否实名:0否 1-是
+                this.oneMany = 1   // 证件要求: 1一证一票,2一证多票
+                this.personnelNum = 0   // 人员要求:0-表示不限制 其他数字表示限制人数
+            }
+        },
+        /** 获取锁定人和锁定备注  */
+        async lockOrUnLockDeatilFun(e, item) {
+            try {
+                if (this.lckTime) {
+                    clearTimeout(this.lckTime)
+                }
+                if (item.occupyStatus !== 0) {
+                    if (item.channelType && item.channelType != 'window') {
+                        this.isLcokShow = true
+                        this.lockObj = {
+                            remark: `该座位仅限${this.setChanneltype(item.channelType)}渠道购买!!!`,
+                            auth: ''
+                        }
+                        this.lockStyle = {
+                            position: "fixed",
+                            top: (e.y + 10) + 'px',
+                            left: (e.x + 10) + 'px',
+                            zIndex: 999999
+                        }
+                        console.log('dsfdsff====', this.lockObj, this.lockStyle)
+                        return
+                    } else {
+                        this.isLcokShow = false
+                        return
+                    }
+                }
+                if (item.id == this.seatId) { return }
+                this.seatId = item.id
+                this.isLcokShow = false
+                this.lckTime = setTimeout(async () => {
+                    let res = await lockOrUnLockApi({
+                        auditoriumId: this.queryParams.auditoriumId,
+                        timeId: this.queryParams.timeId,
+                        seatId: item.id
+                    })
+                    if (res.code == 200) {
+                        this.isLcokShow = true
+                        this.lockObj = {
+                            remark: res.data.remark,
+                            auth: res.data.createBy
+                        }
+                        this.lockStyle = {
+                            position: "fixed",
+                            top: (e.y + 10) + 'px',
+                            left: (e.x + 10) + 'px',
+                            zIndex: 999999
+                        }
+                    } else {
+                        //this.handleClose()
+                    }
+                }, 500)
+            } catch (error) {
+                //this.handleClose()
+            }
+        },
+        lockOrUnLockDeatilFun1() {
+            this.isLcokShow = false
+            this.seatId = null
+        },
+        /**
+         * 座位得样式
+         *
+         * occupyStatus: 为null表示未占用,0-锁定 1-占用
+         * status: 状态:0-初始(该状态下不C端显示) 1-可用 2-不可用
+         * channelType:
+         *  */
+        showSearStyle(item1, item) {
+
+            let srt = ''
+            srt =
+                item1.key == 'my_column' ? 'seat-item-class-column' :
+                    item.occupyStatus == 0 ? item.occupyOrderId ? 'order-occupy-status' :
+                        item.occupyStatus == 0 && item.isSelect ? 'occupy-status-select occupy-status' :
+                            'occupy-status' : item.occupyStatus == 1 ? 'occupy-status-no' :
+                        item.isDisabled || item.status != 1 ? 'disabled-class' :
+                            item.isSelect ? 'select-class' : ''
+            if (this.stockType == 1) {
+                if (!srt && (item.channelType != 'window' || item.isUse == 2)) {
+                    return 'seat_channel_type'
+                }
+            }
+
+            return srt
+        }
+    }
+};
+</script>
+<style>
+.lock-style-box {
+    padding: 10px;
+    border-radius: 10px;
+    position: fixed;
+    z-index: 99999;
+    background-color: rgba(0, 0, 0, 0.5);
+    color: #fff;
+    font-size: 12px;
+}
+</style>
+<style lang="scss" scoped>
+.app-container-me {
+    width: 100%;
+    height: calc(100vh - 120px);
+}
+
+.seat-tool-box {
+    height: 20px;
+    box-sizing: border-box;
+    display: flex;
+    align-items: center;
+
+    span {
+        flex-shrink: 0;
+        font-size: 12px;
+    }
+
+    .seat-tool-box-slider {
+        width: 100px;
+        margin-left: 10px;
+    }
+}
+
+.seat-box {
+    width: 100%;
+    height: 100%;
+    box-sizing: border-box;
+    display: flex;
+    position: relative;
+
+    .seat-list-box {
+        width: calc(100% - 430px);
+        //width: 100%;
+        height: 100%;
+        box-sizing: border-box;
+        position: relative;
+
+        .bottom-warp {
+            height: 180px;
+            padding: 10px 20px;
+            margin-top: 5px;
+            border: 1px solid #666;
+            border-radius: 10px;
+            overflow-y: auto;
+
+            .selectInfo {
+                width: 100%;
+                // overflow: hidden;
+                // overflow-y: auto;
+                display: flex;
+                justify-content: flex-start;
+                flex-wrap: wrap;
+                /* 允许换行 */
+                gap: 10px 25px;
+
+                .selectItem {
+                    width: 120px;
+                    height: 50px;
+                    border: 1px solid #ccc;
+                    margin-top: 5px;
+                    // margin: 5px 12px;
+                    padding: 5px;
+                    border-radius: 5px;
+                    display: flex;
+                    justify-content: space-between;
+                    align-items: center;
+                    font-size: 12px;
+
+                    >div:first-child {
+                        width: 80px;
+                        display: flex;
+                        flex-direction: column;
+                        text-align: center;
+
+                        span:first-child {
+                            font-weight: 600;
+                        }
+                    }
+
+                    >div:last-child {
+                        span:first-child {
+                            color: #f56c6c;
+                            cursor: pointer;
+                            font-size: 18px;
+                        }
+                    }
+                }
+
+                .seat-select-color-item {
+                    display: flex;
+                    align-items: center;
+                    margin-bottom: 5px;
+
+                    >span:first-child {
+                        width: 20px;
+                        height: 20px;
+                        flex-shrink: 0;
+                    }
+
+                    >span:last-child {
+                        font-size: 16px;
+                        font-weight: 600;
+                        margin-left: 10px;
+                    }
+                }
+            }
+        }
+
+    }
+
+    .seat-select-box {
+        width: 420px;
+        height: 100%;
+        flex-shrink: 0;
+        box-sizing: border-box;
+        padding: 0 5px;
+        margin-left: 10px;
+        border: 1px solid #ccc;
+        border-radius: 10px;
+
+        .seat-select-info {
+            width: 100%;
+            height: calc(100% - 60px);
+            overflow: hidden;
+            overflow-y: auto;
+
+            .seat-select-item {
+                border: 1px solid #ccc;
+                margin-bottom: 5px;
+                padding: 5px;
+                border-radius: 5px;
+                display: flex;
+                justify-content: space-between;
+                align-items: center;
+                font-size: 12px;
+
+                >div:first-child {
+                    display: flex;
+                    flex-direction: column;
+
+                    span:first-child {
+                        font-weight: 600;
+                    }
+                }
+
+                >div:last-child {
+                    span:first-child {
+                        color: #f56c6c;
+                        cursor: pointer;
+                    }
+                }
+            }
+
+            .seat-select-color-item {
+                display: flex;
+                align-items: center;
+                margin-bottom: 5px;
+
+                >span:first-child {
+                    width: 20px;
+                    height: 20px;
+                    flex-shrink: 0;
+                }
+
+                >span:last-child {
+                    font-size: 16px;
+                    font-weight: 600;
+                    margin-left: 10px;
+                }
+            }
+        }
+    }
+}
+
+.seat-list-box::before {
+    content: "舞台";
+    position: absolute;
+    left: 50%;
+    transform: translateX(-50%);
+    width: 300px;
+    height: 30px;
+    background-color: rgb(204, 204, 204, 0.5);
+    font-size: 18px;
+    font-weight: 600;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    border-radius: 0 0 20px 20px;
+    z-index: 99;
+}
+
+.dialog {
+    padding: 30px 10px 10px;
+    width: 100%;
+    height: calc(100% - 180px);
+    box-sizing: border-box;
+    overflow: auto;
+    border-radius: 10px;
+    border: 1px solid #323333;
+    position: relative;
+
+    .dialog-box {
+        position: relative;
+    }
+
+    .upload-btn {
+        width: 100px;
+        height: 100px;
+        background-color: #fbfdff;
+        border: dashed 1px #c0ccda;
+        border-radius: 5px;
+
+        i {
+            font-size: 30px;
+            margin-top: 20px;
+        }
+
+        &-text {
+            margin-top: -10px;
+        }
+    }
+
+    .avatar {
+        cursor: pointer;
+    }
+
+    .title-class {
+        font-size: 16px;
+        font-weight: bold;
+        color: black;
+        margin-bottom: 20px;
+        margin-top: 20px;
+    }
+
+    .item-class {
+        margin-bottom: 20px;
+    }
+
+    .seat-box-class {
+        padding: 5px;
+        transform-origin: 50% 0;
+        transform: scale(var(--scaleNum));
+        box-sizing: border-box;
+
+        /**  是否属于windown座位  */
+        .seat_channel_type {
+            user-select: none;
+        }
+
+        .seat_channel_type:after {
+            content: "";
+            display: block;
+            position: absolute;
+            top: 0;
+            left: 0;
+            width: 100%;
+            height: 100%;
+            background-color: rgba(0, 0, 0, 0.3);
+            z-index: -1;
+            background-image: url('../../assets/jinxuan_1.png');
+            background-size: 50% 50%;
+            background-position: 50% 50%;
+            background-repeat: no-repeat;
+            z-index: 99;
+        }
+
+        .disabled-class {
+            background-color: #ffffff;
+            border: none !important;
+            user-select: none;
+            // pointer-events: none;
+            cursor: not-allowed !important;
+
+            .text-class {
+                color: #fff !important;
+            }
+        }
+
+        .select-class {
+            //background-color: #e85353 !important;
+            border: 5px solid #1890ff !important;
+            // color: #eceaea !important;
+            position: relative;
+        }
+
+        /** 手动锁定  */
+        .occupy-status:after {
+            content: "";
+            display: block;
+            position: absolute;
+            top: 0;
+            left: 0;
+            width: 100%;
+            height: 100%;
+            background-color: rgba(0, 0, 0, 0.3);
+            z-index: -1;
+            background-image: url('../../assets/jinzhi_1.png');
+            background-size: 50% 50%;
+            background-position: 50% 50%;
+            background-repeat: no-repeat;
+            z-index: 99;
+        }
+
+        .occupy-status {
+            //pointer-events: none;
+        }
+
+        /**  锁定被选择  */
+        .occupy-status-select {
+            border: 5px solid #ff182f !important;
+        }
+
+        /** 订单待支付锁定 */
+        .order-occupy-status {}
+
+        .order-occupy-status:after {
+            content: "";
+            display: block;
+            position: absolute;
+            top: 0;
+            left: 0;
+            width: 100%;
+            height: 100%;
+            background-color: rgba(0, 0, 0, 0.3);
+            z-index: -1;
+            background-image: url('../../assets/jinzhi.png');
+            background-size: 50% 50%;
+            background-position: 50% 50%;
+            background-repeat: no-repeat;
+            z-index: 99;
+        }
+
+        .occupy-status-no {
+            background-color: #f56c6c !important;
+            user-select: none;
+            // pointer-events: none;
+            cursor: not-allowed !important;
+            position: relative;
+        }
+
+        /* .occupy-status-no:after{
+            content:"";
+            display:block;
+            position:absolute;
+            top:0;
+            left:0;
+            width:100%;
+            height:100%;
+            background-color:rgba(0,0,0,0.3);
+            z-index:-1;
+            background-image: url('../../assets/jinzhi_1.png');
+            background-size: 50% 50%;
+            background-position: 50% 50%;
+            background-repeat: no-repeat;
+            z-index: 99;
+        } */
+        .seat-item-class-box {
+            width: 100%;
+            display: flex;
+            flex-wrap: nowrap;
+            justify-content: center;
+            margin: auto 0;
+            text-align: center;
+        }
+
+        .seat-item-class {
+            flex-shrink: 0;
+            display: block;
+            float: left;
+            width: 60px;
+            height: 60px;
+            margin: 5px;
+            border: 1px solid #4c4d4d;
+            border-radius: 3px;
+            cursor: pointer;
+            position: relative;
+            user-select: none;
+            // transform-origin: 50% 50%;
+            // transform: scale(var(--scaleNum));
+            z-index: 999;
+
+            &:hover {
+                opacity: 0.6;
+            }
+
+            .text-class {
+                font-size: 12px;
+                padding: 5px;
+                line-height: 16px;
+                margin: 0;
+                color: #000;
+            }
+        }
+    }
+
+    .seat-box-class-row {
+        display: flex !important;
+        align-items: center;
+        user-select: none;
+        cursor: not-allowed !important;
+        border: none !important;
+        font-weight: 600;
+        font-size: 24px;
+    }
+
+    .seat-item-class-column {
+        display: flex !important;
+        align-items: center;
+        justify-content: center;
+        user-select: none;
+        cursor: not-allowed !important;
+        border: none !important;
+        font-weight: 600;
+        font-size: 24px;
+    }
+}
+
+.dialog::-webkit-scrollbar {
+    width: 10x !important;
+    height: 10px !important;
+}
+
+.dialog::-webkit-scrollbar {
+    width: 10px;
+    height: 10px;
+    opacity: 0.5;
+}
+
+.dialog::-webkit-scrollbar-thumb {
+    border-radius: 15px;
+    //background-color: #0257aa;
+}
+
+#moveSelected {
+    position: absolute;
+    background-color: blue;
+    opacity: 0.3;
+    border: 1px dashed #d9d9d9;
+    top: 0;
+    left: 0;
+}
+</style>