<template>
  <div class="white_bg burt-container">
    <Goback title="回款详情" />
    <!-- form -->
    <a-form-model ref="form" layout="vertical" :model="form">
      <a-row :gutter="30">
        <a-col :lg="6" :sm="12">
          <a-form-model-item label="保险公司">
            <a-select v-model="form.payorCode" placeholder="请选择保险公司" allow-clear :disabled="!isEdit">
              <a-select-option v-for="item in companyOptions" :key="item.id" :value="item.payorCode">
                {{ item.longName }}
              </a-select-option>
            </a-select>
          </a-form-model-item>
        </a-col>
        <a-col :lg="5" :sm="12">
          <a-form-model-item label="回款日期">
            <a-date-picker format="YYYY-MM-DD" format-value="YYYY-MM-DD 00:00:00"  v-model="form.backDate" placeholder="选择日期" allow-clear :disabled="!isEdit" />
          </a-form-model-item>
        </a-col>
        <a-col :lg="5" :sm="12">
          <a-form-model-item label="回款金额(人民币)">
            <a-input type="number" v-model="form.backAmountCny"  placeholder="请输入金额" allow-clear :disabled="!isEdit" />
          </a-form-model-item>
        </a-col>
        <a-col :lg="5" :sm="12">
          <a-form-model-item label="回款金额(美元)">
            <a-input type="number" v-model="form.backAmountUsd" placeholder="请输入金额" allow-clear :disabled="!isEdit" />
          </a-form-model-item>
        </a-col>
        <a-col :lg="6" :sm="12">
          <a-form-model-item label="汇率差">
            <a-input v-model="form.backExchangeRate" placeholder="请输入金额" allow-clear :disabled="!isEdit" />
          </a-form-model-item>
        </a-col>
        <a-col :lg="6" :sm="12">
          <a-form-model-item label="上传银行付款凭证">
            <a-upload name="file" :multiple="false" :showUploadList="true" :disabled="!isEdit"
              :fileList="fileList"
              :customRequest="(file)=>uploadFile(file)"
              :beforeUpload="()=>beforeUpload()"
              :remove="(file)=>removeFile(file)">
              <a-button type="primary"> <Icon name="ssiupload" :size="18" />上传文件 </a-button>
            </a-upload>
          </a-form-model-item>
        </a-col>
        <a-col :md="24" :lg="12" class="none-label" v-if="isEdit">
          <a-form-model-item label="button">
            <a-button class="mar-left10" type="primary" @click="addNewEvt">
              <Icon :name="backMoneyNo?'ssibaocun':'ssiadd'" :size="14" />{{backMoneyNo?'保存回款':'新建回款'}}
            </a-button>
          </a-form-model-item>
        </a-col>
        <a-col :md="24" class="none-label" v-if="isEdit">
          <a-form-model-item label="button">
            <!-- <a-button class="mar-left10" type="primary" @click="handlerSearch">
              <Icon name="ssisearch_active" :size="14" />查询
            </a-button> -->
            <a-button class="mar-left10" type="primary" @click="addNewEOB">
              <Icon :name="isEditNewEOB?'ssibaocun':'ssiadd'" :size="14" />{{isEditNewEOB? '保存EOB': '添加EOB'}}
            </a-button>
          </a-form-model-item>
        </a-col>
      </a-row>
    </a-form-model>
    <!-- table -->
    <a-table :columns="columns" :data-source="dataList" :scroll="{ x: true }" :pagination="false"
      :row-selection="isEditNewEOB? { selectedRowKeys: selectedRowKeys, onChange: onSelectChange }: null">
      <template slot="eobNo" slot-scope="text,record">
        <a @click="toEOBDetail(record)">{{text}}</a>
      </template>
      <template slot="eobSts" slot-scope="text">
        {{text | formatEOBStatus}}
      </template>
      <template slot="eobBackDate" slot-scope="text">
        {{text?moment(text).format('YYYY-MM-DD'):''}}
      </template>
      <template slot="operation" slot-scope="text, record">
        <a-button type="link" @click.stop="editEvt(record)">修改</a-button>
        <!-- <a-button v-if="record.backMoneyNo" type="link" class="danger" @click.stop="delRecord(index)">删除</a-button> -->
      </template>
    </a-table>
    <BurtPagination :pagination="pagination" @pageChange="pageChange" />

    <a-modal title="编辑" :visible="dialogShow" width="700px" :maskClosable="false"
      okText="确定" cancelText="取消"
      @ok="handleEditOK" @cancel="dialogShow = false">
      <a-form-model ref="editForm" :model="editFormObj" :rules="editRules">
        <a-row :gutter="30">
          <a-col :lg="12" :sm="24">
            <a-form-model-item label="EOB状态" prop="eobSts">
              <a-select v-model="editFormObj.eobSts" placeholder="请选择状态" allow-clear>
                <a-select-option v-for="(item,i) in EOBStatusOptions" :key="i" :value="item.value">{{item.name}}</a-select-option>
              </a-select>
            </a-form-model-item>
          </a-col>
          <a-col :lg="12" :sm="24">
            <a-form-model-item label="EOB核销时间" prop="eobBackDate">
              <a-date-picker format="YYYY年MM月DD日" v-model="editFormObj.eobBackDate" placeholder="选择日期" />
            </a-form-model-item>
          </a-col>
          <a-col :lg="12" :xs="24">
            <a-form-model-item label="EOB回款(人民币)" prop="eobBackMoneyCny">
              <a-input v-model.trim="editFormObj.eobBackMoneyCny" placeholder="EOB回款(人民币)" />
            </a-form-model-item>
          </a-col>
          <a-col :lg="12" :xs="24">
            <a-form-model-item label="EOB回款(美元)" prop="eobBackMoneyUsd">
              <a-input v-model.trim="editFormObj.eobBackMoneyUsd" placeholder="EOB回款(美元)" />
            </a-form-model-item>
          </a-col>
        </a-row>
      </a-form-model>
    </a-modal>
  </div>
