2025-03-30 22:09:19 +08:00
|
|
|
|
<template>
|
2025-03-30 22:21:59 +08:00
|
|
|
|
<MOSTY.FromPage :title="props.editObj.title" @closeDialog="closepost">
|
2025-03-30 22:09:19 +08:00
|
|
|
|
<template #content>
|
|
|
|
|
<MOSTY.Assort :title="'基础信息'" />
|
2025-03-30 22:21:59 +08:00
|
|
|
|
<el-form :model="data.config" ref="ruleFormRef" label-position="right" :rules="rules" label-width="150px"
|
|
|
|
|
:disabled='!props.editObj.saveBtnShow'>
|
2025-03-30 22:09:19 +08:00
|
|
|
|
<el-form-item label="设备类型:" prop="sblx">
|
2025-03-30 22:21:59 +08:00
|
|
|
|
<el-select v-model="data.config.sblx" placeholder="请选择设备类型" clearable style="width: 337px">
|
2025-03-30 22:09:19 +08:00
|
|
|
|
<el-option v-for="item in D_BZ_YJSBLX" :key="item.value" :label="item.label"
|
|
|
|
|
:value="item.value"></el-option>
|
|
|
|
|
</el-select>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-form-item label="预警设备名称:" prop="sbmc">
|
2025-03-30 22:21:59 +08:00
|
|
|
|
<el-input v-model="data.config.sbmc" style="width: 337px" />
|
2025-03-30 22:09:19 +08:00
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-form-item label="设备编号:" prop="sbbh">
|
2025-03-30 22:21:59 +08:00
|
|
|
|
<el-input v-model="data.config.sbbh" style="width: 337px" />
|
2025-03-30 22:09:19 +08:00
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-form-item label="设备状态:" prop="sbzt">
|
2025-03-30 22:21:59 +08:00
|
|
|
|
<el-select v-model="data.config.sbzt" placeholder="请选择设备状态" clearable style="width: 337px">
|
2025-03-30 22:09:19 +08:00
|
|
|
|
<el-option v-for="item in D_BZ_DLSBZT" :key="item.value" :label="item.label"
|
|
|
|
|
:value="item.value"></el-option>
|
|
|
|
|
</el-select>
|
|
|
|
|
</el-form-item>
|
2025-03-30 22:21:59 +08:00
|
|
|
|
<el-form-item label="IP地址:" prop="ipaddr">
|
|
|
|
|
<el-input v-model="data.config.ipaddr" placeholder="请输入IP地址" style="width: 337px"></el-input>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-form-item label="端口号:" prop="port">
|
|
|
|
|
<el-input v-model="data.config.port" type="number" placeholder="请输入端口号" style="width: 337px"></el-input>
|
|
|
|
|
</el-form-item>
|
2025-03-30 22:09:19 +08:00
|
|
|
|
<el-form-item label="绑定设备:" prop="parentname">
|
2025-03-30 22:21:59 +08:00
|
|
|
|
<el-input v-model="data.config.parentname" style="width: 337px" readonly clearable>
|
2025-03-30 22:09:19 +08:00
|
|
|
|
<template #append>
|
|
|
|
|
<el-button class='cursor' @click="chooseSb()">选择</el-button>
|
|
|
|
|
</template>
|
|
|
|
|
</el-input>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-form-item label="所属场所:" prop="sitename">
|
2025-03-30 22:21:59 +08:00
|
|
|
|
<el-input v-model="data.config.sitename" style="width: 337px" disabled />
|
2025-03-30 22:09:19 +08:00
|
|
|
|
</el-form-item>
|
2025-03-30 22:21:59 +08:00
|
|
|
|
<el-form-item :label="data.config.publicarea == '1' ? '所属场区:' : '所属建筑物:'" prop="buildingname">
|
|
|
|
|
<el-input v-model="data.config.buildingname" style="width: 337px" disabled />
|
2025-03-30 22:09:19 +08:00
|
|
|
|
</el-form-item>
|
2025-03-30 22:21:59 +08:00
|
|
|
|
<el-form-item label="所属楼层:" prop="floorname" v-if="data.config.publicarea != '1'">
|
|
|
|
|
<el-input v-model="data.config.floorname" style="width: 337px" disabled />
|
2025-03-30 22:09:19 +08:00
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-form-item label="部位名称:" prop="partname">
|
2025-03-30 22:21:59 +08:00
|
|
|
|
<el-input v-model="data.config.partname" style="width: 337px" disabled />
|
2025-03-30 22:09:19 +08:00
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-form-item label="责任部门:" prop="deptname">
|
2025-03-30 22:21:59 +08:00
|
|
|
|
<el-input v-model="data.config.deptname" style="width: 337px" disabled />
|
2025-03-30 22:09:19 +08:00
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-form-item label="责任人:" style="width: 100%; " prop="responsibilitypersonname">
|
2025-03-30 22:21:59 +08:00
|
|
|
|
<el-input v-model="data.config.responsibilitypersonname" :rows="3" type="textarea" style="width:1310px"
|
2025-03-30 22:09:19 +08:00
|
|
|
|
disabled />
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-form-item label="具体位置:" style="width: 100%; " prop="location">
|
2025-03-30 22:21:59 +08:00
|
|
|
|
<el-input v-model="data.config.location" :rows="3" type="textarea" style="width:1310px" />
|
2025-03-30 22:09:19 +08:00
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-form-item label="备注:" style="width: 100%; ">
|
2025-03-30 22:21:59 +08:00
|
|
|
|
<el-input v-model="data.config.bz" :rows="3" type="textarea" style="width:1310px" />
|
2025-03-30 22:09:19 +08:00
|
|
|
|
</el-form-item>
|
|
|
|
|
</el-form>
|
2025-03-30 22:21:59 +08:00
|
|
|
|
<MOSTY.Assort v-if="data.config.id" :title="'关联信息(固定信息)'" />
|
|
|
|
|
<div>
|
|
|
|
|
<div v-if="data.config.id">
|
|
|
|
|
<div class="table-lable">
|
|
|
|
|
<span>动态信息</span>
|
|
|
|
|
<img :src="getImgUrl('img/icon-jt.png')" style="cursor: pointer" @click="isShowdt = !isShowdt" />
|
|
|
|
|
</div>
|
|
|
|
|
<div v-if="data.config.id">
|
|
|
|
|
<MOSTY.TabList :tablist="tablist2" :obj="data.config" :showCount="true" :sblx="sblx"
|
|
|
|
|
:isEdit="props.editObj.saveBtnShow" @tableChange="tableChange" @resetChange="resetChange" />
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
2025-03-30 22:09:19 +08:00
|
|
|
|
</template>
|
|
|
|
|
<template #footer>
|
2025-03-30 22:21:59 +08:00
|
|
|
|
<el-button type="primary" @click="saveData(ruleFormRef)" v-loading="saveloading" v-if='props.editObj.saveBtnShow'>
|
|
|
|
|
<el-icon>
|
2025-03-30 22:09:19 +08:00
|
|
|
|
<DocumentChecked />
|
|
|
|
|
</el-icon>保存 </el-button>
|
|
|
|
|
<el-button @click="closepost"><el-icon>
|
|
|
|
|
<DocumentDelete />
|
|
|
|
|
</el-icon>关闭</el-button>
|
|
|
|
|
</template>
|
|
|
|
|
</MOSTY.FromPage>
|
|
|
|
|
<div>
|
2025-03-30 22:21:59 +08:00
|
|
|
|
<Sbss v-model="showSbss" :data="data.config.parentid" :sbid="leaderid" :sblx="sblx" @choosedSbss="choosedSbss"
|
2025-03-30 22:09:19 +08:00
|
|
|
|
searchType="04"></Sbss>
|
|
|
|
|
</div>
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
<script setup>
|
2025-03-30 22:21:59 +08:00
|
|
|
|
import { getImgUrl } from "@/utils/tools.js"
|
|
|
|
|
import { ref, getCurrentInstance, onMounted, watch, reactive, defineAsyncComponent } from "vue";
|
2025-03-30 22:09:19 +08:00
|
|
|
|
import * as MOSTY from "@/components/MyComponents/index";
|
|
|
|
|
import Sbss from "@/components/MyComponents/ChooseUser/sbss.vue";
|
|
|
|
|
import { ElMessage } from "element-plus";
|
|
|
|
|
import { getApi, postApi } from "@/api/tobAcco_api.js";
|
|
|
|
|
const { proxy } = getCurrentInstance();
|
|
|
|
|
const { D_BZ_DLSBZT, D_BZ_YJSBLX } = proxy.$dict("D_BZ_DLSBZT", "D_BZ_YJSBLX")
|
|
|
|
|
const rules = {
|
|
|
|
|
sitename: [{ required: true, message: "请输入场所名称" }],
|
|
|
|
|
partname: [{ required: true, message: "请输入部位名称" }],
|
|
|
|
|
buildingname: [{ required: true, message: "请输入所属建筑物" }],
|
|
|
|
|
floorname: [{ required: true, message: "请输入所属楼层" }],
|
|
|
|
|
sbmc: [{ required: true, message: "请输入预警设备名称" }],
|
|
|
|
|
sbbh: [{ required: true, message: "请输入设备编号" }],
|
|
|
|
|
sbzt: [{ required: true, message: "请选择设备状态" }],
|
2025-03-30 22:21:59 +08:00
|
|
|
|
sblx: [{ required: true, message: "请选择设备类型" }],
|
2025-03-30 22:09:19 +08:00
|
|
|
|
parentname: [{ required: true, message: "请选择绑定设备" }],
|
2025-03-30 22:21:59 +08:00
|
|
|
|
ipaddr: [{ required: true, message: "请输入IP地址" }],
|
|
|
|
|
port: [{ required: true, message: "请输入端口号" }],
|
2025-03-30 22:09:19 +08:00
|
|
|
|
deptname: [{ required: true, message: "责任部门不能为空" }],
|
|
|
|
|
responsibilitypersonname: [{ required: true, message: "责任人不能为空" }],
|
|
|
|
|
location: [{ required: true, message: "请输入具体位置" }]
|
|
|
|
|
};
|
2025-03-30 22:21:59 +08:00
|
|
|
|
const tablist2 = ref([])
|
2025-03-30 22:09:19 +08:00
|
|
|
|
const saveloading = ref(false)
|
|
|
|
|
const showSbss = ref(false);
|
|
|
|
|
const ruleFormRef = ref();
|
|
|
|
|
const sblx = ref(null)
|
2025-03-30 22:21:59 +08:00
|
|
|
|
const emit = defineEmits(["saveSuccess", '"update:modelValue"']);
|
2025-03-30 22:09:19 +08:00
|
|
|
|
// 接收子组件传来的
|
|
|
|
|
const props = defineProps({
|
2025-03-30 22:21:59 +08:00
|
|
|
|
editObj: {
|
2025-03-30 22:09:19 +08:00
|
|
|
|
type: Object,
|
2025-03-30 22:21:59 +08:00
|
|
|
|
default: () => { }
|
2025-03-30 22:09:19 +08:00
|
|
|
|
}
|
|
|
|
|
});
|
2025-03-30 22:21:59 +08:00
|
|
|
|
const data = reactive({
|
|
|
|
|
fromObj: {},
|
|
|
|
|
config: {
|
|
|
|
|
title: "",
|
|
|
|
|
saveBtnShow: true,
|
|
|
|
|
type: ""
|
|
|
|
|
}
|
|
|
|
|
})
|
2025-03-30 22:09:19 +08:00
|
|
|
|
watch(
|
2025-03-30 22:21:59 +08:00
|
|
|
|
() => data.config.sblx,
|
2025-03-30 22:09:19 +08:00
|
|
|
|
(val) => {
|
|
|
|
|
let arr = [['01', '200101030500'], ['02', '200101020200'], ['03', '200101020100'], ['04', '200101020300'],
|
2025-03-30 22:21:59 +08:00
|
|
|
|
['05', '200101030100'], ['06', '200102010000']];
|
2025-03-30 22:09:19 +08:00
|
|
|
|
for (let i = 0; i < arr.length; i++) {
|
|
|
|
|
const item = arr[i];
|
|
|
|
|
let zddm = item[0];
|
|
|
|
|
let sblxdm = item[1];
|
|
|
|
|
if (zddm == val) {
|
|
|
|
|
sblx.value = sblxdm;
|
2025-03-30 22:21:59 +08:00
|
|
|
|
if (["200101060100", '200101060200', '200101030500', '200101020200',
|
|
|
|
|
'200101020100', '200101020300', '200102010000', "200101030100"].includes(sblx.value)) {
|
|
|
|
|
let title = '附属设备'
|
|
|
|
|
if (['200101020200', '200101020100'].includes(sblx.value)) {
|
|
|
|
|
title = '液位仪';
|
|
|
|
|
} else if ('200101020300' == sblx.value) {
|
|
|
|
|
title = '压力传感器'
|
|
|
|
|
} else if ('200102010000' == sblx.value) {
|
|
|
|
|
title = '视频摄像头'
|
|
|
|
|
}
|
|
|
|
|
tablist2.value.push({
|
|
|
|
|
title: title,
|
|
|
|
|
num: 0,
|
|
|
|
|
icon: "sbss2",
|
|
|
|
|
sblx: sblx.value,
|
|
|
|
|
actives: true,
|
|
|
|
|
components: defineAsyncComponent(() => import("@/components/MyComponents/TabList/Fssblb.vue"))
|
|
|
|
|
})
|
|
|
|
|
}
|
2025-03-30 22:09:19 +08:00
|
|
|
|
break
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
immediate: true,
|
|
|
|
|
deep: true
|
|
|
|
|
}
|
|
|
|
|
);
|
|
|
|
|
onMounted(() => {
|
2025-03-30 22:21:59 +08:00
|
|
|
|
data.config.publicarea = '1'
|
|
|
|
|
if (props.editObj) {
|
|
|
|
|
data.config = props.editObj
|
2025-03-30 22:09:19 +08:00
|
|
|
|
}
|
2025-03-30 22:21:59 +08:00
|
|
|
|
getMain(data.config.id)
|
2025-03-30 22:09:19 +08:00
|
|
|
|
})
|
2025-03-30 22:21:59 +08:00
|
|
|
|
//子表总数
|
|
|
|
|
function gettabcount() {
|
|
|
|
|
getApi({ id: data.config.parentid }, "/mosty-jcgl/aqsbssZb/countAll").then(res => {
|
|
|
|
|
tablist2.value.forEach(item => {
|
|
|
|
|
if (["附属设备", "液位仪", "压力传感器", "视频摄像头"].includes(item.title)) {
|
|
|
|
|
item.num = res ? res : 0
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
// 获取详情
|
|
|
|
|
function getMain(id) {
|
|
|
|
|
if (id) {
|
|
|
|
|
getApi({ id: id }, "/mosty-lps/yjsbInfo/getInfo").then(res => {
|
|
|
|
|
if (res) {
|
|
|
|
|
data.config = res
|
|
|
|
|
//获取建筑物详情
|
|
|
|
|
if (data.fromObj.buildingid) {
|
|
|
|
|
getApi({}, `/mosty-jcgl/building/getBuildingById/${data.fromObj.buildingid}`).then(res => {
|
|
|
|
|
data.config.publicarea = res.publicarea ? res.publicarea : "2"
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
//统计各类总数
|
|
|
|
|
gettabcount()
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//获取子表数据
|
|
|
|
|
function tableChange(val) {
|
|
|
|
|
gettabcount()
|
|
|
|
|
}
|
2025-03-30 22:09:19 +08:00
|
|
|
|
// 选择设备设施
|
2025-03-30 22:21:59 +08:00
|
|
|
|
function choosedSbss(res) {
|
|
|
|
|
data.config.parentid = res.id
|
|
|
|
|
data.config.parentname = res.name
|
|
|
|
|
data.config.location = res.location
|
|
|
|
|
data.config.siteid = res.siteid
|
|
|
|
|
data.config.sitename = res.sitename
|
|
|
|
|
data.config.buildingid = res.buildingid
|
|
|
|
|
data.config.buildingname = res.buildingname
|
|
|
|
|
//获取建筑物详情
|
|
|
|
|
getApi({}, `/mosty-jcgl/building/getBuildingById/${res.buildingid}`).then(resp => {
|
|
|
|
|
data.config.publicarea = resp.publicarea ? resp.publicarea : "2"
|
2025-03-30 22:09:19 +08:00
|
|
|
|
})
|
2025-03-30 22:21:59 +08:00
|
|
|
|
data.config.floorid = res.floorid
|
|
|
|
|
data.config.floorname = res.floorname
|
|
|
|
|
data.config.partid = res.partid
|
|
|
|
|
data.config.partname = res.partname
|
|
|
|
|
data.config.sbid = res.id
|
|
|
|
|
data.config.name = res.name
|
|
|
|
|
data.config.deptcode = res.responsibilitydeptid
|
|
|
|
|
data.config.deptname = res.responsibilitydeptname
|
|
|
|
|
data.config.responsibilitypersonname = res.responsibilitypersonname
|
|
|
|
|
data.config.responsibilityperson = res.responsibilityperson
|
2025-03-30 22:09:19 +08:00
|
|
|
|
}
|
|
|
|
|
// 打开选择设备弹窗
|
|
|
|
|
function chooseSb() {
|
|
|
|
|
if (!sblx.value) {
|
|
|
|
|
ElMessage.success("请先选择设备类型");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
showSbss.value = true
|
|
|
|
|
}
|
|
|
|
|
function closepost() {
|
2025-03-30 22:21:59 +08:00
|
|
|
|
if (props.editObj.saveBtnShow) {
|
2025-03-30 22:09:19 +08:00
|
|
|
|
proxy.$modal.confirm('离开会丢失页面中修改的内容,确认离开吗?').then(() => {
|
2025-03-30 22:21:59 +08:00
|
|
|
|
emit("changePage", "Main")
|
2025-03-30 22:09:19 +08:00
|
|
|
|
})
|
|
|
|
|
} else {
|
2025-03-30 22:21:59 +08:00
|
|
|
|
emit("changePage", "Main")
|
2025-03-30 22:09:19 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// 保存数据
|
|
|
|
|
const saveData = async (ruleFormRef) => {
|
|
|
|
|
saveloading.value = true
|
|
|
|
|
if (!ruleFormRef) return
|
|
|
|
|
ruleFormRef.validate((valid) => {
|
|
|
|
|
if (valid) {
|
2025-03-30 22:21:59 +08:00
|
|
|
|
if (!props.editObj.id) {
|
|
|
|
|
postApi(data.config, "/mosty-lps/yjsbInfo/add").then((res) => {
|
2025-03-30 22:09:19 +08:00
|
|
|
|
ElMessage.success("新增成功");
|
2025-03-30 22:21:59 +08:00
|
|
|
|
emit("changePage", "Main")
|
2025-03-30 22:09:19 +08:00
|
|
|
|
}).finally(() => {
|
|
|
|
|
saveloading.value = false
|
|
|
|
|
})
|
|
|
|
|
} else {
|
2025-03-30 22:21:59 +08:00
|
|
|
|
postApi(data.config, "/mosty-lps/yjsbInfo/edit").then((res) => {
|
2025-03-30 22:09:19 +08:00
|
|
|
|
ElMessage.success("修改成功");
|
2025-03-30 22:21:59 +08:00
|
|
|
|
emit("changePage", "Main")
|
2025-03-30 22:09:19 +08:00
|
|
|
|
}).finally(() => {
|
|
|
|
|
saveloading.value = false
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
saveloading.value = false
|
|
|
|
|
ElMessage.warning('请输入必填项!!!')
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
};
|
|
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
<style lang="scss" scoped>
|
|
|
|
|
::v-deep .el-dialog {
|
|
|
|
|
--el-dialog-margin-top: 10vh !important;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
::v-deep .el-form {
|
|
|
|
|
width: 90%;
|
|
|
|
|
margin: 10px 20px;
|
|
|
|
|
padding: 10px;
|
|
|
|
|
flex-wrap: wrap;
|
|
|
|
|
justify-content: start;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
::v-deep .el-tabs--border-card>.el-tabs__header .el-tabs__item {
|
|
|
|
|
color: #fff;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
::v-deep .el-tabs--border-card>.el-tabs__header .el-tabs__item.is-active {
|
|
|
|
|
color: var(--el-color-primary);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.table-lable {
|
|
|
|
|
margin: 10px;
|
|
|
|
|
color: var(--el-color-primary);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
::v-deep ::-webkit-scrollbar {
|
|
|
|
|
display: none !important;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
::v-deep .el-pagination {
|
|
|
|
|
justify-content: center !important;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
::v-deep .el-form-item__content {
|
|
|
|
|
margin-left: 0px !important;
|
|
|
|
|
}
|
|
|
|
|
</style>
|