Jelajahi Sumber

1. 新增座位图

MONSTER-ygh 1 tahun lalu
induk
melakukan
22b00d520f

+ 587 - 120
src/views/order/groupBuyingMr/dialog/details.vue

@@ -11,119 +11,165 @@
   <el-dialog
     title="订单详情"
     :visible.sync="open"
-    width="800px"
+    width="96%"
     append-to-body
     :close-on-click-modal="false"
     @close="cancel"
   >
-    <div class="dialog" v-if="form">
-      <!--   基础信息   -->
-      <div class="title-class" style="margin-top: 0">基础信息</div>
-      <el-row>
-        <el-col :span="12">
-          <div class="grid-content bg-purple item-class">团队名称: <span>{{ form.teamName || ''}}</span></div>
-        </el-col>
-        <el-col :span="12">
-          <div class="grid-content bg-purple item-class">团队类型: <span><dict-tag style="display: inline-block" :options="dict.type.team_type" :value="form.teamType"/></span></div>
-        </el-col>
-        <el-col :span="12">
-          <div class="grid-content bg-purple item-class">预约场馆: <span>{{ form.theatreName || '' }}</span></div>
-        </el-col>
-        <el-col :span="12">
-          <div class="grid-content bg-purple item-class">预约演出厅: <span>{{ form.auditoriumName || '' }}</span></div>
-        </el-col>
-        <el-col :span="12">
-          <div class="grid-content bg-purple item-class">预约剧目: <span>{{ form.performName || '' }}</span></div>
-        </el-col>
-        <el-col :span="12">
-          <div class="grid-content bg-purple item-class">票务名称: <span>{{ form.goodsName || '' }}</span></div>
-        </el-col>
-        <el-col :span="12">
-          <div class="grid-content bg-purple item-class">座位类型: <span>{{ form.seatTypeName || '' }}</span></div>
-        </el-col>
-        <el-col :span="12">
-          <div class="grid-content bg-purple item-class">团购单价: <span v-if="form.price">¥{{ form.price || '' }}/人</span></div>
-        </el-col>
-        <el-col :span="12">
-          <div class="grid-content bg-purple item-class">预约时间: <span v-if="form.performDate">{{ form.performDate + "  " || '' }}{{ form.performTimeStart +'  --'  || '' }}{{ form.performTimeEnd || '' }}</span></div>
-        </el-col>
-        <el-col :span="12">
-          <div class="grid-content bg-purple item-class">报名时间: <span>{{ form.applyTime || '' }}</span></div>
-        </el-col>
-        <el-col :span="12">
-          <div class="grid-content bg-purple item-class">负责人: <span>{{ form.teamContact || '' }}</span></div>
-        </el-col>
-        <el-col :span="12">
-          <div class="grid-content bg-purple item-class">联系电话: <span>{{ form.teamMobile || '' }}</span></div>
-        </el-col>
-        <!-- <el-col :span="12">
-          <div class="grid-content bg-purple item-class">支付总额: <span>¥{{ form.orderPrice || '' }}</span></div>
-        </el-col> -->
-        <el-col :span="12">
-          <div class="grid-content bg-purple item-class">应付金额: <span>¥{{ form.orderPrice || form.orderPrice == 0 ? form.orderPrice : '' }}</span></div>
-        </el-col>
-        <el-col :span="12">
-          <div class="grid-content bg-purple item-class">实付金额: <span>¥{{ form.realPrice || form.realPrice == 0 ? form.realPrice : '' }}</span></div>
-        </el-col>
-        <el-col :span="12">
-          <div class="grid-content bg-purple item-class">团购人数: <span>{{ form.quantity || '' }}</span></div>
-        </el-col>
-        <el-col :span="12">
-          <div class="grid-content bg-purple item-class">支付时间: <span>{{ form.payTime || '' }}</span></div>
-        </el-col>
-        <el-col :span="12">
-          <div class="grid-content bg-purple item-class">支付方式: <span>{{ payWayList[form.payWay] || '' }}</span></div>
-        </el-col>
-        <el-col :span="12">
-          <div class="grid-content bg-purple item-class">订单状态: <span>{{ statusList[form.status] || '' }}</span></div>
-        </el-col>
-        <el-col :span="12">
-          <div class="grid-content bg-purple item-class" style="display: flex;">是否成功开票: <span style="display: block;margin-left: 5px;">{{ form.ifSuccessInvoice=='1'?'是':'否'  }}</span></div>
-        </el-col>
-      </el-row>
-
-      <!-- 对公支付信息 -->
-      <div v-if="form.payWay=='corporate'&&form.status>0&&form.corporate">
-        <div class="title-class">对公支付信息</div>
-          <el-row>
-            <el-col :span="24">
-              <div class="voucher-list">
-                <el-image 
-                  v-for="(item,index) in voucherUrl" :key="index"
-                  style="width: 100px; height: 100px"
-                  :src="item" 
-                  :preview-src-list="voucherUrl">
-                </el-image>
+    <div v-loading="loading" class="dialog dialog-bbb" v-if="form">
+      <div>
+        <!--   基础信息   -->
+        <div class="title-class" style="margin-top: 0">基础信息</div>
+        <el-row>
+          <el-col :span="12">
+            <div class="grid-content bg-purple item-class">团队名称: <span>{{ form.teamName || ''}}</span></div>
+          </el-col>
+          <el-col :span="12">
+            <div class="grid-content bg-purple item-class">团队类型: <span><dict-tag style="display: inline-block" :options="dict.type.team_type" :value="form.teamType"/></span></div>
+          </el-col>
+          <el-col :span="12">
+            <div class="grid-content bg-purple item-class">预约场馆: <span>{{ form.theatreName || '' }}</span></div>
+          </el-col>
+          <el-col :span="12">
+            <div class="grid-content bg-purple item-class">预约演出厅: <span>{{ form.auditoriumName || '' }}</span></div>
+          </el-col>
+          <el-col :span="12">
+            <div class="grid-content bg-purple item-class">预约剧目: <span>{{ form.performName || '' }}</span></div>
+          </el-col>
+          <el-col :span="12">
+            <div class="grid-content bg-purple item-class">票务名称: <span>{{ form.goodsName || '' }}</span></div>
+          </el-col>
+          <el-col :span="12">
+            <div class="grid-content bg-purple item-class">座位类型: <span>{{ form.seatTypeName || '' }}</span></div>
+          </el-col>
+          <el-col :span="12">
+            <div class="grid-content bg-purple item-class">团购单价: <span v-if="form.price">¥{{ form.price || '' }}/人</span></div>
+          </el-col>
+          <el-col :span="12">
+            <div class="grid-content bg-purple item-class">预约时间: <span v-if="form.performDate">{{ form.performDate + "  " || '' }}{{ form.performTimeStart +'  --'  || '' }}{{ form.performTimeEnd || '' }}</span></div>
+          </el-col>
+          <el-col :span="12">
+            <div class="grid-content bg-purple item-class">报名时间: <span>{{ form.applyTime || '' }}</span></div>
+          </el-col>
+          <el-col :span="12">
+            <div class="grid-content bg-purple item-class">负责人: <span>{{ form.teamContact || '' }}</span></div>
+          </el-col>
+          <el-col :span="12">
+            <div class="grid-content bg-purple item-class">联系电话: <span>{{ form.teamMobile || '' }}</span></div>
+          </el-col>
+          <!-- <el-col :span="12">
+            <div class="grid-content bg-purple item-class">支付总额: <span>¥{{ form.orderPrice || '' }}</span></div>
+          </el-col> -->
+          <el-col :span="12">
+            <div class="grid-content bg-purple item-class">应付金额: <span>¥{{ form.orderPrice || form.orderPrice == 0 ? form.orderPrice : '' }}</span></div>
+          </el-col>
+          <el-col :span="12">
+            <div class="grid-content bg-purple item-class">实付金额: <span>¥{{ form.realPrice || form.realPrice == 0 ? form.realPrice : '' }}</span></div>
+          </el-col>
+          <el-col :span="12">
+            <div class="grid-content bg-purple item-class">团购人数: <span>{{ form.quantity || '' }}</span></div>
+          </el-col>
+          <el-col :span="12">
+            <div class="grid-content bg-purple item-class">支付时间: <span>{{ form.payTime || '' }}</span></div>
+          </el-col>
+          <el-col :span="12">
+            <div class="grid-content bg-purple item-class">支付方式: <span>{{ payWayList[form.payWay] || '' }}</span></div>
+          </el-col>
+          <el-col :span="12">
+            <div class="grid-content bg-purple item-class">订单状态: <span>{{ statusList[form.status] || '' }}</span></div>
+          </el-col>
+          <el-col :span="12">
+            <div class="grid-content bg-purple item-class" style="display: flex;">是否成功开票: <span style="display: block;margin-left: 5px;">{{ form.ifSuccessInvoice=='1'?'是':'否'  }}</span></div>
+          </el-col>
+        </el-row>
+
+        <!-- 对公支付信息 -->
+        <div v-if="form.payWay=='corporate'&&form.status>0&&form.corporate">
+          <div class="title-class">对公支付信息</div>
+            <el-row>
+              <el-col :span="24">
+                <div class="voucher-list">
+                  <el-image 
+                    v-for="(item,index) in voucherUrl" :key="index"
+                    style="width: 100px; height: 100px"
+                    :src="item" 
+                    :preview-src-list="voucherUrl">
+                  </el-image>
+                </div>
+              </el-col>
+              <el-col class="pay-type-remark" :span="24">
+                对公支付备注:{{corporateRremark}}
+              </el-col>
+            </el-row>
+        </div>
+
+        <!--   观影人员信息   -->
+        <div class="title-class">观影人员信息</div>
+        <el-row>
+          <el-col :span="24">
+            <el-table ref="tables" :data="form.viewersOrderList" border>
+              <el-table-column label="序号" align="center" type="index" width="60"></el-table-column>
+              <el-table-column label="姓名" align="center" prop="name" />
+              <el-table-column label="身份证号码" align="center" prop="idCard" />
+              <el-table-column label="核销状态" align="center">
+                <template slot-scope="scope">
+                  <dict-tag :options="dict.type.order_status_type" :value="scope.row.status"/>
+                  <!-- <el-tag v-if="scope.row.qrcodeStatus == 0">未使用</el-tag>
+                  <el-tag v-if="scope.row.qrcodeStatus == 1" type="success">已使用</el-tag>
+                  <el-tag v-if="scope.row.qrcodeStatus == 2" type="info">过期</el-tag> -->
+                </template>
+              </el-table-column>
+              <el-table-column label="核销时间" align="center" prop="useTime" />
+              <el-table-column label="座位信息" align="center" prop="seatName" />
+              <el-table-column label="座位类型" align="center" prop="seatTypeName" />
+            </el-table>
+          </el-col>
+        </el-row>
+      </div>
+      <div class="dialog-bbb_2">
+        <div class="seat-tool-box">
+          <span class="demonstration">座位大小</span>
+          <div class="seat-tool-box-slider">
+            <el-slider v-model="scaleNum" :min="30" :max="100"></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">
+            <!--  座位排版  -->
+            <div id="seatbox-me" ref="seatbox" class="dialogss">
+              <div class="dialogss-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"
+                      :class="setSeatClass(item)"
+                      v-for="(item, index) in seatMapList[item1.key]"
+                      :style="{ backgroundColor: item.color ? item.color : 'none' }" @click.stop="seatClick(item)"
+                      :key="index">
+                      <p class="text-class">{{ item.status != 1 ? '不可售' : (item.name ? item.name : '暂未命名') }}</p>
+                    </div>
+                  </div>
+                </div>
               </div>
