gongchunyi
7 天以前 a7a9f53ef126659f664f5cbfe4eb10bebdfc4a6a
src/views/equipmentManagement/inspectionManagement/index.vue
@@ -1,37 +1,23 @@
<template>
  <div class="app-container">
    <el-form :inline="true"
             :model="queryParams"
             class="search-form">
    <el-form :inline="true" :model="queryParams" class="search-form">
      <el-form-item label="巡检任务名称">
        <el-input v-model="queryParams.taskName"
                  placeholder="请输入巡检任务名称"
                  clearable
                  style="width: 200px " />
        <el-input v-model="queryParams.taskName" placeholder="请输入巡检任务名称" clearable style="width: 200px " />
      </el-form-item>
      <el-form-item>
        <el-button type="primary"
                   @click="handleQuery">查询</el-button>
        <el-button type="primary" @click="handleQuery">查询</el-button>
        <el-button @click="resetQuery">重置</el-button>
      </el-form-item>
    </el-form>
    <el-card>
      <div style="display: flex;flex-direction: row;justify-content: space-between;margin-bottom: 10px;">
        <el-radio-group v-model="activeRadio"
                        @change="radioChange">
          <el-radio-button v-for="tab in radios"
                           :key="tab.name"
                           :label="tab.label"
                           :value="tab.name" />
        <el-radio-group v-model="activeRadio" @change="radioChange">
          <el-radio-button v-for="tab in radios" :key="tab.name" :label="tab.label" :value="tab.name" />
        </el-radio-group>
        <!-- 操作按钮区 -->
        <el-space v-if="activeRadio !== 'task'">
          <el-button type="primary"
                     :icon="Plus"
                     @click="handleAdd(undefined)">新建</el-button>
          <el-button type="danger"
                     :icon="Delete"
                     @click="handleDelete">删除</el-button>
          <el-button type="primary" :icon="Plus" @click="handleAdd(undefined)">新建</el-button>
          <el-button type="danger" :icon="Delete" @click="handleDelete">删除</el-button>
          <el-button @click="handleOut">导出</el-button>
        </el-space>
        <el-space v-else>
@@ -39,35 +25,33 @@
        </el-space>
      </div>
      <div>
        <PIMTable :table-loading="tableLoading"
                  :table-data="tableData"
                  :column="tableColumns"
                  @selection-change="handleSelectionChange"
                  @pagination="handlePagination"
                  :is-selection="true"
                  :border="true"
        <PIMTable :table-loading="tableLoading" :table-data="tableData" :column="tableColumns"
          @selection-change="handleSelectionChange" @pagination="handlePagination" :is-selection="true" :border="true"
                  :page="{
                  current: pageNum,
                  size: pageSize,
                  total: total,
                  layout: 'total, sizes, prev, pager, next, jumper'
                }"
                  :table-style="{ width: '100%', height: 'calc(100vh - 23em)' }">
          }" :table-style="{ width: '100%', height: 'calc(100vh - 23em)' }">
          <template #inspector="{ row }">
            <div class="person-tags">
              <template v-if="row.inspector && row.inspector.length > 0">
                <el-tag v-for="(person, index) in row.inspector"
                        :key="index"
                        size="small"
                        type="primary"
                <el-tag v-for="(person, index) in row.inspector" :key="index" size="small" type="primary"
                        class="person-tag">
                  {{ person }}
                </el-tag>
              </template>
              <span v-else
                    class="no-data">--</span>
              <span v-else class="no-data">--</span>
            </div>
          </template>
          <template #acceptStatusSlot="{ row }">
            <el-tag v-if="row.acceptStatus === 1" type="success">已通过</el-tag>
            <el-tag v-else-if="row.acceptStatus === 2" type="danger">已退回</el-tag>
            <el-tag v-else-if="row.inspectionStatus > 0" type="warning">待验收</el-tag>
            <span v-else>--</span>
          </template>
          <template #statusRef="{ row }">
            <el-tag v-if="row.isActive === true || row.isActive === 1" type="success">启用</el-tag>
            <el-tag v-else type="danger">停用</el-tag>
@@ -75,8 +59,7 @@
        </PIMTable>
      </div>
    </el-card>
    <form-dia ref="formDia"
              @closeDia="handleQuery"></form-dia>
    <form-dia ref="formDia" @closeDia="handleQuery"></form-dia>
    <view-files ref="viewFiles"></view-files>
  </div>
</template>
@@ -98,6 +81,7 @@
    inspectionTaskList,
    timingTaskList,
    addOrEditTimingTask,
  acceptInspectionTask,
  } from "@/api/inspectionManagement/index.js";
  // 全局变量
