Pārlūkot izejas kodu

团队报名审核功能

zhongzhao 1 gadu atpakaļ
vecāks
revīzija
6560705f03

+ 9 - 0
src/api/schedulingMr/schedulingMr.js

@@ -9,6 +9,15 @@ export const pageList = (query) => {
   })
 }
 
+// 分页查询剧院
+export const pagePerformTimeList = (query) => {
+  return request({
+    url: '/merchant/merchantPerformTime/list',
+    method: 'get',
+    params: query
+  })
+}
+
 // 新增/修改
 export const saveAndEdit = (data) => {
   return request({

+ 27 - 2
src/api/team/applicationMr.js

@@ -3,7 +3,7 @@ import request from '@/utils/request'
 // 分页查询
 export const pageList = (query) => {
   return request({
-    url: '/member/marketTeamApply/pageList',
+    url: '/member/marketTeamApply/list',
     method: 'get',
     params: query
   })
@@ -38,7 +38,7 @@ export const updateStatus = (data) => {
 
 export function getSelectById(id) {
   return request({
-    url: '/member/marketTeam/selectById?id=' + id,
+    url: '/member/marketTeamApply/selectById?id=' + id,
     method: 'get'
   })
 }
@@ -51,3 +51,28 @@ export function uploadExcel(data) {
     data: data
   })
 }
+
+// 审核
+export const teamApplyAudit = (data) => {
+  return request({
+    url: '/member/marketTeamApply/teamApplyAudit',
+    method: 'post',
+    data: data
+  })
+}
+
+//审核时查询可用座位列表
+export function querySeatList(query) {
+  return request({
+    url: '/merchant/merchantAuditoriumSeat/querySeatList',
+    method: 'get',
+    params: query
+  })
+}
+
+export function getOrderDetail(id) {
+  return request({
+    url: '/member/marketTeamApply/orderDetail?id=' + id,
+    method: 'get'
+  })
+}

+ 2 - 1
src/views/finance/refundMr/dialog/details.vue

@@ -97,8 +97,9 @@ export default {
       statusList: {
         0: '申请中',
         1: '退款成功',
-        2: '退款失败',
+        2: '退款驳回',
         3: '退款中',
+        4: '退款失败',
       }
     };
   },

+ 5 - 3
src/views/finance/refundMr/index.vue

@@ -88,8 +88,9 @@
         <template slot-scope="scope">
           <el-tag v-if="scope.row.status == 0">申请中</el-tag>
           <el-tag v-if="scope.row.status == 1" type="success">退款成功</el-tag>
-          <el-tag v-if="scope.row.status == 2" type="danger">退款失败</el-tag>
+          <el-tag v-if="scope.row.status == 2" type="warning">退款驳回</el-tag>
           <el-tag v-if="scope.row.status == 3" type="info">退款中</el-tag>
+          <el-tag v-if="scope.row.status == 4" type="danger">退款失败</el-tag>
         </template>
       </el-table-column>
       <el-table-column label="操作人" align="center" prop="refundName" />
@@ -110,7 +111,7 @@
           <el-button
             size="mini"
             type="text"
-            v-if="scope.row.status == 0 || scope.row.status == 2"
+            v-if="scope.row.status == 0 || scope.row.status == 4"
             @click="openDetails(scope.row, 'refund')"
             v-hasPermi="['refundMr:refundMr:delete']"
           >审核</el-button>
@@ -172,8 +173,9 @@ export default {
       statusList: [
         {id: 1, name: '申请中', value: 0},
         {id: 2, name: '退款成功', value: 1},
-        {id: 3, name: '退款失败', value: 2},
+        {id: 3, name: '退款驳回', value: 2},
         {id: 4, name: '退款中', value: 3},
+        {id: 5, name: '退款失败', value: 4},
       ],
       visibleStatus: false,
       newObj: {},

+ 16 - 16
src/views/order/groupBuyingMr/dialog/details.vue

@@ -21,40 +21,40 @@
       <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>
+          <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>{{ form.id || '' }}</span></div>
+          <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.memberName || '' }}</span></div>
+          <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.memberMobile || '' }}</span></div>
+          <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.memberCardId || '' }}</span></div>
+          <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.performName || '' }}</span></div>
+          <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>{{ form.seatTypeName || '' }}</span></div>
+          <div class="grid-content bg-purple item-class">团购单价: <span>¥{{ form.price || '' }}</span></div>
         </el-col>
         <el-col :span="12">
-          <div class="grid-content bg-purple item-class">预约时间: <span>{{ form.seatTypeName || '' }}</span></div>
+          <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>{{ form.seatTypeName || '' }}</span></div>
+          <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>{{ form.seatTypeName || '' }}</span></div>
+          <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>{{ sourceList[form.source] || '' }}</span></div>
+          <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>
@@ -81,15 +81,15 @@
           <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="身份证号码" width="180" align="center" prop="idcard" />
+            <el-table-column label="身份证号码" align="center" prop="idcard" />
             <el-table-column label="核销状态" align="center">
               <template slot-scope="scope">
