WXL
2026-01-28 bcb9976e7680ce67fadb6fec7ab5fca36552cdbc
src/views/business/decide/index.vue
@@ -8,27 +8,27 @@
        :inline="true"
        label-width="100px"
      >
        <el-form-item label="住院号" prop="hospitalNo">
        <el-form-item label="住院号" prop="inpatientno">
          <el-input
            v-model="queryParams.hospitalNo"
            v-model="queryParams.inpatientno"
            placeholder="请输入住院号"
            clearable
            style="width: 200px"
            @keyup.enter.native="handleQuery"
          />
        </el-form-item>
        <el-form-item label="捐献者姓名" prop="donorName">
        <el-form-item label="捐献者姓名" prop="name">
          <el-input
            v-model="queryParams.donorName"
            v-model="queryParams.name"
            placeholder="请输入捐献者姓名"
            clearable
            style="width: 200px"
            @keyup.enter.native="handleQuery"
          />
        </el-form-item>
        <el-form-item label="死亡原因" prop="deathReason">
        <el-form-item label="死亡原因" prop="deathreason">
          <el-select
            v-model="queryParams.deathReason"
            v-model="queryParams.deathreason"
            placeholder="请选择死亡原因"
            clearable
            style="width: 200px"
@@ -73,13 +73,6 @@
            >修改</el-button
          >
          <el-button
            type="danger"
            icon="el-icon-delete"
            :disabled="multiple"
            @click="handleDelete"
            >删除</el-button
          >
          <el-button
            type="warning"
            icon="el-icon-download"
            @click="handleExport"
@@ -103,95 +96,114 @@
      >
        <el-table-column type="selection" width="55" align="center" />
        <el-table-column
          label="案例编号"
          align="center"
          prop="caseNo"
          width="120"
        />
        <el-table-column
          label="住院号"
          align="center"
          prop="hospitalNo"
          prop="inpatientno"
          width="120"
        />
        <el-table-column
          label="捐献者姓名"
          align="center"
          prop="donorName"
          prop="name"
          width="120"
        />
        <el-table-column label="性别" align="center" prop="gender" width="80">
        <el-table-column label="性别" align="center" prop="sex" width="80">
          <template slot-scope="scope">
            <dict-tag
              :options="dict.type.sys_user_sex"
              :value="parseInt(scope.row.gender)"
              :value="scope.row.sex"
            />
          </template>
        </el-table-column>
        <el-table-column label="年龄" align="center" prop="age" width="80" />
        <el-table-column
          label="治疗医院"
          align="center"
          prop="treatmenthospitalname"
          width="180"
          show-overflow-tooltip
        />
        <el-table-column
          label="疾病诊断"
          align="center"
          prop="diagnosis"
          min-width="180"
          prop="diagnosisname"
          min-width="200"
          show-overflow-tooltip
        />
        <el-table-column
          label="死亡原因"
          align="center"
          prop="deathReason"
          prop="deathreason"
          width="120"
        >
          <template slot-scope="scope">
            <el-tag :type="reasonFilter(scope.row.deathReason)">
              {{ reasonTextFilter(scope.row.deathReason) }}
            <el-tag :type="reasonFilter(scope.row.deathreason)">
              {{ reasonTextFilter(scope.row.deathreason) }}
            </el-tag>
          </template>
        </el-table-column>
        <el-table-column
          label="死亡时间"
          align="center"
          prop="deathTime"
          prop="deathtime"
          width="160"
        >
          <template slot-scope="scope">
            <span>{{
              scope.row.deathTime
                ? parseTime(scope.row.deathTime, "{y}-{m}-{d} {h}:{i}")
              scope.row.deathtime
                ? parseTime(scope.row.deathtime, "{y}-{m}-{d} {h}:{i}")
                : "-"
            }}</span>
          </template>
        </el-table-column>
        <el-table-column
          label="判定医生"
          label="判定医生一"
          align="center"
          prop="judgmentDoctor"
          prop="deathjudgedocto"
          width="120"
        />
          <el-table-column
          label="判定医生二"
          align="center"
          prop="judgmentDoctortwo"
          prop="deathjudgedoctt"
          width="120"
        />
        <el-table-column
          label="登记时间"
          label="记录状态"
          align="center"
          prop="registrationTime"
          prop="recordstate"
          width="100"
        >
          <template slot-scope="scope">
            <el-tag :type="statusFilter(scope.row.recordstate)">
              {{ statusTextFilter(scope.row.recordstate) }}
            </el-tag>
          </template>
        </el-table-column>
        <el-table-column
          label="创建时间"
          align="center"
          prop="createTime"
          width="160"
        >
          <template slot-scope="scope">
            <span>{{
              scope.row.registrationTime
                ? parseTime(scope.row.registrationTime, "{y}-{m}-{d} {h}:{i}")
              scope.row.createTime
                ? parseTime(scope.row.createTime, "{y}-{m}-{d} {h}:{i}")
                : "-"
            }}</span>
          </template>
        </el-table-column>
        <el-table-column
          label="登记人"
          align="center"
          prop="registrant"
          width="100"
        />
        <el-table-column
          label="操作"
          align="center"
          width="210"
          width="180"
          class-name="small-padding fixed-width"
        >
          <template slot-scope="scope">
