service-list.vue 6 KB
<template>
  <div class="stat-shop">
    <layout-body>
      <p slot="title">服务费账单</p>
      <layout-filter class="box-filter" :inline="true" :col="1">
        <filter-item :label="filters.dateRange.label">
          <Date-picker type="datetimerange"
                       :placeholder="filters.dateRange.label"
                       @on-change="dateRange"
                       v-model="filters.dateRange.model"
                       format="yyyy-MM-dd">
          </Date-picker>
          <div class="quick">
            <a href="javascript:;" @click="() => {changeLimit(0)}">今日</a>
            <a href="javascript:;" @click="() => {changeLimit(1)}">昨天</a>
            <a href="javascript:;" @click="() => {changeLimit(7)}">近7天</a>
            <a href="javascript:;" @click="() => {changeLimit(30)}">近30天</a>
          </div>
        </filter-item>
      </layout-filter>
    </layout-body>
  </div>
</template>

<script>
import moment from "moment";
import {ServiceList} from './store';
import FinanceService from 'services/finance/finance-service';

export default {
  data() {
    return ServiceList.call(this);
  },
  created() {
    this.financeService = new FinanceService();
  },
  mounted() {
    this.loadData();
  },
  watch: {
    date() {
      this.loadData();
    },
    day(newDay) {
      let curDay = moment().format('YYYY-MM-DD');
      if (newDay === this.beginTime || !newDay) {
        return;
      }
      this.dateRange = newDay !== this.curDay ? [newDay, curDay] : [newDay, newDay];
    },
    dateRange(newDate) {
      this.beginTime = moment(Array.isArray(newDate) ? newDate[0] : newDate).format('YYYY-MM-DD');
      this.endTime = moment(Array.isArray(newDate) ? newDate[1] : newDate).format('YYYY-MM-DD');
      this.day = this.beginTime === this.endTime === this.today ? '' : this.beginTime;
      this.pageData.current = 1;
      this.list();
    },
  },
  methods: {
    loadData() {
      this.list();
    },
    changeLimit(limit) {
      if (limit > 1) {
        this.dateRange = [this[`day${limit}`], this.today];
      } else if (limit === 1) {
        this.dateRange = [this.yesterday, this.today];
      } else {
        this.dateRange = [this.today, this.today];
      }
      this.pageData.current = 1;
    },
    pageChange() {
      this.pageData.current = page;
      this.list();
    },
    filtersParams() {
      let params = {};
      let fts = this.filters;
      let withdrawStatus = fts.withdrawStatus.model,
        statementSn = fts.statementSn.model === '' || fts.brand.model === null ?
          null : fts.statementSn.model;
      let pageNo = this.pageData.current;
      let pageSize = this.pageData.pageSize;

      if (this.filters.withdrawStatus.model) {
        if (this.isNumber(this.filters.withdrawStatus.mode)) {
          params.withdrawStatus = this.filters.withdrawStatus.model;
        }
      }
      if (this.filters.statementSn.model) {
        if (this.isString(this.filters.statementSn.mode)) {
          params.statementSn = this.filters.statementSn.model;
        }
      }
      params.pageSize = this.pageData.pageSize;
      params.pageNo = this.pageData.current;

      return Promise.resolve({
        params,
        withdrawStatus,
        statementSn,
        pageNo,
        pageSize
      });
    },
    list() {
      this.$Loading.start();
      return this.filtersParams().then((params) => {
        let filter = { beginTime: this.beginDate, endTime: this.endDate, pageNo: params.pageNo,};
        if (this.withdrawStatus && this.withdrawStatus !== '-1') {
          filter = Object.assign({}, filter, {withdrawStatus: this.withdrawStatus});
        }
        return this.FinanceService.shopWithdrawServiceList(filter);
      }).then(result => {
        if (!result.data) {
          result.data = {
            pageNo: 1,
            pageSize: 1,
            totalCount: 1,
            totalPage: 1,
            records: []
          }
        }
        this.pageData.total = result.data.totalCount;
        this.pageData.current = result.data.pageNo;
        this.tableData = result.data.records;
        this.$Loading.finish();
      }).catch(() => {
        this.$Loading.finish();
      });
    },
    reset() {
      this.filters.withdrawStatus.model = null;
      this.filters.statementSn.model = null;
      this.filters.timeFlag.model = null;
      this.filters.beginTime.model = null;
      this.filters.endTime.model = null;
      this.pageData.pageNo = 1;
      this.pageData.total = 0;
      this.list();
    },
  },
};
</script>

<style lang="scss">
.stat-shop {
  .ivu-tabs-tabpane {
    height: 400px;
    position: relative;
  }
}

.layout-container {
  min-height: 200px;
  margin: 15px;
  overflow: hidden;
  background: #fff;
  border-radius: 4px;

  .layout-filter .line {
    border-top: none;
    margin-bottom: 0;
  }
}

.shop-card {
  margin-top: 10px;
  margin-bottom: 10px;
}

.box-title {
  font-weight: 700;
  color: #495060;
  font-size: 16px;
  line-height: 22px;
  margin: 5px;

  &:before {
    content: ' ';
    display: inline-block;
    width: 5px;
    margin-right: 2px;
    height: 22px;
    vertical-align: top;
    background-color: #999;
  }
}

.box-item {
  width: 90%;
  height: 50px;
  padding: 0 0 0 15px;
  line-height: 50px;
  font-size: 14px;
  overflow: hidden;
  border-radius: 5px;
  color: #fff;
  margin-bottom: 10px;

  .box-item-label {
    display: inline-block;
    min-width: 75px;
    vertical-align: top;
    font-weight: normal;
  }

  .box-item-value {
    font-size: 20px;
    font-weight: 600;
  }

  i {
    display: inline-block;
    width: 20px;
    height: 20px;
    font-size: 22px;
    text-align: center;
    margin-top: -7px;
    vertical-align: middle;
    margin-right: 3px;
  }
}

.box-filter {
  .ivu-date-picker {
    margin-left: 0;
    width: 220px !important;
  }

  .quick {
    display: inline-block;
    margin-left: 20px;
    margin-right: 50px;

    a {
      margin-right: 5px;
    }
  }

  .select-container {
    display: inline-block;
    width: 220px;
  }
}

.ivu-table-cell {
  padding-left: 6px;
  padding-right: 6px;
}
</style>