huminmin
2026-06-29 2d7864ea93229deef2793cbc4e650070bdc6f191
特种设备管理
已添加2个文件
602 ■■■■■ 文件已修改
src/api/safeProduction/specialEquipmentManagement.js 105 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/safeProduction/specialEquipmentManagement/index.vue 497 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/safeProduction/specialEquipmentManagement.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,105 @@
import request from "@/utils/request";
export function specialEquipmentLedgerListPage(query) {
  return request({
    url: "/safe/specialEquipment/ledger/listPage",
    method: "get",
    params: query,
  });
}
export function specialEquipmentLedgerList(query) {
  return request({
    url: "/safe/specialEquipment/ledger/list",
    method: "get",
    params: query,
  });
}
export function specialEquipmentLedgerAdd(data) {
  return request({
    url: "/safe/specialEquipment/ledger/add",
    method: "post",
    data,
  });
}
export function specialEquipmentLedgerUpdate(data) {
  return request({
    url: "/safe/specialEquipment/ledger/update",
    method: "post",
    data,
  });
}
export function specialEquipmentLedgerDel(ids) {
  return request({
    url: "/safe/specialEquipment/ledger/delete",
    method: "delete",
    data: ids,
  });
}
export function specialEquipmentRecordListPage(query) {
  return request({
    url: "/safe/specialEquipment/record/listPage",
    method: "get",
    params: query,
  });
}
export function specialEquipmentRecordAdd(data) {
  return request({
    url: "/safe/specialEquipment/record/add",
    method: "post",
    data,
  });
}
export function specialEquipmentRecordUpdate(data) {
  return request({
    url: "/safe/specialEquipment/record/update",
    method: "post",
    data,
  });
}
export function specialEquipmentRecordDel(ids) {
  return request({
    url: "/safe/specialEquipment/record/delete",
    method: "delete",
    data: ids,
  });
}
export function specialEquipmentRectificationListPage(query) {
  return request({
    url: "/safe/specialEquipment/rectification/listPage",
    method: "get",
    params: query,
  });
}
export function specialEquipmentRectificationAdd(data) {
  return request({
    url: "/safe/specialEquipment/rectification/add",
    method: "post",
    data,
  });
}
export function specialEquipmentRectificationClose(data) {
  return request({
    url: "/safe/specialEquipment/rectification/close",
    method: "post",
    data,
  });
}
export function specialEquipmentRectificationDel(ids) {
  return request({
    url: "/safe/specialEquipment/rectification/delete",
    method: "delete",
    data: ids,
  });
}
src/views/safeProduction/specialEquipmentManagement/index.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,497 @@
<template>
  <div class="app-container">
    <el-tabs v-model="activeTab" @tab-change="handleTabChange">
      <el-tab-pane label="电子台账" name="ledger">
        <div class="search_form mb20">
          <div>
            <span class="search_title">设备名称:</span>
            <el-input v-model="ledgerSearch.equipmentName" style="width: 240px" clearable placeholder="请输入设备名称" @change="ledgerQuery" :prefix-icon="Search" />
            <el-button type="primary" style="margin-left: 10px" @click="ledgerQuery">搜索</el-button>
          </div>
          <div style="margin-left: auto">
            <el-button type="primary" @click="openLedgerForm()">新增台账</el-button>
            <el-button type="danger" plain @click="deleteLedger">删除</el-button>
          </div>
        </div>
        <PIMTable rowKey="id" :column="ledgerColumns" :tableData="ledgerTableData" :page="ledgerPage" :isSelection="true" @selection-change="handleLedgerSelectionChange" :tableLoading="ledgerLoading" @pagination="ledgerPagination" :total="ledgerPage.total" />
      </el-tab-pane>
      <el-tab-pane label="检验维保记录" name="record">
        <div class="search_form mb20">
          <div>
            <span class="search_title">记录类型:</span>
            <el-select v-model="recordSearch.recordType" style="width: 180px" clearable @change="recordQuery">
              <el-option label="检验" :value="1" />
              <el-option label="维保" :value="2" />
            </el-select>
            <el-button type="primary" style="margin-left: 10px" @click="recordQuery">搜索</el-button>
          </div>
          <div>
            <el-button type="primary" @click="openRecordForm()">新增记录</el-button>
            <el-button type="danger" plain @click="deleteRecord">删除</el-button>
          </div>
        </div>
        <PIMTable rowKey="id" :column="recordColumns" :tableData="recordTableData" :page="recordPage" :isSelection="true" @selection-change="handleRecordSelectionChange" :tableLoading="recordLoading" @pagination="recordPagination" :total="recordPage.total" />
      </el-tab-pane>
      <el-tab-pane label="隐患整改" name="rectification">
        <div class="search_form mb20">
          <div>
            <span class="search_title">整改状态:</span>
            <el-select v-model="rectSearch.rectificationStatus" style="width: 180px" clearable @change="rectQuery">
              <el-option label="待整改" :value="1" />
              <el-option label="整改中" :value="2" />
              <el-option label="待复核" :value="3" />
              <el-option label="已闭环" :value="4" />
            </el-select>
            <el-button type="primary" style="margin-left: 10px" @click="rectQuery">搜索</el-button>
          </div>
          <div>
            <el-button type="primary" @click="openRectForm()">新增整改</el-button>
            <el-button type="danger" plain @click="deleteRect">删除</el-button>
          </div>
        </div>
        <PIMTable rowKey="id" :column="rectColumns" :tableData="rectTableData" :page="rectPage" :isSelection="true" @selection-change="handleRectSelectionChange" :tableLoading="rectLoading" @pagination="rectPagination" :total="rectPage.total" />
      </el-tab-pane>
    </el-tabs>
    <el-dialog v-model="ledgerDialogVisible" :title="ledgerDialogTitle" width="900px" :close-on-click-modal="false">
      <el-form ref="ledgerFormRef" :model="ledgerForm" label-position="top" :rules="ledgerRules">
        <el-row :gutter="20">
          <el-col :span="12"><el-form-item label="设备编号" prop="equipmentNo"><el-input v-model="ledgerForm.equipmentNo" /></el-form-item></el-col>
          <el-col :span="12"><el-form-item label="设备名称" prop="equipmentName"><el-input v-model="ledgerForm.equipmentName" /></el-form-item></el-col>
        </el-row>
        <el-row :gutter="20">
          <el-col :span="12"><el-form-item label="设备类别"><el-input v-model="ledgerForm.equipmentType" /></el-form-item></el-col>
          <el-col :span="12"><el-form-item label="规格型号"><el-input v-model="ledgerForm.modelSpec" /></el-form-item></el-col>
        </el-row>
        <el-row :gutter="20">
          <el-col :span="12"><el-form-item label="安装位置"><el-input v-model="ledgerForm.installLocation" /></el-form-item></el-col>
          <el-col :span="12"><el-form-item label="使用单位"><el-input v-model="ledgerForm.useUnit" /></el-form-item></el-col>
        </el-row>
        <el-row :gutter="20">
          <el-col :span="12">
            <el-form-item label="负责人">
              <el-select v-model="ledgerForm.managerId" filterable clearable style="width: 100%" placeholder="请选择负责人" @change="handleLedgerManagerChange">
                <el-option v-for="item in activeUserOptions" :key="item.userId" :label="item.nickName || item.userName" :value="item.userId" />
              </el-select>
            </el-form-item>
          </el-col>
        </el-row>
      </el-form>
      <template #footer>
        <el-button type="primary" @click="submitLedgerForm">确定</el-button>
        <el-button @click="ledgerDialogVisible = false">取消</el-button>
      </template>
    </el-dialog>
    <el-dialog v-model="recordDialogVisible" :title="recordDialogTitle" width="900px" :close-on-click-modal="false">
      <el-form ref="recordFormRef" :model="recordForm" label-position="top" :rules="recordRules">
        <el-row :gutter="20">
          <el-col :span="12"><el-form-item label="关联设备" prop="equipmentId"><el-select v-model="recordForm.equipmentId" filterable clearable style="width: 100%" placeholder="请选择设备"><el-option v-for="item in activeLedgerOptions" :key="item.id" :label="item.equipmentName" :value="item.id" /></el-select></el-form-item></el-col>
          <el-col :span="12"><el-form-item label="记录类型" prop="recordType"><el-select v-model="recordForm.recordType" clearable style="width: 100%" placeholder="请选择记录类型"><el-option label="检验" :value="1" /><el-option label="维保" :value="2" /></el-select></el-form-item></el-col>
        </el-row>
        <el-row :gutter="20">
          <el-col :span="12"><el-form-item label="记录编号" prop="recordNo"><el-input v-model="recordForm.recordNo" /></el-form-item></el-col>
          <el-col :span="12"><el-form-item label="记录日期" prop="recordDate"><el-date-picker v-model="recordForm.recordDate" value-format="YYYY-MM-DD" type="date" style="width: 100%" /></el-form-item></el-col>
        </el-row>
        <el-row :gutter="20">
          <el-col :span="12">
            <el-form-item label="执行人" prop="executorId">
              <el-select v-model="recordForm.executorId" filterable clearable style="width: 100%" placeholder="请选择执行人" @change="handleExecutorChange">
                <el-option v-for="item in activeUserOptions" :key="item.userId" :label="item.nickName || item.userName" :value="item.userId" />
              </el-select>
            </el-form-item>
          </el-col>
          <el-col :span="12"><el-form-item label="下次到期日期" prop="nextDueDate"><el-date-picker v-model="recordForm.nextDueDate" value-format="YYYY-MM-DD" type="date" style="width: 100%" /></el-form-item></el-col>
        </el-row>
        <el-form-item label="执行结果" prop="executeResult"><el-input v-model="recordForm.executeResult" type="textarea" :rows="3" /></el-form-item>
        <el-form-item label="问题描述" prop="problemDescription"><el-input v-model="recordForm.problemDescription" type="textarea" :rows="3" /></el-form-item>
        <el-form-item label="处理措施" prop="disposeMeasure"><el-input v-model="recordForm.disposeMeasure" type="textarea" :rows="3" /></el-form-item>
        <el-form-item label="附件说明" prop="attachmentRemark"><el-input v-model="recordForm.attachmentRemark" type="textarea" :rows="2" /></el-form-item>
      </el-form>
      <template #footer>
        <el-button type="primary" @click="submitRecordForm">确定</el-button>
        <el-button @click="recordDialogVisible = false">取消</el-button>
      </template>
    </el-dialog>
    <el-dialog v-model="rectDialogVisible" :title="rectDialogTitle" width="900px" :close-on-click-modal="false">
      <el-form ref="rectFormRef" :model="rectForm" label-position="top" :rules="rectRules">
        <el-row :gutter="20">
          <el-col :span="12"><el-form-item label="关联设备" prop="equipmentId"><el-select v-model="rectForm.equipmentId" filterable clearable style="width: 100%" placeholder="请选择设备"><el-option v-for="item in activeLedgerOptions" :key="item.id" :label="item.equipmentName" :value="item.id" /></el-select></el-form-item></el-col>
          <el-col :span="12"><el-form-item label="风险等级" prop="riskLevel"><el-select v-model="rectForm.riskLevel" clearable style="width: 100%" placeholder="请选择风险等级"><el-option label="低" value="低" /><el-option label="中" value="中" /><el-option label="高" value="高" /></el-select></el-form-item></el-col>
        </el-row>
        <el-row :gutter="20">
          <el-col :span="12"><el-form-item label="发现日期" prop="discoveredDate"><el-date-picker v-model="rectForm.discoveredDate" value-format="YYYY-MM-DD" type="date" style="width: 100%" /></el-form-item></el-col>
          <el-col :span="12"><el-form-item label="整改期限" prop="rectificationDeadline"><el-date-picker v-model="rectForm.rectificationDeadline" value-format="YYYY-MM-DD" type="date" style="width: 100%" /></el-form-item></el-col>
        </el-row>
        <el-row :gutter="20">
          <el-col :span="12">
            <el-form-item label="整改责任人" prop="responsibleUserId">
              <el-select v-model="rectForm.responsibleUserId" filterable clearable style="width: 100%" placeholder="请选择整改责任人" @change="handleResponsibleUserChange">
                <el-option v-for="item in activeUserOptions" :key="item.userId" :label="item.nickName || item.userName" :value="item.userId" />
              </el-select>
            </el-form-item>
          </el-col>
          <el-col :span="12"><el-form-item label="整改状态" prop="rectificationStatus"><el-select v-model="rectForm.rectificationStatus" clearable style="width: 100%" placeholder="请选择整改状态"><el-option label="待整改" :value="1" /><el-option label="整改中" :value="2" /><el-option label="待复核" :value="3" /><el-option label="已闭环" :value="4" /></el-select></el-form-item></el-col>
        </el-row>
        <el-form-item label="隐患描述" prop="hazardDescription"><el-input v-model="rectForm.hazardDescription" type="textarea" :rows="3" /></el-form-item>
        <el-form-item label="整改措施" prop="rectificationMeasures"><el-input v-model="rectForm.rectificationMeasures" type="textarea" :rows="3" /></el-form-item>
        <el-form-item label="整改结果" prop="rectificationResult"><el-input v-model="rectForm.rectificationResult" type="textarea" :rows="3" /></el-form-item>
        <el-form-item label="备注" prop="remarks"><el-input v-model="rectForm.remarks" type="textarea" :rows="2" /></el-form-item>
      </el-form>
      <template #footer>
        <el-button type="primary" @click="submitRectForm">确定</el-button>
        <el-button @click="rectDialogVisible = false">取消</el-button>
      </template>
    </el-dialog>
  </div>
