ll
liukangdong
2025-02-21 c6ac7827159e71f6906a42ceb29a4f83a2f239f6
ll
已添加1个文件
已修改4个文件
736 ■■■■■ 文件已修改
admin/src/api/business/combo.js 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/combo/components/OrderDetail.vue 134 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/combo/components/SaleDetail.vue 138 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/combo/order.vue 42 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/combo/record.vue 392 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/api/business/combo.js
@@ -49,5 +49,35 @@
  return request.post('/business/goodsorder/discountExportExcel', data, {
    trim: true,
    download: true
  })
}
export function comboSalePage(data) {
  return request.post('/business/discountMember/page', data, {
    trim: true
  })
}
export function comboSaleEx(data) {
  return request.post('/business/discountMember/exportExcel', data, {
    trim: true,
    download: true
  })
}
export function comboSaleAdjust(data) {
  return request.post('/business/discountMember/adjust', data, {
    trim: true
  })
}
export function comboSaleCancel(data) {
  return request.post('/business/discountMember/cancel', data, {
    trim: true
  })
}
export function comboSalerDetailPost(id) {
  return request.get('/business/discountMember/' + id)
}
export function discountLogLog(data) {
  return request.post('/business/discountLog/page', data, {
    trim: true
  })
}
admin/src/views/combo/components/OrderDetail.vue
@@ -1,42 +1,92 @@
<template>
  <GlobalWindow :title="title" :visible.sync="visible" :confirm-working="isWorking">
    <div class="title">支付明细</div>
    <el-table :data="list" stripe border>
      <el-table-column prop="id" label="订单编号" show-overflow-tooltip align="center"></el-table-column>
      <el-table-column prop="onlineorderId" label="交易单号" show-overflow-tooltip align="center"></el-table-column>
      <el-table-column prop="refundType" label="交易类型" width="100px" align="center">
  <GlobalWindow :title="title" width="1000px" :visible.sync="visible" :confirm-working="isWorking">
    <div class="title">订单信息</div>
    <div class="info_warp">
      <div class="item">
        <div class="la">订单编号:</div>
        <div class="val">{{ info.id }}</div>
      </div>
      <div class="item">
        <div class="la">订单状态:</div>
        <div class="val">{{ info.status == 1 ? '已支付' : '未支付' }}</div>
      </div>
      <div class="item">
        <div class="la">下单时间:</div>
        <div class="val">{{ info.createDate }}</div>
      </div>
      <div class="item">
        <div class="la">支付时间:</div>
        <div class="val">{{ info.payDate }}</div>
      </div>
      <div class="item">
        <div class="la">订单金额:</div>
        <div class="val">{{ info.money }}</div>
      </div>
      <div class="item">
        <div class="la">支付方式:</div>
        <div class="val">{{ info.payWay == 0 ? '微信' : '支付宝' }}</div>
      </div>
      <div class="item">
        <div class="la">支付单号:</div>
        <div class="val">{{ info.onlineOrderid }}</div>
      </div>
      <div class="item">
        <div class="la">完成时间:</div>
        <div class="val">{{ info.closeDate }}</div>
      </div>
      <div class="item">
        <div class="la">备注:</div>
        <div class="val">{{ info.closeInfo }}</div>
      </div>
    </div>
    <div class="title">买家信息</div>
    <div class="info_warp">
      <div class="item">
        <div class="la">呢称:</div>
        <div class="val">{{ form.member.name }}</div>
      </div>
      <div class="item">
        <div class="la">手机号:</div>
        <div class="val">{{ form.member.phone }}</div>
      </div>
      <div class="item">
        <div class="la">openId:</div>
        <div class="val">{{ form.member.openid }}</div>
      </div>
    </div>
    <div class="title">商品信息</div>
    <el-table :data="[goods]" stripe border>
      <el-table-column prop="name" min-width="100px" label="套餐卡" show-overflow-tooltip align="center"></el-table-column>
      <el-table-column prop="refundType" label="有效期" min-width="160px" align="center">
        <template slot-scope="{row}">
          {{ typeToStr(row.refundType) }}
          {{ row.startDate }} è‡³ {{ row.endDate }}
        </template>
      </el-table-column>
      <el-table-column prop="money" label="交易金额(元)" width="100px" align="center"></el-table-column>
      <el-table-column prop="payWay" label="渠道" width="100px" align="center">
      <el-table-column label="数量" width="80px" align="center">
        <template slot-scope="{row}">
          {{ row.payWay==0? '微信' : '支付宝' }}
          <span>1</span>
        </template>
      </el-table-column>
      <el-table-column prop="payDate" label="交易时间" width="150px" align="center"></el-table-column>
      <el-table-column prop="price" label="ä»·æ ¼" width="100px" align="center"></el-table-column>
      <el-table-column prop="payWay" label="状态" width="100px" align="center">
        <template slot-scope="{row}">
          {{ info.status == 1 ? '已支付' : '未支付' }}
        </template>
      </el-table-column>
    </el-table>
    <div class="title">骑行记录</div>
    <el-table
      :data="memberRidesList"
      stripe
      border
    >
      <el-table-column prop="openid" label="用户" width="250px" show-overflow-tooltip align="center"></el-table-column>
      <el-table-column prop="bikeCode" label="车辆编号" width="100px" align="center"></el-table-column>
      <el-table-column prop="bikeType" label="车类型" width="200px" align="center"></el-table-column>
      <el-table-column prop="rideTime" label="借出时长(分)" width="200px" align="center"></el-table-column>
      <el-table-column prop="duration" label="计费时长(分)" width="200px" align="center"></el-table-column>
      <el-table-column prop="bikeType" label="车类型" width="150px" align="center"></el-table-column>
      <el-table-column prop="rentDate" label="借出时间" width="150px" align="center"></el-table-column>
      <el-table-column prop="backDate" label="还车时间" width="150px" align="center"></el-table-column>
      <el-table-column prop="closeStatus" fixed="right" label="结算状态" width="100px" align="center">
        <template slot-scope="{row}">
          {{ row.closeStatus == 0 ? '未结算' : '已结算' }}
    <div v-if="form.refundList && form.refundList.length > 0" class="title">退款信息</div>
    <el-table v-if="form.refundList && form.refundList.length > 0" :data="form.refundList" stripe border>
      <el-table-column prop="createDate" label="退款时间" min-width="180px" show-overflow-tooltip align="center"></el-table-column>
      <el-table-column prop="money" label="退款金额" min-width="100px" align="center"></el-table-column>
      <el-table-column label="状态" min-width="100px" align="center">
        <template v-slot="{row}">
          <span v-if="row.status == 0">预退款</span>
          <span v-if="row.status == 1">退款失败</span>
          <span v-if="row.status == 2">退款完成</span>
        </template>
      </el-table-column>
      <el-table-column prop="reason" label="退款备注" min-width="100px" align="center"></el-table-column>
      <el-table-column prop="creatorName" label="操作人" min-width="100px" align="center"></el-table-column>
    </el-table>
    <div slot="footer">
      <el-button @click="visible=false">返回</el-button>
