MONSTER-ygh 1 سال پیش
والد
کامیت
184c075d75

+ 1 - 1
src/api/team/teamMr.js

@@ -55,7 +55,7 @@ export function getSelectById(id) {
 // 新增/修改
 export const creditGrantingApi = (data) => {
   return request({
-    url: '/member/marketTeam/quotaRecharge',
+    url: '/member/marketTeam/quotaUpdate',
     method: 'post',
     data: data
   })

BIN
src/assets/renyuan.png


+ 10 - 2
src/views/finance/refundMr/dialog/orderDetails.vue

@@ -51,9 +51,17 @@
         <el-col :span="12">
           <div class="grid-content bg-purple item-class">购票数量: <span>{{  form.viewerNum || form.viewerNum == 0 ? form.viewerNum : '' }}</span></div>
         </el-col>
-        <el-col :span="12">
+        <!-- <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> -->
+        <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.createTime || '' }}</span></div>
         </el-col>

+ 4 - 10
src/views/order/groupBuyingMr/index.vue

@@ -53,7 +53,7 @@
           style="width: 100%"
         >
           <el-option
-            v-for="dict in statusMapList"
+            v-for="dict in dict.type.order_status_type"
             :key="dict.value"
             :label="dict.name"
             :value="dict.value"
@@ -177,13 +177,7 @@
       </el-table-column>
       <el-table-column label="支付方式" align="center" prop="type">
         <template slot-scope="scope">
-          <!-- <el-tooltip placement="top">
-            <div slot="content">
-               <span>{{ payWayList[scope.row.payWay] }}</span>
-            </div>
-            <span>{{ payWayList[scope.row.payWay] }}</span>
-          </el-tooltip> -->
-          <span>{{ payWayList[scope.row.payWay] }}</span>
+          <dict-tag :options="dict.type.pay_way_type" :value="scope.row.payWay"/>
         </template>
       </el-table-column>
       <el-table-column label="支付时间" align="center" prop="payTime" width="160" >
@@ -193,7 +187,7 @@
       </el-table-column>
       <el-table-column label="订单状态" align="center" prop="type">
         <template slot-scope="scope">
-          <span>{{statusList[scope.row.status]}}</span>
+          <dict-tag :options="dict.type.order_status_type" :value="scope.row.status"/>
         </template>
       </el-table-column>
       <el-table-column label="已核销票数" align="center" prop="usedTotal">
