WXL
4 天以前 475a352a4bfd7ac3a81e8c7c92d3bb64e2e01037
src/views/project/DonationProcess/index.vue
@@ -1,87 +1,157 @@
<template>
  <div class="app-container">
    <el-form
      :model="queryParams"
      ref="queryForm"
      :inline="true"
      v-show="showSearch"
      label-width="70px"
    >
      <el-form-item label="姓名" prop="name">
        <el-input
          v-model="queryParams.name"
          placeholder="请输入姓名"
          clearable
          size="small"
          @keyup.enter.native="handleQuery"
        />
      </el-form-item>
    <!-- 搜索筛选区域 -->
    <el-card class="filter-card">
      <el-form
        :model="queryParams"
        ref="queryForm"
        :inline="true"
        v-show="showSearch"
        label-width="70px"
      >
        <el-form-item label="姓名" prop="name">
          <el-input
            v-model="queryParams.name"
            placeholder="请输入姓名"
            clearable
            size="small"
            @keyup.enter.native="handleQuery"
          />
        </el-form-item>
        <el-form-item label="证件号码" prop="idcardno">
          <el-input
            v-model="queryParams.idcardno"
            placeholder="请输入证件号码"
            clearable
            size="small"
            @keyup.enter.native="handleQuery"
          />
        </el-form-item>
        <el-form-item label="状态" prop="recordstate">
          <el-select
            v-model="queryParams.recordstate"
            placeholder="请选择状态"
            clearable
            size="small"
          >
            <el-option label="全部" value="" />
            <el-option label="维护中" value="0" />
            <el-option label="已完成" value="1" />
            <el-option label="已终止" value="99" />
          </el-select>
        </el-form-item>
      <el-form-item>
        <el-button
          type="primary"
          icon="el-icon-search"
          size="mini"
          @click="handleQuery"
          >搜索</el-button
        >
      </el-form-item>
    </el-form>
        <!-- 新增搜索字段 -->
        <el-form-item label="上报时间" prop="reportTimeRange">
          <el-date-picker
            v-model="queryParams.reportTimeRange"
            type="daterange"
            range-separator="至"
            start-placeholder="开始日期"
            end-placeholder="结束日期"
            value-format="yyyy-MM-dd"
            size="small"
            style="width: 240px;"
          />
        </el-form-item>
    <!-- <el-col :span="1.5">
        <el-button
          type="success"
          plain
          icon="el-icon-edit"
          size="mini"
          :disabled="single"
          @click="handleUpdate"
          v-hasPermi="['project:donatebaseinfo:edit']"
          >修改</el-button
        >
      </el-col> -->
        <el-form-item label="首诊医院" prop="treatmenthospitalname">
          <el-input
            v-model="queryParams.treatmenthospitalname"
            placeholder="请输入首诊医院"
            clearable
            size="small"
            @keyup.enter.native="handleQuery"
          />
        </el-form-item>
        <el-form-item label="住院号" prop="hospitalNo">
          <el-input
            v-model="queryParams.hospitalNo"
            placeholder="请输入住院号"
            clearable
            size="small"
            @keyup.enter.native="handleQuery"
          />
        </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>
    </el-card>
    <!-- 统计卡片 -->
    <el-row :gutter="20" class="stats-row">
      <el-col :span="6">
        <el-card class="stats-card total" shadow="hover">
          <div class="stat-content">
            <div class="stat-icon">📊</div>
            <div class="stat-info">
              <div class="stat-count">{{ stats.totalCount }}</div>
              <div class="stat-label">总捐献者</div>
            </div>
          </div>
        </el-card>
      </el-col>
      <el-col :span="6">
        <el-card class="stats-card pending" shadow="hover">
          <div class="stat-content">
            <div class="stat-icon">⏳</div>
            <div class="stat-info">
              <div class="stat-count">{{ stats.pendingCount }}</div>
              维护中
            </div>
          </div>
        </el-card>
      </el-col>
      <el-col :span="6">
        <el-card class="stats-card approved" shadow="hover">
          <div class="stat-content">
            <div class="stat-icon">✅</div>
            <div class="stat-info">
              <div class="stat-count">{{ stats.approvedCount }}</div>
              <div class="stat-label">已完成</div>
            </div>
          </div>
        </el-card>
      </el-col>
      <el-col :span="6">
        <el-card class="stats-card terminated" shadow="hover">
          <div class="stat-content">
            <div class="stat-icon">❌</div>
            <div class="stat-info">
              <div class="stat-count">{{ stats.terminatedCount }}</div>
              <div class="stat-label">已终止</div>
            </div>
          </div>
        </el-card>
      </el-col>
    </el-row>
    <!-- 数据表格 -->
    <el-table
      v-loading="loading"
      :data="donatebaseinfoList"
      @selection-change="handleSelectionChange"
      border
      :default-sort="{ prop: 'donatetime', order: 'descending' }"
      :default-sort="{ prop: 'reporttime', order: 'descending' }"
      style="width: 100%; margin-top: 20px;"
    >
      <!-- <el-table-column label="报告时间" align="center" prop="id" /> -->
      <!-- <el-table-column type="selection" width="55" align="center" /> -->
      <el-table-column
        label="案例时间"
        align="center"
        prop="donatetime"
        width="100"
      >
        <template slot-scope="scope">
          <span>{{ parseTime(scope.row.donatetime, "{y}-{m}-{d}") }}</span>
        </template>
      </el-table-column>
      <el-table-column label="姓名" align="center" prop="name" width="100" />
      <el-table-column
        label="证件号码"
        align="center"
        prop="idcardno"
        width="200"
      />
      <el-table-column label="部门名称" align="center" prop="deptname" />
      <el-table-column
        label="报告人"
        align="center"
        prop="reportername"
        width="100"
      />
      <el-table-column
        label="报告时间"
        label="上报时间"
        align="center"
        prop="reporttime"
        width="100"
        width="110"
        fixed="left"
      >
        <template slot-scope="scope">
          <span>{{ parseTime(scope.row.reporttime, "{y}-{m}-{d}") }}</span>
