|
@@ -0,0 +1,736 @@
|
|
|
+<template>
|
|
|
+ <div class="app-container">
|
|
|
+ <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
|
|
|
+ <el-form-item label="订单号">
|
|
|
+ <el-input v-model="queryParams.orderId" placeholder="请输入订单号" clearable style="width: 240px;"
|
|
|
+ @keyup.enter.native="handleQuery" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="订单状态">
|
|
|
+ <el-select v-model="queryParams.orderStatus" placeholder="订单状态" clearable style="width: 100%">
|
|
|
+ <el-option v-for="dict in dict.type.order_status_type" :key="dict.value" :label="dict.label"
|
|
|
+ :value="dict.value" />
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="座位类型">
|
|
|
+ <el-select v-model="queryParams.seatTypeId" placeholder="座位类型" clearable style="width: 100%">
|
|
|
+ <el-option v-for="(item, index) in seatTypeList" :key="item.id" :label="item.name" :value="item.id"></el-option>
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="购票渠道">
|
|
|
+ <el-select v-model="queryParams.source" placeholder="购票渠道" clearable style="width: 100%">
|
|
|
+ <el-option v-for="dict in dict.type.order_form_type" :key="dict.value" :label="dict.label"
|
|
|
+ :value="dict.value" />
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="支付时间">
|
|
|
+ <el-date-picker style="width: 230px;" v-model="queryParams.payTime" type="date" value-format="yyyy-MM-dd"
|
|
|
+ placeholder="支付时间">
|
|
|
+ </el-date-picker>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="演出时间">
|
|
|
+ <el-date-picker style="width: 230px;" v-model="queryParams.performDate" @change="pagePerformTimeListFun"
|
|
|
+ type="date" value-format="yyyy-MM-dd" placeholder="选择日期">
|
|
|
+ </el-date-picker>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="场次">
|
|
|
+ <el-select v-model="queryParams.performTimeId" placeholder="场次" clearable style="width: 100%">
|
|
|
+ <el-option v-for="dict in pagePerformTimeList" :key="dict.id" :label="dict.timeSnapshot" :value="dict.id" />
|
|
|
+ </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>
|
|
|
+ </el-form-item>
|
|
|
+ </el-form>
|
|
|
+
|
|
|
+ <el-row :gutter="10" class="mb8">
|
|
|
+ <el-button type="primary" size="mini" icon="el-icon-download" v-hasPermi="['order:orderMr:downloadExcel']"
|
|
|
+ @click="handleExport" v-loading.fullscreen.lock="handleExportLoading" element-loading-text="正在拼命生成数据中..."
|
|
|
+ element-loading-spinner="el-icon-loading" element-loading-background="rgba(0, 0, 0, 0.5)">导出excel</el-button>
|
|
|
+ <el-button
|
|
|
+ type="primary"
|
|
|
+ size="mini"
|
|
|
+ v-hasPermi="['order:orderMr:downloadExcel']"
|
|
|
+ :disabled="multipleSelection.length==0"
|
|
|
+ @click="openRefundSubmitModel(multipleSelection)">批量退款</el-button>
|
|
|
+ <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
|
|
|
+ </el-row>
|
|
|
+
|
|
|
+ <el-table ref="tables" @selection-change="handleSelectionChange" v-loading="loading" :data="dataList" border>
|
|
|
+ <el-table-column
|
|
|
+ :selectable="isSelectableFun"
|
|
|
+ type="selection"
|
|
|
+ width="55"></el-table-column>
|
|
|
+ <el-table-column label="订单号" align="center" prop="orderId" />
|
|
|
+ <el-table-column label="观影人名称" align="center" prop="name" />
|
|
|
+ <el-table-column label="身份证号" align="center" prop="idcard" />
|
|
|
+ <el-table-column label="票务名称" align="center" prop="goodsName" />
|
|
|
+ <el-table-column label="座位类型" align="center" prop="seatTypeName" />
|
|
|
+ <el-table-column label="购买渠道" align="center" prop="source">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <dict-tag :options="dict.type.order_form_type" :value="scope.row.source" />
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="演出日期" align="center" prop="performDate" />
|
|
|
+ <el-table-column label="场次" width="120" align="center">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <span>{{ scope.row.performTimeStart + '-' + scope.row.performTimeEnd }}</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="购票人" align="center" prop="memberName" />
|
|
|
+ <el-table-column label="购票人手机号" align="center" prop="memberMobile" />
|
|
|
+
|
|
|
+ <el-table-column label="订单总额" align="center" prop="realPriceTotal">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <span>{{ scope.row.realPriceTotal ? '¥' + scope.row.realPriceTotal : '-' }}</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="观影实付金额" align="center" prop="realPrice">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <span>{{ scope.row.realPrice ? '¥' + scope.row.realPrice : '-' }}</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="支付方式" align="center" prop="payWay">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <dict-tag :options="dict.type.pay_way_type" :value="scope.row.payWay" />
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="支付时间" align="center" prop="createTime" />
|
|
|
+ <el-table-column label="支付时间" align="center" prop="payTime" width="160">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <span>{{ parseTime(scope.row.payTime) }}</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="订单状态" align="center">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <dict-tag :options="dict.type.order_status_type" :value="scope.row.status" />
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="核销渠道" align="center" prop="deviceName" />
|
|
|
+ <el-table-column label="人员类别" align="center">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <dict-tag :options="dict.type.personnel_type" :value="scope.row.identity" />
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="备注" align="center" prop="remark" />
|
|
|
+ <el-table-column label="操作" align="center" width="100" class-name="small-padding fixed-width">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <el-button size="mini" type="text" @click="openDetails(scope.row)"
|
|
|
+ v-hasPermi="['orderMr:orderMr:details']">详情</el-button>
|
|
|
+ <el-button v-if="scope.row.status == 3 || scope.row.status == 7" size="mini" type="text"
|
|
|
+ @click="handleOpen([scope.row])" v-hasPermi="['orderMr:orderMr:print']">打印</el-button>
|
|
|
+ <el-button v-if="scope.row.status == 3 || scope.row.status == 6" size="mini" type="text"
|
|
|
+ @click="openRefundSubmitModel([scope.row])" v-hasPermi="['orderMr:orderMr:print']">退款</el-button>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ </el-table>
|
|
|
+
|
|
|
+ <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize"
|
|
|
+ @pagination="getList" />
|
|
|
+
|
|
|
+ <!-- 详情 -->
|
|
|
+ <details-dia ref="detailsDia" @getList="getList"></details-dia>
|
|
|
+ <!-- 打印 -->
|
|
|
+ <el-dialog title="选择小票机" :visible.sync="dialogVisible" width="30%" :before-close="handleClose">
|
|
|
+ <el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm">
|
|
|
+ <el-form-item label="小票机" prop="region">
|
|
|
+ <el-select v-model="ruleForm.region" placeholder="选择小票机">
|
|
|
+ <el-option :label="item.deviceName" :key="item.id" :value="item.id"
|
|
|
+ v-for="(item, index) in printList"></el-option>
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ </el-form>
|
|
|
+ <span slot="footer" class="dialog-footer">
|
|
|
+ <el-button @click="dialogVisible = false">取 消</el-button>
|
|
|
+ <el-button type="primary" :loading="dialogVisibleLoading" @click="print(viewerList)">{{
|
|
|
+ dialogVisibleLoading ? '打印中...' : '打印' }}</el-button>
|
|
|
+ </span>
|
|
|
+ </el-dialog>
|
|
|
+ <!-- 退款 -->
|
|
|
+ <el-dialog
|
|
|
+ title="退款提示"
|
|
|
+ :visible.sync="tkDialogVisible"
|
|
|
+ width="80%"
|
|
|
+ :before-close="handleCloseTk"
|
|
|
+ :modal-append-to-body="false"
|
|
|
+ :show-close="!tkDialogVisibleLoading"
|
|
|
+ >
|
|
|
+ <div style="display: flex;width: 100%;height: calc( 100vh - 30vh );overflow: hidden;overflow-y: auto;">
|
|
|
+ <div style="display: 200px;box-sizing: border-box;">
|
|
|
+ <el-form :disabled="tkDialogVisibleLoading" :model="tkRuleForm" :rules="tkRules" ref="tkRuleForm" label-width="100px" class="demo-ruleForm">
|
|
|
+ <el-form-item label="退款总金额">
|
|
|
+ <span>{{ tkRuleForm.refundAmountAll }}</span>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="退款原因" prop="refundReason">
|
|
|
+ <el-input
|
|
|
+ type="textarea"
|
|
|
+ :rows="3"
|
|
|
+ v-model="tkRuleForm.refundReason"></el-input>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="备注" prop="remark">
|
|
|
+ <el-input
|
|
|
+ type="textarea"
|
|
|
+ :rows="3"
|
|
|
+ v-model="tkRuleForm.remark"></el-input>
|
|
|
+ </el-form-item>
|
|
|
+ </el-form>
|
|
|
+ </div>
|
|
|
+ <div style=" width: calc( 100% - 200px );box-sizing: border-box;padding-left: 40px;">
|
|
|
+ <el-table
|
|
|
+ :data="tkSelectList"
|
|
|
+ style="width: 100%">
|
|
|
+ <el-table-column
|
|
|
+ prop="orderId"
|
|
|
+ label="订单号"
|
|
|
+ >
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column
|
|
|
+ label="观影人数"
|
|
|
+ >
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <span>{{ scope.row.viewerList.length }}</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column
|
|
|
+ prop="refundAmount"
|
|
|
+ label="退款金额"
|
|
|
+ >
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column
|
|
|
+ prop="address"
|
|
|
+ label="状态">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <span
|
|
|
+ :style="{
|
|
|
+ color: refundSubmitAction == scope.row.orderId?'#409eff':
|
|
|
+ refundSubmitSuccess.includes(scope.row.orderId)?'#67c23a':
|
|
|
+ refundSubmitError.includes(scope.row.orderId)?'#f56c6c':
|
|
|
+ '#000'
|
|
|
+ }"
|
|
|
+ >
|
|
|
+ {{
|
|
|
+ refundSubmitAction == scope.row.orderId?'退款中...':
|
|
|
+ refundSubmitSuccess.includes(scope.row.orderId)?'退款成功':
|
|
|
+ refundSubmitError.includes(scope.row.orderId)?'退款失败':
|
|
|
+ '等待退款...' }}
|
|
|
+ </span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ </el-table>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+
|
|
|
+ <span slot="footer" class="dialog-footer">
|
|
|
+ <el-button :loading="tkDialogVisibleLoading" @click="handleCloseTk('tkRuleForm')">取 消</el-button>
|
|
|
+ <el-button
|
|
|
+ :loading="tkDialogVisibleLoading"
|
|
|
+ type="primary"
|
|
|
+ @click="tkSubmitForm('tkRuleForm')"
|
|
|
+ v-if="refundSubmitSuccess.length != tkSelectList.length"
|
|
|
+ >{{
|
|
|
+ tkDialogVisibleLoading ? '退款中...':
|
|
|
+ refundSubmitError.length > 0? '继续提交失败订单':
|
|
|
+ '确定退款'
|
|
|
+ }}</el-button>
|
|
|
+ </span>
|
|
|
+ </el-dialog>
|
|
|
+ </div>
|
|
|
+</template>
|
|
|
+
|
|
|
+<script>
|
|
|
+
|
|
|
+import { pageList, downOrderListXls, printApi, refundSubmitApi } from '@/api/order/viewers'
|
|
|
+import detailsDia from "./dialog/details";
|
|
|
+import { pagePerformTimeList } from "@/api/schedulingMr/schedulingMr"
|
|
|
+import { exportExcel } from '@/utils/exportexcel'
|
|
|
+import { pageList as getPrintListApi } from "@/api/device/pda";
|
|
|
+import { pageList as getSeatTypeList } from '@/api/seatTypeMr/seatTypeMr'
|
|
|
+const https = require('https');
|
|
|
+const axios = require('axios');
|
|
|
+const mathM = require('mathjs')
|
|
|
+export default {
|
|
|
+ name: "agreement",
|
|
|
+ dicts: ['order_form_type', 'order_status_type', 'pay_way_type', 'personnel_type'],
|
|
|
+ components: { detailsDia },
|
|
|
+ data() {
|
|
|
+ return {
|
|
|
+ // 遮罩层
|
|
|
+ loading: true,
|
|
|
+ // 选中数组
|
|
|
+ ids: [],
|
|
|
+ // 非单个禁用
|
|
|
+ single: true,
|
|
|
+ // 非多个禁用
|
|
|
+ multiple: true,
|
|
|
+ // 显示搜索条件
|
|
|
+ showSearch: true,
|
|
|
+ // 总条数
|
|
|
+ total: 0,
|
|
|
+ // 用户表格数据
|
|
|
+ dataList: null,
|
|
|
+ // 弹出层标题
|
|
|
+ title: "",
|
|
|
+
|
|
|
+ // 是否显示弹出层
|
|
|
+ open: false,
|
|
|
+ // 查询参数
|
|
|
+ queryParams: {
|
|
|
+ pageNum: 1,
|
|
|
+ pageSize: 10,
|
|
|
+ },
|
|
|
+ visibleStatus: false,
|
|
|
+ newObj: {},
|
|
|
+ visibleType: '',
|
|
|
+
|
|
|
+ pagePerformTimeList: [], // 场次列表
|
|
|
+
|
|
|
+ handleExportLoading: false,
|
|
|
+
|
|
|
+ viewerList: [],
|
|
|
+ printList: [],
|
|
|
+ dialogVisible: false,
|
|
|
+ ruleForm: {},
|
|
|
+ rules: {
|
|
|
+ region: [
|
|
|
+ { required: true, message: '请选择备注', trigger: ['change', 'blur'] }
|
|
|
+ ],
|
|
|
+ },
|
|
|
+ dialogVisibleLoading: false,
|
|
|
+
|
|
|
+ seatTypeList: [],
|
|
|
+ multipleSelection: [],
|
|
|
+ tkDialogVisible: false,
|
|
|
+ tkDialogVisibleLoading: false,
|
|
|
+ tkSelectList: [],
|
|
|
+ tkRuleForm: {
|
|
|
+ "orderId": null,
|
|
|
+ "refundReason": null,
|
|
|
+ "remark": null,
|
|
|
+ "refundAmount": 0.01,
|
|
|
+ "viewerList": [
|
|
|
+ {
|
|
|
+ "viewerId": "1111",
|
|
|
+ "salePrice": 0.01
|
|
|
+ }
|
|
|
+ ]
|
|
|
+ },
|
|
|
+ tkRules: {
|
|
|
+ refundReason: [{ required: true, message: '请输入退款原因', trigger: ['blur', 'change'] }],
|
|
|
+ remark: [{ required: true, message: '请输入备注', trigger: ['blur', 'change'] }],
|
|
|
+ },
|
|
|
+ refundSubmitAction: null,
|
|
|
+ refundSubmitSuccess:[], // 成功条数
|
|
|
+ refundSubmitError: [], // 失败条数
|
|
|
+ refundSubmitErrorList: [], //
|
|
|
+ };
|
|
|
+ },
|
|
|
+ created() {
|
|
|
+ this.getSeatTypeListFun()
|
|
|
+ this.getList();
|
|
|
+ },
|
|
|
+ methods: {
|
|
|
+ /** 查询列表 */
|
|
|
+ getList() {
|
|
|
+ this.loading = true;
|
|
|
+ pageList(this.addDateRange(this.queryParams))
|
|
|
+ .then(response => {
|
|
|
+ this.dataList = response.data.rows;
|
|
|
+ this.total = response.data.total;
|
|
|
+ this.loading = false;
|
|
|
+ });
|
|
|
+ },
|
|
|
+ // 取消按钮
|
|
|
+ cancel() {
|
|
|
+ this.open = false;
|
|
|
+ },
|
|
|
+ /** 搜索按钮操作 */
|
|
|
+ handleQuery() {
|
|
|
+ this.queryParams.pageNum = 1;
|
|
|
+ if (this.queryParams.time) {
|
|
|
+ this.queryParams.payBeginTime = this.queryParams.time[0];
|
|
|
+ this.queryParams.payEndTime = this.queryParams.time[1];
|
|
|
+ }
|
|
|
+ if (this.queryParams.createTime && this.queryParams.createTime.length > 0) {
|
|
|
+ this.queryParams.createBeginTime = this.queryParams.createTime[0];
|
|
|
+ this.queryParams.createEndTime = this.queryParams.createTime[1];
|
|
|
+ }
|
|
|
+ this.getList();
|
|
|
+ },
|
|
|
+ /** 重置按钮操作 */
|
|
|
+ resetQuery() {
|
|
|
+ this.queryParams = {
|
|
|
+ pageNum: 1,
|
|
|
+ pageSize: 10,
|
|
|
+ }
|
|
|
+ // this.$set(this.queryParams, 'orderId', '');
|
|
|
+ // this.$set(this.queryParams, 'status', '');
|
|
|
+ // this.$set(this.queryParams, 'memberMobile', '');
|
|
|
+ // this.$set(this.queryParams, 'source', '');
|
|
|
+ // this.$set(this.queryParams, 'performName', '');
|
|
|
+ // this.$set(this.queryParams, 'payBeginTime', '');
|
|
|
+ // this.$set(this.queryParams, 'payEndTime', '');
|
|
|
+ // this.$set(this.queryParams, 'time', '');
|
|
|
+ // this.$set(this.queryParams, 'createTime', '');
|
|
|
+ // this.$set(this.queryParams, 'createBeginTime', '');
|
|
|
+ // this.$set(this.queryParams, 'createEndTime', '');
|
|
|
+ // this.$set(this.queryParams, 'goodsName', '');
|
|
|
+ // this.$set(this.queryParams, 'performDate', '');
|
|
|
+ // this.$set(this.queryParams, 'timeSnapshot', '');
|
|
|
+ // this.$set(this.queryParams, 'performTimeId', '');
|
|
|
+ // this.queryParams.pageNum = 1;
|
|
|
+ this.handleQuery();
|
|
|
+ },
|
|
|
+ /** 详情按钮操作 */
|
|
|
+ openDetails(row, type) {
|
|
|
+ this.$refs["detailsDia"].openDialog("详情", row, type);
|
|
|
+ },
|
|
|
+ async pagePerformTimeListFun(value) {
|
|
|
+ try {
|
|
|
+ this.pagePerformTimeList = []
|
|
|
+ this.$set(this.queryParams, 'timeSnapshot', null)
|
|
|
+ if (!value) {
|
|
|
+
|
|
|
+ return
|
|
|
+ }
|
|
|
+ let { data, code } = await pagePerformTimeList({
|
|
|
+ performDate: value,
|
|
|
+ pageNum: 1,
|
|
|
+ pageSize: 999
|
|
|
+ })
|
|
|
+ this.pagePerformTimeList = [].concat(data.rows)
|
|
|
+ } catch (error) {
|
|
|
+
|
|
|
+ }
|
|
|
+ },
|
|
|
+ /**
|
|
|
+ * 导出报表
|
|
|
+ * @date 2022-10-24
|
|
|
+ * @returns {any}
|
|
|
+ */
|
|
|
+ handleExport() {
|
|
|
+ this.$confirm('您确定要导出当前查询的数据吗?', '提示', {
|
|
|
+ confirmButtonText: '确定 ',
|
|
|
+ cancelButtonText: '取消 ',
|
|
|
+ type: 'warning'
|
|
|
+ })
|
|
|
+ .then(() => {
|
|
|
+ this.handleExportLoading = true;
|
|
|
+ // const { pageNum, pageSize} = this.params;
|
|
|
+ let postMap = {}
|
|
|
+ for (let key in this.queryParams) {
|
|
|
+ if (key != 'pageNum' && key != 'pageSize') {
|
|
|
+ postMap[key] = this.queryParams[key]
|
|
|
+ }
|
|
|
+ }
|
|
|
+ downOrderListXls(postMap)
|
|
|
+ .then((res) => {
|
|
|
+ exportExcel(res, '订单管理', '.xlsx');
|
|
|
+ this.handleExportLoading = false;
|
|
|
+ })
|
|
|
+ .catch((error) => {
|
|
|
+ console.log("error===", error)
|
|
|
+ this.handleExportLoading = false;
|
|
|
+ });
|
|
|
+ })
|
|
|
+ .catch(() => {
|
|
|
+ this.$message.info('您已取消导出!');
|
|
|
+ });
|
|
|
+ },
|
|
|
+
|
|
|
+
|
|
|
+ handleOpen(list = []) {
|
|
|
+ if (!list || list.length == 0) return
|
|
|
+ let idList = []
|
|
|
+ list.forEach((item, index) => {
|
|
|
+ idList.push(item.id)
|
|
|
+ })
|
|
|
+ this.viewerList = idList
|
|
|
+ this.getPrintListApi()
|
|
|
+ this.$set(this.ruleForm, 'region', '');
|
|
|
+ this.$nextTick(() => {
|
|
|
+ this.$refs.ruleForm.clearValidate('region')
|
|
|
+ })
|
|
|
+ this.dialogVisible = true
|
|
|
+ },
|
|
|
+ handleClose() {
|
|
|
+ this.dialogVisible = false
|
|
|
+ },
|
|
|
+ /** 查询打印机列表 */
|
|
|
+ getPrintListApi() {
|
|
|
+ getPrintListApi({
|
|
|
+ deviceType: 5, pageNum: 1,
|
|
|
+ pageSize: 999,
|
|
|
+ })
|
|
|
+ .then(response => {
|
|
|
+ this.printList = response.data.rows;
|
|
|
+ }
|
|
|
+ );
|
|
|
+ },
|
|
|
+ /** 选择打印机 */
|
|
|
+ selectPrint() {
|
|
|
+
|
|
|
+ },
|
|
|
+ // 打印
|
|
|
+ async print(list = []) {
|
|
|
+ this.$refs.ruleForm.validate(async (valid) => {
|
|
|
+ if (valid) {
|
|
|
+ this.dialogVisibleLoading = true
|
|
|
+ try {
|
|
|
+ let res = await printApi({
|
|
|
+ viewerList: list,
|
|
|
+ source: 2,
|
|
|
+ deviceId: this.ruleForm.region
|
|
|
+ })
|
|
|
+ if (res.code == 200) {
|
|
|
+ let url = res.data.linkIp
|
|
|
+ let printInfo = res.data.printInfo
|
|
|
+ this.connectPrint(url, printInfo)
|
|
|
+ } else {
|
|
|
+ throw new Error(res)
|
|
|
+ }
|
|
|
+ } catch (error) {
|
|
|
+ this.dialogVisible = false
|
|
|
+ this.dialogVisibleLoading = false
|
|
|
+ console.error("error=====", error)
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ console.log('error submit!!');
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ },
|
|
|
+ /** 连接打印机 */
|
|
|
+ connectPrint(url, data) {
|
|
|
+ // 创建忽略 SSL 的 axios 实例
|
|
|
+ const ignoreSSL = axios.create({
|
|
|
+ httpsAgent: new https.Agent({
|
|
|
+ rejectUnauthorized: false
|
|
|
+ }),
|
|
|
+ withCredentials: true, // 跨域请求时发送Cookie
|
|
|
+ timeout: 60000, // 请求超时
|
|
|
+ headers: {
|
|
|
+ "Content-Type": "application/json; charset=UTF-8;"
|
|
|
+ }
|
|
|
+ });
|
|
|
+ ignoreSSL.post(url,
|
|
|
+ { ...data }
|
|
|
+ ).then(() => {
|
|
|
+ this.dialogVisible = false
|
|
|
+ this.dialogVisibleLoading = false
|
|
|
+ }).catch(() => {
|
|
|
+ this.dialogVisible = false
|
|
|
+ this.dialogVisibleLoading = false
|
|
|
+ })
|
|
|
+
|
|
|
+ },
|
|
|
+ /** 获取座位类型 */
|
|
|
+ async getSeatTypeListFun() {
|
|
|
+ try {
|
|
|
+ let res = await getSeatTypeList({
|
|
|
+ pageNum: 1, pageSize: 999
|
|
|
+ })
|
|
|
+ this.seatTypeList = res.data.rows
|
|
|
+ } catch (error) {
|
|
|
+
|
|
|
+ }
|
|
|
+ },
|
|
|
+ /** 打开弹窗 */
|
|
|
+ openRefundSubmitModel(data, type) {
|
|
|
+ this.refundSubmitSuccess = []
|
|
|
+ this.refundSubmitError = []
|
|
|
+ let list = []
|
|
|
+ data.forEach((item,index)=>{
|
|
|
+ let flog = false
|
|
|
+ let indexNew = null
|
|
|
+ list.forEach((item1,index1)=>{
|
|
|
+ if(item.orderId == item1.orderId) {
|
|
|
+ flog = true
|
|
|
+ indexNew = index1
|
|
|
+ }
|
|
|
+ })
|
|
|
+ if(!flog){
|
|
|
+ list.push({
|
|
|
+ "orderId": item.orderId,
|
|
|
+ "refundReason": null,
|
|
|
+ "remark": null,
|
|
|
+ "refundAmount": 0,
|
|
|
+ "viewerList": [
|
|
|
+ {
|
|
|
+ "viewerId": item.id,
|
|
|
+ "salePrice": item.realPrice?item.realPrice:0
|
|
|
+ }
|
|
|
+ ]
|
|
|
+ })
|
|
|
+ }else {
|
|
|
+ list[indexNew].viewerList.push({
|
|
|
+ "viewerId": item.id,
|
|
|
+ "salePrice": item.realPrice?item.realPrice:0
|
|
|
+ })
|
|
|
+ }
|
|
|
+ })
|
|
|
+ let refundAmountAll = 0
|
|
|
+ list.forEach((item,index)=>{
|
|
|
+ if(item.viewerList && item.viewerList.length > 0){
|
|
|
+ let refundAmount = 0
|
|
|
+ item.viewerList.forEach((item1,index1)=>{
|
|
|
+ refundAmount = mathM.format(Number(refundAmount) + Number(item1.salePrice),10)
|
|
|
+ refundAmountAll = mathM.format(Number(refundAmountAll) + Number(item1.salePrice),10)
|
|
|
+ })
|
|
|
+ list[index].refundAmount = refundAmount
|
|
|
+ }
|
|
|
+ })
|
|
|
+ this.tkRuleForm['refundAmountAll'] = refundAmountAll
|
|
|
+ this.tkSelectList = JSON.parse(JSON.stringify(list))
|
|
|
+ console.log("dfsfdsfsdfds====",this.tkSelectList)
|
|
|
+ this.tkDialogVisible = true
|
|
|
+ },
|
|
|
+ tkSubmitForm(formName) {
|
|
|
+ this.$refs[formName].validate((valid) => {
|
|
|
+ if (valid) {
|
|
|
+ let listCopy = JSON.parse(JSON.stringify(this.tkSelectList))
|
|
|
+ this.tkSelectList.forEach((item,index)=>{
|
|
|
+ listCopy[index] = {
|
|
|
+ ...item,
|
|
|
+ refundReason: this.tkRuleForm.refundReason?this.tkRuleForm.refundReason:'',
|
|
|
+ remark: this.tkRuleForm.remark?this.tkRuleForm.remark:''
|
|
|
+ }
|
|
|
+ })
|
|
|
+ this.tkSelectList = listCopy
|
|
|
+ this.refundSubmitFun(0)
|
|
|
+ if(this.refundSubmitError && this.refundSubmitError.length>0) {
|
|
|
+ let list = []
|
|
|
+ this.refundSubmitError.forEach((item,index)=>{
|
|
|
+ this.tkSelectList.forEach((item1,index1)=>{
|
|
|
+ if(item == item1.orderId){
|
|
|
+ list.push(item1)
|
|
|
+ }
|
|
|
+ })
|
|
|
+ })
|
|
|
+ this.refundSubmitErrorList = list
|
|
|
+ this.moreRefundSubmitFun(0)
|
|
|
+ }else {
|
|
|
+ this.refundSubmitFun(0)
|
|
|
+ }
|
|
|
+
|
|
|
+ } else {
|
|
|
+ console.log('error submit!!');
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ });
|
|
|
+ },
|
|
|
+ /** 批量退票 */
|
|
|
+ async refundSubmitFun(index) {
|
|
|
+ try {
|
|
|
+ this.tkDialogVisibleLoading = true
|
|
|
+ this.refundSubmitAction = this.tkSelectList[index].orderId
|
|
|
+ let res = await refundSubmitApi({
|
|
|
+ ...this.tkSelectList[index]
|
|
|
+ })
|
|
|
+ this.refundSubmitAction = null
|
|
|
+ if(res.code == 200) {
|
|
|
+ this.refundSubmitSuccess.push(this.tkSelectList[index].orderId)
|
|
|
+ }else {
|
|
|
+ this.refundSubmitError.push(this.tkSelectList[index].orderId)
|
|
|
+ this.$message.error(`订单号:${this.tkSelectList[index].orderId},退款失败`);
|
|
|
+ }
|
|
|
+ if((index+1) < this.tkSelectList.length) {
|
|
|
+ this.refundSubmitAction = this.tkSelectList[index+1].orderId
|
|
|
+ setTimeout(() => {
|
|
|
+ this.refundSubmitFun(index+1)
|
|
|
+ }, 3000);
|
|
|
+ }else {
|
|
|
+ this.tkDialogVisibleLoading = false
|
|
|
+ if(this.refundSubmitError.length == 0) {
|
|
|
+ this.$message({
|
|
|
+ message: '全部退款成功!!!',
|
|
|
+ type: 'success'
|
|
|
+ });
|
|
|
+ // this.handleCloseTk()
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } catch (error) {
|
|
|
+ console.error(index+"===error====",error)
|
|
|
+ this.refundSubmitAction = null
|
|
|
+ this.refundSubmitError.push(this.tkSelectList[index].orderId)
|
|
|
+ this.$message.error(`订单号:${this.tkSelectList[index].orderId},退款失败`);
|
|
|
+ if((index+1) < this.tkSelectList.length) {
|
|
|
+ this.refundSubmitAction = this.tkSelectList[index+1].orderId
|
|
|
+ setTimeout(() => {
|
|
|
+ this.refundSubmitFun(index+1)
|
|
|
+ }, 3000);
|
|
|
+ }else {
|
|
|
+ this.tkDialogVisibleLoading = false
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ /** 再次 批量退票 */
|
|
|
+ async moreRefundSubmitFun(index) {
|
|
|
+ try {
|
|
|
+ this.refundSubmitError = []
|
|
|
+ this.tkDialogVisibleLoading = true
|
|
|
+ this.refundSubmitAction = this.refundSubmitErrorList[index].orderId
|
|
|
+ let res = await refundSubmitApi({
|
|
|
+ ...this.refundSubmitErrorList[index]
|
|
|
+ })
|
|
|
+ this.refundSubmitAction = null
|
|
|
+ if(res.code == 200) {
|
|
|
+ this.refundSubmitSuccess.push(this.refundSubmitErrorList[index].orderId)
|
|
|
+ }else {
|
|
|
+ this.refundSubmitError.push(this.refundSubmitErrorList[index].orderId)
|
|
|
+ this.$message.error(`订单号:${this.refundSubmitErrorList[index].orderId},退款失败`);
|
|
|
+ }
|
|
|
+ if((index+1) < this.refundSubmitErrorList.length) {
|
|
|
+ this.refundSubmitAction = this.refundSubmitErrorList[index+1].orderId
|
|
|
+ setTimeout(() => {
|
|
|
+ this.refundSubmitFun(index+1)
|
|
|
+ }, 3000);
|
|
|
+ }else {
|
|
|
+ this.tkDialogVisibleLoading = false
|
|
|
+ if(this.refundSubmitErrorList.length == 0) {
|
|
|
+ this.$message({
|
|
|
+ message: '全部退款成功!!!',
|
|
|
+ type: 'success'
|
|
|
+ });
|
|
|
+ // this.handleCloseTk()
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } catch (error) {
|
|
|
+ console.error(index+"===error====",error)
|
|
|
+ this.refundSubmitAction = null
|
|
|
+ this.refundSubmitError.push(this.refundSubmitErrorList[index].orderId)
|
|
|
+ this.$message.error(`订单号:${this.refundSubmitErrorList[index].orderId},退款失败`);
|
|
|
+ if((index+1) < this.refundSubmitErrorList.length) {
|
|
|
+ this.refundSubmitAction = this.refundSubmitErrorList[index+1].orderId
|
|
|
+ setTimeout(() => {
|
|
|
+ this.refundSubmitFun(index+1)
|
|
|
+ }, 3000);
|
|
|
+ }else {
|
|
|
+ this.tkDialogVisibleLoading = false
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ /** 退款状态 */
|
|
|
+ refundSubmitStatus(row){
|
|
|
+
|
|
|
+ },
|
|
|
+ /** 选择 */
|
|
|
+ handleSelectionChange(val) {
|
|
|
+ this.multipleSelection = val;
|
|
|
+ },
|
|
|
+ /** 是否可用 */
|
|
|
+ isSelectableFun(row, index){
|
|
|
+ return row.status == 3 || row.status == 6
|
|
|
+ },
|
|
|
+ handleCloseTk(formName){
|
|
|
+ console.log('dsfsdfsdf')
|
|
|
+ this.tkDialogVisible = false
|
|
|
+ if(this.$refs.tkRuleForm) {
|
|
|
+ this.$refs.tkRuleForm.resetFields()
|
|
|
+ }
|
|
|
+ this.getList();
|
|
|
+ }
|
|
|
+ }
|
|
|
+};
|
|
|
+</script>
|