@@ -340,7 +334,7 @@ const https = require('https');
 const axios = require('axios');
 export default {
   name: "agreement",
-  dicts: ['agreement_type', 'team_type','order_status_type'],
+  dicts: ['agreement_type', 'team_type','order_status_type','pay_way_type'],
   components: { detailsDia },
   data() {
     return {

+ 577 - 125
src/views/order/orderMr/dialog/details.vue

@@ -8,128 +8,178 @@
  * @Copyright: Copyright (c) 2016~2023 by Sugar., All Rights Reserved.
 -->
 <template>
-  <el-dialog
-    title="订单详情"
-    :visible.sync="open"
-    width="80%"
-    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.goodsName || ''}}</span></div>
-        </el-col>
-        <el-col :span="12">
-          <div class="grid-content bg-purple item-class">订单号: <span>{{ form.id || '' }}</span></div>
-        </el-col>
-        <el-col :span="12">
-          <div class="grid-content bg-purple item-class">购票人姓名: <span>{{ form.memberName || '' }}</span></div>
-        </el-col>
-        <el-col :span="12">
-          <div class="grid-content bg-purple item-class">购票人手机号: <span>{{ form.memberMobile || '' }}</span></div>
-        </el-col>
-        <el-col :span="12">
-          <div class="grid-content bg-purple item-class">购票人身份证号: <span>{{ form.memberCardId || '' }}</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.seatTypeName || '' }}</span></div>
-        </el-col>
-        <el-col :span="12">
-          <div class="grid-content bg-purple item-class">场次: <span>{{form.performDate}}   {{ form.performTimeStart }} -- {{ form.performTimeEnd }}</span></div>
-        </el-col>
-        <el-col :span="12">
-          <div style="display: flex;" class="grid-content bg-purple item-class">购票渠道: <span style="display: block;margin-left: 5px;"><dict-tag :options="dict.type.order_form_type" :value="form.source"/></span></div>
-        </el-col>
-        <el-col :span="12" v-if="form.sourceRemark">
-          <div style="display: flex;" class="grid-content bg-purple item-class">来源备注: <span style="display: block;margin-left: 5px;"> {{ form.sourceRemark }} </span></div>
-        </el-col>
-        <el-col :span="12" v-if="form.orderIdOrQrCode">
-          <div style="display: flex;" class="grid-content bg-purple item-class">核销码: <span style="display: block;margin-left: 5px;"><span>{{ form.orderIdOrQrCode }}</span></span></div>
-        </el-col>
-        <el-col :span="12">
-          <div class="grid-content bg-purple item-class">购票数量: <span>{{ form.viewerNum || form.viewerNum == 0 ? form.viewerNum : '' }}</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.createTime || '' }}</span></div>
-        </el-col>
-        <el-col :span="12">
-          <div class="grid-content bg-purple item-class">优惠信息: <span>暂无</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" style="display: flex;">支付方式: <span style="display: block;margin-left: 5px;"><dict-tag :options="dict.type.pay_way_type" :value="form.payWay"/></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;"><dict-tag :options="dict.type.order_status_type" :value="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.remark }}</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 class="title-class">观影人员信息</div>
-      <el-row>
-        <el-col :span="24">
-          <el-table ref="tables" :data="form.viewersList" 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="qrcodeUseTime" />
-            <el-table-column label="座位信息" align="center" prop="seatName" />
-            <el-table-column label="人员类别" align="center">
-              <template slot-scope="scope">
-                <dict-tag :options="dict.type.personnel_type" :value="scope.row.identity"/>
-              </template>
-            </el-table-column>
-            <el-table-column label="备注" align="center" prop="remark" />
-          </el-table>
-        </el-col>
-      </el-row>
-    </div>
+  <el-dialog title="订单详情" :visible.sync="open" width="95%" append-to-body :close-on-click-modal="false" @close="cancel">
+    <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.goodsName || '' }}</span></div>
+          </el-col>
+          <el-col :span="12">
+            <div class="grid-content bg-purple item-class">订单号: <span>{{ form.id || '' }}</span></div>
+          </el-col>
+          <el-col :span="12">
+            <div class="grid-content bg-purple item-class">购票人姓名: <span>{{ form.memberName || '' }}</span></div>
+          </el-col>
+          <el-col :span="12">
+            <div class="grid-content bg-purple item-class">购票人手机号: <span>{{ form.memberMobile || '' }}</span></div>
+          </el-col>
+          <el-col :span="12">
+            <div class="grid-content bg-purple item-class">购票人身份证号: <span>{{ form.memberCardId || '' }}</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.seatTypeName || '' }}</span></div>
+          </el-col>
+          <el-col :span="12">
+            <div class="grid-content bg-purple item-class">场次: <span>{{ form.performDate }} {{ form.performTimeStart }} --
+                {{ form.performTimeEnd }}</span></div>
+          </el-col>
+          <el-col :span="12">
+            <div style="display: flex;" class="grid-content bg-purple item-class">购票渠道: <span
+                style="display: block;margin-left: 5px;"><dict-tag :options="dict.type.order_form_type"
+                  :value="form.source" /></span></div>
+          </el-col>
+          <el-col :span="12" v-if="form.sourceRemark">
+            <div style="display: flex;" class="grid-content bg-purple item-class">来源备注: <span
+                style="display: block;margin-left: 5px;"> {{ form.sourceRemark }} </span></div>
+          </el-col>
+          <el-col :span="12" v-if="form.orderIdOrQrCode">
+            <div style="display: flex;" class="grid-content bg-purple item-class">核销码: <span
+                style="display: block;margin-left: 5px;"><span>{{ form.orderIdOrQrCode }}</span></span></div>
+          </el-col>
+          <el-col :span="12">
+            <div class="grid-content bg-purple item-class">购票数量: <span>{{ form.viewerNum || form.viewerNum == 0 ?
+              form.viewerNum : '' }}</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.createTime || '' }}</span></div>
+          </el-col>
+          <el-col :span="12">
+            <div class="grid-content bg-purple item-class">优惠信息: <span>暂无</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" style="display: flex;">支付方式: <span
+                style="display: block;margin-left: 5px;"><dict-tag :options="dict.type.pay_way_type"
+                  :value="form.payWay" /></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;"><dict-tag :options="dict.type.order_status_type"
+                  :value="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.remark }}</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>
+
 