@@ -56,8 +106,10 @@
    return {
      // è¡¨å•数据
      form: {
        goodsorderId: ''
        member: {}
      },
      info: {},
      goods: {},
      list: [],
      memberRidesList: [],
      // 0结算退款 1强制结算退款 2结算后退款 [99: è™šæ‹Ÿtype æ”¯ä»˜æŠ¼é‡‘]
@@ -78,7 +130,11 @@
      this.title = title
      this.visible = true
      // æ–°å»º
      console.log('target', target)
      this.form = target
      this.info = target.goodsOrder
      this.goods = target.discountMember
      this.$nextTick(() => {
        this.list = target.payOrderDTOList
        this.memberRidesList = target.memberRidesList
@@ -94,7 +150,23 @@
}
</script>
<style scoped>
<style scoped lang="scss">
.info_warp {
  display: flex;
  flex-wrap: wrap;
  font-size: 14px;
  .item {
    display: flex;
    width: 33.3%;
    margin-bottom: 6px;
    .val {
      color: #666666;
    }
  }
}
.title {
  font-size: 18px;
  font-weight: 600;
admin/src/views/combo/components/SaleDetail.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,138 @@
<template>
  <GlobalWindow title="套餐卡详情" :visible.sync="isShowModal" width="1000px" @close="close" @confirm="close">
    <div>
      <div class="modal_title">套餐名称:{{ detail.name }}</div>
      <div class="place">
        <span>套餐号:{{ detail.code }}</span>
        <span v-if="detail.useType == 1">有效期:{{ detail.useDays }}天</span>
        <span v-if="detail.useType == 0">有效期:{{ detail.useStartDate }}至{{ detail.useEndDate }}</span>
        <span v-if="detail.useType == 2">有效期:{{ detail.useStartDate }}至{{ detail.useEndDate }}</span>
      </div>
      <div class="df_ac">
        <el-tabs style="flex: 1;" v-model="activeTab" @tab-click="handleClick">
          <el-tab-pane label="套餐使用明细" name="0" />
          <el-tab-pane label="套餐操作记录" name="2" />
        </el-tabs>
        <div style="border-bottom: 2px solid #e5e7ec; margin-top: 1px;">{{ activeTab == 0 ? '使用情况' : '操作情况' }}:{{ pagination.total }}次</div>
      </div>
      <el-table v-if="activeTab == 0" v-loading="loading" :data="list" stripe border>
        <el-table-column prop="createDate" align="center" label="使用时间" min-width="100" show-overflow-tooltip />
        <el-table-column prop="discountMemberId" align="center" label="关联订单" min-width="120" show-overflow-tooltip />
        <el-table-column prop="" align="center" label="骑车时长" min-width="80" show-overflow-tooltip>
          <template v-slot="{ row }">
            {{ row.rideTime }}分钟
          </template>
        </el-table-column>
        <el-table-column prop="ridePrice" align="center" label="抵扣金额" min-width="100" show-overflow-tooltip />
      </el-table>
      <el-table v-if="activeTab == 2" v-loading="loading" :data="list" stripe border>
        <el-table-column prop="createDate" align="center" label="操作时间" min-width="100" show-overflow-tooltip />
        <el-table-column prop="info" align="center" label="操作类型" min-width="100" show-overflow-tooltip>
          <template v-slot="{ row }">
           <span v-if="row.type == 0">用户骑行使用</span>
           <span v-if="row.type == 1">平台作废</span>
           <span v-if="row.type == 2">平台调整</span>
          </template>
        </el-table-column>
        <el-table-column prop="editInfo" align="center" label="操作备注" min-width="100" show-overflow-tooltip />
        <el-table-column prop="creatorName" align="center" label="操作人" min-width="100" show-overflow-tooltip />
      </el-table>
      <div class="table_btns">
        <Pagination @size-change="handleSizeChange" @current-change="getList" :pagination="pagination" />
      </div>
    </div>
  </GlobalWindow>
</template>
<script>
import { comboSalerDetailPost, discountLogLog } from '@/api/business/combo.js'
import GlobalWindow from '@/components/common/GlobalWindow'
import BasePageTemp from '@/components/base/BasePageTemp'
export default {
  name: 'ComboDetail',
  extends: BasePageTemp,
  components: {
    GlobalWindow
  },
  data() {
    return {
      isShowModal: false,
      activeTab: '0',
      detail: {},
      pagination: {
        page: 1,
        rows: 10
      },
      totalCount: 0,
      list: [],
      loading: false
    }
  },
  created() {
    // this.detail = this.$route.query
    // this.comboDetail()
  },
  methods: {
    getDetail(row) {
      comboSalerDetailPost(row.id).then(res => {
        this.detail = res
        this.getList()
      }, () => {
      })
    },
    handleClick(val) {
      this.getList()
    },
    getList(page) {
      const { pagination, activeTab, detail } = this
      this.loading = true
      if (page) { pagination.page = page }
      discountLogLog({
        model: {
          type: activeTab,
          discountMemberId: detail.id
        },
        capacity: pagination.pageSize,
        page: pagination.page,
      }).then(res => {
        this.loading = false
        this.list = res.records || []
        this.pagination.total = res.total || 0
      }, () => {
        this.loading = false
      })
    },
    close() {
      this.isShowModal = false
      this.$emit('close')
    },
    currentPageChange(val) {
      this.pagination.page = val
      this.comboDetail()
    },
    pageSizeChange(val) {
      this.pagination.rows = val
      this.comboDetail()
    }
  }
}
</script>
<style lang="scss" scoped>
.modal_title {
  font-size: 18px;
  font-weight: 500;
  margin-bottom: 6px;
}
.place {
  color: #999999;
  font-size: 13px;
  display: flex;
  margin-bottom: 8px;
  span {
    margin-right: 60px;
  }
}
</style>
admin/src/views/combo/order.vue
@@ -6,7 +6,7 @@
      <el-button type="primary" @click="handleEx()">导出</el-button>
    </div>
    <el-table v-loading="loading" :data="list" stripe border>
      <el-table-column prop="code" align="center" label="订单编号" min-width="180" show-overflow-tooltip>
      <el-table-column prop="code" align="center" label="订单编号" min-width="200" show-overflow-tooltip>
        <template scope="{row}">
          <span @click="handleDetail(row.id)" class="primaryColor pointer">{{ row.code }}</span>
        </template>
@@ -15,7 +15,7 @@
      <el-table-column prop="money" align="center" label="合计(元)" min-width="80" show-overflow-tooltip />
      <el-table-column prop="money" align="center" label="实付(元)" min-width="80" show-overflow-tooltip />
      <el-table-column prop="refundMoney" align="center" label="已退金额(元)" min-width="100" show-overflow-tooltip />
      <el-table-column prop="memberId" align="center" label="用户信息" min-width="140" show-overflow-tooltip />
      <el-table-column prop="memberId" align="center" label="用户信息" min-width="200" show-overflow-tooltip />
      <el-table-column prop="payWay" align="center" label="支付方式" min-width="80" show-overflow-tooltip>
        <template v-slot="{ row }">
          <span v-if="row.payWay == 0">微信支付</span>
@@ -32,7 +32,8 @@
      <el-table-column label="操作" fixed="right" align="center" min-width="80" show-overflow-tooltip>
        <template v-slot="{ row }">
          <span @click="handleDetail(row.id)" class="primaryColor pointer">查看详情</span>
          <span v-if="row.status == 1 && (row.refundMoney < row.money)" @click="handRefund(row.id)" class="primaryColor pointer ml10">退款</span>
          <span v-if="row.status == 1 && (row.refundMoney < row.money)" @click="handRefund(row.id)"
            class="primaryColor pointer ml10">退款</span>
        </template>
      </el-table-column>
    </el-table>
@@ -73,19 +74,22 @@
            label: '订单编号',
          },
          {
            filed: 'name',
            filed: 'discountName',
            type: 'input',
            label: '套餐卡',
            placeholder: '请输入卡名称',
          },
          {
            filed: 'pay',
            filed: 'payWay',
            type: 'select',
            label: '支付方式',
            options: []
            options: [
              { label: '微信', value: 0 },
              { label: '支付宝', value: 1 },
            ]
          },
          {
            filed: 'status',
            filed: 'payStatus',
            type: 'select',
            label: '订单状态',
            options: [
@@ -94,12 +98,12 @@
            ]
          },
          {
            filed: 'time',
            filed: 'selDate',
            type: 'date',
            label: '支付时间',
          },
          {
            filed: 'username',
            filed: 'openid',
            type: 'input',
            label: '用户信息',
          },
@@ -119,20 +123,31 @@
    handleDetail(id) {
      comboOrderDetailPost({id})
        .then(res => {
          if (res) {
          this.$refs.OrderDetailRef.open('订单详情', res)
          }
        })
        .catch(err => {
          this.$tip.apiFailed(err)
        })
    },
    handleEx() {
      const { pagination, filters } = this
      this.$dialog.exportConfirm('确认导出吗?')
        .then(() => {
          this.loading = true
          if (filters.selDate && filters.selDate.length > 0) {
            filters.startDate = filters.selDate[0]
            filters.endDate = filters.selDate[1]
          } else {
            filters.startDate = null
            filters.endDate = null
          }
          comboListOrderEx({
            page: 1,
            capacity: 1000000,
            model: this.filters
            model: filters
          })
            .then(response => {
              this.download(response)
@@ -155,6 +170,13 @@
      const { pagination, filters } = this
      this.loading = true
      if (page) { pagination.page = page }
      if (filters.selDate && filters.selDate.length > 0) {
        filters.startDate = filters.selDate[0]
        filters.endDate = filters.selDate[1]
      } else {
        filters.startDate = null
        filters.endDate = null
      }
      comboOrderPost({
        model: {
          ...filters,
admin/src/views/combo/record.vue
@@ -2,71 +2,48 @@
  <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>
      <el-button plain type="primary" @click="handleEx">导出</el-button>
      <el-button plain type="danger" @click="openModal('zuofei')">作废</el-button>
      <el-button 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>
      <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
            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="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>
@@ -78,14 +55,14 @@
    <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">
@@ -99,26 +76,43 @@
      </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,
@@ -126,19 +120,19 @@
      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
@@ -150,13 +144,12 @@
          clearable: true,
          options: [
            { value: '0', label: '正常' },
            { value: '1', label: '冻结' },
            { value: '2', label: '作废' },
            { value: '3', label: '失效' }]
            { value: '1', label: '作废' },
            // { value: '2', label: '待支付' }
          ]
        }],
        online: true
      },
      pickerOptions,
      querys: {
        id: '',
        mealsName: '',
@@ -167,17 +160,21 @@
      saleRecordList: [],
      saleRecordTotal: 0,
      selectSalesList: [],
      selList: [],
      saleRecordLoading: false,
      subLoading: false,
      isShowModal: false,
      isShowCan: false,
      ModalTitle: '',
      ModalText: '',
      ModelRemark: '',
      remarkCan: '',
      // â¬‡ï¸adjust调整相关
      isShowAdjust: false,
      isShowCan: false,
      canList: [],
      adjustData: {
        flag: 0,
        addNum: '',
        addTime: ''
      },
@@ -187,7 +184,7 @@
  },
  created() {
    // this.meta = this.$route.meta.buttons || []
    // this.getList(1)
    this.getList(1)
  },
  methods: {
    rowClickRefund(row) {
@@ -201,84 +198,53 @@
      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
      this.$dialog.exportConfirm('确认导出吗?')
        .then(() => {
          this.loading = true
          comboSaleEx({
            page: 1,
            capacity: 1000000,
            model: filters
          })
            .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 {
    handleDisable(row) {
      // return row.status == 0
        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')
        }
      const { pagination, filters } = this
      this.loading = true
      if (page) { pagination.page = page }
      comboSalePage({
        model: {
          ...filters
        },
        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() {
@@ -288,19 +254,11 @@
    },
    // æ‰“å¼€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 = '确定作废选中套餐吗?作废后,套餐不可使用'
@@ -311,28 +269,21 @@
        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
@@ -343,92 +294,27 @@
          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
      }
@@ -436,36 +322,46 @@
    // ä½œåºŸ
    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
@@ -484,9 +380,9 @@
      text-align: right;
    }
  }
  .el-dialog__body{
    
  }
  .el-dialog__body {}
  .text_warning {
    color: #e89e42;
  }