WXL
6 天以前 631c8f37b449b09d19345b76400a39abdb7800f6
src/views/business/transfer/index.vue
@@ -8,15 +8,6 @@
        :inline="true"
        label-width="80px"
      >
        <el-form-item label="转运单号" prop="transportNo">
          <el-input
            v-model="queryParams.transportNo"
            placeholder="请输入转运单号"
            clearable
            style="width: 200px"
            @keyup.enter.native="handleQuery"
          />
        </el-form-item>
        <el-form-item label="案例编号" prop="caseNo">
          <el-input
            v-model="queryParams.caseNo"
@@ -26,27 +17,28 @@
            @keyup.enter.native="handleQuery"
          />
        </el-form-item>
        <el-form-item label="捐献者姓名" prop="donorName">
        <el-form-item label="患者姓名" prop="patName">
          <el-input
            v-model="queryParams.donorName"
            placeholder="请输入捐献者姓名"
            v-model="queryParams.patName"
            placeholder="请输入患者姓名"
            clearable
            style="width: 200px"
            @keyup.enter.native="handleQuery"
          />
        </el-form-item>
        <el-form-item label="转运状态" prop="status">
        <el-form-item label="转运状态" prop="transitStatus">
          <el-select
            v-model="queryParams.status"
            v-model="queryParams.transitStatus"
            placeholder="转运状态"
            clearable
            style="width: 200px"
          >
            <el-option label="全部" value="" />
            <el-option label="待出发" value="pending" />
            <el-option label="转运中" value="transporting" />
            <el-option label="已完成" value="completed" />
            <el-option label="已取消" value="cancelled" />
            <el-option label="待转运" :value="1" />
            <el-option label="转运中" :value="2" />
            <el-option label="转运完成" :value="3" />
            <el-option label="转运取消" :value="4" />
            <el-option label="暂存" :value="5" />
          </el-select>
        </el-form-item>
        <el-form-item label="创建时间">
@@ -148,7 +140,7 @@
      ></right-toolbar>
    </el-row>
    <!-- 数据表格 -->
    <!-- 数据表格 - 直接使用后端返回的数据结构 -->
    <el-table
      v-loading="loading"
      :data="transportList"
@@ -156,19 +148,28 @@
    >
      <el-table-column type="selection" width="55" align="center" />
      <el-table-column label="序号" type="index" width="60" align="center" />
      <el-table-column label="转运单号" align="center" prop="id" width="140" />
      <el-table-column
        label="转运单号"
        align="center"
        prop="reportId"
        width="140"
      />
      <el-table-column
        label="案例编号"
        align="center"
        prop="caseNo"
        width="140"
      />
      <el-table-column label="捐献者信息" align="center" width="180">
      <el-table-column label="患者信息" align="center" width="260">
        <template slot-scope="scope">
          <div class="donor-info">
            <div class="donor-name">{{ scope.row.donorName }}</div>
            <div class="donor-name">{{ scope.row.patName }}</div>
            <div class="donor-details">
              {{ scope.row.gender }} | {{ scope.row.age }}岁
              <dict-tag
                :options="dict.type.sys_user_sex"
                :value="parseInt(scope.row.sex)"
              />
              | {{ scope.row.age }}岁
            </div>
          </div>
        </template>
@@ -176,37 +177,37 @@
      <el-table-column
        label="疾病诊断"
        align="center"
        prop="diagnosis"
        prop="diagnosisname"
        min-width="200"
        show-overflow-tooltip
      />
      <el-table-column
        label="医疗机构"
        label="治疗医院"
        align="center"
        prop="hospitalName"
        prop="treatmentHospitalName"
        width="150"
      />
      <el-table-column
        label="计划转运时间"
        align="center"
        prop="transportTime"
        prop="transportStartTime"
        width="160"
      />
      <el-table-column
        label="负责协调员"
        align="center"
        prop="coordinator"
        prop="contactPerson"
        width="100"
      />
      <el-table-column
        label="转运状态"
        align="center"
        prop="status"
        prop="transitStatus"
        width="100"
      >
        <template slot-scope="scope">
          <el-tag :type="scope.row.status | statusFilter">
            {{ scope.row.statusText }}
          <el-tag :type="getStatusTagType(scope.row.transitStatus)">
            {{ getStatusText(scope.row.transitStatus) }}
          </el-tag>
        </template>
      </el-table-column>
