<template>
  <div class="layout_container">
    <header class="round-header">
      <el-select v-model="recordType" style="width: 120px">
        <el-option v-for="item in allRecordTypes" :label="item.label" :value="item.value"></el-option>
      </el-select>&nbsp;&nbsp;
      <el-input v-model="psnIdNumber" placeholder="人员身份证号" clearable style="width: 180px"></el-input>
      <el-divider direction="vertical"></el-divider>
      <el-button type="success" @click="queryPsnBaseInfo">参保信息</el-button>
      <el-button type="primary" @click="startApplyRecord"> 开始备案 </el-button>
      <el-button type="primary" @click="revokeRecord"> 撤销备案 </el-button>
      <span v-if="recordType === '2503'" style="margin-left: 12px">
        <el-button type="success" @click="querySpecialDiseaseRecords"> 备案查询 </el-button>
        <el-button type="success" @click="displayDateRange"> 用药记录 </el-button>
        <el-button type="warning" @click="beforeFetchAllSpecialDiseaseRecords"> 备案统计 </el-button>
      </span>
    </header>
    <el-divider content-position="left">
      人员基本信息
    </el-divider>
    <div>
      <el-descriptions :column="4" border>
        <el-descriptions-item>
          <template #label> 姓名 </template>
          {{ baseinfo.psnName }}
        </el-descriptions-item>
        <el-descriptions-item>
          <template #label> 性别 </template>
          {{ baseinfo.gendName }}
        </el-descriptions-item>
        <el-descriptions-item>
          <template #label> 证件类型 </template>
          {{ baseinfo.psnCertTypeName }}
        </el-descriptions-item>
        <el-descriptions-item>
          <template #label> 证件号码 </template>
          {{ baseinfo.certno }}
        </el-descriptions-item>
        <el-descriptions-item>
          <template #label> 出生日期 </template>
          {{ baseinfo.brdy }}
        </el-descriptions-item>
        <el-descriptions-item>
          <template #label> 年龄 </template>
          {{ baseinfo.age }}
        </el-descriptions-item>
        <el-descriptions-item>
          <template #label> 民族 </template>
          {{ baseinfo.natyName }}
        </el-descriptions-item>
        <el-descriptions-item>
          <template #label> 人员编号 </template>
          {{ baseinfo.psnNo }}
        </el-descriptions-item>
      </el-descriptions>
    </div>

    <el-divider content-position="left">
      人员参保信息
    </el-divider>

    <div>
      <el-table :data="baseinfo.insuinfo" stripe highlight-current-row @row-click="handleClickInsuinfo">
        <el-table-column property="balc" label="余额" width="50"></el-table-column>
        <el-table-column prop="insutypeName" label="险种类型"></el-table-column>
        <el-table-column prop="psnTypeName" label="人员类别" width="120"></el-table-column>
        <el-table-column prop="psnInsuStasName" label="参保状态" width="80"></el-table-column>
        <el-table-column property="psnInsuDate" label="个人参保日期" width="100"></el-table-column>
        <el-table-column property="pausInsuDate" label="暂停参保日期" width="100"></el-table-column>
        <el-table-column property="cvlservFlagName" label="公务员标志" width="100"></el-table-column>
        <el-table-column property="insuplcAdmdvs" label="参保地医保区划" width="120"></el-table-column>
        <el-table-column property="insuplcAdmdvsName" label="参保地名称"></el-table-column>
        <el-table-column property="empName" label="单位名称"></el-table-column>
      </el-table>
    </div>

    <el-divider content-position="left">
      人员身份信息
    </el-divider>

    <div>
      <el-table :data="baseinfo.idetinfo">
        <el-table-column label="人员身份类别" prop="psnIdetTypeName"></el-table-column>
        <el-table-column label="人员类别等级" prop="psnTypeLv"></el-table-column>
        <el-table-column label="备注" prop="memo"></el-table-column>
        <el-table-column label="开始时间" prop="begntime"></el-table-column>
        <el-table-column label="结束时间" prop="endtime"></el-table-column>
      </el-table>
    </div>
  </div>

  <el-dialog v-model="showMtbRecords" title="慢特病备案信息">
    <el-table :data="mtbRecords" stripe>
      <el-table-column property="begndate" label="开始日期"></el-table-column>
      <el-table-column prop="enddate" label="结束日期"></el-table-column>
      <el-table-column prop="opspDiseCode" label="病种编码"></el-table-column>
      <el-table-column prop="opspDiseName" label="病种名称"></el-table-column>
      <el-table-column prop="ideFixmedinsName" label="备案机构"></el-table-column>
    </el-table>
  </el-dialog>
  <el-dialog v-model="showMtbUsedMedicines" title="慢特病用药记录">
    <el-table :data="mtbUsedMedicines" stripe height="360">
      <el-table-column prop="fixmedinsCode" label="定点医药机构编号"></el-table-column>
      <el-table-column prop="fixmedinsName" label="定点医药机构名称"></el-table-column>
      <el-table-column prop="cnt" label="数量"></el-table-column>
      <el-table-column prop="pric" label="单价"></el-table-column>
      <el-table-column prop="hilistCode" label="医保目录编码"></el-table-column>
      <el-table-column prop="hilistName" label="医保目录名称"></el-table-column>
      <el-table-column prop="medListCodg" label="医疗目录编码"></el-table-column>
      <el-table-column prop="medinsListCodg" label="医药机构目录编码"></el-table-column>
      <el-table-column prop="medinsListName" label="医药机构目录名称"></el-table-column>
      <el-table-column prop="prodname" label="商品名"></el-table-column>
      <el-table-column prop="spec" label="规格"></el-table-column>
      <el-table-column prop="dosformName" label="剂型"></el-table-column>
    </el-table>
  </el-dialog>
  <el-dialog v-model="showDateRange" title="请选择时间范围" width="320px">
    <el-date-picker
        v-model="dateRange"
        type="daterange"
        :shortcuts="maxHalfYear"
        range-separator="至"
        start-placeholder="开始日期"
        end-placeholder="结束日期"
        size="small"
        style="width: 260px"
    ></el-date-picker>
    <div style="width: 260px; text-align: right; margin-top: 24px">
      <el-button type="primary" @click="querySpecialDiseaseUsedMedicines" icon="Check">确定</el-button>
    </div>
  </el-dialog>
  <el-dialog v-model="showFetchAllMtbUsedMedicines" title="门特备案记录" width="70%">
    <el-date-picker
        v-model="fetchAllMtbRecordsDateRange"
        type="daterange"
        :shortcuts="maxHalfYear"
        range-separator="至"
        start-placeholder="开始日期"
        end-placeholder="结束日期"
        size="small"
        style="width: 240px"
    ></el-date-picker>
    <el-divider direction="vertical"></el-divider>
    <el-button type="primary" icon="Check" @click="fetchAllSpecialDiseaseRecords">查询</el-button>
    <el-button type="primary" icon="Download" @click="exportExcel">导出Excel</el-button>
    <el-table :data="allMtbRecords" height="400" stripe highlight-current-row>
      <el-table-column prop="psnName" label="人员姓名"></el-table-column>
      <el-table-column prop="psnNo" label="人员编码"></el-table-column>
      <el-table-column prop="socialNo" label="身份证号"></el-table-column>
      <el-table-column prop="opspDiseCode" label="病种编码"></el-table-column>
      <el-table-column prop="opspDiseName" label="病种名称"></el-table-column>
      <el-table-column prop="ideFixmedinsName" label="鉴定机构"></el-table-column>
      <el-table-column prop="hospIdeDate" label="鉴定日期"></el-table-column>
      <el-table-column prop="diagDrName" label="诊断医师"></el-table-column>
      <el-table-column prop="begndate" label="开始日期"></el-table-column>
      <el-table-column prop="enddate" label="结束日期"></el-table-column>
      <el-table-column prop="trtDclaDetlSn" label="备案流水号"></el-table-column>
    </el-table>
  </el-dialog>

  <el-dialog v-model="showMtbRecord" width="70%" title="人员慢特病备案申请">
    <i style="color: red">* </i>人员类别：&nbsp;&nbsp;
    <el-radio v-model="perstype" :label="1">职工</el-radio>
    <el-radio v-model="perstype" :label="2">居民</el-radio>
    <div style="height: 20px"></div>
    <el-row :gutter="5">
      <el-col :span="8">
        人员编号：
        <el-input v-model="tempMtbRecord.psnNo" disabled style="width: 160px"></el-input>
      </el-col>
      <el-col :span="8">
        险种类型：
        <el-input v-model="tempMtbRecord.insutypeName" disabled style="width: 160px"></el-input>
      </el-col>
      <el-col :span="8">
        联系电话：
        <el-input v-model="tempMtbRecord.tel" style="width: 160px"></el-input>
      </el-col>
    </el-row>
    <div style="height: 12px"></div>
    <el-row :gutter="5">
      <el-col :span="8">
        联系地址：
        <el-input v-model="tempMtbRecord.addr" style="width: 160px"></el-input>
      </el-col>
      <el-col :span="8">
        参保地区：
        <el-input v-model="tempMtbRecord.insuOptinsName" disabled style="width: 160px"></el-input>
      </el-col>
      <el-col :span="8">
        鉴定日期：
        <el-date-picker v-model="tempMtbRecord.hospIdeDate" style="width: 160px"></el-date-picker>
      </el-col>
    </el-row>
    <div style="height: 12px"></div>
    <el-row :gutter="5">
      <el-col :span="8">
        开始日期：
        <el-date-picker v-model="tempMtbRecord.begndate" style="width: 160px"></el-date-picker>
      </el-col>
      <el-col :span="8">
        结束日期：
        <el-date-picker v-model="tempMtbRecord.enddate" style="width: 160px"></el-date-picker>
      </el-col>
      <el-col :span="8">
        <div style="display: flex">
          <div>病种名称：</div>
          <div>
            <el-autocomplete
                v-model="tempMtbRecord.opspDiseName"
                :fetch-suggestions="searchDiag" placeholder="请输入名称" clearable
                @select="handleSelectDiag"
            >
              <template #default="{ item }">
                <div style="height: 40px">
                  <div style="height: 16px; margin-top: 4px; font-size: 12px; color: #8492a6">
                    {{ item.code }}
                  </div>
                  <div style="height: 16px">{{ item.name }}</div>
                </div>
              </template>
            </el-autocomplete>
          </div>
        </div>
      </el-col>
    </el-row>
    <div style="height: 12px"></div>
    <el-row :gutter="5">
      <el-col :span="8">
        病种编码：
        <el-input v-model="tempMtbRecord.opspDiseCode" disabled style="width: 160px"></el-input>
      </el-col>
      <el-col :span="8">
        <div style="display: flex">
          <div>医师姓名：</div>
          <div>
            <el-autocomplete
                v-model="tempMtbRecord.diagDrName"
                :fetch-suggestions="searchPhysician"
                placeholder="请输入姓名"
                clearable
                @select="handleSelectPhysician"
            >
              <template #default="{ item }">
                <span style="color: #8492a6; font-size: 12px">{{ item.code }}</span>
                <el-divider direction="vertical"></el-divider>
                <span>{{ item.name }}</span>
              </template>
            </el-autocomplete>
          </div>
        </div>
      </el-col>
      <el-col :span="8">
        医师编码：
        <el-input v-model="tempMtbRecord.diagDrCodg" disabled style="width: 160px"></el-input>
      </el-col>
    </el-row>
    <div style="margin-top: 24px; width: 100%; text-align: right">
      <el-button plain icon="Close" @click="showMtbRecord = false">放弃备案</el-button>
      <el-button type="primary" icon="Check" @click="submitRecord">提交备案</el-button>
    </div>
    <div style="height: 12px"></div>
  </el-dialog>

  <el-dialog v-model="showDdRecord" width="70%" title="定点备案申请">
    <el-row :gutter="5">
      <el-col :span="8">
        人员编号：
        <el-input v-model="tempDdRecord.psnNo" disabled style="width: 160px"></el-input>
      </el-col>
      <el-col :span="8">
        险种类型：
        <el-input v-model="tempDdRecord.insutypeName" disabled style="width: 160px"></el-input>
      </el-col>
      <el-col :span="8">
        参保地区：
        <el-input v-model="tempDdRecord.insuOptinsName" disabled style="width: 160px"></el-input>
      </el-col>
    </el-row>
    <div style="height: 12px"></div>
    <el-row :gutter="5">
      <el-col :span="8">
        联系电话：
        <el-input v-model="tempDdRecord.tel" style="width: 160px"></el-input>
      </el-col>
      <el-col :span="8">
        联系地址：
        <el-input v-model="tempDdRecord.addr" style="width: 160px"></el-input>
      </el-col>
      <el-col :span="8">
        业务申请类型：
        <el-select
            v-model="tempDdRecord.bizAppyType"
            style="width: 160px"
        >
          <el-option value="01" label="门诊慢特病登记" />
          <el-option value="08" label="异地安置登记" />
          <el-option value="03" label="就医定点医疗机构登记" />
        </el-select>
      </el-col>
    </el-row>
    <div style="height: 12px"></div>
    <el-row :gutter="5">
      <el-col :span="8">
        定点排序号：
        <el-input
            v-model="tempDdRecord.fixSrtNo"
            style="width: 160px"
        />
      </el-col>
      <el-col :span="8">
        机构编号：
        <el-input
            v-model="tempDdRecord.fixmedinsCode"
            disabled
            style="width: 160px"
        />
      </el-col>
      <el-col :span="8">
        机构名称：
        <el-input
            v-model="tempDdRecord.fixmedinsName"
            disabled
            style="width: 160px"
        />
      </el-col>
    </el-row>

    <div style="height: 12px"></div>
    <el-row :gutter="5">
      <el-col :span="8">
        开始日期：
        <el-date-picker
            v-model="tempDdRecord.begndate"
            style="width: 160px" type="date"
            format="YYYY-MM-DD"
            value-format="YYYY-MM-DD"
        />
      </el-col>
      <el-col :span="8">
        结束日期：
        <el-date-picker
            v-model="tempDdRecord.enddate"
            style="width: 160px" type="date"
            format="YYYY-MM-DD"
            value-format="YYYY-MM-DD"
        />
      </el-col>
      <el-col :span="8">
        补充说明：
        <el-input v-model="tempDdRecord.memo" style="width: 160px"></el-input>
      </el-col>
    </el-row>
    <div style="height: 12px"></div>
    <div style="margin-top: 24px; width: 100%; text-align: right">
      <el-button plain icon="Close" @click="showDdRecord = false">放弃备案</el-button>
      <el-button type="primary" icon="Check" @click="submitRecord">提交备案</el-button>
    </div>
    <div style="height: 12px"></div>
  </el-dialog>

  <el-dialog v-model="showWsRecord" width="70%" title="外伤备案申请">
    <el-row :gutter="5">
      <el-col :span="8">
        人员编号：
        <el-input v-model="tempWsRecord.psnNo" disabled style="width: 160px"></el-input>
      </el-col>
      <el-col :span="8">
        险种类型：
        <el-input v-model="tempWsRecord.insutypeName" disabled style="width: 160px"></el-input>
      </el-col>
      <el-col :span="8">
        联系电话：
        <el-input v-model="tempWsRecord.tel" style="width: 160px"></el-input>
      </el-col>
    </el-row>
    <div style="height: 12px"></div>
    <el-row :gutter="5">
      <el-col :span="8">
        联系地址：
        <el-input v-model="tempWsRecord.addr" style="width: 160px"></el-input>
      </el-col>
      <el-col :span="8">
        参保地区：
        <el-input v-model="tempWsRecord.insuAdmdvsName" disabled style="width: 160px"></el-input>
      </el-col>
      <el-col :span="8">
        受伤日期：
        <el-date-picker v-model="tempWsRecord.trumTime" style="width: 160px" type="datetime"
                        format="YYYY-MM-DD HH:mm:ss" value-format="YYYY-MM-DD HH:mm:ss"></el-date-picker>
      </el-col>
    </el-row>
    <div style="height: 12px"></div>
    <el-row :gutter="5">
      <el-col :span="8">
        受伤部位：
        <el-input v-model="tempWsRecord.trumPart" style="width: 160px"></el-input>
      </el-col>
      <el-col :span="8">
        受伤地点：
        <el-input v-model="tempWsRecord.trumSite" style="width: 160px"></el-input>
      </el-col>
      <el-col :span="8">
        受伤原因：
        <el-input v-model="tempWsRecord.trumRea" style="width: 160px"></el-input>
      </el-col>
    </el-row>
    <div style="height: 12px"></div>
    <el-row :gutter="5">
      <el-col :span="8">
        开始日期：
        <el-date-picker v-model="tempWsRecord.begndate" style="width: 160px" type="date" format="YYYY-MM-DD"
                        value-format="YYYY-MM-DD"></el-date-picker>
      </el-col>
      <el-col :span="8">
        结束日期：
        <el-date-picker v-model="tempWsRecord.enddate" style="width: 160px" type="date" format="YYYY-MM-DD"
                        value-format="YYYY-MM-DD"></el-date-picker>
      </el-col>
      <el-col :span="8">
        补充说明：
        <el-input v-model="tempWsRecord.memo" style="width: 160px"></el-input>
      </el-col>
    </el-row>
    <div style="height: 12px"></div>
    <div style="margin-top: 24px; width: 100%; text-align: right">
      <el-button plain icon="Close" @click="showWsRecord = false">放弃备案</el-button>
      <el-button type="primary" icon="Check" @click="submitRecord">提交备案</el-button>
    </div>
    <div style="height: 12px"></div>
  </el-dialog>

  <el-dialog v-model="showSyRecord" width="70%" title="生育备案申请">
    <el-row :gutter="5">
      <el-col :span="8">
        人员编号：
        <el-input v-model="tempSyRecord.psnNo" disabled style="width: 160px"></el-input>
      </el-col>
      <el-col :span="8">
        险种类型：
        <el-input v-model="tempSyRecord.insutypeName" disabled style="width: 160px"></el-input>
      </el-col>
      <el-col :span="8">
        联系电话：
        <el-input v-model="tempSyRecord.tel" style="width: 160px"></el-input>
      </el-col>
    </el-row>
    <div style="height: 12px"></div>
    <el-row :gutter="5">
      <el-col :span="8">
        联系地址：
        <el-input v-model="tempSyRecord.addr" style="width: 160px"></el-input>
      </el-col>
      <el-col :span="8">
        参保地区：
        <el-input v-model="tempSyRecord.insuAdmdvsName" disabled style="width: 160px"></el-input>
      </el-col>
    </el-row>
    <div style="height: 12px"></div>
    <el-row :gutter="5">
      <el-col :span="8">
        开始日期：
        <el-date-picker v-model="tempSyRecord.begndate" style="width: 160px" type="date" format="YYYY-MM-DD"
                        value-format="YYYY-MM-DD"></el-date-picker>
      </el-col>
      <el-col :span="8">
        结束日期：
        <el-date-picker v-model="tempSyRecord.enddate" style="width: 160px" type="date" format="YYYY-MM-DD"
                        value-format="YYYY-MM-DD"></el-date-picker>
      </el-col>
    </el-row>
    <div style="height: 12px"></div>
    <div style="margin-top: 24px; width: 100%; text-align: right">
      <el-button plain icon="Close" @click="showSyRecord = false">放弃备案</el-button>
      <el-button type="primary" icon="Check" @click="submitRecord">提交备案</el-button>
    </div>
    <div style="height: 12px"></div>
  </el-dialog>

  <el-dialog v-model="showAllAppliedSpecicalDiseaseRecords" title="请选择要撤销的备案" width="70%">
    <div style="height: 12px"></div>
    <el-table
        :data="allAppliedSpecialDiseaseRecords"
        stripe
        highlight-current-row
        @row-click="handleSelectAppliedSpecialDiseaseRecord"
    >
      <el-table-column prop="opspDiseCode" label="病种编码"></el-table-column>
      <el-table-column prop="opspDiseName" label="病种名称"></el-table-column>
      <el-table-column prop="hospIdeDate" label="鉴定日期"></el-table-column>
      <el-table-column prop="diagDrName" label="鉴定医生"></el-table-column>
      <el-table-column prop="begndate" label="开始日期"></el-table-column>
      <el-table-column prop="enddate" label="结束日期"></el-table-column>
    </el-table>
    <div style="margin-top: 24px; width: 100%; text-align: right">
      <el-button plain icon="Close" @click="abortRevokeSpecialDiseaseRecord">放弃</el-button>
      <el-button type="primary" icon="RefreshLeft" @click="confirmRevokeSpecialDiseaseRecord">撤销备案</el-button>
    </div>
    <div style="height: 12px"></div>
  </el-dialog>