-    <span slot="footer" class="dialog-footer">
-      <el-button type="primary" @click="cancel">确定</el-button>
-    </span>
+        <!--   观影人员信息   -->
+        <div class="title-class">观影人员信息</div>
+        <el-row>
+          <el-col :span="24">
+            <el-table ref="tables" :data="form.viewersList" border size="mini">
+              <el-table-column label="序号" align="center" type="index" width="50"></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="qrcodeUseTime" />
+              <el-table-column label="座位信息" align="center" prop="seatName" />
+              <el-table-column label="人员类别" align="center">
+                <template slot-scope="scope">
+                  <dict-tag :options="dict.type.personnel_type" :value="scope.row.identity" />
+                </template>
+              </el-table-column>
+              <el-table-column label="备注" align="center" prop="remark" />
+            </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>
 
+            </div>
+            <div style="margin-top: 5px; margin-left: 30px;display: flex;">
+              <div style="flex-shrink: 0;">
+                已勾选:{{ seatSelectList.length }}个座位
+              </div>
+            </div>
+          </div>
+        </div>
+      </div>
+    </div>
   </el-dialog>
 </template>
 
 <script>
 import { getSelectById } from '@/api/order/orderMr'
+import { querySeatList } from '@/api/team/applicationMr'
+import { pageList as getSeatType } from '@/api/seatTypeMr/seatTypeMr'
 export default {
   name: "detailsDia",
-  dicts: ['order_form_type','order_status_type','pay_way_type','personnel_type'],
+  dicts: ['order_form_type', 'order_status_type', 'pay_way_type', 'personnel_type'],
   data() {
     return {
       title: "编辑",
@@ -142,9 +192,33 @@ export default {
       performerVisible: false,
       performerList: [],
       refund: false,
-      dataList: []
+      dataList: [],
+
+
+      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: {
     /**
      * 打开弹框
@@ -158,12 +232,26 @@ export default {
       this.getSelectByIdApi(obj);
     },
     /** 获取详情 */
-    getSelectByIdApi(row) {
-      const id = row.id
-      getSelectById(id).then(response => {
-        this.$set(this,"form",response.data)
-        //this.form = response.data;
-      });
+    async getSelectByIdApi(row) {
+      try {
+        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,
+          timeId: res.data.performTimeId,
+        })
+        this.querySeatListS = res1.data;
+        this.setList = res1.data;
+        if (this.setList && this.setList.length > 0) {
+          this.setSeatMapListCopy(this.setList);
+        }
+      } catch (error) {
+
+      }
+
     },
     /**
      * 关闭弹框
@@ -173,44 +261,408 @@ 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.seatTypeId) {
+          flog = true
+        }
+      })
+      return flog
+    },
+    /** 获取座位类型 说明 */
+    getSeatTypeList() {
+      getSeatType({
+        pageNum: 1,
+        pageSize: 999,
+      })
+        .then(response => {
+          this.seatTypeList = response.data.rows;
+        });
+    },
+    /** 座位状态 展示  */
+    setSeatClass(item){
+      let srt =
+      this.setIsSelect(item)?'occupy-status-no':
+      item.occupyStatus == 0 ? 'occupy-status' : 
+      item.occupyStatus == 1 ? 'occupy-status-no' : 
+      item.isDisabled || item.status != 1 ? 'disabled-class' : 
+      item.isSelect ? 'select-class' : ''
+      return srt
+    }
   },
 };
 </script>
 
 <style lang="scss" scoped>
 .dialog {
-  padding: 0 30px;
-  max-height: 65vh;
+  width: 100%;
+  height: 70vh;
   overflow-y: auto;
 }
+
 .dialog {
-  padding: 0 30px;
   .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{
+
+  .title-class {
     font-size: 16px;
     font-weight: bold;
     color: black;
     margin-bottom: 20px;
     margin-top: 20px;
   }
-  .item-class{
+
+  .item-class {
     margin-bottom: 20px;
   }
 }
+
+.dialog-bbb {
+  width: 100%;
+  display: flex;
+  --widdd: 700px;
+
+  >div:first-child {
+    width: var(--widdd);
+    flex-shrink: 0;
+  }
+
+  .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;
+      }
+
+      .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>

+ 26 - 1
src/views/team/teamMr/dialog/addAndEdit.vue

@@ -86,7 +86,13 @@
             style="width: 100%;"
           />
         </el-form-item>
-        <el-form-item label="合约信息:">
+        <el-form-item label="是否有合同" prop="haveContract">
+          <el-radio-group v-model="form.haveContract">
+            <el-radio :label="0">无</el-radio>
+            <el-radio :label="1">有</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item v-if="form.haveContract == 1" label="合约信息:" prop="photoList">
           <el-upload
             ref="upload"
             :action="uploadObj.url"
@@ -101,6 +107,14 @@
             <i class="el-icon-plus"></i>
           </el-upload>
         </el-form-item>
+        <el-form-item v-if="form.haveContract == 0" label="无合约原因" prop="contractReason">
+          <el-input
+            v-model="form.contractReason"
+            placeholder="请输入无合约原因"
+            clearable
+            style="width: 100%;"
+          />
+        </el-form-item>
       </el-form>
     </div>
     <span slot="footer" class="dialog-footer">
@@ -154,6 +168,10 @@ export default {
         mobile: [{ required: true, message: "请输入客户账号/联系电话", trigger: ["change","blur"] }],
         salerPerson: [{ required: true, message: "请输入销售员", trigger: ["change","blur"] }],
         salerMobile: [{ required: true, message: "请输入销售员联系电话", trigger: ["change","blur"] }],
+
+        haveContract: [{ required: true, message: "请选择是否有合同", trigger: ["change","blur"] }],
+        photoList: [{ required: true, message: "请上传合约信息图片", trigger: ["change","blur"] }],
+        contractReason: [{ required: true, message: "请输入无合约原因", trigger: ["change","blur"] }],
       },
       uploadObj: {
         url: process.env.VUE_APP_UPLOAD_FILE_API + "/upload/single/minio",
@@ -197,6 +215,8 @@ export default {
             this.$set(this.form, 'salerPerson', obj.salerPerson);
             this.$set(this.form, 'salerMobile', obj.salerMobile);
             this.$set(this.form, 'checkRemark', obj.checkRemark);
+            this.$set(this.form, 'haveContract', obj.haveContract);
+            this.$set(this.form, 'contractReason', obj.contractReason);
             if(obj.contractImg){
               if(obj.contractImg.indexOf(',') > -1){
                 let img_list = obj.contractImg.split(',');
@@ -213,6 +233,9 @@ export default {
             } else {
               this.$set(this.form, 'photoList', []);
             }
+            this.$nextTick(() => {
+              this.$refs["form"].clearValidate();
+            });
           });
         });
       });
@@ -264,6 +287,8 @@ export default {
       this.$set(this.form, 'salerPerson', '');
       this.$set(this.form, 'salerMobile', '');
       this.$set(this.form, 'checkRemark', '');
+      this.$set(this.form, 'haveContract', '');
+      this.$set(this.form, 'contractReason', '');
     },
     /**
      * 关闭弹框

+ 19 - 13
src/views/team/teamMr/dialog/auditBox.vue

@@ -47,22 +47,26 @@
           <span>{{ form.password }}</span>
         </el-form-item>
         <el-form-item label="合约信息:">
-          <div 
-            v-for="(item,index) in form.photoList" 
-              :key="index"
-              style="width: 100px; height: 100px;position: relative;border: 1px solid #999;border-radius: 5px;margin-right: 20px;">
-                <el-image 
-                  style="width: 100%; height: 100%"
-                  :src="item" 
-                  :preview-src-list="form.photoList">
-                </el-image>
+          <div style="display: flex;">
+            <div 
+              v-for="(item,index) in form.photoList" 
+                :key="index"
+                style="width: 100px; height: 100px;position: relative;border: 1px solid #999;border-radius: 5px;margin-right: 20px;">
+                  <el-image 
+                    style="width: 100%; height: 100%"
+                    :src="item" 
+                    :preview-src-list="form.photoList">
+                  </el-image>
+            </div>
           </div>
         </el-form-item>
         <el-form-item label="审核备注:">
           <span style="color: #ccc;">(注意:驳回时请填写备注)</span>
         </el-form-item>
         <el-form-item label="" :error="errorText" prop="checkRemark">
+          <span v-if="model != 'Audit'">{{ form.checkRemark}}</span>
           <el-input
+            v-if="model == 'Audit'"
             v-model="form.checkRemark"
             type="textarea"
             placeholder="审核备注"
@@ -73,7 +77,7 @@
         </el-form-item>
       </el-form>
     </div>
-    <span slot="footer" class="dialog-footer">
+    <span slot="footer" class="dialog-footer" v-if="model == 'Audit'">
       <div style="display: flex;justify-content: center;">
         <el-button
           type="danger"
@@ -151,15 +155,17 @@ export default {
      * @param {any} obj
      * @returns {any}
      */
-    openDialog(title, obj) {
+    openDialog(title, obj,type) {
       this.open = true;
       this.errorText = ''
+      this.model = type
+      this.title = title;
       this.reset();
       if (obj){
-        this.title = "编辑团队";
+        this.title = title;
         this.getSelectByIdApi(obj);
       }else{
-        this.title = "添加团队";
+        this.title = title;
         this.$nextTick(() => {
           this.$refs["form"].clearValidate();
         });

+ 43 - 6
src/views/team/teamMr/index.vue

@@ -25,6 +25,24 @@
           />
         </el-select>
       </el-form-item>
+      <el-form-item label="销售员" label-width="70px">
+        <el-input
+          v-model="queryParams.salerPerson"
+          placeholder="请输入销售员"
+          clearable
+          style="width: 140px;"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="创建人" label-width="70px">
+        <el-input
+          v-model="queryParams.createBy"
+          placeholder="请输入创建人"
+          clearable
+          style="width: 140px;"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
       <el-form-item>
         <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
         <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
@@ -86,7 +104,13 @@
         <template slot-scope="scope">
           <el-tag type="info" v-if="scope.row.checkStatus == 0">待审核</el-tag>
           <el-tag type="success" v-if="scope.row.checkStatus == 1">审核成功</el-tag>
-          <el-tag type="danger" v-if="scope.row.checkStatus == 2">审核不通过</el-tag>
+          <el-popover
+            placement="top-start"
+            width="200"
+            trigger="hover"
+            :content="'驳回原因:'+scope.row.checkRemark">
+            <el-tag slot="reference" type="danger" v-if="scope.row.checkStatus == 2">审核不通过</el-tag>
+          </el-popover>
         </template>
       </el-table-column>
       <el-table-column label="审核时间" align="center" prop="checkTime" />
@@ -96,22 +120,29 @@
           <el-button
             size="mini"
             type="text"
-            @click="handleAudit(scope.row)"
+            @click="handleAudit(scope.row,'details')"
+            v-hasPermi="['teamMr:teamMr:edit']"
+          >详情</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            @click="handleAudit(scope.row,'Audit')"
             v-hasPermi="['teamMr:teamMr:edit']"
-            v-if="scope.row.checkStatus == 0"
+            v-if="scope.row.checkStatus == 0 && name!=scope.row.createBy"
           >审核</el-button>
           <el-button
             size="mini"
             type="text"
             @click="handleUpdate(scope.row)"
             v-hasPermi="['teamMr:teamMr:edit']"
-            v-if="scope.row.checkStatus == 2"
+            v-if="scope.row.checkStatus == 2 && name==scope.row.createBy" 
           >修改重新提交</el-button>
           <el-button
             size="mini"
             type="text"
             @click="handleDelete(scope.row,scope.index)"
             v-hasPermi="['teamMr:teamMr:delete']"
+            v-if="(scope.row.checkStatus == 1 && name!=scope.row.createBy)||scope.row.checkStatus != 1"
           >删除</el-button>
           <el-dropdown v-if="scope.row.checkStatus == 1" size="mini" @command="(command) => handleCommand(command, scope.row,scope.index)">
             <el-button size="mini" type="text" icon="el-icon-d-arrow-right">更多</el-button>
@@ -190,6 +221,7 @@ import addAndEdit from "./dialog/addAndEdit.vue";
 import creditGranting from './dialog/creditGranting.vue';
 import rechargeBox from './dialog/rechargeBox.vue';
 import auditBox from './dialog/auditBox.vue';
+import { mapGetters } from 'vuex'
 export default {
   name: "agreement",
   dicts: ['team_type'],
@@ -233,6 +265,11 @@ export default {
       visibleType: ''
     };
   },
+  computed: {
+    ...mapGetters([
+      'name',
+    ]),
+  },
   created() {
     this.getList();
   },
@@ -277,8 +314,8 @@ export default {
       this.$refs["addAndEdit"].openDialog("修改数据", row);
     },
     /** 详情 或 审核  */
-    handleAudit(row) {
-      this.$refs["auditBox"].openDialog("审核数据", row);
+    handleAudit(row,type) {
+      this.$refs["auditBox"].openDialog("审核数据", row, type);
     },
     /** 启用或者禁用按钮操作 */
     updateStatusApi(row) {

+ 6 - 5
src/views/windowTicketSales/model/increaseViewers.vue

@@ -173,7 +173,7 @@
                     <el-radio-group v-model="ruleForm.paymentType">
                         <el-radio label="1">扫码</el-radio>
                         <el-radio label="2">现金</el-radio>
-                        <el-radio label="3">对公支付</el-radio>
+                        <el-radio v-if="['10','11','13','14'].includes(ruleForm.source)" label="3">对公支付</el-radio>
                     </el-radio-group>
                 </el-form-item>
                 <el-form-item label="应付金额 :">
@@ -517,10 +517,11 @@ import {
                     return 
                 }
             }
-            this.factorAuthFun(index,this.tableForm)
-            // this.$set(this.viewerList,index,JSON.parse(JSON.stringify(this.tableForm)))
-            // this.actionIndex = null
-            // this.setMoneyAll()
+        
+            //this.factorAuthFun(index,this.tableForm)
+            this.$set(this.viewerList,index,JSON.parse(JSON.stringify(this.tableForm)))
+            this.actionIndex = null
+            this.setMoneyAll()
         },
         /**  校验 身份证 */
         async factorAuthFun(index, obj){