</template>

<script>
import Goback from "@/components/CUSTOMER/goback";
import BurtPagination from "@/components/CUSTOMER/pagation";
import {EOBStatusOptions} from '@/utils/utilsdictOptions.js'
import moment from "moment";
import mixins from "@/mixins";
export default {
  data() {
    return {
      isEdit: false,
      EOBStatusOptions,
      dialogShow: false,
      form: {
        payorCode: '',
        backDate: null,
        backAmountCny: '',
        backAmountUsd: '',
        backExchangeRate: ''
      },
      fileList: [], // 上传文件列表
      dataList: [],
      backEobList: [], // eob回款列表
      isEditNewEOB: false, //是否在新建回款
      companyOptions: [], //保险公司
      pagination: {
        pageNum: 1,
        pageSize: 10,
        total: 0,
      },
      selectedRowKeys: [], // Check here to configure the default column
      backMoneyNo: '',
      editFormObj: {
        id: '',
        eobNo: '',
        eobSts: '',
        eobBackDate: null,
        eobBackMoneyCny: '',
        eobBackMoneyUsd: '',
      },
      editRules: {
        backAmountUsd: [{ required: true, message: "请输入", trigger: "blur" }],
        backAmount: [{ required: true, message: "请输入", trigger: "blur" }],
      },
    };
  },
  mixins: [mixins],
  components: {
    Goback,
    BurtPagination,
  },
  computed: {
    columns() {
        const base = [
            { title: "EOB编号", dataIndex: "eobNo", scopedSlots: { customRender: 'eobNo' }, ellipsis: true, width: 150 },
            { title: "EOB名称", dataIndex: "eobName", ellipsis: true, width: 195 },
            { title: "核销时间", dataIndex: "eobBackDate", ellipsis: true, width: 110, scopedSlots: { customRender: "eobBackDate" }, },
            { title: "保险公司", dataIndex: "payorName", ellipsis: true, width: 110 },
            { title: "EOB状态", dataIndex: "eobSts", ellipsis: true, width: 110, scopedSlots: { customRender: "eobSts" } },
            { title: "EOB赔付金额(人民币)", dataIndex: "eobAmountCny", ellipsis: true, width: 190,},
            { title: "EOB赔付金额(美元)", dataIndex: "eobAmountUsd", ellipsis: true, width: 190,},
            { title: "EOB回款金额(人民币)", dataIndex: "eobBackMoneyCny", ellipsis: true, width: 190,},
            { title: "EOB回款金额(美元)", dataIndex: "eobBackMoneyUsd", ellipsis: true, width: 190,},
            { title: "汇率差", dataIndex: "backExchangeRate", ellipsis: true, width: 110 },
        ];
        if(this.backMoneyNo && !this.isEditNewEOB && this.isEdit){ // 编辑状态下已经保存的数据才可进行操作
            return base.concat([
                { title: "操作", dataIndex: "operation", scopedSlots: { customRender: "operation" },fixed: "right", width: "170px", align: "center"},
            ])
        }
        return base
    }
  },
  created(){
    const { backMoneyNo, isEdit } = this.$route.query
    this.backMoneyNo = backMoneyNo;
    this.isEdit = isEdit;
    this._getCompanyOptions();
    if(backMoneyNo){
      const backMoneyDataDetail = JSON.parse(localStorage.getItem('backMoneyDataDetail') || '{}');
      this.form = backMoneyDataDetail
      this.form.backDate = this.form.backDate ? moment(this.form.backDate).format('YYYY-MM-DD 00:00:00') : null
      
      // 如果有上传附件则显示列表
      if(backMoneyDataDetail.fileList) {
        this.fileList = backMoneyDataDetail.fileList.map(d => {
          const file = {
            uid: Math.random()*10000,
            name: d.fileName,
            status: 'done',
            url: d.fileUrl,
          }
          return file
        })
      }
      
      this.getData();
    }
  },
  methods: {
    moment,
    // 查看的超链点击时链接已经生成好了,所以要点击的时候才set值才是对应的,不然存的都是最后一条数据
    setData(record){
      localStorage.setItem('EobDataDetail', JSON.stringify(record));
    },
    // EOB添加去查看的超链
    toEOBDetail(record){
      const { eobNo } = record;
      localStorage.setItem('EobDataDetail', JSON.stringify(record));
      this.$router.push({
        path: '/verification/detail',
        query: {
          eobNo
        }
      })
    },
    onSelectChange(selectedRowKeys) {
      let arr = [];
      for(let i=0; i<selectedRowKeys.length; i++){
        let idx = selectedRowKeys[i];
        if(this.dataList[idx].backMoneyNo){
          this.$msg.destroy();
          this.$message.warning('回款编号已存在')
        }else{
          arr.push(idx);
        }
      }
      this.selectedRowKeys = arr;
    },
    pageChange(pager) {
      this.pagination = {
        ...this.pagination,
        ...pager
      }
      if(this.isEditNewEOB) { // 点击添加EOB之后 分页数据查询就应该调EOB数据
        this._getNewEOBList()
        return true;
      }
      this.getData();
    },
    // 获取保险公司下拉选项
    _getCompanyOptions() {
      this.$apis.GETCOMPANYOPTIONS().then((res) => {
        this.companyOptions = res.content || [];
      });
    },
    handlerSearch() {
      this.pagination.pageNum = 1;
      this.getData();
    },
    getData() {
      this.$apis.QUERYBACKEOBLIST({
        pageNum: this.pagination.pageNum,
        pageSize: this.pagination.pageSize,
        backMoneyNo: this.backMoneyNo
       })
      .then((res) => {
        if (res.returnCode == "0000") {
          let content = res.content || {};
          this.pagination.total = content.total || 0;
          this.dataList = content.list || [];
          this.backEobList = this.dataList.map(d => d)
        } else {
          this.$message.error(res.returnMsg);
        }
      });
    },
    //添加EOB
    addNewEOB(){
      this.isEditNewEOB = !this.isEditNewEOB;
      if(!this.isEditNewEOB){ //保存
        this.addNewEvt()
        .then(()=>{
          this.isEditNewEOB = false;
        })
      }else{ //查询所有未加入的账单
        this.pagination.pageNum = 1;
        this._getNewEOBList()
      }
    },
    _getNewEOBList(){
        this.$apis.QUERYEOBINFOLIST({
          pageNum: this.pagination.pageNum,
          pageSize: this.pagination.pageSize
        })
        .then((res) => {
          if (res.returnCode == "0000") {
            this.selectedRowKeys = [];
            let content = res.content || {};
            this.pagination.total = content.total || 0;
            this.dataList = content.list || [];
          } else {
            this.$message.error(res.returnMsg);
          }
        });
    },
     //新建/保存回款
    addNewEvt(){
      return new Promise((resolve,reject)=>{
        if(!this.form.backAmountCny){
            this.$message.warning("请输入回款金额");
            reject();
            return;
        }

        let backMoneyEobList = [];
        if(!this.isEditNewEOB) {
          backMoneyEobList = this.backEobList
        } else {
          this.dataList.forEach((item,index)=>{
            if(this.selectedRowKeys.indexOf(index)!=-1){
                backMoneyEobList.push({
                    id: item.id,
                    eobNo: item.eobNo,
                    eobSts: item.eobSts,
                    eobBackDate: item.eobBackDate?moment(item.eobBackDate).format('YYYY-MM-DD 00:00:00'):'',
                    eobBackMoneyCny: item.eobBackMoneyCny,
                    eobBackMoneyUsd: item.eobBackMoneyUsd,
                })
            }
          })
        }   
        
        const formData = {
            ...this.form,
            backMoneyEobList: backMoneyEobList,
            backDate: this.form.backDate? moment(this.form.backDate).format('YYYY-MM-DD 00:00:00'):'',
            backMoneyNo: this.backMoneyNo, //回款编号
        }

        // 上传附件格式转换
        formData.fileList = this.fileList.map(d => {
          const file = {
            fileName: d.name,
            fileUrl: d.url
          }
          return file
        })

        this.$apis.SAVEBACKMONEY(formData)
        .then((res) => {
          if (res.returnCode == "0000") {
            this.backMoneyNo = res.content;
            this.$message.success("成功");
            this.selectedRowKeys = [];
            this.getData();
  
            // this.$router.go(-1);
            resolve();
          } else {
            this.$message.error(res.returnMsg);
            reject();
          }
        });
      })
    },
    //删除记录
    delRecord(index) {
      this.$modal.confirm({
        title: "删除",
        content: "确定删除该条记录?",
        okText: "确认",
        cancelText: "取消",
        onOk: () => {
          this.$apis.DELETEBACKMONEY({
            backMoneyNo: this.dataList[index].backMoneyNo,
          })
          .then((res) => {
            if (res.returnCode == "0000") {
              this.$message.success("删除成功");
              this.dataList.splice(index, 1);
            } else {
              this.$message.error(res.returnMsg);
            }
          });
        },
        onCancel: () => {},
      });
    },
    editEvt(record) {
      this.editFormObj = {
        id: record.id,
        eobNo: record.eobNo || "",
        eobSts: record.eobSts || "",
        eobBackDate: record.eobBackDate?moment(record.eobBackDate).format('YYYY-MM-DD 00:00:00'):"",
        eobBackMoneyCny: record.eobBackMoneyCny || "",
        eobBackMoneyUsd: record.eobBackMoneyUsd || "",
      };
      this.dialogShow = true;
    },
    //编辑保存
    handleEditOK() {
      this.$refs.editForm.validate((valid) => {
        if (valid) {
          let editFormObj = {
            ...this.editFormObj,
            eobBackDate: this.editFormObj.eobBackDate?moment(this.editFormObj.eobBackDate).format('YYYY-MM-DD 00:00:00'):"",
          }
          this.$apis.SAVEBACKMONEY({
            ...this.form,
            backMoneyEobList: [editFormObj],
            backDate: this.form.backDate? moment(this.form.backDate).format('YYYY-MM-DD 00:00:00'):'',
            backMoneyNo: this.backMoneyNo, //回款编号
          })
          .then((res) => {
            if (res.returnCode == "0000") {
              this.$message.success("编辑成功");
              this.dialogShow = false;
              this.getData();
            } else {
              this.$message.error(res.returnMsg);
            }
          });
        }
      });
    },

    /* ======== 上传区域 ======== */
    // 上传之前
    beforeUpload(){
      const len = this.fileList.length;
      if(len >= 5){
        this.$message.warning('不能超过5个文件');
        return false;
      }
      return true;
    },
    // 删除文件
    removeFile(file){
      let index;
      this.fileList.forEach((item, i) => {
        if (item.uid == file.uid) {
          index = i;
        }
      });
      this.fileList.splice(index, 1);
      return true;
    },
    // 上传文件
    uploadFile(fileData){
      let formData = new FormData();
      formData.append("file", fileData.file);
      this.$apis.UPLOADIMG(formData)
      .then((res)=>{
        fileData.onSuccess();
        let tmp =  {
          uid: Math.random()*10000,
          name: res.original,
          status: 'done',
          url: res.url,
        }
        this.fileList.push(tmp);

        this.$forceUpdate();
      })
    }
  },
};
</script>

<style lang="less" scoped>
.none-label {
  text-align: right;
  .ant-form-item-label {
    opacity: 0;
  }
}
.ant-btn .icon-class {
  .mg-r(10);
}
.success.ant-btn-link {
  color: #4cd964;
}
.danger.ant-btn-link {
  color: #ff3b30;
}
</style>