<template>
  <div class="white_bg burt-container">
    <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 show-search v-model="form.mrnNo" :disabled="!!id"
              placeholder="病历号"  :filter-option="false"
              @search="getPatienList"
              @change="patienListChange">
              <a-select-option v-for="item in patientList" :key="item.id" :value="item.mrnNo">{{item.mrnNo}}</a-select-option>
            </a-select>
          </a-form-model-item>
        </a-col>
        <a-col :lg="6" :sm="12">
          <a-form-model-item label="客户姓名">
            <a-input v-model="form.patientName" placeholder="请输入客户姓名" allow-clear :disabled="!!id"/>
          </a-form-model-item>
        </a-col>
        <a-col :lg="6" :sm="12">
          <a-form-model-item label="保险公司">
            <a-select v-model="form.payorCode" placeholder="请选择保险公司" :disabled="!!id"
              @change="_getPatientPolicyList">
              <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="6" :sm="12">
          <a-form-model-item label="保单号码">
            <a-select v-model="form.policyNo" placeholder="请选择保单号码" allowClear :disabled="!!id">
              <a-select-option v-for="item in PolicyOptions" :key="item.id" :value="item.policyNo">
                {{ item.policyNo }}
              </a-select-option>
            </a-select>
          </a-form-model-item>
        </a-col>
        <a-col :lg="6" :sm="12">
          <a-form-model-item label="主治医生">
            <a-select v-model="form.doctorCode" placeholder="请选择主治医生" :disabled="!!id"
              showSearch :filter-option="filterOption" optionFilterProp="label">
              <a-select-option v-for="item in doctorOptions" :key="item.doctorCode" :value="item.doctorCode"
                :label="item.doctorDesc+item.doctorCode">
                {{ item.doctorDesc }}
              </a-select-option>
            </a-select>
          </a-form-model-item>
        </a-col>
        <a-col :lg="6" :sm="12">
          <a-form-model-item label="预授权项目">
            <a-select v-model="form.authProject" placeholder="请选择预授权项目" allowClear :disabled="!!id">
              <a-select-option v-for="(item) in ProjectList" :key="item.id" :value="item.refcd">{{item.descCh}}</a-select-option>
            </a-select>
          </a-form-model-item>
        </a-col>
        <a-col :lg="6" :sm="12">
          <a-form-model-item label="预计治疗时间">
            <a-date-picker allow-clear v-model="form.authorDate" placeholder="请选择预计治疗时间" :disabled="!!id"
              value-format="YYYY-MM-DD 00:00:00" />
          </a-form-model-item>
        </a-col>
        <a-col :lg="6" :sm="12">
          <a-form-model-item label="预计治疗费用">
            <div class="flex input-div">
              <a-input v-model="form.authorAmount" placeholder="请输入费用" type="number" :min="0" :disabled="!!id" />
              <a-select v-model="form.authorAmountUnit" style="width:90px;" :disabled="!!id">
                <a-select-option v-for="(item) in MoneyUnitOptions" :key="item.value" :value="item.value">{{item.name}}</a-select-option>
              </a-select>
            </div>
          </a-form-model-item>
        </a-col>
        <a-col :lg="6" :sm="12">
          <a-form-model-item label="初诊日期">
            <a-date-picker allow-clear v-model="form.firstVisitDate" placeholder="请选择初诊日期" :disabled="!!id"
              value-format="YYYY-MM-DD 00:00:00" />
          </a-form-model-item>
        </a-col>
        <a-col :lg="6" :sm="12">
          <a-form-model-item label="治疗目的">
            <a-select v-model="form.purpose" placeholder="请选择治疗目的" :disabled="!!id">
              <a-select-option value="01">疾病</a-select-option>
              <a-select-option value="02">事故</a-select-option>
            </a-select>
          </a-form-model-item>
        </a-col>
        <a-col :lg="6" :sm="12">
          <a-form-model-item label="治疗方案">
            <a-select v-model="form.treatmentPlan" placeholder="请选择治疗方案" :disabled="!!id">
              <a-select-option v-for="(item,i) in treatmentPlanList" :key="i" :value="item.refcd">{{item.descCh}}</a-select-option>
            </a-select>
          </a-form-model-item>
        </a-col>
        <a-col :lg="6" :sm="12">
          <a-form-model-item label="诊断">
            <a-input v-model="form.diagnosis" placeholder="请输入诊断" allow-clear :disabled="!!id"/>
          </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="!!id"
              :fileList="form.medicalRecord"
              :customRequest="(file)=>uploadFile(file, 1)"
              :beforeUpload="()=>beforeUpload(1)"
              :remove="(file)=>removeFile(file, 1)">
              <a-button type="primary"> <Icon name="ssiupload" :size="18" />上传病历 </a-button>
            </a-upload>
          </a-form-model-item>
        </a-col>
      </a-row>
      <!--费用明细-->
      <a-row>
        <FeeDetail :id="id" ref="feeDetail" :ProjectList="ProjectList" @authorizeItemVoListChange="authorizeItemVoListChange" />
      </a-row>
      <a-row :gutter="30" class="footer-body">
        <a-col :lg="6" :sm="12">
          <a-form-model-item label="申请状态">
            <a-select v-model="form.authorStatus" placeholder="请选择申请状态">
              <a-select-option v-for="(item) in ApplyStatusOptions" :key="item.value" :value="item.value">{{item.name}}</a-select-option>
            </a-select>
          </a-form-model-item>
        </a-col>
        <a-col :lg="6" :sm="12">
          <a-form-model-item label="批准次数/金额">
            <a-input v-model="form.approvalAmount" placeholder="请输入批准次数/金额" allow-clear />
          </a-form-model-item>
        </a-col>
        <a-col :lg="6" :sm="12">
          <a-form-model-item label="拒绝原因">
            <a-select v-model="form.rejectReason" placeholder="请选择拒绝原因">
              <a-select-option v-for="(item,i) in rejectReason" :key="i" :value="item.refcd">{{item.descCh}}</a-select-option>
            </a-select>
          </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"
              :fileList="form.supplementalResult"
              :customRequest="(file)=>uploadFile(file, 2)"
              :beforeUpload="()=>beforeUpload(2)"
              :remove="(file)=>removeFile(file, 2)">
              <a-button type="primary"> <Icon name="ssiupload" :size="18" />文件上传</a-button>
            </a-upload>
          </a-form-model-item>
        </a-col>
      </a-row>
      <a-row :gutter="30">
        <a-col :lg="6" :sm="12">
          <a-form-model-item label="预授权开始日期">
            <a-date-picker allow-clear v-model="form.startDate" placeholder="请选择开始日期"
              value-format="YYYY-MM-DD 00:00:00" />
          </a-form-model-item>
        </a-col>
        <a-col :lg="6" :sm="12">
          <a-form-model-item label="预授权截止日期">
            <a-date-picker allow-clear v-model="form.endDate" placeholder="请选择截止日期"
              value-format="YYYY-MM-DD 00:00:00" />
          </a-form-model-item>
        </a-col>
        <a-col :lg="12" :sm="12" class="none-label">
          <a-form-model-item label="button">
            <a-button type="primary" @click="saveEvt" :loading="loading">
              <Icon :name="id?'ssibaocun':'ssiadd'" :size="14" />{{id? '保存预授权': '新建预授权'}}
            </a-button>
            <a-button type="primary" class="mar-left10" v-if="id" :loading="loading2"
              @click="sendEmailEvt">
              <Icon name="ssiemail" :size="14" />邮件发送
            </a-button>
            <a-button type="primary" class="mar-left10" v-if="id"
              @click="previewEmailEvt">
              <Icon name="ssiemail" :size="14" />预览邮件
            </a-button>
          </a-form-model-item>
        </a-col>
      </a-row>
    </a-form-model>

    <a-modal title="邮件预览" :visible="previewModalShow" width="80%" :maskClosable="false"
      :footer="null" @cancel="previewModalShow = false">
      <div class="content-div" v-html="previewContent"></div>
    </a-modal>
  </div>
