Sfoglia il codice sorgente

团队订单和座位左右排序修改以及bug修改和新需求

zhongzhao 1 anno fa
parent
commit
6a45c27318

+ 1 - 0
package.json

@@ -56,6 +56,7 @@
     "formidable": "^2.1.1",
     "fuse.js": "6.4.3",
     "highlight.js": "9.18.5",
+    "html2canvas": "^1.4.1",
     "js-beautify": "1.13.0",
     "js-cookie": "3.0.1",
     "jsencrypt": "3.0.0-rc.1",

+ 9 - 0
src/api/distribution/personnelMr.js

@@ -75,3 +75,12 @@ export const posterUpdate = (data) => {
     data: data
   })
 }
+
+//我的推广码
+export function getRetailQrcode(query) {
+  return request({
+    url: '/member/marketPersons/getRetailQrcode',
+    method: 'get',
+    params: query
+  })
+}

+ 19 - 0
src/api/order/groupBuyingMr.js

@@ -0,0 +1,19 @@
+import request from '@/utils/request'
+
+// 分页查询
+export const pageList = (query) => {
+  return request({
+    url: '/order/orderInfo/teamOrderlist',
+    method: 'get',
+    params: query
+  })
+}
+
+
+// id获取详情
+export function getSelectById(id) {
+  return request({
+    url: '/order/orderInfo/teamOrderDetail?id=' + id,
+    method: 'get'
+  })
+}

+ 9 - 0
src/api/team/applicationMr.js

@@ -76,3 +76,12 @@ export function getOrderDetail(id) {
     method: 'get'
   })
 }
+
+// 查询价格
+export function queryPrice(query) {
+  return request({
+    url: '/member/marketTeamBrokerageConfig/queryPrice',
+    method: 'get',
+    params: query
+  })
+}

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

