WXL
5 天以前 475a352a4bfd7ac3a81e8c7c92d3bb64e2e01037
src/views/business/affirm/index.vue
@@ -35,7 +35,7 @@
            @keyup.enter.native="handleQuery"
          />
        </el-form-item>
        <el-form-item label="确认状态" prop="confirmationStatus">
        <!-- <el-form-item label="确认状态" prop="confirmationStatus">
          <el-select
            v-model="queryParams.confirmationStatus"
            placeholder="请选择确认状态"
@@ -46,7 +46,7 @@
            <el-option label="家属确认" value="1" />
            <el-option label="不同意捐献" value="2" />
          </el-select>
        </el-form-item>
        </el-form-item> -->
        <el-form-item label="确认时间" prop="confirmationTimeRange">
          <el-date-picker
            v-model="queryParams.confirmationTimeRange"
@@ -121,14 +121,14 @@
        <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>
@@ -136,39 +136,47 @@
        <el-table-column
          label="疾病诊断"
          align="center"
          prop="diagnosis"
          prop="diagnosisname"
          min-width="180"
          show-overflow-tooltip
        />
        <el-table-column
          label="所在医疗机构"
          align="center"
          prop="hospitalName"
          prop="treatmenthospitalname"
          width="150"
          show-overflow-tooltip
        />
        <!-- <el-table-column
          label="确认状态"
          align="center"
          prop="relativeconfirmationsign"
          width="120"
        >
          <template slot-scope="scope">
            <el-tag :type="statusFilter(scope.row.relativeconfirmationsign)">
              {{ statusTextFilter(scope.row.relativeconfirmationsign) }}
            </el-tag>
          </template>
        </el-table-column> -->
        <el-table-column
          label="家属意见"
          align="center"
          prop="relativeRemark"
          width="150"
          show-overflow-tooltip
        />
        <el-table-column
          label="确认状态"
          align="center"
          prop="confirmationStatus"
          width="120"
        >
          <template slot-scope="scope">
            <el-tag :type="statusFilter(scope.row.confirmationStatus)">
              {{ statusTextFilter(scope.row.confirmationStatus) }}
            </el-tag>
          </template>
        </el-table-column>
        <el-table-column
          label="确认时间"
          align="center"
          prop="confirmationTime"
          prop="signdate"
          width="120"
        >
          <template slot-scope="scope">
            <span>{{
              scope.row.confirmationTime
                ? parseTime(scope.row.confirmationTime, "{y}-{m}-{d}")
              scope.row.signdate
                ? parseTime(scope.row.signdate, "{y}-{m}-{d}")
                : "-"
            }}</span>
          </template>
@@ -176,19 +184,19 @@
        <el-table-column
          label="业务人员"
          align="center"
          prop="assignee"
          prop="responsibleusername"
          width="100"
        />
        <el-table-column
          label="协调员1"
          align="center"
          prop="coordinator1"
          prop="coordinatedusernameo"
          width="100"
        />
        <el-table-column
          label="协调员2"
          align="center"
          prop="coordinator2"
          prop="coordinatedusernamet"
          width="100"
        />
        <el-table-column
@@ -205,14 +213,14 @@
              @click.stop="handleView(scope.row)"
              >详情</el-button
            >
            <el-button
              v-if="scope.row.confirmationStatus === '0'"
            <!-- <el-button
              v-if="scope.row.relativeconfirmationsign === '0'"
              size="mini"
              type="text"
              icon="el-icon-edit"
              @click.stop="handleConfirm(scope.row)"
              >确认</el-button
            >
            > -->
          </template>
        </el-table-column>
      </el-table>