-            </el-col>
-            <el-col class="pay-type-remark" :span="24">
-              对公支付备注:{{corporateRremark}}
-            </el-col>
-          </el-row>
-       </div>
-
-      <!--   观影人员信息   -->
-      <div class="title-class">观影人员信息</div>
-      <el-row>
-        <el-col :span="24">
-          <el-table ref="tables" :data="form.viewersOrderList" border>
-            <el-table-column label="序号" align="center" type="index" width="60"></el-table-column>
-            <el-table-column label="姓名" align="center" prop="name" />
-            <el-table-column label="身份证号码" align="center" prop="idCard" />
-            <el-table-column label="核销状态" align="center">
-              <template slot-scope="scope">
-                <dict-tag :options="dict.type.order_status_type" :value="scope.row.status"/>
-                <!-- <el-tag v-if="scope.row.qrcodeStatus == 0">未使用</el-tag>
-                <el-tag v-if="scope.row.qrcodeStatus == 1" type="success">已使用</el-tag>
-                <el-tag v-if="scope.row.qrcodeStatus == 2" type="info">过期</el-tag> -->
-              </template>
-            </el-table-column>
-            <el-table-column label="核销时间" align="center" prop="useTime" />
-            <el-table-column label="座位信息" align="center" prop="seatName" />
-          </el-table>
-        </el-col>
-      </el-row>
-       
+
+            </div>
+            <div style="margin-top: 5px; margin-left: 30px;display: flex;">
+              <div style="flex-shrink: 0;">
+                已勾选:{{ seatSelectList.length }}个座位
+              </div>
+            </div>
+          </div>
+        </div>
+      </div>
     </div>
 
 