@@ -38,7 +38,7 @@ export const deleteById = (id) => {
 
 export function getSelectById(id) {
   return request({
-    url: '/member/marketTeam/selectById?id=' + id,
+    url: '/member/marketTeamBrokerageConfig/selectById?id=' + id,
     method: 'get'
   })
 }

+ 3 - 1
src/views/distribution/personnelMr/dialog/addAndEdit.vue

@@ -49,7 +49,7 @@
             style="width: 100%;"
           />
         </el-form-item>
-        <el-form-item label="联系电话:" prop="mobile">
+        <el-form-item label="账号/联系电话:" prop="mobile">
           <el-input
             v-model="form.mobile"
             placeholder="联系电话"
@@ -62,6 +62,7 @@
             show-password
             v-model="form.password"
             placeholder="密码"
+            autocomplete="new-password"
             clearable
             style="width: 100%;"
           />
@@ -191,6 +192,7 @@ export default {
       this.$set(this.form, 'type', '');
       this.$set(this.form, 'contact', '');
       this.$set(this.form, 'mobile', '');
+      this.$set(this.form, 'password', '');
     },
     /**
      * 关闭弹框

+ 44 - 18
src/views/distribution/personnelMr/index.vue

@@ -74,7 +74,7 @@
         </template>
       </el-table-column>
       <el-table-column label="负责人" align="center" prop="contact" />
-      <el-table-column label="手机号" align="center" prop="mobile" />
+      <el-table-column label="账号/联系电话" align="center" prop="mobile" />
       <el-table-column label="佣金总额" align="center" prop="brokerageTotal">
         <template slot-scope="scope">
           <span v-if="scope.row.brokerageTotal">¥{{ scope.row.brokerageTotal }}</span>
@@ -156,19 +156,16 @@
       :destroy-on-close="true"
       :close-on-click-modal="false"
     >
-      <div v-if="visibleType == 'img'">
+      <div id="capture" style="width: 400px; height: 500px; position: relative;background-size: cover;background-repeat: no-repeat" :style="{backgroundImage:'url('+newObj.posterImg+')'}">
         <el-image
-          style="width: 400px; height: 100%"
-          :src="newObj.retailQrcode"
+          style="width: 180px; height: 180px; position: absolute; bottom: 0; right: 0;"
+          :src="newObj.url"
           fit="cover"
         />
       </div>
-      <div v-if="visibleType == 'html'">
-        <div v-html="newObj.centent"></div>
-      </div>
       <div slot="footer" class="dialog-footer">
         <el-button @click="visibleStatus = false">取 消</el-button>
-        <el-button type="primary" @click="codeDownload(newObj)">下 载</el-button>
+        <el-button type="primary" @click="getShareImgBase64(newObj)">下 载</el-button>
       </div>
     </el-dialog>
 
@@ -229,13 +226,20 @@
 
 <script>
 
-import { pageList, deleteById, updateStatus, configUpdate, getSetInfo } from '@/api/distribution/personnelMr'
+import { pageList, deleteById, updateStatus, configUpdate, getSetInfo, getRetailQrcode } from '@/api/distribution/personnelMr'
 import addAndEdit from "./dialog/addAndEdit.vue";
 import promotionCode from "./dialog/promotionCode.vue";
 import { Message } from 'element-ui'
+import * as url from 'url'
+import html2canvas from 'html2canvas'
 
 export default {
   name: "agreement",
+  computed: {
+    url() {
+      return url
+    }
+  },
   dicts: ['distribution_type'],
   components: { addAndEdit, promotionCode },
   data() {
@@ -355,6 +359,15 @@ export default {
       });
     },
 
+    /** 获取推广码 */
+    getRetailQrcodeApi(row) {
+      getRetailQrcode({personsId: row.id}).then(response => {
+        const obj = response.data;
+        this.newObj = obj;
+        this.newObj.name = row.name;
+      });
+    },
+
     /**
      * 分析提现
      * @date 2023-11-22
@@ -430,19 +443,15 @@ export default {
     },
     /** 推广码按钮操作 */
     handleCode(obj, type) {
-      console.log(obj)
+      this.getRetailQrcodeApi(obj);
       this.visibleStatus = true
-      this.visibleType = type;
-      this.newObj = obj;
     },
     // 推广码下载
     codeDownload(row) {
-      let url = row.retailQrcode || ''
-      let name = row.name + '的推广码' || ''
-      if(url.indexOf("://") > -1){
-        let urlU = url.split("://")
+      let name = this.newObj.name + '的推广码' || ''
+      if(row){
         let a = document.createElement("a");
-        a.href = "https://" + urlU[1];
+        a.href = row;
         if(name.indexOf(".") > -1){
           a.download = name;
         } else {
@@ -453,7 +462,24 @@ export default {
         a.click();
         a.remove();
       }
-    }
+    },
+    // 推广码 base64
+    getShareImgBase64() {
+      return new Promise((resolve) => {
+        setTimeout(() => {
+          // #capture 就是我们要获取截图对应的 DOM 元素选择器
+          html2canvas(document.querySelector('#capture'), {
+            useCORS: true, // 【重要】开启跨域配置
+            scale: window.devicePixelRatio < 3 ? window.devicePixelRatio : 2,
+            allowTaint: true, // 允许跨域图片
+          }).then((canvas) => {
+            const imgData = canvas.toDataURL('image/jpeg', 1.0);
+            this.codeDownload(imgData);
+            resolve(imgData);
+          });
+        }, 300); // 这里加上 300ms 的延迟是为了让 DOM 元素完全渲染完成后再进行图片的生成
+      });
+    },
   }
 };
 </script>

+ 1 - 1
src/views/distribution/ticketMr/dialog/addAndEdit.vue

@@ -265,7 +265,7 @@ export default {
     },
     // 座位类型改变事件
     seatChangeEven(val) {
-      this.ticketList.forEach(item => {
+      this.seatList.forEach(item => {
         if(item.seatTypeId == val){
           this.$set(this.form, 'originalSalePrice', item.priceAmount);
         }

+ 213 - 0
src/views/finance/refundMr/dialog/orderDetails.vue

@@ -0,0 +1,213 @@
+<!--
+ * @Description: 详情弹框
+ * @Author: Sugar.
+ * @Date: 2023-11-24 13:55:00
+ * @LastEditors: Sugar.
+ * @LastEditTime: 2023-11-24 13:55:00
+ * @FilePath: \cattle_webui\src\views\performMr\dialog\AddOrEditDialog.vue
+ * @Copyright: Copyright (c) 2016~2023 by Sugar., All Rights Reserved.
+-->
+<template>
+  <el-dialog
+    title="订单详情"
+    :visible.sync="open"
+    width="800px"
+    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 class="grid-content bg-purple item-class">购票渠道: <span>{{ sourceList[form.source] || '' }}</span></div>
+        </el-col>
+        <el-col :span="12">
+          <div class="grid-content bg-purple item-class">购票数量: <span>{{ 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.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">支付方式: <span>{{ payList[form.payStatus] || '' }}</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-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">
+                <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>
+        </el-col>
+      </el-row>
+    </div>
+
+    <span slot="footer" class="dialog-footer">
+      <el-button type="primary" @click="cancel">确定</el-button>
+    </span>
+
+  </el-dialog>
+</template>
+
+<script>
+import { getSelectById } from '@/api/order/orderMr'
+export default {
+  name: "orderDetails",
+  data() {
+    return {
+      title: "编辑",
+      model: "EDIT",
+      open: false,
+      loading: false,
+      form: {
+        id: undefined,
+      },
+      performerVisible: false,
+      performerList: [],
+      refund: false,
+      statusList: {
+        0: '待支付',
+        2: '超时取消',
+        3: '待使用',
+        4: '退款中',
+        5: '己退款',
+        6: '退款失败',
+        7: '己使用',
+        8: '己超期',
+        9: '关闭',
+      },
+      payList: {
+        0: '未支付',
+        1: '已支付',
+        2: '支付中',
+        3: '支付失败',
+        4: '支付退款',
+      },
+      sourceList: {
+        1: '小程序',
+        2: '公众号',
+        3: '美团',
+        4: '携程',
+        5: '团购',
+      },
+      dataList: []
+    };
+  },
+  methods: {
+    /**
+     * 打开弹框
+     * @date 2023-11-22
+     * @param {any} obj
+     * @returns {any}
+     */
+    openDialog(title, obj, type) {
+      this.open = true;
+      this.getSelectByIdApi(obj);
+    },
+    /** 获取详情 */
+    getSelectByIdApi(row) {
+      const id = row.orderId
+      getSelectById(id).then(response => {
+        this.form = response.data;
+      });
+    },
+    /**
+     * 关闭弹框
+     * @date 2023-11-22
+     * @returns {any}
+     */
+    cancel() {
+      this.open = false;
+    },
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+.dialog {
+  padding: 0 30px;
+  max-height: 65vh;
+  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{
+    font-size: 16px;
+    font-weight: bold;
+    color: black;
+    margin-bottom: 20px;
+    margin-top: 20px;
+  }
+  .item-class{
+    margin-bottom: 20px;
+  }
+}
+</style>

+ 10 - 4
src/views/finance/refundMr/index.vue

@@ -68,7 +68,7 @@
 <!--      <el-table-column label="原订单号" align="center" prop="orderId" />-->
       <el-table-column label="原订单号" align="center" prop="orderId" width="160" sortable="custom" >
         <template slot-scope="scope">
-          <el-button type="text" @click="openDetails(scope.row)">{{ scope.row.orderId }}</el-button>
+          <el-button type="text" @click="openDetails(scope.row, 'order')">{{ scope.row.orderId }}</el-button>
         </template>
       </el-table-column>
       <el-table-column label="手机号码" align="center" prop="refundMobile" />
@@ -130,6 +130,8 @@
     <!-- 详情 -->
     <details-dia ref="detailsDia" @getList="getList"></details-dia>
 
+    <orderDetails ref="orderDetails" @getList="getList"></orderDetails>
+
   </div>
 </template>
 
@@ -137,11 +139,11 @@
 
 import { pageList } from '@/api/financeMr/refundMr'
 import detailsDia from "./dialog/details.vue";
-
+import orderDetails from "./dialog/orderDetails.vue";
 export default {
   name: "agreement",
   dicts: ['agreement_type'],
-  components: { detailsDia },
+  components: { detailsDia, orderDetails },
   data() {
     return {
       // 遮罩层
@@ -218,7 +220,11 @@ export default {
     },
     /** 详情按钮操作 */
     openDetails(row, type) {
-      this.$refs["detailsDia"].openDialog("详情", row, type);
+      if(type == 'order') {
+        this.$refs["orderDetails"].openDialog("详情", row, type);
+      } else {
+        this.$refs["detailsDia"].openDialog("详情", row, type);
+      }
     },
   }
 };

+ 25 - 12
src/views/order/groupBuyingMr/dialog/details.vue

@@ -42,13 +42,13 @@
           <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.price || '' }}</span></div>
+          <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>{{ form.performDate || '' }}日 {{ form.performTimeStart || '' }} {{ form.performTimeEnd || '' }}</span></div>
+          <div class="grid-content bg-purple item-class">预约时间: <span v-if="form.preformStartTime">{{ form.preformStartTime || '' }}</span></div>
         </el-col>
         <el-col :span="12">
-          <div class="grid-content bg-purple item-class">报名时间: <span>{{ form.createTime || '' }}</span></div>
+          <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>
@@ -60,13 +60,13 @@
           <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.viewerNum || '' }}</span></div>
+          <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>{{ payList[form.payStatus] || '' }}</span></div>
+          <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>
@@ -78,10 +78,10 @@
       <div class="title-class">观影人员信息</div>
       <el-row>
         <el-col :span="24">
-          <el-table ref="tables" :data="form.viewersList" border>
+          <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" prop="cardId" />
             <el-table-column label="核销状态" align="center">
               <template slot-scope="scope">
                 <el-tag v-if="scope.row.qrcodeStatus == 0">未使用</el-tag>
@@ -104,9 +104,15 @@
 </template>
 
 <script>
-import { getSelectById } from '@/api/order/orderMr'
+import { getSelectById } from '@/api/order/groupBuyingMr'
 export default {
   name: "detailsDia",
+  props: {
+    dict: {
+      type: Object,
+      default: () => [],
+    },
+  },
   data() {
     return {
       title: "编辑",
@@ -137,12 +143,19 @@ export default {
         3: '支付失败',
         4: '支付退款',
       },
+      payWayList: {
+        'cahsh': '现金',
+        'wecaht.applet': '微信小程序支付',
+        'alipay': '支付宝',
+        'wecaht.h5': '微信公众号支付',
+        'meituan': '美团支付',
+      },
       sourceList: {
         1: '小程序',
-        2: '美团',
-        3: '携程',
-        4: '公众号',
-        5: '支付宝',
+        2: '公众号',
+        3: '美团',
+        4: '携程',
+        5: '团购',
       },
       dataList: []
     };

+ 35 - 29
src/views/order/groupBuyingMr/index.vue

@@ -12,7 +12,7 @@
       </el-form-item>
       <el-form-item label="团队名称" label-width="100px">
         <el-input
-          v-model="queryParams.memberMobile"
+          v-model="queryParams.teamName"
           placeholder="请输入团队名称"
           clearable
           style="width: 240px;"
@@ -21,17 +21,17 @@
       </el-form-item>
       <el-form-item label="团队类型">
         <el-select
-          v-model="queryParams.source"
-          placeholder="团队类型"
-          clearable
-          style="width: 100%"
+        v-model="queryParams.teamType"
+        placeholder="团队类型"
+        clearable
+        style="width: 240px"
         >
-          <el-option
-            v-for="dict in sourceMapList"
-            :key="dict.value"
-            :label="dict.name"
-            :value="dict.value"
-          />
+        <el-option
+          v-for="dict in dict.type.team_type"
+          :key="dict.value"
+          :label="dict.label"
+          :value="dict.value"
+        />
         </el-select>
       </el-form-item>
       <el-form-item label="订单状态">
@@ -72,12 +72,16 @@
     <el-table ref="tables" v-loading="loading" :data="dataList" border>
       <el-table-column label="序号" align="center" type="index" width="60"></el-table-column>
       <el-table-column label="订单号" align="center" prop="id" />
-      <el-table-column label="团队名称" align="center" prop="memberMobile" />
-      <el-table-column label="团队类型" align="center" prop="performName" />
-      <el-table-column label="联系电话" align="center" prop="goodsName" />
-      <el-table-column label="负责人" align="center" prop="seatTypeName" />
+      <el-table-column label="团队名称" align="center" prop="teamName" />
+      <el-table-column label="团队类型" align="center" prop="type">
+        <template slot-scope="scope">
+          <dict-tag :options="dict.type.team_type" :value="scope.row.teamType"/>
+        </template>
+      </el-table-column>
+      <el-table-column label="联系电话" align="center" prop="teamMobile" />
+      <el-table-column label="负责人" align="center" prop="teamContact" />
       <el-table-column label="剧目名称" align="center" prop="goodsName" />
-      <el-table-column label="座位类型" align="center" prop="goodsName" />
+      <el-table-column label="座位类型" align="center" prop="seatTypeName" />
       <el-table-column label="团购数量" align="center" prop="quantity" />
       <el-table-column label="支付总额" align="center" prop="orderPrice">
         <template slot-scope="scope">
@@ -120,19 +124,19 @@
     />
 
     <!-- 详情 -->
-    <details-dia ref="detailsDia" @getList="getList"></details-dia>
+    <details-dia ref="detailsDia" :dict="dict" @getList="getList"></details-dia>
 
   </div>
 </template>
 
 <script>
 
-import { pageList } from '@/api/order/orderMr'
+import { pageList } from '@/api/order/groupBuyingMr'
 import detailsDia from "./dialog/details.vue";
 
 export default {
   name: "agreement",
-  dicts: ['agreement_type'],
+  dicts: ['agreement_type', 'team_type'],
   components: { detailsDia },
   data() {
     return {
@@ -195,20 +199,22 @@ export default {
         'cahsh': '现金',
         'wecaht.applet': '微信小程序支付',
         'alipay': '支付宝',
+        'wecaht.h5': '微信公众号支付',
+        'meituan': '美团支付',
       },
       sourceList: {
         1: '小程序',
-        2: '美团',
-        3: '携程',
-        4: '公众号',
-        5: '支付宝',
+        2: '公众号',
+        3: '美团',
+        4: '携程',
+        5: '团购',
       },
       sourceMapList: [
         {id: 1, name: '小程序', value: 1},
-        {id: 2, name: '美团', value: 2},
-        {id: 3, name: '携程', value: 3},
-        {id: 4, name: '公众号', value: 4},
-        {id: 5, name: '支付宝', value: 5},
+        {id: 2, name: '公众号', value: 2},
+        {id: 3, name: '美团', value: 3},
+        {id: 4, name: '携程', value: 4},
+        {id: 5, name: '团购', value: 5},
       ],
       visibleStatus: false,
       newObj: {},
@@ -247,8 +253,8 @@ export default {
       this.dateRange = [];
       this.$set(this.queryParams, 'orderId', '');
       this.$set(this.queryParams, 'status', '');
-      this.$set(this.queryParams, 'memberMobile', '');
-      this.$set(this.queryParams, 'source', '');
+      this.$set(this.queryParams, 'teamType', '');
+      this.$set(this.queryParams, 'teamName', '');
       this.$set(this.queryParams, 'performName', '');
       this.$set(this.queryParams, 'payBeginTime', '');
       this.$set(this.queryParams, 'payEndTime', '');

+ 12 - 5
src/views/order/orderMr/dialog/details.vue

@@ -63,7 +63,7 @@
           <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>{{ payList[form.payStatus] || '' }}</span></div>
+          <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>
@@ -134,12 +134,19 @@ export default {
         3: '支付失败',
         4: '支付退款',
       },
+      payWayList: {
+        'cahsh': '现金',
+        'wecaht.applet': '微信小程序支付',
+        'alipay': '支付宝',
+        'wecaht.h5': '微信公众号支付',
+        'meituan': '美团支付',
+      },
       sourceList: {
         1: '小程序',
-        2: '美团',
-        3: '携程',
-        4: '公众号',
-        5: '支付宝',
+        2: '公众号',
+        3: '美团',
+        4: '携程',
+        5: '团购',
       },
       dataList: []
     };

+ 35 - 8
src/views/order/orderMr/index.vue

@@ -68,6 +68,31 @@
           end-placeholder="结束日期">
         </el-date-picker>
       </el-form-item>
+<!--      <el-form-item label="场次时间">-->
+<!--        <el-date-picker-->
+<!--          v-model="queryParams.time"-->
+<!--          type="daterange"-->
+<!--          value-format="yyyy-MM-dd"-->
+<!--          range-separator="至"-->
+<!--          start-placeholder="开始日期"-->
+<!--          end-placeholder="结束日期">-->
+<!--        </el-date-picker>-->
+<!--      </el-form-item>-->
+<!--      <el-form-item label="预约场次">-->
+<!--        <el-select-->
+<!--          v-model="queryParams.source"-->
+<!--          placeholder="预约场次"-->
+<!--          clearable-->
+<!--          style="width: 100%"-->
+<!--        >-->
+<!--          <el-option-->
+<!--            v-for="dict in sourceMapList"-->
+<!--            :key="dict.value"-->
+<!--            :label="dict.name"-->
+<!--            :value="dict.value"-->
+<!--          />-->
+<!--        </el-select>-->
+<!--      </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>
@@ -208,20 +233,22 @@ export default {
         'cahsh': '现金',
         'wecaht.applet': '微信小程序支付',
         'alipay': '支付宝',
+        'wecaht.h5': '微信公众号支付',
+        'meituan': '美团支付',
       },
       sourceList: {
         1: '小程序',
-        2: '美团',
-        3: '携程',
-        4: '公众号',
-        5: '支付宝',
+        2: '公众号',
+        3: '美团',
+        4: '携程',
+        5: '团购',
       },
       sourceMapList: [
         {id: 1, name: '小程序', value: 1},
-        {id: 2, name: '美团', value: 2},
-        {id: 3, name: '携程', value: 3},
-        {id: 4, name: '公众号', value: 4},
-        {id: 5, name: '支付宝', value: 5},
+        {id: 2, name: '公众号', value: 2},
+        {id: 3, name: '美团', value: 3},
+        {id: 4, name: '携程', value: 4},
+        {id: 5, name: '团购', value: 5},
       ],
       visibleStatus: false,
       newObj: {},

+ 50 - 3
src/views/perform/programmeMr/dialog/addAndEdit.vue

@@ -139,6 +139,31 @@
                 <div class="el-upload__tip" slot="tip">只能上传.jpg或.png格式</div>
               </el-upload>
             </el-form-item>
+            <el-form-item label="剧目封面" prop="showImg">
+              <el-upload
+                ref="upload"
+                class="avatar-uploader"
+                :action="uploadObj.url"
+                :headers="uploadObj.headers"
+                :show-file-list="false"
+                accept=".jpg,.png"
+                :on-success="handleFMSuccess"
+                :before-upload="beforeAvatarUpload"
+              >
+                <div class="avatar" v-if="form.showImg">
+                  <el-image
+                    style="width: 100px; height: 100px"
+                    :src="form.showImg"
+                    fit="cover"
+                  />
+                </div>
+                <div class="upload-btn" v-else>
+                  <i class="el-icon-plus"></i>
+                  <div class="upload-btn-text">上传照片</div>
+                </div>
+                <div class="el-upload__tip" slot="tip">只能上传.jpg或.png格式</div>
+              </el-upload>
+            </el-form-item>
             <el-form-item label="宣传图">
               <el-upload
                 ref="upload"
@@ -250,6 +275,19 @@
               />
             </template>
           </el-table-column>
+          <el-table-column label="演员简介" width="200" align="center">
+            <template slot-scope="scope">
+              <el-input
+                type="textarea"
+                :rows="4"
+                maxlength="500"
+                show-word-limit
+                v-model="scope.row.performerSnapshot"
+                placeholder="演员简介"
+                clearable
+              />
+            </template>
+          </el-table-column>
           <el-table-column label="操作" align="center" width="80" class-name="small-padding fixed-width">
             <template slot-scope="scope">
               <el-button
@@ -305,6 +343,7 @@ export default {
         name: [{ required: true, message: "请输入剧目名称", trigger: "blur" }],
         sponsorId: [{ required: true, message: "请选择主办方", trigger: "blur" }],
         goodsIdList: [{ required: true, message: "请选择票务信息", trigger: "blur" }],
+        showImg: [{ required: true, message: "请上传剧目封面", trigger: "blur" }],
         status: [{ required: true, message: "请选择是否启用状态", trigger: "blur" }]
       },
       uploadObj: {
@@ -399,6 +438,7 @@ export default {
           this.$set(this.form, 'showDuration', obj.showDuration);
           this.$set(this.form, 'peopleNum', obj.peopleNum);
           this.$set(this.form, 'posterImg', obj.posterImg);
+          this.$set(this.form, 'showImg', obj.showImg);
           this.$set(this.form, 'performSnapshot', obj.performSnapshot);
           // this.performerList = obj.performerList || [];
           this.$set(this.form, 'performerList', obj.performerList || []);
@@ -424,9 +464,9 @@ export default {
             this.$message.error("上传的宣传图不能少于三张!");
             return false
           }
-          if(this.form.photoList && this.form.photoList.length > 2) {
-            this.form.showImg =  this.form.photoList[0].url
-          }
+          // if(this.form.photoList && this.form.photoList.length > 2) {
+          //   this.form.showImg =  this.form.photoList[0].url
+          // }
           try {
             this.loading = true;
             const { code } = await saveAndEdit({ ...this.form });
@@ -472,6 +512,7 @@ export default {
       this.$set(this.form, 'showDuration', '');
       this.$set(this.form, 'peopleNum', '');
       this.$set(this.form, 'posterImg', '');
+      this.$set(this.form, 'showImg', '');
       this.$set(this.form, 'performSnapshot', '');
       this.$set(this.form, 'photoList', []);
 
@@ -500,6 +541,12 @@ export default {
       }
       console.log(this.form.photoList)
     },
+    handleFMSuccess(res) {
+      if (res.code === 200) {
+        // this.form.mainImg = res?.data?.url;
+        this.$set(this.form, 'showImg', res?.data?.url)
+      }
+    },
     /**
      * 剧目海报上传成功
      * @date 2023-11-22

+ 33 - 0
src/views/perform/programmeMr/dialog/details.vue

@@ -65,6 +65,25 @@
             </el-row>
           </div>
         </el-col>
+        <el-col :span="24">
+          <div class="grid-content bg-purple item-class">
+            <el-row>
+              <el-col :span="3">
+                <div>剧目封面:</div>
+              </el-col>
+              <el-col :span="12">
+                <div v-if="form.showImg">
+                  <el-image
+                    style="width: 100px; height: 100px"
+                    :src="form.showImg"
+                    fit="cover"
+                  />
+                </div>
+                <div v-else>--</div>
+              </el-col>
+            </el-row>
+          </div>
+        </el-col>
         <el-col :span="24">
           <div class="grid-content bg-purple item-class">
             <el-row>
@@ -166,6 +185,20 @@
               />
             </template>
           </el-table-column>
+          <el-table-column label="演员简介" width="200" align="center">
+            <template slot-scope="scope">
+              <el-input
+                type="textarea"
+                disabled
+                :rows="4"
+                maxlength="500"
+                show-word-limit
+                v-model="scope.row.performerSnapshot"
+                placeholder="演员简介"
+                clearable
+              />
+            </template>
+          </el-table-column>
         </el-table>
       </div>
 

+ 20 - 3
src/views/team/applicationMr/dialog/addAndEdit.vue

@@ -193,7 +193,7 @@
 </template>
 
 <script>
-import { saveAndEdit, getSelectById, uploadExcel } from "@/api/team/applicationMr";
+import { saveAndEdit, getSelectById, uploadExcel, queryPrice } from "@/api/team/applicationMr";
 import { pagePerformTimeList } from '@/api/schedulingMr/schedulingMr'
 import Editor from "@/components/Editor";
 import { getToken } from "@/utils/auth";
@@ -386,6 +386,22 @@ export default {
           })
         });
     },
+    /** 团购价格查询 */
+    queryPriceApi() {
+      let postMap = {
+        teamId: this.form.teamId,
+        goodsId: this.form.goodsId,
+        performId: this.form.performId,
+        seatTypeId: this.form.seatTypeId,
+      }
+      queryPrice(postMap)
+        .then(response => {
+          if(response.data){
+            let data = response.data;
+            this.$set(this.form, 'price', data.salePrice);
+          }
+        });
+    },
     /** 预约场次列表 */
     getPerformTimeList() {
       if(this.form.performDate && this.form.performDate == '') {
@@ -428,7 +444,7 @@ export default {
     goodsChangeEven(id) {
       this.seatList = [];
       this.ticketList.forEach(item => {
-        if(item.id == id){
+        if(item.goodsId == id){
           this.$set(this.form, 'goodsName', item.goodsName)
         }
       })
@@ -442,10 +458,11 @@ export default {
     seatChangeEven(val) {
       this.seatList.forEach(item =>{
         if(item.seatTypeId == val){
-          this.$set(this.form, 'price', item.priceAmount);
           this.$set(this.form, 'seatTypeName', item.seatTypeName);
+          this.$set(this.form, 'price', item.priceAmount);
         }
       })
+      this.queryPriceApi();
     },
     // 预约时间
     performDateEven() {

+ 34 - 7
src/views/team/applicationMr/dialog/applicationDetails.vue

@@ -144,12 +144,12 @@
       <el-button
         type="primary"
         @click="submitPass"
-        v-loading.fullscreen.lock="loading"
+        v-loading.fullscreen.lock="passLoading"
         element-loading-text="提交中..."
         element-loading-spinner="el-icon-loading"
         element-loading-background="rgba(0, 0, 0, 0.8)"
       >
-        <span v-if="loading">提交中...</span>
+        <span v-if="passLoading">提交中...</span>
         <span v-else>保存</span>
       </el-button>
     </span>
@@ -177,6 +177,7 @@ export default {
       rejectOpen: false,
       passOpen: false,
       loading: false,
+      passLoading: false,
       form: {
         id: undefined,
       },
@@ -246,7 +247,7 @@ export default {
     setSeatMapList(list) {
       if(list && list.length > 0) {
         list.forEach(item => {
-          item.isDisabled = (item.occupyStatus && (item.occupyStatus == 0 || item.occupyStatus == 1) ? true : false); // 座位是否已被选择
+          item.isDisabled = (item.occupyStatus != null && (item.occupyStatus == 0 || item.occupyStatus == 1) ? true : false); // 座位是否已被选择
           item.isSelect = false;
           this.seatMapList.push(item)
         })
@@ -257,6 +258,23 @@ export default {
       if(row.isDisabled){
         return false
       }
+      if(this.seatSelectList.length >= this.details.viewersList.length ){
+        if(row.isSelect) {
+          let indexs = null;
+          this.seatSelectList.forEach((item, index) =>{
+            if(item.id == row.id){
+              indexs = index;
+            }
+          })
+          if(indexs != null) {
+            row.isSelect = !row.isSelect;
+            this.seatSelectList.splice(indexs, 1)
+          }
+        } else {
+          this.$message.error("观影人数限制" + this.details.viewersList.length + "人!");
+        }
+        return false
+      }
       row.isSelect = !row.isSelect
       this.seatSelectList = this.seatMapList.filter(item => item.isSelect);
       this.$forceUpdate()
@@ -279,17 +297,21 @@ export default {
         if (valid) {
           try {
             this.loading = true;
+            setTimeout(() => {
+              this.loading = false;
+            }, 3000)
             this.rejectForm.applyId = this.details.id || this.applyId;
             const { code } = await teamApplyAudit({ ...this.rejectForm });
             if (code === 200) {
+              this.loading = false;
+              this.rejectOpen = false;
               this.$message.success("操作成功!");
               this.$emit("getList");
               this.cancel();
             }
           } catch (error) {
-          } finally {
             this.loading = false;
-            this.rejectOpen = false;
+          } finally {
           }
         }
       });
@@ -297,7 +319,10 @@ export default {
     // 审核通过 - 座位选择保存
     submitPass() {
       try {
-        this.loading = true;
+        this.passLoading = true;
+        setTimeout(() => {
+          this.passLoading = false;
+        }, 3000)
         let seatList = this.seatMapList.filter(item => item.isSelect);
         if(seatList && seatList.length > 0) {
           let postMap = {
@@ -306,8 +331,10 @@ export default {
             seatList: seatList
           }
           teamApplyAudit(postMap).then((res) => {
+            this.passLoading = false;
             if (res.code == 200) {
               this.$message.success("操作成功!");
+              this.passOpen = false;
               this.$emit("getList");
               this.cancel();
             }
@@ -316,8 +343,8 @@ export default {
           this.$message.error("请选择座位!");
         }
       } catch (error) {
+        this.passLoading = false;
       } finally {
-        this.loading = false;
       }
     },
     /**

+ 3 - 3
src/views/team/applicationMr/dialog/orderDetails.vue

@@ -42,7 +42,7 @@
           <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.price || '' }}</span></div>
+          <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>{{ form.performDate || '' }}日 {{ form.performTimeStart || '' }} {{ form.performTimeEnd || '' }}</span></div>
@@ -78,10 +78,10 @@
       <div class="title-class">观影人员信息</div>
       <el-row>
         <el-col :span="24">
-          <el-table ref="tables" :data="form.viewersList" border>
+          <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" prop="cardId" />
             <el-table-column label="核销状态" align="center">
               <template slot-scope="scope">
                 <el-tag v-if="scope.row.qrcodeStatus == 0">未使用</el-tag>

+ 1 - 0
src/views/team/applicationMr/index.vue

@@ -148,6 +148,7 @@
     <!-- 详情弹框 -->
     <application-details
       :dict="dict"
+      @getList="getList"
       ref="appDetails"></application-details>
 
     <!-- 团购订单详情弹框 -->

+ 1 - 3
src/views/team/ticketMr/dialog/addAndEdit.vue

@@ -124,8 +124,6 @@ import { saveAndEdit, getSelectById } from "@/api/team/ticketMr";
 import Editor from "@/components/Editor";
 import { getToken } from "@/utils/auth";
 import { goodsPageList } from '@/api/programmeMr/programmeMr'
-import { ticketPageList } from '@/api/ticketMr/ticketMr'
-import { SeatTypeList } from '@/api/seatTypeMr/seatTypeMr'
 import { seatPricePageList } from '@/api/distribution/ticketMr'
 export default {
   name: "addAndEdit",
@@ -199,7 +197,7 @@ export default {
           this.$set(this.form, 'originalSalePrice', obj.originalSalePrice);
           this.$set(this.form, 'salePrice', obj.salePrice);
           this.$set(this.form, 'brokeragePrice', obj.brokeragePrice);
-
+          this.$set(this.form, 'teamPersonNum', obj.teamPersonNum);
           this.ticketListApi();
           this.getSeatTypeList({goodsId: this.form.goodsId, performId: this.form.performId});
         });

+ 34 - 0
src/views/ticket/priceMr/dialog/addAndEdit.vue

@@ -118,6 +118,40 @@
           </el-input>
         </el-form-item>
 
+<!--        <el-form-item label="总库存:" v-if="isDisabled">-->
+<!--          <el-input-->
+<!--            :disabled="isDisabled"-->
+<!--            type="number"-->
+<!--            v-model="form.priceAmount"-->
+<!--            placeholder=""-->
+<!--            clearable-->
+<!--            style="width: 160px;"-->
+<!--          >-->
+<!--          </el-input>-->
+<!--        </el-form-item>-->
+<!--        <el-form-item label="已售:" v-if="isDisabled">-->
+<!--          <el-input-->
+<!--            :disabled="isDisabled"-->
+<!--            type="number"-->
+<!--            v-model="form.priceAmount"-->
+<!--            placeholder=""-->
+<!--            clearable-->
+<!--            style="width: 160px;"-->
+<!--          >-->
+<!--          </el-input>-->
+<!--        </el-form-item>-->
+<!--        <el-form-item label="剩余库存:" v-if="isDisabled">-->
+<!--          <el-input-->
+<!--            :disabled="isDisabled"-->
+<!--            type="number"-->
+<!--            v-model="form.priceAmount"-->
+<!--            placeholder=""-->
+<!--            clearable-->
+<!--            style="width: 160px;"-->
+<!--          >-->
+<!--          </el-input>-->
+<!--        </el-form-item>-->
+
       </el-form>
     </div>
     <span slot="footer" class="dialog-footer">

+ 3 - 0
src/views/ticket/priceMr/index.vue

@@ -43,6 +43,9 @@
           <span>¥{{ scope.row.priceAmount }}</span>
         </template>
       </el-table-column>
+<!--      <el-table-column label="总库存" align="center" prop="seatTypeName" />-->
+<!--      <el-table-column label="已售" align="center" prop="seatTypeName" />-->
+<!--      <el-table-column label="剩余库存" align="center" prop="seatTypeName" />-->
       <el-table-column label="添加时间" align="center" prop="createTime">
         <template slot-scope="scope">
           <span>{{ scope.row.createTime }}</span>

+ 7 - 7
src/views/userMr/index.vue

@@ -78,13 +78,13 @@
             v-if="scope.row.isAuth == 1"
             @click="updateAuthStatusEven(scope.row)"
           >取消实名认证</el-button>
-          <el-button
-            size="mini"
-            type="text"
-            v-hasPermi="['userMr:userMr:blacklist']"
-            v-if="scope.row.isBlackList == 0"
-            @click="addBlackListEven(scope.row)"
-          >加入黑名单</el-button>
+<!--          <el-button-->
+<!--            size="mini"-->
+<!--            type="text"-->
+<!--            v-hasPermi="['userMr:userMr:blacklist']"-->
+<!--            v-if="scope.row.isBlackList == 0"-->
+<!--            @click="addBlackListEven(scope.row)"-->
+<!--          >加入黑名单</el-button>-->
         </template>
       </el-table-column>
     </el-table>

File diff suppressed because it is too large
+ 22 - 20
src/views/venue/performanceHallMr/dialog/seatTemplateEdit.vue


+ 1 - 1
src/views/venue/performanceHallMr/index.vue

@@ -174,7 +174,7 @@ export default {
       visibleStatus: false,
       newObj: {},
       visibleType: '',
-      seatList: []
+      seatList: [],
     };
   },
   created() {