<template>
  <div class="app-container" ref="layout">
    <el-tabs v-model="queryParams.routeCheckStatus" @tab-click="handleClick" style="flex: 1">
      <el-tab-pane label="未审核" name="UNAUDITED"></el-tab-pane>
      <el-tab-pane label="已审核" name="AGREE"></el-tab-pane>
      <el-tab-pane label="已忽略" name="DISAGREE"></el-tab-pane>
    </el-tabs>
    <div ref="topform" class="form">
      <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" label-width="80px">
        <el-form-item label="患者姓名" prop="patientName">
          <el-input v-model="queryParams.patientName" placeholder="请输入患者姓名" clearable @keyup.enter.native="handleQuery"
            style="width: 200px" />
        </el-form-item>
        <el-form-item label="患者电话" prop="patientPhone">
          <el-input v-model="queryParams.patientPhone" placeholder="请输入患者电话" clearable @keyup.enter.native="handleQuery"
            style="width: 200px" />
        </el-form-item>
        <el-form-item label="签约时间" prop="signTimeStart">
          <el-date-picker v-model="signTime" type="daterange" range-separator="至" start-placeholder="开始日期"
            style="width: 300px" value-format="yyyy-MM-dd" end-placeholder="结束日期">
          </el-date-picker>
        </el-form-item>
        <el-form-item label="诊断" prop="mainDiagnosis">
          <el-input v-model="queryParams.mainDiagnosis" placeholder="请选择诊断" clearable style="width: 200px"
            @keyup.enter.native="handleQuery" />
        </el-form-item>
        <el-form-item label="患者来源" prop="patientSource">
          <el-select v-model="queryParams.patientSource" placeholder="请选择患者来源" clearable style="width: 200px">
            <el-option v-for="dict in dict.type.patient_source" :key="dict.value" :label="dict.label"
              :value="dict.value" />
          </el-select>
        </el-form-item>
        <el-form-item label="医院" prop="hospitalAgencyId">
          <el-select v-model="queryParams.hospitalAgencyId" filterable placeholder="请选择医院" style="width: 200px"
            clearable @clear="clearhospitalAgency" @change="changehospitalAgency">
            <el-option v-for="item in hospitalAgencylist" :key="item.id" :label="item.agencyName" :value="item.id">
            </el-option>
          </el-select>
        </el-form-item>
        <el-form-item label="院区" prop="campusAgencyId">
          <el-select v-model="queryParams.campusAgencyId" filterable placeholder="请选择院区" style="width: 200px" clearable
            @clear="clearcampusAgency" @change="changecampusAgency">
            <el-option v-for="item in campusAgencylist" :key="item.id" :label="item.agencyName" :value="item.id">
            </el-option>
          </el-select>
        </el-form-item>
        <el-form-item label="科室" prop="departmentId">
          <el-select v-model="queryParams.departmentId" filterable placeholder="请选择科室" style="width: 200px" clearable
            @clear="cleardepartment" @change="changedepartment">
            <el-option v-for="item in departmentlist" :key="item.id" :label="item.departmentName" :value="item.id">
            </el-option>
          </el-select>
        </el-form-item>
        <el-form-item label="病区" prop="wardId">
          <el-select v-model="queryParams.wardId" filterable placeholder="请选择病区" style="width: 200px" clearable>
            <el-option v-for="item in wardlist" :key="item.id" :label="item.departmentName" :value="item.id">
            </el-option>
          </el-select>
        </el-form-item>
        <el-form-item>
          <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
          <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
        </el-form-item>
      </el-form>
    </div>
    <div ref="table">
      <el-table :max-height="maxTableHeight" v-loading="loading" :data="patientInfoList">
        <el-table-column label="序号" type="index" width="50" align="center" />
        <el-table-column label="患者姓名" align="center" prop="patientName" width="80" />
        <el-table-column label="患者电话" align="center" prop="patientPhone" width="120" />
        <el-table-column label="性别" align="center" prop="sex" width="50">
          <template slot-scope="scope">
            {{ scope.row.sex == "MALE" ? "男" : "" }}
            {{ scope.row.sex == "FEMALE" ? "女" : "" }}
          </template>
        </el-table-column>
        <el-table-column label="年龄" align="center" prop="age" width="50" />
        <el-table-column label="出生日期" align="center" prop="birthDate" width="100" />
        <el-table-column label="医院" align="center" prop="hospitalAgencyName" :show-overflow-tooltip="true" />
        <el-table-column label="院区" align="center" prop="campusAgencyName" :show-overflow-tooltip="true" />
        <el-table-column label="科室名称" align="center" prop="departmentName" :show-overflow-tooltip="true" />
        <el-table-column label="病区名称" align="center" prop="wardName" />
        <el-table-column label="住院/门诊号" align="center" prop="inHospitalNumber" width="105"
          :show-overflow-tooltip="true" />
        <el-table-column label="就诊方式" align="center" prop="visitMethod">
          <template slot-scope="scope">
            <dict-tag :options="dict.type.visit_method" :value="scope.row.visitMethod" />
          </template>
        </el-table-column>
        <el-table-column label="主要诊断" align="center" prop="signDiagnosis" :show-overflow-tooltip="true" width="100" />
        <el-table-column label="签约时间" align="center" prop="signTime" width="100">
          <template slot-scope="scope">
            <span>{{ parseTime(scope.row.signTime, "{y}-{m}-{d}") }}</span>
          </template>
        </el-table-column>
        <el-table-column label="画像审核状态" align="center" prop="portaitCheckStatus" width="100">
          <template slot-scope="scope">
            {{ scope.row.portaitCheckStatus == "AGREE" ? "审核通过" : "" }}
            {{ scope.row.portaitCheckStatus == "DISAGREE" ? "已忽略" : "" }}
            {{ scope.row.portaitCheckStatus == null ? "未审核" : "" }}
          </template>
        </el-table-column>
        <el-table-column label="路径审核状态" align="center" prop="routeCheckStatus" width="100">
          <template slot-scope="scope">
            {{ scope.row.routeCheckStatus == "AGREE" ? "审核通过" : "" }}
            {{ scope.row.routeCheckStatus == "DISAGREE" ? "已忽略" : "" }}
            {{ scope.row.routeCheckStatus == null ? "未审核" : "" }}
          </template>
        </el-table-column>
        <el-table-column label="操作" align="center" class-name="small-padding fixed-width" fixed="right">
          <template slot-scope="scope">
            <el-button size="mini" type="text" @click="handleAuthRole(scope.row)"
              v-if="queryParams.routeCheckStatus == 'UNAUDITED'">审核</el-button>
            <el-button size="mini" type="text" @click="handleLook(scope.row)"
              v-if="queryParams.routeCheckStatus != 'UNAUDITED'">查看</el-button>
          </template>
        </el-table-column>
      </el-table>
    </div>
    <myPagination v-show="total > 0" :total="total" :pageSize="queryParams.pageSize"
      :indexFromWrap="queryParams.pageNum" @updateCPage="updateCPage"></myPagination>
  </div>