</template>
<script setup>
import {
    obtainBasicPersonInfo,
    querySpecialChronicDiseasesAccreditation,
    querySpecialChronicDiseasesMedicalRecord
} from "@/api/medical-insurance/si-query";
import {ElMessage, ElMessageBox} from "element-plus";
import {formatDate, formatDatetime} from "@/utils/date";
import {maxHalfYear} from "@/data/shortcuts";
import {
  getAllSpcChrRcdsByPsnNo,
  revokeSpecialChronicDiseasesRecord,
  personnelAccidentRecord,
  selectAllSpcSlwRcds,
  specialChronicDiseasesRecord, personnelAssignmentRecord
} from "@/api/medical-insurance/si-psn-rcd";
import {Export} from "@/utils/ExportExcel";
import {searchData} from "@/api/inpatient/dictionary";
import env from "@/utils/setting";

const allRecordTypes = [
    { value: '2503', label: '慢特病备案' },
    { value: '2505', label: '定点备案' },
    { value: '2507', label: '意外伤害备案' },
]
const recordType = ref('2503')
const psnIdNumber = ref('')

const baseinfo = ref({})
const currentInsuinfo = ref({})
const perstype = ref(1)
const mtbRecords = ref([])
const showMtbRecords = ref(false)
const mtbUsedMedicines = ref([])
const showMtbUsedMedicines = ref(false)
const dateRange = ref(null)
const showDateRange = ref(false)
const showFetchAllMtbUsedMedicines = ref(false)
const fetchAllMtbRecordsDateRange = ref(null)
const allMtbRecords = ref([])
const showMtbRecord = ref(false);
const showDdRecord = ref(false);
const showWsRecord = ref(false);
const showSyRecord = ref(false);
const tempMtbRecord = reactive({});
const tempDdRecord = reactive({});
const tempWsRecord = reactive({});
const tempSyRecord = reactive({});

