<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> 
 | 
    <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> 
 | 
    </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> 
 | 
        <template v-slot="scope"> 
 | 
          <span class="primaryColor pointer" @click="comboDetail(scope.row)">{{ 
 | 
            scope.row.id 
 | 
            }}</span> 
 | 
        </template> 
 | 
      </el-table-column> 
 | 
      <el-table-column align="center" label="套餐类型" width="120"> 
 | 
        <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> 
 | 
        </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"> 
 | 
        <template v-slot="scope"> 
 | 
          <span v-if="scope.row.mealsType === '1'">-</span> 
 | 
          <span v-else>{{ scope.row.useCount }}</span> 
 | 
        </template> 
 | 
      </el-table-column> 
 | 
      <el-table-column align="center" label="有效日期" width="80" prop="remainCount"> 
 | 
        <template v-slot="scope"> 
 | 
          <span v-if="scope.row.mealsType === '1'">-</span> 
 | 
          <span v-else>{{ scope.row.remainCount }}</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"> 
 | 
        <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> 
 | 
          </template> 
 | 
        </template> 
 | 
      </el-table-column> 
 | 
    </el-table> 
 | 
    <div class="table_btns"> 
 | 
      <Pagination @size-change="handleSizeChange" @current-change="getList" :pagination="pagination" /> 
 | 
    </div> 
 | 
  
 | 
    <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> 
 | 
        </div> 
 | 
        <div style="margin-bottom: 16px;"> 
 | 
          <el-radio v-model="adjustData.aa" label="1">已选现有筛选条件下全部的11条数据</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" /> 
 | 
          <span>天</span> 
 | 
        </div> 
 | 
        <div class="df_ac mb20"> 
 | 
          <span class="key" /> 
 | 
          <span class="text_warning">修改后套餐有效期增加以上天数</span> 
 | 
        </div> 
 | 
        <div class="df_ac mt20"> 
 | 
          <span class="key">调整备注:</span> 
 | 
          <el-input v-model="ModelRemark" style="width: 356px" placeholder="请按要求输入备注说明,非必填" /> 
 | 
        </div> 
 | 
      </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> 
 | 
      </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()" /> 
 | 
  </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' 
 | 
