Browse Source

预案

wangqin
zhoule 11 months ago
parent
commit
37d2596b91
  1. 478
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/event/EventDetailDialog/eventPlanDialog/index.vue
  2. 42
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/event/EventDetailDialog/index.vue
  3. 305
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/plan/addAndEditDialog/index.vue
  4. 54
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/plan/formTable/index.vue

478
ruoyi-ui/src/views/JiHeExpressway/pages/control/event/event/EventDetailDialog/eventPlanDialog/index.vue

@ -0,0 +1,478 @@
<template>
<Dialog v-model="modelVisible" :title="title">
<div class="EventAddPlanDialog">
<ElForm :model="formData" inline :rules="rules" ref="ruleForm">
<div class="first">
<el-radio-group v-model="planName">
<el-radio-button label="名称1"></el-radio-button>
<el-radio-button label="名称2"></el-radio-button>
</el-radio-group>
</div>
<div class="second">
<el-row>
<el-col :span="2">
<div class="text">联动设备:</div>
</el-col>
<el-col :span="22">
<FormTable ref="secondFormTable" :tableData="secondFormData"></FormTable>
</el-col>
</el-row>
</div>
<div class="third">
<el-row>
<el-col :span="2">
<div class="text">恢复操作:</div>
</el-col>
<el-col :span="22">
<FormTable ref="thirdFormTable" :tableData="thirdFormData"></FormTable>
</el-col>
</el-row>
</div>
</ElForm>
</div>
<template #footer>
<Button style="padding:0 24px;" @click.native="handleSubmit" :loading="submitting">强制恢复</Button>
<Button style="padding:0 24px;" @click.native="handleSubmit" :loading="submitting">确认</Button>
<Button style="background: #C9C9C9;padding:0 24px;"
@click.native="modelVisible = false, submitting = false">取消</Button>
</template>
</Dialog>
</template>
<script>
import Dialog from "@screen/components/Dialog/index";
import FormTable from '../../../plan/formTable/index.vue';
import Button from '@screen/components/Buttons/Button.vue';
import request from '@/utils/request';
import { Message } from "element-ui";
import { throttle } from "lodash"
export default {
name: 'eventPlanDialog',
components: {
Dialog,
Button,
FormTable
},
model: {
prop: 'visible',
event: 'close'
},
provide() {
return {
loadData: throttle(this.loadData, 1000)
}
},
props: {
visible: Boolean,
detail: {
type: Object,
default: () => { }
}
},
data() {
return {
title: '事件确认',
dialogType: 1,
planId: 0,
submitting: false,
formData: {
eventCategory: 1,
eventType: 1,
triggerMechanism: 1
},
secondFormData: [{
deviceType: 1,
searchRule: 1,
qbb: ''
}],
thirdFormData: [{
deviceType: 1,
searchRule: 1,
qbb: ''
}],
planName: '',
deviceData: [],
eventOptions: [
{
value: 1,
label: '异常天气'
},
{
value: 2,
label: '交通事故'
},
{
value: 3,
label: '非法上路'
},
{
value: 4,
label: '车辆故障'
},
{
value: 5,
label: '交通拥堵'
},
{
value: 6,
label: '交通管制'
},
{
value: 7,
label: '服务区异常'
},
{
value: 8,
label: '施工建设'
},
{
value: 9,
label: '路障清除'
}
],
mechanismOptions: [{
value: 1,
label: '雨'
},
{
value: 2,
label: '雪'
},
{
value: 3,
label: '雾'
},
{
value: 4,
label: '大风'
},
{
value: 5,
label: '低温寒潮'
},
{
value: 6,
label: '路面积雪'
},
{
value: 7,
label: '路面结冰'
},
{
value: 8,
label: '路面积水'
},
{
value: 9,
label: '其他'
}],
conditionOptions: [
// {
// value: 1,
// label: '(>)'
// },
{
value: 1,
label: '小于(<)'
},
],
rules: {
planName: [
{ required: true, message: '请输入预案名称', trigger: 'blur' },
],
eventType: [
{ required: true, message: '请选择事件类型', trigger: 'change' }
],
}
}
},
mounted() {
},
computed: {
modelVisible: {
get() {
if (this.visible) {
}
return this.visible;
},
set(val) {
this.$emit('close', val)
}
},
},
methods: {
initData(id = 1) {
request({
url: `/business/plans/list/${id}`,
method: "get",
}).then((result) => {
if (result.code != 200) return Message.error(result?.msg);
let data = result.data;
let dcExecuteAction = result.data.dcExecuteAction;
this.planId = data.id;
this.formData = {
eventCategory: data.eventCategory,
planName: data.planName,
eventType: data.eventType,
triggerMechanism: data.triggerMechanism,
}
this.secondFormData = [];
this.thirdFormData = [];
dcExecuteAction.forEach(it => {
if (it.deviceList) {
it.deviceList = it.deviceList.split(',');
}
if (it.actionType == 1) {
this.secondFormData.push(it);
} else if (it.actionType == 2) {
this.thirdFormData.push(it);
}
})
}).catch((err) => {
console.log(err)
Message.error("查询事件预案列表失败", err);
})
},
async loadData() {
if (this.deviceData.length <= 0) {
let result = await request({
url: `business/device/query?deviceType=2`,
method: "get",
})
if (result.code != 200) return Message.error(result?.msg);
console.log('123');
this.deviceData = result.data;
// return result.data;
}
return this.deviceData;
},
changeEventType(value = 1) {
this.mechanismOptions = optionsMap[this.formData.eventCategory || 1][value];
},
changeRadio(value = 1) {
const optionsMap = {
1: [{
value: 1,
label: '异常天气'
},
{
value: 2,
label: '交通事故'
},
{
value: 3,
label: '非法上路'
},
{
value: 4,
label: '车辆故障'
},
{
value: 5,
label: '交通拥堵'
},
{
value: 6,
label: '交通管制'
},
{
value: 7,
label: '服务区异常'
},
{
value: 8,
label: '施工建设'
},
{
value: 9,
label: '路障清除'
}],
2: [{
value: 1,
label: '异常天气'
},
{
value: 2,
label: '拥堵'
},
{
value: 3,
label: '非机动车'
},
{
value: 4,
label: '行人'
},
{
value: 5,
label: '烟火'
},
{
value: 6,
label: '抛洒物'
},
{
value: 7,
label: '逆行'
},
]
}
this.eventOptions = optionsMap[value];
this.changeEventType();
},
handleChange() {
},
formatData(it, value = 1) {
let data = { ...it, actionType: value }
if (it.deviceList && typeof it.deviceList !== 'string' && it.deviceList.length > 0) {
data.deviceList = it.deviceList.join(',');
} else {
data.deviceList = '';
}
if (it.content) {
data.otherConfig = JSON.stringify({ content: it.content })
}
if (it.controlModel) {
let other = {
controlModel: it.controlModel,
state: it.state,
}
if (it.time && it?.time[0]) {
other = {
controlModel: it.controlModel,
state: it.state,
startTime: it.time[0],
endTime: it.time[1]
}
}
data.otherConfig = JSON.stringify(other)
}
if (it.gzms) {
data.otherConfig = JSON.stringify({
state: it.gzms,
operationDuration: it.operationDuration,
})
}
return data;
},
handleSubmit() {
this.$refs['ruleForm'].validate((valid) => {
if (valid) {
// this.submitting = false;
let secondFormTable = this.$refs['secondFormTable'].tableData || [];
let thirdFormTable = this.$refs['thirdFormTable'].tableData || [];
let dcArr = [];
secondFormTable.forEach(it => {
dcArr.push(this.formatData(it, 1));
})
thirdFormTable.forEach(it => {
dcArr.push(this.formatData(it, 2));
})
console.log({
...this.formData,
dcExecuteAction: dcArr
})
// return;
if (this.dialogType == 1) {//
request({
url: `/business/plans`,
method: "post",
data: {
...this.formData,
dcExecuteAction: dcArr
}
}).then((result) => {
if (result.code != 200) return Message.error(result?.msg);
Message.success("提交成功");
this.modelVisible = false;
}).catch(() => {
Message.error("提交失败");
}).finally(() => {
this.submitting = false;
this.$emit('reInitData', true);
})
} else if (this.dialogType == 2) {//
request({
url: `/business/plans`,
method: "put",
data: {
...this.formData,
id: this.planId,
dcExecuteAction: dcArr
}
}).then((result) => {
if (result.code != 200) return Message.error(result?.msg);
Message.success("提交成功");
this.modelVisible = false;
}).catch(() => {
Message.error("提交失败");
}).finally(() => {
this.submitting = false;
this.$emit('reInitData', true);
})
}
}
})
}
}
}
</script>
<style lang="scss" scoped>
.fade-enter-active,
.fade-leave-active {
transition: opacity .24s;
}
.fade-enter,
.fade-leave-to {
opacity: 0;
}
.EventAddPlanDialog {
gap: 9px;
width: 1080px;
height: 310px;
display: flex;
flex-direction: column;
.first,
.second,
.third {
padding: 5px 10px 8px;
background-color: #296887;
margin-bottom: 15px;
.text {
margin-top: 12px;
}
}
.form {
flex: 1;
overflow-y: auto;
}
.footer {
display: flex;
justify-content: end;
gap: 15px;
}
}
</style>