const nullIdNumber = () => {
    if (!psnIdNumber.value) {
        ElMessage({
            message: '请输入患者身份证号！',
            type: 'warning',
            duration: 2000,
            showClose: true,
        })
        return true
    }
    return false
}

const queryPsnBaseInfo = () => {
    if (nullIdNumber()) {
        return
    }
    const param = {
        socialNo: psnIdNumber.value,
        onlyQry: 1,
    }
    obtainBasicPersonInfo(param).then((res) => {
        baseinfo.value = res
    }).catch(() => {
        baseinfo.value = {}
    })
}

const nullBaseinfo = (needInsuinfo) => {
    if (!baseinfo.value.psnNo) {
        ElMessage({
            message: '请先查询参保信息！',
            type: 'warning',
            duration: 2000,
            showClose: true,
        })
        return true
    }
    if (needInsuinfo && !currentInsuinfo.value.insutype) {
        ElMessage({
            message: '请选择一条参保信息！',
            type: 'warning',
            duration: 2000,
            showClose: true,
        })
        return true
    }
    return false
}

const nullDateRange = () => {
    if (!dateRange.value) {
        ElMessage({
            message: '请选择日期范围！',
            type: 'warning',
            duration: 2000,
            showClose: true,
        })
        return true
    }
    return false
}

