<template>
  <div>
    <!-- 分类 -->
    <div class="classify clearfix">
      <a-button :type="!type ? 'primary' : ''">全部</a-button>
      <a-button
        :type="item.code === type ? 'primary' : ''"
        v-for="item in welfareType"
        :key="item.code"
      >
        {{ item.name }}
      </a-button>
      <div class="save-btn">
        <a-button type="danger" @click="addNew">
          <Icon name="ssiadd" :size="14" />新增
        </a-button>
        <a-button type="primary">
          <Icon name="ssidownload" :size="14" />保存
        </a-button>
      </div>
    </div>
    <!-- table -->
    <a-table
      :columns="columns"
      :data-source="dataList"
      row-key="coverageCode"
      :scroll="{ x: true }"
      :pagination="pagination"
      :expanded-row-keys.sync="expandedRowKeys"
      @change="onWelfareChange"
      @expand="handleExpand"
    >
      <template slot="operation" slot-scope="text, record, index">
        <a-button
          v-if="record.isEdit"
          type="link"
          @click.stop="saveEditData(record)"
        >
          保存
        </a-button>
        <a-button v-else type="link" @click.stop="editData(record, index)">
          修改
        </a-button>
        <a-button type="link" class="success">新增</a-button>
        <a-popconfirm
          title="你确定要关闭吗？"
          ok-text="确定"
          cancel-text="取消"
          @confirm="deleteData(record, index)"
        >
          <a-button type="link" class="danger">删除</a-button>
        </a-popconfirm>
      </template>
      <template slot="expandedRowRender" slot-scope="record">
        <benefits :coverageForm="record" />
      </template>
    </a-table>
  </div>
</template>