@@ -89,143 +159,205 @@
      </el-table-column>
      <el-table-column
        label="医学评估结论"
        label="捐献状态"
        align="center"
        prop="coreteamassessconclusion"
        prop="recordstate"
        width="100"
        fixed="left"
      >
        <template slot-scope="scope">
          <el-tag :type="getStatusTag(scope.row.recordstate)">
            {{ getStatusText(scope.row.recordstate) }}
          </el-tag>
        </template>
      </el-table-column>
      <el-table-column label="姓名" align="center" prop="name" width="100" />
      <el-table-column label="性别" align="center" prop="sex" width="80">
        <template slot-scope="scope">
          <span>{{ scope.row.sex === "1" ? "男" : "女" }}</span>
        </template>
      </el-table-column>
      <el-table-column label="年龄" align="center" prop="age" width="80" />
      <el-table-column label="血型" align="center" prop="bloodtype" width="80">
        <template slot-scope="scope">
          <dict-tag
            :options="dict.type.sys_BloodType"
            :value="scope.row.bloodtype"
          />
        </template>
      </el-table-column>
      <el-table-column
        label="传染病"
        align="center"
        prop="infectious"
        width="180"
      />
      <el-table-column
        label="首诊医院"
        align="center"
        prop="treatmenthospitalname"
        width="150"
      />
      <el-table-column
        label="协调员"
        align="center"
        prop="coordinatorName"
        width="100"
      />
      <el-table-column
        label="住院号"
        align="center"
        prop="hospitalNo"
        width="120"
      />
      <!-- 第一次医学评估 -->
      <el-table-column
        label="评估状态"
        align="center"
        prop="assessState"
        width="120"
      >
        <template slot-scope="scope">
          <dict-tag
            :options="dict.type.sys_BaseAssessConclusion"
            :value="scope.row.coreteamassessconclusion"
            :value="scope.row.assessState"
          />
        </template>
      </el-table-column>
      <el-table-column
        label="医学评估时间"
        label="评估时间"
        align="center"
        prop="coreteamassesstime"
        width="100"
        prop="assessTime"
        width="110"
      >
        <template slot-scope="scope">
          <span>{{
            parseTime(scope.row.coreteamassesstime, "{y}-{m}-{d}")
          }}</span>
        </template>
        <!-- <template slot-scope="scope">
          <span>{{ parseTime(scope.row.assessTime, "{y}-{m}-{d}") }}</span>
        </template> -->
      </el-table-column>
      <el-table-column
        label="亲属确认时间"
        align="center"
        prop="signdate"
        width="100"
        prop="signDate"
        width="110"
      >
        <template slot-scope="scope">
          <span>{{ parseTime(scope.row.signdate, "{y}-{m}-{d}") }}</span>
        </template>
        <!-- <template slot-scope="scope">
          <span>{{ parseTime(scope.row.signDate, "{y}-{m}-{d}") }}</span>
        </template> -->
      </el-table-column>
      <el-table-column
        label="伦理审查结论"
        align="center"
        prop="expertconclusion"
        width="100"
        prop="expertConclusion"
        width="120"
      >
        <template slot-scope="scope">
          <dict-tag
            :options="dict.type.sys_EthicalReview"
            :value="scope.row.expertconclusion"
            :value="scope.row.expertConclusion"
          />
        </template>
      </el-table-column>
      <el-table-column
        label="伦理审查时间"
        align="center"
        prop="conclusiontime"
        width="100"
        prop="expertTime"
        width="110"
      >
        <template slot-scope="scope">
          <span>{{ parseTime(scope.row.conclusiontime, "{y}-{m}-{d}") }}</span>
          <span>{{ parseTime(scope.row.expertTime, "{y}-{m}-{d}") }}</span>
        </template>
      </el-table-column>
      <el-table-column
        label="器官分配数量"
        align="center"
        prop="organcount"
        prop="organCount"
        width="100"
      />
      <el-table-column
        label="获取见证时间"
        align="center"
        prop="operationbegtime"
        width="100"
        prop="operationBegTime"
        width="110"
      >
        <template slot-scope="scope">
          <span>{{
            parseTime(scope.row.operationbegtime, "{y}-{m}-{d}")
            parseTime(scope.row.operationBegTime, "{y}-{m}-{d}")
          }}</span>
        </template>
      </el-table-column>
      <el-table-column
        label="完成登记时间"
        align="center"
        prop="completetime"
        width="100"
        prop="completeTime"
        width="110"
      >
        <template slot-scope="scope">
          <span>{{ parseTime(scope.row.completetime, "{y}-{m}-{d}") }}</span>
          <span>{{ parseTime(scope.row.completeTime, "{y}-{m}-{d}") }}</span>
        </template>
      </el-table-column>
      <!-- 捐献进度列 -->
      <el-table-column
        label="捐献进度"
        align="center"
        prop="workflow"
        prop="recordstate"
        width="120"
      >
        <template slot-scope="scope">
          <div v-if="!scope.row.terminationCase">
          <div v-if="scope.row.terminationCase == 0">
            <dict-tag
              :options="dict.type.sys_donornode"
              :value="scope.row.workflow"
              :value="scope.row.recordstate"
            />
          </div>
          <div v-else>任务终止</div>
          <div v-else>
            <el-tag type="danger">任务终止</el-tag>
          </div>
        </template>
      </el-table-column>
      <!-- <el-table-column
        label="操作"
        align="center"
        class-name="small-padding fixed-width"
        fixed="right"
      >
      <!-- 操作列:只保留终止和查看详情 -->
      <el-table-column label="操作" align="center" width="200" fixed="right">
        <template slot-scope="scope">
          <el-button size="mini" type="text" @click="handleDetail(scope.row)"
            >查看详情</el-button
          >
          <el-button
            size="mini"
            type="text"
            icon="el-icon-edit"
            @click="handleUpdate(scope.row)"
            v-hasPermi="['project:donatebaseinfo:edit']"
            >详情</el-button
            style="color: #f56c6c;"
            @click="handleTerminate(scope.row)"
            v-if="
              scope.row.terminationCase === 0 && scope.row.recordstate !== '99'
            "
            >终止</el-button
          >
          <el-button
            v-if="scope.row.recordstate == 0"
            size="mini"
            type="text"
            icon="el-icon-delete"
            @click="handleDelete(scope.row)"
            v-hasPermi="['project:donatebaseinfo:remove']"
            >删除</el-button
          >
          <el-button
            size="mini"
            type="text"
            icon="el-icon-refrigerator"
            @click="handledownload(scope.row)"
            >下载</el-button
            style="color: #67c23a;"
            @click="handleRestore(scope.row)"
            v-if="scope.row.terminationCase === 1"
            >恢复</el-button
          >
        </template>
      </el-table-column> -->
      </el-table-column>
    </el-table>
    <pagination
      v-show="total > 0"
      :total="total"