const handleClickInsuinfo = (row) => {
    currentInsuinfo.value = row
    if (row.insutype === '310') {
        perstype.value = 1
    } else if (row.insutype === '390') {
        perstype.value = 2
    }
}

const querySpecialDiseaseRecords = () => {
    if (nullBaseinfo(true)) {
        return
    }
    querySpecialChronicDiseasesAccreditation({
        psnNo: baseinfo.value.psnNo,
        admdvs: currentInsuinfo.value.insuplcAdmdvs,
        needAllRcd: 1,
    }).then((res) => {
        mtbRecords.value = res
        showMtbRecords.value = true
    })
}

const displayDateRange = () => {
    showDateRange.value = true
}

const querySpecialDiseaseUsedMedicines = () => {
    if (nullBaseinfo(false)) {
        return
    }
    if (nullDateRange()) {
        return
    }
    const param = {
        psnNo: baseinfo.value.psnNo,
        begntime: formatDatetime(dateRange.value[0]),
        endtime: formatDatetime(dateRange.value[1]),
    }
    querySpecialChronicDiseasesMedicalRecord(param).then((res) => {
        showDateRange.value = false
        mtbUsedMedicines.value = res
        showMtbUsedMedicines.value = true
    })
}

const beforeFetchAllSpecialDiseaseRecords = () => {
    showFetchAllMtbUsedMedicines.value = true
}

