| | |
| | | <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> |
| | |
| | | </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> |
| | |
| | | </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> |
| | |
| | | inspectionTaskList, |
| | | timingTaskList, |
| | | addOrEditTimingTask, |
| | | acceptInspectionTask, |
| | | } from "@/api/inspectionManagement/index.js"; |
| | | |
| | | // 全局变量 |
| | |
| | | { 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" |
| | | ? "每日" |
| | |
| | | }, |
| | | { |
| | | prop: "frequencyDetail", |
| | | label: "开始日期与时间", |
| | | minWidth: 150, |
| | | label: "开始时间", |
| | | minWidth: 120, |
| | | formatter: (row, column, cellValue) => { |
| | | // 先判断是否是字符串 |
| | | if (typeof cellValue !== "string") return ""; |
| | | let val = cellValue; |
| | | const replacements = { |
| | |
| | | SAT: "周六", |
| | | SUN: "周日", |
| | | }; |
| | | // 使用正则一次性替换所有匹配项 |
| | | return val.replace( |
| | | /MON|TUE|WED|THU|FRI|SAT|SUN/g, |
| | | match => replacements[match] |
| | |
| | | }, |
| | | }, |
| | | { 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", |
| | |
| | | }; |
| | | 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 { |
| | |
| | | |
| | | // 单选变化 |
| | | const radioChange = value => { |
| | | activeRadio.value = value; |
| | | if (value === "taskManage") { |
| | | const operationColumn = getOperationColumn(["edit", "toggleActive"]); |
| | | tableColumns.value = [ |
| | |
| | | ]; |
| | | 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; |
| | |
| | | }); |
| | | }; |
| | | |
| | | // 查看附件 |
| | | // 巡检详情 |
| | | 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) { |