pull/1/head
LiuJiaNan 2024-01-26 16:16:02 +08:00
parent 04f28b4acc
commit 7724a93c30
21 changed files with 1776 additions and 2184 deletions

1597
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -91,7 +91,7 @@
.el-menu-item {
&:hover, &.is-active {
//background: #1d3f77;
background-image: linear-gradient(to right, #1e499a, rgba(0,0,0,0));
background-image: linear-gradient(to right, #1e499a, rgba(0, 0, 0, 0));
}
}
@ -122,7 +122,7 @@
width: 100% !important;
}
.el-textarea.is-disabled .el-textarea__inner {
.el-textarea.is-disabled .el-textarea__inner, .el-select {
--el-disabled-border-color: var(--el-border-color);
}

BIN
src/assets/images/tanks.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

View File

@ -2041,6 +2041,109 @@ export default [
},
],
},
{
path: "/major_hazard_sources/monitoring_type_management",
meta: { title: "监测类型管理", isSubMenu: false },
component: "major_hazard_sources/monitoring_type_management/index",
},
{
path: "/major_hazard_sources/data_collection_threshold_setting",
meta: { title: "数据采集阈值设定", isSubMenu: false },
component: "children",
children: [
{
path: "",
component:
"major_hazard_sources/data_collection_threshold_setting/index",
},
{
path: "/major_hazard_sources/data_collection_threshold_setting/threshold_setting",
meta: {
title: "阈值设定",
activeMenu:
"/major_hazard_sources/data_collection_threshold_setting",
},
component:
"major_hazard_sources/data_collection_threshold_setting/threshold_setting",
},
{
path: "/major_hazard_sources/data_collection_threshold_setting/view",
meta: {
title: "查看",
activeMenu:
"/major_hazard_sources/data_collection_threshold_setting",
},
component:
"major_hazard_sources/data_collection_threshold_setting/view",
},
],
},
{
path: "/major_hazard_sources/real_time_data_monitoring",
meta: { title: "实时数据监测", isSubMenu: false },
component: "children",
children: [
{
path: "",
component: "major_hazard_sources/real_time_data_monitoring/index",
},
{
path: "/major_hazard_sources/real_time_data_monitoring/view",
meta: {
title: "查看",
activeMenu: "/major_hazard_sources/real_time_data_monitoring",
},
component: "children",
children: [
{
path: "",
component:
"major_hazard_sources/real_time_data_monitoring/view",
},
{
path: "/major_hazard_sources/real_time_data_monitoring/view/emergency_handling_record",
meta: {
title: "应急处理记录",
activeMenu: "/major_hazard_sources/real_time_data_monitoring",
},
component: "children",
children: [
{
path: "",
component:
"major_hazard_sources/real_time_data_monitoring/emergency_handling_record",
},
{
path: "/major_hazard_sources/real_time_data_monitoring/view/emergency_handling_record/view",
meta: {
title: "查看",
activeMenu:
"/major_hazard_sources/real_time_data_monitoring",
},
component:
"major_hazard_sources/real_time_data_monitoring/emergency_handling_record_view",
},
],
},
],
},
],
},
],
},
{
path: "/three_institutional_libraries",
redirect:
"/three_institutional_libraries/safety_production_responsibility_system",
meta: { title: "三项制度库", model: MODEL["5"] },
component: "children",
children: [
{
path: "/three_institutional_libraries/safety_production_responsibility_system",
meta: { title: "安全生产责任制", isSubMenu: false },
component:
"three_institutional_libraries/safety_production_responsibility_system/index",
},
],
},
];

View File

@ -251,6 +251,13 @@ export const layoutFnGetMajorHazardSourceType = async () => {
});
return ref(resData.list);
};
// 监测数据类型
export const layoutFnGetEquipmentType = async () => {
const resData = await getLevelsCorp({
DICTIONARIES_ID: "6a724d36c3ad416fad22049d932c1987",
});
return ref(resData.list);
};
// 部门树
export const layoutFnGetDepartmentTree = async (params) => {
const resData = await getDepartmentTree(params);

View File

@ -62,7 +62,5 @@ export const setRealTimeDataMonitoringEquipmentEdit = (params) =>
post("/majordangersourcedisposal/edit", params); // 实时数据监测设备应急处置修改
export const getEmergencyHandlingRecordList = (params) =>
post("/majordangersourcedisposal/list", params); // 应急处理记录列表
export const setEmergencyHandlingRecordFalseAlarm = (params) =>
post("/majordangersourcedisposal/editAlarmFalse", params); // 应急处理记录设置成误报
export const getEmergencyHandlingRecordView = (params) =>
post("/majordangersourcedisposal/goShow", params); // 应急处理记录查看

View File

@ -11,7 +11,7 @@
<div class="title">{{ item.title }}</div>
</div>
<div :class="['child_container', { active: item.check }]">
<div class="child_options">
<div :class="['child_options', item.type]">
<div
class="child_option"
v-for="(item1, index1) in item.list"
@ -422,6 +422,10 @@ const fnBottomChildOptionsListChange = (index, item1, index1) => {
color: #28b9fe;
}
}
&.workSafely {
left: 100%;
}
}
}
}

View File

@ -0,0 +1,116 @@
<template>
<el-dialog v-model="visible" title="设备停用" :on-close="fnClose">
<el-form ref="formRef" :rules="rules" :model="form" label-width="150px">
<el-form-item label="停用状态" prop="DISABLE_STATUS">
<el-select v-model="form.DISABLE_STATUS">
<el-option
v-for="item in [
{ ID: '2', NAME: '停用' },
{ ID: '3', NAME: '检修' },
]"
:key="item.ID"
:label="item.NAME"
:value="item.ID"
/>
</el-select>
</el-form-item>
<el-form-item label="停用开始时间" prop="DISABLE_TIME_START">
<el-date-picker
v-model="form.DISABLE_TIME_START"
format="YYYY-MM-DD HH:mm"
value-format="YYYY-MM-DD HH:mm"
type="datetime"
/>
</el-form-item>
<el-form-item label="停用结束时间" prop="DISABLE_TIME_END">
<el-date-picker
v-model="form.DISABLE_TIME_END"
format="YYYY-MM-DD HH:mm"
value-format="YYYY-MM-DD HH:mm"
type="datetime"
/>
</el-form-item>
<el-form-item label="停用原因" prop="DISABLE_REASON">
<el-input
v-model="form.DISABLE_REASON"
:autosize="{ minRows: 3 }"
type="textarea"
/>
</el-form-item>
<el-form-item label="停用人" prop="DISABLE_USER">
<el-input v-model="form.DISABLE_USER" />
</el-form-item>
</el-form>
<template #footer>
<el-button @click="fnClose"></el-button>
<el-button type="primary" @click="fnSubmit"> </el-button>
</template>
</el-dialog>
</template>
<script setup>
import { ref } from "vue";
import { useVModels } from "@vueuse/core";
import { debounce } from "throttle-debounce";
import useFormValidate from "@/assets/js/useFormValidate.js";
import { setDataCollectionThresholdSettingDeactivate } from "@/request/major_hazard_sources.js";
import { ElMessage } from "element-plus";
const props = defineProps({
visible: {
type: Boolean,
required: true,
default: false,
},
form: {
type: Object,
required: true,
default: () => ({}),
},
id: {
type: String,
required: true,
default: "",
},
});
const emits = defineEmits(["update:visible", "update:form", "get-data"]);
const { visible, form } = useVModels(props, emits);
const rules = {
DISABLE_STATUS: [
{ required: true, message: "停用状态不能为空", trigger: "blur" },
],
DISABLE_TIME_START: [
{ required: true, message: "请选择停用开始时间", trigger: "blur" },
],
DISABLE_TIME_END: [
{ required: true, message: "请选择停用结束时间", trigger: "blur" },
],
DISABLE_REASON: [
{ required: true, message: "停用原因不能为空", trigger: "blur" },
],
DISABLE_USER: [
{ required: true, message: "停用人不能为空", trigger: "blur" },
],
};
const formRef = ref(null);
const fnClose = () => {
formRef.value.resetFields();
visible.value = false;
};
const fnSubmit = debounce(
1000,
async () => {
await useFormValidate(formRef);
await setDataCollectionThresholdSettingDeactivate({
...form.value,
MAJORDANGERSOURCE_ID: props.id,
});
ElMessage.success("停用成功");
fnClose();
emits("get-data");
},
{ atBegin: true }
);
</script>
<style scoped lang="scss"></style>

View File

