Browse Source

感知事件

wangqin
zhoule 1 year ago
parent
commit
2ff5adf925
  1. 14
      ruoyi-ui/src/views/JiHeExpressway/components/FormConfig/index.vue
  2. 12
      ruoyi-ui/src/views/JiHeExpressway/components/RoadStateCard/index.vue
  3. 2
      ruoyi-ui/src/views/JiHeExpressway/components/TimeLine/TimeLine1/index.vue
  4. 2
      ruoyi-ui/src/views/JiHeExpressway/components/TimeLine/TimeLine2/index.vue
  5. 66
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/event/EventDetailDialog/data.js
  6. 88
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/event/EventDetailDialog/index.vue
  7. 4
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/event/FormEvent/PresetFormItems.js
  8. 67
      ruoyi-ui/src/views/JiHeExpressway/pages/control/event/event/index.vue
  9. 1655
      ruoyi-ui/src/views/JiHeExpressway/pages/maintenanceOperations/statisticalAnalysis/index.vue

14
ruoyi-ui/src/views/JiHeExpressway/components/FormConfig/index.vue

@ -60,6 +60,10 @@ export default {
* options?: {} * options?: {}
* }[] * }[]
*/ */
dFormData: {
type: Object,
default: () => {}
},
formList: { formList: {
type: Array, type: Array,
default: () => [] default: () => []
@ -95,10 +99,12 @@ export default {
} }
}, },
}, },
// created() { created() {
// this.reset(true); this.reset(true);
// console.log("%c [ this.formData ]-82-index.vue", "font-size:15px; background:#9c7eed; color:#e0c2ff;", this.formData); if(this.dFormData) {
// }, this.modelFormData = this.dFormData;
}
},
computed: { computed: {
modelFormData: { modelFormData: {
get() { get() {

12
ruoyi-ui/src/views/JiHeExpressway/components/RoadStateCard/index.vue

@ -12,10 +12,10 @@
</p> </p>
</div> </div>
<div class="controls"> <div class="controls">
<Button :style="{ background: firstBtnColor }" @click.native="$emit('firstBtnClick', $event)">{{ <Button :style="{ background: firstBtnColor,width: '50%' }" @click.native="$emit('firstBtnClick', $event)">{{
firstBtnText firstBtnText
}}</Button> }}</Button>
<Button :style="{ background: lastBtnColor }" @click.native="$emit('lastBtnClick', $event)">{{ lastBtnText <Button v-if="cardData.state != 3" :style="{ background: lastBtnColor,width: '50%' }" @click.native="$emit('lastBtnClick', $event)">{{ lastBtnText
}}</Button> }}</Button>
</div> </div>
</div> </div>
@ -61,11 +61,11 @@ export default {
type: Array, type: Array,
default: () => ([ default: () => ([
{ {
key: "source", key: "stringEventSource",
label: "来源" label: "来源"
}, },
{ {
key: "location", key: "stakeMark",
label: "位置" label: "位置"
}, },
{ {
@ -73,7 +73,7 @@ export default {
label: "方向" label: "方向"
}, },
{ {
key: "time", key: "startTime",
label: "时间" label: "时间"
}, },
]) ])
@ -141,7 +141,7 @@ export default {
gap: 9px; gap: 9px;
>div { >div {
flex: 1; // flex: 1;
} }
} }
} }

2
ruoyi-ui/src/views/JiHeExpressway/components/TimeLine/TimeLine1/index.vue

@ -1,7 +1,7 @@
<template> <template>
<div :class='["TimeLine1", { "auto-size": autoSize }]' ref="TimeLine1Ref"> <div :class='["TimeLine1", { "auto-size": autoSize }]' ref="TimeLine1Ref">
<!-- 节点 --> <!-- 节点 -->
<div class="node" v-for="(item, index) in data" ref="nodeRefs"> <div class="node" v-for="(item, index) in data" :key="index" ref="nodeRefs">
<span class="top-label keep-ratio-bottom"> <span class="top-label keep-ratio-bottom">
<slot name="bottom-label" :data="item"> <slot name="bottom-label" :data="item">
{{ item.time }} {{ item.time }}

2
ruoyi-ui/src/views/JiHeExpressway/components/TimeLine/TimeLine2/index.vue

@ -1,6 +1,6 @@
<template> <template>
<div class='TimeLine2'> <div class='TimeLine2'>
<div class="node" v-for="(item, index) in data"> <div class="node" v-for="(item, index) in data" :key="index">
<div class="content" v-if="direction != 'right'"> <div class="content" v-if="direction != 'right'">
<!-- <template v-if="direction === 'auto' ? !!((index + 1) & 1) : true"> --> <!-- <template v-if="direction === 'auto' ? !!((index + 1) & 1) : true"> -->
<template v-if="getDirection(item, index, 'left')"> <template v-if="getDirection(item, index, 'left')">

66
ruoyi-ui/src/views/JiHeExpressway/pages/control/event/event/EventDetailDialog/data.js

@ -1,54 +1,94 @@
export const formList = [ export const formList = [
{ {
label: "事件源:", label: "事件源:",
key: "事件源", key: "stringEventSource",
type: "input", type: "input",
options: {
disabled: true,
placeholder: ''
}
}, },
{ {
label: "桩号:", label: "桩号:",
key: "桩号:", key: "stakeMark",
type: "input", type: "input",
options: {
disabled: true,
placeholder: ''
}
}, },
{ {
label: "行驶方向:", label: "行驶方向:",
key: "行驶方向", key: "direction",
type: "input", type: "input",
options: {
disabled: true,
placeholder: ''
}
}, },
{ {
label: "事件类型:", label: "事件类型:",
key: "事件类型", key: "stringEventType",
type: "input", type: "input",
options: {
disabled: true,
placeholder: ''
}
}, },
{ {
label: "事件原因:", label: "事件原因:",
key: "事件原因", key: "eventCause",
type: "input", type: "input",
options: {
disabled: true,
placeholder: ''
}
}, },
{ {
label: "事件状态:", label: "事件状态:",
key: "事件状态", key: "eventState",
type: "input", type: "input",
options: {
disabled: true,
placeholder: ''
}
}, },
{ {
label: "操作员:", label: "操作员:",
key: "操作员", key: "createBy",
type: "input", type: "input",
options: {
disabled: true,
placeholder: ''
}
}, },
{ {
label: "发生时间:", label: "发生时间:",
key: "发生时间", key: "startTime",
type: "input", type: "input",
options: {
disabled: true,
placeholder: ''
}
}, },
{ {
label: "完结时间:", label: "完结时间:",
key: "完结时间", key: "endTime",
type: "input", type: "input",
options: {
disabled: true,
placeholder: ''
}
}, },
{ {
label: "事件描述:", label: "事件描述:",
key: "事件描述", key: "direction",
type: "input", type: "input",
gridColumn: 3, gridColumn: 3,
options: {
disabled: true,
placeholder: ''
}
}, },
]; ];
@ -56,17 +96,17 @@ export const timeLine1List = [
{ {
time: "16.36", time: "16.36",
label: "接警记录", label: "接警记录",
isActive: true, isActive: false,
}, },
{ {
time: "16.36", time: "16.36",
label: "指令下达", label: "指令下达",
isActive: true, isActive: false,
}, },
{ {
time: "16.36", time: "16.36",
label: "清障到达", label: "清障到达",
isActive: true, isActive: false,
}, },
{ {
time: "", time: "",

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

@ -1,7 +1,7 @@
<template> <template>
<Dialog v-model="modelVisible" title="事件详情"> <Dialog v-model="modelVisible" title="事件详情">
<div class="EventDetail"> <div class="EventDetail">
<Form :formList="formList" /> <Form :formList="formList" :dFormData="formData" label-width="100px" />
<div class="video-pic"> <div class="video-pic">
<Video style="height: 100%;" /> <Video style="height: 100%;" />
@ -14,8 +14,8 @@
</div> </div>
<template #footer> <template #footer>
<Button style="padding: 0 24px;">确认</Button> <Button style="padding: 0 24px;" @click.native="modelVisible = false">确认</Button>
<Button :style="{ backgroundColor: '#C9C9C9', padding: '0 24px' }"> 取消</Button> <Button :style="{ backgroundColor: '#C9C9C9', padding: '0 24px' }" @click.native="modelVisible = false"> 取消</Button>
</template> </template>
</Dialog> </Dialog>
</template> </template>
@ -25,11 +25,13 @@ import Dialog from "@screen/components/Dialog/index";
import TimeLine1 from "@screen/components/TimeLine/TimeLine1/index"; import TimeLine1 from "@screen/components/TimeLine/TimeLine1/index";
import TimeLine2 from "@screen/components/TimeLine/TimeLine2/index"; import TimeLine2 from "@screen/components/TimeLine/TimeLine2/index";
import Form from '@screen/components/FormConfig'; import Form from '@screen/components/FormConfig';
import { formList, timeLine1List } from "./data" 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 Button from '@screen/components/Buttons/Button.vue'; import Button from '@screen/components/Buttons/Button.vue';
import request from "@/utils/request";
var moment = require("moment");
export default { export default {
name: 'EventDetail', name: 'EventDetail',
@ -47,24 +49,94 @@ export default {
event: 'update:value' event: 'update:value'
}, },
props: { props: {
visible: Boolean visible: Boolean,
formData: {
type: Object,
default: () => { }
}
}, },
data() { data() {
return { return {
formList, formList,
timeLine1List, timeLine1List: [{
timeLine2List, time: "",
label: "",
isActive: false,
}],
timeLine2List: [
{
time: "",
name: "",
desc: '',
posts: "",
direction: "left",
}
],
} }
}, },
computed: { computed: {
modelVisible: { modelVisible: {
get() { get() {
if (this.visible) {
this.getProcess();
}
return this.visible; return this.visible;
}, },
set(val) { set(val) {
this.$emit('update:value', val) this.$emit('update:value', val)
} }
} }
},
methods: {
getProcess() {
let directionFlg = true;
request({
url: `/system/process/list`,
method: "get",
params: { eventId: this.formData.id }
}).then(result => {
if (result.code != 200) return Message.error(result?.msg);
const rows = result.rows;
this.timeLine1List = [];
this.timeLine2List = [];
this.formData?.processConfigList.forEach(it => {
const process = rows.find(row => it.nodeNode == row.processId);
if (process) {
this.timeLine1List.push(
{
time: moment(process.operationTime || new Date()).format('HH:mm'),
label: it.processNode,
isActive: true,
}
);
this.timeLine2List.push({
time: moment(process.operationTime || new Date()).format('yyyy-MM-DD HH:mm:ss'),
name: process.operator,
desc: process.context,
posts: "",
direction: directionFlg ? 'left' : 'right',
})
directionFlg = !directionFlg;
} else {
this.timeLine1List.push(
{
time: "",
label: it.processNode,
isActive: false,
}
)
}
})
})
}
} }
} }
</script> </script>

4
ruoyi-ui/src/views/JiHeExpressway/pages/control/event/event/FormEvent/PresetFormItems.js

@ -179,6 +179,7 @@ export const startTime = {
isAlone: true, isAlone: true,
type: "datePicker", type: "datePicker",
options:{ options:{
type: "datetime",
format: 'yyyy-MM-dd HH:mm:ss', format: 'yyyy-MM-dd HH:mm:ss',
valueFormat: 'yyyy-MM-dd HH:mm:ss' valueFormat: 'yyyy-MM-dd HH:mm:ss'
} }
@ -190,6 +191,7 @@ export const expectedEndTime = {
isAlone: true, isAlone: true,
type: "datePicker", type: "datePicker",
options:{ options:{
type: "datetime",
format: 'yyyy-MM-dd HH:mm:ss', format: 'yyyy-MM-dd HH:mm:ss',
valueFormat: 'yyyy-MM-dd HH:mm:ss' valueFormat: 'yyyy-MM-dd HH:mm:ss'
} }
@ -716,6 +718,7 @@ export const eventHappenTime = {
required: true, required: true,
type: "datePicker", type: "datePicker",
options:{ options:{
type: "datetime",
format: 'yyyy-MM-dd HH:mm:ss', format: 'yyyy-MM-dd HH:mm:ss',
valueFormat: 'yyyy-MM-dd HH:mm:ss' valueFormat: 'yyyy-MM-dd HH:mm:ss'
} }
@ -726,6 +729,7 @@ export const aEstimatedReleaseTime = {
key: "estimatedEndTime", key: "estimatedEndTime",
type: "datePicker", type: "datePicker",
options:{ options:{
type: "datetime",
format: 'yyyy-MM-dd HH:mm:ss', format: 'yyyy-MM-dd HH:mm:ss',
valueFormat: 'yyyy-MM-dd HH:mm:ss' valueFormat: 'yyyy-MM-dd HH:mm:ss'
} }

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

@ -11,7 +11,7 @@
</template> </template>
新增 新增
</ButtonGradient> </ButtonGradient>
<ButtonGradient> <ButtonGradient @click="onExport">
<template #prefix> <template #prefix>
<img src="./images/export.svg" /> <img src="./images/export.svg" />
</template> </template>
@ -43,7 +43,7 @@
</div> </div>
<!-- "详情"弹出框 --> <!-- "详情"弹出框 -->
<EventDetailDialog :visible="eventDetailDialogVisible" @update:value="handleClose" /> <EventDetailDialog :visible="eventDetailDialogVisible" :formData="detailDialogFormData" @update:value="handleClose" />
<!-- "新增"弹出框 --> <!-- "新增"弹出框 -->
<FormEvent :visible="isShowAddNew" @close="onCloseAddNew" /> <FormEvent :visible="isShowAddNew" @close="onCloseAddNew" />
@ -115,7 +115,8 @@ export default {
pageSize: 12, pageSize: 12,
pageNum: 1, pageNum: 1,
eventState: null eventState: null
} },
detailDialogFormData: {}
} }
}, },
created() { created() {
@ -127,7 +128,7 @@ export default {
this.searchData.eventState = activeName == '-1' ? null : activeName; this.searchData.eventState = activeName == '-1' ? null : activeName;
// this.data = getMockData(); this.getData();
}, },
getStateCardBind(item) { getStateCardBind(item) {
const { state, textColor, text } = tabMap[this.activeName] const { state, textColor, text } = tabMap[this.activeName]
@ -162,24 +163,58 @@ export default {
onAddNew() { onAddNew() {
this.isShowAddNew = true; this.isShowAddNew = true;
}, },
onExport() {
let loadingInstance = Loading.service({ fullscreen: true, background: "#00000052", text: "文件正在下载..." });
request({
url: '/dc/system/event/export',
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
responseType: 'blob'
}).then((res) => {
console.log(res);
const url = window.URL.createObjectURL(new Blob([res]))
let link = document.createElement('a')
link.style.display = 'none'
link.href = url
link.setAttribute('download', '事件信息列表.xlsx')
document.body.appendChild(link)
link.click()
URL.revokeObjectURL(link.href) // URL
document.body.removeChild(link)
link = null
loadingInstance.close();
}).catch(err => {
Message.error(err);
loadingInstance.close();
})
},
onCloseAddNew() { onCloseAddNew() {
this.isShowAddNew = false; this.isShowAddNew = false;
}, },
firstBtnClick() { firstBtnClick(id) {
this.eventDetailDialogVisible = true console.log('id', id)
request({
url: `/dc/system/event/${id}`,
method: "get",
}).then(result => {
if (result.code != 200) return Message.error(result?.msg);
this.detailDialogFormData = result.data;
this.eventDetailDialogVisible = true
})
}, },
handleClose() { handleClose() {
this.eventDetailDialogVisible = false; this.eventDetailDialogVisible = false;
}, },
handleSearch(data) { handleSearch(data) {
console.log('data',data); console.log('data', data);
let daterange = data.daterange; let daterange = data.daterange;
let dStakeMark = data.stakeMark; let dStakeMark = data.stakeMark;
let dendStakeMark = data.endStakeMark; let dendStakeMark = data.endStakeMark;
let stakeMark = `K${dStakeMark[0]}+${dStakeMark[1]}` let stakeMark = `K${dStakeMark[0]}+${dStakeMark[1]}`
let endStakeMark = `K${dendStakeMark[0]}+${dendStakeMark[1]}` let endStakeMark = `K${dendStakeMark[0]}+${dendStakeMark[1]}`
this.searchData = { this.searchData = {
...this.searchData, ...this.searchData,
@ -192,7 +227,21 @@ export default {
} }
this.getData(); this.getData();
} },
resultMapping(type, value) {
const keyMap = {
'eventSource': {
1: '96659',
2: '交警转接',
3: '道路巡查',
4: '视频巡查',
5: '视频AI',
6: '一键救援',
7: '其他',
}
}
return keyMap[type][value];
},
} }
} }
</script> </script>

1655
ruoyi-ui/src/views/JiHeExpressway/pages/maintenanceOperations/statisticalAnalysis/index.vue

File diff suppressed because it is too large
Loading…
Cancel
Save