42
ruoyi-ui/src/views/JiHeExpressway/pages/control/event/event/EventDetailDialog/index.vue

@ -4,8 +4,10 @@
<Form :formList="formList" :dFormData="formData" label-width="100px" /> <Form :formList="formList" :dFormData="formData" label-width="100px" />
<div class="video-pic"> <div class="video-pic">
<Video style="height: 100%; width: 380px;" :showHeader="activeName != '-1'" :url="formData.videoList[0]" videoType="mp4"/> <Video style="height: 100%; width: 380px;" :showHeader="activeName != '-1'" :url="formData.videoList[0]"
<Video v-if="activeName != '-1'" style="height: 100%; width: 380px;" :url="formData.videoList[1]" videoType="mp4"/> videoType="mp4" />
<Video v-if="activeName != '-1'" style="height: 100%; width: 380px;" :url="formData.videoList[1]"
videoType="mp4" />
<Carousel v-else style="flex: 1" :pictures="formData.pictures" /> <Carousel v-else style="flex: 1" :pictures="formData.pictures" />
</div> </div>
@ -14,11 +16,16 @@
<TimeLine2 v-if="activeName == '1' || activeName == '2'" :data="timeLine2List" style="flex: 1;" /> <TimeLine2 v-if="activeName == '1' || activeName == '2'" :data="timeLine2List" style="flex: 1;" />
</div> </div>
<!-- 确认弹窗 -->
<EventPlanDialog :visible="isShowDialog" @close="onCloseAddNew" />
<template #footer> <template #footer>
<Button style="padding: 0 24px;" @click.native="onDelete">误报</Button> <Button style="padding: 0 24px;" @click.native="onDelete">误报</Button>
<Button :style="{ backgroundColor: '#C9C9C9', padding: '0 24px' }" @click.native="modelVisible = false">取消</Button> <Button :style="{ backgroundColor: '#C9C9C9', padding: '0 24px' }"
@click.native="modelVisible = false">取消</Button>
<Button v-if="activeName == '-1' || activeName == '0'" style="padding: 0 24px;" <Button v-if="activeName == '-1' || activeName == '0'" style="padding: 0 24px;"
@click.native="modelVisible = false">确认</Button> @click.native="onSubmit">确认</Button>
</template> </template>
</Dialog> </Dialog>
</template> </template>
@ -32,6 +39,7 @@ import { formList } from "./data"
// import { timeLine2List } from "@screen/pages/control/event/commandDispatch/Cards/DisposalProcess/data.js" // import { timeLine2List } from "@screen/pages/control/event/commandDispatch/Cards/DisposalProcess/data.js"
import Video from "@screen/components/Video"; import Video from "@screen/components/Video";
import Carousel from "./Carousel/index.vue" import Carousel from "./Carousel/index.vue"
import EventPlanDialog from "./eventPlanDialog/index.vue"
import Button from '@screen/components/Buttons/Button.vue'; import Button from '@screen/components/Buttons/Button.vue';
import request from "@/utils/request"; import request from "@/utils/request";
import { Message } from "element-ui"; import { Message } from "element-ui";
@ -46,7 +54,8 @@ export default {
TimeLine2, TimeLine2,
Video, Video,
Carousel, Carousel,
Button Button,
EventPlanDialog
}, },
model: { model: {
prop: 'visible', prop: 'visible',
@ -63,6 +72,7 @@ export default {
data() { data() {
return { return {
formList, formList,
isShowDialog: false,
timeLine1List: [{ timeLine1List: [{
time: "", time: "",
label: "", label: "",
@ -147,6 +157,9 @@ export default {
}) })
}, },
onCloseAddNew() {
this.isShowDialog = false;
},
onDelete() { onDelete() {
if (this.formData.id) { if (this.formData.id) {
this.$confirm('确定误报吗?', '提示', { this.$confirm('确定误报吗?', '提示', {
@ -171,6 +184,25 @@ export default {
} }
},
onSubmit() {
this.isShowDialog = true;
let url = '/business/plans/list/warning/type'
let data = {}
if (this.activeName == '-1') {
url = '/business/plans/list/warning/type'
} else {
url = '/business/plans/list/event/type'
}
request({
url: url,
method: "post",
data: this.formData
}).then(result => {
if (result.code != 200) return Message.error(result?.msg);
console.log('result', result)
})
} }
} }
} }

305
ruoyi-ui/src/views/JiHeExpressway/pages/control/event/plan/addAndEditDialog/index.vue

@ -20,18 +20,14 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item <el-form-item label="触发类型:" prop="triggerMechanism">
v-if="(formData.eventCategory == 1 && formData.eventType !== 8) || formData.eventCategory == 2"
label="触发类型:" prop="triggerMechanism">
<el-select <el-select v-model="formData.triggerMechanism" placeholder="请选择触发类型">
v-if="(formData.eventCategory == 1 && formData.eventType !== 6) || formData.eventCategory == 2"
v-model="formData.triggerMechanism" placeholder="请选择触发类型">
<el-option v-for="item in mechanismOptions" :key="item.value" :label="item.label" <el-option v-for="item in mechanismOptions" :key="item.value" :label="item.label"
:value="item.value"> :value="item.value">
</el-option> </el-option>
</el-select> </el-select>
<el-select v-if="formData.eventCategory == 1 && formData.eventType == 6" <!-- <el-select v-if="formData.eventCategory == 1 && formData.eventType == 6"
v-model="formData.triggerMechanism" placeholder="请选择触发类型"> v-model="formData.triggerMechanism" placeholder="请选择触发类型">
<el-option-group label="主线"> <el-option-group label="主线">
<el-option label="主线封闭" value="1"></el-option> <el-option label="主线封闭" value="1"></el-option>
@ -49,7 +45,7 @@
<el-option label="服务区封闭" value="7"></el-option> <el-option label="服务区封闭" value="7"></el-option>
<el-option label="服务区限行" value="8"></el-option> <el-option label="服务区限行" value="8"></el-option>
</el-option-group> </el-option-group>
</el-select> </el-select> -->
</el-form-item> </el-form-item>
</div> </div>
@ -98,162 +94,253 @@ const optionsMap = {
1: { 1: {
1: [ 1: [
{ {
value: 1, value: "1-1",
label: '雨' label: "追尾",
}, },
{ {
value: 2, value: "1-2",
label: '雪' label: "侧翻",
}, },
{ {
value: 3, value: "1-3",
label: '雾' label: "撞护栏",
}, },
{ {
value: 4, value: "1-4",
label: '大风' label: "自然",
}, },
{ {
value: 5, value: "1-5",
label: '低温寒潮' label: "其他事故",
}, },
],
2: [
{ {
value: 6, value: 1,
label: '路面积雪' label: '高速主线'
}, },
{ {
value: 7, value: 2,
label: '路面结冰' label: '服务区'
}, },
{ {
value: 8, value: 3,
label: '路面积水' label: '立交桥'
}, },
{ {
value: 9, value: 4,
label: '其他' label: '收费站'
} }
], ],
2: [ 3: [
{ {
value: 1, value: 1,
label: '侧翻' label: '主线关闭'
}, },
{ {
value: 2, value: 2,
label: '撞障碍物' label: '主线限行'
}, },
{ {
value: 3, value: 6,
label: '货物洒落' label: '收费站关闭'
}, },
{ {
value: 4, value: 7,
label: '撞护栏' label: '收费站限行'
}, },
{ {
value: 5, value: 10,
label: '自燃' label: '匝道立交关闭'
}, },
{ {
value: 6, value: 12,
label: '追尾' label: '匝道立交限行'
},
{
value: 14,
label: '服务区关闭'
} }
], ],
3: [ 4: [
{ {
value: 1, value: '4-1',
label: '道路拥堵'
},
{
value: '4-2',
label: '立交拥堵'
},
{
value: '4-3',
label: '收费站拥堵'
},
{
value: '4-4',
label: '收费站服务区拥堵'
}
],
5: [
{
value: '5-1',
label: '行人' label: '行人'
}, },
{ {
value: 2, value: '5-2',
label: '非机动车' label: '非机动车'
}, },
{ {
value: 3, value: '5-3',
label: '摩托车' label: '摩托车'
}, },
{ {
value: 4, value: '5-4',
label: '其他' label: '其他'
} }
], ],
4: [ 6: [
{ {
value: 1, value: '6-1',
label: '高速主线' label: '烟雾'
}, },
{ {
value: 2, value: '6-2',
label: '服务区' label: '倒伏树木'
}, },
{ {
value: 3, value: '6-3',
label: '立交桥' label: '撒落物'
}, },
{ {
value: 4, value: '6-4',
label: '收费站' label: '动物'
},
{
value: '6-5',
label: '其他'
} }
], ],
5: [ 7: [
{ {
value: 1, value: 1,
label: '道路拥堵' label: '道路养护施工'
}, },
{ {
value: 2, value: 2,
label: '立交拥堵' label: '收费站养护施工'
}, },
{ {
value: 3, value: 3,
label: '收费站拥堵' label: '服务区养护施工'
}, },
{ {
value: 4, value: 4,
label: '收费站服务区拥堵' label: '枢纽立交匝道养护施工'
},
{
value: 5,
label: '地方道路养护施工'
},
{
value: 6,
label: '道路工程建设施工'
},
{
value: 7,
label: '收费站工程建设施工'
},
{
value: 8,
label: '服务区工程建设施工'
},
{
value: 9,
label: '枢纽立交匝道工程建设施工'
},
{
value: 10,
label: '地方道路工程建设施工'
} }
], ],
6: [ 8: [
],
7: [
{ {
value: 1, value: '8-1',
label: '封闭、暂停营业' label: '封闭、暂停营业'
}, },
{ {
value: 2, value: '8-2',
label: '重要设施停用' label: '重要设施停用'
}, },
{ {
value: 3, value: '8-3',
label: '其他异常' label: '服务区其他异常'
} },
], ],
8: [],
9: [ 9: [
{ {
value: 1, value: 1,
label: '烟雾' label: '摄像机'
}, },
{ {
value: 2, value: 2,
label: '倒伏树木' label: '护栏'
}, },
{ {
value: 3, value: 3,
label: '洒落物' label: '隔离栅'
}, },
{ {
value: 4, value: 4,
label: '动物' label: '情报板'
}, },
{ {
value: 5, value: 5,
label: '防炫板'
},
{
value: 6,
label: '其他' label: '其他'
} }
] ],
10: [{
value: '10-1',
label: '雨'
},
{
value: '10-2',
label: '雪'
},
{
value: '10-3',
label: '雾'
},
{
value: '10-4',
label: '大风'
},
{
value: '10-5',
label: '低温寒潮'
}, {
value: '10-6',
label: '路面积雪'
},
{
value: '10-7',
label: '路面结冰'
},
{
value: '10-8',
label: '路面积水'
},
{
value: '10-9',
label: '其他'
}],
11: [{
value: 1,
label: '其他事件'
}]
}, },
2: { 2: {
1: [{ 1: [{
@ -302,7 +389,7 @@ export default {
formData: { formData: {
eventCategory: 1, eventCategory: 1,
eventType: 1, eventType: 1,
triggerMechanism: 1 triggerMechanism: '1-1'
}, },
secondFormData: [{ secondFormData: [{
deviceType: 1, deviceType: 1,
@ -318,87 +405,69 @@ export default {
eventOptions: [ eventOptions: [
{ {
value: 1, value: 1,
label: '异常天气' label: '交通事故'
}, },
{ {
value: 2, value: 2,
label: '交通事故' label: '车辆故障'
}, },
{ {
value: 3, value: 3,
label: '非法上路' label: '交通管制'
}, },
{ {
value: 4, value: 4,
label: '车辆故障' label: '交通拥堵'
}, },
{ {
value: 5, value: 5,
label: '交通拥堵' label: '非法上路'
}, },
{ {
value: 6, value: 6,
label: '交通管制' label: '路障清除'
}, },
{ {
value: 7, value: 7,
label: '服务区异常' label: '施工建设'
}, },
{ {
value: 8, value: 8,
label: '施工建设' label: '服务区异常'
}, },
{ {
value: 9, value: 9,
label: '路障清除' label: '设施设备隐患'
},
{
value: 10,
label: '异常天气'
},
{
value: 11,
label: '其他事件'
} }
], ],
mechanismOptions: [{ mechanismOptions: [{
value: 1, value: "1-1",
label: '雨' label: "追尾",
},
{
value: 2,
label: '雪'
},
{
value: 3,
label: '雾'
},
{
value: 4,
label: '大风'
},
{
value: 5,
label: '低温寒潮'
}, },
{ {
value: 6, value: "1-2",
label: '路面积雪' label: "侧翻",
}, },
{ {
value: 7, value: "1-3",
label: '路面结冰' label: "撞护栏",
}, },
{ {
value: 8, value: "1-4",
label: '路面积水' label: "自然",
}, },
{ {
value: 9, value: "1-5",
label: '其他' label: "其他事故",
}], }],
conditionOptions: [
// {
// value: 1,
// label: '(>)'
// },
{
value: 1,
label: '小于(<)'
},
],
rules: { rules: {
planName: [ planName: [
{ required: true, message: '请输入预案名称', trigger: 'blur' }, { required: true, message: '请输入预案名称', trigger: 'blur' },
@ -428,7 +497,7 @@ export default {
this.formData = { this.formData = {
eventCategory: 1, eventCategory: 1,
eventType: 1, eventType: 1,
triggerMechanism: 1 triggerMechanism: '1-1'
} }
this.secondFormData = [{ this.secondFormData = [{
deviceType: 1, deviceType: 1,

54
ruoyi-ui/src/views/JiHeExpressway/pages/control/event/plan/formTable/index.vue

@ -136,19 +136,59 @@ export default {
deviceOptions: [ deviceOptions: [
{ {
value: 1, value: 1,
label: '可变信息标志' label: '摄像机'
}, },
{ {
value: 2, value: 2,
label: '疲劳唤醒' label: '可变信息标志'
}, },
{ {
value: 3, value: 3,
label: '行车诱导' label: '气象监测器'
}, },
{ {
value: 4, value: 4,
label: '路段广播' label: '出口诱导灯'
},
{
value: 5,
label: '路段语音广播'
},
{
value: 6,
label: '护栏碰撞'
},
{
value: 7,
label: '毫米波雷达'
},
{
value: 8,
label: '合流区预警'
},
{
value: 9,
label: '智慧锥桶'
},
{
value: 10,
label: '激光疲劳唤醒'
},
{
value: 11,
label: '类交通量调查站'
},
{
value: 12,
label: '行车诱导'
},
{
value: 13,
label: '智能设备箱'
},
{
value: 14,
label: '光线在线监测'
} }
], ],
zyOptions: [ zyOptions: [
@ -162,6 +202,10 @@ export default {
}, },
{ {
value: 3, value: 3,
label: '事发下游最近'
},
{
value: 4,
label: '最近公里数' label: '最近公里数'
}, },
], ],
@ -231,7 +275,7 @@ export default {
} }
}, },
async created() { async created() {
let loadData = await this.loadData(); let loadData = await this.loadData();
// console.log('aa',loadData) // console.log('aa',loadData)
this.sbOptions = loadData; this.sbOptions = loadData;
}, },

Loading…
Cancel
Save