@ -0,0 +1,294 @@
<template>
<el-dialog
v-model="visible"
:title="type === 'add' ? '添加' : '修改'"
:on-close="fnClose"
>
<el-form ref="formRef" :rules="rules" :model="form" label-width="110px">
<el-row>
<el-col :span="24">
<el-form-item label="监测数据类型" prop="MONITORINGDEVICESENSOR_TYPE">
<el-select
v-model="form.MONITORINGDEVICESENSOR_TYPE"
:disabled="type === 'edit'"
>
<el-option
v-for="item in equipmentTypeList"
:key="item.BIANMA"
:label="item.NAME"
:value="item.BIANMA"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="量程下限" prop="RANGE_MIN">
<el-input-number
v-model="form.RANGE_MIN"
:precision="2"
:step="0.01"
:mix="0"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="量程上限" prop="RANGE_MAX">
<el-input-number
v-model="form.RANGE_MAX"
:precision="2"
:step="0.01"
:mix="0"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="一级预警下限" prop="RANGE1_MIN">
<el-input-number
v-model="form.RANGE1_MIN"
:precision="2"
:step="0.01"
:mix="0"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="一级预警上限" prop="RANGE1_MAX">
<el-input-number
v-model="form.RANGE1_MAX"
:precision="2"
:step="0.01"
:mix="0"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="二级预警下限" prop="RANGE2_MIN">
<el-input-number
v-model="form.RANGE2_MIN"
:precision="2"
:step="0.01"
:mix="0"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="二级预警上限" prop="RANGE2_MAX">
<el-input-number
v-model="form.RANGE2_MAX"
:precision="2"
:step="0.01"
:mix="0"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="三级预警下限" prop="RANGE3_MIN">
<el-input-number
v-model="form.RANGE3_MIN"
:precision="2"
:step="0.01"
:mix="0"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="三级预警上限" prop="RANGE3_MAX">
<el-input-number
v-model="form.RANGE3_MAX"
:precision="2"
:step="0.01"
:mix="0"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="四级预警下限" prop="RANGE4_MIN">
<el-input-number
v-model="form.RANGE4_MIN"
:precision="2"
:step="0.01"
:mix="0"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="四级预警上限" prop="RANGE4_MAX">
<el-input-number
v-model="form.RANGE4_MAX"
:precision="2"
:step="0.01"
:mix="0"
/>
</el-form-item>
</el-col>
</el-row>
</el-form>
<template #footer>
<el-button @click="fnClose"></el-button>
<el-button type="primary" @click="fnSubmit"> </el-button>
</template>
</el-dialog>
</template>
<script setup>
import { useVModels } from "@vueuse/core";
import { ref } from "vue";
import { debounce } from "throttle-debounce";
import useFormValidate from "@/assets/js/useFormValidate.js";
import {
setDataCollectionThresholdSettingThresholdSettingAdd,
setDataCollectionThresholdSettingThresholdSettingEdit,
} from "@/request/major_hazard_sources.js";
import { ElMessage } from "element-plus";
const props = defineProps({
visible: {
type: Boolean,
required: true,
default: false,
},
form: {
type: Object,
required: true,
default: () => {},
},
type: {
type: String,
required: true,
default: "",
},
id: {
type: String,
required: true,
default: "",
},
equipmentTypeList: {
type: Array,
required: true,
default: () => [],
},
});
const emits = defineEmits(["update:visible", "update:form", "get-data"]);
const { visible, form } = useVModels(props, emits);
const rules = {
MONITORINGDEVICESENSOR_TYPE: [
{ required: true, message: "监测数据类型不能为空", trigger: "blur" },
],
RANGE_MIN: [
{
required: true,
pattern:
/(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/,
message: "请输入正确格式,可保留两位小数",
trigger: "blur",
},
],
RANGE_MAX: [
{
required: true,
pattern:
/(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/,
message: "请输入正确格式,可保留两位小数",
trigger: "blur",
},
],
RANGE1_MIN: [
{
required: true,
pattern:
/(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/,
message: "请输入正确格式,可保留两位小数",
trigger: "blur",
},
],
RANGE1_MAX: [
{
required: true,
pattern:
/(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/,
message: "请输入正确格式,可保留两位小数",
trigger: "blur",
},
],
RANGE2_MIN: [
{
required: true,
pattern:
/(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/,
message: "请输入正确格式,可保留两位小数",
trigger: "blur",
},
],
RANGE2_MAX: [
{
required: true,
pattern:
/(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/,
message: "请输入正确格式,可保留两位小数",
trigger: "blur",
},
],
RANGE3_MIN: [
{
required: true,
pattern:
/(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/,
message: "请输入正确格式,可保留两位小数",
trigger: "blur",
},
],
RANGE3_MAX: [
{
required: true,
pattern:
/(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/,
message: "请输入正确格式,可保留两位小数",
trigger: "blur",
},
],
RANGE4_MIN: [
{
required: true,
pattern:
/(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/,
message: "请输入正确格式,可保留两位小数",
trigger: "blur",
},
],
RANGE4_MAX: [
{
required: true,
pattern:
/(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/,
message: "请输入正确格式,可保留两位小数",
trigger: "blur",
},
],
};
const formRef = ref(null);
const fnClose = () => {
formRef.value.resetFields();
visible.value = false;
};
const fnSubmit = debounce(
1000,
async () => {
await useFormValidate(formRef);
props.type === "add"
? await setDataCollectionThresholdSettingThresholdSettingAdd({
...form.value,
MAJORDANGERSOURCE_ID: props.id,
})
: await setDataCollectionThresholdSettingThresholdSettingEdit({
...form.value,
MAJORDANGERSOURCE_ID: props.id,
});
fnClose();
ElMessage.success("保存成功");
emits("get-data");
},
{ atBegin: true }
);
</script>
<style scoped lang="scss"></style>

View File

@ -2,19 +2,19 @@
<div>
<el-card>
<el-form
:model="data.searchForm"
:model="searchForm"
label-width="120px"
@submit.prevent="fnResetPagination"
>
<el-row>
<el-col :span="5">
<el-form-item label="重大危险源名称" prop="KEYWORDS">
<el-input v-model="data.searchForm.KEYWORDS" />
<el-form-item label="重大危险源名称" prop="MAJORDANGERSOURCE_NAME">
<el-input v-model="searchForm.MAJORDANGERSOURCE_NAME" />
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="重大危险源类型" prop="MAJORDANGERSOURCE_TYPE">
<el-select v-model="data.searchForm.MAJORDANGERSOURCE_TYPE">
<el-select v-model="searchForm.MAJORDANGERSOURCE_TYPE">
<el-option
v-for="item in majorHazardSourceTypeList"
:key="item.BIANMA"
@ -29,7 +29,7 @@
label="重大危险源状态"
prop="MAJORDANGERSOURCE_STATUS"
>
<el-select v-model="data.searchForm.MAJORDANGERSOURCE_STATUS">
<el-select v-model="searchForm.MAJORDANGERSOURCE_STATUS">
<el-option
v-for="item in majorHazardSourceStateList"
:key="item.ID"
@ -45,7 +45,7 @@
prop="RESPONSIBLE_PERSON_NAME"
label-width="70px"
>
<el-input v-model="data.searchForm.RESPONSIBLE_PERSON_NAME" />
<el-input v-model="searchForm.RESPONSIBLE_PERSON_NAME" />
</el-form-item>
</el-col>
<el-col :span="4">
@ -61,13 +61,13 @@
</el-card>
<layout-card>
<layout-table
:data="data.list"
:data="list"
@get-data="fnGetData"
v-model:pagination="data.pagination"
v-model:pagination="pagination"
>
<el-table-column label="序号" width="60">
<template #default="{ $index }">
{{ serialNumber(data.pagination, $index) }}
{{ serialNumber(pagination, $index) }}
</template>
</el-table-column>
<el-table-column prop="MAJORDANGERSOURCE_NAME" label="重大危险源名称" />
@ -83,11 +83,11 @@
prop="MAJORDANGERSOURCE_ADDRESS"
label="重大危险源地址"
/>
<el-table-column prop="RESPONSIBLE_PERSON" label="责任人" />
<el-table-column prop="RESPONSIBLE_PERSON_NAME" label="责任人" />
<el-table-column label="状态">
<template v-slot="{ row }">
{{
fnTranslationStatus(
translationStatus(
row.MAJORDANGERSOURCE_STATUS,
majorHazardSourceStateList
)
@ -151,90 +151,39 @@
</el-table-column>
</layout-table>
</layout-card>
<el-dialog v-model="data.deactivateDialog.visible" title="设备停用">
<el-form
ref="deactivateDialogFormRef"
:rules="data.deactivateDialog.rules"
:model="data.deactivateDialog.form"
label-width="150px"
>
<el-form-item label="停用状态" prop="DISABLE_STATUS">
<el-select v-model="data.deactivateDialog.form.DISABLE_STATUS">
<el-option
v-for="item in [
{ ID: '2', NAME: '停用' },
{ ID: '3', NAME: '检修' },
]"
:key="item.ID"
:label="item.NAME"
:value="item.ID"
/>
</el-select>
</el-form-item>
<el-form-item label="停用开始时间" prop="DISABLE_TIME_START">
<el-date-picker
v-model="data.deactivateDialog.form.DISABLE_TIME_START"
format="YYYY-MM-DD HH:mm"
value-format="YYYY-MM-DD HH:mm"
type="datetime"
/>
</el-form-item>
<el-form-item label="停用结束时间" prop="DISABLE_TIME_END">
<el-date-picker
v-model="data.deactivateDialog.form.DISABLE_TIME_END"
format="YYYY-MM-DD HH:mm"
value-format="YYYY-MM-DD HH:mm"
type="datetime"
/>
</el-form-item>
<el-form-item label="停用原因" prop="DISABLE_REASON">
<el-input
v-model="data.deactivateDialog.form.DISABLE_REASON"
autosize
type="textarea"
/>
</el-form-item>
<el-form-item label="停用人" prop="DISABLE_USER">
<el-input v-model="data.deactivateDialog.form.DISABLE_USER" />
</el-form-item>
</el-form>
<template #footer>
<el-button @click="fnDeactivateDialogChangeShow"></el-button>
<el-button type="primary" @click="fnDeactivateDialogSubmit">
确定
</el-button>
</template>
</el-dialog>
<deactivate
v-model:visible="data.deactivateDialog.visible"
v-model:form="data.deactivateDialog.form"
:id="data.deactivateDialog.MAJORDANGERSOURCE_ID"
@get-data="fnResetPagination"
/>
</div>
</template>
<script setup>
import { nextTick, reactive, ref } from "vue";
import { fnTranslationStatus, serialNumber } from "@/assets/js/utils";
import { nextTick, reactive } from "vue";
import { translationStatus, serialNumber } from "@/assets/js/utils";
import {
getDataCollectionThresholdSettingList,
setDataCollectionThresholdSettingDeactivate,
setDataCollectionThresholdSettingEnable,
} from "@/request/major_hazard_sources";
import { layoutFnButtonJurisdiction } from "@/assets/js/button_jurisdiction";
import useButtonJurisdiction from "@/assets/js/useButtonJurisdiction.js";
import { layoutFnGetMajorHazardSourceType } from "@/assets/js/data_dictionary.js";
import { debounce } from "throttle-debounce";
import { useUserStore } from "@/pinia/user.js";
import { ElMessage, ElMessageBox } from "element-plus";
import { useRouter } from "vue-router";
import useFormValidate from "@/assets/js/useFormValidate.js";
import useListData from "@/assets/js/useListData.js";
import Deactivate from "./components/deactivate.vue";
const userStore = useUserStore();
const router = useRouter();
const deactivateDialogFormRef = ref(null);
const majorHazardSourceStateList = [
{ ID: "1", NAME: "正常" },
{ ID: "2", NAME: "停用" },
{ ID: "3", NAME: "检修" },
];
const data = reactive({
list: [],
pagination: {
currentPage: 1,
pageSize: 10,
total: 0,
},
searchForm: {},
deactivateDialog: {
visible: false,
MAJORDANGERSOURCE_ID: "",
@ -245,76 +194,17 @@ const data = reactive({
DISABLE_REASON: "",
DISABLE_USER: userStore.getUserInfo.NAME,
},
rules: {
DISABLE_STATUS: [
{ required: true, message: "停用状态不能为空", trigger: "blur" },
],
DISABLE_TIME_START: [
{ required: true, message: "请选择停用开始时间", trigger: "blur" },
],
DISABLE_TIME_END: [
{ required: true, message: "请选择停用结束时间", trigger: "blur" },
],
DISABLE_REASON: [
{ required: true, message: "停用原因不能为空", trigger: "blur" },
],
DISABLE_USER: [
{ required: true, message: "停用人不能为空", trigger: "blur" },
],
},
},
});
const fnGetData = async () => {
const resData = await getDataCollectionThresholdSettingList({
currentPage: data.pagination.currentPage,
showCount: data.pagination.pageSize,
...data.searchForm,
});
data.list = resData.varList;
data.pagination.total = resData.page.totalResult;
};
fnGetData();
const buttonJurisdiction = await layoutFnButtonJurisdiction(
"majordangersource"
);
const { list, pagination, searchForm, fnResetPagination, fnGetData } =
useListData(getDataCollectionThresholdSettingList);
const buttonJurisdiction = await useButtonJurisdiction("majordangersource");
const majorHazardSourceTypeList = await layoutFnGetMajorHazardSourceType();
const majorHazardSourceStateList = [
{ ID: "1", NAME: "正常" },
{ ID: "2", NAME: "停用" },
{ ID: "3", NAME: "检修" },
];
const fnResetPagination = () => {
data.pagination = {
currentPage: 1,
pageSize: 10,
total: 0,
};
fnGetData();
};
const fnDeactivateDialogChangeShow = () => {
data.deactivateDialog.visible = !data.deactivateDialog.visible;
};
const fnDeactivate = async (MAJORDANGERSOURCE_ID) => {
fnDeactivateDialogChangeShow();
data.deactivateDialog.visible = true;
data.deactivateDialog.MAJORDANGERSOURCE_ID = MAJORDANGERSOURCE_ID;
await nextTick();
deactivateDialogFormRef.value.resetFields();
};
const fnDeactivateDialogSubmit = debounce(
1000,
async () => {
await useFormValidate(deactivateDialogFormRef);
const { form, MAJORDANGERSOURCE_ID } = data.deactivateDialog;
await setDataCollectionThresholdSettingDeactivate({
...form,
MAJORDANGERSOURCE_ID,
});
fnDeactivateDialogChangeShow();
ElMessage.success("停用成功");
fnResetPagination();
},
{ atBegin: true }
);
const fnEnable = debounce(
1000,
async (MAJORDANGERSOURCE_ID) => {

View File

@ -4,14 +4,14 @@
<layout-table
ref="tableRef"
row-key="MONITORINGDEVICESENSOR_ID"
:data="data.list"
:data="list"
@get-data="fnGetData"
v-model:pagination="data.pagination"
v-model:pagination="pagination"
>
<el-table-column reserve-selection type="selection" width="55" />
<el-table-column label="序号" width="60">
<template #default="{ $index }">
{{ serialNumber(data.pagination, $index) }}
{{ serialNumber(pagination, $index) }}
</template>
</el-table-column>
<el-table-column
@ -38,7 +38,7 @@
<el-table-column prop="RANGE4_MIN" label="下限" />
<el-table-column prop="RANGE4_MAX" label="上限" />
</el-table-column>
<el-table-column label="操作" width="200">
<el-table-column label="操作" width="100">
<template v-slot="{ row }">
<el-button
v-if="buttonJurisdiction.edit"
@ -78,144 +78,14 @@
</template>
</layout-table>
</layout-card>
<el-dialog
v-model="data.addOrEditDialog.visible"
:title="data.addOrEditDialog.type === 'add' ? '添加' : '修改'"
>
<el-form
ref="addOrEditDialogFormRef"
:rules="data.addOrEditDialog.rules"
:model="data.addOrEditDialog.form"
label-width="110px"
>
<el-row>
<el-col :span="24">
<el-form-item
label="监测数据类型"
prop="MONITORINGDEVICESENSOR_TYPE"
>
<el-select
v-model="data.addOrEditDialog.form.MONITORINGDEVICESENSOR_TYPE"
:disabled="data.addOrEditDialog.type === 'edit'"
>
<el-option
v-for="item in data.addOrEditDialog.equipmentTypeList"
:key="item.BIANMA"
:label="item.NAME"
:value="item.BIANMA"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="量程下限" prop="RANGE_MIN">
<el-input-number
v-model="data.addOrEditDialog.form.RANGE_MIN"
:precision="2"
:step="0.01"
:mix="0"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="量程上限" prop="RANGE_MAX">
<el-input-number
v-model="data.addOrEditDialog.form.RANGE_MAX"
:precision="2"
:step="0.01"
:mix="0"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="一级预警下限" prop="RANGE1_MIN">
<el-input-number
v-model="data.addOrEditDialog.form.RANGE1_MIN"
:precision="2"
:step="0.01"
:mix="0"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="一级预警上限" prop="RANGE1_MAX">
<el-input-number
v-model="data.addOrEditDialog.form.RANGE1_MAX"
:precision="2"
:step="0.01"
:mix="0"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="二级预警下限" prop="RANGE2_MIN">
<el-input-number
v-model="data.addOrEditDialog.form.RANGE2_MIN"
:precision="2"
:step="0.01"
:mix="0"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="二级预警上限" prop="RANGE2_MAX">
<el-input-number
v-model="data.addOrEditDialog.form.RANGE2_MAX"
:precision="2"
:step="0.01"
:mix="0"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="三级预警下限" prop="RANGE3_MIN">
<el-input-number
v-model="data.addOrEditDialog.form.RANGE3_MIN"
:precision="2"
:step="0.01"
:mix="0"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="三级预警上限" prop="RANGE3_MAX">
<el-input-number
v-model="data.addOrEditDialog.form.RANGE3_MAX"
:precision="2"
:step="0.01"
:mix="0"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="四级预警下限" prop="RANGE4_MIN">
<el-input-number
v-model="data.addOrEditDialog.form.RANGE4_MIN"
:precision="2"
:step="0.01"
:mix="0"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="四级预警上限" prop="RANGE4_MAX">
<el-input-number
v-model="data.addOrEditDialog.form.RANGE4_MAX"
:precision="2"
:step="0.01"
:mix="0"
/>
</el-form-item>
</el-col>
</el-row>
</el-form>
<template #footer>
<el-button @click="fnAddOrEditDialogChangeShow"></el-button>
<el-button type="primary" @click="fnAddOrEditDialogSubmit">
确定
</el-button>
</template>
</el-dialog>
<threshold-setting-add
v-model:visible="data.addOrEditDialog.visible"
v-model:form="data.addOrEditDialog.form"
:type="data.addOrEditDialog.type"
:id="MAJORDANGERSOURCE_ID"
:equipment-type-list="equipmentTypeList"
@get-data="fnResetPagination"
/>
</div>
</template>
@ -225,34 +95,23 @@ import { serialNumber } from "@/assets/js/utils";
import {
getDataCollectionThresholdSettingThresholdSettingList,
getDataCollectionThresholdSettingThresholdSettingView,
setDataCollectionThresholdSettingThresholdSettingAdd,
setDataCollectionThresholdSettingThresholdSettingDelete,
setDataCollectionThresholdSettingThresholdSettingDeleteMultiple,
setDataCollectionThresholdSettingThresholdSettingEdit,
} from "@/request/major_hazard_sources";
import { debounce } from "throttle-debounce";
import { ElMessage, ElMessageBox } from "element-plus";
import { layoutFnButtonJurisdiction } from "@/assets/js/button_jurisdiction.js";
import useButtonJurisdiction from "@/assets/js/useButtonJurisdiction.js";
import { useRoute } from "vue-router";
import { layoutFnGetEquipmentTypeCorp } from "@/assets/js/data_dictionary.js";
import CloneDeep from "lodash-es/cloneDeep.js";
import useFormValidate from "@/assets/js/useFormValidate.js";
import useListData from "@/assets/js/useListData.js";
import ThresholdSettingAdd from "./components/threshold_setting_add.vue";
import { layoutFnGetEquipmentType } from "@/assets/js/data_dictionary.js";
const route = useRoute();
const { MAJORDANGERSOURCE_ID } = route.query;
const tableRef = ref(null);
const addOrEditDialogFormRef = ref(null);
const data = reactive({
list: [],
pagination: {
currentPage: 1,
pageSize: 10,
total: 0,
},
addOrEditDialog: {
visible: false,
type: "",
equipmentTypeList: [],
form: {
MONITORINGDEVICESENSOR_TYPE: "",
RANGE_MIN: 0,
@ -266,135 +125,36 @@ const data = reactive({
RANGE4_MIN: 0,
RANGE4_MAX: 0,
},
rules: {
MONITORINGDEVICESENSOR_TYPE: [
{ required: true, message: "监测数据类型不能为空", trigger: "blur" },
],
RANGE_MIN: [
{
required: true,
pattern:
/(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/,
message: "请输入正确格式,可保留两位小数",
trigger: "blur",
},
],
RANGE_MAX: [
{
required: true,
pattern:
/(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/,
message: "请输入正确格式,可保留两位小数",
trigger: "blur",
},
],
RANGE1_MIN: [
{
required: true,
pattern:
/(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/,
message: "请输入正确格式,可保留两位小数",
trigger: "blur",
},
],
RANGE1_MAX: [
{
required: true,
pattern:
/(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/,
message: "请输入正确格式,可保留两位小数",
trigger: "blur",
},
],
RANGE2_MIN: [
{
required: true,
pattern:
/(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/,
message: "请输入正确格式,可保留两位小数",
trigger: "blur",
},
],
RANGE2_MAX: [
{
required: true,
pattern:
/(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/,
message: "请输入正确格式,可保留两位小数",
trigger: "blur",
},
],
RANGE3_MIN: [
{
required: true,
pattern:
/(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/,
message: "请输入正确格式,可保留两位小数",
trigger: "blur",
},
],
RANGE3_MAX: [
{
required: true,
pattern:
/(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/,
message: "请输入正确格式,可保留两位小数",
trigger: "blur",
},
],
RANGE4_MIN: [
{
required: true,
pattern:
/(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/,
message: "请输入正确格式,可保留两位小数",
trigger: "blur",
},
],
RANGE4_MAX: [
{
required: true,
pattern:
/(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/,
message: "请输入正确格式,可保留两位小数",
trigger: "blur",
},
],
},
},
});
const fnGetData = async () => {
const resData = await getDataCollectionThresholdSettingThresholdSettingList({
currentPage: data.pagination.currentPage,
showCount: data.pagination.pageSize,
MAJORDANGERSOURCE_ID,
const equipmentTypeList = ref([]);
const fnEquipmentTypeListDeduplication = async (list) => {
const cloneEquipmentTypeList = await layoutFnGetEquipmentType();
for (let i = 0; i < cloneEquipmentTypeList.value.length; i++) {
for (let j = 0; j < list.length; j++) {
if (
cloneEquipmentTypeList.value[i].BIANMA ===
list[j].MONITORINGDEVICESENSOR_TYPE
) {
cloneEquipmentTypeList.value[i] = "";
break;
}
}
}
equipmentTypeList.value = cloneEquipmentTypeList.value.filter(Boolean);
};
const { list, pagination, fnGetData, fnResetPagination, tableRef } =
useListData(getDataCollectionThresholdSettingThresholdSettingList, {
otherParams: { MAJORDANGERSOURCE_ID },
callbackFn: (list) => {
fnEquipmentTypeListDeduplication(list);
},
});
data.list = resData.varList;
data.pagination.total = resData.page.totalResult;
};
fnGetData();
const buttonJurisdiction = await layoutFnButtonJurisdiction(
"majordangersource"
);
const equipmentTypeList = await layoutFnGetEquipmentTypeCorp();
const fnResetPagination = () => {
data.pagination = {
currentPage: 1,
pageSize: 10,
total: 0,
};
tableRef.value.clearSelection();
fnGetData();
};
const fnAddOrEditDialogChangeShow = () => {
data.addOrEditDialog.visible = !data.addOrEditDialog.visible;
};
const buttonJurisdiction = await useButtonJurisdiction("majordangersource");
const fnAddOrEdit = async (MONITORINGDEVICESENSOR_ID, type) => {
fnAddOrEditDialogChangeShow();
fnEquipmentTypeListDeduplication();
data.addOrEditDialog.type = type;
data.addOrEditDialog.visible = true;
await nextTick();
addOrEditDialogFormRef.value.resetFields();
data.addOrEditDialog.type = type;
if (type === "edit") {
const resData = await getDataCollectionThresholdSettingThresholdSettingView(
{ MONITORINGDEVICESENSOR_ID }
@ -402,43 +162,6 @@ const fnAddOrEdit = async (MONITORINGDEVICESENSOR_ID, type) => {
data.addOrEditDialog.form = resData.pd;
}
};
const fnEquipmentTypeListDeduplication = () => {
const cloneEquipmentTypeList = CloneDeep(equipmentTypeList.value);
for (let i = 0; i < cloneEquipmentTypeList.length; i++) {
for (let j = 0; j < data.list.length; j++) {
if (
cloneEquipmentTypeList[i].BIANMA ===
data.list[j].MONITORINGDEVICESENSOR_TYPE
) {
cloneEquipmentTypeList[i] = "";
break;
}
}
}
data.addOrEditDialog.equipmentTypeList =
cloneEquipmentTypeList.filter(Boolean);
};
const fnAddOrEditDialogSubmit = debounce(
1000,
async () => {
await useFormValidate(addOrEditDialogFormRef);
const { form, type } = data.addOrEditDialog;
if (type === "add")
await setDataCollectionThresholdSettingThresholdSettingAdd({
...form,
MAJORDANGERSOURCE_ID,
});
if (type === "edit")
await setDataCollectionThresholdSettingThresholdSettingEdit({
...form,
MAJORDANGERSOURCE_ID,
});
fnAddOrEditDialogChangeShow();
ElMessage.success("保存成功");
fnResetPagination();
},
{ atBegin: true }
);
const fnDelete = debounce(
1000,
async (MONITORINGDEVICESENSOR_ID) => {

View File

@ -3,106 +3,98 @@
<el-divider content-position="left">设备信息</el-divider>
<el-descriptions :column="2" border>
<el-descriptions-item label="重大危险源名称">
{{ data.info.MAJORDANGERSOURCE_NAME }}
{{ info.MAJORDANGERSOURCE_NAME }}
</el-descriptions-item>
<el-descriptions-item label="重大危险源编号">
{{ data.info.MAJORDANGERSOURCE_NUMBER }}
</el-descriptions-item>
<el-descriptions-item label="重大危险源类型">
{{ data.info.MAJORDANGERSOURCE_TYPE_NAME }}
</el-descriptions-item>
<el-descriptions-item label="申报等级">
{{ data.info.DECLARATION_LEVEL_NAME }}
</el-descriptions-item>
<el-descriptions-item label="投入使用日期">
{{ data.info.USE_DATE }}
{{ info.MAJORDANGERSOURCE_NUMBER }}
</el-descriptions-item>
<el-descriptions-item label="重大危险源地址">
{{ data.info.MAJORDANGERSOURCE_ADDRESS }}
{{ info.MAJORDANGERSOURCE_ADDRESS }}
</el-descriptions-item>
<el-descriptions-item label="重大危险源类型">
{{ info.MAJORDANGERSOURCE_TYPE_NAME }}
</el-descriptions-item>
<el-descriptions-item label="投入使用日期">
{{ info.USE_DATE }}
</el-descriptions-item>
<el-descriptions-item label="申报等级">
{{ info.DECLARATION_LEVEL_NAME }}
</el-descriptions-item>
<el-descriptions-item label="实际储存量">
{{ data.info.STORAGE_ACTUAL }}
{{ info.STORAGE_ACTUAL }}
</el-descriptions-item>
<el-descriptions-item label="最大储量">
{{ data.info.STORAGE_MAX }}
{{ info.STORAGE_MAX }}
</el-descriptions-item>
<el-descriptions-item label="管控措施" :span="2">
{{ data.info.CONTROL_MEASURES }}
{{ info.CONTROL_MEASURES }}
</el-descriptions-item>
<el-descriptions-item label="误报审核人">
{{ data.info.ALARM_REVIEWER_NAME }}
<el-descriptions-item label="责任人">
{{ info.RESPONSIBLE_PERSON_NAME }}
</el-descriptions-item>
<el-descriptions-item label="联系方式">
{{ data.info.ALARM_REVIEWER_PHONE }}
{{ info.RESPONSIBLE_PERSON_PHONE }}
</el-descriptions-item>
<template
v-for="item in data.info.responsibleList"
:key="item.MAJORDANGERSOURCE_RESPONSIBLE_ID"
>
<el-descriptions-item label="责任人">
{{ item.RESPONSIBLE_USER_NAME }}
</el-descriptions-item>
<el-descriptions-item label="联系方式">
{{ item.RESPONSIBLE_PERSON_PHONE }}
</el-descriptions-item>
</template>
<el-descriptions-item
label="分公司应急预案"
v-if="data.info.BRANCHEMERGENCYPLAN_FILEPATH"
v-if="info.BRANCHEMERGENCYPLAN_FILEPATH"
>
{{ data.info.BRANCHEMERGENCYPLAN_NAME }}
{{ info.BRANCHEMERGENCYPLAN_NAME }}
<el-button
class="ml"
class="ml-10"
type="primary"
@click="fnDownloadFile(data.info.MAJORDANGERSOURCE_ID)"
@click="
useDownloadFile(
info.BRANCHEMERGENCYPLAN_FILEPATH,
info.BRANCHEMERGENCYPLAN_NAME
)
"
>
下载
</el-button>
</el-descriptions-item>
<el-descriptions-item label="重大危险源位置">
<el-button circle @click="data.mapDialogVisible = true">
<el-button circle @click="mapDialogVisible = true">
<el-icon>
<Place />
</el-icon>
</el-button>
经度:{{ data.info.MAJORDANGERSOURCE_LONGITUDE }} , 纬度:{{
data.info.MAJORDANGERSOURCE_LATITUDE
经度:{{ info.MAJORDANGERSOURCE_LONGITUDE }} , 纬度:{{
info.MAJORDANGERSOURCE_LATITUDE
}}
</el-descriptions-item>
</el-descriptions>
<el-divider content-position="left">阈值设定信息</el-divider>
<layout-table :data="data.info.SENSORLIST" :show-pagination="false">
<el-table-column label="序号" width="60" type="index">
<el-table-column
prop="MONITORINGDEVICESENSOR_TYPE_NAME"
label="监测数据类型"
/>
<el-table-column label="量程">
<el-table-column prop="RANGE_MIN" label="下限" />
<el-table-column prop="RANGE_MAX" label="上限" />
</el-table-column>
<el-table-column label="一级预警">
<el-table-column prop="RANGE1_MIN" label="下限" />
<el-table-column prop="RANGE1_MAX" label="上限" />
</el-table-column>
<el-table-column label="二级预警">
<el-table-column prop="RANGE2_MIN" label="下限" />
<el-table-column prop="RANGE2_MAX" label="上限" />
</el-table-column>
<el-table-column label="三级预警">
<el-table-column prop="RANGE3_MIN" label="下限" />
<el-table-column prop="RANGE3_MAX" label="上限" />
</el-table-column>
<el-table-column label="四级预警">
<el-table-column prop="RANGE4_MIN" label="下限" />
<el-table-column prop="RANGE4_MAX" label="上限" />
</el-table-column>
<layout-table :data="info.SENSORLIST" :show-pagination="false">
<el-table-column
prop="MONITORINGDEVICESENSOR_TYPE_NAME"
label="监测数据类型"
/>
<el-table-column label="量程">
<el-table-column prop="RANGE_MIN" label="下限" />
<el-table-column prop="RANGE_MAX" label="上限" />
</el-table-column>
<el-table-column label="一级预警">
<el-table-column prop="RANGE1_MIN" label="下限" />
<el-table-column prop="RANGE1_MAX" label="上限" />
</el-table-column>
<el-table-column label="二级预警">
<el-table-column prop="RANGE2_MIN" label="下限" />
<el-table-column prop="RANGE2_MAX" label="上限" />
</el-table-column>
<el-table-column label="三级预警">
<el-table-column prop="RANGE3_MIN" label="下限" />
<el-table-column prop="RANGE3_MAX" label="上限" />
</el-table-column>
<el-table-column label="四级预警">
<el-table-column prop="RANGE4_MIN" label="下限" />
<el-table-column prop="RANGE4_MAX" label="上限" />
</el-table-column>
</layout-table>
<layout-map
:latitude="data.info.MAJORDANGERSOURCE_LATITUDE"
:longitude="data.info.MAJORDANGERSOURCE_LONGITUDE"
v-model:visible="data.mapDialogVisible"
<map-dialog
v-model:visible="mapDialogVisible"
:latitude="info.MAJORDANGERSOURCE_LATITUDE"
:longitude="info.MAJORDANGERSOURCE_LONGITUDE"
type="view"
/>
</layout-card>
@ -110,32 +102,23 @@
<script setup>
import { useRoute } from "vue-router";
import { reactive } from "vue";
import { ref } from "vue";
import { getDataCollectionThresholdSettingView } from "@/request/major_hazard_sources";
import { ElMessageBox } from "element-plus";
import { Place } from "@element-plus/icons-vue";
import LayoutMap from "@/components/map/index.vue";
import useDownloadFile from "@/assets/js/useDownloadFile.js";
import MapDialog from "../major_hazard_management/components/map.vue";
const route = useRoute();
const MAJORDANGERSOURCE_ID = route.query.MAJORDANGERSOURCE_ID;
const data = reactive({
info: {},
mapDialogVisible: false,
});
const { MAJORDANGERSOURCE_ID } = route.query;
const info = ref({});
const mapDialogVisible = ref(false);
const fnGetData = async () => {
const resData = await getDataCollectionThresholdSettingView({
MAJORDANGERSOURCE_ID,
});
data.info = resData.pd;
info.value = resData.pd;
};
fnGetData();
const fnDownloadFile = async (MAJORDANGERSOURCE_ID) => {
await ElMessageBox.confirm("确定要下载此文件吗?", { type: "warning" });
window.open(
"/api/majordangersource/download?MAJORDANGERSOURCE_ID=" +
MAJORDANGERSOURCE_ID
);
};
</script>
<style scoped lang="scss">

View File

@ -2,31 +2,26 @@
<div>
<el-card>
<el-form
:model="data.searchForm"
:model="searchForm"
label-width="90px"
@submit.prevent="fnResetPagination"
>
<el-row>
<el-col :span="6">
<el-form-item label="报警级别" prop="ALARM_LEVEL">
<el-select v-model="data.searchForm.ALARM_LEVEL">
<el-select v-model="searchForm.ALARM_LEVEL">
<el-option
v-for="item in [
{ VALUE: '1', NAME: '一级' },
{ VALUE: '2', NAME: '二级' },
{ VALUE: '3', NAME: '三级' },
{ VALUE: '4', NAME: '四级' },
]"
:key="item.VALUE"
v-for="item in levelList"
:key="item.ID"
:label="item.NAME"
:value="item.VALUE"
:value="item.ID"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="处置状态" prop="DISPOSAL_STATUS">
<el-select v-model="data.searchForm.DISPOSAL_STATUS">
<el-select v-model="searchForm.DISPOSAL_STATUS">
<el-option
v-for="item in stateList"
:key="item.ID"
@ -49,45 +44,33 @@
</el-card>
<layout-card>
<layout-table
:data="data.list"
:data="list"
@get-data="fnGetData"
v-model:pagination="data.pagination"
v-model:pagination="pagination"
>
<el-table-column label="序号" width="60">
<template #default="{ $index }">
{{ serialNumber(data.pagination, $index) }}
{{ serialNumber(pagination, $index) }}
</template>
</el-table-column>
<el-table-column prop="MAJORDANGERSOURCE_NUMBER" label="危险源编号" />
<el-table-column prop="ALARM_TYPE_NAME" label="报警类型" width="80" />
<el-table-column prop="MAJORDANGERSOURCE_NUMBER" label="油罐编号" />
<el-table-column prop="ALARM_TYPE_NAME" label="报警类型" />
<el-table-column prop="ALARM_VALUE" label="报警值" />
<el-table-column label="报警级别" width="100">
<el-table-column label="报警级别">
<template v-slot="{ row }">
<span v-if="row.ALARM_LEVEL === '1'"></span>
<span v-else-if="row.ALARM_LEVEL === '2'">二级</span>
<span v-else-if="row.ALARM_LEVEL === '3'">三级</span>
<span v-else-if="row.ALARM_LEVEL === '4'">四级</span>
{{ translationStatus(row.ALARM_LEVEL, levelList) }}
</template>
</el-table-column>
<el-table-column
prop="ALARM_RANGE_MIN"
label="报警阈值下限"
width="120"
/>
<el-table-column
prop="ALARM_RANGE_MAX"
label="报警阈值上限"
width="120"
/>
<el-table-column prop="ALARM_RANGE_MIN" label="报警阈值下限" />
<el-table-column prop="ALARM_RANGE_MAX" label="报警阈值上限" />
<el-table-column label="处置状态">
<template v-slot="{ row }">
{{ fnTranslationStatus(row.ALARM_LEVEL, stateList) }}
{{ translationStatus(row.DISPOSAL_STATUS, stateList) }}
</template>
</el-table-column>
<el-table-column prop="DISPOSAL_TIME" label="时间" />
<el-table-column prop="DISPOSAL_PERSON" label="处置人" />
<el-table-column prop="DISPOSAL_METHOD" label="处置方式" />
<el-table-column label="操作" width="150">
<el-table-column label="操作" width="100">
<template v-slot="{ row }">
<el-button
type="primary"
@ -107,18 +90,6 @@
>
查看
</el-button>
<el-button
type="primary"
text
link
v-if="
row.ALARM_REVIEWER_ID === userStore.getUserInfo.USER_ID &&
row.DISPOSAL_STATUS === '-1'
"
@click="fnFalseAlarmHandling(row.MAJORDANGERSOURCE_DISPOSAL_ID)"
>
误报处置
</el-button>
</template>
</el-table-column>
</layout-table>
@ -127,69 +98,29 @@
</template>
<script setup>
import { reactive } from "vue";
import { fnTranslationStatus, serialNumber } from "@/assets/js/utils";
import {
getEmergencyHandlingRecordList,
setEmergencyHandlingRecordFalseAlarm,
} from "@/request/major_hazard_sources";
import { translationStatus, serialNumber } from "@/assets/js/utils";
import { getEmergencyHandlingRecordList } from "@/request/major_hazard_sources";
import { useRouter, useRoute } from "vue-router";
import { useUserStore } from "@/pinia/user.js";
import { debounce } from "throttle-debounce";
import { ElMessage, ElMessageBox } from "element-plus";
import useListData from "@/assets/js/useListData.js";
const router = useRouter();
const route = useRoute();
const { MAJORDANGERSOURCE_ID } = route.query;
const userStore = useUserStore();
const levelList = [
{ ID: "1", NAME: "一级" },
{ ID: "2", NAME: "二级" },
{ ID: "3", NAME: "三级" },
{ ID: "4", NAME: "四级" },
];
const stateList = [
{ ID: "-2", NAME: "误报" },
{ ID: "-1", NAME: "未处置" },
{ ID: "0", NAME: "报警升级" },
{ ID: "1", NAME: "处置完成" },
];
const data = reactive({
list: [],
pagination: {
currentPage: 1,
pageSize: 10,
total: 0,
},
searchForm: {},
});
const fnGetData = async () => {
const resData = await getEmergencyHandlingRecordList({
currentPage: data.pagination.currentPage,
showCount: data.pagination.pageSize,
...data.searchForm,
MAJORDANGERSOURCE_ID,
const { list, searchForm, pagination, fnResetPagination, fnGetData } =
useListData(getEmergencyHandlingRecordList, {
otherParams: { MAJORDANGERSOURCE_ID },
});
data.list = resData.varList;
data.pagination.total = resData.page.totalResult;
};
fnGetData();
const fnResetPagination = () => {
data.pagination = {
currentPage: 1,
pageSize: 10,
total: 0,
};
fnGetData();
};
const fnFalseAlarmHandling = debounce(
1000,
async (MAJORDANGERSOURCE_DISPOSAL_ID) => {
await ElMessageBox.confirm("确定要将此报警记录设置成误报吗?", {
type: "warning",
});
await setEmergencyHandlingRecordFalseAlarm({
MAJORDANGERSOURCE_DISPOSAL_ID,
});
ElMessage.success("设置成功");
fnResetPagination();
},
{ atBegin: true }
);
</script>
<style scoped></style>

View File

@ -3,90 +3,87 @@
<el-divider content-position="left">重大危险源信息</el-divider>
<el-descriptions :column="2" border>
<el-descriptions-item label="危险源编号">
{{ data.info.MAJORDANGERSOURCE_NUMBER }}
{{ info.MAJORDANGERSOURCE_NUMBER }}
</el-descriptions-item>
<el-descriptions-item label="报警类型">
{{ data.info.ALARM_TYPE_NAME }}
{{ info.ALARM_TYPE_NAME }}
</el-descriptions-item>
<el-descriptions-item label="报警值">
{{ data.info.ALARM_VALUE }}
{{ info.ALARM_VALUE }}
</el-descriptions-item>
<el-descriptions-item label="报警级别">
<span v-if="data.info.ALARM_LEVEL === '1'"></span>
<span v-else-if="data.info.ALARM_LEVEL === '2'">二级</span>
<span v-else-if="data.info.ALARM_LEVEL === '3'">三级</span>
<span v-else-if="data.info.ALARM_LEVEL === '4'">四级</span>
{{ translationStatus(info.ALARM_LEVEL, levelList) }}
</el-descriptions-item>
<el-descriptions-item label="阈值下限">
{{ data.info.ALARM_RANGE_MIN }}
{{ info.ALARM_RANGE_MIN }}
</el-descriptions-item>
<el-descriptions-item label="阈值上限">
{{ data.info.ALARM_RANGE_MAX }}
{{ info.ALARM_RANGE_MAX }}
</el-descriptions-item>
<el-descriptions-item label="处置人">
{{ data.info.DISPOSAL_PERSON }}
{{ info.DISPOSAL_PERSON }}
</el-descriptions-item>
<el-descriptions-item label="处置方式">
{{ data.info.DISPOSAL_METHOD }}
{{ info.DISPOSAL_METHOD }}
</el-descriptions-item>
<el-descriptions-item label="处置描述" :span="2">
{{ data.info.DISPOSAL_DESC }}
{{ info.DISPOSAL_DESC }}
</el-descriptions-item>
<el-descriptions-item label="处置前图片" :span="2">
<img
v-viewer
v-for="item in data.info.disposalBeforeFile"
v-for="item in info.disposalBeforeFile"
:key="item.FILEPATH"
:src="item.url"
alt=""
class="ml"
class="ml-10"
/>
</el-descriptions-item>
<el-descriptions-item label="处置后图片" :span="2">
<img
v-viewer
v-for="item in data.info.disposalAfterFile"
v-for="item in info.disposalAfterFile"
:key="item.FILEPATH"
:src="item.url"
alt=""
class="ml"
class="ml-10"
/>
</el-descriptions-item>
<el-descriptions-item label="处置完成时间" :span="2">
{{ data.info.DISPOSAL_TIME_OVER }}
{{ info.DISPOSAL_TIME_OVER }}
</el-descriptions-item>
</el-descriptions>
</layout-card>
</template>
<script setup>
import { reactive } from "vue";
import { ref } from "vue";
import { getEmergencyHandlingRecordView } from "@/request/major_hazard_sources.js";
import { useRoute } from "vue-router";
import { fnAddingPrefixToFile } from "@/assets/js/utils.js";
import { addingPrefixToFile, translationStatus } from "@/assets/js/utils.js";
const route = useRoute();
const { MAJORDANGERSOURCE_DISPOSAL_ID } = route.query;
const data = reactive({
info: {},
});
const levelList = [
{ ID: "1", NAME: "一级" },
{ ID: "2", NAME: "二级" },
{ ID: "3", NAME: "三级" },
{ ID: "4", NAME: "四级" },
];
const info = ref({});
const fnGetData = async () => {
const resData = await getEmergencyHandlingRecordView({
MAJORDANGERSOURCE_DISPOSAL_ID,
});
data.info = resData.pd;
data.info.disposalBeforeFile = fnAddingPrefixToFile(
info.value = resData.pd;
info.value.disposalBeforeFile = addingPrefixToFile(
resData.pd.disposalBeforeFile
);
data.info.disposalAfterFile = fnAddingPrefixToFile(
info.value.disposalAfterFile = addingPrefixToFile(
resData.pd.disposalAfterFile
);
};
fnGetData();
</script>
<style lang="scss" scoped>
.ml:first-child {
margin-left: 0;
}
</style>
<style lang="scss" scoped></style>

View File

@ -1,74 +1,94 @@
<template>
<layout-card>
<layout-table
:data="data.list"
@get-data="fnGetData"
v-model:pagination="data.pagination"
>
<el-table-column label="序号" width="60">
<template #default="{ $index }">
{{ serialNumber(data.pagination, $index) }}
</template>
</el-table-column>
<el-table-column prop="MAJORDANGERSOURCE_NAME" label="重大危险源名称" />
<el-table-column
prop="MAJORDANGERSOURCE_TYPE_NAME"
label="重大危险源类型"
/>
<el-table-column
prop="MAJORDANGERSOURCE_ADDRESS"
label="重大危险源地址"
/>
<el-table-column prop="USER_NAME" label="变更人" />
<el-table-column prop="CREATTIME" label="变更时间" />
<el-table-column label="操作" width="80">
<template v-slot="{ row }">
<el-button
type="primary"
text
link
@click="
router.push({
path: '/major_hazard_sources/major_hazard_management/change_record/view',
query: { CREATTIME: row.CREATTIME, MAJORDANGERSOURCE_ID },
})
"
>
查看
</el-button>
</template>
</el-table-column>
</layout-table>
</layout-card>
<div>
<el-card>
<el-form
:model="searchForm"
label-width="80px"
@submit.prevent="fnResetPagination"
>
<el-row>
<el-col :span="6">
<el-form-item
label="重大危险源名称"
prop="MAJORDANGERSOURCE_NAME"
label-width="130px"
>
<el-input v-model="searchForm.MAJORDANGERSOURCE_NAME" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="责任人" prop="RESPONSIBLE_PERSON_NAME">
<el-input v-model="searchForm.RESPONSIBLE_PERSON_NAME" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label-width="10px">
<el-button type="primary" native-type="submit">搜索</el-button>
<el-button native-type="reset" @click="fnResetPagination">
重置
</el-button>
</el-form-item>
</el-col>
</el-row>
</el-form>
</el-card>
<layout-card>
<layout-table
:data="list"
@get-data="fnGetData"
v-model:pagination="pagination"
>
<el-table-column label="序号" width="60">
<template #default="{ $index }">
{{ serialNumber(pagination, $index) }}
</template>
</el-table-column>
<el-table-column prop="MAJORDANGERSOURCE_NAME" label="重大危险源名称" />
<el-table-column
prop="MAJORDANGERSOURCE_TYPE_NAME"
label="重大危险源类型"
/>
<el-table-column
prop="MAJORDANGERSOURCE_ADDRESS"
label="重大危险源地址"
/>
<el-table-column prop="USER_NAME" label="变更人" />
<el-table-column prop="CREATTIME" label="变更时间" />
<el-table-column label="操作" width="80">
<template v-slot="{ row }">
<el-button
type="primary"
text
link
@click="
router.push({
path: '/major_hazard_sources/major_hazard_management/change_record/view',
query: { CREATTIME: row.CREATTIME, MAJORDANGERSOURCE_ID },
})
"
>
查看
</el-button>
</template>
</el-table-column>
</layout-table>
</layout-card>
</div>
</template>
<script setup>
import { reactive } from "vue";
import { serialNumber } from "@/assets/js/utils";
import { getMajorHazardManagementChangeRecordList } from "@/request/major_hazard_sources";
import { useRouter, useRoute } from "vue-router";
import useListData from "@/assets/js/useListData.js";
const router = useRouter();
const route = useRoute();
const { MAJORDANGERSOURCE_ID } = route.query;
const data = reactive({
list: [],
pagination: {
currentPage: 1,
pageSize: 10,
total: 0,
},
});
const fnGetData = async () => {
const resData = await getMajorHazardManagementChangeRecordList({
currentPage: data.pagination.currentPage,
showCount: data.pagination.pageSize,
MAJORDANGERSOURCE_ID,
const { list, pagination, searchForm, fnGetData, fnResetPagination } =
useListData(getMajorHazardManagementChangeRecordList, {
otherParams: { MAJORDANGERSOURCE_ID },
});
data.list = resData.varList;
data.pagination.total = resData.page.totalResult;
};
fnGetData();
</script>
<style scoped></style>

View File

@ -6,7 +6,7 @@
<span class="title">变更时间</span>
<span>{{ data.info.OPERATTIME }}</span>
</div>
<table class="mt">
<table class="mt-10">
<tr>
<td class="title" />
<td
@ -72,7 +72,11 @@
经度:{{ data.info.MAJORDANGERSOURCE_LONGITUDE }} 纬度:{{
data.info.MAJORDANGERSOURCE_LATITUDE
}}
<el-button class="ml" circle @click="data.mapDialogVisible = true">
<el-button
class="ml-10"
circle
@click="data.mapDialogVisible = true"
>
<el-icon>
<Place />
</el-icon>
@ -85,7 +89,7 @@
data.oldInfo.MAJORDANGERSOURCE_LATITUDE
}}
<el-button
class="ml"
class="ml-10"
circle
@click="data.oldMapDialogVisible = true"
>
@ -201,9 +205,14 @@
{{ data.info.BRANCHEMERGENCYPLAN_NAME }}
</span>
<el-button
class="ml"
class="ml-10"
type="primary"
@click="fnDownloadFile(data.info.MAJORDANGERSOURCELOG_ID)"
@click="
useDownloadFile(
data.info.BRANCHEMERGENCYPLAN_FILEPATH,
data.info.BRANCHEMERGENCYPLAN_NAME
)
"
>
下载
</el-button>
@ -212,25 +221,30 @@
<td>
<span>{{ data.oldInfo.BRANCHEMERGENCYPLAN_NAME }}</span>
<el-button
class="ml"
class="ml-10"
type="primary"
@click="fnDownloadFile(data.oldInfo.MAJORDANGERSOURCELOG_ID)"
@click="
useDownloadFile(
data.oldInfo.BRANCHEMERGENCYPLAN_FILEPATH,
data.oldInfo.BRANCHEMERGENCYPLAN_NAME
)
"
>
下载
</el-button>
</td>
</tr>
</table>
<layout-map
<map-dialog
v-model:visible="data.mapDialogVisible"
:latitude="data.info.MAJORDANGERSOURCE_LATITUDE"
:longitude="data.info.MAJORDANGERSOURCE_LONGITUDE"
v-model:visible="data.mapDialogVisible"
type="view"
/>
<layout-map
<map-dialog
v-model:visible="data.oldMapDialogVisible"
:latitude="data.oldInfo.MAJORDANGERSOURCE_LATITUDE"
:longitude="data.oldInfo.MAJORDANGERSOURCE_LONGITUDE"
v-model:visible="data.oldMapDialogVisible"
type="view"
/>
</layout-card>
@ -238,11 +252,11 @@
<script setup>
import { reactive } from "vue";
import { ElMessageBox } from "element-plus";
import { getMajorHazardManagementChangeRecordView } from "@/request/major_hazard_sources.js";
import { useRoute } from "vue-router";
import LayoutMap from "@/components/map/index.vue";
import { Place } from "@element-plus/icons-vue";
import useDownloadFile from "@/assets/js/useDownloadFile.js";
import MapDialog from "@/views/major_hazard_sources/major_hazard_management/components/map.vue";
const route = useRoute();
const { MAJORDANGERSOURCE_ID, CREATTIME } = route.query;
@ -263,13 +277,6 @@ const fnGetData = async () => {
if (resData.varList.length > 1) data.oldInfo = resData.varList[1];
};
fnGetData();
const fnDownloadFile = async (MAJORDANGERSOURCELOG_ID) => {
await ElMessageBox.confirm("确定要下载此文件吗?", { type: "warning" });
window.open(
"/api/majordangersourcelog/download?MAJORDANGERSOURCELOG_ID=" +
MAJORDANGERSOURCELOG_ID
);
};
</script>
<style lang="scss" scoped>

View File

@ -0,0 +1,95 @@
<template>
<el-dialog
v-model="visible"
:title="type === 'edit' ? '修改' : '新增'"
:on-close="fnClose"
>
<el-form ref="formRef" :model="form" :rules="rules" label-width="120px">
<el-form-item label="监测类型名称" prop="NAME">
<el-input v-model="form.NAME" />
</el-form-item>
<el-form-item label="排序" prop="ORDER_BY">
<el-input v-model.number="form.ORDER_BY" />
</el-form-item>
<el-form-item label="备注" prop="BZ">
<el-input
v-model="form.BZ"
type="textarea"
:autosize="{ minRows: 3 }"
/>
</el-form-item>
</el-form>
<template #footer>
<el-button @click="fnClose"></el-button>
<el-button type="primary" @click="fnSubmit"> </el-button>
</template>
</el-dialog>
</template>
<script setup>
import { ref } from "vue";
import { useVModels } from "@vueuse/core";
import { debounce } from "throttle-debounce";
import useFormValidate from "@/assets/js/useFormValidate.js";
import {
setMonitoringTypeManagementAdd,
setMonitoringTypeManagementEdit,
} from "@/request/major_hazard_sources.js";
import { ElMessage } from "element-plus";
const props = defineProps({
visible: {
type: Boolean,
required: true,
default: false,
},
form: {
type: Object,
required: true,
default: () => ({}),
},
type: {
type: String,
required: true,
default: "",
},
});
const emits = defineEmits(["update:visible", "update:form", "get-data"]);
const { visible, form } = useVModels(props, emits);
const rules = {
NAME: [
{ required: true, message: "字典名称不能为空", trigger: "change" },
{ min: 2, max: 30, message: "长度在 2 到 30 个字符", trigger: "blur" },
],
ORDER_BY: [
{ required: true, message: "字典序号名称不能为空", trigger: "change" },
{ type: "number", message: "字典序号必须为数字" },
],
};
const formRef = ref(null);
const fnClose = () => {
formRef.value.resetFields();
visible.value = false;
};
const fnSubmit = debounce(
1000,
async () => {
await useFormValidate(formRef);
const params = {
...form.value,
BIANMA: "MONITORINGEQUIPMENTTYPE",
YNDEL: "no",
PARENT_ID: "6a724d36c3ad416fad22049d932c1987",
};
props.type === "add"
? await setMonitoringTypeManagementAdd(params)
: await setMonitoringTypeManagementEdit(params);
ElMessage.success("保存成功");
fnClose();
emits("get-data");
},
{ atBegin: true }
);
</script>
<style scoped lang="scss"></style>

View File

@ -2,14 +2,14 @@
<div>
<el-card>
<el-form
:model="data.searchForm"
:model="searchForm"
label-width="100px"
@submit.prevent="fnResetPagination"
>
<el-row>
<el-col :span="6">
<el-form-item label="监测类型名称" prop="KEYWORDS">
<el-input v-model="data.searchForm.KEYWORDS" />
<el-input v-model="searchForm.KEYWORDS" />
</el-form-item>
</el-col>
<el-col :span="6">
@ -27,14 +27,14 @@
<layout-table
ref="tableRef"
row-key="DICTIONARIES_ID"
:data="data.list"
:data="list"
@get-data="fnGetData"
v-model:pagination="data.pagination"
v-model:pagination="pagination"
>
<el-table-column reserve-selection type="selection" width="55" />
<el-table-column label="序号" width="60">
<template #default="{ $index }">
{{ serialNumber(data.pagination, $index) }}
{{ serialNumber(pagination, $index) }}
</template>
</el-table-column>
<el-table-column prop="NAME" label="监测类型名称" />
@ -80,66 +80,35 @@
</template>
</layout-table>
</layout-card>
<el-dialog
v-model="data.addOrEditDialog.visible"
:title="data.addOrEditDialog.type === 'edit' ? '修改' : '新增'"
>
<el-form
ref="addOrEditDialogFormRef"
:model="data.addOrEditDialog.form"
:rules="data.addOrEditDialog.rules"
label-width="120px"
>
<el-form-item label="监测类型名称" prop="NAME">
<el-input v-model="data.addOrEditDialog.form.NAME" />
</el-form-item>
<el-form-item label="排序" prop="ORDER_BY">
<el-input v-model.number="data.addOrEditDialog.form.ORDER_BY" />
</el-form-item>
<el-form-item label="备注" prop="BZ">
<el-input
v-model="data.addOrEditDialog.form.BZ"
type="textarea"
autosize
/>
</el-form-item>
</el-form>
<template #footer>
<el-button @click="fnAddOrEditDialogChangeShow"></el-button>
<el-button type="primary" @click="fnAddOrEditDialogSubmit">
确定
</el-button>
</template>
</el-dialog>
<add
v-model:visible="data.addOrEditDialog.visible"
v-model:form="data.addOrEditDialog.form"
:type="data.addOrEditDialog.type"
@get-data="fnResetPagination"
/>
</div>
</template>
<script setup>
import { nextTick, reactive, ref } from "vue";
import { nextTick, reactive } from "vue";
import { serialNumber } from "@/assets/js/utils";
import {
getMonitoringTypeManagementList,
setMonitoringTypeManagementAdd,
setMonitoringTypeManagementDelete,
setMonitoringTypeManagementDeleteMultiple,
setMonitoringTypeManagementEdit,
} from "@/request/major_hazard_sources";
import { layoutFnButtonJurisdiction } from "@/assets/js/button_jurisdiction";
import useButtonJurisdiction from "@/assets/js/useButtonJurisdiction.js";
import { debounce } from "throttle-debounce";
import { ElMessage, ElMessageBox } from "element-plus";
import { cloneDeep } from "lodash-es";
import useFormValidate from "@/assets/js/useFormValidate.js";
import useListData from "@/assets/js/useListData.js";
import Add from "./components/add.vue";
const tableRef = ref(null);
const addOrEditDialogFormRef = ref(null);
const { list, searchForm, pagination, fnGetData, fnResetPagination, tableRef } =
useListData(getMonitoringTypeManagementList, {
otherParams: { DICTIONARIES_ID: "6a724d36c3ad416fad22049d932c1987" },
});
const data = reactive({
list: [],
pagination: {
currentPage: 1,
pageSize: 10,
total: 0,
},
searchForm: {},
addOrEditDialog: {
visible: false,
type: "",
@ -148,39 +117,9 @@ const data = reactive({
ORDER_BY: "",
BZ: "",
},
rules: {
NAME: [
{ required: true, message: "字典名称不能为空", trigger: "change" },
{ min: 2, max: 30, message: "长度在 2 到 30 个字符", trigger: "blur" },
],
ORDER_BY: [
{ required: true, message: "字典序号名称不能为空", trigger: "change" },
{ type: "number", message: "字典序号必须为数字" },
],
},
},
});
const fnGetData = async () => {
const resData = await getMonitoringTypeManagementList({
currentPage: data.pagination.currentPage,
showCount: data.pagination.pageSize,
...data.searchForm,
DICTIONARIES_ID: "6a724d36c3ad416fad22049d932c1987",
});
data.list = resData.varList;
data.pagination.total = resData.page.totalResult;
};
fnGetData();
const buttonJurisdiction = await layoutFnButtonJurisdiction("dictionaries");
const fnResetPagination = () => {
data.pagination = {
currentPage: 1,
pageSize: 10,
total: 0,
};
tableRef.value.clearSelection();
fnGetData();
};
const buttonJurisdiction = await useButtonJurisdiction("dictionaries");
const fnDelete = debounce(
1000,
async (DICTIONARIES_ID) => {
@ -209,35 +148,12 @@ const fnDeleteAll = debounce(
},
{ atBegin: true }
);
const fnAddOrEditDialogChangeShow = () => {
data.addOrEditDialog.visible = !data.addOrEditDialog.visible;
};
const fnAddOrEdit = async (row, type) => {
data.addOrEditDialog.type = type;
fnAddOrEditDialogChangeShow();
data.addOrEditDialog.visible = true;
await nextTick();
addOrEditDialogFormRef.value.resetFields();
data.addOrEditDialog.type = type;
if (type === "edit") data.addOrEditDialog.form = cloneDeep(row);
};
const fnAddOrEditDialogSubmit = debounce(
1000,
async () => {
await useFormValidate(addOrEditDialogFormRef);
const { type, form } = data.addOrEditDialog;
const params = {
...form,
BIANMA: "MONITORINGEQUIPMENTTYPE",
YNDEL: "no",
PARENT_ID: "6a724d36c3ad416fad22049d932c1987",
};
if (type === "add") await setMonitoringTypeManagementAdd(params);
if (type === "edit") await setMonitoringTypeManagementEdit(params);
ElMessage.success("保存成功");
fnAddOrEditDialogChangeShow();
fnResetPagination();
},
{ atBegin: true }
);
</script>
<style scoped></style>

View File

@ -0,0 +1,196 @@
<template>
<el-dialog v-model="visible" title="应急处置" :on-close="fnClose">
<el-form ref="formRef" :rules="rules" :model="form" label-width="110px">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="储罐编号" prop="MAJORDANGERSOURCE_NUMBER">
<el-input :model-value="info.MAJORDANGERSOURCE_NUMBER" disabled />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="报警类型" prop="ALARM_TYPE">
<el-select v-model="form.ALARM_TYPE" disabled>
<el-option
v-for="item in equipmentTypeList"
:key="item.BIANMA"
:label="item.NAME"
:value="item.BIANMA"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="报警级别" prop="ALARM_LEVEL">
<el-select v-model="form.ALARM_LEVEL" disabled>
<el-option
v-for="item in equipmentLevelList"
:key="item.VALUE"
:label="item.NAME"
:value="item.VALUE"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="报警值" prop="ALARM_VALUE">
<el-input v-model="form.ALARM_VALUE" disabled />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="阈值下限" prop="ALARM_RANGE_MIN">
<el-input v-model="form.ALARM_RANGE_MIN" disabled />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="阈值上限" prop="ALARM_RANGE_MAX">
<el-input v-model="form.ALARM_RANGE_MAX" disabled />
</el-form-item>
</el-col>
</el-row>
<el-form-item label="处置人" prop="DISPOSAL_PERSON">
<el-input v-model="form.DISPOSAL_PERSON" />
</el-form-item>
<el-form-item label="处置方式" prop="DISPOSAL_METHOD">
<el-input v-model="form.DISPOSAL_METHOD" />
</el-form-item>
<el-form-item label="处置描述" prop="DISPOSAL_DESC">
<el-input v-model="form.DISPOSAL_DESC" autosize type="textarea" />
</el-form-item>
<el-form-item label="处置前图片" prop="disposalBeforeFile">
<layout-upload
v-model:file-list="form.disposalBeforeFile"
accept=".jpg,.jpeg,.png"
list-type="picture-card"
:limit="99"
/>
</el-form-item>
<el-form-item label="处置后图片" prop="disposalAfterFile">
<layout-upload
v-model:file-list="form.disposalAfterFile"
accept=".jpg,.jpeg,.png"
list-type="picture-card"
:limit="99"
/>
</el-form-item>
<el-form-item label="处置完成时间" prop="DISPOSAL_TIME_OVER">
<el-date-picker
v-model="form.DISPOSAL_TIME_OVER"
format="YYYY-MM-DD HH:mm"
value-format="YYYY-MM-DD HH:mm"
type="datetime"
/>
</el-form-item>
</el-form>
<template #footer>
<el-button @click="fnClose"></el-button>
<el-button type="primary" @click="fnSubmit"> </el-button>
</template>
</el-dialog>
</template>
<script setup>
import LayoutUpload from "@/components/upload/index.vue";
import { layoutFnGetEquipmentType } from "@/assets/js/data_dictionary.js";
import { debounce } from "throttle-debounce";
import useFormValidate from "@/assets/js/useFormValidate.js";
import { setRealTimeDataMonitoringEquipmentEdit } from "@/request/major_hazard_sources.js";
import { ElMessage } from "element-plus";
import { ref } from "vue";
import { useVModels } from "@vueuse/core";
import { setUploadImg } from "@/request/api.js";
const props = defineProps({
visible: {
type: Boolean,
required: true,
default: false,
},
form: {
type: Object,
required: true,
default: () => ({}),
},
info: {
type: Object,
required: true,
default: () => ({}),
},
id: {
type: String,
required: true,
default: "",
},
});
const emits = defineEmits(["update:visible", "update:form"]);
const { visible, form } = useVModels(props, emits);
const rules = {
ALARM_TYPE: [{ required: true, message: "请选择报警类型", trigger: "blur" }],
ALARM_VALUE: [{ required: true, message: "报警值不能为空", trigger: "blur" }],
ALARM_LEVEL: [
{ required: true, message: "报警级别不能为空", trigger: "blur" },
],
ALARM_RANGE_MIN: [
{ required: true, message: "报警阈值下限不能为空", trigger: "blur" },
],
ALARM_RANGE_MAX: [
{ required: true, message: "报警阈值上限不能为空", trigger: "blur" },
],
disposalBeforeFile: [
{ required: true, message: "处置前图片不能为空", trigger: "blur" },
],
disposalAfterFile: [
{ required: true, message: "处置后图片不能为空", trigger: "blur" },
],
DISPOSAL_PERSON: [
{ required: true, message: "处置人不能为空", trigger: "blur" },
],
DISPOSAL_METHOD: [
{ required: true, message: "处置方式不能为空", trigger: "blur" },
],
DISPOSAL_DESC: [
{ required: true, message: "处置描述不能为空", trigger: "blur" },
],
DISPOSAL_TIME_OVER: [
{ required: true, message: "请选择处置完成时间", trigger: "blur" },
],
};
const formRef = ref(null);
const equipmentTypeList = await layoutFnGetEquipmentType();
const equipmentLevelList = [
{ VALUE: "1", NAME: "一级" },
{ VALUE: "2", NAME: "二级" },
{ VALUE: "3", NAME: "三级" },
{ VALUE: "4", NAME: "四级" },
];
const fnClose = () => {
formRef.value.resetFields();
visible.value = false;
};
const fnSubmit = debounce(
1000,
async () => {
await useFormValidate(formRef);
await fnUploadImg("disposalBeforeFile", 20);
await fnUploadImg("disposalAfterFile", 21);
await setRealTimeDataMonitoringEquipmentEdit({
...form.value,
DISPOSAL_STATUS: "1",
MAJORDANGERSOURCE_ID: props.id,
});
fnClose();
ElMessage.success("保存成功");
},
{ atBegin: true }
);
const fnUploadImg = async (file, TYPE) => {
for (let i = 0; i < form.value[file].length; i++) {
const formData = new FormData();
formData.append("FFILE", form.value[file][i].raw);
formData.append("FOREIGN_KEY", form.value.MAJORDANGERSOURCE_DISPOSAL_ID);
formData.append("TYPE", TYPE);
await setUploadImg(formData);
}
};
</script>
<style scoped lang="scss"></style>

View File

@ -2,7 +2,7 @@
<layout-card>
<div class="container">
<div
v-for="(item, index) in data.list"
v-for="(item, index) in list"
:key="index"
class="item"
@click="
@ -35,19 +35,14 @@
</template>
<script setup>
import { reactive } from "vue";
import { getRealTimeDataMonitoringEquipment } from "@/request/major_hazard_sources.js";
import { useRouter } from "vue-router";
import useListData from "@/assets/js/useListData.js";
const router = useRouter();
const data = reactive({
list: [],
const { list } = useListData(getRealTimeDataMonitoringEquipment, {
usePagination: false,
});
const fnGetData = async () => {
const resData = await getRealTimeDataMonitoringEquipment();
data.list = resData.varList;
};
fnGetData();
</script>
<style lang="scss" scoped>
@ -59,6 +54,7 @@ fnGetData();
flex-basis: 20%;
text-align: center;
cursor: pointer;
margin: 10px 0;
.img {
margin-top: 10px;
@ -66,8 +62,11 @@ fnGetData();
}
.info {
display: flex;
justify-content: center;
div {
display: inline-block;
width: 40%;
border: 1px solid var(--el-border-color);
padding: 8px 20px;
font-size: 14px;

View File

@ -54,7 +54,7 @@
>
应急处置
</el-button>
<div style="margin-top: 14px">
<div class="mt-14">
<el-button
type="primary"
@click="
@ -166,127 +166,12 @@
</el-tabs>
</div>
</layout-card>
<el-dialog v-model="data.emergencyResponseDialog.visible" title="应急处置">
<el-form
ref="emergencyResponseDialogFormRef"
:rules="data.emergencyResponseDialog.rules"
:model="data.emergencyResponseDialog.form"
label-width="110px"
>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="储罐编号" prop="MAJORDANGERSOURCE_NUMBER">
<el-input v-model="data.info.MAJORDANGERSOURCE_NUMBER" disabled />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="报警类型" prop="ALARM_TYPE">
<el-select
v-model="data.emergencyResponseDialog.form.ALARM_TYPE"
disabled
>
<el-option
v-for="item in equipmentTypeList"
:key="item.BIANMA"
:label="item.NAME"
:value="item.BIANMA"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="报警级别" prop="ALARM_LEVEL">
<el-select
v-model="data.emergencyResponseDialog.form.ALARM_LEVEL"
disabled
>
<el-option
v-for="item in equipmentLevelList"
:key="item.VALUE"
:label="item.NAME"
:value="item.VALUE"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="报警值" prop="ALARM_VALUE">
<el-input
v-model="data.emergencyResponseDialog.form.ALARM_VALUE"
disabled
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="阈值下限" prop="ALARM_RANGE_MIN">
<el-input
v-model="data.emergencyResponseDialog.form.ALARM_RANGE_MIN"
disabled
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="阈值上限" prop="ALARM_RANGE_MAX">
<el-input
v-model="data.emergencyResponseDialog.form.ALARM_RANGE_MAX"
disabled
/>
</el-form-item>
</el-col>
</el-row>
<el-form-item label="处置人" prop="DISPOSAL_PERSON">
<el-input
v-model="data.emergencyResponseDialog.form.DISPOSAL_PERSON"
/>
</el-form-item>
<el-form-item label="处置方式" prop="DISPOSAL_METHOD">
<el-input
v-model="data.emergencyResponseDialog.form.DISPOSAL_METHOD"
/>
</el-form-item>
<el-form-item label="处置描述" prop="DISPOSAL_DESC">
<el-input
v-model="data.emergencyResponseDialog.form.DISPOSAL_DESC"
autosize
type="textarea"
/>
</el-form-item>
<el-form-item label="处置前图片" prop="disposalBeforeFile">
<layout-upload
v-model:file-list="
data.emergencyResponseDialog.form.disposalBeforeFile
"
accept=".jpg,.jpeg,.png"
list-type="picture-card"
:limit="99"
/>
</el-form-item>
<el-form-item label="处置后图片" prop="disposalAfterFile">
<layout-upload
v-model:file-list="
data.emergencyResponseDialog.form.disposalAfterFile
"
accept=".jpg,.jpeg,.png"
list-type="picture-card"
:limit="99"
/>
</el-form-item>
<el-form-item label="处置完成时间" prop="DISPOSAL_TIME_OVER">
<el-date-picker
v-model="data.emergencyResponseDialog.form.DISPOSAL_TIME_OVER"
format="YYYY-MM-DD HH:mm"
value-format="YYYY-MM-DD HH:mm"
type="datetime"
/>
</el-form-item>
</el-form>
<template #footer>
<el-button @click="fnEmergencyResponseDialogChangeShow"></el-button>
<el-button type="primary" @click="fnEmergencyResponseDialogSubmit">
确定
</el-button>
</template>
</el-dialog>
<emergency-response
v-model:visible="data.emergencyResponseDialog.visible"
v-model:form="data.emergencyResponseDialog.form"
:id="MAJORDANGERSOURCE_ID"
:info="data.info"
/>
</div>
</template>
@ -298,16 +183,11 @@ import {
getRealTimeDataMonitoringEquipmentDisposal,
getRealTimeDataMonitoringEquipmentData,
getRealTimeDataMonitoringEquipmentLogList,
setRealTimeDataMonitoringEquipmentEdit,
} from "@/request/major_hazard_sources.js";
import { ElMessage } from "element-plus";
import * as echarts from "echarts";
import LayoutUpload from "@/components/upload/index.vue";
import { cloneDeep } from "lodash-es";
import { layoutFnGetEquipmentTypeCorp } from "@/assets/js/data_dictionary.js";
import { debounce } from "throttle-debounce";
import { setUploadImg } from "@/request/api.js";
import useFormValidate from "@/assets/js/useFormValidate.js";
import EmergencyResponse from "./components/emergency_response.vue";
const route = useRoute();
const { MAJORDANGERSOURCE_ID } = route.query;
@ -316,26 +196,25 @@ const Echarts1 = null;
const Echarts2 = null;
let timer = null;
const tabsActive = ref("first");
const emergencyResponseDialogFormRef = ref(null);
const disposalNew = {};
let disposal = {};
const chartData = {
LIQUIDLEVEL: {
dataX: ["15:14:00", "15:14:05", "15:14:10", "15:14:15", "15:14:20"],
legend: ["液位"],
color: ["#3888FA"],
dataY: [[13.172, 13.171, 13.173, 13.171, 13.175]],
},
TEMPERATURE: {
dataX: ["15:14:00", "15:14:05", "15:14:10", "15:14:15", "15:14:20"],
legend: ["温度"],
color: ["#3888FA"],
dataY: [[26.6, 26.3, 26.5, 26.6, 26.2]],
},
};
const data = reactive({
info: {},
disposalNew: {},
disposal: {},
logList: [],
chartData: {
LIQUIDLEVEL: {
dataX: ["15:14:00", "15:14:05", "15:14:10", "15:14:15", "15:14:20"],
legend: ["液位"],
color: ["#3888FA"],
dataY: [[13.172, 13.171, 13.173, 13.171, 13.175]],
},
TEMPERATURE: {
dataX: ["15:14:00", "15:14:05", "15:14:10", "15:14:15", "15:14:20"],
legend: ["温度"],
color: ["#3888FA"],
dataY: [[26.6, 26.3, 26.5, 26.6, 26.2]],
},
},
hasDisposal: false,
emergencyResponseDialog: {
visible: false,
@ -353,108 +232,69 @@ const data = reactive({
disposalBeforeFile: [],
disposalAfterFile: [],
},
rules: {
ALARM_TYPE: [
{ required: true, message: "请选择报警类型", trigger: "blur" },
],
ALARM_VALUE: [
{ required: true, message: "报警值不能为空", trigger: "blur" },
],
ALARM_LEVEL: [
{ required: true, message: "报警级别不能为空", trigger: "blur" },
],
ALARM_RANGE_MIN: [
{ required: true, message: "报警阈值下限不能为空", trigger: "blur" },
],
ALARM_RANGE_MAX: [
{ required: true, message: "报警阈值上限不能为空", trigger: "blur" },
],
disposalBeforeFile: [
{ required: true, message: "处置前图片不能为空", trigger: "blur" },
],
disposalAfterFile: [
{ required: true, message: "处置后图片不能为空", trigger: "blur" },
],
DISPOSAL_PERSON: [
{ required: true, message: "处置人不能为空", trigger: "blur" },
],
DISPOSAL_METHOD: [
{ required: true, message: "处置方式不能为空", trigger: "blur" },
],
DISPOSAL_DESC: [
{ required: true, message: "处置描述不能为空", trigger: "blur" },
],
DISPOSAL_TIME_OVER: [
{ required: true, message: "请选择处置完成时间", trigger: "blur" },
],
},
},
});
const fnGetDisposal = async () => {
const resData = await getRealTimeDataMonitoringEquipmentDisposal({
MAJORDANGERSOURCE_ID,
});
data.disposal = resData.varList.length > 0 ? resData.varList[0] : {};
disposal = resData.pd;
let message = "";
let type = "";
//
if (
data.disposal.MAJORDANGERSOURCE_DISPOSAL_ID &&
Number(data.disposal.ALARM_LEVEL) >
Number(
data.disposalNew.ALARM_LEVEL === ""
? "10"
: data.disposalNew.ALARM_LEVEL
)
disposal.MAJORDANGERSOURCE_DISPOSAL_ID &&
Number(disposal.ALARM_LEVEL) >
Number(disposalNew.ALARM_LEVEL === "" ? "10" : disposalNew.ALARM_LEVEL)
) {
data.disposal = { ...data.disposal, ...data.disposalNew };
disposal = { ...disposal, ...disposalNew };
message =
data.info.MAJORDANGERSOURCE_NAME +
"【" +
(data.disposalNew.ALARM_TYPE === "MONITORINGEQUIPMENTTYPE001"
(disposalNew.ALARM_TYPE === "MONITORINGEQUIPMENTTYPE001"
? "液位"
: "温度") +
"】已升级为";
if (data.disposalNew.ALARM_LEVEL === "1") {
if (disposalNew.ALARM_LEVEL === "1") {
message += "一级";
type = "error";
} else if (data.disposalNew.ALARM_LEVEL === "2") {
} else if (disposalNew.ALARM_LEVEL === "2") {
message += "二级";
type = "warning";
} else if (data.disposalNew.ALARM_LEVEL === "3") {
} else if (disposalNew.ALARM_LEVEL === "3") {
message += "三级";
type = "warning";
} else if (data.disposalNew.ALARM_LEVEL === "4") {
} else if (disposalNew.ALARM_LEVEL === "4") {
message += "四级";
type = "info";
}
message += "预警,请尽快处理";
} else {
//
data.disposal = { ...data.disposal, ...data.disposalNew };
disposal = { ...disposal, ...disposalNew };
message =
data.info.MAJORDANGERSOURCE_NAME +
"【" +
(data.disposalNew.ALARM_TYPE === "MONITORINGEQUIPMENTTYPE001"
(disposalNew.ALARM_TYPE === "MONITORINGEQUIPMENTTYPE001"
? "液位"
: "温度") +
"】已达";
if (data.disposalNew.ALARM_LEVEL === "1") {
if (disposalNew.ALARM_LEVEL === "1") {
message += "一级";
type = "error";
} else if (data.disposalNew.ALARM_LEVEL === "2") {
} else if (disposalNew.ALARM_LEVEL === "2") {
message += "二级";
type = "warning";
} else if (data.disposalNew.ALARM_LEVEL === "3") {
} else if (disposalNew.ALARM_LEVEL === "3") {
message += "三级";
type = "warning";
} else if (data.disposalNew.ALARM_LEVEL === "4") {
} else if (disposalNew.ALARM_LEVEL === "4") {
message += "四级";
type = "info";
}
message += "预警,请尽快处理";
}
if (type) {
if (message) {
data.hasDisposal = true;
messageExample && messageExample.close();
messageExample = null;
@ -493,8 +333,8 @@ const fnGetStorageTankData = async () => {
data.info.LIQUIDLEVEL_RANGEMAX = item.RANGE1_MAX;
if (ALARM_LEVEL > 1) {
ALARM_LEVEL = 1;
data.disposalNew.ALARM_TYPE = item.MONITORINGDEVICESENSOR_TYPE;
data.disposalNew.ALARM_LEVEL = "1";
disposalNew.ALARM_TYPE = item.MONITORINGDEVICESENSOR_TYPE;
disposalNew.ALARM_LEVEL = "1";
}
} else if (
Number(item.RANGE2_MIN) <= Number(liquidLevel) &&
@ -505,8 +345,8 @@ const fnGetStorageTankData = async () => {
data.info.LIQUIDLEVEL_RANGEMAX = item.RANGE2_MAX;
if (ALARM_LEVEL > 2) {
ALARM_LEVEL = 2;
data.disposalNew.ALARM_TYPE = item.MONITORINGDEVICESENSOR_TYPE;
data.disposalNew.ALARM_LEVEL = "2";
disposalNew.ALARM_TYPE = item.MONITORINGDEVICESENSOR_TYPE;
disposalNew.ALARM_LEVEL = "2";
}
} else if (
Number(item.RANGE3_MIN) <= Number(liquidLevel) &&
@ -517,8 +357,8 @@ const fnGetStorageTankData = async () => {
data.info.LIQUIDLEVEL_RANGEMAX = item.RANGE3_MAX;
if (ALARM_LEVEL > 3) {
ALARM_LEVEL = 3;
data.disposalNew.ALARM_TYPE = item.MONITORINGDEVICESENSOR_TYPE;
data.disposalNew.ALARM_LEVEL = "3";
disposalNew.ALARM_TYPE = item.MONITORINGDEVICESENSOR_TYPE;
disposalNew.ALARM_LEVEL = "3";
}
} else if (
Number(item.RANGE4_MIN) <= Number(liquidLevel) &&
@ -529,8 +369,8 @@ const fnGetStorageTankData = async () => {
data.info.LIQUIDLEVEL_RANGEMAX = item.RANGE4_MAX;
if (ALARM_LEVEL > 4) {
ALARM_LEVEL = 4;
data.disposalNew.ALARM_TYPE = item.MONITORINGDEVICESENSOR_TYPE;
data.disposalNew.ALARM_LEVEL = "4";
disposalNew.ALARM_TYPE = item.MONITORINGDEVICESENSOR_TYPE;
disposalNew.ALARM_LEVEL = "4";
}
} else {
data.info.LIQUIDLEVELCLASS = "green";
@ -539,11 +379,11 @@ const fnGetStorageTankData = async () => {
}
if (
ALARM_LEVEL < 10 &&
data.disposalNew.ALARM_TYPE === item.MONITORINGDEVICESENSOR_TYPE
disposalNew.ALARM_TYPE === item.MONITORINGDEVICESENSOR_TYPE
) {
data.disposalNew.ALARM_VALUE = liquidLevel;
data.disposalNew.ALARM_RANGE_MIN = data.info.LIQUIDLEVEL_RANGEMIN;
data.disposalNew.ALARM_RANGE_MAX = data.info.LIQUIDLEVEL_RANGEMAX;
disposalNew.ALARM_VALUE = liquidLevel;
disposalNew.ALARM_RANGE_MIN = data.info.LIQUIDLEVEL_RANGEMIN;
disposalNew.ALARM_RANGE_MAX = data.info.LIQUIDLEVEL_RANGEMAX;
}
} else if (
item.MONITORINGDEVICESENSOR_TYPE === "MONITORINGEQUIPMENTTYPE002"
@ -558,8 +398,8 @@ const fnGetStorageTankData = async () => {
data.info.TEMPERATURE_RANGEMAX = item.RANGE1_MAX;
if (ALARM_LEVEL > 1) {
ALARM_LEVEL = 1;
data.disposalNew.ALARM_TYPE = item.MONITORINGDEVICESENSOR_TYPE;
data.disposalNew.ALARM_LEVEL = "1";
disposalNew.ALARM_TYPE = item.MONITORINGDEVICESENSOR_TYPE;
disposalNew.ALARM_LEVEL = "1";
}
} else if (
Number(item.RANGE2_MIN) <= Number(temperature) &&
@ -570,8 +410,8 @@ const fnGetStorageTankData = async () => {
data.info.TEMPERATURE_RANGEMAX = item.RANGE2_MAX;
if (ALARM_LEVEL > 2) {
ALARM_LEVEL = 2;
data.disposalNew.ALARM_TYPE = item.MONITORINGDEVICESENSOR_TYPE;
data.disposalNew.ALARM_LEVEL = "2";
disposalNew.ALARM_TYPE = item.MONITORINGDEVICESENSOR_TYPE;
disposalNew.ALARM_LEVEL = "2";
}
} else if (
Number(item.RANGE3_MIN) <= Number(temperature) &&
@ -582,8 +422,8 @@ const fnGetStorageTankData = async () => {
data.info.TEMPERATURE_RANGEMAX = item.RANGE3_MAX;
if (ALARM_LEVEL > 3) {
ALARM_LEVEL = 3;
data.disposalNew.ALARM_TYPE = item.MONITORINGDEVICESENSOR_TYPE;
data.disposalNew.ALARM_LEVEL = "3";
disposalNew.ALARM_TYPE = item.MONITORINGDEVICESENSOR_TYPE;
disposalNew.ALARM_LEVEL = "3";
}
} else if (
Number(item.RANGE4_MIN) <= Number(temperature) &&
@ -594,8 +434,8 @@ const fnGetStorageTankData = async () => {
data.info.TEMPERATURE_RANGEMAX = item.RANGE4_MAX;
if (ALARM_LEVEL > 4) {
ALARM_LEVEL = 4;
data.disposalNew.ALARM_TYPE = item.MONITORINGDEVICESENSOR_TYPE;
data.disposalNew.ALARM_LEVEL = "4";
disposalNew.ALARM_TYPE = item.MONITORINGDEVICESENSOR_TYPE;
disposalNew.ALARM_LEVEL = "4";
}
} else {
data.info.TEMPERATURECLASS = "green";
@ -604,11 +444,11 @@ const fnGetStorageTankData = async () => {
}
if (
ALARM_LEVEL < 10 &&
data.disposalNew.ALARM_TYPE === item.MONITORINGDEVICESENSOR_TYPE
disposalNew.ALARM_TYPE === item.MONITORINGDEVICESENSOR_TYPE
) {
data.disposalNew.ALARM_VALUE = temperature;
data.disposalNew.ALARM_RANGE_MIN = data.info.TEMPERATURE_RANGEMIN;
data.disposalNew.ALARM_RANGE_MAX = data.info.TEMPERATURE_RANGEMAX;
disposalNew.ALARM_VALUE = temperature;
disposalNew.ALARM_RANGE_MIN = data.info.TEMPERATURE_RANGEMIN;
disposalNew.ALARM_RANGE_MAX = data.info.TEMPERATURE_RANGEMAX;
}
}
});
@ -694,21 +534,21 @@ const fnGetStorageTankLogList = async () => {
item[
"STORAGETANK" + data.info.MAJORDANGERSOURCE_STORAGETANK + "_OPERATTIME"
];
data.chartData.LIQUIDLEVEL.dataX[j] =
chartData.LIQUIDLEVEL.dataX[j] =
datatime.length > 11 ? datatime.substring(11) : datatime;
data.chartData.TEMPERATURE.dataX[j] =
chartData.TEMPERATURE.dataX[j] =
datatime.length > 11 ? datatime.substring(11) : datatime;
data.chartData.LIQUIDLEVEL.dataY[0][j] =
chartData.LIQUIDLEVEL.dataY[0][j] =
item[
"STORAGETANK" + data.info.MAJORDANGERSOURCE_STORAGETANK + "_LIQUIDLEVEL"
];
data.chartData.TEMPERATURE.dataY[0][j] =
chartData.TEMPERATURE.dataY[0][j] =
item[
"STORAGETANK" + data.info.MAJORDANGERSOURCE_STORAGETANK + "_TEMPERATURE"
];
});
fnInitEcharts(data.chartData.LIQUIDLEVEL, Echarts1, "#echarts1");
fnInitEcharts(data.chartData.TEMPERATURE, Echarts2, "#echarts2");
fnInitEcharts(chartData.LIQUIDLEVEL, Echarts1, "#echarts1");
fnInitEcharts(chartData.TEMPERATURE, Echarts2, "#echarts2");
};
const fnGetData = async () => {
const resData = await getRealTimeDataMonitoringEquipmentInfo({
@ -723,50 +563,10 @@ const fnGetData = async () => {
}, 5000);
};
fnGetData();
const equipmentTypeList = await layoutFnGetEquipmentTypeCorp();
const equipmentLevelList = [
{ VALUE: "1", NAME: "一级" },
{ VALUE: "2", NAME: "二级" },
{ VALUE: "3", NAME: "三级" },
{ VALUE: "4", NAME: "四级" },
];
const fnEmergencyResponseDialogChangeShow = () => {
data.emergencyResponseDialog.visible = !data.emergencyResponseDialog.visible;
};
const fnEmergencyResponse = async () => {
fnEmergencyResponseDialogChangeShow();
data.emergencyResponseDialog.visible = true;
await nextTick();
emergencyResponseDialogFormRef.value.resetFields();
data.emergencyResponseDialog.form = cloneDeep(data.disposal);
};
const fnEmergencyResponseDialogSubmit = debounce(
1000,
async () => {
await useFormValidate(emergencyResponseDialogFormRef);
const { form } = data.emergencyResponseDialog;
await fnUploadImg("disposalBeforeFile", 20);
await fnUploadImg("disposalAfterFile", 21);
await setRealTimeDataMonitoringEquipmentEdit({
...form,
DISPOSAL_STATUS: "1",
MAJORDANGERSOURCE_ID,
MAJORDANGERSOURCE_DISPOSAL_ID:
data.disposal.MAJORDANGERSOURCE_DISPOSAL_ID,
});
fnEmergencyResponseDialogChangeShow();
ElMessage.success("保存成功");
},
{ atBegin: true }
);
const fnUploadImg = async (file, TYPE) => {
const { form } = data.emergencyResponseDialog;
for (let i = 0; i < form[file].length; i++) {
const formData = new FormData();
formData.append("FFILE", form[file][i].raw);
formData.append("FOREIGN_KEY", data.disposal.MAJORDANGERSOURCE_DISPOSAL_ID);
formData.append("TYPE", TYPE);
await setUploadImg(formData);
}
data.emergencyResponseDialog.form = cloneDeep(disposal);
};
onBeforeUnmount(() => {
messageExample && messageExample.close();