@@ -136,6 +182,8 @@
 
 <script>
 import { getSelectById } from '@/api/order/groupBuyingMr'
+import { querySeatList } from '@/api/team/applicationMr'
+import { pageList as getSeatType } from '@/api/seatTypeMr/seatTypeMr'
 export default {
   name: "detailsDia",
   props: {
@@ -191,9 +239,33 @@ export default {
         5: '团购',
       },
       dataList: [],
-      voucherUrl:[]
+      voucherUrl:[],
+
+
+      merchantTheatreAuditoriumListS: [], // 演出厅
+      merchantPerformTimeListS: [], // 场次
+      querySeatListS: [], // 座位
+      goodsPageListS: [], // 票务
+      goodsPageListSAll: [], // 票务全部
+      setList: [],
+      seatMapList: {},
+      seatMapListKey: [], // key
+      seatSelectList: [],
+
+      lockOrUnLockLoading: false,
+
+      performId: '',// 剧目ID
+      scaleNum: 30,
+
+      width: 0,
+      justifyContent: false,
+      activeName: 'first',
+      seatTypeList: [],
     };
   },
+  created() {
+    this.getSeatTypeList()
+  },
   methods: {
     /**
      * 打开弹框
@@ -206,15 +278,31 @@ export default {
       this.getSelectByIdApi(obj);
     },
     /** 获取详情 */
-    getSelectByIdApi(row) {
-      const id = row.id
-      getSelectById(id).then(response => {
-        this.form = response.data;
-        if(response.data.corporate){
-          this.voucherUrl = response.data.corporate.voucherUrl.split(',')||[];
-          this.corporateRremark =  response.data.corporate.remark;
+    async getSelectByIdApi(row) {
+      try {
+        this.loading = true
+        const id = row.id
+        let res = await getSelectById(id)
+        this.form = res.data;
+        if(res.data.corporate){
+          this.voucherUrl = res.data.corporate.voucherUrl.split(',')||[];
+          this.corporateRremark =  res.data.corporate.remark;
         }
-      });
+        let res1 = await querySeatList({
+          auditoriumId: res.data.auditoriumId,
+          //seatTypeId: res.data.seatTypeId,
+          timeId: res.data.performTimeId,
+        })
+        this.querySeatListS = res1.data;
+        this.setList = res1.data;
+        if (this.setList && this.setList.length > 0) {
+          this.setSeatMapListCopy(this.setList);
+        }
+        this.loading = false
+      } catch (error) {
+        this.loading = false
+      }
+      
     },
     /**
      * 关闭弹框
@@ -224,15 +312,109 @@ export default {
     cancel() {
       this.open = false;
     },
+    // 设置座位集合
+    setSeatMapListCopy(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 != 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) {
+                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
+        this.$nextTick(() => {
+          if (this.$refs.seatbox) {
+            var ele = document.getElementById('seatbox-me');
+            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)
+        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.seatId) {
+          flog = true
+        }
+      })
+      return flog
+    },
+    /** 获取座位类型 说明 */
+    getSeatTypeList() {
+      getSeatType({
+        pageNum: 1,
+        pageSize: 999,
+      })
+        .then(response => {
+          this.seatTypeList = response.data.rows;
+        });
+    },
+    /** 座位状态 展示  */
+    setSeatClass(item){
+      let srt =
+      this.setIsSelect(item)?'purchased-status':
+      item.occupyStatus == 0 ? 'occupy-status' : 
+      item.occupyStatus == 1 ? 'occupy-status-no' : 
+      item.isDisabled || item.status != 1 ? 'disabled-class' : 
+      item.isSelect ? 'select-class' : ''
+      console.log("srt=====",srt)
+      return srt
+    }
   },
 };
 </script>
 
 <style lang="scss" scoped>
 .dialog {
-  padding: 0 30px;
-  max-height: 65vh;
-  overflow-y: auto;
+  width: 100%;
+  height: 70vh;
 }
 .dialog {
   padding: 0 30px;
@@ -273,4 +455,289 @@ export default {
 .pay-type-remark{
   margin:14px 0;
 }
+
+.dialog-bbb {
+  width: 100%;
+  display: flex;
+  --widdd: 700px;
+
+  >div:first-child {
+    width: var(--widdd);
+    flex-shrink: 0;
+    overflow-y: auto;
+    padding: 0 0 10px 0;
+    margin-right: 10px;
+  }
+
+  .dialog-bbb_2 {
+    width: calc(100% - var(--widdd));
+    height: 100%;
+  }
+}
+
+.dialog-bbb_2 {
+  .seat-tool-box {
+    height: 20px;
+    box-sizing: border-box;
+    display: flex;
+    align-items: center;
+    white-space: nowrap;
+
+    span {
+      flex-shrink: 0;
+      font-size: 12px;
+      white-space: nowrap;
+    }
+
+    .seat-tool-box-slider {
+      width: 100px;
+      margin-left: 10px;
+    }
+  }
+
+  .seat-box {
+    width: 100%;
+    height: calc(100% - 50px);
+    box-sizing: border-box;
+    display: flex;
+    position: relative;
+
+    .seat-list-box {
+      width: 100%;
+      height: 100%;
+      box-sizing: border-box;
+      position: relative;
+    }
+
+    .seat-select-box {
+      width: 200px;
+      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;
+  }
+
+  .dialogss {
+    padding: 30px 10px 10px;
+    width: 100%;
+    height: 100%;
+    box-sizing: border-box;
+    overflow: auto;
+    border-radius: 10px;
+    border: 1px solid #323333;
+
+    .dialogss-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;
+
+      .disabled-class {
+        background-color: #aaabad;
+        user-select: none;
+        // pointer-events: none;
+        cursor: not-allowed !important;
+      }
+
+      .select-class {
+        //background-color: #e85353 !important;
+        border: 5px solid #1890ff !important;
+        // color: #eceaea !important;
+        position: relative;
+      }
+
+      .purchased-status:after {
+        content: "";
+        display: block;
+        position: absolute;
+        top: 0;
+        left: 0;
+        width: 100%;
+        height: 100%;
+        background-color: rgba(0, 0, 0, 0.5);
+        z-index: -1;
+        background-image: url('../../../../assets/renyuan.png');
+        background-size: 50% 50%;
+        background-position: 50% 50%;
+        background-repeat: no-repeat;
+        z-index: 99;
+      }
+
+      .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 {
+        //pointer-events: none;
+      }
+
+      .occupy-status-no {
+        background-color: #f56c6c !important;
+        user-select: none;
+        // pointer-events: none;
+        cursor: not-allowed !important;
+      }
+
+      .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));
+        &:hover {
+          opacity: 0.6;
+        }
+
+        .text-class {
+          font-size: 12px;
+          padding: 5px;
+          line-height: 16px;
+          margin: 0;
+          color: #000;
+        }
+      }
+    }
+  }
+}
 </style>

