<template>
|
<div class="app-container">
|
<el-tabs v-model="activeTab" type="border-card" @tab-change="handleTabChange">
|
<el-tab-pane label="人员档案" name="personnel">
|
<el-form :model="personnelFilters" :inline="true">
|
<el-form-item label="姓名">
|
<el-input v-model="personnelFilters.name" placeholder="请输入姓名" clearable style="width: 200px" />
|
</el-form-item>
|
<el-form-item label="部门">
|
<el-input v-model="personnelFilters.dept" placeholder="请输入部门" clearable style="width: 200px" />
|
</el-form-item>
|
<el-form-item>
|
<el-button type="primary" @click="getPersonnelData">搜索</el-button>
|
<el-button @click="resetPersonnelFilters">重置</el-button>
|
</el-form-item>
|
</el-form>
|
<div class="table_list">
|
<div class="actions">
|
<el-button type="primary" @click="addPersonnel" icon="Plus">新增</el-button>
|
</div>
|
<PIMTable :column="personnelColumns" :tableData="personnelList" :page="personnelPage" @pagination="changePersonnelPage" :tableLoading="personnelLoading" />
|
</div>
|
</el-tab-pane>
|
|
<el-tab-pane label="设备设施" name="equipment">
|
<el-form :model="equipmentFilters" :inline="true">
|
<el-form-item label="设备名称">
|
<el-input v-model="equipmentFilters.name" placeholder="请输入设备名称" clearable style="width: 200px" />
|
</el-form-item>
|
<el-form-item label="所属区域">
|
<el-input v-model="equipmentFilters.areaName" placeholder="请输入所属区域" clearable style="width: 200px" />
|
</el-form-item>
|
<el-form-item>
|
<el-button type="primary" @click="getEquipmentData">搜索</el-button>
|
<el-button @click="resetEquipmentFilters">重置</el-button>
|
</el-form-item>
|
</el-form>
|
<div class="table_list">
|
<div class="actions">
|
<el-button type="primary" @click="addEquipment" icon="Plus">新增</el-button>
|
</div>
|
<PIMTable :column="equipmentColumns" :tableData="equipmentList" :page="equipmentPage" @pagination="changeEquipmentPage" :tableLoading="equipmentLoading" />
|
</div>
|
</el-tab-pane>
|
|
<el-tab-pane label="作业区域" name="workArea">
|
<el-form :model="areaFilters" :inline="true">
|
<el-form-item label="区域名称">
|
<el-input v-model="areaFilters.name" placeholder="请输入区域名称" clearable style="width: 200px" />
|
</el-form-item>
|
<el-form-item>
|
<el-button type="primary" @click="getAreaData">搜索</el-button>
|
<el-button @click="resetAreaFilters">重置</el-button>
|
</el-form-item>
|
</el-form>
|
<div class="table_list">
|
<div class="actions">
|
<el-button type="primary" @click="addArea" icon="Plus">新增</el-button>
|
</div>
|
<PIMTable :column="areaColumns" :tableData="areaList" :page="areaPage" @pagination="changeAreaPage" :tableLoading="areaLoading" />
|
</div>
|
</el-tab-pane>
|
|
<el-tab-pane label="岗位风险" name="risk">
|
<el-form :model="riskFilters" :inline="true">
|
<el-form-item label="风险类型">
|
<el-input v-model="riskFilters.type" placeholder="请输入风险类型" clearable style="width: 200px" />
|
</el-form-item>
|
<el-form-item>
|
<el-button type="primary" @click="getRiskData">搜索</el-button>
|
<el-button @click="resetRiskFilters">重置</el-button>
|
</el-form-item>
|
</el-form>
|
<div class="table_list">
|
<div class="actions">
|
<el-button type="primary" @click="addRisk" icon="Plus">新增</el-button>
|
</div>
|
<PIMTable :column="riskColumns" :tableData="riskList" :page="riskPage" @pagination="changeRiskPage" :tableLoading="riskLoading" />
|
</div>
|
</el-tab-pane>
|
|
<el-tab-pane label="应急资源" name="emergency">
|
<el-form :model="emergencyFilters" :inline="true">
|
<el-form-item label="资源名称">
|
<el-input v-model="emergencyFilters.name" placeholder="请输入资源名称" clearable style="width: 200px" />
|
</el-form-item>
|
<el-form-item>
|
<el-button type="primary" @click="getEmergencyData">搜索</el-button>
|
<el-button @click="resetEmergencyFilters">重置</el-button>
|
</el-form-item>
|
</el-form>
|
<div class="table_list">
|
<div class="actions">
|
<el-button type="primary" @click="addEmergency" icon="Plus">新增</el-button>
|
</div>
|
<PIMTable :column="emergencyColumns" :tableData="emergencyList" :page="emergencyPage" @pagination="changeEmergencyPage" :tableLoading="emergencyLoading" />
|
</div>
|
</el-tab-pane>
|
</el-tabs>
|
|
<!-- 人员档案弹窗 -->
|
<el-dialog :title="personnelDialog.title" v-model="personnelDialog.visible" width="600px" append-to-body>
|
<el-form ref="personnelFormRef" :model="personnelForm" :rules="personnelRules" label-width="100px">
|
<el-form-item label="姓名" prop="name">
|
<el-input v-model="personnelForm.name" placeholder="请输入姓名" />
|
</el-form-item>
|
<el-form-item label="部门" prop="dept">
|
<el-input v-model="personnelForm.dept" placeholder="请输入部门" />
|
</el-form-item>
|
<el-form-item label="岗位" prop="post">
|
<el-input v-model="personnelForm.post" placeholder="请输入岗位" />
|
</el-form-item>
|
<el-form-item label="联系方式" prop="phone">
|
<el-input v-model="personnelForm.phone" placeholder="请输入联系方式" />
|
</el-form-item>
|
<el-form-item label="入职日期" prop="entryDate">
|
<el-date-picker v-model="personnelForm.entryDate" type="date" placeholder="选择入职日期" value-format="YYYY-MM-DD" style="width: 100%" />
|
</el-form-item>
|
<el-form-item label="状态" prop="status">
|
<el-radio-group v-model="personnelForm.status">
|
<el-radio :value="1">在职</el-radio>
|
<el-radio :value="0">离职</el-radio>
|
</el-radio-group>
|
</el-form-item>
|
<el-form-item label="备注" prop="remark">
|
<el-input v-model="personnelForm.remark" type="textarea" :rows="3" placeholder="请输入备注" />
|
</el-form-item>
|
</el-form>
|
<template #footer>
|
<el-button @click="personnelDialog.visible = false">取 消</el-button>
|
<el-button type="primary" @click="submitPersonnelForm" :loading="personnelDialog.loading">确 定</el-button>
|
</template>
|
</el-dialog>
|
|
<!-- 设备设施弹窗 -->
|
<el-dialog :title="equipmentDialog.title" v-model="equipmentDialog.visible" width="600px" append-to-body>
|
<el-form ref="equipmentFormRef" :model="equipmentForm" :rules="equipmentRules" label-width="100px">
|
<el-form-item label="设备名称" prop="name">
|
<el-input v-model="equipmentForm.name" placeholder="请输入设备名称" />
|
</el-form-item>
|
<el-form-item label="规格型号" prop="model">
|
<el-input v-model="equipmentForm.model" placeholder="请输入规格型号" />
|
</el-form-item>
|
<el-form-item label="所属区域" prop="areaName">
|
<el-input v-model="equipmentForm.areaName" placeholder="请输入所属区域" />
|
</el-form-item>
|
<el-form-item label="状态" prop="status">
|
<el-radio-group v-model="equipmentForm.status">
|
<el-radio :value="1">正常</el-radio>
|
<el-radio :value="0">停用</el-radio>
|
</el-radio-group>
|
</el-form-item>
|
<el-form-item label="备注" prop="remark">
|
<el-input v-model="equipmentForm.remark" type="textarea" :rows="3" placeholder="请输入备注" />
|
</el-form-item>
|
</el-form>
|
<template #footer>
|
<el-button @click="equipmentDialog.visible = false">取 消</el-button>
|
<el-button type="primary" @click="submitEquipmentForm" :loading="equipmentDialog.loading">确 定</el-button>
|
</template>
|
</el-dialog>
|
|
<!-- 作业区域弹窗 -->
|
<el-dialog :title="areaDialog.title" v-model="areaDialog.visible" width="600px" append-to-body>
|
<el-form ref="areaFormRef" :model="areaForm" :rules="areaRules" label-width="100px">
|
<el-form-item label="区域名称" prop="name">
|
<el-input v-model="areaForm.name" placeholder="请输入区域名称" />
|
</el-form-item>
|
<el-form-item label="位置" prop="location">
|
<el-input v-model="areaForm.location" placeholder="请输入位置" />
|
</el-form-item>
|
<el-form-item label="负责人" prop="manager">
|
<el-input v-model="areaForm.manager" placeholder="请输入负责人" />
|
</el-form-item>
|
<el-form-item label="备注" prop="remark">
|
<el-input v-model="areaForm.remark" type="textarea" :rows="3" placeholder="请输入备注" />
|
</el-form-item>
|
</el-form>
|
<template #footer>
|
<el-button @click="areaDialog.visible = false">取 消</el-button>
|
<el-button type="primary" @click="submitAreaForm" :loading="areaDialog.loading">确 定</el-button>
|
</template>
|
</el-dialog>
|
|
<!-- 岗位风险弹窗 -->
|
<el-dialog :title="riskDialog.title" v-model="riskDialog.visible" width="600px" append-to-body>
|
<el-form ref="riskFormRef" :model="riskForm" :rules="riskRules" label-width="100px">
|
<el-form-item label="风险类型" prop="type">
|
<el-input v-model="riskForm.type" placeholder="请输入风险类型" />
|
</el-form-item>
|
<el-form-item label="风险等级" prop="level">
|
<el-select v-model="riskForm.level" placeholder="请选择风险等级" style="width: 100%">
|
<el-option label="高" value="high" />
|
<el-option label="中" value="medium" />
|
<el-option label="低" value="low" />
|
</el-select>
|
</el-form-item>
|
<el-form-item label="关联岗位" prop="post">
|
<el-input v-model="riskForm.post" placeholder="请输入关联岗位" />
|
</el-form-item>
|
<el-form-item label="风险描述" prop="description">
|
<el-input v-model="riskForm.description" type="textarea" :rows="3" placeholder="请输入风险描述" />
|
</el-form-item>
|
<el-form-item label="控制措施" prop="controlMeasures">
|
<el-input v-model="riskForm.controlMeasures" type="textarea" :rows="3" placeholder="请输入控制措施" />
|
</el-form-item>
|
<el-form-item label="备注" prop="remark">
|
<el-input v-model="riskForm.remark" type="textarea" :rows="3" placeholder="请输入备注" />
|
</el-form-item>
|
</el-form>
|
<template #footer>
|
<el-button @click="riskDialog.visible = false">取 消</el-button>
|
<el-button type="primary" @click="submitRiskForm" :loading="riskDialog.loading">确 定</el-button>
|
</template>
|
</el-dialog>
|
|
<!-- 应急资源弹窗 -->
|
<el-dialog :title="emergencyDialog.title" v-model="emergencyDialog.visible" width="600px" append-to-body>
|
<el-form ref="emergencyFormRef" :model="emergencyForm" :rules="emergencyRules" label-width="100px">
|
<el-form-item label="资源名称" prop="name">
|
<el-input v-model="emergencyForm.name" placeholder="请输入资源名称" />
|
</el-form-item>
|
<el-form-item label="资源类型" prop="type">
|
<el-input v-model="emergencyForm.type" placeholder="请输入资源类型" />
|
</el-form-item>
|
<el-form-item label="数量" prop="quantity">
|
<el-input-number v-model="emergencyForm.quantity" :min="0" style="width: 100%" />
|
</el-form-item>
|
<el-form-item label="所属区域" prop="areaName">
|
<el-input v-model="emergencyForm.areaName" placeholder="请输入所属区域" />
|
</el-form-item>
|
<el-form-item label="存放位置" prop="location">
|
<el-input v-model="emergencyForm.location" placeholder="请输入存放位置" />
|
</el-form-item>
|
<el-form-item label="管理人" prop="manager">
|
<el-input v-model="emergencyForm.manager" placeholder="请输入管理人" />
|
</el-form-item>
|
<el-form-item label="状态" prop="status">
|
<el-radio-group v-model="emergencyForm.status">
|
<el-radio :value="1">正常</el-radio>
|
<el-radio :value="0">缺失</el-radio>
|
</el-radio-group>
|
</el-form-item>
|
<el-form-item label="备注" prop="remark">
|
<el-input v-model="emergencyForm.remark" type="textarea" :rows="3" placeholder="请输入备注" />
|
</el-form-item>
|
</el-form>
|
<template #footer>
|
<el-button @click="emergencyDialog.visible = false">取 消</el-button>
|
<el-button type="primary" @click="submitEmergencyForm" :loading="emergencyDialog.loading">确 定</el-button>
|
</template>
|
</el-dialog>
|
</div>
|
</template>
|
|
<script setup>
|
import { ref, reactive, onMounted } from "vue";
|
import PIMTable from "@/components/PIMTable/PIMTable.vue";
|
import {
|
getPersonnelList,
|
addPersonnel as addPersonnelApi,
|
updatePersonnel,
|
deletePersonnel,
|
getPersonnelDetail,
|
getEquipmentList,
|
addEquipment as addEquipmentApi,
|
updateEquipment,
|
deleteEquipment,
|
getEquipmentDetail,
|
getWorkAreaList,
|
addWorkArea as addWorkAreaApi,
|
updateWorkArea,
|
deleteWorkArea,
|
getWorkAreaDetail,
|
getRiskList,
|
addRisk as addRiskApi,
|
updateRisk,
|
deleteRisk,
|
getRiskDetail,
|
getEmergencyList,
|
addEmergency as addEmergencyApi,
|
updateEmergency,
|
deleteEmergency,
|
getEmergencyDetail
|
} from "@/api/safetyManagement/basicInfo.js";
|
import { ElMessage, ElMessageBox } from "element-plus";
|
|
defineOptions({
|
name: "基础信息管理",
|
});
|
|
const activeTab = ref("personnel");
|
|
// ==================== 人员档案 ====================
|
const personnelFilters = reactive({ name: "", dept: "" });
|
const personnelList = ref([]);
|
const personnelPage = reactive({ current: 1, size: 10, total: 0 });
|
const personnelLoading = ref(false);
|
const personnelColumns = [
|
{ label: "姓名", prop: "name", align: "center" },
|
{ label: "部门", prop: "dept", align: "center" },
|
{ label: "岗位", prop: "post", align: "center" },
|
{ label: "联系方式", prop: "phone", align: "center" },
|
{ label: "入职日期", prop: "entryDate", align: "center" },
|
{
|
label: "状态",
|
prop: "status",
|
align: "center",
|
dataType: "tag",
|
formatType: (val) => (val === 1 ? "success" : "info"),
|
formatData: (val) => (val === 1 ? "在职" : "离职")
|
},
|
{
|
label: "操作",
|
prop: "action",
|
align: "center",
|
dataType: "action",
|
operation: [
|
{ name: "编辑", type: "text", clickFun: (row) => handleEditPersonnel(row) },
|
{ name: "删除", type: "text", clickFun: (row) => handleDeletePersonnel(row) }
|
]
|
}
|
];
|
|
const personnelDialog = reactive({ visible: false, title: "", loading: false });
|
const personnelFormRef = ref(null);
|
const personnelForm = reactive({
|
id: null,
|
name: "",
|
dept: "",
|
post: "",
|
phone: "",
|
entryDate: "",
|
status: 1,
|
remark: ""
|
});
|
const personnelRules = {
|
name: [{ required: true, message: "请输入姓名", trigger: "blur" }],
|
dept: [{ required: true, message: "请输入部门", trigger: "blur" }]
|
};
|
|
// ==================== 设备设施 ====================
|
const equipmentFilters = reactive({ name: "", areaName: "" });
|
const equipmentList = ref([]);
|
const equipmentPage = reactive({ current: 1, size: 10, total: 0 });
|
const equipmentLoading = ref(false);
|
const equipmentColumns = [
|
{ label: "设备名称", prop: "name", align: "center" },
|
{ label: "规格型号", prop: "model", align: "center" },
|
{ label: "所属区域", prop: "areaName", align: "center" },
|
{
|
label: "状态",
|
prop: "status",
|
align: "center",
|
dataType: "tag",
|
formatType: (val) => (val === 1 ? "success" : "danger"),
|
formatData: (val) => (val === 1 ? "正常" : "停用")
|
},
|
{
|
label: "操作",
|
prop: "action",
|
align: "center",
|
dataType: "action",
|
operation: [
|
{ name: "编辑", type: "text", clickFun: (row) => handleEditEquipment(row) },
|
{ name: "删除", type: "text", clickFun: (row) => handleDeleteEquipment(row) }
|
]
|
}
|
];
|
|
const equipmentDialog = reactive({ visible: false, title: "", loading: false });
|
const equipmentFormRef = ref(null);
|
const equipmentForm = reactive({
|
id: null,
|
name: "",
|
model: "",
|
areaName: "",
|
status: 1,
|
remark: ""
|
});
|
const equipmentRules = {
|
name: [{ required: true, message: "请输入设备名称", trigger: "blur" }]
|
};
|
|
// ==================== 作业区域 ====================
|
const areaFilters = reactive({ name: "" });
|
const areaList = ref([]);
|
const areaPage = reactive({ current: 1, size: 10, total: 0 });
|
const areaLoading = ref(false);
|
const areaColumns = [
|
{ label: "区域名称", prop: "name", align: "center" },
|
{ label: "位置", prop: "location", align: "center" },
|
{ label: "负责人", prop: "manager", align: "center" },
|
{
|
label: "操作",
|
prop: "action",
|
align: "center",
|
dataType: "action",
|
operation: [
|
{ name: "编辑", type: "text", clickFun: (row) => handleEditArea(row) },
|
{ name: "删除", type: "text", clickFun: (row) => handleDeleteArea(row) }
|
]
|
}
|
];
|
|
const areaDialog = reactive({ visible: false, title: "", loading: false });
|
const areaFormRef = ref(null);
|
const areaForm = reactive({
|
id: null,
|
name: "",
|
location: "",
|
manager: "",
|
remark: ""
|
});
|
const areaRules = {
|
name: [{ required: true, message: "请输入区域名称", trigger: "blur" }]
|
};
|
|
// ==================== 岗位风险 ====================
|
const riskFilters = reactive({ type: "" });
|
const riskList = ref([]);
|
const riskPage = reactive({ current: 1, size: 10, total: 0 });
|
const riskLoading = ref(false);
|
const riskColumns = [
|
{ label: "风险类型", prop: "type", align: "center" },
|
{
|
label: "风险等级",
|
prop: "level",
|
align: "center",
|
dataType: "tag",
|
formatType: (val) => {
|
if (val === 'high') return 'danger';
|
if (val === 'medium') return 'warning';
|
return 'success';
|
},
|
formatData: (val) => {
|
const map = { high: '高', medium: '中', low: '低' };
|
return map[val] || val;
|
}
|
},
|
{ label: "描述", prop: "description", align: "center" },
|
{
|
label: "操作",
|
prop: "action",
|
align: "center",
|
dataType: "action",
|
operation: [
|
{ name: "编辑", type: "text", clickFun: (row) => handleEditRisk(row) },
|
{ name: "删除", type: "text", clickFun: (row) => handleDeleteRisk(row) }
|
]
|
}
|
];
|
|
const riskDialog = reactive({ visible: false, title: "", loading: false });
|
const riskFormRef = ref(null);
|
const riskForm = reactive({
|
id: null,
|
type: "",
|
level: "",
|
description: "",
|
post: "",
|
controlMeasures: "",
|
remark: ""
|
});
|
const riskRules = {
|
type: [{ required: true, message: "请输入风险类型", trigger: "blur" }],
|
level: [{ required: true, message: "请选择风险等级", trigger: "change" }]
|
};
|
|
// ==================== 应急资源 ====================
|
const emergencyFilters = reactive({ name: "" });
|
const emergencyList = ref([]);
|
const emergencyPage = reactive({ current: 1, size: 10, total: 0 });
|
const emergencyLoading = ref(false);
|
const emergencyColumns = [
|
{ label: "资源名称", prop: "name", align: "center" },
|
{ label: "类型", prop: "type", align: "center" },
|
{ label: "数量", prop: "quantity", align: "center" },
|
{ label: "存放位置", prop: "location", align: "center" },
|
{
|
label: "状态",
|
prop: "status",
|
align: "center",
|
dataType: "tag",
|
formatType: (val) => (val === 1 ? "success" : "danger"),
|
formatData: (val) => (val === 1 ? "正常" : "缺失")
|
},
|
{
|
label: "操作",
|
prop: "action",
|
align: "center",
|
dataType: "action",
|
operation: [
|
{ name: "编辑", type: "text", clickFun: (row) => handleEditEmergency(row) },
|
{ name: "删除", type: "text", clickFun: (row) => handleDeleteEmergency(row) }
|
]
|
}
|
];
|
|
const emergencyDialog = reactive({ visible: false, title: "", loading: false });
|
const emergencyFormRef = ref(null);
|
const emergencyForm = reactive({
|
id: null,
|
name: "",
|
type: "",
|
quantity: 0,
|
areaName: "",
|
location: "",
|
manager: "",
|
status: 1,
|
remark: ""
|
});
|
const emergencyRules = {
|
name: [{ required: true, message: "请输入资源名称", trigger: "blur" }],
|
type: [{ required: true, message: "请输入资源类型", trigger: "blur" }]
|
};
|
|
// ==================== 通用方法 ====================
|
const loadData = () => {
|
switch (activeTab.value) {
|
case 'personnel':
|
getPersonnelData();
|
break;
|
case 'equipment':
|
getEquipmentData();
|
break;
|
case 'workArea':
|
getAreaData();
|
break;
|
case 'risk':
|
getRiskData();
|
break;
|
case 'emergency':
|
getEmergencyData();
|
break;
|
}
|
};
|
|
const handleTabChange = () => {
|
loadData();
|
};
|
|
|
|
// ==================== 人员档案方法 ====================
|
const getPersonnelData = async () => {
|
personnelLoading.value = true;
|
try {
|
const res = await getPersonnelList({
|
pageNum: personnelPage.current,
|
pageSize: personnelPage.size,
|
...personnelFilters
|
});
|
if (res.code === 200) {
|
personnelList.value = res.data.rows || res.data.records || [];
|
personnelPage.total = res.data.total || 0;
|
}
|
} catch (error) {
|
ElMessage.error('获取人员档案失败');
|
} finally {
|
personnelLoading.value = false;
|
}
|
};
|
|
const resetPersonnelFilters = () => {
|
personnelFilters.name = "";
|
personnelFilters.dept = "";
|
personnelPage.current = 1;
|
getPersonnelData();
|
};
|
|
const changePersonnelPage = ({ page, limit }) => {
|
personnelPage.current = page;
|
personnelPage.size = limit;
|
getPersonnelData();
|
};
|
|
const resetPersonnelForm = () => {
|
personnelForm.id = null;
|
personnelForm.name = "";
|
personnelForm.dept = "";
|
personnelForm.post = "";
|
personnelForm.phone = "";
|
personnelForm.entryDate = "";
|
personnelForm.status = 1;
|
personnelForm.remark = "";
|
};
|
|
const addPersonnel = () => {
|
resetPersonnelForm();
|
personnelDialog.title = "新增人员档案";
|
personnelDialog.visible = true;
|
};
|
|
const handleEditPersonnel = async (row) => {
|
resetPersonnelForm();
|
try {
|
const res = await getPersonnelDetail(row.id);
|
if (res.code === 200) {
|
Object.assign(personnelForm, res.data);
|
personnelDialog.title = "编辑人员档案";
|
personnelDialog.visible = true;
|
}
|
} catch (error) {
|
ElMessage.error('获取人员档案详情失败');
|
}
|
};
|
|
const handleDeletePersonnel = (row) => {
|
ElMessageBox.confirm(`确认删除人员 "${row.name}" 吗?`, "提示", {
|
confirmButtonText: "确认",
|
cancelButtonText: "取消",
|
type: "warning"
|
}).then(async () => {
|
try {
|
const res = await deletePersonnel(row.id);
|
if (res.code === 200) {
|
ElMessage.success("删除成功");
|
getPersonnelData();
|
}
|
} catch (error) {
|
ElMessage.error("删除失败");
|
}
|
});
|
};
|
|
const submitPersonnelForm = async () => {
|
const valid = await personnelFormRef.value.validate().catch(() => false);
|
if (!valid) return;
|
|
personnelDialog.loading = true;
|
try {
|
const api = personnelForm.id ? updatePersonnel : addPersonnelApi;
|
const res = await api(personnelForm);
|
if (res.code === 200) {
|
ElMessage.success(personnelForm.id ? "修改成功" : "新增成功");
|
personnelDialog.visible = false;
|
getPersonnelData();
|
}
|
} catch (error) {
|
ElMessage.error(personnelForm.id ? "修改失败" : "新增失败");
|
} finally {
|
personnelDialog.loading = false;
|
}
|
};
|
|
// ==================== 设备设施方法 ====================
|
const getEquipmentData = async () => {
|
equipmentLoading.value = true;
|
try {
|
const res = await getEquipmentList({
|
pageNum: equipmentPage.current,
|
pageSize: equipmentPage.size,
|
...equipmentFilters
|
});
|
if (res.code === 200) {
|
equipmentList.value = res.data.rows || res.data.records || [];
|
equipmentPage.total = res.data.total || 0;
|
}
|
} catch (error) {
|
ElMessage.error('获取设备设施失败');
|
} finally {
|
equipmentLoading.value = false;
|
}
|
};
|
|
const resetEquipmentFilters = () => {
|
equipmentFilters.name = "";
|
equipmentFilters.areaName = "";
|
equipmentPage.current = 1;
|
getEquipmentData();
|
};
|
|
const changeEquipmentPage = ({ page, limit }) => {
|
equipmentPage.current = page;
|
equipmentPage.size = limit;
|
getEquipmentData();
|
};
|
|
const resetEquipmentForm = () => {
|
equipmentForm.id = null;
|
equipmentForm.name = "";
|
equipmentForm.model = "";
|
equipmentForm.areaName = "";
|
equipmentForm.status = 1;
|
equipmentForm.remark = "";
|
};
|
|
const addEquipment = () => {
|
resetEquipmentForm();
|
equipmentDialog.title = "新增设备设施";
|
equipmentDialog.visible = true;
|
};
|
|
const handleEditEquipment = async (row) => {
|
resetEquipmentForm();
|
try {
|
const res = await getEquipmentDetail(row.id);
|
if (res.code === 200) {
|
Object.assign(equipmentForm, res.data);
|
equipmentDialog.title = "编辑设备设施";
|
equipmentDialog.visible = true;
|
}
|
} catch (error) {
|
ElMessage.error('获取设备详情失败');
|
}
|
};
|
|
const handleDeleteEquipment = (row) => {
|
ElMessageBox.confirm(`确认删除设备 "${row.name}" 吗?`, "提示", {
|
confirmButtonText: "确认",
|
cancelButtonText: "取消",
|
type: "warning"
|
}).then(async () => {
|
try {
|
const res = await deleteEquipment(row.id);
|
if (res.code === 200) {
|
ElMessage.success("删除成功");
|
getEquipmentData();
|
}
|
} catch (error) {
|
ElMessage.error("删除失败");
|
}
|
});
|
};
|
|
const submitEquipmentForm = async () => {
|
const valid = await equipmentFormRef.value.validate().catch(() => false);
|
if (!valid) return;
|
|
equipmentDialog.loading = true;
|
try {
|
const api = equipmentForm.id ? updateEquipment : addEquipmentApi;
|
const res = await api(equipmentForm);
|
if (res.code === 200) {
|
ElMessage.success(equipmentForm.id ? "修改成功" : "新增成功");
|
equipmentDialog.visible = false;
|
getEquipmentData();
|
}
|
} catch (error) {
|
ElMessage.error(equipmentForm.id ? "修改失败" : "新增失败");
|
} finally {
|
equipmentDialog.loading = false;
|
}
|
};
|
|
// ==================== 作业区域方法 ====================
|
const getAreaData = async () => {
|
areaLoading.value = true;
|
try {
|
const res = await getWorkAreaList({
|
pageNum: areaPage.current,
|
pageSize: areaPage.size,
|
...areaFilters
|
});
|
if (res.code === 200) {
|
areaList.value = res.data.rows || res.data.records || [];
|
areaPage.total = res.data.total || 0;
|
}
|
} catch (error) {
|
ElMessage.error('获取作业区域失败');
|
} finally {
|
areaLoading.value = false;
|
}
|
};
|
|
const resetAreaFilters = () => {
|
areaFilters.name = "";
|
areaPage.current = 1;
|
getAreaData();
|
};
|
|
const changeAreaPage = ({ page, limit }) => {
|
areaPage.current = page;
|
areaPage.size = limit;
|
getAreaData();
|
};
|
|
const resetAreaForm = () => {
|
areaForm.id = null;
|
areaForm.name = "";
|
areaForm.location = "";
|
areaForm.manager = "";
|
areaForm.remark = "";
|
};
|
|
const addArea = () => {
|
resetAreaForm();
|
areaDialog.title = "新增作业区域";
|
areaDialog.visible = true;
|
};
|
|
const handleEditArea = async (row) => {
|
resetAreaForm();
|
try {
|
const res = await getWorkAreaDetail(row.id);
|
if (res.code === 200) {
|
Object.assign(areaForm, res.data);
|
areaDialog.title = "编辑作业区域";
|
areaDialog.visible = true;
|
}
|
} catch (error) {
|
ElMessage.error('获取作业区域详情失败');
|
}
|
};
|
|
const handleDeleteArea = (row) => {
|
ElMessageBox.confirm(`确认删除区域 "${row.name}" 吗?`, "提示", {
|
confirmButtonText: "确认",
|
cancelButtonText: "取消",
|
type: "warning"
|
}).then(async () => {
|
try {
|
const res = await deleteWorkArea(row.id);
|
if (res.code === 200) {
|
ElMessage.success("删除成功");
|
getAreaData();
|
}
|
} catch (error) {
|
ElMessage.error("删除失败");
|
}
|
});
|
};
|
|
const submitAreaForm = async () => {
|
const valid = await areaFormRef.value.validate().catch(() => false);
|
if (!valid) return;
|
|
areaDialog.loading = true;
|
try {
|
const api = areaForm.id ? updateWorkArea : addWorkAreaApi;
|
const res = await api(areaForm);
|
if (res.code === 200) {
|
ElMessage.success(areaForm.id ? "修改成功" : "新增成功");
|
areaDialog.visible = false;
|
getAreaData();
|
}
|
} catch (error) {
|
ElMessage.error(areaForm.id ? "修改失败" : "新增失败");
|
} finally {
|
areaDialog.loading = false;
|
}
|
};
|
|
// ==================== 岗位风险方法 ====================
|
const getRiskData = async () => {
|
riskLoading.value = true;
|
try {
|
const res = await getRiskList({
|
pageNum: riskPage.current,
|
pageSize: riskPage.size,
|
...riskFilters
|
});
|
if (res.code === 200) {
|
riskList.value = res.data.rows || res.data.records || [];
|
riskPage.total = res.data.total || 0;
|
}
|
} catch (error) {
|
ElMessage.error('获取岗位风险失败');
|
} finally {
|
riskLoading.value = false;
|
}
|
};
|
|
const resetRiskFilters = () => {
|
riskFilters.type = "";
|
riskPage.current = 1;
|
getRiskData();
|
};
|
|
const changeRiskPage = ({ page, limit }) => {
|
riskPage.current = page;
|
riskPage.size = limit;
|
getRiskData();
|
};
|
|
const resetRiskForm = () => {
|
riskForm.id = null;
|
riskForm.type = "";
|
riskForm.level = "";
|
riskForm.description = "";
|
riskForm.post = "";
|
riskForm.controlMeasures = "";
|
riskForm.remark = "";
|
};
|
|
const addRisk = () => {
|
resetRiskForm();
|
riskDialog.title = "新增岗位风险";
|
riskDialog.visible = true;
|
};
|
|
const handleEditRisk = async (row) => {
|
resetRiskForm();
|
try {
|
const res = await getRiskDetail(row.id);
|
if (res.code === 200) {
|
Object.assign(riskForm, res.data);
|
riskDialog.title = "编辑岗位风险";
|
riskDialog.visible = true;
|
}
|
} catch (error) {
|
ElMessage.error('获取岗位风险详情失败');
|
}
|
};
|
|
const handleDeleteRisk = (row) => {
|
ElMessageBox.confirm(`确认删除风险 "${row.type}" 吗?`, "提示", {
|
confirmButtonText: "确认",
|
cancelButtonText: "取消",
|
type: "warning"
|
}).then(async () => {
|
try {
|
const res = await deleteRisk(row.id);
|
if (res.code === 200) {
|
ElMessage.success("删除成功");
|
getRiskData();
|
}
|
} catch (error) {
|
ElMessage.error("删除失败");
|
}
|
});
|
};
|
|
const submitRiskForm = async () => {
|
const valid = await riskFormRef.value.validate().catch(() => false);
|
if (!valid) return;
|
|
riskDialog.loading = true;
|
try {
|
const api = riskForm.id ? updateRisk : addRiskApi;
|
const res = await api(riskForm);
|
if (res.code === 200) {
|
ElMessage.success(riskForm.id ? "修改成功" : "新增成功");
|
riskDialog.visible = false;
|
getRiskData();
|
}
|
} catch (error) {
|
ElMessage.error(riskForm.id ? "修改失败" : "新增失败");
|
} finally {
|
riskDialog.loading = false;
|
}
|
};
|
|
// ==================== 应急资源方法 ====================
|
const getEmergencyData = async () => {
|
emergencyLoading.value = true;
|
try {
|
const res = await getEmergencyList({
|
pageNum: emergencyPage.current,
|
pageSize: emergencyPage.size,
|
...emergencyFilters
|
});
|
if (res.code === 200) {
|
emergencyList.value = res.data.rows || res.data.records || [];
|
emergencyPage.total = res.data.total || 0;
|
}
|
} catch (error) {
|
ElMessage.error('获取应急资源失败');
|
} finally {
|
emergencyLoading.value = false;
|
}
|
};
|
|
const resetEmergencyFilters = () => {
|
emergencyFilters.name = "";
|
emergencyPage.current = 1;
|
getEmergencyData();
|
};
|
|
const changeEmergencyPage = ({ page, limit }) => {
|
emergencyPage.current = page;
|
emergencyPage.size = limit;
|
getEmergencyData();
|
};
|
|
const resetEmergencyForm = () => {
|
emergencyForm.id = null;
|
emergencyForm.name = "";
|
emergencyForm.type = "";
|
emergencyForm.quantity = 0;
|
emergencyForm.areaName = "";
|
emergencyForm.location = "";
|
emergencyForm.manager = "";
|
emergencyForm.status = 1;
|
emergencyForm.remark = "";
|
};
|
|
const addEmergency = () => {
|
resetEmergencyForm();
|
emergencyDialog.title = "新增应急资源";
|
emergencyDialog.visible = true;
|
};
|
|
const handleEditEmergency = async (row) => {
|
resetEmergencyForm();
|
try {
|
const res = await getEmergencyDetail(row.id);
|
if (res.code === 200) {
|
Object.assign(emergencyForm, res.data);
|
emergencyDialog.title = "编辑应急资源";
|
emergencyDialog.visible = true;
|
}
|
} catch (error) {
|
ElMessage.error('获取应急资源详情失败');
|
}
|
};
|
|
const handleDeleteEmergency = (row) => {
|
ElMessageBox.confirm(`确认删除资源 "${row.name}" 吗?`, "提示", {
|
confirmButtonText: "确认",
|
cancelButtonText: "取消",
|
type: "warning"
|
}).then(async () => {
|
try {
|
const res = await deleteEmergency(row.id);
|
if (res.code === 200) {
|
ElMessage.success("删除成功");
|
getEmergencyData();
|
}
|
} catch (error) {
|
ElMessage.error("删除失败");
|
}
|
});
|
};
|
|
const submitEmergencyForm = async () => {
|
const valid = await emergencyFormRef.value.validate().catch(() => false);
|
if (!valid) return;
|
|
emergencyDialog.loading = true;
|
try {
|
const api = emergencyForm.id ? updateEmergency : addEmergencyApi;
|
const res = await api(emergencyForm);
|
if (res.code === 200) {
|
ElMessage.success(emergencyForm.id ? "修改成功" : "新增成功");
|
emergencyDialog.visible = false;
|
getEmergencyData();
|
}
|
} catch (error) {
|
ElMessage.error(emergencyForm.id ? "修改失败" : "新增失败");
|
} finally {
|
emergencyDialog.loading = false;
|
}
|
};
|
|
onMounted(() => {
|
getPersonnelData();
|
});
|
</script>
|
|
<style lang="scss" scoped>
|
.actions {
|
margin-bottom: 15px;
|
display: flex;
|
justify-content: flex-end;
|
}
|
</style>
|