|
@@ -0,0 +1,676 @@
|
|
|
+<!--
|
|
|
+ * @Description: 详情弹框
|
|
|
+ * @Author: Sugar.
|
|
|
+ * @Date: 2023-11-24 13:55:00
|
|
|
+ * @LastEditors: gcz
|
|
|
+ * @LastEditTime: 2025-03-20 15:30:52
|
|
|
+ * @FilePath: \great_webui\src\views\order\orderMr\dialog\details.vue
|
|
|
+ * @Copyright: Copyright (c) 2016~2023 by Sugar., All Rights Reserved.
|
|
|
+-->
|
|
|
+<template>
|
|
|
+ <el-dialog :title="title" :visible.sync="open" width="96%" append-to-body :close-on-click-modal="false"
|
|
|
+ @close="cancel">
|
|
|
+ <div v-loading="loading" class="dialog dialog-bbb" v-if="form">
|
|
|
+ <div v-loading="loading_form" element-loading-text="加载详情中...">
|
|
|
+ <!-- 基础信息 -->
|
|
|
+ <div class="title-class" style="margin-top: 0">基础信息</div>
|
|
|
+ <el-row v-for="(item, index) in formList" :key="index">
|
|
|
+ <el-col :span="12" v-for="(item1, index1) in item" :key="index1">
|
|
|
+ <div class="grid-content bg-purple item-class">
|
|
|
+ <span>{{ item1.lable }}</span>
|
|
|
+ <span>{{ form[item1.key] }}</span>
|
|
|
+ </div>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ <el-row>
|
|
|
+ <el-form :model="form" ref="form" size="mini" :rules="rules" label-width="100px">
|
|
|
+ <div style="display: flex;">
|
|
|
+ <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.performTimeId" laceholder="选择场次" clearable style="width: 100%;"
|
|
|
+ @change="performTimeIdEven">
|
|
|
+ <el-option v-for="dict in performTimeList" :key="dict.performTimeId" :label="dict.performInterval"
|
|
|
+ :value="dict.performTimeId" />
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ </div>
|
|
|
+ <div style="display: flex;">
|
|
|
+ <el-form-item label="票务名称:" prop="goodsId">
|
|
|
+ <el-select v-model="form.goodsId" placeholder="票务名称" clearable @change="goodsChangeEven"
|
|
|
+ style="width: 100%;">
|
|
|
+ <el-option v-for="dict in ticketList" :key="dict.id" :label="dict.goodsName" :value="dict.id" />
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="票档:" prop="seatTypeId">
|
|
|
+ <el-select v-model="form.seatTypeId" placeholder="票档" clearable @change="seatChangeEven"
|
|
|
+ style="width: 100%;">
|
|
|
+ <el-option v-for="dict in seatList" :key="dict.seatTypeId" :label="dict.seatTypeName"
|
|
|
+ :value="dict.seatTypeId" />
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ </div>
|
|
|
+ </el-form>
|
|
|
+ </el-row>
|
|
|
+ <el-row>
|
|
|
+ <el-col :span="12">
|
|
|
+ <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>{{ this.form.viewerList && (form.price || form.price === 0 ) ? form.price * this.form.viewerList.length : '' }}</span></div>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ <!-- 观影人员信息 -->
|
|
|
+ <div class="title-class" style="display: flex;">
|
|
|
+ 观影人员信息:
|
|
|
+ <el-upload class="upload-demo" :action="uploadObj.url" :headers="uploadObj.headers" :auto-upload="false"
|
|
|
+ :disabled="uploadLoading" :show-file-list="false" :on-change="beforeAvatarUpload">
|
|
|
+ <el-button size="small" type="primary" :loading="uploadLoading">{{ form.viewerList &&
|
|
|
+ form.viewerList.length == 0 ? '导入excel' : '重新导入excel' }}</el-button>
|
|
|
+ <div slot="tip" class="el-upload__tip">
|
|
|
+ 上传excel文件,导入模板表头序号、姓名、身份证号码
|
|
|
+ <i @click="handleExport" style="color: #1890ff;cursor: pointer;">下载模板</i>
|
|
|
+ </div>
|
|
|
+ </el-upload>
|
|
|
+ </div>
|
|
|
+ <el-row>
|
|
|
+ <el-col :span="24">
|
|
|
+ <el-table ref="tables" :data="form.viewerList" 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="cardId" />
|
|
|
+ </el-table>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ </div>
|
|
|
+ <div class="dialog-bbb_2" v-loading="loading_seta" element-loading-text="加载座位图中...">
|
|
|
+ <seatBox ref="seatBox" :seatTypeLimit="configStockNumObj" @selectSeat="selectSeat" height="100%"
|
|
|
+ channelType="group" />
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <span slot="footer" class="dialog-footer">
|
|
|
+ <el-button @click="cancel()" :loading="loading">取消</el-button>
|
|
|
+ <el-button type="primary" @click="handleResetOpen()" :loading="loading">
|
|
|
+ <span v-if="loading">提交中...</span>
|
|
|
+ <span v-else>确认修改</span>
|
|
|
+ </el-button>
|
|
|
+ </span>
|
|
|
+ </el-dialog>
|
|
|
+</template>
|
|
|
+
|
|
|
+<script>
|
|
|
+import {
|
|
|
+ getSelectById,
|
|
|
+ getDateTimeAllApi,
|
|
|
+ listGoodsByTeamIdApi,
|
|
|
+ teamOrderReSubmitApi
|
|
|
+} from '@/api/order/groupBuyingMr'
|
|
|
+import { downloadModel, uploadExcel } from "@/api/team/applicationMr";
|
|
|
+import { pageList as getSeatType } from '@/api/seatTypeMr/seatTypeMr'
|
|
|
+import seatBox from '@/components/seatBox/index.vue';
|
|
|
+import { countBySeatTyp } from '@/api/ticketMr/InventoryTemplate'
|
|
|
+import {
|
|
|
+ querySeatListNew
|
|
|
+} from '@/api/windowTicketSales/ticketingSales'
|
|
|
+import { getToken } from "@/utils/auth";
|
|
|
+export default {
|
|
|
+ name: "detailsDia",
|
|
|
+ dicts: ['order_form_type', 'order_status_type', 'pay_way_type', 'personnel_type'],
|
|
|
+ components: {
|
|
|
+ seatBox
|
|
|
+ },
|
|
|
+ data() {
|
|
|
+ return {
|
|
|
+ title: "订单详情",
|
|
|
+ model: "EDIT",
|
|
|
+ open: false,
|
|
|
+ loading: false,
|
|
|
+ formList: [
|
|
|
+ [
|
|
|
+ { lable: '团队名称:', key: 'teamName' },
|
|
|
+ { lable: '团队类型:', key: 'teamType' },
|
|
|
+ ],
|
|
|
+ [
|
|
|
+ { lable: '预约场馆:', key: 'theatreName' },
|
|
|
+ { lable: '预约演出厅:', key: 'auditoriumName' },
|
|
|
+ ],
|
|
|
+ [
|
|
|
+ { lable: '预约剧目:', key: 'performName' },
|
|
|
+ { lable: '报名时间:', key: 'applyTime' },
|
|
|
+ ],
|
|
|
+ [
|
|
|
+ { lable: '客户负责人:', key: 'teamContact' },
|
|
|
+ { lable: '销售员:', key: 'salerPerson' },
|
|
|
+ ],
|
|
|
+ [
|
|
|
+ { lable: '联系电话:', key: 'teamMobile' },
|
|
|
+ { lable: '带队负责人姓名:', key: 'linkName' },
|
|
|
+ ],
|
|
|
+ [
|
|
|
+ { lable: '带队负责人联系电话:', key: 'linkPhone' },
|
|
|
+ ],
|
|
|
+ ],
|
|
|
+ form: {
|
|
|
+ id: undefined,
|
|
|
+ },
|
|
|
+ performerList: [],
|
|
|
+ refund: false,
|
|
|
+ dataList: [],
|
|
|
+
|
|
|
+
|
|
|
+ merchantTheatreAuditoriumListS: [], // 演出厅
|
|
|
+ merchantPerformTimeListS: [], // 场次
|
|
|
+ querySeatListS: [], // 座位
|
|
|
+ goodsPageListS: [], // 票务
|
|
|
+ goodsPageListSAll: [], // 票务全部
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ lockOrUnLockLoading: false,
|
|
|
+
|
|
|
+ performId: '',// 剧目ID
|
|
|
+ scaleNum: 30,
|
|
|
+
|
|
|
+ justifyContent: false,
|
|
|
+
|
|
|
+ loading_form: false,// 加载表单
|
|
|
+ loading_seta: false, // 加载座位
|
|
|
+ orderType: 'normal', // 订单类型 normal:没有新订单和原订单,new:有新订单,old:有原订单
|
|
|
+
|
|
|
+ setList: [],
|
|
|
+ seatTypeList: [],
|
|
|
+ seatSelectList: [],
|
|
|
+ configStockNumObj: {},
|
|
|
+ countBySeatTypList: [],
|
|
|
+ seatTypeListAll: [],
|
|
|
+ seatLoading: false,
|
|
|
+ seatLoadText: '获取座位中...',
|
|
|
+
|
|
|
+ goodsList: [],
|
|
|
+ ticketList: [],
|
|
|
+ seatList: [],
|
|
|
+ merchantList: [],
|
|
|
+ theatreList: [],
|
|
|
+ teamList: [],
|
|
|
+ sessionList: [],
|
|
|
+ performTimeList: [],
|
|
|
+ teamIdLoading: false,
|
|
|
+ rules: {
|
|
|
+ performDate: [{ required: true, message: "请选择日期", trigger: ["change", "blur"] }],
|
|
|
+ goodsId: [{ required: true, message: "请选择票务", trigger: ["change", "blur"] }],
|
|
|
+ seatTypeId: [{ required: true, message: "请选择座位类型", trigger: ["change", "blur"] }],
|
|
|
+ performTimeId: [{ required: true, message: "请选择预约场次", trigger: ["change", "blur"] }],
|
|
|
+ },
|
|
|
+
|
|
|
+ uploadLoading: false,
|
|
|
+ uploadObj: {
|
|
|
+ url: process.env.VUE_APP_UPLOAD_FILE_API + "/upload/single/minio",
|
|
|
+ Headers: { Authorization: "Bearer " + getToken() },
|
|
|
+ },
|
|
|
+ };
|
|
|
+ },
|
|
|
+ created() {
|
|
|
+ this.getSeatTypeList()
|
|
|
+ },
|
|
|
+ methods: {
|
|
|
+ /**
|
|
|
+ * 打开弹框
|
|
|
+ * @date 2023-11-22
|
|
|
+ * @param {any} obj
|
|
|
+ * @returns {any}
|
|
|
+ */
|
|
|
+ async openDialog(title, obj, type) {
|
|
|
+ try {
|
|
|
+ this.orderType = type;
|
|
|
+ this.open = true;
|
|
|
+ this.form = {}
|
|
|
+ this.querySeatListS = [];
|
|
|
+ this.setList = [];
|
|
|
+ this.seatSelectList = [];
|
|
|
+ if (this.orderType == 'old') {
|
|
|
+ this.title = "订单详情(已改签)"
|
|
|
+ } else if (this.orderType == 'new') {
|
|
|
+ id = row.newOrderId
|
|
|
+ this.title = "改签订单详情"
|
|
|
+ } else {
|
|
|
+ this.title = "订单详情"
|
|
|
+ }
|
|
|
+ await this.getSelectByIdApi(obj);
|
|
|
+ await this.countBySeatTypFun(this.form.auditoriumId)
|
|
|
+ await this.getDateTimeAllFun()
|
|
|
+ await this.getPerformTimeList()
|
|
|
+ this.goodsChangeEven(this.form.goodsId, 'dfsd')
|
|
|
+ await this.querySeatListFun()
|
|
|
+ } catch (error) {
|
|
|
+ console.error(error)
|
|
|
+ this.open = false;
|
|
|
+ }
|
|
|
+
|
|
|
+ },
|
|
|
+ /** 获取详情 */
|
|
|
+ async getSelectByIdApi(row) {
|
|
|
+ let id = row.id;
|
|
|
+ if (this.orderType == 'old') {
|
|
|
+ id = row.orgOrderId
|
|
|
+ } else if (this.orderType == 'new') {
|
|
|
+ id = row.newOrderId
|
|
|
+ }
|
|
|
+ try {
|
|
|
+ this.loading_form = true// 加载表单
|
|
|
+ let res = await getSelectById(id)
|
|
|
+ this.seatSelectList = []//res.data.viewerList
|
|
|
+ this.$set(this, "form", {
|
|
|
+ ...res.data,
|
|
|
+ "viewerList": res.data.viewersOrderList.map((item) => {
|
|
|
+ return {
|
|
|
+ name: item.name,
|
|
|
+ cardId: item.idCard
|
|
|
+ }
|
|
|
+ }),
|
|
|
+ })
|
|
|
+ this.loading_form = false// 加载表单
|
|
|
+ } catch (error) {
|
|
|
+ console.error(error)
|
|
|
+ this.loading_form = false// 加载表单
|
|
|
+ }
|
|
|
+
|
|
|
+ },
|
|
|
+ async querySeatListFun() {
|
|
|
+ try {
|
|
|
+ this.loading_seta = true // 加载座位
|
|
|
+ let res = await querySeatListNew({
|
|
|
+ auditoriumId: this.form.auditoriumId,
|
|
|
+ timeId: this.form.performTimeId,
|
|
|
+ goodsId: this.form.goodsId,
|
|
|
+ channelType: 'group'
|
|
|
+ })
|
|
|
+ let list1 = []
|
|
|
+ res.data.forEach((item, index) => {
|
|
|
+ list1.push({
|
|
|
+ ...item,
|
|
|
+ isSame: item.seatTypeId != this.form.seatTypeId
|
|
|
+ })
|
|
|
+ })
|
|
|
+ this.setList = list1;
|
|
|
+ let list = this.seatSelectList
|
|
|
+ let list3 = []
|
|
|
+ this.countBySeatTypList.forEach((item, index) => {
|
|
|
+ list3.push(item.seatTypeId)
|
|
|
+ })
|
|
|
+ let list4 = []
|
|
|
+ this.seatTypeList.forEach((item, index) => {
|
|
|
+ if (list3.includes(item.id)) {
|
|
|
+ list4.push({ ...item })
|
|
|
+ }
|
|
|
+ })
|
|
|
+ this.$nextTick(() => {
|
|
|
+ this.$refs.seatBox.querySeatListFun(true, this.setList, list, list4)
|
|
|
+ })
|
|
|
+ this.loading_seta = false// 加载表单
|
|
|
+ } catch (error) {
|
|
|
+ console.error(error)
|
|
|
+ this.loading_seta = false// 加载表单
|
|
|
+ }
|
|
|
+ },
|
|
|
+ /** 获取座位类型全部 说明 */
|
|
|
+ getSeatTypeList() {
|
|
|
+ getSeatType({
|
|
|
+ pageNum: 1,
|
|
|
+ pageSize: 999,
|
|
|
+ })
|
|
|
+ .then(response => {
|
|
|
+ this.seatTypeList = response.data.rows;
|
|
|
+ });
|
|
|
+ },
|
|
|
+ /** 获取剧目的座位类型 */
|
|
|
+ async countBySeatTypFun(value) {
|
|
|
+ try {
|
|
|
+ if (!value) return
|
|
|
+ let res = await countBySeatTyp({ auditoriumId: value })
|
|
|
+ this.countBySeatTypList = res.data ? res.data : []
|
|
|
+ let obj = {}
|
|
|
+ this.countBySeatTypList.forEach((item, index) => {
|
|
|
+ obj['seatNum_' + item.seatTypeId] = {
|
|
|
+ stockTotal: item.stock,
|
|
|
+ stockSelect: item.stock,
|
|
|
+ stockYes: item.stock,
|
|
|
+ stockNo: 0,
|
|
|
+ isNoSelect: true,
|
|
|
+ }
|
|
|
+ if (item.seatTypeId == this.form.seatTypeId) {
|
|
|
+ obj['seatNum_' + item.seatTypeId].stockYes = item.stock - this.form.viewerList.length
|
|
|
+ obj['seatNum_' + item.seatTypeId].isNoSelect = false
|
|
|
+ }
|
|
|
+ })
|
|
|
+ this.configStockNumObj = obj
|
|
|
+ } catch (error) {
|
|
|
+ console.error("error1====", error)
|
|
|
+ }
|
|
|
+ },
|
|
|
+ /** 选择座位 */
|
|
|
+ selectSeat(list) {
|
|
|
+ let list1 = []
|
|
|
+ list.forEach((item) => {
|
|
|
+ list1.push({
|
|
|
+ seatId: item.id,
|
|
|
+ seatName: item.name
|
|
|
+ })
|
|
|
+ })
|
|
|
+ this.seatSelectList = list1
|
|
|
+ console.log("已选择的====", list)
|
|
|
+ },
|
|
|
+ // 选择场次时间
|
|
|
+ performDateEven() {
|
|
|
+ this.$set(this.form, 'performTimeId', '')
|
|
|
+ this.$set(this.form, 'goodsId', '');
|
|
|
+ this.$set(this.form, 'seatTypeId', '');
|
|
|
+ this.$set(this.form, 'price', '')
|
|
|
+ this.performTimeList = [] // 场次
|
|
|
+ this.ticketList = [] // 票务
|
|
|
+ this.seatList = [] // 座位类型
|
|
|
+ this.getDateTimeAllFun(); // 获取场次
|
|
|
+ },
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取剧目演出厅某日期场次列表
|
|
|
+ *
|
|
|
+ */
|
|
|
+ async getDateTimeAllFun() {
|
|
|
+ try {
|
|
|
+ if (!this.form.performDate) {
|
|
|
+ this.$message.error("请选择日期!");
|
|
|
+ return false
|
|
|
+ }
|
|
|
+ let res = await getDateTimeAllApi({
|
|
|
+ performDate: this.form.performDate,
|
|
|
+ performId: this.form.performId,
|
|
|
+ auditoriumId: this.form.auditoriumId,
|
|
|
+ })
|
|
|
+ this.performTimeList = res.data.list;
|
|
|
+ } catch (error) {
|
|
|
+ console.error(error)
|
|
|
+ }
|
|
|
+ },
|
|
|
+ /**
|
|
|
+ * 查询团队剧目演出厅座位类型票务信息
|
|
|
+ *
|
|
|
+ */
|
|
|
+ async getPerformTimeList() {
|
|
|
+ try {
|
|
|
+ if (!this.form.performTimeId) {
|
|
|
+ this.$message.error("请选择场次!");
|
|
|
+ return false
|
|
|
+ }
|
|
|
+ let res = await listGoodsByTeamIdApi({
|
|
|
+ performTimeId: this.form.performTimeId,
|
|
|
+ performId: this.form.performId,
|
|
|
+ auditoriumId: this.form.auditoriumId,
|
|
|
+ teamId: this.form.teamId
|
|
|
+ })
|
|
|
+ this.ticketList = res.data;
|
|
|
+ } catch (error) {
|
|
|
+
|
|
|
+ }
|
|
|
+ },
|
|
|
+ /** 选择场次 */
|
|
|
+ performTimeIdEven(val) {
|
|
|
+ this.$set(this.form, 'goodsId', '');
|
|
|
+ this.$set(this.form, 'goodsName', '')
|
|
|
+ this.$set(this.form, 'seatTypeId', '');
|
|
|
+ this.$set(this.form, 'price', '')
|
|
|
+
|
|
|
+ this.ticketList = [] // 票务
|
|
|
+ this.seatList = [] // 座位类型
|
|
|
+
|
|
|
+ this.getPerformTimeList() // 获取票务管理
|
|
|
+ },
|
|
|
+ // 票务改变事件
|
|
|
+ goodsChangeEven(id, type) {
|
|
|
+ console.log("sdfsdf", id, type)
|
|
|
+ let list = []
|
|
|
+ this.ticketList.forEach(item => {
|
|
|
+ if (item.id == id) {
|
|
|
+ this.$set(this.form, 'goodsName', item.goodsName)
|
|
|
+ list = item.seatTypePriceList
|
|
|
+ }
|
|
|
+ })
|
|
|
+ if (!type) {
|
|
|
+ this.$set(this.form, 'price', '');
|
|
|
+ this.$set(this.form, 'seatTypeId', '');
|
|
|
+ }
|
|
|
+ this.seatList = [];
|
|
|
+ console.log("ffffffffff=====", list)
|
|
|
+ //let selectMap = {goodsId: this.form.goodsId, performId: this.form.performId}
|
|
|
+ //this.getSeatTypeList(selectMap); 获取走位
|
|
|
+ this.seatList = [].concat(list)
|
|
|
+ },
|
|
|
+ // 座位类型改变事件
|
|
|
+ seatChangeEven(val) {
|
|
|
+ this.seatList.forEach(item => {
|
|
|
+ if (item.seatTypeId == val) {
|
|
|
+ this.$set(this.form, 'seatTypeName', item.seatTypeName);
|
|
|
+ this.$set(this.form, 'price', item.saleAmount);
|
|
|
+ }
|
|
|
+ })
|
|
|
+ let obj = {}
|
|
|
+ this.countBySeatTypList.forEach((item, index) => {
|
|
|
+ obj['seatNum_' + item.seatTypeId] = {
|
|
|
+ stockTotal: item.stock,
|
|
|
+ stockSelect: item.stock,
|
|
|
+ stockYes: item.stock,
|
|
|
+ stockNo: 0,
|
|
|
+ isNoSelect: true,
|
|
|
+ }
|
|
|
+ if (item.seatTypeId == this.form.seatTypeId) {
|
|
|
+ obj['seatNum_' + item.seatTypeId].stockYes = item.stock - this.form.viewerList.length
|
|
|
+ obj['seatNum_' + item.seatTypeId].isNoSelect = false
|
|
|
+ }
|
|
|
+ })
|
|
|
+ this.configStockNumObj = obj
|
|
|
+ this.seatSelectList = []
|
|
|
+ let list = JSON.parse(JSON.stringify(this.setList))
|
|
|
+ let list1 = []
|
|
|
+ list.forEach((item, index) => {
|
|
|
+ list1.push({
|
|
|
+ ...item,
|
|
|
+ isSame: item.seatTypeId != this.form.seatTypeId
|
|
|
+ })
|
|
|
+ })
|
|
|
+ this.setList = list1;
|
|
|
+ let list3 = []
|
|
|
+ this.countBySeatTypList.forEach((item, index) => {
|
|
|
+ list3.push(item.seatTypeId)
|
|
|
+ })
|
|
|
+ let list4 = []
|
|
|
+ this.seatTypeList.forEach((item, index) => {
|
|
|
+ if (list3.includes(item.id)) {
|
|
|
+ list4.push({ ...item })
|
|
|
+ }
|
|
|
+ })
|
|
|
+ this.$refs.seatBox.querySeatListFun(true, this.setList, this.seatSelectList, list4)
|
|
|
+ },
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 关闭弹框
|
|
|
+ * @date 2023-11-22
|
|
|
+ * @returns {any}
|
|
|
+ */
|
|
|
+ cancel() {
|
|
|
+ this.open = false;
|
|
|
+ },
|
|
|
+ /** 导出按钮操作 */
|
|
|
+ async handleExport() {
|
|
|
+ //this.downloadGet('member/marketTeamApply/downTeamApplyTemplate', {}, `观影人员上传模板_${new Date().getTime()}.xlsx`)
|
|
|
+ try {
|
|
|
+ let res = await downloadModel()
|
|
|
+ let fileName = `观影人员上传模板_${new Date().getTime()}.xlsx`
|
|
|
+ let blob = new Blob([res])
|
|
|
+ let href = window.URL.createObjectURL(blob)
|
|
|
+ // 创建下载按钮a标签进行自动点击下载,下载完后移除按钮a标签
|
|
|
+ let downloadDom = document.createElement('a')
|
|
|
+ downloadDom.href = href
|
|
|
+ downloadDom.download = fileName //--不是必须 若需要【前端重命名文件夹】的话这句代码就需要
|
|
|
+ document.body.appendChild(downloadDom)
|
|
|
+ downloadDom.click()
|
|
|
+ document.body.removeChild(downloadDom)
|
|
|
+ window.URL.revokeObjectURL(href)
|
|
|
+
|
|
|
+ } catch (error) {
|
|
|
+
|
|
|
+ }
|
|
|
+ },
|
|
|
+ /**
|
|
|
+ * 上传文件之前之前
|
|
|
+ * @date 2023-11-22
|
|
|
+ * @param {any} file
|
|
|
+ * @returns {any}
|
|
|
+ */
|
|
|
+ beforeAvatarUpload(file) {
|
|
|
+ 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)
|
|
|
+ this.seatChangeEven(this.form.seatTypeId)
|
|
|
+ });
|
|
|
+ } catch (e) {
|
|
|
+ } finally {
|
|
|
+ this.uploadLoading = false;
|
|
|
+ }
|
|
|
+ },
|
|
|
+ /** 修改订单按钮操作 */
|
|
|
+ handleResetOpen() {
|
|
|
+ if (this.form.viewerList.length == 0) {
|
|
|
+ this.$message.error("请上传观影人员!");
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if (this.form.viewerList.length != this.seatSelectList.length) {
|
|
|
+ this.$message.error("请选择座位!");
|
|
|
+ return
|
|
|
+ }
|
|
|
+ /** 关闭订单 */
|
|
|
+ this.$confirm("修改成功后,原订单将会被取消,确认要修改吗?", '提示', {
|
|
|
+ confirmButtonText: '确定',
|
|
|
+ cancelButtonText: '取消',
|
|
|
+ type: 'warning'
|
|
|
+ }).then(() => {
|
|
|
+ this.submitForm()
|
|
|
+ }).catch(() => { });
|
|
|
+ },
|
|
|
+ /**
|
|
|
+ * 驳回提交
|
|
|
+ * @date 2023-11-22
|
|
|
+ * @returns {any}
|
|
|
+ */
|
|
|
+ submitForm() {
|
|
|
+ this.$refs["form"].validate(async (valid) => {
|
|
|
+ if (valid) {
|
|
|
+ try {
|
|
|
+ if (this.form.viewerList.length == 0) {
|
|
|
+ this.$message.error("请上传观影人员!");
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if (this.form.viewerList.length != this.seatSelectList.length) {
|
|
|
+ this.$message.error("请选择座位!");
|
|
|
+ return
|
|
|
+ }
|
|
|
+ this.loading = true;
|
|
|
+ let postForm = {
|
|
|
+ "orderId": this.form.id,
|
|
|
+ "goodsId": this.form.goodsId,
|
|
|
+ "goodsName": this.form.goodsName,
|
|
|
+ "seatTypeId": this.form.seatTypeId,
|
|
|
+ "seatTypeName": this.form.seatTypeName,
|
|
|
+ "performDate": this.form.performDate,
|
|
|
+ "performTimeId": this.form.performTimeId,
|
|
|
+ "viewerList": this.form.viewerList,
|
|
|
+ "seatList": this.seatSelectList
|
|
|
+ }
|
|
|
+ const { code } = await teamOrderReSubmitApi({ ...postForm });
|
|
|
+ if (code === 200) {
|
|
|
+ this.loading = false;
|
|
|
+ this.$message.success("操作成功!");
|
|
|
+ this.$emit("getList");
|
|
|
+ this.cancel();
|
|
|
+ }
|
|
|
+ } catch (error) {
|
|
|
+ this.loading = false;
|
|
|
+ } finally {
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+ },
|
|
|
+ },
|
|
|
+};
|
|
|
+</script>
|
|
|
+
|
|
|
+<style lang="scss" scoped>
|
|
|
+.dialog {
|
|
|
+ width: 100%;
|
|
|
+ height: 70vh;
|
|
|
+}
|
|
|
+
|
|
|
+.dialog {
|
|
|
+ .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;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+.dialog-bbb {
|
|
|
+ width: 100%;
|
|
|
+ display: flex;
|
|
|
+ --widdd: 700px;
|
|
|
+
|
|
|
+ >div:first-child {
|
|
|
+ width: var(--widdd);
|
|
|
+ flex-shrink: 0;
|
|
|
+ overflow-y: auto;
|
|
|
+ padding: 0 0 10px 0;
|
|
|
+ margin-right: 10px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .dialog-bbb_2 {
|
|
|
+ width: calc(100% - var(--widdd));
|
|
|
+ height: 100%;
|
|
|
+ }
|
|
|
+}
|
|
|
+</style>
|