+ 29 - 6
src/views/order/orderMr/dialog/details.vue

@@ -8,7 +8,7 @@
  * @Copyright: Copyright (c) 2016~2023 by Sugar., All Rights Reserved.
 -->
 <template>
-  <el-dialog title="订单详情" :visible.sync="open" width="95%" append-to-body :close-on-click-modal="false" @close="cancel">
+  <el-dialog title="订单详情" :visible.sync="open" width="96%" append-to-body :close-on-click-modal="false" @close="cancel">
     <div v-loading="loading" class="dialog dialog-bbb" v-if="form">
       <div>
         <!--   基础信息   -->
@@ -115,6 +115,7 @@
               </el-table-column>
               <el-table-column label="核销时间" align="center" prop="qrcodeUseTime" />
               <el-table-column label="座位信息" align="center" prop="seatName" />
+              <el-table-column label="座位类型" align="center" prop="seatTypeName" />
               <el-table-column label="人员类别" align="center">
                 <template slot-scope="scope">
                   <dict-tag :options="dict.type.personnel_type" :value="scope.row.identity" />
@@ -234,13 +235,14 @@ export default {
     /** 获取详情 */
     async getSelectByIdApi(row) {
       try {
+        this.loading = true
         const id = row.id
         let res = await getSelectById(id)
         this.seatSelectList = res.data.viewersList
         this.$set(this, "form", res.data)
         let res1 = await querySeatList({
           auditoriumId: res.data.auditoriumId,
-          seatTypeId: res.data.seatTypeId,
+          //seatTypeId: res.data.seatTypeId,
           timeId: res.data.performTimeId,
         })
         this.querySeatListS = res1.data;
@@ -248,8 +250,9 @@ export default {
         if (this.setList && this.setList.length > 0) {
           this.setSeatMapListCopy(this.setList);
         }
+        this.loading = false
       } catch (error) {
-
+        this.loading = false
       }
 
     },
@@ -329,7 +332,7 @@ export default {
       }
       let flog = false
       this.seatSelectList.forEach((item1, index1) => {
-        if (item.id == item1.seatTypeId) {
+        if (item.id == item1.seatId) {
           flog = true
         }
       })
@@ -348,11 +351,12 @@ export default {
     /** 座位状态 展示  */
     setSeatClass(item){
       let srt =
-      this.setIsSelect(item)?'occupy-status-no':
+      this.setIsSelect(item)?'purchased-status':
       item.occupyStatus == 0 ? 'occupy-status' : 
       item.occupyStatus == 1 ? 'occupy-status-no' : 
       item.isDisabled || item.status != 1 ? 'disabled-class' : 
       item.isSelect ? 'select-class' : ''
+      console.log("srt=====",srt)
       return srt
     }
   },
@@ -363,7 +367,6 @@ export default {
 .dialog {
   width: 100%;
   height: 70vh;
-  overflow-y: auto;
 }
 
 .dialog {
@@ -409,6 +412,9 @@ export default {
   >div:first-child {
     width: var(--widdd);
     flex-shrink: 0;
+    overflow-y: auto;
+    padding: 0 0 10px 0;
+    margin-right: 10px;
   }
 
   .dialog-bbb_2 {
@@ -598,6 +604,23 @@ export default {
         position: relative;
       }
 
+      .purchased-status:after {
+        content: "";
+        display: block;
+        position: absolute;
+        top: 0;
+        left: 0;
+        width: 100%;
+        height: 100%;
+        background-color: rgba(0, 0, 0, 0.5);
+        z-index: -1;
+        background-image: url('../../../../assets/renyuan.png');
+        background-size: 50% 50%;
+        background-position: 50% 50%;
+        background-repeat: no-repeat;
+        z-index: 99;
+      }
+
       .occupy-status:after {
         content: "";
         display: block;

+ 9 - 4
src/views/team/teamMr/dialog/auditBox.vue

@@ -42,11 +42,16 @@
             <span style="display: flex ; min-width: 300px;">{{ form.mobile }}</span>
           </el-form-item>
         </div>
-        
-        <el-form-item label="密码">
+        <el-form-item label="是否有合同">
+          <span>{{ form.haveContract==0?'无':'有' }}</span>
+        </el-form-item>
+        <!-- <el-form-item label="密码">
           <span>{{ form.password }}</span>
+        </el-form-item> -->
+        <el-form-item label="无合约原因" >
+          <span>{{ form.contractReason }}</span>
         </el-form-item>
-        <el-form-item label="合约信息:">
+        <el-form-item v-if="form.haveContract==1" label="合约信息:">
           <div style="display: flex;">
             <div 
               v-for="(item,index) in form.photoList" 
@@ -194,7 +199,7 @@ export default {
     async submitForm(type) {
       try {
             if(type==2 && !this.form.checkRemark){
-              this.errorText = '驳请填写备注'
+              this.errorText = '驳请填写备注'
               return
             }else {
               this.errorText = ''