const fetchAllSpecialDiseaseRecords = () => {
    if (!fetchAllMtbRecordsDateRange.value) {
        ElMessage({
            message: '请选择日期范围！',
            type: 'warning',
            duration: 2000,
            showClose: true,
        })
        return true
    }
    const begntime = formatDate(fetchAllMtbRecordsDateRange.value[0])
    const endtime = formatDate(fetchAllMtbRecordsDateRange.value[1])
    selectAllSpcSlwRcds(begntime, endtime).then((res) => {
        allMtbRecords.value = res
    })
}

const exportExcel = () => {
    if (allMtbRecords.value.length === 0) {
        ElMessage({
            message: '没有可以导出的数据。',
            type: 'warning',
            duration: 2000,
            showClose: true,
        })
        return true
    }
    const title = {
        psnName: '人员姓名',
        psnNo: '人员编码',
        socialNo: '身份证号',
        opspDiseCode: '病种编码',
        opspDiseName: '病种名称',
        ideFixmedinsName: '鉴定机构',
        hospIdeDate: '鉴定日期',
        diagDrName: '诊断医师',
        begndate: '开始日期',
        enddate: '结束日期',
        trtDclaDetlSn: '备案流水号',
    }
    Export(allMtbRecords.value, title, '门特备案详情')
}