@@ -132,10 +116,11 @@
    { prop: "taskName", label: "巡检任务名称", minWidth: 160 },
    { prop: "remarks", label: "备注", minWidth: 150 },
    { prop: "inspector", label: "执行巡检人", minWidth: 150, slot: "inspector" },
  { prop: "inspectionAcceptor", label: "验收人", minWidth: 100 },
    {
      prop: "frequencyType",
      label: "频次",
      minWidth: 150,
    minWidth: 100,
      formatData: params => {
        return params === "DAILY"
          ? "每日"
@@ -150,10 +135,9 @@
    },
    {
      prop: "frequencyDetail",
      label: "开始日期与时间",
      minWidth: 150,
    label: "开始时间",
    minWidth: 120,
      formatter: (row, column, cellValue) => {
        // 先判断是否是字符串
        if (typeof cellValue !== "string") return "";
        let val = cellValue;
        const replacements = {
@@ -165,7 +149,6 @@
          SAT: "周六",
          SUN: "周日",
        };
        // 使用正则一次性替换所有匹配项
        return val.replace(
          /MON|TUE|WED|THU|FRI|SAT|SUN/g,
          match => replacements[match]
@@ -173,8 +156,37 @@
      },
    },
    { prop: "registrant", label: "登记人", minWidth: 100 },
    { prop: "createTime", label: "登记日期", minWidth: 120, formatData: (cell) => cell ? dayjs(cell).format("YYYY-MM-DD HH:MM:ss") : "-" },
  { prop: "createTime", label: "登记日期", minWidth: 120, formatData: (cell) => cell ? dayjs(cell).format("YYYY-MM-DD") : "-" },
  ]);
const inspectionStatusColumn = {
  prop: "inspectionStatus",
  label: "巡检状态",
  minWidth: 100,
  dataType: "tag",
  formatData: params => {
    if (params === 0) return "未巡检";
    if (params === 1) return "正常";
    if (params === 2) return "异常";
    return "--";
  },
  formatType: params => {
    if (params === 0) return "warning";
    if (params === 1) return "success";
    if (params === 2) return "danger";
    return "info";
  }
};
const inspectionAcceptorColumn = { prop: "inspectionAcceptor", label: "验收人", minWidth: 100 };
const acceptStatusColumn = {
  prop: "acceptStatus",
  label: "验收状态",
  minWidth: 100,
  dataType: "slot",
  slot: "acceptStatusSlot",
};
  const statusColumn = {
    prop: "isActive",
@@ -200,9 +212,16 @@
            };
          case "viewFile":
            return {
              name: "查看附件",
            name: "巡检详情",
              clickFun: viewFile,
              color: "#67C23A",
          };
        case "accept":
            return {
              name: "验收",
              clickFun: handleAccept,
              color: "#E6A23C",
              showHide: (row) => row.inspectionStatus > 0 && (!row.acceptStatus || row.acceptStatus === 0),
            };
          case "toggleActive":
            return {
@@ -233,6 +252,7 @@
  // 单选变化
  const radioChange = value => {
  activeRadio.value = value;
    if (value === "taskManage") {
      const operationColumn = getOperationColumn(["edit", "toggleActive"]);
      tableColumns.value = [
@@ -242,12 +262,14 @@
      ];
      operationsArr.value = ["edit", "toggleActive"];
    } else if (value === "task") {
      const operationColumn = getOperationColumn(["viewFile"]);
    const operationColumn = getOperationColumn(["viewFile", "accept"]);
      tableColumns.value = [
        ...columns.value,
      inspectionStatusColumn,
      acceptStatusColumn,
        ...(operationColumn ? [operationColumn] : []),
      ];
      operationsArr.value = ["viewFile"];
    operationsArr.value = ["viewFile", "accept"];
    }
    pageNum.value = 1;
    pageSize.value = 10;
@@ -334,13 +356,41 @@
    });
  };
  // 查看附件
// 巡检详情
  const viewFile = row => {
    nextTick(() => {
      viewFiles.value?.openDialog(row);
    });
  };
  // 验收操作
  const handleAccept = (row) => {
    ElMessageBox.confirm(`请选择对任务【${row.taskName}】的验收结果`, "系统提示", {
      distinguishCancelAndClose: true,
      confirmButtonText: '验收通过',
      cancelButtonText: '退回重检',
      type: 'warning'
    }).then(async () => {
      try {
        await acceptInspectionTask({ id: row.id, acceptStatus: 1 });
        proxy.$modal.msgSuccess("已验收通过");
        handleQuery();
      } catch (error) {
        console.error("验收失败:", error);
      }
    }).catch(async (action) => {
      if (action === 'cancel') {
        try {
          await acceptInspectionTask({ id: row.id, acceptStatus: 2 });
          proxy.$modal.msgWarning("已退回,等待重新巡检");
          handleQuery();
        } catch (error) {
          console.error("退回失败:", error);
        }
      }
    });
  };
  // 删除操作
  const handleDelete = () => {
    if (!selectedRows.value.length) {