<template>
  <div>
    <div class="borderless">
      <div class="customer-head">
        <div class="customer-back">
          <el-button type="danger" style="border: none;background: none;color: red" icon="el-icon-arrow-left"
                     @click="backToList">返回列表
          </el-button>
        </div>
      </div>
      <basic-container style="margin-top: 50px">
        <avue-crud
            :option="option"
            :search.sync="search"
            v-model="form"
            :table-loading="loading"
            :data="dataList"
            ref="crud"
            :key="key"
            @on-load="onLoad"
            @search-change="searchChange"
            @refresh-change="refreshChange"
            @resetColumn="resetColumnTwo('crud','option','optionList',239.1)"
            @saveColumn="saveColumnTwo('crud','option','optionList',239.1)"
            :page.sync="page">
          <template slot-scope="scope" slot="menuLeft">
            <el-button type="warning"
                       icon="el-icon-plus"
                       size="small"
                       @click="outExport"
            >导出
            </el-button>
          </template>
        </avue-crud>
      </basic-container>
    </div>
  </div>
</template>

<script>

import {getListDetailed} from "@/api/accountBalance/index.js";
import {getToken} from "@/util/auth";

export default {
  name: "index",
  props:{
    detailData: Object,
  },
  data() {
    return {
      loading: false,
      show: true,
      search: {},
      form: {},
      detailData: {},
      dataList: [],
      page: {
        pageSize: 20,
        currentPage: 1,
        total: 0,
        pageSizes: [10, 20, 30, 40, 50, 100, 200, 300, 400, 500]
      },
      key: 0,
      option: {},
      optionList: {
        viewBtn: false,
        editBtn: false,
        delBtn: false,
        addBtn: false,
        index: true,
        span: 8,
        border: true,
        height: "auto",
        searchMenuPosition: "right",
        align: "center",
        menuWidth: 140,
        searchSpan: 8,
        searchIcon: true,
        searchIndex: 2,
        highlightCurrentRow: true,
        dialogWidth: "70%",
        menu: false,
        column: [{
          label: '销售单号',
          prop: 'accSysNo',
          search: true,
          overHidden: true,
        }, {
          label: '数量',
          prop: 'quantity',
          overHidden: true,
        }, {
          label: '金额',
          prop: 'amount',
          search: true,
          overHidden: true,
        }, {
          label: '科目代码',
          prop: 'subjectNumber',
          overHidden: true,
        }, {
          label: '开户银行',
          prop: 'accountBank',
          overHidden: true,
        }, {
          label: '银行户头',
          prop: 'accountName',
          overHidden: true,
        }, {
          label: '银行账号',
          prop: 'accountNo',
          overHidden: true,
        }, {
          label: '溢付款',
          prop: 'overPayment',
          overHidden: true,
        }, {
          label: '使用溢付款',
          prop: 'caseOverPayment',
          overHidden: true,
        }]
      }
    }
  },
  async created() {
    this.option = await this.getColumnData(this.getColumnName(239.1), this.optionList);
    this.key++
    let i = 0;
    this.option.column.forEach(item => {
      if (item.search) i++
    })
    if (i % 3 !== 0) {
      const num = 3 - Number(i % 3)
      this.option.searchMenuSpan = num * 8;
      this.option.searchMenuPosition = "right";
    }
  },
  methods: {
    //导出
    outExport() {
      this.$confirm('是否导出列表？', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        let queryParams = this.search
        const routeData = this.$router.resolve({
          path: '/api/trade-finance/acc/SelAccItemExport',      //跳转目标窗口的地址
          query: {
            'Blade-Auth': getToken(),
            ...queryParams,//括号内是要传递给新窗口的参数
            billType: "收费",
            chargePay:this.detailData.chargePay,
            createDateList:this.detailData.createDateList,
            corpId:this.detailData.corpId
          }
        })
        window.open(routeData.href.slice(1, routeData.href.length));
      }).catch(() => {
        this.$message({
          type: 'info',
          message: '已取消' //
        });
      })
    },
    backToList() {
      this.$emit("goBack");
    },
    //刷新
    refreshChange() {
      this.onLoad(this.page, this.search)
    },
    searchChange(params, done) {
      done();
      this.onLoad(this.page, params)
    },
    onLoad(page, params = {}) {
      params = {
        ...params,
        current: page.currentPage,
        size: page.pageSize,
        billType: "收费",
        corpId:this.detailData.corpId,
        chargePay:this.detailData.chargePay,
        createDateList:this.detailData.createDateList,
      }
      this.loading = true
      getListDetailed(params).then(res => {
        this.dataList = res.data.data.records
        this.page.total = res.data.data.total
        this.loading = false
      }).finally(() => {
        this.loading = false
      })
    },

//自定义列保存
    async saveColumnTwo(ref, option, optionBack, code) {
      /**
       * 已定义全局方法，直接使用，saveColumnData保存列数据方法,参数传值(表格名称，当前表格的option数据)
       * 已定义全局方法，直接使用，getColumnName方法用来获取枚举值，参数根据自己定义的code值获取中文名
       * 一定要执行异步操作，要等接口成功返回，才能执行下一行代码
       */
      const inSave = await this.saveColumnData(this.getColumnName(code), this[option]);
      if (inSave) {
        this.$message.success("保存成功");
        //关闭窗口
        this.$refs[ref].$refs.dialogColumn.columnBox = false;
      }
    },
//自定义列重置
    async resetColumnTwo(ref, option, optionBack, code) {
      this[option] = this[optionBack];
      const inSave = await this.delColumnData(this.getColumnName(code), this[optionBack]);
      if (inSave) {
        this.$message.success("重置成功");
        this.$refs[ref].$refs.dialogColumn.columnBox = false;
      }
    }
  }
}
</script>

<style scoped>

</style>