const searchDiag = (queryString, cb) => {
    if (queryString && queryString.length > 1) {
        const param = {
            method: 'name',
            content: queryString,
            target: 'slwspcdiag',
            perstype: perstype.value,
            medType: '14',
        }
        searchData(param).then((res) => {
            cb(res)
        })
    }
}

const handleSelectDiag = (item) => {
    tempMtbRecord.opspDiseCode = item.code
    tempMtbRecord.opspDiseName = item.name
}

const searchPhysician = (queryString, cb) => {
    if (queryString && queryString.length > 1) {
        const param = {
            method: 'name',
            content: queryString,
            target: 'physician',
            medType: '14',
        }
        searchData(param).then((res) => {
            cb(res)
        })
    }
}
const handleSelectPhysician = (item) => {
    tempMtbRecord.diagDrCodg = item.code
    tempMtbRecord.diagDrName = item.name
}

const startApplyRecord = () => {
    if (nullBaseinfo(true)) {
        return
    }
    beforeApplySpecialDiseaseRecord()
}

const beforeApplySpecialDiseaseRecord = () => {
  switch (recordType.value) {
    case '2503':
      tempMtbRecord.psnNo = baseinfo.value.psnNo
      tempMtbRecord.psnName = baseinfo.value.psnName
      tempMtbRecord.socialNo = baseinfo.value.certno
      tempMtbRecord.insutype = currentInsuinfo.value.insutype
      tempMtbRecord.insutypeName = currentInsuinfo.value.insutypeName
      tempMtbRecord.insuOptins = currentInsuinfo.value.insuplcAdmdvs
      tempMtbRecord.insuOptinsName = currentInsuinfo.value.insuplcAdmdvsName;
      showMtbRecord.value = true;
      break;
    case '2505':
      tempDdRecord.psnNo = baseinfo.value.psnNo
      tempDdRecord.insutype = currentInsuinfo.value.insutype
      tempDdRecord.insutypeName = currentInsuinfo.value.insutypeName
      tempDdRecord.insuOptins = currentInsuinfo.value.insuplcAdmdvs
      tempDdRecord.insuOptinsName = currentInsuinfo.value.insuplcAdmdvsName;
      tempDdRecord.fixmedinsCode = env.VITE_HOSPITAL_CODE
      tempDdRecord.fixmedinsName = env.VITE_HOSPITAL_NAME
      showDdRecord.value = true;
      break;
    case '2507':
      tempWsRecord.psnNo = baseinfo.value.psnNo;
      tempWsRecord.insutype = currentInsuinfo.value.insutype;
      tempWsRecord.insutypeName = currentInsuinfo.value.insutypeName
      tempWsRecord.psnCertType = "01";
      tempWsRecord.certno = baseinfo.value.certno;
      tempWsRecord.insuAdmdvs = currentInsuinfo.value.insuplcAdmdvs;
      tempWsRecord.bizUsedFlag = "0";
      tempWsRecord.insuAdmdvs = currentInsuinfo.value.insuplcAdmdvs
      tempWsRecord.insuAdmdvsName = currentInsuinfo.value.insuplcAdmdvsName;
      showWsRecord.value = true;
      break;
  }
}
const submitRecord = () => {
  switch (recordType.value) {
    case '2503':
      specialChronicDiseasesRecord(tempMtbRecord).then((res) => {
        ElMessageBox.alert(res, {
          type: 'success',
          confirmButtonText: '确定',
        }).then(() => {
          showMtbRecord.value = false
        });
      });
      break;
    case '2505':
      personnelAssignmentRecord(tempDdRecord).then((res) => {
        ElMessageBox.alert(res, {
          type: 'success',
          confirmButtonText: '确定',
        }).then(() => {
          showDdRecord.value = false
        });
      })
      break;
    case '2507':
      personnelAccidentRecord(tempWsRecord).then((res) => {
        ElMessageBox.alert(res, {
          type: 'success',
          confirmButtonText: '确定',
        }).then(() => {
          showWsRecord.value = false
        });
      });
      break;
  }
}

