src/views/equipmentManagement/upkeep/index.vue
@@ -1,288 +1,729 @@
<template>
  <div class="app-container">
    <el-form :model="filters" :inline="true">
      <el-form-item label="设备名称">
        <el-input
            v-model="filters.deviceName"
            style="width: 240px"
            placeholder="请输入设备名称"
            clearable
            :prefix-icon="Search"
            @change="getTableData"
        />
      </el-form-item>
      <el-form-item label="计划保养日期">
        <el-date-picker
            v-model="filters.maintenancePlanTime"
            type="date"
            placeholder="请选择计划保养日期"
            size="default"
            @change="(date) => handleDateChange(date,2)"
        />
      </el-form-item>
      <el-form-item label="实际保养日期">
        <el-date-picker
            v-model="filters.maintenanceActuallyTime"
            type="date"
            placeholder="请选择实际保养日期"
            size="default"
            @change="(date) => handleDateChange(date,1)"
        />
      </el-form-item>
      <el-form-item label="实际保养人">
        <el-input
            v-model="filters.maintenanceActuallyName"
            style="width: 240px"
            placeholder="请输入实际保养人"
            clearable
            :prefix-icon="Search"
            @change="getTableData"
        />
      </el-form-item>
      <el-form-item>
        <el-button type="primary" @click="getTableData">搜索</el-button>
        <el-button @click="resetFilters">重置</el-button>
      </el-form-item>
    </el-form>
    <div class="table_list">
      <div class="actions">
        <el-text class="mx-1" size="large">设备保养</el-text>
        <div>
          <el-button
            type="primary"
            icon="Plus"
            :disabled="multipleList.length !== 1"
            @click="addMaintain"
          >
            新增保养
          </el-button>
          <el-button type="success" icon="Van" @click="addPlan">
            新增计划
          </el-button>
          <el-button
            type="danger"
            icon="Delete"
            :disabled="multipleList.length <= 0"
            @click="delRepairByIds(multipleList.map((item) => item.id))"
          >
            批量删除
          </el-button>
        </div>
      </div>
      <PIMTable
        rowKey="id"
        isSelection
        :column="columns"
        :tableData="dataList"
        :page="{
          current: pagination.currentPage,
          size: pagination.pageSize,
          total: pagination.total,
        }"
        @selection-change="handleSelectionChange"
        @pagination="changePage"
      >
        <template #maintenanceResultRef="{ row }">
          <el-tag v-if="row.maintenanceResult === 1" type="success">
            完好
          </el-tag>
          <el-tag v-if="row.maintenanceResult === 0" type="danger">
            维修
          </el-tag>
        </template>
        <template #statusRef="{ row }">
          <el-tag v-if="row.status === 1" type="success">完结</el-tag>
          <el-tag v-if="row.status === 0" type="danger">待保养</el-tag>
        </template>
        <template #operation="{ row }">
          <el-button
            type="primary"
            text
            icon="editPen"
            @click="editPlan(row.id)"
          >
            编辑
          </el-button>
          <el-button
            type="danger"
            text
            icon="delete"
            @click="delRepairByIds(row.id)"
          >
            删除
          </el-button>
        </template>
      </PIMTable>
    </div>
    <PlanModal ref="planModalRef" @ok="getTableData" />
    <MaintenanceModal ref="maintainModalRef" @ok="getTableData" />
  </div>
   <div class="app-container">
      <el-tabs v-model="activeTab"
               @tab-change="handleTabChange">
         <!-- 保养任务tab -->
         <el-tab-pane label="保养任务"
                      name="scheduled">
            <div class="search_form">
               <el-form :model="scheduledFilters"
                        :inline="true">
                  <el-form-item label="任务名称">
                     <el-input v-model="scheduledFilters.taskName"
                               style="width: 240px"
                               placeholder="请输入任务名称"
                               clearable
                               :prefix-icon="Search"
                               @change="getScheduledTableData" />
                  </el-form-item>
                  <el-form-item label="任务状态">
                     <el-select v-model="scheduledFilters.status"
                                placeholder="请选择任务状态"
                                clearable
                                style="width: 200px">
                        <el-option label="启用"
                                   value="1" />
                        <el-option label="停用"
                                   value="0" />
                     </el-select>
                  </el-form-item>
                  <el-form-item>
                     <el-button type="primary"
                                @click="getScheduledTableData">搜索</el-button>
                     <el-button @click="resetScheduledFilters">重置</el-button>
                  </el-form-item>
               </el-form>
            </div>
            <div class="table_list">
               <div class="actions">
                  <el-text class="mx-1"
                           size="large">保养任务</el-text>
                  <div>
                     <el-button type="primary"
                                icon="Plus"
                                @click="addScheduledTask">
                        新增任务
                     </el-button>
                     <el-button type="danger"
                                icon="Delete"
                                :disabled="scheduledMultipleList.length <= 0"
                                @click="delScheduledTaskByIds(scheduledMultipleList.map((item) => item.id))">
                        批量删除
                     </el-button>
                  </div>
               </div>
               <PIMTable rowKey="id"
                         isSelection
                         :column="scheduledColumns"
                         :tableData="scheduledDataList"
                         :page="{
              current: scheduledPagination.currentPage,
              size: scheduledPagination.pageSize,
              total: scheduledPagination.total,
            }"
                         @selection-change="handleScheduledSelectionChange"
                         @pagination="changeScheduledPage">
                  <template #statusRef="{ row }">
                     <el-tag v-if="row.status === 1"
                             type="success">启用</el-tag>
                     <el-tag v-if="row.status === 0"
                             type="danger">停用</el-tag>
                  </template>
                  <template #operation="{ row }">
                     <el-button type="primary"
                                link
                                @click="editScheduledTask(row)">
                        编辑
                     </el-button>
                     <el-button type="danger"
                                link
                                @click="delScheduledTaskByIds(row.id)">
                        删除
                     </el-button>
                  </template>
               </PIMTable>
            </div>
         </el-tab-pane>
         <!-- 保养记录tab(原设备保养页面) -->
         <el-tab-pane label="保养记录"
                      name="record">
            <div class="search_form">
               <el-form :model="filters"
                        :inline="true">
                  <el-form-item label="设备名称">
                     <el-input v-model="filters.deviceName"
                               style="width: 240px"
                               placeholder="请输入设备名称"
                               clearable
                               :prefix-icon="Search"
                               @change="getTableData" />
                  </el-form-item>
                  <el-form-item label="计划保养日期">
                     <el-date-picker v-model="filters.maintenancePlanTime"
                                     type="date"
                                     placeholder="请选择计划保养日期"
                                     size="default"
                                     @change="(date) => handleDateChange(date,2)" />
                  </el-form-item>
                  <el-form-item label="实际保养日期">
                     <el-date-picker v-model="filters.maintenanceActuallyTime"
                                     type="date"
                                     placeholder="请选择实际保养日期"
                                     size="default"
                                     @change="(date) => handleDateChange(date,1)" />
                  </el-form-item>
                  <el-form-item label="实际保养人">
                     <el-input v-model="filters.maintenanceActuallyName"
                               style="width: 240px"
                               placeholder="请输入实际保养人"
                               clearable
                               :prefix-icon="Search"
                               @change="getTableData" />
                  </el-form-item>
                  <el-form-item>
                     <el-button type="primary"
                                @click="getTableData">搜索</el-button>
                     <el-button @click="resetFilters">重置</el-button>
                  </el-form-item>
               </el-form>
            </div>
            <div class="table_list">
               <div class="actions">
                  <el-text class="mx-1"
                           size="large">保养记录</el-text>
                  <div>
                     <el-button type="success"
                                icon="Van"
                                @click="addPlan">
                        新增计划
                     </el-button>
                     <el-button @click="handleOut">
                        导出
                     </el-button>
                     <el-button type="danger"
                                icon="Delete"
                                :disabled="multipleList.length <= 0"
                                @click="delRepairByIds(multipleList.map((item) => item.id))">
                        批量删除
                     </el-button>
                  </div>
               </div>
               <el-table
                  :data="groupedDataList"
                  border
                  v-loading="tableLoading"
                  @selection-change="handleSelectionChange"
                  :expand-row-keys="expandedRowKeys"
                  :row-key="(row) => row.date"
                  @expand-change="onExpandChange"
               >
                  <el-table-column type="selection" width="55" />
                  <el-table-column type="expand">
                     <template #default="props">
                        <el-table :data="props.row.children" border row-key="id">
                           <el-table-column label="设备名称" prop="deviceName" align="center" />
                           <el-table-column label="规格型号" prop="deviceModel" align="center" />
                           <el-table-column label="录入人" prop="createUserName" align="center" />
                           <el-table-column label="保养项目" prop="machineryCategory" align="center">
                              <template #default="{ row }">
                                 {{ row.machineryCategory || '--' }}
                              </template>
                           </el-table-column>
                           <el-table-column label="实际保养人" prop="maintenanceActuallyName" align="center" />
                           <el-table-column label="实际保养日期" align="center">
                              <template #default="{ row }">
                                 {{ row.maintenanceActuallyTime ? dayjs(row.maintenanceActuallyTime).format('YYYY-MM-DD HH:mm:ss') : '-' }}
                              </template>
                           </el-table-column>
                           <el-table-column label="保养结果" align="center">
                              <template #default="{ row }">
                                 {{ row.maintenanceResult || '-' }}
                              </template>
                           </el-table-column>
                           <el-table-column label="状态" align="center">
                              <template #default="{ row }">
                                 <el-tag v-if="row.status === 2" type="danger">失败</el-tag>
                                 <el-tag v-if="row.status === 1" type="success">完结</el-tag>
                                 <el-tag v-if="row.status === 0" type="warning">待保养</el-tag>
                              </template>
                           </el-table-column>
                           <el-table-column label="操作" align="center" width="300">
                              <template #default="{ row }">
                                 <el-button type="primary" link :disabled="row.status === 1" @click="editPlan(row.id)">编辑</el-button>
                                 <el-button type="success" link :disabled="row.status !== 0" @click="handleSingleComplete(row.id)">保养完成</el-button>
                                 <el-button type="success" link :disabled="row.status === 1" @click="addMaintain(row)">保养</el-button>
                                 <el-button type="danger" link :disabled="row.status === 1" @click="delRepairByIds(row.id)">删除</el-button>
                                 <el-button type="primary" link @click="openFileDialog(row)">附件</el-button>
                              </template>
                           </el-table-column>
                        </el-table>
                     </template>
                  </el-table-column>
                  <el-table-column label="计划保养日期" prop="date" align="center" />
                  <el-table-column label="保养记录数" prop="count" align="center" />
                  <el-table-column label="待保养数" align="center" width="120">
                     <template #default="{ row }">
                        {{ row.children.filter(c => c.status === 0).length }}
                     </template>
                  </el-table-column>
                  <el-table-column label="操作" align="center" width="200">
                     <template #default="{ row }">
                        <el-button
                           type="primary"
                           size="small"
                           :disabled="!row.children.some(c => c.status === 0)"
                           @click="handleBatchComplete(row.date)"
                        >
                           一键保养完成
                        </el-button>
                     </template>
                  </el-table-column>
               </el-table>
               <Pagination
                  v-show="pagination.total > 0"
                  :total="pagination.total"
                  layout="total, sizes, prev, pager, next, jumper"
                  :page="pagination.currentPage"
                  :limit="pagination.pageSize"
                  @pagination="changePage"
               />
            </div>
         </el-tab-pane>
      </el-tabs>
      <PlanModal ref="planModalRef"
                 @ok="getTableData" />
      <MaintenanceModal ref="maintainModalRef"
                        @ok="getTableData" />
      <FormDia ref="formDiaRef"
               @closeDia="getScheduledTableData" />
      <FileList v-if="fileDialogVisible"
                v-model:visible="fileDialogVisible"
                :record-type="'device_maintenance'"
                :record-id="currentMaintenanceTaskId" />
   </div>