export default { 
 | 
  name: 'SalesRecord', 
 | 
  extends: BasePageTemp, 
 | 
  components: { Breadcrumb }, 
 | 
  data() { 
 | 
    return { 
 | 
      exportLoading: false, 
 | 
      isShowDetail: false, 
 | 
      isShowRefund: false, 
 | 
      queryFormConfig: { 
 | 
        formItems: [{ 
 | 
          filed: 'id', 
 | 
          type: 'input', 
 | 
          label: '套餐票号', 
 | 
          placeholder: '请输入套餐号', 
 | 
          clearable: true 
 | 
        }, { 
 | 
          filed: 'mealsName', 
 | 
          type: 'input', 
 | 
          label: '套餐名称', 
 | 
          placeholder: '请输入套餐名称', 
 | 
          clearable: true 
 | 
        }, { 
 | 
          filed: 'memberSearchValue', 
 | 
          type: 'input', 
 | 
          label: '用户信息', 
 | 
          clearable: true 
 | 
        }, { 
 | 
          filed: 'status', 
 | 
          type: 'select', 
 | 
          label: '状态', 
 | 
          placeholder: '请选择状态', 
 | 
          clearable: true, 
 | 
          options: [ 
 | 
            { value: '0', label: '正常' }, 
 | 
            { value: '1', label: '冻结' }, 
 | 
            { value: '2', label: '作废' }, 
 | 
            { value: '3', label: '失效' }] 
 | 
        }], 
 | 
        online: true 
 | 
      }, 
 | 
      pickerOptions, 
 | 
      querys: { 
 | 
        id: '', 
 | 
        mealsName: '', 
 | 
        memberSearchValue: '', 
 | 
        status: '', 
 | 
        indate: [] 
 | 
      }, 
 | 
  
 | 
      saleRecordList: [], 
 | 
      saleRecordTotal: 0, 
 | 
      selectSalesList: [], 
 | 
      saleRecordLoading: false, 
 | 
      subLoading: false, 
 | 
  
 | 
      isShowModal: false, 
 | 
      ModalTitle: '', 
 | 
      ModalText: '', 
 | 
      ModelRemark: '', 
 | 
      // ⬇️adjust调整相关 
 | 
      isShowAdjust: false, 
 | 
      adjustData: { 
 | 
        addNum: '', 
 | 
        addTime: '' 
 | 
      }, 
 | 
      serviceChargePrice: '', 
 | 
      serviceChargeId: '' 
 | 
    } 
 | 
  }, 
 | 
  created() { 
 | 
    // this.meta = this.$route.meta.buttons || [] 
 | 
    // this.getList(1) 
 | 
  }, 
 | 
  methods: { 
 | 
    rowClickRefund(row) { 
 | 
      this.isShowRefund = true 
 | 
      this.$nextTick(() => { 
 | 
        this.$refs.RefundRef.getPrice(row) 
 | 
        this.$refs.RefundRef.isShow = true 
 | 
      }) 
 | 
    }, 
 | 
    refundSuccess() { 
 | 
      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') 
 | 
        } 
 | 
      }) 
 | 
        .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 
 | 
        }) 
 | 
    }, 
 | 
    handleDisable(row, index) { 
 | 
      if (row.status === '2') { 
 | 
        return false 
 | 
      } else { 
 | 
        return true 
 | 
      } 
 | 
    }, 
 | 
    // 查询表格数据 
 | 
    getList(page) { 
 | 
      const { querys, pagination } = this 
 | 
      if (page) { 
 | 
        pagination.page = page 
 | 
        this.pagination.page = Number(page) 
 | 
      } 
 | 
      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') 
 | 
        } 
 | 
      }).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 
 | 
      }) 
 | 
    }, 
 | 
    clearQueryForm() { 
 | 
      // eslint-disable-next-line no-unused-vars 
 | 
      this.querys = {} 
 | 
      this.getList(1) 
 | 
    }, 
 | 
    // 打开modal 冻结 解冻 作废 
 | 
    openModal(type) { 
 | 
      const { selectSalesList } = 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 = '确定作废选中套餐吗?作废后,套餐不可使用' 
 | 
          break 
 | 
        case 'tiaozheng': 
 | 
          this.ModalTitle = '套餐调整' 
 | 
          break 
 | 
        default: 
 | 
          break 
 | 
      } 
 | 
      if (selectSalesList.length === 0 && type !== 'dongjie') { 
 | 
        return this.$message.warning(`请先选择要${this.ModalTitle.slice(2)}的套餐`) 
 | 
      } 
 | 
      if (this.ModalTitle === '套餐调整') { 
 | 
        this.isShowAdjust = true 
 | 
      } else { 
 | 
        this.isShowModal = true 
 | 
      } 
 | 
    }, 
 | 
    // 确定 冻结 解冻 作废 
 | 
    handleModelEnter() { 
 | 
      // if (!this.ModelRemark) { 
 | 
      //   this.$message.warning('操作备注必填') 
 | 
      //   return 
 | 
      // } 
 | 
      switch (this.ModalTitle) { 
 | 
        case '套餐冻结': 
 | 
          this.Freeze() 
 | 
          break 
 | 
        case '套餐解冻': 
 | 
          this.Unfreeze() 
 | 
          break 
 | 
        case '套餐作废': 
 | 
          this.cancellation() 
 | 
          break 
 | 
        case '套餐调整': 
 | 
          this.handleAdjust() 
 | 
          break 
 | 
        default: 
 | 
          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('请输入要调整的有效期天数或者余量次数') 
 | 
      } 
 | 
      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(',') 
 | 
      } 
 | 
  
 | 
      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() 
 | 
        this.isShowAdjust = false 
 | 
      } 
 | 
    }, 
 | 
    // 作废 
 | 
    async cancellation() { 
 | 
      const data = { 
 | 
        type: '4', 
 | 
        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() 
 | 
      } 
 | 
    }, 
 | 
    handleSelectionChange(val) { 
 | 
      this.selectSalesList = val 
 | 
    }, 
 | 
    comboDetail(item) { 
 | 
      this.isShowDetail = true 
 | 
      this.$nextTick(() => { 
 | 
        this.$refs.detailRef.isShowModal = true 
 | 
        this.$refs.detailRef.comboDetail(item) 
 | 
      }) 
 | 
  
 | 
      // this.$router.push({ 
 | 
      //   name: 'comboDetail', 
 | 
      //   query: item 
 | 
      // }) 
 | 
    }, 
 | 
    pageSizeChange(val) { 
 | 
      this.pagination.rows = val 
 | 
      this.getList(1) 
 | 
    } 
 | 
  
 | 
  } 
 | 
} 
 | 
</script> 
 | 
  
 | 
<style lang="scss" scoped> 
 | 
.adjust_modal { 
 | 
  .df_ac { 
 | 
    .key { 
 | 
      width: 92px; 
 | 
      text-align: right; 
 | 
    } 
 | 
  } 
 | 
  .el-dialog__body{ 
 | 
     
 | 
  } 
 | 
  .text_warning { 
 | 
    color: #e89e42; 
 | 
  } 
 | 
} 
 | 
</style> 
 |