const revokeRecord = () => {
    if (nullBaseinfo(false)) {
        return
    }
    switch (recordType.value) {
        case '2503':
            beforeRevokeSpecialDiseaseRecord()
            break
    }
}

const allAppliedSpecialDiseaseRecords = ref([])
const showAllAppliedSpecicalDiseaseRecords = ref(false)
const beforeRevokeSpecialDiseaseRecord = () => {
    getAllSpcChrRcdsByPsnNo(baseinfo.value.psnNo).then((res) => {
        allAppliedSpecialDiseaseRecords.value = res
        showAllAppliedSpecicalDiseaseRecords.value = true
    })
}

const currentAppliedSpecialDiseaseRecord = ref({})
const handleSelectAppliedSpecialDiseaseRecord = (row) => {
    currentAppliedSpecialDiseaseRecord.value = row
}

const abortRevokeSpecialDiseaseRecord = () => {
    currentAppliedSpecialDiseaseRecord.value = {}
    showAllAppliedSpecicalDiseaseRecords.value = false
}

const confirmRevokeSpecialDiseaseRecord = () => {
    if (!currentAppliedSpecialDiseaseRecord.value.psnNo) {
        ElMessage({
            message: '请选择要撤销的备案！',
            type: 'warning',
            duration: 2000,
            showClose: true,
        })
        return
    }
    ElMessageBox.prompt('请填写撤销原因：', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning',
        inputPattern: /\S/,
        inputErrorMessage: '撤销原因为必填项！',
    }).then(({ value }) => {
        currentAppliedSpecialDiseaseRecord.value.memo = value
        const param = {
            id: currentAppliedSpecialDiseaseRecord.value.id,
            psnNo: currentAppliedSpecialDiseaseRecord.value.psnNo,
            trtDclaDetlSn: currentAppliedSpecialDiseaseRecord.value.trtDclaDetlSn,
            memo: value,
        }
        revokeSpecialChronicDiseasesRecord(param).then((res) => {
            ElMessage({
                message: res,
                type: 'success',
                duration: 2000,
                showClose: true,
            })
            abortRevokeSpecialDiseaseRecord()
        })
    }).catch(() => {})
}
</script>