@@ -233,864 +365,337 @@
      :limit.sync="queryParams.pageSize"
      @pagination="getList"
    />
    <!-- 详情弹框 -->
    <el-dialog
      :title="`捐献者详情 - ${currentRecord.name || ''}`"
      :visible.sync="detailVisible"
      width="1000px"
      append-to-body
    >
      <donor-detail :donorData="currentRecord" @close="detailVisible = false" />
    </el-dialog>
    <!-- 终止/恢复弹框组件 -->
    <terminate-restore-modal
      :current-record="currentRecord"
      :visible="modalVisible"
      :titles="modalTitles"
      @update:visible="handleModalVisibleChange"
      @operation-success="handleOperationSuccess"
    />
  </div>
</template>
<script>
import { getUserProfile } from "@/api/system/user";
import {
  listDonationProcess,
  getDonatebaseinfo,
  delDonatebaseinfo,
  addDonatebaseinfo,
  updateDonatebaseinfo,
  exportDonatebaseinfo,
  downloadbaseinfo,
  getDonationNumber,
  getdonatorno
} from "@/api/project/donatebaseinfo";
import Li_area_select from "@/components/Address";
import OrgSelecter from "@/views/project/components/orgselect";
import AnnexUpload from "@/views/project/components/annexupload";
import ReportName from "@/views/project/components/organizationUser";
import { getToken } from "@/utils/auth";
import {
  listOrganization,
  getOrganization,
  listReportname,
  listUser
} from "@/api/project/organization";
import { courselist, terminateDonor } from "@/api/businessApi";
import TerminateRestoreModal from "@/components/TerminateRestoreModal";
export default {
  components: {
    Li_area_select,
    OrgSelecter,
    AnnexUpload,
    ReportName
  },
  name: "Donatebaseinfo",
  dicts: ["sys_donornode", "sys_EthicalReview", "sys_BaseAssessConclusion"],
  components: {
    TerminateRestoreModal
  },
  dicts: ["sys_donornode",'sys_BloodType', "sys_EthicalReview", "sys_BaseAssessConclusion"],
  data() {
    return {
      tempRecordState: null,
      approvalState: false,
      countyname: "",
      cuuntry: "",
      organizationname: "",
      selecttime: "",
      //省市区
      //默认值设置,可为空
      searchAddress: {
        sheng: "",
        shi: "",
        qu: "",
        organizationname: null
      },
      residenceAddresss: {
        sheng: "浙江省",
        shi: "",
        qu: ""
      },
      registerAddresss: {
        sheng: "浙江省",
        shi: "",
        qu: ""
      },
      terminationCaselist: [
        { name: "终止状态", value: 1 },
        { name: "正常状态", value: 0 }
      ],
      // 遮罩层
      loading: true,
      // 导出遮罩层
      exportLoading: false,
      // 选中数组
      ids: [],
      // 非单个禁用
      single: true,
      // 非多个禁用
      multiple: true,
      loading: false,
      // 显示搜索条件
      showSearch: true,
      // 总条数
      total: 0,
      // 捐献基础表格数据
      donatebaseinfoList: [],
      // 弹出层标题
      title: "",
      // 是否显示弹出层
      open: false,
      // 获取组织名称时间范围
      daterangeReporttime: [],
      // 详情弹框显示
      detailVisible: false,
      // 当前操作记录
      currentRecord: {},
      // 统计数据
      stats: {
        totalCount: 0,
        pendingCount: 0,
        approvedCount: 0,
        terminatedCount: 0
      },
      // 查询参数
      queryParams: {
        pageNum: 1,
        pageSize: 10,
        donorno: null,
        recordstate: null,
        // treatmenthospitalno: null,
        treatmenthospitalname: null,
        name: null,
        residenceprovince: null,
        residencecity: null,
        residencetown: null,
        starttime: null,
        endtime: null,
        city: null,
        reportno: null
        // organizationname: null,
        // organizationtype: null,
        // idcardno: null,
        // reporterno: null,
        // reporttime: null,
        name: undefined,
        idcardno: undefined,
        recordstate: undefined,
        // 新增的搜索字段
        reportTimeRange: [],
        treatmenthospitalname: undefined,
        hospitalNo: undefined
      },
      // 表单参数
      form: {
        id: null,
        name: null,
        sex: null,
        idcardtype: null,
        idcardno: null,
        age: null,
        ageunit: null,
        birthday: null,
        phone: null,
        residenceaddress: null,
        nationality: "中国",
        nativeplace: null,
        residenceprovince: null,
        nation: null,
        residenceprovincename: null,
        occupation: null,
        residencecity: null,
        education: null,
        residencecityname: null,
        residencetown: null,
        residencetownname: null,
        residencecommunity: null,
        residencecommunityname: null,
        residencecountycode: null,
        residencecountyname: null,
        registeraddress: null,
        registerprovince: null,
        registerprovincename: null,
        registercity: null,
        registercityname: null,
        registertown: null,
        registertownname: null,
        registercommunity: null,
        registercommunityname: null,
        registercountycode: null,
        registercountyname: null,
        recordstate: null,
        treatmenthospitalno: null,
        treatmenthospitalname: null,
        treatmentdeptname: null,
        diagnosisno: null,
        diagnosisname: null,
        bloodtype: "0",
        inpatientno: null,
        rhyin: "0",
        donorno: null,
        donationcategory: null,
        illnessoverview: null,
        diseasetype: [],
        infectious: [],
        selfwill: [],
        diseasetypeOther: null,
        othercases: [],
        kinshipwill: 0,
        infosources: [],
        kinship: [],
        redorganno: null,
        redorganname: null,
        contactperson: null,
        infectiousOther: null,
        contactnumber: null,
        contacttime: null,
        reporterno: null,
        reportername: null,
        patientstate: [],
        reporterphone: null,
        infosourcesOther: null,
        reporttime: null,
        delFlag: null,
        createBy: null,
        createTime: null,
        updateBy: null,
        updateTime: null,
        kinshipOther: null,
        majorrelatives: null,
        familyrelations: null,
        acquisitiontissueno: "ZJOPO",
        acquisitiontissuename: "浙江省人体器官获取组织"
      // 弹框显示状态
      modalVisible: {
        terminate: false,
        restore: false
      },
      //ads
      reporters: [],
      users: [],
      //是否显示保存按钮
      showSaveBtn: true,
      showTerminationBtn: false,
      //流程名称
      flowname: "潜在捐献登记",
      annexno: "PotentialDonationRegistration",
      starttime: "",
      endtime: "",
      reportlist: [],
      reportervalue: "",
      headers: {
        Authorization: "Bearer " + getToken()
      // 弹框标题
      modalTitles: {
        terminate: "终止捐献进程",
        restore: "恢复捐献进程"
      }
    };
  },
  created() {
    if (sessionStorage.getItem("donatebaseinfo")) {
      this.queryParams = JSON.parse(sessionStorage.getItem("donatebaseinfo"));
      console.log(this.queryParams, "queryParams");
    }
  },
  mounted(e) {
    // let idd = this.$route.query.userid
    // console.log('chuanzhi',idd);
    this.LoadReportList();
    if (this.$route.params.starttime != null && this.$route.params.endtime) {
      this.selecttime = [
        this.$moment(this.$route.params.starttime).format("YYYY-MM-DD"),
        this.$moment(this.$route.params.endtime).format("YYYY-MM-DD")
      ];
    }
    if (this.$route.params.reporterno != "") {
      this.reporterno = this.$route.params.reporterno;
    }
    if (
      this.$route.params.tempRecordState != "" &&
      this.$route.params.tempRecordState != undefined
    ) {
      this.queryParams.recordstate = "" + this.$route.params.tempRecordState;
    }
    if (this.$route.params.reporterno != "") {
      this.reportervalue = this.$route.params.reporterno;
    }
    if (!this.$route.params.shen != "") {
      this.searchAddress.sheng = this.$route.params.shen;
      if (!this.$route.params.shi != "") {
        this.searchAddress.shi = this.$route.params.shi;
      }
      if (!this.$route.params.qu) {
        this.searchAddress.qu = this.$route.params.qu;
      }
    }
    if (this.$route.params.city != "") {
      this.queryParams.regionalLevel = this.$route.params.city;
    } else {
      this.queryParams.regionalLevel = "";
    }
    this.getTimeList();
    this.getList();
  },
  methods: {
    LoadReportList() {
      listDonationProcess().then(res => {
        let list = res.rows;
        let reportlist = [];
        reportlist.push({ reporterno: "", reportername: "全部" });
        list.forEach(element => {
          reportlist.push({
            reporterno: element.reporterno,
            reportername: element.reportername
          });
        });
        if (reportlist != 0) {
          reportlist = this.resetArr(reportlist);
          this.reportlist = reportlist;
        }
      });
    },
    resetArr(Arr) {
      var hash = {};
      Arr = Arr.reduce(function(arr, current) {
        hash[current.reporterno]
          ? ""
          : (hash[current.reporterno] = true && arr.push(current));
        return arr;
      }, []);
      return Arr;
    },
    getTimeList(e) {
      console.log(this.selecttime);
      if (this.selecttime != null) {
        if (this.selecttime != 0) {
          this.endtime = this.selecttime[1];
          this.starttime = this.selecttime[0];
          // if (this.endtime == this.starttime) {
          let num = Number(this.endtime.slice(5, 7));
          if (num < 9) {
            let mon = Number(this.endtime.slice(6, 7));
            this.endtime =
              this.endtime.slice(0, 5) +
              "0" +
              (mon + 1) +
              "-" +
              "01" +
              " " +
              "00" +
              ":" +
              "00" +
              ":" +
              "00";
          }
          // this.endtime=this.endtime.slice(0,5)年
          else if (num >= 10) {
            this.endtime =
              this.endtime.slice(0, 5) +
              (num + 1) +
              "-" +
              "01" +
              " " +
              "00" +
              ":" +
              "00" +
              ":" +
              "00";
          } else {
            this.endtime =
              this.endtime.slice(0, 5) +
              "10" +
              "-" +
              "01" +
              " " +
              "00" +
              ":" +
              "00" +
              ":" +
              "00";
          }
          this.starttime =
            this.starttime + " " + "00" + ":" + "00" + ":" + "00";
          // }
        } else {
          this.starttime = "1998-01-01 00:00:00";
          this.endtime = "2998-01-01 00:00:00";
        }
      } else {
        this.starttime = "1998-01-01 00:00:00";
        this.endtime = "2998-01-01 00:00:00";
      }
    },
    handleapproval(row) {
      this.$confirm("是否确认将案例上报审核?", "提示", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning"
      })
        .then(() => {
          row.recordstate = 1;
          updateDonatebaseinfo(row).then(response => {
            this.$modal.msgSuccess("上报审核成功");
            this.getList();
          });
        })
        .catch(() => {
          this.$message({
            type: "info",
            message: "已取消上报"
          });
        });
    },
    resetapproval(row) {
      this.approvalState = false;
      //  this.reset();
      // const id = row.id || this.ids;
      updateDonatebaseinfo(row).then(response => {
        row.recordstate = 0;
      });
    },
    updateMessage() {
      try {
        const reg = /^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/;
        if (reg.test(this.form.idcardno)) {
          // 身份证号码是否合法
          var org_birthday = this.form.idcardno.substring(6, 14);
          var org_gender = this.form.idcardno.substring(16, 17);
          var sex = org_gender % 2 == 1 ? 1 : 2;
          var birthday =
            org_birthday.substring(0, 4) +
            "-" +
            org_birthday.substring(4, 6) +
            "-" +
            org_birthday.substring(6, 8);
          var birthdays = new Date(birthday.replace(/-/g, "/"));
          let d = new Date();
          let age =
            d.getFullYear() -
            birthdays.getFullYear() -
            (d.getMonth() < birthdays.getMonth() ||
            (d.getMonth() == birthdays.getMonth() &&
              d.getDate() < birthdays.getDate())
              ? 1
              : 0);
          // 赋值给表格
          this.form.sex = sex;
          this.form.birthday = birthday;
          this.form.age = age;
        } else {
        }
      } catch {}
    },
    // sheng: '浙江省',
    //   shi: '',
    //   qu: '',
    // 身份证验证
    //根据身份证号自动生成性别、出生日期和年龄
    inputChange() {
      const idCard = this.props.form.getFieldValue("idCard");
      let birthday = "";
      let sex = "0";
      if (idCard.length === 15) {
        birthday = `19${idCard.substring(6, 8)}-${idCard.substring(
          9,
          10
        )}-${idCard.substring(11, 12)}`;
        sex = idCard[14] % 2 === 0 ? "0" : "1";
      } else {
        birthday = `${idCard.substring(6, 10)}-${idCard.substring(
          11,
          12
        )}-${idCard.substring(13, 14)}`;
        sex = idCard[16] % 2 === 0 ? "0" : "1";
      }
      this.setState({
        birthday,
        sex
      });
    },
    /** 查询捐献基础列表 */
    getList() {
    /** 查询捐献基础列表 */
    async getList() {
      this.loading = true;
      try {
        const response = await courselist(this.queryParams);
      // 跳转时的默认进度
      if (this.reportervalue != "") {
        this.queryParams.reportno = this.reportervalue;
      }
      if (this.starttime != "") {
        this.queryParams.starttime = this.starttime;
      } else {
        this.queryParams.starttime = "";
      }
      if (this.endtime != "") {
        this.queryParams.endtime = this.endtime;
      } else {
        this.queryParams.endtime = "";
      }
      console.log(this.queryParams);
      listDonationProcess(this.queryParams).then(response => {
        this.donatebaseinfoList = response.rows;
        //console.log("listDonationProcess", response.rows);
        let realData = [];
        realData = response.data.donatebaseinfoProgressDTOS;
        this.total = response.total;
        this.loading = false;
      });
    },
    // 取消按钮
    cancel() {
      this.open = false;
      this.reset();
    },
    // 表单重置
    reset() {
      this.form = {
        id: null,
        name: null,
        sex: null,
        idcardtype: null,
        idcardno: null,
        age: null,
        ageunit: null,
        birthday: null,
        phone: null,
        residenceaddress: null,
        nationality: "中国",
        nativeplace: null,
        residenceprovince: null,
        nation: null,
        residenceprovincename: null,
        occupation: null,
        residencecity: null,
        education: null,
        residencecityname: null,
        residencetown: null,
        residencetownname: null,
        residencecommunity: null,
        residencecommunityname: null,
        residencecountycode: null,
        residencecountyname: null,
        registeraddress: null,
        registerprovince: null,
        registerprovincename: null,
        registercity: null,
        registercityname: null,
        registertown: null,
        registertownname: null,
        registercommunity: null,
        registercommunityname: null,
        registercountycode: null,
        registercountyname: null,
        recordstate: null,
        treatmenthospitalno: null,
        treatmenthospitalname: null,
        treatmentdeptname: null,
        diagnosisno: null,
        diagnosisname: null,
        bloodtype: "0",
        inpatientno: null,
        rhyin: 0,
        donorno: null,
        donationcategory: null,
        illnessoverview: null,
        diseasetype: [],
        infectious: [],
        selfwill: [],
        diseasetypeOther: null,
        othercases: [],
        kinshipwill: 0,
        infosources: [],
        kinship: [],
        redorganno: null,
        redorganname: null,
        contactperson: null,
        infectiousOther: null,
        contactnumber: null,
        contacttime: null,
        reporterno: null,
        reportername: null,
        patientstate: [],
        reporterphone: null,
        infosourcesOther: null,
        reporttime: null,
        delFlag: null,
        createBy: null,
        createTime: null,
        updateBy: null,
        updateTime: null,
        kinshipOther: null,
        majorrelatives: null,
        familyrelations: null,
        acquisitiontissueno: "ZJOPO",
        acquisitiontissuename: "浙江省人体器官获取组织"
      };
        this.stats.pendingCount = response.data.terminationCase[0];
        this.stats.approvedCount = response.data.terminationCase[1];
        this.stats.terminatedCount = response.data.terminationCase[2];
        this.stats.totalCount =
          response.total - response.data.terminationCase[2];
      this.resetForm("form");
        this.allTableData = realData;
        let filteredData = this.applyFrontendFilter(realData);
        if (!response.total && !response.data) {
          const startIndex =
            (this.queryParams.pageNum - 1) * this.queryParams.pageSize;
          const endIndex = startIndex + this.queryParams.pageSize;
          this.donatebaseinfoList = filteredData.slice(startIndex, endIndex);
          this.total = filteredData.length;
        } else {
          this.donatebaseinfoList = filteredData;
        }
      } catch (error) {
        console.error("获取数据失败:", error);
        this.$message.error("数据加载失败");
        this.donatebaseinfoList = [];
        this.total = 0;
      } finally {
        this.loading = false;
      }
    },
    /** 应用前端筛选 */
    applyFrontendFilter(data) {
      let filteredData = data;
      if (this.queryParams.name) {
        filteredData = filteredData.filter(
          item => item.name && item.name.includes(this.queryParams.name)
        );
      }
      if (this.queryParams.idcardno) {
        filteredData = filteredData.filter(
          item =>
            item.idcardno && item.idcardno.includes(this.queryParams.idcardno)
        );
      }
      if (this.queryParams.recordstate) {
        filteredData = filteredData.filter(
          item => item.recordstate === this.queryParams.recordstate
        );
      }
      if (this.queryParams.treatmenthospitalname) {
        filteredData = filteredData.filter(
          item =>
            item.treatmenthospitalname &&
            item.treatmenthospitalname.includes(
              this.queryParams.treatmenthospitalname
            )
        );
      }
      if (this.queryParams.hospitalNo) {
        filteredData = filteredData.filter(
          item =>
            item.hospitalNo &&
            item.hospitalNo.includes(this.queryParams.hospitalNo)
        );
      }
      if (
        this.queryParams.reportTimeRange &&
        this.queryParams.reportTimeRange.length === 2
      ) {
        const [startTime, endTime] = this.queryParams.reportTimeRange;
        filteredData = filteredData.filter(item => {
          if (!item.reporttime) return false;
          const reportDate = this.parseTime(item.reporttime, "{y}-{m}-{d}");
          return reportDate >= startTime && reportDate <= endTime;
        });
      }
      return filteredData;
    },
    /** 获取状态标签样式 */
    getStatusTag(status) {
      const statusMap = {
        "0": "warning", // 维护中
        "1": "success", // 已完成
        "99": "danger" // 已终止
      };
      return statusMap[status] || "info";
    },
    /** 获取状态文本 */
    getStatusText(status) {
      const textMap = {
        "0": "维护中",
        "1": "已完成",
        "99": "已终止"
      };
      return textMap[status] || "未知状态";
    },
    /** 时间格式化 */
    parseTime(time, format) {
      if (!time) return "-";
      const date = new Date(time);
      if (isNaN(date.getTime())) return time;
      const year = date.getFullYear();
      const month = (date.getMonth() + 1).toString().padStart(2, "0");
      const day = date
        .getDate()
        .toString()
        .padStart(2, "0");
      if (format === "{y}-{m}-{d}") {
        return `${year}-${month}-${day}`;
      }
      return time;
    },
    /** 搜索按钮操作 */
    handleQuery() {
      this.queryParams.pageNum = 1;
      this.getList();
    },
    /** 重置按钮操作 */
    resetQuery() {
      this.daterangeReporttime = [];
      this.reportervalue = "";
      this.queryParams = {
        doname: null,
        pageNum: 1,
        pageSize: 10,
        name: null,
        idcardno: null,
        residenceprovince: null,
        residencecity: null,
        residencetown: null,
        // "2"
        recordstate: null,
        treatmenthospitalname: null,
        donorno: null,
        acquisitiontissueno: null,
        reportername: null,
        reporttime: null,
        city: null,
        treatmenthospitalno: null
      };
      this.selecttime = [];
      this.getTimeList();
      this.searchAddress = {
        sheng: "",
        shi: "",
        qu: "",
        organizationname: null
      };
      //this.$refs.areaSelect.clean();
      this.resetForm("queryForm");
      this.handleQuery();
    },
    // 多选框选中数据
    handleSelectionChange(selection) {
      this.ids = selection.map(item => item.id);
      this.single = selection.length !== 1;
      this.multiple = !selection.length;
      this.$refs.queryForm.resetFields();
      this.queryParams.pageNum = 1;
      this.getList();
    },
    /** 修改按钮操作 */
    handleUpdate(row) {
      this.$router.push({
        path: "/organ/donationdetails/",
        query: {
          id: row.id,
          organType: "edit"
        }
      });
      // this.showSaveBtn = true;
      // const id = row.id || this.ids;
      // //this.$refs.annex.getAnnexList();
      // getDonatebaseinfo(id).then((response) => {
      //   this.reset();
      //   this.$nextTick(function () {
      //     this.$refs.annex.getAnnexList();
      //   });
      //   this.form = response.data;
      //   response.data.sex = parseInt(response.data.sex);
      //   this.form.id = response.data.id;
      //   this.form.diseasetype = this.form.diseasetype.split(",");
      //   this.form.infectious = this.form.infectious.split(",");
      //   this.form.selfwill = this.form.selfwill.split(",");
      //   this.form.othercases = this.form.othercases.split(",");
      //   this.form.infosources = this.form.infosources.split(",");
      //   this.form.kinship = this.form.kinship.split(",");
      //   this.form.patientstate = this.form.patientstate.split(",");
      //   this.open = true;
      //   this.title = "人体器官潜在捐献者登记表";
      //   this.registerAddresss.sheng = response.data.registerprovincename;
      //   this.residenceAddresss.sheng = response.data.residenceprovincename;
      //   this.registerAddresss.shi = response.data.registercityname;
      //   this.residenceAddresss.shi = response.data.residencecityname;
      //   this.residenceAddresss.qu = response.data.residencetownname;
      //   this.registerAddresss.qu = response.data.registertownname;
      // });
    },
    // 终止案例
    handletermination(row) {
      this.reset();
      this.showSaveBtn = false;
      this.showTerminationBtn = true;
      const id = row.id || this.ids;
      getDonatebaseinfo(id).then(response => {
        this.form = response.data;
        this.form.diseasetype = this.form.diseasetype.split(",");
        this.form.infectious = this.form.infectious.split(",");
        this.form.selfwill = this.form.selfwill.split(",");
        this.form.othercases = this.form.othercases.split(",");
        this.form.infosources = this.form.infosources.split(",");
        this.form.kinship = this.form.kinship.split(",");
        this.form.patientstate = this.form.patientstate.split(",");
        this.registerAddresss.sheng = response.data.registerprovincename;
        this.residenceAddresss.sheng = response.data.residenceprovincename;
        this.registerAddresss.shi = response.data.registercityname;
        this.residenceAddresss.shi = response.data.residencecityname;
        this.residenceAddresss.qu = response.data.residencetownname;
        this.registerAddresss.qu = response.data.registertownname;
        this.open = true;
        this.title = "人体器官潜在捐献者登记表";
        this.form.recordstate = 99;
        // this.$nextTick(function() {
        //   this.$refs.annex.getAnnexList();
        // });
      });
    },
    /** 提交按钮 */
    submitForm() {
      console.log(this.form);
      this.$refs["form"].validate(valid => {
        if (valid) {
          const date = { ...this.form };
          console.log(date, "date");
          this.form.birthday = this.$moment(this.form.birthday).format(
            "YYYY-MM-DD HH:mm:ss"
          );
          this.form.diseasetype = this.form.diseasetype.join(",");
          this.form.infectious = this.form.infectious.join(",");
          this.form.selfwill = this.form.selfwill.join(",");
          this.form.othercases = this.form.othercases.join(",");
          this.form.infosources = this.form.infosources.join(",");
          this.form.kinship = this.form.kinship.join(",");
          this.form.patientstate = this.form.patientstate.join(",");
          this.form.registerprovince = this.$refs.registerSelect.getSheng();
          this.form.registerprovincename = this.registerAddresss.sheng;
          this.form.residenceprovince = this.$refs.residenceSelect.getSheng();
          this.form.residenceprovincename = this.residenceAddresss.sheng;
          this.form.registercity = this.$refs.registerSelect.getShi();
          this.form.registercityname = this.registerAddresss.shi;
          this.form.residencecity = this.$refs.residenceSelect.getShi();
          this.form.residencecityname = this.residenceAddresss.shi;
          this.form.residencetown = this.$refs.residenceSelect.getQu();
          this.form.residencetownname = this.residenceAddresss.qu;
          this.form.registertown = this.$refs.registerSelect.getQu();
          this.form.registertownname = this.registerAddresss.qu;
          this.form.reportername = this.$refs.getReportname.$data.selectedLabel;
          this.form.donatetime = this.form.reporttime;
          try {
            this.form.treatmenthospitalname = this.$refs.addOrgSelect.getOptionByValue(
              this.form.treatmenthospitalno
            ).organizationname;
          } catch {
            this.form.treatmenthospitalname = this.form.treatmenthospitalno;
          }
          try {
            this.form.redorganname = this.$refs.addCrossOrgSelect.getOptionByValue(
              this.form.redorganno
            ).organizationname;
          } catch {
            this.form.redorganname = this.form.redorganno;
          }
          this.form.workflow = 0;
          this.form.recordstate = 0;
          addDonatebaseinfo(this.form).then(res => {
            console.log("22");
            console.log(res.code);
            if (res.code == 200) {
              this.$modal.msgSuccess("新增成功");
              this.$router.push({
                path: "/organ/donationdetails/",
                query: {
                  id: res.data.id,
                  organType: "edit"
                }
              });
              this.open = false;
            } else {
              console.log("1");
              this.form = date;
              console.log(this.form, "form");
              this.$modal.msgError("新增失败:" + res.msg);
            }
          });
        }
      });
    },
    /** 删除按钮操作 */
    handleDelete(row) {
      const ids = row.id || this.ids;
      this.$modal
        .confirm('是否确认删除捐献基础编号为"' + ids + '"的数据项?')
        .then(function() {
          return delDonatebaseinfo(ids);
        })
        .then(() => {
          this.getList();
          this.$modal.msgSuccess("删除成功");
        })
        .catch(() => {});
    /** 查看详情 */
    handleDetail(row) {
      this.currentRecord = { ...row };
      this.detailVisible = true;
    },
    /** 导出按钮操作 */
    handleExport() {
      const queryParams = this.queryParams;
      this.$modal
        .confirm("是否确认导出所有捐献基础数据项?")
        .then(() => {
          this.exportLoading = true;
          return exportDonatebaseinfo(queryParams);
        })
        .then(response => {
          this.$download.name(response.msg);
          this.exportLoading = false;
        })
        .catch(() => {});
    /** 终止操作 */
    handleTerminate(row) {
      this.currentRecord = { ...row };
      this.modalVisible = { ...this.modalVisible, terminate: true };
    },
    // 对象转成指定字符串分隔
    listToString(list, separator) {
      let strs = "";
      separator = separator || ",";
      for (let i in list) {
        strs += list[i] + separator;
      }
      return strs != "" ? strs.substr(0, strs.length - 1) : "";
    },
    //字符串根据指定字符串分隔
    stringToList(str, separator) {
      separator = separator || ",";
      let tempList = [];
      if (str != null && str != undefined && str != "") {
        tempList = str.split(separator);
      }
      return tempList;
    /** 恢复操作 */
    handleRestore(row) {
      this.currentRecord = { ...row };
      this.modalVisible = { ...this.modalVisible, restore: true };
    },
    //下载潜在登记表
    handledownload(row) {
      const id = row.id || this.ids;
    /** 处理弹框显示状态变化 */
    handleModalVisibleChange(newVisible) {
      this.modalVisible = { ...newVisible };
    },
      downloadbaseinfo(id).then(res => {
        var fileUrl = res;
        //获取当前网址
        var urlBase = process.env.VUE_APP_BASE_API;
        var curWWWPath = window.document.location.href;
        var pos = curWWWPath.indexOf(window.document.location.pathname);
        // 创建a标签
        var aEle = document.createElement("a");
        aEle.href =
          curWWWPath.substring(0, pos) + urlBase + fileUrl["downloadUrl"];
        console.log(aEle.href);
        // 添加Authorization头部
        fetch(aEle.href, {
          headers: this.headers
        })
          .then(response => {
            // 将文件下载链接作为blob对象进行下载
            return response.blob();
          })
          .then(blob => {
            const url = window.URL.createObjectURL(new Blob([blob]));
            console.log(url);
            const link = document.createElement("a");
            link.href = url;
            const name = fileUrl["downloadName"];
            link.setAttribute("download", name); // 替换file.pdf为实际的文件名
            document.body.appendChild(link);
            link.click();
            link.parentNode.removeChild(link);
          });
      });
    /** 处理操作成功 */
    handleOperationSuccess({ type, record }) {
      console.log(`${type}操作成功:`, record);
      this.getList(); // 重新加载数据
    }
  }
};
</script>
<style scoped>
::v-deep .el-dialog__header {
  padding-top: 40px !important;
  margin: auto !important;
  padding-bottom: 0px !important;
.filter-card {
  margin-bottom: 20px;
}
.stats-row {
  margin-bottom: 20px;
}
.stats-card {
  border-radius: 8px;
  transition: all 0.3s ease;
}
.stats-card:hover {
  transform: translateY(-2px);
}
.stats-card.total {
  border-left: 4px solid #409eff;
}
.stats-card.pending {
  border-left: 4px solid #e6a23c;
}
.stats-card.approved {
  border-left: 4px solid #67c23a;
}
.stats-card.terminated {
  border-left: 4px solid #f56c6c;
}
.stat-content {
  display: flex;
  align-items: center;
  padding: 10px;
}
.stat-icon {
  font-size: 32px;
  margin-right: 15px;
}
.stat-info {
  flex: 1;
}
.stat-count {
  font-size: 24px;
  font-weight: bold;
  color: #303133;
  margin-bottom: 5px;
}
.stat-label {
  font-size: 14px;
  color: #909399;
}
/* 表格样式优化 */
::v-deep .el-table .cell {
  padding: 8px 4px;
}
::v-deep .el-table th {
  background-color: #f5f7fa;
  font-weight: bold;
}
/* 操作按钮样式 */
::v-deep .el-button--text {
  padding: 4px 8px;
}
</style>