-                <el-tag v-if="scope.row.status == 0">未使用</el-tag>
-                <el-tag v-if="scope.row.status == 1" type="success">已使用</el-tag>
-                <el-tag v-if="scope.row.status == 2" type="info">过期</el-tag>
+                <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="useTime" />
             <el-table-column label="座位信息" align="center" prop="seatName" />
           </el-table>
         </el-col>

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

@@ -78,12 +78,12 @@
           <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="身份证号码" width="180" align="center" prop="idcard" />
+            <el-table-column label="身份证号码" align="center" prop="idcard" />
             <el-table-column label="核销状态" align="center">
               <template slot-scope="scope">
-                <el-tag v-if="scope.row.status == 0">未使用</el-tag>
-                <el-tag v-if="scope.row.status == 1" type="success">已使用</el-tag>
-                <el-tag v-if="scope.row.status == 2" type="info">过期</el-tag>
+                <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" />
@@ -119,7 +119,7 @@ export default {
       statusList: {
         0: '待支付',
         2: '超时取消',
-        3: '支付完成,待使用',
+        3: '待使用',
         4: '退款中',
         5: '己退款',
         6: '退款失败',

+ 82 - 94
src/views/team/applicationMr/dialog/addAndEdit.vue

@@ -128,23 +128,31 @@
             <template slot="append">元/人</template>
           </el-input>
         </el-form-item>
-        <el-form-item label="预约场次:" prop="performDate">
+        <el-form-item label="选择日期"  prop="performDate">
+          <el-date-picker
+            v-model="form.performDate"
+            type="date"
+            @change="performDateEven"
+            value-format="yyyy-MM-dd"
+            placeholder="选择日期">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="预约场次:" prop="performTimeId">
           <el-select
-            v-model="form.seatTypeId"
-            placeholder="座位类型"
+            v-model="form.performTimeId"
+            placeholder="预约场次"
             clearable
-            @change="sessionChangeEven"
             style="width: 100%;"
           >
             <el-option
-              v-for="dict in sessionList"
+              v-for="dict in performTimeList"
               :key="dict.id"
-              :label="dict.name"
+              :label="dict.timeSnapshot + '场次: ' + dict.performDate + ' 开始时间' + dict.performTimeStart + ', 结束时间' + dict.performTimeEnd"
               :value="dict.id"
             />
           </el-select>
         </el-form-item>
-        <el-form-item label="观影人员:" prop="performDate">
+        <el-form-item label="观影人员:" prop="viewerList">
           <el-upload
             class="upload-demo"
             :action="uploadObj.url"
@@ -186,6 +194,7 @@
 
 <script>
 import { saveAndEdit, getSelectById, uploadExcel } from "@/api/team/applicationMr";
+import { pagePerformTimeList } from '@/api/schedulingMr/schedulingMr'
 import Editor from "@/components/Editor";
 import { getToken } from "@/utils/auth";
 import { goodsPageList } from '@/api/programmeMr/programmeMr'
@@ -224,6 +233,8 @@ export default {
         seatTypeId: [{ required: true, message: "请选择座位类型", trigger: "blur" }],
         price: [{ required: true, message: "请输入团购单价", trigger: "blur" }],
         teamPersonNum: [{ required: true, message: "请输入人数", trigger: "blur" }],
+        performTimeId: [{ required: true, message: "请选择预约场次", trigger: "blur" }],
+        viewerList: [{ required: true, message: "请上传观影人员excel", trigger: "blur" }],
       },
       uploadObj: {
         url: process.env.VUE_APP_UPLOAD_FILE_API + "/upload/single/minio",
@@ -235,7 +246,8 @@ export default {
       merchantList: [],
       theatreList: [],
       teamList: [],
-      sssionList: []
+      sessionList: [],
+      performTimeList: []
     };
   },
   methods: {
@@ -292,12 +304,6 @@ export default {
       pageList(this.addDateRange({pageNum: 1, pageSize: 100}))
         .then(response => {
           this.theatreList = response.data.rows;
-          this.theatreList.forEach(item => {
-            if(name == item.name){
-              this.$set(this.form, 'venueId', item.id)
-            }
-          })
-          this.merchantPageList(this.form.venueId)
         });
     },
     /** 团队选择 */
@@ -317,14 +323,27 @@ export default {
         }
       })
       this.$set(this.form, 'auditoriumId', '')
+      this.$set(this.form, 'performId', '')
+      this.$set(this.form, 'goodsId', '')
+      this.$set(this.form, 'seatTypeId', '')
+      this.$set(this.form, 'price', '')
+      this.$set(this.form, 'performDate', '');
+      this.$set(this.form, 'performTimeId', '');
     },
     /** 演出厅选择 */
     auditoriumChange(id) {
+      this.$set(this.form, 'performDate', '');
+      this.$set(this.form, 'performTimeId', '');
+      this.$set(this.form, 'performId', '');
+      this.$set(this.form, 'goodsId', '')
+      this.$set(this.form, 'seatTypeId', '')
+      this.$set(this.form, 'price', '')
       this.merchantList.forEach(item => {
         if(id == item.id){
           this.$set(this.form, 'auditoriumName', item.name)
         }
       })
+      this.getPerformTimeList();
     },
     /** 演出厅列表查询 */
     merchantPageList(id) {
@@ -356,16 +375,28 @@ export default {
     },
     /** 座位类型列表 */
     getSeatTypeList(obj) {
-      seatPricePageList(this.addDateRange({pageNum: 1, pageSize: 100, goodsId: obj.goodsId, performId: obj.performId}))
+      seatPricePageList({pageNum: 1, pageSize: 100, goodsId: obj.goodsId, performId: obj.performId})
         .then(response => {
-          this.seatList = response.data.rows;
+          let ticketList = []
+          response.data.rows.forEach(item => {
+            if(ticketList.indexOf(item.seatTypeId) == -1){
+              this.seatList.push(item);
+              ticketList.push(item.seatTypeId);
+            }
+          })
         });
     },
     /** 预约场次列表 */
-    getSessionList(obj) {
-      seatPricePageList(this.addDateRange({pageNum: 1, pageSize: 100, goodsId: obj.goodsId, performId: obj.performId}))
+    getPerformTimeList() {
+      if(this.form.performDate && this.form.performDate == '') {
+        this.$message.error("请选择日期!");
+        return false
+      }
+      pagePerformTimeList(this.addDateRange(
+        {pageNum: 1, pageSize: 100, performDate: this.form.performDate, performId: this.form.performId, auditoriumId: this.form.auditoriumId, status: 1}
+      ))
         .then(response => {
-          this.sessionList = response.data.rows;
+          this.performTimeList = response.data.rows;
         });
     },
     /** 价格输入事件 */
@@ -375,32 +406,33 @@ export default {
         this.$set(this.form, key, '');
         return false
       }
-    },
-    /** 预约场次改变事件 */
-    sessionChangeEven(val) {
-
     },
     // 剧目改变事件
     performChangeEven(val) {
       this.seatList = [];
       this.ticketList = [];
-      this.$set(this.form, 'originalSalePrice', '')
+      this.$set(this.form, 'performDate', '');
+      this.$set(this.form, 'performTimeId', '');
+      this.$set(this.form, 'goodsId', '');
+      this.$set(this.form, 'seatTypeId', '');
+      this.$set(this.form, 'price', '')
       this.goodsList.forEach(item => {
         if(item.id == val){
           this.$set(this.form, 'performName', item.name)
         }
       })
       this.ticketListApi(val);
+      this.getPerformTimeList()
     },
     // 票务改变事件
     goodsChangeEven(id) {
       this.seatList = [];
       this.ticketList.forEach(item => {
-        if(item.id == val){
+        if(item.id == id){
           this.$set(this.form, 'goodsName', item.goodsName)
         }
       })
-      this.$set(this.form, 'originalSalePrice', '');
+      this.$set(this.form, 'price', '');
       this.$set(this.form, 'seatTypeId', '');
 
       let selectMap = {goodsId: this.form.goodsId, performId: this.form.performId}
@@ -408,30 +440,17 @@ export default {
     },
     // 座位类型改变事件
     seatChangeEven(val) {
-      this.ticketList.forEach(item => {
-        if(item.seatTypeId == val){
-          this.$set(this.form, 'originalSalePrice', item.priceAmount);
-        }
-      })
       this.seatList.forEach(item =>{
         if(item.seatTypeId == val){
+          this.$set(this.form, 'price', item.priceAmount);
           this.$set(this.form, 'seatTypeName', item.seatTypeName);
         }
       })
     },
-    // 座位类型名称
-    seatTypeNameEven(val) {
-      let seatTypeName = '';
-      this.seatList.forEach(item =>{
-        if(item.seatTypeId == val){
-          seatTypeName = item.seatTypeName;
-        }
-      })
-      seatTypeName
-    },
     // 预约时间
-    performDateEven(val) {
-
+    performDateEven() {
+      this.$set(this.form, 'performTimeId', '')
+      this.getPerformTimeList();
     },
     /**
      * 保存
@@ -463,12 +482,24 @@ export default {
      */
     reset() {
       this.$set(this.form, 'id', '');
-      this.$set(this.form, 'goodsId', '');
-      this.$set(this.form, 'seatTypeId', '');
+      this.$set(this.form, 'teamId', '');
+      this.$set(this.form, 'teamName', '');
+      this.$set(this.form, 'theatreId', '');
+      this.$set(this.form, 'theatreName', '');
+      this.$set(this.form, 'auditoriumId', '');
+      this.$set(this.form, 'auditoriumName', '');
+
       this.$set(this.form, 'performId', '');
-      this.$set(this.form, 'originalSalePrice', '');
-      this.$set(this.form, 'salePrice', '');
-      this.$set(this.form, 'brokeragePrice', '');
+      this.$set(this.form, 'performName', '');
+      this.$set(this.form, 'seatTypeId', '');
+      this.$set(this.form, 'seatTypeName', '');
+      this.$set(this.form, 'goodsId', '');
+      this.$set(this.form, 'goodsName', '');
+
+      this.$set(this.form, 'performTimeId', '');
+      this.$set(this.form, 'performDate', '');
+      this.$set(this.form, 'price', '');
+
       this.$set(this.form, 'viewerList', []);
     },
     /**
@@ -480,18 +511,6 @@ export default {
       this.reset();
       this.open = false;
     },
-    /**
-     * 上传成功
-     * @date 2023-11-22
-     * @param {any} res
-     * @returns {any}
-     */
-    handleAvatarSuccess(res) {
-      if (res.code === 200) {
-        // this.form.mainImg = res?.data?.url;
-        this.$set(this.form, 'mainImg', res?.data?.url)
-      }
-    },
     /**
      * 上传文件之前之前
      * @date 2023-11-22
@@ -499,20 +518,16 @@ export default {
      * @returns {any}
      */
     beforeAvatarUpload(file) {
-      const isJPG = file.type === "image/jpeg" || "image/png";
-      if (!isJPG) {
-        this.$message.error("上传头像图片只能是jpg或png格式!");
-      }
-      this.uploadExcelApi(file.raw)
-      return isJPG;
+      this.uploadExcelApi(file.raw);
     },
-    // 上传图片
+    // 上传
     uploadExcelApi(file) {
       try {
         let formData = new FormData();
         formData.append("file", file);
         this.uploadLoading = true;
         uploadExcel(formData).then(response => {
+          this.$message.success("上传成功!");
           this.$set(this.form, 'viewerList', response.data)
         });
       } catch (e) {
@@ -520,33 +535,6 @@ export default {
         this.uploadLoading = false;
       }
     },
-    /**
-     * 剧目海报上传成功
-     * @date 2023-11-22
-     * @param {any} res
-     * @returns {any}
-     */
-    handlePhotoListSuccess(res) {
-      if (res.code === 200) {
-        let photo = {
-          imageUrl: res?.data?.url,
-          url: res?.data?.url,
-          photoType: '2'
-        }
-        if(!this.form.photoList){
-          this.form.photoList = []
-        }
-        // this.form.photoList.push(photo);
-        this.$set(this.form.photoList, this.form.photoList.length, photo);
-      }
-    },
-    handleRemove(file, fileList) {
-      this.form.photoList.forEach((item, index) => {
-        if(item.uid == file.uid){
-          this.form.photoList.splice(index, 1)
-        }
-      })
-    },
   },
 };
 </script>

+ 105 - 80
src/views/team/applicationMr/dialog/details.vue

@@ -21,40 +21,40 @@
       <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>
+          <div class="grid-content bg-purple item-class">团队名称: <span>{{ details.teamName || ''}}</span></div>
         </el-col>
         <el-col :span="12">
-          <div class="grid-content bg-purple item-class">团队类型: <span>{{ form.id || '' }}</span></div>
+          <div class="grid-content bg-purple item-class">团队类型: <span><dict-tag style="display: inline-block" :options="dict.type.team_type" :value="details.teamType"/></span></div>
         </el-col>
         <el-col :span="12">
-          <div class="grid-content bg-purple item-class">预约场馆: <span>{{ form.memberName || '' }}</span></div>
+          <div class="grid-content bg-purple item-class">预约场馆: <span>{{ details.theatreName || '' }}</span></div>
         </el-col>
         <el-col :span="12">
-          <div class="grid-content bg-purple item-class">预约演出厅: <span>{{ form.memberMobile || '' }}</span></div>
+          <div class="grid-content bg-purple item-class">预约演出厅: <span>{{ details.auditoriumName || '' }}</span></div>
         </el-col>
         <el-col :span="12">
-          <div class="grid-content bg-purple item-class">预约剧目: <span>{{ form.memberCardId || '' }}</span></div>
+          <div class="grid-content bg-purple item-class">预约剧目: <span>{{ details.performName || '' }}</span></div>
         </el-col>
         <el-col :span="12">
-          <div class="grid-content bg-purple item-class">票务名称: <span>{{ form.performName || '' }}</span></div>
+          <div class="grid-content bg-purple item-class">票务名称: <span>{{ details.goodsName || '' }}</span></div>
         </el-col>
         <el-col :span="12">
-          <div class="grid-content bg-purple item-class">座位类型: <span>{{ form.seatTypeName || '' }}</span></div>
+          <div class="grid-content bg-purple item-class">座位类型: <span>{{ details.seatTypeName || '' }}</span></div>
         </el-col>
         <el-col :span="12">
-          <div class="grid-content bg-purple item-class">团购单价: <span>{{ form.seatTypeName || '' }}</span></div>
+          <div class="grid-content bg-purple item-class">团购单价: <span>¥{{ details.price || '' }}</span></div>
         </el-col>
         <el-col :span="12">
-          <div class="grid-content bg-purple item-class">预约时间: <span>{{ form.seatTypeName || '' }}</span></div>
+          <div class="grid-content bg-purple item-class">预约时间: <span>{{ details.performDate || '' }}日 {{ details.performTimeStart || '' }} {{ details.performTimeEnd || '' }}</span></div>
         </el-col>
         <el-col :span="12">
-          <div class="grid-content bg-purple item-class">报名时间: <span>{{ form.seatTypeName || '' }}</span></div>
+          <div class="grid-content bg-purple item-class">报名时间: <span>{{ details.createTime || '' }}</span></div>
         </el-col>
         <el-col :span="12">
-          <div class="grid-content bg-purple item-class">负责人: <span>{{ form.seatTypeName || '' }}</span></div>
+          <div class="grid-content bg-purple item-class">负责人: <span>{{ details.teamContact || '' }}</span></div>
         </el-col>
         <el-col :span="12">
-          <div class="grid-content bg-purple item-class">联系电话: <span>{{ sourceList[form.source] || '' }}</span></div>
+          <div class="grid-content bg-purple item-class">联系电话: <span>{{ details.teamMobile || '' }}</span></div>
         </el-col>
       </el-row>
 
@@ -63,10 +63,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="details.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="身份证号码" width="180" align="center" prop="idcard" />
+            <el-table-column label="身份证号码" align="center" prop="cardId" />
           </el-table>
         </el-col>
       </el-row>
@@ -92,12 +92,12 @@
       @close="rejectOpen = false"
     >
       <div class="dialog">
-        <el-form :model="rejectForm" ref="rejectForm" :rules="rejectRules" label-width="90px">
-          <el-form-item label="驳回原因:" prop="name">
+        <el-form :model="rejectForm" ref="refRejectForm" :rules="rejectRules" label-width="90px">
+          <el-form-item label="驳回原因:" prop="errReason">
             <el-input
               type="textarea"
               placeholder="请输入驳回原因"
-              v-model="rejectForm.name"
+              v-model="rejectForm.errReason"
               maxlength="300"
               show-word-limit
             >
@@ -132,14 +132,13 @@
     >
       <!--  座位排版  -->
       <div class="dialog">
-        <div class="seat-box-class">
-          <div class="seat-item-class" :class="item.isDisabled ? 'disabled-class' : item.isSelect ? 'select-class' : ''" v-for="(item, index) in seatMapList" @click.stop="seatClick(item)" :key="item">
-            <p class="text-class">{{item.row}}排{{item.col}}列</p>
-<!--            <i class="el-icon-circle-check" v-if="item.isSelect"></i>-->
+        <div class="seat-box-class clearfix" v-if="seatMapList && seatMapList.length > 0">
+          <div class="seat-item-class" :class="item.isDisabled ? 'disabled-class' : item.isSelect ? 'select-class' : ''" v-for="(item, index) in seatMapList" @click.stop="seatClick(item)" :key="index">
+            <p class="text-class">{{item.name ? item.name : (item.rowNo + '排' + item.columnNo + '座')}}</p>
           </div>
         </div>
       </div>
-
+      <div style="margin-top: 5px; margin-left: 30px">已勾选:{{ seatSelectList.length }}个座位</div>
       <span slot="footer" class="dialog-footer">
       <el-button @click="passOpen = false">取消</el-button>
       <el-button
@@ -160,9 +159,16 @@
 </template>
 
 <script>
-import { getSelectById } from '@/api/order/orderMr'
+import { getSelectById, teamApplyAudit, querySeatList } from '@/api/team/applicationMr'
+import { updateStatus } from '@/api/team/ticketMr'
 export default {
-  name: "appDetails",
+  name: "applicationDetails",
+  props: {
+    dict: {
+      type: Object,
+      default: () => [],
+    },
+  },
   data() {
     return {
       title: "编辑",
@@ -174,41 +180,23 @@ export default {
       form: {
         id: undefined,
       },
+      details: {},
       performerVisible: false,
       performerList: [],
       refund: false,
       rejectRules: {
-        name: [{ required: true, message: "请输入驳回原因", trigger: "blur" }],
-      },
-      statusList: {
-        0: '待支付',
-        2: '超时取消',
-        3: '支付完成,待使用',
-        4: '退款中',
-        5: '己退款',
-        6: '退款失败',
-        7: '己使用',
-        8: '己超期',
-        9: '关闭',
-      },
-      payList: {
-        0: '未支付',
-        1: '已支付',
-        2: '支付中',
-        3: '支付失败',
-        4: '支付退款',
-      },
-      sourceList: {
-        1: '小程序',
-        2: '美团',
-        3: '携程',
-        4: '公众号',
-        5: '支付宝',
+        errReason: [{ required: true, message: "请输入驳回原因", trigger: "blur" }],
       },
       dataList: [],
-      rejectForm: {},
+      rejectForm: {
+        status: 2
+      },
       detailsType: false,
       seatMapList: [], // 座位集合
+      applyId: '', // 申请单id
+      applyMap: {},
+      setList: [],
+      seatSelectList: []
     };
   },
   methods: {
@@ -220,6 +208,10 @@ export default {
      */
     openDialog(title, obj, type) {
       this.open = true;
+      this.rejectOpen = false;
+      this.passOpen = false;
+      this.applyId = obj.id;
+      this.applyMap = obj;
       if(type) {
         this.detailsType = true
         this.title = '审核'
@@ -233,21 +225,31 @@ export default {
     getSelectByIdApi(row) {
       const id = row.id
       getSelectById(id).then(response => {
-        this.form = response.data;
+        this.details = response.data;
       });
     },
-    // 设置座位集合
-    setSeatMapList() {
-      for (let i = 0; i < 100; i++) {
-        let map = {
-          id: i,
-          row: i,
-          col: i,
-          name: i,
-          isDisabled: i % 4 == 0,
-          isSelect: false,
+    /** 获取座位信息 */
+    getSeatApi(row) {
+      let map = {
+        auditoriumId: this.applyMap.auditoriumId,
+        seatTypeId: this.applyMap.seatTypeId,
+        timeId: this.applyMap.performId,
+      }
+      querySeatList(map).then(response => {
+        this.setList = response.data;
+        if(this.setList && this.setList.length > 0) {
+          this.setSeatMapList(this.setList);
         }
-        this.seatMapList.push(map)
+      });
+    },
+    // 设置座位集合
+    setSeatMapList(list) {
+      if(list && list.length > 0) {
+        list.forEach(item => {
+          item.isDisabled = (item.occupyStatus && (item.occupyStatus == 0 || item.occupyStatus == 1) ? true : false); // 座位是否已被选择
+          item.isSelect = false;
+          this.seatMapList.push(item)
+        })
       }
     },
     // 座位点击事件
@@ -256,10 +258,15 @@ export default {
         return false
       }
       row.isSelect = !row.isSelect
+      this.seatSelectList = this.seatMapList.filter(item => item.isSelect);
+      this.$forceUpdate()
     },
     // 审核通过
     passOpenEven() {
       this.passOpen = true;
+      this.seatMapList = [];
+      this.seatSelectList = [];
+      this.getSeatApi();
       this.setSeatMapList()
     },
     /**
@@ -268,11 +275,12 @@ export default {
      * @returns {any}
      */
     submitForm() {
-      this.$refs["rejectOpen"].validate(async (valid) => {
+      this.$refs["refRejectForm"].validate(async (valid) => {
         if (valid) {
           try {
             this.loading = true;
-            const { code } = await saveAndEdit({ ...this.rejectForm });
+            this.rejectForm.applyId = this.details.id || this.applyId;
+            const { code } = await teamApplyAudit({ ...this.rejectForm });
             if (code === 200) {
               this.$message.success("操作成功!");
               this.$emit("getList");
@@ -281,13 +289,36 @@ export default {
           } catch (error) {
           } finally {
             this.loading = false;
+            this.rejectOpen = false;
           }
         }
       });
     },
     // 审核通过 - 座位选择保存
     submitPass() {
-
+      try {
+        this.loading = true;
+        let seatList = this.seatMapList.filter(item => item.isSelect);
+        if(seatList && seatList.length > 0) {
+          let postMap = {
+            applyId: this.details.id || this.applyId,
+            status: 1,
+            seatList: seatList
+          }
+          teamApplyAudit(postMap).then((res) => {
+            if (res.code == 200) {
+              this.$message.success("操作成功!");
+              this.$emit("getList");
+              this.cancel();
+            }
+          });
+        } else {
+          this.$message.error("请选择座位!");
+        }
+      } catch (error) {
+      } finally {
+        this.loading = false;
+      }
     },
     /**
      * 关闭弹框
@@ -346,16 +377,17 @@ export default {
       background-color: #aaabad;
     }
     .select-class{
-      background-color: #e85353;
+      background-color: #e85353 !important;
       color: #eceaea !important;
     }
     .seat-item-class{
-      display: inline-block;
-      width: 50px;
-      height: 50px;
+      display: block;
+      float: left;
+      width: 60px;
+      height: 60px;
       margin: 5px;
       border: 1px solid #4c4d4d;
-      border-radius: 2px;
+      border-radius: 3px;
       cursor: pointer;
       position: relative;
       &:hover{
@@ -363,18 +395,11 @@ export default {
       }
 
       .text-class{
-        font-size: 14px;
+        font-size: 12px;
         padding: 5px;
+        line-height: 16px;
         margin: 0;
       }
-
-      i{
-        position: absolute;
-        top: 10px;
-        right: 10px;
-        font-size: 30px;
-        color: red;
-      }
     }
   }
 }

+ 39 - 33
src/views/team/applicationMr/dialog/orderDetails.vue

@@ -21,56 +21,56 @@
       <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>
+          <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>{{ form.id || '' }}</span></div>
+          <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.memberName || '' }}</span></div>
+          <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.memberMobile || '' }}</span></div>
+          <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.memberCardId || '' }}</span></div>
+          <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.performName || '' }}</span></div>
+          <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>{{ form.seatTypeName || '' }}</span></div>
+          <div class="grid-content bg-purple item-class">团购单价: <span>¥{{ form.price || '' }}</span></div>
         </el-col>
         <el-col :span="12">
-          <div class="grid-content bg-purple item-class">预约时间: <span>{{ form.seatTypeName || '' }}</span></div>
+          <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>{{ form.seatTypeName || '' }}</span></div>
+          <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>{{ form.seatTypeName || '' }}</span></div>
+          <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>{{ sourceList[form.source] || '' }}</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.viewerNum || '' }}</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>
+          <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.priceTotal || '' }}</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.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>
 
 
@@ -81,15 +81,15 @@
           <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="身份证号码" width="180" align="center" prop="idcard" />
+            <el-table-column label="身份证号码" align="center" prop="idcard" />
             <el-table-column label="核销状态" align="center">
               <template slot-scope="scope">
-                <el-tag v-if="scope.row.status == 0">未使用</el-tag>
-                <el-tag v-if="scope.row.status == 1" type="success">已使用</el-tag>
-                <el-tag v-if="scope.row.status == 2" type="info">过期</el-tag>
+                <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="useTime" />
             <el-table-column label="座位信息" align="center" prop="seatName" />
           </el-table>
         </el-col>
@@ -104,9 +104,15 @@
 </template>
 
 <script>
-import { getSelectById } from '@/api/order/orderMr'
+import { getOrderDetail } from '@/api/team/applicationMr'
 export default {
   name: "orderDetails",
+  props: {
+    dict: {
+      type: Object,
+      default: () => [],
+    },
+  },
   data() {
     return {
       title: "编辑",
@@ -161,7 +167,7 @@ export default {
     /** 获取详情 */
     getSelectByIdApi(row) {
       const id = row.id
-      getSelectById(id).then(response => {
+      getOrderDetail(id).then(response => {
         this.form = response.data;
       });
     },

+ 16 - 14
src/views/team/applicationMr/index.vue

@@ -3,7 +3,7 @@
     <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="120px">
       <el-form-item label="团队名称" label-width="70px">
         <el-input
-          v-model="queryParams.goodsName"
+          v-model="queryParams.teamName"
           placeholder="请输入团队名称"
           clearable
           style="width: 240px;"
@@ -70,12 +70,12 @@
       <el-table-column label="座位类型" align="center" prop="seatTypeName" />
       <el-table-column label="团购单价" align="center" prop="price">
         <template slot-scope="scope">
-          <span v-if="scope.row.originalSalePrice">¥{{ scope.row.price }}</span>
+          <span v-if="scope.row.price">¥{{ scope.row.price }}</span>
         </template>
       </el-table-column>
-      <el-table-column label="预约时间" align="center" prop="performTimeStart" width="160">
+      <el-table-column label="预约时间" align="center" width="160">
         <template slot-scope="scope">
-          <span>{{ parseTime(scope.row.performTimeStart) }}</span>
+          <span>{{ scope.row.performDate }}日 {{ scope.row.performTimeStart }}-{{ scope.row.performTimeEnd }}</span>
         </template>
       </el-table-column>
       <el-table-column label="观影人数" align="center" prop="viewerNum" />
@@ -97,8 +97,8 @@
           <span>{{ parseTime(scope.row.createTime) }}</span>
         </template>
       </el-table-column>
-      <el-table-column label="审核人" align="center" prop="teamPersonNum" />
-      <el-table-column label="操作" align="center" width="200" class-name="small-padding fixed-width">
+      <el-table-column label="审核人" align="center" prop="createBy" />
+      <el-table-column label="操作" align="center" fixed="right" width="150" class-name="small-padding fixed-width">
         <template slot-scope="scope">
 <!--          <el-button-->
 <!--            size="mini"-->
@@ -146,11 +146,13 @@
     />
 
     <!-- 详情弹框 -->
-    <app-details
-      ref="appDetails"></app-details>
+    <application-details
+      :dict="dict"
+      ref="appDetails"></application-details>
 
     <!-- 团购订单详情弹框 -->
     <order-details
+      :dict="dict"
       ref="orderDetails"></order-details>
 
     <el-dialog
@@ -181,15 +183,13 @@
 
 import { pageList, deleteById, updateStatus } from '@/api/team/applicationMr'
 import addAndEdit from "./dialog/addAndEdit.vue";
-import details from "./dialog/details.vue";
+import applicationDetails from "./dialog/applicationDetails.vue";
 import orderDetails from "./dialog/orderDetails.vue";
 import { ticketPageList } from '@/api/ticketMr/ticketMr'
-import DetailsDia from '@/views/perform/programmeMr/dialog/details.vue'
-import AppDetails from '@/views/team/applicationMr/dialog/details.vue'
 export default {
   name: "agreement",
-  dicts: ['distribution_type'],
-  components: { AppDetails, DetailsDia, addAndEdit, details, orderDetails },
+  dicts: ['team_type'],
+  components: { addAndEdit, applicationDetails, orderDetails },
   data() {
     return {
       // 遮罩层
@@ -272,7 +272,9 @@ export default {
     /** 重置按钮操作 */
     resetQuery() {
       this.dateRange = [];
-      this.$set(this.queryParams, 'goodsName', '');
+      this.$set(this.queryParams, 'teamName', '');
+      this.$set(this.queryParams, 'goodsId', '');
+      this.$set(this.queryParams, 'status', '');
       this.queryParams.pageNum = 1;
       this.handleQuery();
     },

+ 11 - 2
src/views/team/ticketMr/dialog/addAndEdit.vue

@@ -230,7 +230,13 @@ export default {
     getSeatTypeList(obj) {
       seatPricePageList(this.addDateRange({pageNum: 1, pageSize: 100, goodsId: obj.goodsId, performId: obj.performId}))
         .then(response => {
-          this.seatList = response.data.rows;
+          let ticketList = []
+          response.data.rows.forEach(item => {
+            if(ticketList.indexOf(item.seatTypeId) == -1){
+              this.seatList.push(item);
+              ticketList.push(item.seatTypeId);
+            }
+          })
         });
     },
     /** 价格输入事件 */
@@ -246,6 +252,8 @@ export default {
       this.seatList = [];
       this.ticketList = [];
       this.$set(this.form, 'originalSalePrice', '')
+      this.$set(this.form, 'goodsId', '');
+      this.$set(this.form, 'seatTypeId', '');
       this.ticketListApi(val);
     },
     // 票务改变事件
@@ -258,7 +266,7 @@ export default {
     },
     // 座位类型改变事件
     seatChangeEven(val) {
-      this.ticketList.forEach(item => {
+      this.seatList.forEach(item => {
         if(item.seatTypeId == val){
           this.$set(this.form, 'originalSalePrice', item.priceAmount);
         }
@@ -300,6 +308,7 @@ export default {
       this.$set(this.form, 'originalSalePrice', '');
       this.$set(this.form, 'salePrice', '');
       this.$set(this.form, 'brokeragePrice', '');
+      this.$set(this.form, 'teamPersonNum', '');
     },
     /**
      * 关闭弹框

+ 3 - 3
src/views/team/ticketMr/dialog/dumplingEdit.vue

@@ -81,7 +81,7 @@
           :total="selectionTabTotal"
           :page.sync="selectQueryParams.pageNum"
           :limit.sync="selectQueryParams.pageSize"
-          @pagination="getList"
+          @pagination="getSelectList"
         />
       </div>
       <span slot="footer" class="dialog-footer">
@@ -170,7 +170,7 @@ export default {
     /** 查询列表 */
     getList(obj) {
       this.tabLoading = true;
-      this.queryParams.configId = obj.id
+      this.queryParams.configId = this.onwObj.id
       queryBindTeam(this.queryParams)
         .then(response => {
             this.dataList = response.data.rows;
@@ -230,7 +230,7 @@ export default {
     },
     /** 删除按钮操作 */
     handleDelete(row) {
-      this.$confirm('是否确认移除数据剧目名称为"' + row.name + '"的数据项?', '提示', {
+      this.$confirm('是否确认移除数据团队名称为"' + row.name + '"的数据项?', '提示', {
         confirmButtonText: '确定',
         cancelButtonText: '取消',
         type: 'warning'

+ 1 - 1
src/views/venue/performanceHallMr/dialog/seatTemplateEdit.vue

@@ -100,7 +100,7 @@
                        backgroundColor: colSeatMap[row+'_'+col] && colSeatMap[row+'_'+col].color ? colSeatMap[row+'_'+col].color : ''}"
                   >
                     <div v-if="seatWidth > 160" :style="{paddingTop: (seatWidth / 4) + 'px', width: seatWidth + 'px', height: seatWidth + 'px'}" class="seat-p-class">
-                      <p style="font-size: 16px !important;"><span v-if="colSeatMap[row+'_'+col].name">{{colSeatMap[row+'_'+col].name}}</span><span style="font-size: 14px !important;" v-if="colSeatMap[row+'_'+col].seatLabel">({{colSeatMap[row+'_'+col].seatLabel}})</span></p>
+                      <p style="font-size: 16px !important;"><span>{{colSeatMap[row+'_'+col].name ? colSeatMap[row+'_'+col].name : (colSeatMap[row+'_'+col].rowNo + '排' + colSeatMap[row+'_'+col].columnNo + '座')}}</span><span style="font-size: 14px !important;" v-if="colSeatMap[row+'_'+col].seatLabel">({{colSeatMap[row+'_'+col].seatLabel}})</span></p>
                       <p style="font-size: 14px !important;" v-if="colSeatMap[row+'_'+col].priority">自动分配优先级 <span>({{colSeatMap[row+'_'+col].priority}})</span></p>
                     </div>
                   </div>