</template>

<script>
import {MoneyUnitOptions,ApplyStatusOptions} from '@/utils/utilsdictOptions';
import FeeDetail from './components/feeDetail.vue';
import debounce from 'lodash/debounce';
import moment from 'moment';
import { mapState } from "vuex"
export default{
  data(){
    this.lastFetchId = 0;
    this.getPatienList = debounce(this.getPatienList, 800);
    return{
      loading: false,
      loading2: false,
      MoneyUnitOptions,
      ApplyStatusOptions,
      id: '', //预授权id
      form: {
        mrnNo: '',
        patientId: '',
        payorCode: '',
        policyNo: '',
        firstEnrollmentTime: '',
        authorAmountUnit: '01',
        medicalRecord: [], //病历资料
        supplementalResult: [], //补充材料
        authorizeItemVoList: [], //预授权费用数据
      },
      fetching: false,
      patientList: [], //远程搜到的客户信息
      companyOptions: [],  //保险公司
      PolicyOptions: [],  //保单号码
      doctorOptions: [], //医生列表
      ProjectList: [], //预授权项目
      rejectReason: [], //拒绝原因
      treatmentPlanList: [], //治疗方案
      previewContent: '', //预览邮件内容
      previewModalShow: false, //预览邮件弹窗
    }
  },
  components: {
    FeeDetail,
  },
  computed: {
    ...mapState({
      userInfo: (state) => state.common.userInfo
    })
  },
  created(){
    this.id = this.$route.query.id || "";
    this.getRefcdByRefgrp();
    this._getDoctorListNoPage();//获取看诊医生下拉选项
    if(this.id){
      this.getDetail();
    }
  },
  methods: {
    init(){
      this.form = {
        mrnNo: '',
        patientId: '',
        payorCode: '',
        policyNo: '',
        firstEnrollmentTime: '',
        authorAmountUnit: '01',
        medicalRecord: [], //病历资料
        supplementalResult: [], //补充材料
        authorizeItemVoList: [], //预授权费用数据
      }
    },
    filterOption(val, option){
      let item = option.componentOptions.propsData; //propsData里面可以可以拿到lebel和value的值
      return item.label.toLowerCase().indexOf(val.toLowerCase()) >= 0
    },
    //预授权费用数据变更
    authorizeItemVoListChange(data){
      this.form.authorizeItemVoList = data;
    },
    //获取预授权详情
    getDetail(){
      this.$apis.AUTHORIZEDETAIL({
        id: this.id
      })
      .then((res)=>{
        if (res.returnCode === "0000") {
          let content = res.content || {}
          this.form = {
            ...content,
            medicalRecord: (content.medicalRecord || []).map((item)=>{
              return {
                uid: item.id,
                name: item.fileName,
                status: 'done',
                url: item.fileUrl,
              }
            }), 
            supplementalResult: (content.supplementalResult || []).map((item)=>{
              return {
                uid: item.id,
                name: item.fileName,
                status: 'done',
                url: item.fileUrl,
              }
            }),
            authorizeItemVoList: content.authorizeItemVoList || [],
          };
          this.$refs.feeDetail.dataList = this.form.authorizeItemVoList;
          this._getCompanyOptions();
        }else{
          this.$message.success(res.returnMsg);
        }
      })
    },
    // 获取看诊医生下拉选项
    _getDoctorListNoPage(){
      this.$apis.GETDOCTORlISTNOPAGE({"providerId": this.userInfo.providerId}).then((res) => {
        if (res.returnCode === "0000") {
          this.doctorOptions = res.content || [];
        }else{
          this.$message.success(res.returnMsg);
        }
      });
    },
    getPatienList(value){
      this.lastFetchId += 1;
      this.fetching = true;
      const fetchId = this.lastFetchId;
      this.$apis.PATIENTLISTNOPAGE({
        mrnNo: value
      })
      .then((res)=>{
        if (fetchId !== this.lastFetchId) {
          return;
        }
        if(res.returnCode == '0000'){
          this.patientList = res.content || [];
        }
        this.fetching = false;
      })
    },
    patienListChange(){
      this.form.payorCode = "";
      this.form.policyNo = ""; 
      let itemObj = this.patientList.find((item)=>{
        return this.form.mrnNo == item.mrnNo;
      }) || {};
      this.form.patientId = itemObj.id;
      this.form.patientName = itemObj.patientName;
      this.form.firstEnrollmentTime = itemObj.firstEnrollmentTime? moment(itemObj.firstEnrollmentTime).format('YYYY-MM-DD 00:00:00'): '';
      this._getCompanyOptions()
    },
    // 获取保险公司下拉选项
    _getCompanyOptions() {
      this.$apis.PATIENTPAYORLIST({
        patientId: this.form.patientId
      }).then((res) => {
        this.companyOptions = res.content || [];
      });
    },
    // 获取保单号码下拉选项
    _getPatientPolicyList() {
      this.$apis.PATIENTPOLICYLIST({
        patientId: this.form.patientId,
        payorCode: this.form.payorId,
      }).then((res) => {
        this.PolicyOptions = res.content || [];
      });
    },
    // 获取码表
    getRefcdByRefgrp() {
      //预授权项目
      this.$apis.GETREFCDBYREFGRP({
        modid: "CI",
        refgrp: "AUTH_PROJECT"
      }).then((res) => {
        this.ProjectList = res.content || [];
      });
      //拒绝原因
      this.$apis.GETREFCDBYREFGRP({
        modid: "CI",
        refgrp: "REJECT_REASON"
      }).then((res) => {
        this.rejectReason = res.content || [];
      });
      //治疗方案
      this.$apis.GETREFCDBYREFGRP({
        modid: "CI",
        refgrp: "TREATMENT_PLAN"
      }).then((res) => {
        this.treatmentPlanList = res.content || [];
      });
    },
    //上传之前
    beforeUpload(type){
      let len = type==1? this.form.medicalRecord.length: this.form.supplementalResult.length;
      if(len >= 5){
        this.$message.warning('不能超过5个文件');
        return false;
      }
      return true;
    },
    /**删除文件
     * type  1:上传病历  2:补充材料
     * **/
    removeFile(file, type){
      if(type == 2){
        let index;
        this.form.supplementalResult.forEach((item, i) => {
          if (item.uid == file.uid) {
            index = i;
          }
        });
        this.form.supplementalResult.splice(index, 1);
      }else{
        let index;
        this.form.medicalRecord.forEach((item, i) => {
          if (item.uid == file.uid) {
            index = i;
          }
        });
        this.form.medicalRecord.splice(index, 1);
      }
      return true;
    },
    /**上传文件
     * type  1:上传病历  2:补充材料
     * **/
    uploadFile(fileData, type){
      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.title,
          status: 'done',
          url: res.url,
        }
        if(type==2){
          this.form.supplementalResult.push(tmp);
        }else{
          this.form.medicalRecord.push(tmp);
        }
        this.$forceUpdate();
      })
    },
    //保存
    saveEvt(){
      this.loading = true;
      let api = this.id? 'AUTHORIZEUPDATE': 'AUTHORIZECREATE';
      this.$apis[api]({
        ...this.form,
        medicalRecord: this.form.medicalRecord.map((item)=>{
          return {
            fileName: item.name,
            fileUrl: item.url,
          }
        }),
        supplementalResult: this.form.supplementalResult.map((item)=>{
          return {
            fileName: item.name,
            fileUrl: item.url,
          }
        })
      })
      .then((res)=>{
        this.loading = false;
        if(res.returnCode == '0000'){
          this.$message.success('保存成功');
          if(!this.id){
            this.$refs.feeDetail.dataList = [];
            this.init();
          }
        }else{
          this.$message.warning(res.returnMsg);
        }
      })
    },
    //发送邮件
    sendEmailEvt(){
      this.loading2 = true;
      this.$apis.AUTHORIZESENDEMAIL({
        id: this.id
      })
      .then((res)=>{
        this.loading2 = false;
        if(res.returnCode == '0000'){
          this.$message.success('发送成功');
        }else{
          this.$message.warning(res.returnMsg);
        }
      })
    },
    //预览邮件
    previewEmailEvt(){
      this.$apis.AUTHORIZEVIEWEMAIL({
        id: this.id
      })
      .then((res)=>{
        this.loading2 = false;
        if(res.returnCode == '0000'){
          let data = res.content || {};
          //防止图片或者视频超过弹窗的宽度
          this.previewContent = ( data.content || "").replace(/<img/gi,"<img style='max-width:100%;height:auto;'")
							            .replace(/<video/gi,"<video style='width:100%;height:auto;'");
          this.previewModalShow = true;
        }else{
          this.$message.warning(res.returnMsg);
        }
      })
    }
  }
}
</script>

<style lang="less" scoped>
.footer-body{
  margin-top: 25px;
}
.content-div{
  max-height: 70vh;
  overflow-y: auto;
}
</style>