</template>
<script setup>
import { Search } from "@element-plus/icons-vue";
import { computed, reactive, ref, onMounted, getCurrentInstance } from "vue";
import { ElMessage, ElMessageBox } from "element-plus";
import PIMTable from "@/components/PIMTable/PIMTable.vue";
import {
  specialEquipmentLedgerList,
  specialEquipmentLedgerListPage,
  specialEquipmentLedgerAdd,
  specialEquipmentLedgerUpdate,
  specialEquipmentLedgerDel,
  specialEquipmentRecordListPage,
  specialEquipmentRecordAdd,
  specialEquipmentRecordUpdate,
  specialEquipmentRecordDel,
  specialEquipmentRectificationListPage,
  specialEquipmentRectificationAdd,
  specialEquipmentRectificationClose,
  specialEquipmentRectificationDel,
} from "@/api/safeProduction/specialEquipmentManagement.js";
import { userListNoPageByTenantId } from "@/api/system/user.js";
const { proxy } = getCurrentInstance();
const activeTab = ref("ledger");
const userOptions = ref([]);
const ledgerSearch = reactive({ equipmentName: "" });
const recordSearch = reactive({ recordType: "" });
const rectSearch = reactive({ rectificationStatus: "" });
const ledgerPage = reactive({ current: 1, size: 10, total: 0 });
const recordPage = reactive({ current: 1, size: 10, total: 0 });
const rectPage = reactive({ current: 1, size: 10, total: 0 });
const ledgerTableData = ref([]);
const recordTableData = ref([]);
const rectTableData = ref([]);
const ledgerSelection = ref([]);
const recordSelection = ref([]);
const rectSelection = ref([]);
const ledgerLoading = ref(false);
const recordLoading = ref(false);
const rectLoading = ref(false);
const ledgerDialogVisible = ref(false);
const ledgerDialogTitle = ref("");
const ledgerFormRef = ref();
const ledgerForm = reactive({
  equipmentNo: "",
  equipmentName: "",
  equipmentType: "",
  modelSpec: "",
  installLocation: "",
  useUnit: "",
  managerId: "",
  managerName: "",
});
const ledgerRules = {
  equipmentNo: [{ required: true, message: "请输入设备编号", trigger: "blur" }],
  equipmentName: [{ required: true, message: "请输入设备名称", trigger: "blur" }],
};
const recordDialogVisible = ref(false);
const recordDialogTitle = ref("");
const recordFormRef = ref();
const recordForm = reactive({
  equipmentId: "",
  recordType: "",
  recordNo: "",
  recordDate: "",
  executeResult: "",
  problemDescription: "",
  disposeMeasure: "",
  executorId: "",
  executorName: "",
  nextDueDate: "",
  attachmentRemark: "",
});
const recordRules = {
  equipmentId: [{ required: true, message: "请选择关联设备", trigger: "change" }],
  recordType: [{ required: true, message: "请选择记录类型", trigger: "change" }],
  recordNo: [{ required: true, message: "请输入记录编号", trigger: "blur" }],
  recordDate: [{ required: true, message: "请选择记录日期", trigger: "change" }],
};
const rectDialogVisible = ref(false);
const rectDialogTitle = ref("");
const rectFormRef = ref();
const rectForm = reactive({
  equipmentId: "",
  hazardDescription: "",
  riskLevel: "",
  discoveredDate: "",
  responsibleUserId: "",
  responsibleUserName: "",
  rectificationDeadline: "",
  rectificationStatus: 1,
  rectificationMeasures: "",
  rectificationResult: "",
  remarks: "",
});
const rectRules = {
  equipmentId: [{ required: true, message: "请选择关联设备", trigger: "change" }],
  hazardDescription: [{ required: true, message: "请输入隐患描述", trigger: "blur" }],
  discoveredDate: [{ required: true, message: "请选择发现日期", trigger: "change" }],
  rectificationDeadline: [{ required: true, message: "请选择整改期限", trigger: "change" }],
};
const ledgerOptions = ref([]);
const activeLedgerOptions = computed(() => ledgerOptions.value);
const activeUserOptions = computed(() => userOptions.value || []);
const ledgerColumns = [
  { label: "设备编号", prop: "equipmentNo" },
  { label: "设备名称", prop: "equipmentName" },
  { label: "设备类别", prop: "equipmentType" },
  { label: "安装位置", prop: "installLocation" },
  { label: "负责人", prop: "managerName" },
  {
    label: "操作",
    dataType: "action",
    width: "180",
    operation: [
      { name: "编辑", clickFun: (row) => openLedgerForm(row) },
      { name: "删除", clickFun: (row) => deleteLedger(row.id) },
    ],
  },
];
const recordColumns = [
  { label: "记录编号", prop: "recordNo" },
  { label: "记录类型", prop: "recordType", formatData: { 1: "检验", 2: "维保" } },
  { label: "记录日期", prop: "recordDate" },
  { label: "执行人", prop: "executorName" },
  { label: "执行结果", prop: "executeResult" },
  { label: "下次到期日期", prop: "nextDueDate" },
  {
    label: "操作",
    dataType: "action",
    width: "180",
    operation: [
      { name: "编辑", clickFun: (row) => openRecordForm(row) },
      { name: "删除", clickFun: (row) => deleteRecord(row.id) },
    ],
  },
];
const rectColumns = [
  { label: "隐患描述", prop: "hazardDescription" },
  { label: "风险等级", prop: "riskLevel" },
  { label: "发现日期", prop: "discoveredDate" },
  { label: "责任人", prop: "responsibleUserName" },
  { label: "整改期限", prop: "rectificationDeadline" },
  { label: "整改状态", prop: "rectificationStatus", formatData: { 1: "待整改", 2: "整改中", 3: "待复核", 4: "已闭环" } },
  {
    label: "操作",
    dataType: "action",
    width: "220",
    operation: [
      { name: "删除", clickFun: (row) => deleteRect(row.id) },
    ],
  },
];
const ledgerQuery = async () => {
  ledgerLoading.value = true;
  const res = await specialEquipmentLedgerListPage({ ...ledgerSearch, ...ledgerPage });
  ledgerTableData.value = res.data?.records || res.data?.rows || [];
  ledgerPage.total = res.data?.total || 0;
  ledgerLoading.value = false;
};
const loadLedgerOptions = async () => {
  const res = await specialEquipmentLedgerList({});
  ledgerOptions.value = res.data || [];
};
const recordQuery = async () => {
  recordLoading.value = true;
  const res = await specialEquipmentRecordListPage({ ...recordSearch, ...recordPage });
  recordTableData.value = res.data?.records || res.data?.rows || [];
  recordPage.total = res.data?.total || 0;
  recordLoading.value = false;
};
const rectQuery = async () => {
  rectLoading.value = true;
  const res = await specialEquipmentRectificationListPage({ ...rectSearch, ...rectPage });
  rectTableData.value = res.data?.records || res.data?.rows || [];
  rectPage.total = res.data?.total || 0;
  rectLoading.value = false;
};
const handleTabChange = () => {
  if (activeTab.value === "ledger") ledgerQuery();
  if (activeTab.value === "record") recordQuery();
  if (activeTab.value === "rectification") rectQuery();
};
const ledgerPagination = ({ page, limit }) => { ledgerPage.current = page; ledgerPage.size = limit; ledgerQuery(); };
const recordPagination = ({ page, limit }) => { recordPage.current = page; recordPage.size = limit; recordQuery(); };
const rectPagination = ({ page, limit }) => { rectPage.current = page; rectPage.size = limit; rectQuery(); };
const handleLedgerSelectionChange = (rows) => (ledgerSelection.value = rows);
const handleRecordSelectionChange = (rows) => (recordSelection.value = rows);
const handleRectSelectionChange = (rows) => (rectSelection.value = rows);
const getUserDisplayName = (userId) => {
  const user = userOptions.value.find((item) => item.userId === userId);
  return user ? (user.nickName || user.userName || "") : "";
};
const handleLedgerManagerChange = (userId) => {
  ledgerForm.managerName = getUserDisplayName(userId);
};
const openLedgerForm = (row = {}) => {
  Object.assign(ledgerForm, {
    id: "",
    equipmentNo: "",
    equipmentName: "",
    equipmentType: "",
    modelSpec: "",
    installLocation: "",
    useUnit: "",
    managerName: "",
  });
  Object.assign(ledgerForm, row);
  ledgerDialogTitle.value = row.id ? "编辑台账" : "新增台账";
  ledgerDialogVisible.value = true;
};
const submitLedgerForm = async () => {
  await ledgerFormRef.value.validate();
  const api = ledgerForm.id ? specialEquipmentLedgerUpdate : specialEquipmentLedgerAdd;
  await api(ledgerForm);
  ElMessage.success("保存成功");
  ledgerDialogVisible.value = false;
  ledgerQuery();
};
const deleteLedger = async (id) => {
  const ids = id ? [id] : ledgerSelection.value.map((i) => i.id);
  if (!ids.length) return ElMessage.warning("请选择要删除的数据");
  await ElMessageBox.confirm("确认删除所选台账吗?", "提示", { type: "warning" });
  await specialEquipmentLedgerDel(ids);
  ElMessage.success("删除成功");
  ledgerQuery();
};
const openRecordForm = async (row = {}) => {
  Object.assign(recordForm, {
    id: "",
    equipmentId: "",
    recordType: "",
    recordNo: "",
    recordDate: "",
    executeResult: "",
    problemDescription: "",
    disposeMeasure: "",
    executorId: "",
    executorName: "",
    nextDueDate: "",
    attachmentRemark: "",
  });
  Object.assign(recordForm, row);
  if (!recordForm.executorId && recordForm.executorName) {
    const matched = userOptions.value.find((item) => (item.nickName || item.userName) === recordForm.executorName);
    recordForm.executorId = matched?.userId || "";
  }
  recordDialogTitle.value = row.id ? "编辑记录" : "新增记录";
  recordDialogVisible.value = true;
};
const submitRecordForm = async () => {
  await recordFormRef.value.validate();
  const api = recordForm.id ? specialEquipmentRecordUpdate : specialEquipmentRecordAdd;
  await api(recordForm);
  ElMessage.success("保存成功");
  recordDialogVisible.value = false;
  recordQuery();
};
const deleteRecord = async (id) => {
  const ids = id ? [id] : recordSelection.value.map((i) => i.id);
  if (!ids.length) return ElMessage.warning("请选择要删除的数据");
  await ElMessageBox.confirm("确认删除所选记录吗?", "提示", { type: "warning" });
  await specialEquipmentRecordDel(ids);
  ElMessage.success("删除成功");
  recordQuery();
};
const openRectForm = (row = {}) => {
  Object.assign(rectForm, {
    id: "",
    equipmentId: "",
    hazardDescription: "",
    riskLevel: "",
    discoveredDate: "",
    responsibleUserId: "",
    responsibleUserName: "",
    rectificationDeadline: "",
    rectificationStatus: 1,
    rectificationMeasures: "",
    rectificationResult: "",
    remarks: "",
  });
  Object.assign(rectForm, row);
  if (!rectForm.responsibleUserId && rectForm.responsibleUserName) {
    const matched = userOptions.value.find((item) => (item.nickName || item.userName) === rectForm.responsibleUserName);
    rectForm.responsibleUserId = matched?.userId || "";
  }
  rectDialogTitle.value = "新增整改";
  rectDialogVisible.value = true;
};
const submitRectForm = async () => {
  await rectFormRef.value.validate();
  await specialEquipmentRectificationAdd(rectForm);
  ElMessage.success("保存成功");
  rectDialogVisible.value = false;
  rectQuery();
};
const deleteRect = async (id) => {
  const ids = id ? [id] : rectSelection.value.map((i) => i.id);
  if (!ids.length) return ElMessage.warning("请选择要删除的数据");
  await ElMessageBox.confirm("确认删除所选整改数据吗?", "提示", { type: "warning" });
  await specialEquipmentRectificationDel(ids);
  ElMessage.success("删除成功");
  rectQuery();
};
onMounted(() => {
  ledgerQuery();
  loadLedgerOptions();
  userListNoPageByTenantId()
    .then((res) => {
      userOptions.value = Array.isArray(res.data) ? res.data : [];
    })
    .catch(() => {
      userOptions.value = [];
    });
});
const handleExecutorChange = (userId) => {
  recordForm.executorName = getUserDisplayName(userId);
};
const handleResponsibleUserChange = (userId) => {
  rectForm.responsibleUserName = getUserDisplayName(userId);
};
</script>