</template>
<script>
import { tasklist } from "@/api/manage/manualReview";
import { getAge } from "@/utils/age";
import {
  selectAgencyList,
  getDepartmentList,
  getAgencyList,
} from "@/api/manage/selectAgencyList";
import { usergetList } from "@/api/unitconfig/patientConfiguration";
export default {
  name: "manualReview",
  dicts: ["patient_type", "visit_method", "sign_status", "patient_source"],
  data() {
    return {
      maxTableHeight: undefined,
      attendingPhysicianlist: [],
      // 遮罩层
      loading: true,
      // 总条数
      total: 0,
      // 患者信息表格数据
      patientInfoList: [],
      signTime: [],
      // 查询参数
      queryParams: {
        pageNum: 1,
        pageSize: 10,
        patientName: null,
        patientPhone: null,
        birthDate: null,
        patientType: null,
        visitMethod: null,
        mainDiagnosis: null,
        attendingPhysicianId: null,
        hospitalAgencyId: null,
        hospitalAgencyName: null,
        campusAgencyId: null,
        signTimeStart: null,
        signTimeEnd: null,
        campusAgencyName: null,
        departmentId: null,
        departmentName: null,
        wardId: null,
        wardName: null,
        surgicalName: null,
        admissionTimeStart: null,
        admissionTimeEnd: null,
        outpatientNumber: null,
        dischargeTimeStart: null,
        dischargeTimeEnd: null,
        dischargeMethod: null,
        patientSource: null,
        routeCheckStatus: "UNAUDITED",
      },
      dischargeTime: [],
      admissionTime: [],
      //医院list
      hospitalAgencylist: [],
      // 院区list
      campusAgencylist: [],
      //科室list
      departmentlist: [],
      //病区list
      wardlist: [],
    };
  },
  created() {
    if (localStorage.getItem('manualReviewquery')) {
      this.queryParams = JSON.parse(localStorage.getItem('manualReviewquery'))
      this.queryParams.hospitalAgencyId = undefined
      this.queryParams.campusAgencyId = undefined
      this.queryParams.departmentId = undefined
    }
    this.getList();
    this.selectAgencyinfo();
  },
  mounted() {
    this.getMaxTableHeight();
    this.screenChange();
  },
  methods: {
    updateCPage(index, size) {
      this.queryParams.pageNum = index;
      this.queryParams.pageSize = size;
      this.getList();
    },
    handleClick(tab, event) {
      this.dischargeTime = [];
      this.queryParams.dischargeTimeStart = null;
      this.queryParams.dischargeTimeEnd = null;
      this.admissionTime = [];
      this.queryParams.admissionTimeStart = null;
      this.queryParams.admissionTimeEnd = null;
      this.queryParams.pageNum = 1;
      this.getList();
    },
    //主治医生
    usergetListinfo() {
      usergetList({
        hospitalAgencyId: this.queryParams.hospitalAgencyId,
        postName: "DOCTOR",
      }).then((res) => {
        this.attendingPhysicianlist = res.data;
      });
    },
    //查看操作
    handleLook(row) {
      this.$router.push({
        path: "/task/LookAuditing",
        query: {
          path: "/task/manualReview",
          patientId: row.patientId,
          signRecordId: row.id,
          routeCheckStatus: this.queryParams.routeCheckStatus,
        },
      });
    },
    /** 审核操作 */
    handleAuthRole(row) {
      this.$router.push({
        path: "/task/Auditing",
        query: {
          path: "/task/manualReview",
          patientId: row.patientId,
          signRecordId: row.id,
          routeCheckStatus: row.routeCheckStatus
        },
      });
    },
    /** 查询患者信息列表 */
    getList() {
      this.loading = true;
      // this.queryParams.taskCreateType = 'MANUAL_CREATE's
      tasklist(this.queryParams).then((response) => {
        localStorage.setItem('manualReviewquery', JSON.stringify(this.queryParams))
        response.rows.forEach((e) => {
          e.birthDate ? (e.age = getAge(e.birthDate)) : "";
        });
        this.patientInfoList = response.rows;
        this.total = response.total;
        this.loading = false;
      });
    },
    /** 搜索按钮操作 */
    handleQuery() {
      if (this.dischargeTime?.length > 0) {
        this.queryParams.dischargeTimeStart = this.dischargeTime[0];
        this.queryParams.dischargeTimeEnd = this.dischargeTime[1];
      } else {
        this.queryParams.dischargeTimeStart = null;
        this.queryParams.dischargeTimeEnd = null;
      }
      if (this.admissionTime?.length > 0) {
        this.queryParams.admissionTimeStart = this.admissionTime[0];
        this.queryParams.admissionTimeEnd = this.admissionTime[1];
      } else {
        this.queryParams.admissionTimeStart = null;
        this.queryParams.admissionTimeEnd = null;
      }
      if (this.signTime?.length > 0) {
        this.queryParams.signTimeStart = this.signTime[0];
        this.queryParams.signTimeEnd = this.signTime[1];
      } else {
        this.queryParams.signTimeStart = null;
        this.queryParams.signTimeEnd = null;
      }
      this.queryParams.pageNum = 1;
      this.getList();
    },
    /** 重置按钮操作 */
    resetQuery() {
      this.signTime = [];
      this.admissionTime = [];
      this.queryParams.signTimeStart = null;
      this.queryParams.signTimeEnd = null;
      this.queryParams.admissionTimeStart = null;
      this.queryParams.admissionTimeEnd = null;
      this.dischargeTime = [];
      this.queryParams.dischargeTimeStart = null;
      this.queryParams.dischargeTimeEnd = null;
      this.resetForm("queryForm");
      this.handleQuery();
    },
    selectAgencyinfo() {
      let query = {
        agencyStatus: "ON",
        nodeType: "HOSPITAL",
      };
      selectAgencyList(query).then((res) => {
        this.hospitalAgencylist = res.data;
      });
    },
    //获取下级单位
    getAgencyListinfo(nodeType, id) {
      let query = {
        nodeType: nodeType,
      };
      if (nodeType == "HOSPITAL") {
        query.hospitalId = id;
      } else if (nodeType == "CAMPUS") {
        query.campusId = id;
      } else if (nodeType == "DEPARTMENT") {
        query.departmentId = id;
      }
      getAgencyList(query).then((res) => {
        if (nodeType == "HOSPITAL") {
          this.campusAgencylist = res.data.campusList;
          this.departmentlist = res.data.departmentList;
        } else if (nodeType == "CAMPUS") {
          this.departmentlist = res.data.departmentList;
        }
        this.wardlist = res.data.wardList;
      });
    },
    //选中医院获取院区
    changehospitalAgency(id) {
      this.getAgencyListinfo("HOSPITAL", id);
      // let query = {
      //   agencyStatus: 'ON',
      //   nodeType: 'CAMPUS',
      //   parentId: id,
      // }
      // selectAgencyList(query).then(res => {
      //   this.campusAgencylist = res.data
      this.queryParams.campusAgencyId = null;
      this.queryParams.departmentId = null;
      this.queryParams.wardId = null;
      this.queryParams.attendingPhysicianId = null;
      // })
      //医生
      this.usergetListinfo();
      this.getMaxTableHeight();
    },
    //选中院区获取科室
    changecampusAgency(id) {
      this.getAgencyListinfo("CAMPUS", id);
      // let query = {
      //   nodeType: 'DEPARTMENT',
      //   hospitalAgencyId: id,
      // }
      // getDepartmentList(query).then(res => {
      //   this.departmentlist = res.data
      this.queryParams.departmentId = null;
      this.queryParams.wardId = null;
      // })
    },
    //选中科室获取病区
    changedepartment(id) {
      this.getAgencyListinfo("DEPARTMENT", id);
      // let query = {
      //   nodeType: 'WARD',
      //   parentDepartmentId: id,
      // }
      // getDepartmentList(query).then(res => {
      //   this.wardlist = res.data
      this.queryParams.wardId = null;
      // })
    },
    //清空医院
    clearhospitalAgency() {
      this.queryParams.campusAgencyId = null;
      this.queryParams.departmentId = null;
      this.queryParams.wardId = null;
      this.queryParams.attendingPhysicianId = null;
    },
    //清空院区
    clearcampusAgency() {
      this.queryParams.departmentId = null;
      this.queryParams.wardId = null;
      this.getAgencyListinfo("HOSPITAL", this.queryParams.hospitalAgencyId);
    },
    //清空科室
    cleardepartment() {
      this.queryParams.wardId = null;
      if (this.queryParams.departmentId) {
        this.getAgencyListinfo("DEPARTMENT", this.queryParams.departmentId);
      } else if (this.queryParams.campusAgencyId) {
        this.getAgencyListinfo("CAMPUS", this.queryParams.campusAgencyId);
      } else if (this.queryParams.hospitalAgencyId) {
        this.getAgencyListinfo("HOSPITAL", this.queryParams.hospitalAgencyId);
      }
    },
    // 获取表格最高高度
    getMaxTableHeight() {
      const windowInnerHeight = window.innerHeight; // 屏幕可视高度
      const layoutDiv = this.$refs.layout;
      const formDiv = this.$refs.topform;
      this.maxTableHeight =
        windowInnerHeight -
        134 -
        54 -
        this.getBoxPadding(layoutDiv) -
        this.getBoxHeight(formDiv);
    },
    // 屏幕resize监听
    screenChange() {
      // 屏幕resize监听事件：一旦屏幕宽高发生变化，就会执行resize
      window.addEventListener("resize", this.getMaxTableHeight, true);
      // 将屏幕监听事件移除
      // 这步是必须的。离开页面时不移除，再返回，或者进入到别的有相同元素的页面会报错
      // 或者将这里的方法直接写在beforeDestroy函数中也可以
      this.$once("hook:beforeDestroy", () => {
        window.removeEventListener("resize", this.getMaxTableHeight, true);
      });
    },
  },
};
</script>
<style lang="scss" scoped>
::v-deep .el-table {
  overflow: auto;
}

.app-container {
  padding-top: 0 !important;
}
</style>