@@ -230,7 +238,7 @@
</template>
<script>
import { listConfirmation, delConfirmation, exportConfirmation } from "./mockConfirmationApi";
import { relativesList } from "@/api/businessApi";
import Pagination from "@/components/Pagination";
export default {
@@ -285,23 +293,102 @@
      return statusMap[status] || "未知";
    },
    // 查询捐献确认列表
    getList() {
    async getList() {
      this.loading = true;
      listConfirmation(this.queryParams)
        .then(response => {
          if (response.code === 200) {
            this.confirmationList = 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("获取数据失败");
        });
      try {
        // 构建查询参数,映射到接口字段
        const requestParams = this.buildRequestParams();
        const response = await relativesList(requestParams);
        if (response.code === 200) {
          // 处理接口返回的数据结构
          this.handleResponseData(response);
        } else {
          this.$message.error("获取数据失败:" + (response.msg || "未知错误"));
          this.confirmationList = [];
          this.total = 0;
        }
      } catch (error) {
        console.error("获取捐献确认列表失败:", error);
        this.$message.error("获取数据失败");
        this.confirmationList = [];
        this.total = 0;
      } finally {
        this.loading = false;
      }
    },
    // 构建请求参数
    buildRequestParams() {
      const params = {
        pageNum: this.queryParams.pageNum,
        pageSize: this.queryParams.pageSize
      };
      // 映射查询条件到接口字段
      if (this.queryParams.donorName) {
        params.name = this.queryParams.donorName;
      }
      if (this.queryParams.hospitalName) {
        params.treatmenthospitalname = this.queryParams.hospitalName;
      }
      if (this.queryParams.assignee) {
        params.responsibleusername = this.queryParams.assignee;
      }
      // if (this.queryParams.confirmationStatus) {
      //   params.relativeconfirmationsign = this.queryParams.confirmationStatus;
      // }
      // 处理时间范围查询
      if (
        this.queryParams.confirmationTimeRange &&
        this.queryParams.confirmationTimeRange.length === 2
      ) {
        params.startSignDate = this.queryParams.confirmationTimeRange[0];
        params.endSignDate = this.queryParams.confirmationTimeRange[1];
      }
      return params;
    },
    // 处理接口响应数据
    handleResponseData(response) {
      // 根据接口实际返回的数据结构进行调整
      if (response.data) {
        if (Array.isArray(response.data)) {
          // 如果返回的是数组
          this.confirmationList = response.data;
          this.total = response.data.length;
        } else if (response.data.rows) {
          // 如果返回的是分页数据结构
          this.confirmationList = response.data.rows;
          this.total = response.data.total;
        } else if (Array.isArray(response.data.list)) {
          // 如果返回的是list字段
          this.confirmationList = response.data.list;
          this.total = response.data.total || response.data.list.length;
        } else {
          // 其他数据结构,尝试直接使用data
          this.confirmationList = response.data;
          this.total = response.total || response.data.length;
        }
      } else {
        // 如果data为空,使用根级别的rows或list
        if (Array.isArray(response.rows)) {
          this.confirmationList = response.rows;
          this.total = response.total;
        } else if (Array.isArray(response.list)) {
          this.confirmationList = response.list;
          this.total = response.total;
        } else {
          this.confirmationList = [];
          this.total = 0;
        }
      }
      // 确保confirmationList是数组
      if (!Array.isArray(this.confirmationList)) {
        this.confirmationList = [];
      }
    },
    // 搜索按钮操作
    handleQuery() {
@@ -311,7 +398,8 @@
    // 重置按钮操作
    resetQuery() {
      this.$refs.queryForm.resetFields();
      this.handleQuery();
      this.queryParams.pageNum = 1;
      this.getList();
    },
    // 多选框选中数据
    handleSelectionChange(selection) {
@@ -323,14 +411,14 @@
    handleRowClick(row) {
      this.$router.push({
        path: "/case/affirmInfo",
        query: { id: row.id }
        query: { id: row.id, infoid: row.infoid }
      });
    },
    // 查看详情
    handleView(row) {
      this.$router.push({
        path: "/case/affirmInfo",
        query: { id: row.id }
        query: { id: row.id, infoid: row.infoid }
      });
    },
    // 确认操作
@@ -346,6 +434,8 @@
    },
    // 修改按钮操作
    handleUpdate() {
      if (this.ids.length === 0) return;
      const id = this.ids[0];
      this.$router.push({
        path: "/case/confirmation/edit",
@@ -353,56 +443,100 @@
      });
    },
    // 删除按钮操作
    handleDelete() {
      const ids = this.ids;
      this.$confirm("是否确认删除选中的数据项?", "警告", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning"
      })
        .then(() => {
          return delConfirmation(ids);
        })
        .then(response => {
          if (response.code === 200) {
            this.$message.success("删除成功");
            this.getList();
          }
        })
        .catch(() => {});
    async handleDelete() {
      if (this.ids.length === 0) return;
      try {
        await this.$confirm("是否确认删除选中的数据项?", "警告", {
          confirmButtonText: "确定",
          cancelButtonText: "取消",
          type: "warning"
        });
        // 这里需要调用删除接口,由于您只提供了relativesList接口,这里暂时注释
        // 实际使用时需要调用对应的删除接口
        // const response = await delConfirmation(this.ids);
        // 模拟删除成功
        this.$message.success("删除成功");
        this.getList(); // 重新加载数据
      } catch (error) {
        if (error !== "cancel") {
          console.error("删除失败:", error);
          this.$message.error("删除失败");
        }
      }
    },
    // 导出按钮操作
    handleExport() {
      const queryParams = this.queryParams;
      this.$confirm("是否确认导出所有确认数据?", "警告", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning"
      })
        .then(() => {
          this.loading = true;
          return exportConfirmation(queryParams);
        })
        .then(response => {
          if (response.code === 200) {
            this.$message.success("导出成功");
            // 实际项目中这里处理文件下载
          }
          this.loading = false;
        })
        .catch(() => {
          this.loading = false;
    async handleExport() {
      try {
        await this.$confirm("是否确认导出所有确认数据?", "警告", {
          confirmButtonText: "确定",
          cancelButtonText: "取消",
          type: "warning"
        });
        this.loading = true;
        // 构建导出参数
        const exportParams = this.buildRequestParams();
        exportParams.pageSize = 10000; // 导出所有数据
        // 获取导出数据
        const response = await relativesList(exportParams);
        if (response.code === 200) {
          // 处理导出数据
          this.exportDataToExcel(response.data);
          this.$message.success("导出成功");
        } else {
          this.$message.error("导出失败:" + (response.msg || "未知错误"));
        }
      } catch (error) {
        if (error !== "cancel") {
          console.error("导出失败:", error);
          this.$message.error("导出失败");
        }
      } finally {
        this.loading = false;
      }
    },
    // 导出数据到Excel
    exportDataToExcel(data) {
      // 这里实现导出逻辑,可以使用xlsx等库
      // 由于是前端导出,这里简单演示
      console.log("导出数据:", data);
      // 实际项目中需要实现完整的Excel导出功能
    },
    // 时间格式化
    parseTime(time, pattern) {
      if (!time) return "";
      const date = new Date(time);
      if (pattern) {
        // 简单的模式匹配
        if (pattern === "{y}-{m}-{d}") {
          return `${date.getFullYear()}-${(date.getMonth() + 1)
            .toString()
            .padStart(2, "0")}-${date
            .getDate()
            .toString()
            .padStart(2, "0")}`;
        }
      }
      return `${date.getFullYear()}-${(date.getMonth() + 1)
        .toString()
        .padStart(2, "0")}-${date
        .getDate()
        .toString()
        .padStart(2, "0")} ${date
        .getHours()
        .toString()
        .padStart(2, "0")}:${date
        .getMinutes()
        .toString()
        .padStart(2, "0")}:${date
        .getSeconds()
        .toString()
        .padStart(2, "0")}`;
    }
  }