@@ -208,14 +220,6 @@
              icon="el-icon-edit"
              @click="handleUpdate(scope.row)"
              >修改</el-button
            >
            <el-button
              size="mini"
              type="text"
              icon="el-icon-delete"
              style="color: #F56C6C"
              @click="handleDelete(scope.row)"
              >删除</el-button
            >
          </template>
        </el-table-column>
@@ -234,7 +238,7 @@
</template>
<script>
import { listDeathJudgment, delDeathJudgment, exportDeathJudgment } from "./mockDeathJudgmentApi";
import { queryDathInfoBaseInfo, deathinfoedit,deathinfoInfo } from "@/api/businessApi";
import Pagination from "@/components/Pagination";
export default {
@@ -259,11 +263,13 @@
      queryParams: {
        pageNum: 1,
        pageSize: 10,
        hospitalNo: undefined,
        donorName: undefined,
        deathReason: undefined,
        inpatientno: undefined,
        name: undefined,
        deathreason: undefined,
        deathTimeRange: []
      }
      },
      // 所有数据(用于前端筛选)
      allTableData: []
    };
  },
  created() {
@@ -273,55 +279,157 @@
    // 死亡原因过滤器
    reasonFilter(reason) {
      const reasonMap = {
        "brain_death": "primary", // 脑死亡
        "heart_death": "danger", // 心死亡
        "other": "info" // 其他
        brain_death: "primary",
        heart_death: "danger",
        other: "info"
      };
      return reasonMap[reason] || "info";
    },
    reasonTextFilter(reason) {
      const reasonMap = {
        "brain_death": "脑死亡",
        "heart_death": "心死亡",
        "other": "其他"
        brain_death: "脑死亡",
        heart_death: "心死亡",
        other: "其他"
      };
      return reasonMap[reason] || "未知";
    },
    // 查询死亡判定列表
    getList() {
      this.loading = true;
      listDeathJudgment(this.queryParams)
        .then(response => {
          if (response.code === 200) {
            this.deathJudgmentList = response.data.rows;
            this.total = response.data.total;
          } else {
            this.$message.error("获取数据失败");
          }
          this.loading = false;
        })
        .catch(error => {
          console.error("获取死亡判定列表失败:", error);
          this.loading = false;
          this.$message.error("获取数据失败");
        });
    // 记录状态过滤器
    statusFilter(status) {
      const statusMap = {
        "0": "warning", // 维护中
        "1": "success", // 已完成
        "99": "danger" // 已终止
      };
      return statusMap[status] || "info";
    },
    statusTextFilter(status) {
      const statusMap = {
        "0": "维护中",
        "1": "已完成",
        "99": "已终止"
      };
      return statusMap[status] || "未知状态";
    },
    // 查询死亡判定列表
    async getList() {
      this.loading = true;
      try {
        const response = await queryDathInfoBaseInfo(this.queryParams);
        // 根据实际接口返回结构调整
        let realData = [];
        realData = response.data;
        this.total = response.total;
        // if (Array.isArray(response)) {
        //   realData = response;
        // } else if (response && response.data) {
        //   realData = response.data;
        // } else if (response && response.rows) {
        //   realData = response.rows;
        //   this.total = response.total || response.rows.length;
        // } else if (response && response.code === 200) {
        //   realData = response.data.rows || response.data;
        //   this.total = response.data.total || realData.length;
        // } else {
        //   realData = [];
        // }
        // 存储所有数据用于前端筛选
        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.deathJudgmentList = filteredData.slice(startIndex, endIndex);
          this.total = filteredData.length;
        } else {
          // 接口已分页,直接使用返回数据
          this.deathJudgmentList = filteredData;
        }
      } catch (error) {
        console.error("获取死亡判定数据失败:", error);
        this.$message.error("数据加载失败");
        this.deathJudgmentList = [];
        this.total = 0;
      } finally {
        this.loading = false;
      }
    },
    // 应用前端筛选
    applyFrontendFilter(data) {
      let filteredData = data;
      // 住院号筛选
      if (this.queryParams.inpatientno) {
        filteredData = filteredData.filter(
          item =>
            item.inpatientno &&
            item.inpatientno.includes(this.queryParams.inpatientno)
        );
      }
      // 姓名筛选
      if (this.queryParams.name) {
        filteredData = filteredData.filter(
          item => item.name && item.name.includes(this.queryParams.name)
        );
      }
      // 死亡原因筛选
      if (this.queryParams.deathreason) {
        filteredData = filteredData.filter(
          item => item.deathreason === this.queryParams.deathreason
        );
      }
      // 死亡时间范围筛选
      if (
        this.queryParams.deathTimeRange &&
        this.queryParams.deathTimeRange.length === 2
      ) {
        const [startDate, endDate] = this.queryParams.deathTimeRange;
        filteredData = filteredData.filter(item => {
          if (!item.deathtime) return false;
          const deathTime = new Date(item.deathtime).getTime();
          const startTime = new Date(startDate).getTime();
          const endTime = new Date(endDate + " 23:59:59").getTime();
          return deathTime >= startTime && deathTime <= endTime;
        });
      }
      return filteredData;
    },
    // 搜索按钮操作
    handleQuery() {
      this.queryParams.pageNum = 1;
      this.getList();
    },
    // 重置按钮操作
    resetQuery() {
      this.$refs.queryForm.resetFields();
      this.handleQuery();
      this.queryParams.pageNum = 1;
      this.getList();
    },
    // 多选框选中数据
    handleSelectionChange(selection) {
      this.ids = selection.map(item => item.id);
      this.single = selection.length !== 1;
      this.multiple = !selection.length;
    },
    // 查看详情
    handleView(row) {
      this.$router.push({
@@ -329,10 +437,12 @@
        query: { id: row.id }
      });
    },
    // 新增按钮操作
    handleCreate() {
      this.$router.push("/case/DecideInfo");
    },
    // 修改按钮操作
    handleUpdate(row) {
      const id = row.id || this.ids[0];
@@ -341,28 +451,9 @@
        query: { id: id }
      });
    },
    // 删除按钮操作
    handleDelete(row) {
      const ids = row.id ? [row.id] : this.ids;
      this.$confirm("是否确认删除选中的数据项?", "警告", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning"
      })
        .then(() => {
          return delDeathJudgment(ids);
        })
        .then(response => {
          if (response.code === 200) {
            this.$message.success("删除成功");
            this.getList();
          }
        })
        .catch(() => {});
    },
    // 导出按钮操作
    // 导出按钮操作(模拟调用)
    handleExport() {
      const queryParams = this.queryParams;
      this.$confirm("是否确认导出所有死亡判定数据?", "警告", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
@@ -370,12 +461,19 @@
      })
        .then(() => {
          this.loading = true;
          return exportDeathJudgment(queryParams);
          // 模拟导出操作
          return new Promise(resolve => {
            setTimeout(() => {
              resolve({ code: 200 });
            }, 1000);
          });
        })
        .then(response => {
          if (response.code === 200) {
            this.$message.success("导出成功");
            // 实际项目中这里处理文件下载
            // 可以添加以下代码来触发文件下载
            // this.downloadFile();
          }
          this.loading = false;
        })
@@ -383,6 +481,18 @@
          this.loading = false;
        });
    },
    // 文件下载方法(预留)
    downloadFile() {
      // 实际项目中的文件下载逻辑
      const link = document.createElement("a");
      link.style.display = "none";
      link.href = "/api/export/death-judgment"; // 替换为实际导出接口
      document.body.appendChild(link);
      link.click();
      document.body.removeChild(link);
    },
    // 时间格式化
    parseTime(time, pattern) {
      if (!time) return "";
@@ -440,4 +550,14 @@
.fixed-width .el-button {
  margin: 0 5px;
}
/* 表格样式优化 */
::v-deep .el-table .cell {
  padding: 8px 4px;
}
::v-deep .el-table th {
  background-color: #f5f7fa;
  font-weight: bold;
}
</style>