|  |  |  | 
|---|
|  |  |  | <template> | 
|---|
|  |  |  | <div class="main_app"> | 
|---|
|  |  |  | <Breadcrumb /> | 
|---|
|  |  |  | <QueryForm v-model="querys" :query-form-config="queryFormConfig" @handleQuery="getList(1)" @clear="clearQueryForm"> | 
|---|
|  |  |  | <template #btns> | 
|---|
|  |  |  | <el-button v-if="meta.indexOf('MealsUseDetailExport') > -1" type="primary" | 
|---|
|  |  |  | @click="comboRecordExport">导出</el-button> | 
|---|
|  |  |  | </template> | 
|---|
|  |  |  | <template #indate> | 
|---|
|  |  |  | <el-date-picker v-model="querys.indate" type="datetimerange" range-separator="至" start-placeholder="开始日期" | 
|---|
|  |  |  | end-placeholder="结束日期" format="yyyy-MM-dd HH:mm:ss" value-format="yyyy-MM-dd HH:mm:ss" class="w400" | 
|---|
|  |  |  | :picker-options="pickerOptions" /> | 
|---|
|  |  |  | </template> | 
|---|
|  |  |  | <QueryForm v-model="filters" :query-form-config="queryFormConfig" @handleQuery="getList(1)" @clear="clearQueryForm"> | 
|---|
|  |  |  | </QueryForm> | 
|---|
|  |  |  | <div class="table_btns"> | 
|---|
|  |  |  | <el-button v-preventReClick plain type="primary" @click="handleEx">导出</el-button> | 
|---|
|  |  |  | <el-button v-preventReClick plain type="danger" @click="openModal('zuofei')">作废</el-button> | 
|---|
|  |  |  | <el-button v-preventReClick plain @click="openModal('tiaozheng')">套餐调整</el-button> | 
|---|
|  |  |  | <el-button plain type="primary" @click="handleEx">导出</el-button> | 
|---|
|  |  |  | <el-button plain type="danger" @click="openModal('zuofei')">作废</el-button> | 
|---|
|  |  |  | <el-button plain type="primary" @click="openModal('tiaozheng')">套餐调整</el-button> | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  | <el-table v-loading="loading" :data="list" stripe border @selection-change="handleSelectionChange"> | 
|---|
|  |  |  | <el-table-column fixed="left" align="center" type="selection" :selectable="handleDisable" width="55" /> | 
|---|
|  |  |  | <el-table-column align="center" label="套餐票号" width="300" show-overflow-tooltip> | 
|---|
|  |  |  | <el-table-column align="center" label="套餐票号" min-width="160" show-overflow-tooltip> | 
|---|
|  |  |  | <template v-slot="scope"> | 
|---|
|  |  |  | <span class="primaryColor pointer" @click="comboDetail(scope.row)">{{ | 
|---|
|  |  |  | scope.row.id | 
|---|
|  |  |  | }}</span> | 
|---|
|  |  |  | scope.row.code | 
|---|
|  |  |  | }}</span> | 
|---|
|  |  |  | </template> | 
|---|
|  |  |  | </el-table-column> | 
|---|
|  |  |  | <el-table-column align="center" label="套餐类型" width="120"> | 
|---|
|  |  |  | <el-table-column align="center" label="套餐类型" min-width="80"> | 
|---|
|  |  |  | <template v-slot="scope"> | 
|---|
|  |  |  | <span v-if="scope.row.mealsType === '0'">门票次卡</span> | 
|---|
|  |  |  | <span v-if="scope.row.mealsType === '1'">门票期限卡</span> | 
|---|
|  |  |  | <span v-if="scope.row.mealsType === '2'">预定次卡</span> | 
|---|
|  |  |  | <span v-if="scope.row.mealsType === '3'">课程预约次卡</span> | 
|---|
|  |  |  | <span v-if="scope.row.mealsType === '4'">课程期限卡</span> | 
|---|
|  |  |  | <span v-if="scope.row.type == '0'">期限卡</span> | 
|---|
|  |  |  | <span v-if="scope.row.type == '1'">次卡</span> | 
|---|
|  |  |  | </template> | 
|---|
|  |  |  | </el-table-column> | 
|---|
|  |  |  | <el-table-column align="center" label="套餐名称" show-overflow-tooltip width="160" prop="mealsName" /> | 
|---|
|  |  |  | <el-table-column align="center" label="用户信息" min-width="240" prop="memberInfo" show-overflow-tooltip /> | 
|---|
|  |  |  | <el-table-column align="center" label="使用次数" width="80" prop="useCount"> | 
|---|
|  |  |  | <el-table-column align="center" label="套餐名称" show-overflow-tooltip min-width="100" prop="name" /> | 
|---|
|  |  |  | <el-table-column align="center" label="用户信息" min-width="100" prop="openid" show-overflow-tooltip /> | 
|---|
|  |  |  | <el-table-column align="center" label="使用次数" min-width="80" prop="useTimes"> | 
|---|
|  |  |  | </el-table-column> | 
|---|
|  |  |  | <el-table-column align="center" label="有效日期" min-width="200" prop="remainCount"> | 
|---|
|  |  |  | <template v-slot="scope"> | 
|---|
|  |  |  | <span v-if="scope.row.mealsType === '1'">-</span> | 
|---|
|  |  |  | <span v-else>{{ scope.row.useCount }}</span> | 
|---|
|  |  |  | <span>{{ scope.row.useStartDate }}至{{ scope.row.useEndDate }}</span> | 
|---|
|  |  |  | </template> | 
|---|
|  |  |  | </el-table-column> | 
|---|
|  |  |  | <el-table-column align="center" label="有效日期" width="80" prop="remainCount"> | 
|---|
|  |  |  | <el-table-column align="center" label="创建时间" min-width="150" prop="createDate" show-overflow-tooltip /> | 
|---|
|  |  |  | <el-table-column align="center" label="套餐状态" min-width="80"> | 
|---|
|  |  |  | <template v-slot="scope"> | 
|---|
|  |  |  | <span v-if="scope.row.mealsType === '1'">-</span> | 
|---|
|  |  |  | <span v-else>{{ scope.row.remainCount }}</span> | 
|---|
|  |  |  | <span v-if="scope.row.status == '0'" class="text_success">正常</span> | 
|---|
|  |  |  | <span v-if="scope.row.status == '1'" class="text_warning">作废</span> | 
|---|
|  |  |  | <span v-if="scope.row.status == '2'" class="text-danger">待支付</span> | 
|---|
|  |  |  | </template> | 
|---|
|  |  |  | </el-table-column> | 
|---|
|  |  |  | <el-table-column fixed="right" align="center" label="套餐状态" width="80"> | 
|---|
|  |  |  | <template v-slot="scope"> | 
|---|
|  |  |  | <span v-if="scope.row.status === '0'" class="text_success">正常</span> | 
|---|
|  |  |  | <span v-if="scope.row.status === '1'" class="text_warning">冻结</span> | 
|---|
|  |  |  | <span v-if="scope.row.status === '2'" class="text-danger">作废</span> | 
|---|
|  |  |  | <span v-if="scope.row.status === '3'" class="text-danger">失效</span> | 
|---|
|  |  |  | </template> | 
|---|
|  |  |  | </el-table-column> | 
|---|
|  |  |  | <el-table-column align="center" label="有效日期" width="120" prop="validTime" /> | 
|---|
|  |  |  | <el-table-column align="center" label="操作" fixed="right" width="150"> | 
|---|
|  |  |  | <el-table-column align="center" label="操作" fixed="right" min-width="150"> | 
|---|
|  |  |  | <template v-slot="scope"> | 
|---|
|  |  |  | <template> | 
|---|
|  |  |  | <el-button v-if=" | 
|---|
|  |  |  | meta.indexOf('MealsMemberPartRefund') > -1 && | 
|---|
|  |  |  | (scope.row.status == '0' || scope.row.status == '1') | 
|---|
|  |  |  | " type="text" @click="rowClickRefund(scope.row)">退款</el-button> | 
|---|
|  |  |  | <el-button v-if="scope.row.status == '0'" type="text" | 
|---|
|  |  |  | @click="getServiceChargePriceBtn('2', scope.row.id)">冻结</el-button> | 
|---|
|  |  |  | <el-button v-if="scope.row.status == '0'" type="text" @click="openCan(scope.row)">作废</el-button> | 
|---|
|  |  |  | <span v-else>-</span> | 
|---|
|  |  |  | </template> | 
|---|
|  |  |  | </template> | 
|---|
|  |  |  | </el-table-column> | 
|---|
|  |  |  | 
|---|
|  |  |  | <el-dialog title="套餐调整" :visible.sync="isShowAdjust" width="500px"> | 
|---|
|  |  |  | <div class="adjust_modal"> | 
|---|
|  |  |  | <div style="margin-top: -30px; margin-bottom: 10px;"> | 
|---|
|  |  |  | <el-radio v-model="adjustData.aa" label="1">已选当前2条数据</el-radio> | 
|---|
|  |  |  | <el-radio v-model="adjustData.flag" label="0">已选{{ selList.length }}条数据</el-radio> | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  | <div style="margin-bottom: 16px;"> | 
|---|
|  |  |  | <el-radio v-model="adjustData.aa" label="1">已选现有筛选条件下全部的11条数据</el-radio> | 
|---|
|  |  |  | <el-radio v-model="adjustData.flag" label="1">选现有筛选条件下全部的{{ pagination.total }}条数据</el-radio> | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  | <div class="df_ac mb5"> | 
|---|
|  |  |  | <span class="key">有效期增加:</span> | 
|---|
|  |  |  | <el-input v-model="adjustData.addTime" oninput="value=value.replace(/[^\d]/g,'')" class="flex1 mr10" /> | 
|---|
|  |  |  | <el-input v-model="adjustData.addNum" oninput="value=value.replace(/[^\d]/g,'')" class="flex1 mr10" /> | 
|---|
|  |  |  | <span>天</span> | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  | <div class="df_ac mb20"> | 
|---|
|  |  |  | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  | <span slot="footer" class="dialog-footer"> | 
|---|
|  |  |  | <el-button @click="isShowAdjust = false">取消</el-button> | 
|---|
|  |  |  | <el-button v-preventReClick type="primary" :loading="subLoading" @click="handleModelEnter">确定</el-button> | 
|---|
|  |  |  | <el-button type="primary" :loading="subLoading" @click="handleModelEnter">确定</el-button> | 
|---|
|  |  |  | </span> | 
|---|
|  |  |  | </el-dialog> | 
|---|
|  |  |  | <el-dialog title="套餐作废" :visible.sync="isShowCan" width="500px"> | 
|---|
|  |  |  | <div class="adjust_modal" style="margin-top: -30px;"> | 
|---|
|  |  |  | <div class="red" style="font-size: 16px;">确定作废选中套餐吗?作废后,套餐不可使用</div> | 
|---|
|  |  |  | <div class="df_ac mt10"> | 
|---|
|  |  |  | <el-input type="textarea" v-model="remarkCan" placeholder="请按要求输入备注说明,非必填" /> | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  | <span slot="footer" class="dialog-footer"> | 
|---|
|  |  |  | <el-button @click="isShowCan = false">取消</el-button> | 
|---|
|  |  |  | <el-button type="primary" :loading="subLoading" @click="handleCan">确定</el-button> | 
|---|
|  |  |  | </span> | 
|---|
|  |  |  | </el-dialog> | 
|---|
|  |  |  |  | 
|---|
|  |  |  | <Refund v-if="isShowRefund" ref="RefundRef" @close="isShowRefund = false" @success="refundSuccess" /> | 
|---|
|  |  |  | <Detail v-if="isShowDetail" ref="detailRef" /> | 
|---|
|  |  |  | <orderDialog ref="child" @orderSuccess="getList()" /> | 
|---|
|  |  |  | <Detail ref="DetailRef" /> | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  | </template> | 
|---|
|  |  |  |  | 
|---|
|  |  |  | <script> | 
|---|
|  |  |  | import { pickerOptions } from './components/config' | 
|---|
|  |  |  | import BasePageTemp from '@/components/base/BasePageTemp' | 
|---|
|  |  |  | import Breadcrumb from '@/layouts/Breadcrumb' | 
|---|
|  |  |  | // import Detail from '../comboDetail' | 
|---|
|  |  |  | // import Refund from './refund.vue' | 
|---|
|  |  |  | import Detail from './components/SaleDetail.vue' | 
|---|
|  |  |  | import { Message } from 'element-ui' | 
|---|
|  |  |  | import { | 
|---|
|  |  |  | comboSalePage, | 
|---|
|  |  |  | comboSaleEx, | 
|---|
|  |  |  | comboSaleCancel, | 
|---|
|  |  |  | comboSaleAdjust, | 
|---|
|  |  |  | } from '@/api/business/combo.js' | 
|---|
|  |  |  | export default { | 
|---|
|  |  |  | name: 'SalesRecord', | 
|---|
|  |  |  | extends: BasePageTemp, | 
|---|
|  |  |  | components: { Breadcrumb }, | 
|---|
|  |  |  | components: { Breadcrumb, Detail }, | 
|---|
|  |  |  | data() { | 
|---|
|  |  |  | return { | 
|---|
|  |  |  | exportLoading: false, | 
|---|
|  |  |  | 
|---|
|  |  |  | isShowRefund: false, | 
|---|
|  |  |  | queryFormConfig: { | 
|---|
|  |  |  | formItems: [{ | 
|---|
|  |  |  | filed: 'id', | 
|---|
|  |  |  | filed: 'code', | 
|---|
|  |  |  | type: 'input', | 
|---|
|  |  |  | label: '套餐票号', | 
|---|
|  |  |  | placeholder: '请输入套餐号', | 
|---|
|  |  |  | clearable: true | 
|---|
|  |  |  | }, { | 
|---|
|  |  |  | filed: 'mealsName', | 
|---|
|  |  |  | filed: 'name', | 
|---|
|  |  |  | type: 'input', | 
|---|
|  |  |  | label: '套餐名称', | 
|---|
|  |  |  | placeholder: '请输入套餐名称', | 
|---|
|  |  |  | clearable: true | 
|---|
|  |  |  | }, { | 
|---|
|  |  |  | filed: 'memberSearchValue', | 
|---|
|  |  |  | filed: 'openid', | 
|---|
|  |  |  | type: 'input', | 
|---|
|  |  |  | label: '用户信息', | 
|---|
|  |  |  | clearable: true | 
|---|
|  |  |  | 
|---|
|  |  |  | clearable: true, | 
|---|
|  |  |  | options: [ | 
|---|
|  |  |  | { value: '0', label: '正常' }, | 
|---|
|  |  |  | { value: '1', label: '冻结' }, | 
|---|
|  |  |  | { value: '2', label: '作废' }, | 
|---|
|  |  |  | { value: '3', label: '失效' }] | 
|---|
|  |  |  | { value: '1', label: '作废' } | 
|---|
|  |  |  | ] | 
|---|
|  |  |  | },{ | 
|---|
|  |  |  | filed: 'createDate', | 
|---|
|  |  |  | type: 'daterange', | 
|---|
|  |  |  | label: '创建日期', | 
|---|
|  |  |  | placeholder: '请选择状态', | 
|---|
|  |  |  | clearable: true, | 
|---|
|  |  |  | options: [ | 
|---|
|  |  |  | { value: '0', label: '正常' }, | 
|---|
|  |  |  | { value: '1', label: '作废' } | 
|---|
|  |  |  | ] | 
|---|
|  |  |  | }], | 
|---|
|  |  |  | online: true | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | pickerOptions, | 
|---|
|  |  |  | querys: { | 
|---|
|  |  |  | id: '', | 
|---|
|  |  |  | mealsName: '', | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | saleRecordList: [], | 
|---|
|  |  |  | saleRecordTotal: 0, | 
|---|
|  |  |  | selectSalesList: [], | 
|---|
|  |  |  | selList: [], | 
|---|
|  |  |  | saleRecordLoading: false, | 
|---|
|  |  |  | subLoading: false, | 
|---|
|  |  |  |  | 
|---|
|  |  |  | isShowModal: false, | 
|---|
|  |  |  | isShowCan: false, | 
|---|
|  |  |  | ModalTitle: '', | 
|---|
|  |  |  | ModalText: '', | 
|---|
|  |  |  | ModelRemark: '', | 
|---|
|  |  |  | remarkCan: '', | 
|---|
|  |  |  | // ⬇️adjust调整相关 | 
|---|
|  |  |  | isShowAdjust: false, | 
|---|
|  |  |  | canList: [], | 
|---|
|  |  |  | adjustData: { | 
|---|
|  |  |  | flag: 0, | 
|---|
|  |  |  | addNum: '', | 
|---|
|  |  |  | addTime: '' | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | created() { | 
|---|
|  |  |  | // this.meta = this.$route.meta.buttons || [] | 
|---|
|  |  |  | // this.getList(1) | 
|---|
|  |  |  | this.getList(1) | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | methods: { | 
|---|
|  |  |  | rowClickRefund(row) { | 
|---|
|  |  |  | 
|---|
|  |  |  | this.isShowRefund = false | 
|---|
|  |  |  | this.getList() | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | getServiceChargePriceBtn(type, mealsMemberId) { | 
|---|
|  |  |  | this.serviceChargeId = mealsMemberId | 
|---|
|  |  |  | getServiceChargePrice({ | 
|---|
|  |  |  | param: { | 
|---|
|  |  |  | type, | 
|---|
|  |  |  | mealsMemberId | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }).then((res) => { | 
|---|
|  |  |  | if (res.errorCode === '000000') { | 
|---|
|  |  |  | this.serviceChargePrice = res.record.price | 
|---|
|  |  |  | this.openModal('dongjie') | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | handleEx() { | 
|---|
|  |  |  | const { pagination, filters } = this | 
|---|
|  |  |  | let form = JSON.parse(JSON.stringify(filters)) | 
|---|
|  |  |  | if (form.createDate && form.createDate.length > 0) { | 
|---|
|  |  |  | form.startCreateDate = form.createDate[0] + ' 00:00:00' | 
|---|
|  |  |  | form.endCreateDate = form.createDate[1] + ' 23:59:59' | 
|---|
|  |  |  | delete form.createDate | 
|---|
|  |  |  | } | 
|---|
|  |  |  | this.$dialog.exportConfirm('确认导出吗?') | 
|---|
|  |  |  | .then(() => { | 
|---|
|  |  |  | this.loading = true | 
|---|
|  |  |  | comboSaleEx({ | 
|---|
|  |  |  | page: 1, | 
|---|
|  |  |  | capacity: 1000000, | 
|---|
|  |  |  | model: form | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | .then(response => { | 
|---|
|  |  |  | this.download(response) | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | .catch(e => { | 
|---|
|  |  |  | this.$tip.apiFailed(e) | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | .finally(() => { | 
|---|
|  |  |  | this.loading = false | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | .catch(() => { }) | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | handleEx() { | 
|---|
|  |  |  | const { querys } = this | 
|---|
|  |  |  | this.exportLoading = true | 
|---|
|  |  |  | recordExport({ | 
|---|
|  |  |  | param: { | 
|---|
|  |  |  | ...querys | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }).then((res) => { | 
|---|
|  |  |  | this.exportLoading = false | 
|---|
|  |  |  | if (res.errorCode === '000000') { | 
|---|
|  |  |  | const a = document.createElement('a') // 创建一个a标签元素 | 
|---|
|  |  |  | a.style.display = 'none' // 设置元素不可见 | 
|---|
|  |  |  | a.href = res.record.showUrl // 设置下载地址 | 
|---|
|  |  |  | document.body.appendChild(a) // 加入 | 
|---|
|  |  |  | a.click() // 触发点击,下载 | 
|---|
|  |  |  | document.body.removeChild(a) // | 
|---|
|  |  |  | this.$message.success('导出成功') | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | .catch(() => { | 
|---|
|  |  |  | this.exportLoading = false | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | openCan(row) { | 
|---|
|  |  |  | this.isShowCan = true | 
|---|
|  |  |  | this.canList = [row] | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | handleDisable(row, index) { | 
|---|
|  |  |  | if (row.status === '2') { | 
|---|
|  |  |  | return false | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | return true | 
|---|
|  |  |  | } | 
|---|
|  |  |  | handleDisable(row) { | 
|---|
|  |  |  | // return row.status == 0 | 
|---|
|  |  |  | return true | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | // 查询表格数据 | 
|---|
|  |  |  | getList(page) { | 
|---|
|  |  |  | const { querys, pagination } = this | 
|---|
|  |  |  | if (page) { | 
|---|
|  |  |  | pagination.page = page | 
|---|
|  |  |  | this.pagination.page = Number(page) | 
|---|
|  |  |  | const { pagination, filters } = this | 
|---|
|  |  |  | this.loading = true | 
|---|
|  |  |  | if (page) { pagination.page = page } | 
|---|
|  |  |  | let form = JSON.parse(JSON.stringify(filters)) | 
|---|
|  |  |  | if (form.createDate && form.createDate.length > 0) { | 
|---|
|  |  |  | form.startCreateDate = form.createDate[0] + ' 00:00:00' | 
|---|
|  |  |  | form.endCreateDate = form.createDate[1] + ' 23:59:59' | 
|---|
|  |  |  | delete form.createDate | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (querys.indate && querys.indate.length > 0) { | 
|---|
|  |  |  | querys.startTime = querys.indate[0] | 
|---|
|  |  |  | querys.endTime = querys.indate[1] | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | querys.startTime = null | 
|---|
|  |  |  | querys.endTime = null | 
|---|
|  |  |  | } | 
|---|
|  |  |  | pagination.firstQueryTime = parseTime(new Date()) | 
|---|
|  |  |  | this.saleRecordLoading = true | 
|---|
|  |  |  | comboSalesRecordPost({ | 
|---|
|  |  |  | pagination, param: { | 
|---|
|  |  |  | ...querys, | 
|---|
|  |  |  | venueId: sessionStorage.getItem('venueId') | 
|---|
|  |  |  | } | 
|---|
|  |  |  | comboSalePage({ | 
|---|
|  |  |  | model: { | 
|---|
|  |  |  | ...form | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | capacity: pagination.pageSize, | 
|---|
|  |  |  | page: pagination.page, | 
|---|
|  |  |  | }).then(res => { | 
|---|
|  |  |  | this.saleRecordLoading = false | 
|---|
|  |  |  | if (res.errorCode === '000000') { | 
|---|
|  |  |  | this.saleRecordLoading = false | 
|---|
|  |  |  | this.saleRecordTotal = res.totalCount | 
|---|
|  |  |  | this.saleRecordList = res.recordList | 
|---|
|  |  |  | if (res.totalCount && res.recordList.length === 0 && pagination.page > 1) { | 
|---|
|  |  |  | this.getList(Math.ceil(res.totalCount / pagination.rows)) | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }).catch(() => { | 
|---|
|  |  |  | this.saleRecordLoading = false | 
|---|
|  |  |  | this.loading = false | 
|---|
|  |  |  | this.list = res.records || [] | 
|---|
|  |  |  | this.pagination.total = res.total || 0 | 
|---|
|  |  |  | }, () => { | 
|---|
|  |  |  | this.loading = false | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | clearQueryForm() { | 
|---|
|  |  |  | // eslint-disable-next-line no-unused-vars | 
|---|
|  |  |  | this.querys = {} | 
|---|
|  |  |  | this.filters = {} | 
|---|
|  |  |  | this.getList(1) | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | // 打开modal 冻结 解冻 作废 | 
|---|
|  |  |  | openModal(type) { | 
|---|
|  |  |  | const { selectSalesList } = this | 
|---|
|  |  |  | const { selList } = this | 
|---|
|  |  |  | this.ModelRemark = '' | 
|---|
|  |  |  | this.adjustData.addNum = '' | 
|---|
|  |  |  | this.adjustData.addTime = '' | 
|---|
|  |  |  | switch (type) { | 
|---|
|  |  |  | case 'dongjie': | 
|---|
|  |  |  | this.ModalTitle = '套餐冻结' | 
|---|
|  |  |  | this.ModalText = '确定冻结选中套餐吗?冻结后,套餐将无法使用' | 
|---|
|  |  |  | break | 
|---|
|  |  |  | case 'jiedong': | 
|---|
|  |  |  | this.ModalTitle = '套餐解冻' | 
|---|
|  |  |  | this.ModalText = '确定解冻选中套餐吗?解冻后,套餐可立即生效使用' | 
|---|
|  |  |  | break | 
|---|
|  |  |  | case 'zuofei': | 
|---|
|  |  |  | this.ModalTitle = '套餐作废' | 
|---|
|  |  |  | this.ModalText = '确定作废选中套餐吗?作废后,套餐不可使用' | 
|---|
|  |  |  | 
|---|
|  |  |  | default: | 
|---|
|  |  |  | break | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (selectSalesList.length === 0 && type !== 'dongjie') { | 
|---|
|  |  |  | return this.$message.warning(`请先选择要${this.ModalTitle.slice(2)}的套餐`) | 
|---|
|  |  |  | if (selList.length === 0 && type == 'zuofei') { | 
|---|
|  |  |  | return Message.warning(`请先选择要${this.ModalTitle.slice(2)}的套餐`) | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (this.ModalTitle === '套餐调整') { | 
|---|
|  |  |  | this.isShowAdjust = true | 
|---|
|  |  |  | this.adjustData = { | 
|---|
|  |  |  | flag: '0' | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | this.isShowModal = true | 
|---|
|  |  |  | this.isShowCan = true | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | // 确定 冻结 解冻 作废 | 
|---|
|  |  |  | handleModelEnter() { | 
|---|
|  |  |  | // if (!this.ModelRemark) { | 
|---|
|  |  |  | //   this.$message.warning('操作备注必填') | 
|---|
|  |  |  | //   return | 
|---|
|  |  |  | // } | 
|---|
|  |  |  | switch (this.ModalTitle) { | 
|---|
|  |  |  | case '套餐冻结': | 
|---|
|  |  |  | this.Freeze() | 
|---|
|  |  |  | break | 
|---|
|  |  |  | case '套餐解冻': | 
|---|
|  |  |  | this.Unfreeze() | 
|---|
|  |  |  | break | 
|---|
|  |  |  | case '套餐作废': | 
|---|
|  |  |  | this.cancellation() | 
|---|
|  |  |  | break | 
|---|
|  |  |  | 
|---|
|  |  |  | break | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | // 冻结 | 
|---|
|  |  |  | Freeze() { | 
|---|
|  |  |  | const that = this | 
|---|
|  |  |  | const data = { | 
|---|
|  |  |  | type: '1', | 
|---|
|  |  |  | handleRemake: this.ModelRemark, | 
|---|
|  |  |  | isCreateOrder: '1', | 
|---|
|  |  |  | id: this.serviceChargeId | 
|---|
|  |  |  | } | 
|---|
|  |  |  | this.subLoading = true | 
|---|
|  |  |  | handleComboSalesPost({ param: { ...data } }).then(res => { | 
|---|
|  |  |  | this.subLoading = false | 
|---|
|  |  |  | this.isShowModal = false | 
|---|
|  |  |  | if (res.errorCode === '000000') { | 
|---|
|  |  |  | const obj = res.record | 
|---|
|  |  |  | if (obj && obj.price) { | 
|---|
|  |  |  | obj.goodsInfos = obj.serviceChargeOrderInfo | 
|---|
|  |  |  | obj.allPrice = obj.price | 
|---|
|  |  |  | this.$refs.child.continuePay(obj, 'handlingFees') | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | this.$message.success('冻结成功') | 
|---|
|  |  |  | this.getList() | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // | 
|---|
|  |  |  | } else if (res.errorCode === '200001') { | 
|---|
|  |  |  | this.$confirm('存在未处理订单, 是否跳转?', '提示', { | 
|---|
|  |  |  | confirmButtonText: '确定', | 
|---|
|  |  |  | cancelButtonText: '取消', | 
|---|
|  |  |  | type: 'warning', | 
|---|
|  |  |  | callback: () => { }, | 
|---|
|  |  |  | beforeClose: (action, ctx, close) => { | 
|---|
|  |  |  | if (action !== 'confirm') { | 
|---|
|  |  |  | close() | 
|---|
|  |  |  | return | 
|---|
|  |  |  | } | 
|---|
|  |  |  | ctx.confirmButtonLoading = true | 
|---|
|  |  |  | that.$router.push({ name: 'HandlingFees' }) | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }).finally(() => { | 
|---|
|  |  |  | this.subLoading = false | 
|---|
|  |  |  | this.isShowModal = false | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | // 解冻 | 
|---|
|  |  |  | async Unfreeze() { | 
|---|
|  |  |  | const data = { | 
|---|
|  |  |  | type: '2', | 
|---|
|  |  |  | handleRemake: this.ModelRemark, | 
|---|
|  |  |  | id: this.selectSalesList.map(i => i.id).join(',') | 
|---|
|  |  |  | } | 
|---|
|  |  |  | this.subLoading = true | 
|---|
|  |  |  | const res = await handleComboSalesPost({ param: { ...data } }).catch(() => { | 
|---|
|  |  |  | this.subLoading = false | 
|---|
|  |  |  | this.isShowModal = false | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | this.subLoading = false | 
|---|
|  |  |  | this.isShowModal = false | 
|---|
|  |  |  | if (res && res.errorCode === '000000') { | 
|---|
|  |  |  | this.$message.success('解冻成功') | 
|---|
|  |  |  | this.getList() | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | // 调整 | 
|---|
|  |  |  | async handleAdjust() { | 
|---|
|  |  |  | if (!this.adjustData.addNum && !this.adjustData.addTime) { | 
|---|
|  |  |  | return this.$message.warning('请输入要调整的有效期天数或者余量次数') | 
|---|
|  |  |  | return Message.warning('请输入要调整的有效期天数或者余量次数') | 
|---|
|  |  |  | } | 
|---|
|  |  |  | const data = { | 
|---|
|  |  |  | type: '3', | 
|---|
|  |  |  | handleRemake: this.ModelRemark, | 
|---|
|  |  |  | addNum: this.adjustData.addNum || 0, | 
|---|
|  |  |  | addTime: this.adjustData.addTime || 0, | 
|---|
|  |  |  | id: this.selectSalesList.map(i => i.id).join(',') | 
|---|
|  |  |  | info: this.ModelRemark, | 
|---|
|  |  |  | addDays: this.adjustData.addNum || 0, | 
|---|
|  |  |  | choseIdList: this.adjustData.flag == 0 ? this.selList.map(i => i.id) : [], | 
|---|
|  |  |  | ...this.filters | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | this.subLoading = true | 
|---|
|  |  |  | const res = await handleComboSalesPost({ param: { ...data } }).catch(() => { | 
|---|
|  |  |  | const res = await comboSaleAdjust({ ...data }).catch(() => { | 
|---|
|  |  |  | this.subLoading = false | 
|---|
|  |  |  | this.isShowModal = false | 
|---|
|  |  |  | this.isShowCan = false | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | this.subLoading = false | 
|---|
|  |  |  | this.isShowModal = false | 
|---|
|  |  |  | if (res && res.errorCode === '000000') { | 
|---|
|  |  |  | this.$message.success('套餐调整成功') | 
|---|
|  |  |  | this.isShowCan = false | 
|---|
|  |  |  | if (res) { | 
|---|
|  |  |  | Message.success('套餐调整成功') | 
|---|
|  |  |  | this.getList() | 
|---|
|  |  |  | this.isShowAdjust = false | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | // 作废 | 
|---|
|  |  |  | async cancellation() { | 
|---|
|  |  |  | const data = { | 
|---|
|  |  |  | type: '4', | 
|---|
|  |  |  | handleRemake: this.ModelRemark, | 
|---|
|  |  |  | id: this.selectSalesList.map(i => i.id).join(',') | 
|---|
|  |  |  | handleRemake: this.remarkCan, | 
|---|
|  |  |  | choseIdList: this.selList.map(i => i.id) | 
|---|
|  |  |  | } | 
|---|
|  |  |  | this.subLoading = true | 
|---|
|  |  |  | const res = await handleComboSalesPost({ param: { ...data } }).catch(() => { | 
|---|
|  |  |  | const res = await comboSaleCancel({ ...data }).catch(() => { | 
|---|
|  |  |  | this.subLoading = false | 
|---|
|  |  |  | this.isShowModal = false | 
|---|
|  |  |  | this.isShowCan = false | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | this.subLoading = false | 
|---|
|  |  |  | this.isShowModal = false | 
|---|
|  |  |  | if (res && res.errorCode === '000000') { | 
|---|
|  |  |  | this.$message.success('作废成功') | 
|---|
|  |  |  | this.isShowCan = false | 
|---|
|  |  |  | if (res) { | 
|---|
|  |  |  | Message.success('作废成功') | 
|---|
|  |  |  | this.getList() | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | async handleCan() { | 
|---|
|  |  |  | const data = { | 
|---|
|  |  |  | handleRemake: this.remarkCan, | 
|---|
|  |  |  | choseIdList: this.canList.map(i => i.id) | 
|---|
|  |  |  | } | 
|---|
|  |  |  | this.subLoading = true | 
|---|
|  |  |  | const res = await comboSaleCancel({ ...data }).catch(() => { | 
|---|
|  |  |  | this.subLoading = false | 
|---|
|  |  |  | this.isShowCan = false | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | this.subLoading = false | 
|---|
|  |  |  | this.isShowCan = false | 
|---|
|  |  |  | if (res) { | 
|---|
|  |  |  | Message.success('作废成功') | 
|---|
|  |  |  | this.getList() | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | handleSelectionChange(val) { | 
|---|
|  |  |  | this.selectSalesList = val | 
|---|
|  |  |  | this.selList = val | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | comboDetail(item) { | 
|---|
|  |  |  | this.isShowDetail = true | 
|---|
|  |  |  | this.$nextTick(() => { | 
|---|
|  |  |  | this.$refs.detailRef.isShowModal = true | 
|---|
|  |  |  | this.$refs.detailRef.comboDetail(item) | 
|---|
|  |  |  | this.$refs.DetailRef.isShowModal = true | 
|---|
|  |  |  | this.$refs.DetailRef.getDetail(item) | 
|---|
|  |  |  | }) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // this.$router.push({ | 
|---|
|  |  |  | //   name: 'comboDetail', | 
|---|
|  |  |  | //   query: item | 
|---|
|  |  |  | // }) | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | pageSizeChange(val) { | 
|---|
|  |  |  | this.pagination.rows = val | 
|---|
|  |  |  | 
|---|
|  |  |  | text-align: right; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | .el-dialog__body{ | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | .el-dialog__body {} | 
|---|
|  |  |  |  | 
|---|
|  |  |  | .text_warning { | 
|---|
|  |  |  | color: #e89e42; | 
|---|
|  |  |  | } | 
|---|