@@ -242,7 +243,7 @@
            type="text"
            icon="el-icon-video-play"
            @click="handleStartTransport(scope.row)"
            v-if="scope.row.status === 'pending'"
            v-if="scope.row.transitStatus === 1"
            >开始转运</el-button
          >
          <el-button
@@ -250,7 +251,7 @@
            type="text"
            icon="el-icon-check"
            @click="handleCompleteTransport(scope.row)"
            v-if="scope.row.status === 'transporting'"
            v-if="scope.row.transitStatus === 2"
            >完成转运</el-button
          >
        </template>
@@ -296,7 +297,11 @@
      append-to-body
    >
      <div class="action-confirm">
        <p>确定要{{ actionText }}转运单 "{{ currentTransport.id }}" 吗?</p>
        <p>
          确定要{{ actionText }}转运单 "{{
            currentTransport.reportId || currentTransport.id
          }}" 吗?
        </p>
      </div>
      <div slot="footer" class="dialog-footer">
        <el-button @click="actionOpen = false">取 消</el-button>
@@ -308,17 +313,19 @@
<script>
import {
  listTransport,
  getTransport,
  delTransport,
  updateTransportStatus
} from "@/api/system/business";
  transportList,
  transportAdd,
  transportEdit,
  transportDelete,
  transportInfo
} from "@/api/businessApi/index";
import TransportDetail from "./transportDetail";
import TransportEdit from "./TransportEdit";
export default {
  name: "TransportList",
  components: { TransportDetail, TransportEdit },
  dicts: ["sys_user_sex", "sys_BloodType"],
  data() {
    return {
      // 遮罩层
@@ -333,7 +340,7 @@
      showSearch: true,
      // 总条数
      total: 0,
      // 转运单表格数据
      // 转运单表格数据 - 直接使用后端返回的数据结构
      transportList: [],
      // 详情弹框是否显示
      detailOpen: false,
@@ -358,143 +365,101 @@
        pendingTransports: 0,
        completedTransports: 0
      },
      // 查询参数
      // 查询参数(完全适配后端接口)
      queryParams: {
        pageNum: 1,
        pageSize: 10,
        transportNo: undefined,
        caseNo: undefined,
        donorName: undefined,
        status: undefined
        caseNo: undefined, // 案例编号
        patName: undefined, // 患者姓名
        transitStatus: undefined, // 转运状态:1待转运 2转运中 3转运完成 4转运取消 5暂存
        searchValue: undefined, // 搜索值
        params: {} // 其他参数对象
      }
    };
  },
  filters: {
    statusFilter(status) {
      const statusMap = {
        pending: "warning",
        transporting: "primary",
        completed: "success",
        cancelled: "danger"
      };
      return statusMap[status];
    }
  },
  created() {
    this.getList();
  },
  methods: {
    /** 查询转运单列表 */
    getList() {
    /** 查询转运单列表 - 直接使用后端数据结构 */
    async getList() {
      this.loading = true;
      // 模拟API调用延迟
      setTimeout(() => {
        // 测试数据
        this.transportList = [
          {
            id: "T20241217001",
            caseNo: "DON20241216001",
            donorName: "张三",
            gender: "男",
            age: 38,
            diagnosis:
              "脑外伤导致脑死亡,经抢救无效宣布脑死亡。家属同意器官捐献。",
            hospitalName: "青岛镜湖医院",
            transportTime: "2024-12-17 14:30:00",
            coordinator: "张医生",
            createTime: "2024-12-16 09:30:00",
            status: "pending",
            statusText: "待出发",
            departureLocation: "青岛市立医院急诊科",
            destinationHospital: "青岛镜湖医院",
            emergencyDoctor: "王医生",
            nurse: "李护士",
            driver: "刘师傅",
            icuDoctor: "赵医生",
            contacts: [
              { role: "协调员电话", phone: "13800138000" },
              { role: "急诊医生电话", phone: "13800138001" },
              { role: "护士电话", phone: "13800138002" },
              { role: "司机电话", phone: "13800138003" },
              { role: "ICU医生电话", phone: "13800138004" }
            ],
            remarks: "需要准备呼吸机等急救设备"
          },
          {
            id: "T20241217002",
            caseNo: "DON20241216002",
            donorName: "李四",
            gender: "女",
            age: 45,
            diagnosis: "脑梗死,脑干功能丧失",
            hospitalName: "青岛大学附属医院",
            transportTime: "2024-12-17 16:00:00",
            coordinator: "李医生",
            createTime: "2024-12-16 11:20:00",
            status: "transporting",
            statusText: "转运中",
            departureLocation: "青岛大学附属医院ICU",
            destinationHospital: "青岛器官移植中心",
            currentLocation: "青岛市南区香港中路",
            estimatedTime: "30分钟"
          },
          {
            id: "T20241216003",
            caseNo: "DON20241215001",
            donorName: "王五",
            gender: "男",
            age: 52,
            diagnosis: "心脏骤停,多器官功能衰竭",
            hospitalName: "青岛市立医院",
            transportTime: "2024-12-16 10:15:00",
            coordinator: "王医生",
            createTime: "2024-12-15 14:45:00",
            status: "completed",
            statusText: "已完成",
            departureLocation: "青岛市立医院心内科",
            destinationHospital: "青岛器官移植中心",
            completedTime: "2024-12-16 12:30:00",
            distance: "15公里",
            duration: "2小时15分钟"
          },
          {
            id: "T20241216004",
            caseNo: "DON20241214001",
            donorName: "赵六",
            gender: "女",
            age: 29,
            diagnosis: "急性肝衰竭",
            hospitalName: "青岛科大医院",
            transportTime: "2024-12-16 08:30:00",
            coordinator: "赵医生",
            createTime: "2024-12-14 16:20:00",
            status: "cancelled",
            statusText: "已取消",
            cancelReason: "家属临时改变决定"
          }
        ];
        // 更新统计数据
        this.updateStats();
        this.total = this.transportList.length;
      try {
        // 构建符合后端接口的请求参数 [1,2](@ref)
        const requestParams = {
          pageNum: this.queryParams.pageNum,
          pageSize: this.queryParams.pageSize,
          caseNo: this.queryParams.caseNo,
          patName: this.queryParams.patName,
          transitStatus: this.queryParams.transitStatus,
          searchValue: this.queryParams.searchValue
        };
        // 处理时间范围参数 [5](@ref)
        if (this.dateRange && this.dateRange.length === 2) {
          requestParams.transportStartTime = this.dateRange.join(",");
        }
        // 调用正式接口 [3](@ref)
        const response = await transportList(requestParams);
        if (response.code === 200) {
          // 直接使用后端返回的数据结构,不进行转换 [8](@ref)
          this.transportList = response.rows || response.data || [];
          this.total = response.total || 0;
          // 更新统计数据
          this.updateStats();
        } else {
          this.$modal.msgError(response.msg || "获取转运单列表失败");
        }
      } catch (error) {
        console.error("获取转运单列表失败:", error);
        this.$modal.msgError("网络请求失败,请稍后重试");
      } finally {
        this.loading = false;
      }, 500);
      }
    },
    /** 获取状态标签类型 */
    getStatusTagType(transitStatus) {
      const statusMap = {
        1: "warning", // 待转运
        2: "primary", // 转运中
        3: "success", // 转运完成
        4: "danger", // 转运取消
        5: "info" // 暂存
      };
      return statusMap[transitStatus] || "info";
    },
    /** 获取状态文本 */
    getStatusText(transitStatus) {
      const statusMap = {
        1: "待转运",
        2: "转运中",
        3: "转运完成",
        4: "转运取消",
        5: "暂存"
      };
      return statusMap[transitStatus] || "未知状态";
    },
    // 更新统计数据
    updateStats() {
      this.stats.totalTransports = this.transportList.length;
      this.stats.pendingTransports = this.transportList.filter(
        item => item.status === "pending"
        item => item.transitStatus === 1
      ).length;
      this.stats.completedTransports = this.transportList.filter(
        item => item.status === "completed"
        item => item.transitStatus === 3
      ).length;
    },
    // 多选框选中数据
    handleSelectionChange(selection) {
      this.ids = selection.map(item => item.id);
      this.ids = selection.map(item => item.reportId || item.id);
      this.single = selection.length !== 1;
      this.multiple = !selection.length;
    },
@@ -504,6 +469,28 @@
      this.queryParams.pageNum = 1;
      this.getList();
    },
    /** 重置按钮操作 */
    resetQuery() {
      this.dateRange = [];
      this.queryParams = {
        pageNum: 1,
        pageSize: 10,
        caseNo: undefined,
        patName: undefined,
        transitStatus: undefined,
        searchValue: undefined
      };
      this.getList();
    },
    /** 详情按钮操作 */
    handleDetail(row) {
      this.currentTransport = row;
      this.detailTitle = `转运单详情 - ${row.reportId || row.id}`;
      this.detailOpen = true;
    },
    /** 修改按钮操作 */
    handleUpdate(row) {
      this.currentTransport = row || {};
@@ -528,22 +515,9 @@
    handleSaveSuccess() {
      this.getList(); // 重新加载列表
    },
    /** 重置按钮操作 */
    resetQuery() {
      this.dateRange = [];
      this.resetForm("queryForm");
      this.handleQuery();
    },
    /** 详情按钮操作 */
    handleDetail(row) {
      this.currentTransport = row;
      this.detailTitle = `转运单详情 - ${row.id}`;
      this.detailOpen = true;
    },
    /** 开始转运操作 */
    handleStartTransport(row) {
    async handleStartTransport(row) {
      this.currentTransport = row;
      this.actionTitle = "开始转运";
      this.actionText = "开始";
@@ -551,59 +525,70 @@
    },
    /** 完成转运操作 */
    handleCompleteTransport(row) {
    async handleCompleteTransport(row) {
      this.currentTransport = row;
      this.actionTitle = "完成转运";
      this.actionText = "完成";
      this.actionOpen = true;
    },
    /** 确认操作 */
    confirmAction() {
      const index = this.transportList.findIndex(
        item => item.id === this.currentTransport.id
      );
      if (index !== -1) {
    /** 确认操作 - 使用后端原始数据结构 [4](@ref) */
    async confirmAction() {
      try {
        let requestData = {
          id: this.currentTransport.id || this.currentTransport.reportId
        };
        if (this.actionText === "开始") {
          this.transportList[index].status = "transporting";
          this.transportList[index].statusText = "转运中";
          requestData.transitStatus = 2; // 设置为转运中
        } else if (this.actionText === "完成") {
          this.transportList[index].status = "completed";
          this.transportList[index].statusText = "已完成";
          this.transportList[index].completedTime = new Date().toLocaleString();
          requestData.transitStatus = 3; // 设置为转运完成
        }
        // 更新统计数据
        this.updateStats();
        // 直接传递后端需要的参数 [8](@ref)
        const response = await transportEdit(requestData);
        this.$modal.msgSuccess(`${this.actionText}成功`);
        if (response.code === 200) {
          this.$modal.msgSuccess(`${this.actionText}转运成功`);
          this.getList(); // 刷新列表
        } else {
          this.$modal.msgError(response.msg || `${this.actionText}转运失败`);
        }
      } catch (error) {
        console.error(`${this.actionText}转运失败:`, error);
        this.$modal.msgError("操作失败,请稍后重试");
      }
      this.actionOpen = false;
    },
    /** 删除按钮操作 - 使用后端原始ID [1](@ref) */
    async handleDelete(row) {
      const ids = row.reportId || row.id || this.ids;
      try {
        await this.$modal.confirm(
          '是否确认删除转运单编号为"' + ids + '"的数据项?'
        );
        const response = await transportDelete(ids);
    /** 删除按钮操作 */
    handleDelete(row) {
      const ids = row.id || this.ids;
      this.$modal
        .confirm('是否确认删除转运单编号为"' + ids + '"的数据项?')
        .then(() => {
          // 模拟删除操作
          this.transportList = this.transportList.filter(
            item => !ids.includes(item.id)
          );
          this.total = this.transportList.length;
          this.updateStats();
        if (response.code === 200) {
          this.$modal.msgSuccess("删除成功");
        })
        .catch(() => {});
          this.getList(); // 刷新列表
        } else {
          this.$modal.msgError(response.msg || "删除失败");
        }
      } catch (error) {
        if (error !== "cancel") {
          console.error("删除失败:", error);
          this.$modal.msgError("删除失败,请稍后重试");
        }
      }
    },
    /** 导出按钮操作 */
    handleExport() {
      // 直接使用后端参数结构进行导出 [5](@ref)
      this.download(
        "system/transport/export",
        {
@@ -675,7 +660,9 @@
}
.donor-info {
  text-align: left;
  text-align: center;
  display: flex;
  justify-content: center
}
.donor-name {
@@ -684,8 +671,10 @@
}
.donor-details {
  font-size: 12px;
  color: #909399;
  margin-left: 5px;
  font-size: 16px;
  color: #093ca4;
  display: flex;
}
.mb8 {