<script>
import benefits from "../benefits";
export default {
  props: {
    coverageForm: {
      type: Object,
      required: true,
    },
  },
  components: {
    benefits,
  },
  data() {
    const columns = [
      {
        title: "责任项目",
        dataIndex: "coverageCode",
        width: 180,
        customRender: (val, row) => {
          if (row.isEdit) {
            return (
              <a-select
                v-model={row.coverageCode}
                placeholder="请选择责任项目"
                show-search
                allow-clear
                v-on:filterOption={this.filterCode}
              >
                {this.coverageCode.map((item) => {
                  return (
                    <a-select-option value={item.coverageCode}>
                      {item.coverageDesc}
                    </a-select-option>
                  );
                })}
              </a-select>
            );
          }
          return val;
        },
      },
      { title: "责任项目列表", dataIndex: "patientName", width: 120 },
      {
        title: "是否直付",
        dataIndex: "isdirect",
        width: 180,
        customRender: (val, row) => {
          if (row.isEdit) {
            return (
              <a-radio-group
                v-model={row.isdirect}
                default-value={row.isdirect}
                button-style="solid"
              >
                <a-radio-button value="Y"> 是 </a-radio-button>
                <a-radio-button class="mar-left10" value="N">
                  否
                </a-radio-button>
              </a-radio-group>
            );
          }
          return val;
        },
      },
      { title: "单位", dataIndex: "sex", width: 80 },
      { title: "年限额", dataIndex: "payorName", width: 180 },
      { title: "剩余额度（￥）", dataIndex: "policyNo", width: 190 },
      { title: "次限额（￥）", dataIndex: "startDate", width: 180 },
      //   { title: "次免赔额（￥）", dataIndex: "endDate", width: 180 },
      //   { title: "自付比例", dataIndex: "endDate", width: 180 },
      //   { title: "备注", dataIndex: "endDate", width: 180 },
      {
        title: "操作",
        key: "operation",
        width: "175px",
        fixed: "right",
        scopedSlots: { customRender: "operation" },
      },
    ];
    return {
      columns,
      dataList: [{ coverageCode: 22 }],
      expandedRowKeys: [],
      type: "",
      welfareType: [],
      pager: {
        pageNum: 1,
        pageSize: 10,
      },
      total: 0,
      coverageCode: [],
    };
  },
  watch: {
    coverageForm: {
      deep: true,
      handler: function () {
        this.type = "";
        this._getCoverageList();
      },
    },
  },
  mounted() {
    this._getSpecialtyCode();
    // this._getCoverageList();
  },
  computed: {
    pagination() {
      return this.initPageConfig(
        { ...this.pager, total: this.total },
        this.onWelfareSizeChange
      );
    },
  },
  methods: {
    addNew() {
      const item = { isEdit: true, isNew: true };
      this.pager.pageSize++;
      this._getCoverageCode(); // 获取责任项目码表
      this.dataList.unshift(item);
    },
    editData(record) {
      this._getCoverageCode(); // 获取责任项目码表
      const { coverageCode } = record;
      const index = this.expandedRowKeys.indexOf(coverageCode);
      if (index > -1) {
        this.expandedRowKeys.splice(index, 1);
      }
      this.$set(record, "isEdit", true);
    },
    saveEditData(record) {
      record.isEdit = undefined;
    },
    deleteData(record, index) {
      if (record.isNew) {
        this.dataList.splice(index, 1);
        return true;
      }
      this.dataList.splice(index, 1);
    },
    initPageConfig(pager, sizeChange) {
      const { pageNum, pageSize, total } = pager;
      const pages = Math.ceil(total / pageSize);
      return {
        current: pageNum,
        pageSize,
        size: "large",
        position: "bottom",
        align: "right",
        total: this.total,
        hideOnSinglePage: false,
        itemRender: (current, type, originalElement) => {
          if (type === "prev") {
            originalElement.children = undefined;
            originalElement.text = "上一页";
          }
          if (type === "page") {
            if (current !== pageNum) {
              return undefined;
            }
            return (
              <p>
                <span class="current-page">{current}</span> / {pages}
              </p>
            );
          }
          if (type === "next") {
            originalElement.children = undefined;
            originalElement.text = "下一页";
            return (
              <div>
                {originalElement}
                <a-input-number
                  onblur={sizeChange}
                  class="size-change"
                ></a-input-number>
              </div>
            );
          }
          return originalElement;
        },
      };
    },
    onWelfareChange(pager) {
      const { current } = pager;
      // console.log(pager);
      this.pager.pageNum = current;
      // this._getCustomerList();
    },
    onWelfareSizeChange(e) {
      e && e.stopPropagation();
      const val = e.target.value * 1;
      if (!val || val < 0) {
        return false;
      }
      this.pager.pageSize = val;
    },
    // 选择框筛选
    filterCode(input, option) {
      return (
        option.componentOptions.children[0].text
          .toLowerCase()
          .indexOf(input.toLowerCase()) >= 0
      );
    },
    handleExpand(expended, record) {
      console.log(expended);
      if (record.isEdit && expended) {
        console.log(this.expandedRowKeys);
        return false;
      }
    },
    _getSpecialtyCode() {
      this.$apis.GETSPECIALTYLIST().then((res) => {
        this.welfareType = res.content || [];
      });
    },
    _getCoverageList() {
      const { corpCode, payorCode, planCode } = this.coverageForm;
      this.$apis
        .GETCOVERAGELIST({
          corpCode,
          payorCode,
          planCode,
          specialtyCode: this.type,
        })
        .then((res) => {
          this.dataList = res.content || [];
        });
    },
    _getCoverageCode() {
      if (this.coverageCode && this.coverageCode.length) {
        return true;
      }
      this.$apis.GETCOVERAGECODE().then((res) => {
        this.coverageCode = res.content || [];
      });
    },
  },
};
</script>

<style lang="less" scoped>
.none-label {
  text-align: right;
}
.classify {
  .pa(10, 20, 10, 20);
  .mg-t(30);
  .mg-b(10);
  background-color: #f8fafb;
  .ant-btn:not(:first-child) {
    .mg-l(30);
  }
  .save-btn {
    float: right;
  }
}
.icon-class {
  .mg-r(10);
}
</style>
