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" />
<div class="video-pic">
<Video style="height: 100%; width: 380px;" :showHeader="activeName != '-1'" :url="formData.videoList[0]" videoType="mp4"/>
<Video v-if="activeName != '-1'" style="height: 100%; width: 380px;" :url="formData.videoList[1]" videoType="mp4"/>
<Video style="height: 100%; width: 380px;" :showHeader="activeName != '-1'" :url="formData.videoList[0]"
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" />
</div>
@ -14,11 +16,16 @@
<TimeLine2 v-if="activeName == '1' || activeName == '2'" :data="timeLine2List" style="flex: 1;" />
</div>
<!-- 确认弹窗 -->
<EventPlanDialog :visible="isShowDialog" @close="onCloseAddNew" />
<template #footer>
<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;"
@click.native="modelVisible = false">确认</Button>
@click.native="onSubmit">确认</Button>
</template>
</Dialog>
</template>
@ -32,6 +39,7 @@ import { formList } from "./data"
// import { timeLine2List } from "@screen/pages/control/event/commandDispatch/Cards/DisposalProcess/data.js"
import Video from "@screen/components/Video";
import Carousel from "./Carousel/index.vue"
import EventPlanDialog from "./eventPlanDialog/index.vue"
import Button from '@screen/components/Buttons/Button.vue';
import request from "@/utils/request";
import { Message } from "element-ui";
@ -46,7 +54,8 @@ export default {
TimeLine2,
Video,
Carousel,
Button
Button,
EventPlanDialog
},
model: {
prop: 'visible',
@ -63,6 +72,7 @@ export default {
data() {
return {
formList,
isShowDialog: false,
timeLine1List: [{
time: "",
label: "",
@ -147,6 +157,9 @@ export default {
})
},
onCloseAddNew() {
this.isShowDialog = false;
},
onDelete() {
if (this.formData.id) {
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-form-item>
<el-form-item
v-if="(formData.eventCategory == 1 && formData.eventType !== 8) || formData.eventCategory == 2"
label="触发类型:" prop="triggerMechanism">
<el-form-item label="触发类型:" prop="triggerMechanism">
<el-select
v-if="(formData.eventCategory == 1 && formData.eventType !== 6) || formData.eventCategory == 2"
v-model="formData.triggerMechanism" placeholder="请选择触发类型">
<el-select v-model="formData.triggerMechanism" placeholder="请选择触发类型">
<el-option v-for="item in mechanismOptions" :key="item.value" :label="item.label"
:value="item.value">
</el-option>
</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="请选择触发类型">
<el-option-group label="主线">
<el-option label="主线封闭" value="1"></el-option>
@ -49,7 +45,7 @@
<el-option label="服务区封闭" value="7"></el-option>
<el-option label="服务区限行" value="8"></el-option>
</el-option-group>
</el-select>
</el-select> -->
</el-form-item>
</div>
@ -98,162 +94,253 @@ const optionsMap = {
1: {
1: [
{
value: 1,
label: '雨'
value: "1-1",
label: "追尾",
},
{
value: 2,
label: '雪'
value: "1-2",
label: "侧翻",
},
{
value: 3,
label: '雾'
value: "1-3",
label: "撞护栏",
},
{
value: 4,
label: '大风'
value: "1-4",
label: "自然",
},
{
value: 5,
label: '低温寒潮'
value: "1-5",
label: "其他事故",
},
],
2: [
{
value: 6,
label: '路面积雪'
value: 1,
label: '高速主线'
},
{
value: 7,
label: '路面结冰'
value: 2,
label: '服务区'
},
{
value: 8,
label: '路面积水'
value: 3,
label: '立交桥'
},
{
value: 9,
label: '其他'
value: 4,
label: '收费站'
}
],
2: [
3: [
{
value: 1,
label: '侧翻'
label: '主线关闭'
},
{
value: 2,
label: '撞障碍物'
label: '主线限行'
},
{
value: 3,
label: '货物洒落'
value: 6,
label: '收费站关闭'
},
{
value: 4,
label: '撞护栏'
value: 7,
label: '收费站限行'
},
{
value: 5,
label: '自燃'
value: 10,
label: '匝道立交关闭'
},
{
value: 6,
label: '追尾'
value: 12,
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: '行人'
},
{
value: 2,
value: '5-2',
label: '非机动车'
},
{
value: 3,
value: '5-3',
label: '摩托车'
},
{
value: 4,
value: '5-4',
label: '其他'
}
],
4: [
6: [
{
value: 1,
label: '高速主线'
value: '6-1',
label: '烟雾'
},
{
value: 2,
label: '服务区'
value: '6-2',
label: '倒伏树木'
},
{
value: 3,
label: '立交桥'
value: '6-3',
label: '撒落物'
},
{
value: 4,
label: '收费站'
value: '6-4',
label: '动物'
},
{
value: '6-5',
label: '其他'
}
],
5: [
7: [
{
value: 1,
label: '道路拥堵'
label: '道路养护施工'
},
{
value: 2,
label: '立交拥堵'
label: '收费站养护施工'
},
{
value: 3,
label: '收费站拥堵'
label: '服务区养护施工'
},
{
value: 4,
label: '收费站服务区拥堵'
label: '枢纽立交匝道养护施工'
},
{
value: 5,
label: '地方道路养护施工'
},
{
value: 6,
label: '道路工程建设施工'
},
{
value: 7,
label: '收费站工程建设施工'
},
{
value: 8,
label: '服务区工程建设施工'
},
{
value: 9,
label: '枢纽立交匝道工程建设施工'
},
{
value: 10,
label: '地方道路工程建设施工'
}
],
6: [
],
7: [
8: [
{
value: 1,
value: '8-1',
label: '封闭、暂停营业'
},
{
value: 2,
value: '8-2',
label: '重要设施停用'
},
{
value: 3,
label: '其他异常'
}
value: '8-3',
label: '服务区其他异常'
},
],
8: [],
9: [
{
value: 1,
label: '烟雾'
label: '摄像机'
},
{
value: 2,
label: '倒伏树木'
label: '护栏'
},
{
value: 3,
label: '洒落物'
label: '隔离栅'
},
{
value: 4,
label: '动物'
label: '情报板'
},
{
value: 5,
label: '防炫板'
},
{
value: 6,
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: {
1: [{
@ -302,7 +389,7 @@ export default {
formData: {
eventCategory: 1,
eventType: 1,
triggerMechanism: 1
triggerMechanism: '1-1'
},
secondFormData: [{
deviceType: 1,
@ -318,87 +405,69 @@ export default {
eventOptions: [
{
value: 1,
label: '异常天气'
label: '交通事故'
},
{
value: 2,
label: '交通事故'
label: '车辆故障'
},
{
value: 3,
label: '非法上路'
label: '交通管制'
},
{
value: 4,
label: '车辆故障'
label: '交通拥堵'
},
{
value: 5,
label: '交通拥堵'
label: '非法上路'
},
{
value: 6,
label: '交通管制'
label: '路障清除'
},
{
value: 7,
label: '服务区异常'
label: '施工建设'
},
{
value: 8,
label: '施工建设'
label: '服务区异常'
},
{
value: 9,
label: '路障清除'
label: '设施设备隐患'
},
{
value: 10,
label: '异常天气'
},
{
value: 11,
label: '其他事件'
}
],
mechanismOptions: [{
value: 1,
label: '雨'
},
{
value: 2,
label: '雪'
},
{
value: 3,
label: '雾'
},
{
value: 4,
label: '大风'
},
{
value: 5,
label: '低温寒潮'
value: "1-1",
label: "追尾",
},
{
value: 6,
label: '路面积雪'
value: "1-2",
label: "侧翻",
},
{
value: 7,
label: '路面结冰'
value: "1-3",
label: "撞护栏",
},
{
value: 8,
label: '路面积水'
value: "1-4",
label: "自然",
},
{
value: 9,
label: '其他'
value: "1-5",
label: "其他事故",
}],
conditionOptions: [
// {
// value: 1,
// label: '(>)'
// },
{
value: 1,
label: '小于(<)'
},
],
rules: {
planName: [
{ required: true, message: '请输入预案名称', trigger: 'blur' },
@ -428,7 +497,7 @@ export default {
this.formData = {
eventCategory: 1,
eventType: 1,
triggerMechanism: 1
triggerMechanism: '1-1'
}
this.secondFormData = [{
deviceType: 1,

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

@ -136,19 +136,59 @@ export default {
deviceOptions: [
{
value: 1,
label: '可变信息标志'
label: '摄像机'
},
{
value: 2,
label: '疲劳唤醒'
label: '可变信息标志'
},
{
value: 3,
label: '行车诱导'
label: '气象监测器'
},
{
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: [
@ -162,6 +202,10 @@ export default {
},
{
value: 3,
label: '事发下游最近'
},
{
value: 4,
label: '最近公里数'
},
],
@ -231,7 +275,7 @@ export default {
}
},
async created() {
let loadData = await this.loadData();
let loadData = await this.loadData();
// console.log('aa',loadData)
this.sbOptions = loadData;
},

Loading…
Cancel
Save