</template>
<script setup>
import { usePaginationApi } from "@/hooks/usePaginationApi";
import { getUpkeepPage, delUpkeep } from "@/api/equipmentManagement/upkeep";
import { onMounted } from "vue";
import PlanModal from "./Modal/PlanModal.vue";
import MaintenanceModal from "./Modal/MaintenanceModal.vue";
import {
   ref,
   onMounted,
   reactive,
   getCurrentInstance,
   nextTick,
   computed,
   defineAsyncComponent,
} from "vue";
import { Search } from "@element-plus/icons-vue";
import { ElMessage, ElMessageBox } from "element-plus";
import PlanModal from "./Form/PlanModal.vue";
import MaintenanceModal from "./Form/MaintenanceModal.vue";
import FormDia from "./Form/formDia.vue";
import {
   getUpkeepPage,
   delUpkeep,
   deviceMaintenanceTaskList,
   deviceMaintenanceTaskDel,
   batchCompleteMaintenance,
   completeMaintenance,
} from "@/api/equipmentManagement/upkeep";
import dayjs from "dayjs";
import { ElMessageBox, ElMessage } from "element-plus";
import Pagination from "@/components/PIMTable/Pagination.vue";
defineOptions({
  name: "设备保养",
});
const { proxy } = getCurrentInstance();
const FileList = defineAsyncComponent(() =>
   import("@/components/Dialog/FileList.vue")
);
// Tab相关
const activeTab = ref("scheduled");
// 计划弹窗控制器
const planModalRef = ref();
// 保养弹窗控制器
const maintainModalRef = ref();
// 定时任务弹窗控制器
const formDiaRef = ref();
// 附件弹窗
const fileListDialogRef = ref(null);
const fileDialogVisible = ref(false);
const currentMaintenanceTaskId = ref(null);
// 表格多选框选中项
// 保养记录tab(原设备保养页面)相关变量
const filters = reactive({
   deviceName: "",
   maintenancePlanTime: "",
   maintenanceActuallyTime: "",
   maintenanceActuallyName: "",
});
const dataList = ref([]);
const pagination = ref({
   currentPage: 1,
   pageSize: 100,
   total: 0,
});
const multipleList = ref([]);
const tableLoading = ref(false);
const expandedRowKeys = ref([]);
// 多选后做什么
const handleSelectionChange = (selectionList) => {
  multipleList.value = selectionList;
const groupByDate = (list) => {
   const map = {};
   list.forEach(item => {
      const date = item.dateStr || (item.maintenancePlanTime ? dayjs(item.maintenancePlanTime).format('YYYY-MM-DD') : (item.createTime ? dayjs(item.createTime).format('YYYY-MM-DD') : '未知日期'));
      if (!map[date]) map[date] = [];
      map[date].push(item);
   });
   return Object.entries(map).map(([date, children]) => ({ date, children, count: children.length }));
};
// 表格钩子
const {
  filters,
  columns,
  dataList,
  pagination,
  getTableData,
  resetFilters,
  onCurrentChange,
} = usePaginationApi(getUpkeepPage, {}, [
  {
    label: "设备名称",
    align: "center",
    prop: "deviceName",
  },
  {
    label: "规格型号",
    align: "center",
    prop: "deviceModel",
  },
  {
    label: "计划保养日期",
    align: "center",
    prop: "maintenancePlanTime",
    formatData: (cell) => dayjs(cell).format("YYYY-MM-DD"),
  },
  {
    label: "录入人",
    align: "center",
    prop: "createUserName",
  },
  {
    label: "录入日期",
    align: "center",
    prop: "createTime",
    formatData: (cell) => dayjs(cell).format("YYYY-MM-DD HH:mm:ss"),
    width: 200,
  },
  {
    label: "实际保养人",
    align: "center",
    prop: "maintenanceActuallyName",
  },
  {
    label: "实际保养日期",
    align: "center",
    prop: "maintenanceActuallyTime",
    formatData: (cell) =>
      cell ? dayjs(cell).format("YYYY-MM-DD HH:mm:ss") : "-",
  },
  {
    label: "保养结果",
    align: "center",
    prop: "maintenanceResult",
    dataType: "slot",
    slot: "maintenanceResultRef",
  },
  {
    label: "状态",
    align: "center",
    prop: "status",
    dataType: "slot",
    slot: "statusRef",
  },
  {
    fixed: "right",
    label: "操作",
    dataType: "slot",
    slot: "operation",
    align: "center",
    width: "200px",
  },
const groupedDataList = computed(() => groupByDate(dataList.value));
// 单条保养完成
const handleSingleComplete = async (id) => {
   try {
      await ElMessageBox.confirm('确认将该保养记录标记为完成?', '提示', { type: 'warning' });
      const res = await completeMaintenance(id);
      if (res.code === 200) {
         ElMessage.success('保养完成');
         getTableData();
      } else {
         ElMessage.error(res.msg || '操作失败');
      }
   } catch { /* 取消 */ }
};
// 一键保养完成
const handleBatchComplete = async (dateStr) => {
   try {
      await ElMessageBox.confirm(`确认将 ${dateStr} 的所有待保养记录标记为完成?`, '提示', { type: 'warning' });
      const res = await batchCompleteMaintenance(dateStr);
      if (res.code === 200) {
         ElMessage.success(res.msg || '批量保养完成成功');
         getTableData();
      } else {
         ElMessage.error(res.msg || '批量保养完成失败');
      }
   } catch { /* 取消 */ }
};
const onExpandChange = (row, expandedRows) => {
   expandedRowKeys.value = expandedRows.map(r => r.date);
};
// 保养任务tab相关变量
const scheduledFilters = reactive({
   taskName: "",
   status: "",
});
const scheduledDataList = ref([]);
const scheduledPagination = reactive({
   currentPage: 1,
   pageSize: 10,
   total: 0,
});
const scheduledMultipleList = ref([]);
// 保养任务表格列配置
const scheduledColumns = ref([
   { prop: "taskName", label: "设备名称" },
   {
      label: "规格型号",
      prop: "deviceModel",
   },
   {
      label: "保养项目",
      prop: "machineryCategory",
      minWidth: 120,
      formatData: cell => cell || "--",
   },
   {
      prop: "frequencyType",
      label: "频次",
      minWidth: 150,
      // PIMTable 使用的是 formatData,而不是 Element-Plus 的 formatter
      formatData: cell =>
         ({
            DAILY: "每日",
            WEEKLY: "每周",
            MONTHLY: "每月",
            QUARTERLY: "季度",
         }[cell] || ""),
   },
   {
      prop: "frequencyDetail",
      label: "开始日期与时间",
      minWidth: 150,
      // 同样改用 formatData,PIMTable 内部会把单元格值传进来
      formatData: cell => {
         if (typeof cell !== "string") return "";
         let val = cell;
         const replacements = {
            MON: "周一",
            TUE: "周二",
            WED: "周三",
            THU: "周四",
            FRI: "周五",
            SAT: "周六",
            SUN: "周日",
         };
         // 使用正则一次性替换所有匹配项
         return val.replace(
            /MON|TUE|WED|THU|FRI|SAT|SUN/g,
            match => replacements[match]
         );
      },
   },
   { prop: "maintenancePerson", label: "保养人", minWidth: 100 },
   { prop: "registrant", label: "登记人", minWidth: 100 },
   {
      prop: "registrationDate",
      label: "登记日期",
      minWidth: 100,
      formatData: cell =>
         cell ? dayjs(cell).format("YYYY-MM-DD HH:mm:ss") : "-",
   },
   {
      fixed: "right",
      label: "操作",
      dataType: "slot",
      slot: "operation",
      align: "center",
      width: "200px",
   },
]);
// type == 1实际保养时间 2计划保养时间
const handleDateChange = (value,type) => {
  filters.maintenanceActuallyTimeReq = null
  filters.maintenancePlanTimeReq = null
  if(type === 1){
    if (value) {
      filters.maintenanceActuallyTimeReq = dayjs(value).format("YYYY-MM-DD");
    }
  }else{
    if (value) {
      filters.maintenancePlanTimeReq = dayjs(value).format("YYYY-MM-DD");
    }
  }
  getTableData();
// 保养记录表格列配置(原设备保养表格列)
const columns = ref([
   {
      label: "设备名称",
      align: "center",
      prop: "deviceName",
   },
   {
      label: "规格型号",
      align: "center",
      prop: "deviceModel",
   },
   {
      label: "计划保养日期",
      align: "center",
      prop: "maintenancePlanTime",
      formatData: cell => {
         return cell == null ? "-" : dayjs(cell).format("YYYY-MM-DD");
      },
   },
   {
      label: "录入人",
      align: "center",
      prop: "createUserName",
   },
   {
      label: "保养项目",
      align: "center",
      prop: "machineryCategory",
      formatData: cell => cell || "--",
   },
   // {
   //   label: "录入日期",
   //   align: "center",
   //   prop: "createTime",
   //   formatData: (cell) => dayjs(cell).format("YYYY-MM-DD HH:mm:ss"),
   //   width: 200,
   // },
   {
      label: "实际保养人",
      align: "center",
      prop: "maintenanceActuallyName",
   },
   {
      label: "实际保养日期",
      align: "center",
      prop: "maintenanceActuallyTime",
      formatData: cell =>
         cell ? dayjs(cell).format("YYYY-MM-DD HH:mm:ss") : "-",
   },
   {
      label: "保养结果",
      align: "center",
      prop: "maintenanceResult",
      dataType: "slot",
      slot: "maintenanceResultRef",
   },
   {
      label: "状态",
      align: "center",
      prop: "status",
      dataType: "slot",
      slot: "statusRef",
   },
   {
      fixed: "right",
      label: "操作",
      dataType: "slot",
      slot: "operation",
      align: "center",
      width: "350px",
   },
]);
// Tab切换处理
const handleTabChange = tabName => {
   if (tabName === "record") {
      getTableData();
   } else if (tabName === "scheduled") {
      getScheduledTableData();
   }
};
// 新增保养
const addMaintain = () => {
  const row = multipleList.value[0];
  maintainModalRef.value.open(row.id, row);
// 保养任务相关方法
const getScheduledTableData = async () => {
   try {
      const params = {
         current: scheduledPagination.currentPage,
         size: scheduledPagination.pageSize,
         taskName: scheduledFilters.taskName || undefined,
         status: scheduledFilters.status || undefined,
      };
      const { code, data } = await deviceMaintenanceTaskList(params);
      if (code === 200) {
         scheduledDataList.value = data?.records || [];
         scheduledPagination.total = data?.total || 0;
      }
   } catch (error) {
      ElMessage.error("获取定时任务列表失败");
   }
};
// 新增计划
const resetScheduledFilters = () => {
   scheduledFilters.taskName = "";
   scheduledFilters.status = "";
   getScheduledTableData();
};
const handleScheduledSelectionChange = selection => {
   scheduledMultipleList.value = selection;
};
const changeScheduledPage = page => {
   scheduledPagination.currentPage = page.page;
   scheduledPagination.pageSize = page.limit;
   getScheduledTableData();
};
const addScheduledTask = () => {
   nextTick(() => {
      formDiaRef.value?.openDialog("add");
   });
};
const editScheduledTask = row => {
   if (row) {
      nextTick(() => {
         formDiaRef.value?.openDialog("edit", row);
      });
   }
};
const delScheduledTaskByIds = async ids => {
   try {
      await ElMessageBox.confirm("确定删除选中的定时任务吗?", "提示", {
         type: "warning",
      });
      const payload = Array.isArray(ids) ? ids : [ids];
      await deviceMaintenanceTaskDel(payload);
      ElMessage.success("删除定时任务成功");
      getScheduledTableData();
   } catch (error) {
      // 用户取消删除
   }
};
const handleScheduledOut = () => {
   ElMessage.info("导出定时任务功能待实现");
};
// 保养记录相关方法(原设备保养页面方法)
const getTableData = async () => {
   tableLoading.value = true;
   try {
      const params = {
         current: pagination.value.currentPage,
         size: pagination.value.pageSize,
         deviceName: filters.deviceName || undefined,
         maintenancePlanTime: filters.maintenancePlanTime
            ? dayjs(filters.maintenancePlanTime).format("YYYY-MM-DD")
            : undefined,
         maintenanceActuallyTime: filters.maintenanceActuallyTime
            ? dayjs(filters.maintenanceActuallyTime).format("YYYY-MM-DD")
            : undefined,
         maintenanceActuallyName: filters.maintenanceActuallyName || undefined,
      };
      const { code, data } = await getUpkeepPage(params);
      if (code === 200) {
         dataList.value = data.records;
         pagination.value.total = data.total;
      }
   } catch (error) {
      console.log(error);
   } finally {
      tableLoading.value = false;
   }
};
const resetFilters = () => {
   filters.deviceName = "";
   filters.maintenancePlanTime = "";
   filters.maintenanceActuallyTime = "";
   filters.maintenanceActuallyName = "";
   getTableData();
};
const handleSelectionChange = selection => {
   // 从选中的分组行中收集所有子记录ID
   const ids = [];
   selection.forEach(group => {
      if (group.children) {
         group.children.forEach(child => ids.push(child.id));
      }
   });
   multipleList.value = ids;
};
const changePage = page => {
   pagination.value.currentPage = page.page;
   pagination.value.pageSize = page.limit;
   getTableData();
};
const addMaintain = row => {
   maintainModalRef.value.open(row.id, row);
};
const addPlan = () => {
  planModalRef.value.openModal();
   planModalRef.value.openModal();
};
// 编辑计划
const editPlan = (id) => {
  planModalRef.value.openEdit(id);
const editPlan = id => {
   planModalRef.value.openEdit(id);
};
const changePage = ({ page, limit }) => {
   pagination.currentPage = page;
   pagination.pageSize = limit;
   onCurrentChange(page);
const delRepairByIds = async ids => {
   const idList = Array.isArray(ids) ? ids : [ids];
   if (idList.length === 0) return;
   try {
      await ElMessageBox.confirm("确认删除保养数据, 此操作不可逆?", "警告", {
         confirmButtonText: "确定",
         cancelButtonText: "取消",
         type: "warning",
      });
      const { code } = await delUpkeep(idList);
      if (code === 200) {
         ElMessage.success("删除成功");
         getTableData();
      }
   } catch (error) {
      // 用户取消删除
   }
};
// 单行删除
const delRepairByIds = async (ids) => {
  ElMessageBox.confirm("确认删除报修数据, 此操作不可逆?", "警告", {
    confirmButtonText: "确定",
    cancelButtonText: "取消",
    type: "warning",
  }).then(async () => {
    const { code } = await delUpkeep(ids);
    if (code === 200) {
      ElMessage.success("删除成功");
      getTableData();
    }
  });
const handleOut = () => {
   ElMessageBox.confirm("选中的内容将被导出,是否确认导出?", "导出", {
      confirmButtonText: "确认",
      cancelButtonText: "取消",
      type: "warning",
   })
      .then(() => {
         proxy.download("/device/maintenance/export", {}, "设备保养.xlsx");
      })
      .catch(() => {
         ElMessage.info("已取消");
      });
};
const handleDateChange = (date, type) => {
   if (type === 1) {
      filters.maintenanceActuallyTime = date
         ? dayjs(date).format("YYYY-MM-DD")
         : "";
   } else {
      filters.maintenancePlanTime = date ? dayjs(date).format("YYYY-MM-DD") : "";
   }
   getTableData();
};
// 打开附件弹窗
const openFileDialog = async row => {
   currentMaintenanceTaskId.value = row.id;
   fileDialogVisible.value = true;
};
onMounted(() => {
  getTableData();
   // 根据默认激活的 Tab 调用对应的查询接口
   if (activeTab.value === "scheduled") {
      getScheduledTableData();
   } else {
      getTableData();
   }
});
</script>
<style lang="scss" scoped>
.table_list {
  margin-top: unset;
   margin-top: unset;
}
.actions {
  display: flex;
  justify-content: space-between;
  margin-bottom: 10px;
   display: flex;
   justify-content: space-between;
   margin-bottom: 10px;
}
</style>