Browse Source

Merge branch 'develop' of http://39.106.31.193:9211/mengff/jihe-hs into develop

wangqin
zhangzhang 7 months ago
parent
commit
f578123fc3
  1. 2
      ruoyi-ui/src/App.vue
  2. 2
      ruoyi-ui/src/views/JiHeExpressway/components/TimeLine/TimeLine2/index.vue
  3. 6
      ruoyi-ui/src/views/JiHeExpressway/components/infoBoard/BoardInfoEditor.vue
  4. 13
      ruoyi-ui/src/views/JiHeExpressway/mixins/InfoBoard.js
  5. 2
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/TrafficIncidents/index.vue
  6. 74
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/HomeFrameControl/index.vue
  7. 105
      ruoyi-ui/src/views/JiHeExpressway/pages/control/device/strategy/components/AddNEditDialog.vue
  8. 63
      ruoyi-ui/src/views/JiHeExpressway/pages/control/device/strategy/components/TaskItem.vue
  9. 31
      ruoyi-ui/src/views/JiHeExpressway/pages/control/device/strategy/components/taskEditDialog.vue
  10. 26
      ruoyi-ui/src/views/JiHeExpressway/pages/control/device/strategy/components/timeEditDialog.vue
  11. 22
      ruoyi-ui/src/views/JiHeExpressway/pages/control/device/strategy/index.vue
  12. 55
      ruoyi-ui/src/views/JiHeExpressway/pages/datav/gisAndBim/index.vue
  13. 10
      ruoyi-ui/src/views/JiHeExpressway/pages/service/InformationReleaseManagement/Cards/AuditDetails/DetailCard.vue
  14. 38
      ruoyi-ui/src/views/JiHeExpressway/pages/service/InformationReleaseManagement/Cards/AuditDetails/index.vue
  15. 18
      ruoyi-ui/src/views/JiHeExpressway/pages/service/InformationReleaseManagement/Cards/AuditLists/ListItem.vue
  16. 48
      ruoyi-ui/src/views/JiHeExpressway/pages/service/InformationReleaseManagement/Cards/AuditLists/data.js
  17. 95
      ruoyi-ui/src/views/JiHeExpressway/pages/service/InformationReleaseManagement/Cards/AuditLists/index.vue
  18. 10
      ruoyi-ui/src/views/JiHeExpressway/pages/service/InformationReleaseManagement/index.vue
  19. 7
      ruoyi-ui/src/views/JiHeExpressway/utils/api/batch.js
  20. 2
      ruoyi-ui/vue.config.js

2
ruoyi-ui/src/App.vue

@ -9,7 +9,7 @@
<template>
<div id="app">
<router-view />
<!-- <websocket /> -->
<websocket />
<!-- <websocket_phone /> -->
</div>
</template>

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

@ -2,7 +2,7 @@
<div class="TimeLine2">
<!-- { "time": "2024/4/16 11:30:07", "name": "1", "desc": "111", "source": 1 } -->
<div class="node" v-for="(item, index) in data" :key="index">
<div class="content">
<div class="content" v-if="!item.onlyright">
<template v-if="item.source == 2">
<!-- <template v-if="direction === 'auto' ? !!((index + 1) & 1) : true"> -->
<span class="title" v-if="item.title">{{ item.title }}</span>

6
ruoyi-ui/src/views/JiHeExpressway/components/infoBoard/BoardInfoEditor.vue

@ -182,13 +182,10 @@ import {
getFontSizeByDevicePixel,
uploadBoardEditInfo,
} from "@/api/board/template";
import { devicessize } from "@/api/information/api.js";
import { checkIotBoardContent } from "@/api/board/vocabulary";
import BoardPreview from "@screen/components/infoBoard/BoardPreview.vue";
import BoardTplPreview from "@screen/components/infoBoard/BoardTplPreview.vue";
import infoBoardUtils from "@screen/utils/infoBoard.js";
import { checkBoardContent } from "@/api/board/board";
import { debounce } from "lodash";
export default {
data() {
return {
@ -303,8 +300,8 @@ export default {
textContent: "",
fontStyle: "0",
displayAreaWidth: "768",
playbackDuration: "50",
displayAreaHeight: "64",
playbackDuration: "50",
volume: "0",
xCoordinate: "0",
screenEntrySpeed: "1",
@ -483,7 +480,6 @@ export default {
this.mode
);
} else {
console.log(this.tpl , "tttttttttppplllll")
this.dataForm = infoBoardUtils.dialogSourceFormat(
this.tpl,
this.type,

13
ruoyi-ui/src/views/JiHeExpressway/mixins/InfoBoard.js

@ -45,13 +45,16 @@ export default {
};
},
// 发布信息
____publishInfo() {
____publishInfo() {
let deviceList = [];
if (this.isMultiControl && !this.selectItems.length) {
return Message.error("请至少选择一个设备!");
if (this.isMultiControl){
if (!this.selectItems.length) {
return Message.error("请至少选择一个设备!");
}
const selectItems = this.selectItems.map((item) => JSON.parse(item));
deviceList = selectItems;
}
const selectItems = this.selectItems.map((item) => JSON.parse(item));
if (this.isMultiControl) deviceList = selectItems;
else {
if (this.selectedDevice) deviceList = [this.selectedDevice];
else deviceList = this.selectedDevices;

2
ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/TrafficIncidents/index.vue

@ -11,7 +11,7 @@
<Button @click.native="handleEventRelieve" style="width: 100px;">
事件解除
</Button>
<Button @click.native="goStrategy" style="width: 100px;">
<Button @click.native="goDispatch" style="width: 100px;">
设备管控
</Button>
<Button @click.native="goDispatch" style="width: 100px;">

74
ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/HomeFrameControl/index.vue

@ -16,12 +16,12 @@
<span class="close" @click="() => { this.activeIcon = null; }">
<i class="el-icon-close" />
</span>
<div v-if="tabAction === '1'" style="width:70vw;">
<div v-if="tabAction === '1'" style="width:70vw; min-height: 500px;">
<Form v-model="data" labelWidth="90px" column="2" class="form" ref="FormConfigRef" :formList="formList" />
<component ref="ControlComponent" :is="componentMap[DeviceTopics[data.deviceType]]" :isMultiControl="true"
:visible="true" :selectItems="data.childType" @update:activeIcon="(val) => { this.activeIcon = val }"
@update:submitting="(val) => { submitting = val }"></component>
<div v-if="hiddenDevices.indexOf(componentMap[DeviceTopics[data.deviceType]]) == -1" class="footer">
<component ref="ControlComponent" :is="componentMap[DeviceTopics[data.deviceType]]" :isMultiControl="true"
:visible="true" :selectItems="data.childType" @update:activeIcon="(val) => { this.activeIcon = val }"
@update:submitting="(val) => { submitting = val }"></component>
<div v-if="hiddenDevices.indexOf(componentMap[DeviceTopics[data.deviceType]]) == -1" class="footer">
<Button @click.native="submitClick" :loading="submitting">
确认
</Button>
@ -53,9 +53,10 @@
<div v-if="tabAction === '3'" style="width:70vw;height: 500px;display: flex;flex-direction: column; justify-content: center;align-items: flex-start;" >
<Form v-model="dataRecord" style="width:100%;" labelWidth="90px" column="2" class="form" ref="FormRecordRef" :formList="formRecord" />
<Table :data="tableData" height="500px" style="margin: 20px;width:95%">
<ElTableColumn label="管控时间" prop="operTime" width="300"/>
<ElTableColumn label="管控方式" prop="operType" width="200"/>
<ElTableColumn label="操作人" prop="operName" width="200"/>
<ElTableColumn label="管控时间" prop="operTime" width="200"/>
<ElTableColumn label="设备名称" prop="dcDeviceName" width="300"/>
<ElTableColumn label="管控方式" prop="operType" width="100"/>
<ElTableColumn label="操作人" prop="operName" width="100"/>
<ElTableColumn label="执行结果" prop="stakeMark" >
<template slot-scope="scope">
<el-popover
@ -71,7 +72,7 @@
<!-- 分页 -->
<div class="footer" style="margin-top:-20px;margin-bottom: 30px">
<ElPagination @current-change="bindResult" @size-change="onSizeChange" width="'100%'" :page-sizes="[10, 20, 30, 40, 50]"
<ElPagination @current-change="bindRecord" @size-change="onSizeChange" width="'100%'" :page-sizes="[10, 20, 30, 40, 50]"
:page-size="searchData.pageSize" :current-page.sync="searchData.pageNum" layout="total, sizes, prev, pager, next"
:total="tableTotal" class="Pagination">
</ElPagination>
@ -191,8 +192,8 @@ export default {
type: "select",
options: {
options: [
{ key: "1", label: "济南方向" },
{ key: "3", label: "菏泽方向" },
{ key: "1", label: "菏泽方向" },
{ key: "3", label: "济南方向" },
{ key: "2", label: "双向" },
],
},
@ -310,6 +311,7 @@ export default {
key: "childType",
type: "select",
isAlone: true,
width: '100%',
options: {
clearable: true,
options: [],
@ -362,11 +364,11 @@ export default {
type: "select",
options: {
options: [
{ key: "0", label: "手动控制" },
{ key: "1", label: "定时控制" },
{ key: "2", label: "批量控制" },
{ key: "3", label: "预案控制" }
],
{ key: "0", label: "手动控制" },
{ key: "1", label: "定时控制" },
{ key: "2", label: "批量控制" },
{ key: "3", label: "预案控制" }
],
},
},
{
@ -375,7 +377,7 @@ export default {
required: false,
type: "datePicker",
options: {
style: "width: auto",
style: "width: 96%",
type: "datetimerange",
format: "yyyy-MM-dd HH:mm:ss",
valueFormat: "yyyy-MM-dd HH:mm:ss",
@ -423,21 +425,10 @@ export default {
},
tabClick() {
if(this.tabAction === '2'){
request({
url: `/business/dcBatchFunctionsJobGroup/list`,
method: "get",
params: {},
})
.then((result) => {
if (result.code != 200) return;
this.tableTotal = result.total;
this.data = result.rows;
})
.finally(() => {
});
this.bindTimeing();
} else if(this.tabAction === '3'){
this.dataRecord.operTime = [moment().startOf('month').format('YYYY-MM-DD 00:00:00'),moment().endOf('month').format('YYYY-MM-DD 23:59:59'),]
this.bindResult();
this.bindRecord();
}
},
handleClick(type) {
@ -466,11 +457,21 @@ export default {
Message.success(`操作成功!`);
})
},
bindResult(){
// dataRecord:{
// operType: "0",
// operTime:['2024-04-01 00:00:00','2024-04-25 23:59:59']
// },
bindTimeing(){
request({
url: `/business/dcBatchFunctionsJobGroup/list`,
method: "get",
params: {},
})
.then((result) => {
if (result.code != 200) return;
this.tableTotal = result.total;
this.data = result.rows;
})
.finally(() => {
});
},
bindRecord(){
request({
url: `/business/dcOperLog/list`,
method: "get",
@ -482,6 +483,7 @@ export default {
e.operTime = moment(e.operTime).format('YYYY-MM-DD HH:mm:ss')
e.operType = _.find(this.Enum_ControlType,{key:e.operType}).label
});
console.log(result.rows)
this.tableData = result.rows;
this.tableTotal = result.total;
})
@ -492,7 +494,7 @@ export default {
this.tableData = [];
this.searchData.pageSize = pageSize;
this.searchData.pageNum = 1;
this.bindResult();
this.bindRecord();
},
showResult(res){
this.digResultVisible = true

105
ruoyi-ui/src/views/JiHeExpressway/pages/control/device/strategy/components/AddNEditDialog.vue

@ -1,6 +1,5 @@
<template>
<Dialog v-model="modelVisible" :title="propData ? '修改' : '新增'" width="1400px">
{{ editData }}
<div class="AddNEditDialog">
<!-- <Form :value="propData" class="form" ref="basicInfoForm" :formList="formList" column="1" labelWidth="80px" /> -->
<el-form ref="basicInfoForm" :model="editData" label-width="80px" :rules="groupBasicRules">
@ -25,22 +24,27 @@
<div class="fl-around task_op">
<el-button size="mini" type="primary" @click="onAddTaskGroup">新增任务组</el-button>
</div>
<div class="task" v-for="taskGroup,index in taskGroupsEditing">
<div class="fl-around task_info">
<el-input v-model="taskGroup.time" style="width: 180px;"></el-input>
<div class="fl-around task_op">
<el-button size="mini" type="primary" @click="onAddTaskItem(taskGroup)">新增子任务</el-button>
<el-button size="mini" type="primary">删除</el-button>
<div class="all_groups">
<div class="task_group" v-for="taskGroup,index in taskGroupsEditing">
<div class="fl-around task_info">
<div class="time_show">
<el-input placeholder="请输入内容" v-model="taskGroup.time" style="width: 180px;" disabled>
</el-input>
<i class="icon el-icon-edit-outline" @click='onModifyTime(taskGroup)'></i>
</div>
<div class="fl-around task_op">
<el-button size="mini" type="primary" @click="onAddTaskItem(taskGroup)">新增子任务</el-button>
<el-button size="mini" type="danger" @click="onDeleteTaskGroup(taskGroup)">删除任务组</el-button>
</div>
</div>
<div>
<TaskItem v-for="item, index1 in taskGroup.tasksEdit" :propData="item" :groupId="propData.id"
:time="taskGroup.time" @onSubmit="onSubmitTaskItem">
</TaskItem>
</div>
</div>
<div>
<!--
<p v-for="item, index1 in taskGroup.tasksEdit">
{{ item.jobId }}</p> -->
<TaskItem v-for="item, index1 in taskGroup.tasksEdit" :propData="item" :groupId="propData.id"
:time="taskGroup.time" @onModify="newV=>onModifyItem(newV, item)">
</TaskItem>
</div>
</div>
</template>
</div>
@ -52,7 +56,7 @@
<taskEditDialog v-model="isEditing" :groupId="propData.id" :time="selectedTaskGroup.time" :propData="{}"
@onSubmit="onSubmitTaskItem" />
<timeEditDialog v-model="isShowTimeEdit" @onSubmit="onSubmitTime" />
<timeEditDialog v-model="isShowTimeEdit" :propData="editingTime" @onSubmit="onSubmitTime" />
</Dialog>
</template>
@ -99,6 +103,7 @@ export default {
// }
};
return {
editingTime:"",
editData:{},
mode:"",
isEditing:false,
@ -156,18 +161,61 @@ export default {
},
methods: {
onSubmitTaskItem(){
this.getTaskList(); //task
this.isEditing = false;
request({
url: `/business/dcBatchFunctionsJobGroup/${this.propData.id}`,
method: "GET"
}).then(res=>{
this.editData = {
id: res.data.id,
groupName: res.data.groupName,
status: res.data.status,
remark: res.data.remark,
detailedConfiguration: res.data.detailedConfiguration
}
this.getTaskList(); //task
});
},
onAddTaskGroup(){
this.isShowTimeEdit = true;
},
onModifyTime(taskG){
this.editingTime = taskG.time;
this.selectedTaskGroup = taskG;
this.isShowTimeEdit = true;
},
onDeleteTaskGroup(taskG){
request({
url: `/business/dcBatchFunctionsJob/time/${this.propData.id}/${taskG.time}`,
method: "DELETE"
}).then(res => {
request({
url: `/business/dcBatchFunctionsJobGroup/${this.propData.id}`,
method: "GET"
}).then(res => {
this.editData = {
id: res.data.id,
groupName: res.data.groupName,
status: res.data.status,
remark: res.data.remark,
detailedConfiguration: res.data.detailedConfiguration
}
this.getTaskList(); //task
});
});
},
onSubmitTime(time){
this.isShowTimeEdit = false;
this.taskGroupsEditing.push({ time, tasks: [] });
if (this.selectedTaskGroup){
this.selectedTaskGroup.time = time;
}else{
this.taskGroupsEditing.push({ time, tasks: [] });
}
let detailedConfiguration =[];
this.taskGroupsEditing.forEach(item=>{
detailedConfiguration.push({time:item.time, tasks:_.map(item.tasksEdit, "id")});
detailedConfiguration.push({time:item.time, tasks:_.map(item.tasksEdit, "jobId")});
});
request({
url: `/business/dcBatchFunctionsJobGroup`,
@ -179,6 +227,7 @@ export default {
})
.then((result) => {
if (result.code != 200) return;
Message.success(`提交成功!`);
})
},
@ -186,10 +235,6 @@ export default {
this.selectedTaskGroup = taskG;
this.isEditing = true;
},
onModifyItem(newV , oldV){
console.log(newV, oldV , "修改条目》》》")
// oldV.devices
},
initEditingData(){
if(this.propData?.id){
this.mode = "edit"
@ -212,7 +257,7 @@ export default {
},
getTaskList(){
this.taskGroupsEditing = JSON.parse(this.propData.detailedConfiguration);
this.taskGroupsEditing = JSON.parse(this.editData.detailedConfiguration);
// this.taskGroupsEditing = [{time:"08:00:00",tasks:[1],tasksEdit:[]}];
//
@ -312,9 +357,17 @@ export default {
font-size: 12px;
}
}
.task{
border: 1px solid #FFF;
.all_groups{
max-height:500px;
overflow-y: scroll;
}
.task_group{
border: 1px solid #09B;
.task_info{
padding:10px 0; background: #005070;
.time_show{
color: #0AC;
}
}
.task_op{
}

63
ruoyi-ui/src/views/JiHeExpressway/pages/control/device/strategy/components/TaskItem.vue

@ -1,21 +1,21 @@
<template>
<div class="task_editor_box" v-if="isCompReady">
<el-form>
<div class="flex" style="justify-content: space-between;">
<div>
设备类型:
<span v-if="editData.deviceType">{{ deviceTypeDic[editData.deviceType].label }}</span>
</div>
<div>
设备:
<template v-if="editData.devices">
<span v-for="item,index in editData.devices">
{{ deviceDic[item.id].deviceName }}
</span>{{ editData.devices.length }}
</template>
</div>
<div class="flex main_ctt">
<div class="device_type">
设备类型:
<span v-if="editData.deviceType">{{ deviceTypeDic[editData.deviceType].label }}</span>
</div>
<div class="devices">
<template v-if="editData.devices">
<span v-for="item,index in editData.devices" v-if="index<5" class="title">
{{ deviceDic[item.id].deviceName }}
</span>
<span v-if="editData.devices.length >= 6" class="other">{{ editData.devices.length }}个设备</span>
</template>
</div>
<div class="content">
<template v-if="editData.deviceType=='2'">
<BoardRecordPreview :tpl="editData.params" style=" width:300px; height: 100%;">
<BoardRecordPreview :tpl="editData.params" class="board">
</BoardRecordPreview>
</template>
<template v-if="editData.deviceType == '5'">
@ -31,12 +31,12 @@
</template>
<el-form-item>
<el-button size="mini" type="primary" @click="onModify">修改</el-button>
<el-button size="mini" type="danger" @click="onDelete">删除</el-button>
</el-form-item>
</div>
</el-form>
<div class="button">
<el-button size="mini" type="primary" @click="onModify">修改</el-button>
<el-button size="mini" type="danger" @click="onDelete">删除</el-button>
</div>
</div>
<taskEditDialog v-model="isEditingTask" :groupId="groupId" :time="time" :deviceDic="deviceDic"
:deviceList="deviceList" :propData="editData" @onSubmit="onSubmit" />
@ -79,13 +79,14 @@ export default {
},
mounted() {
this.deviceTypeDic = deviceTypeDic;
this.isCompReady = true;
console.log(JSON.parse(this.propData.callParameter || '[{}]')[0], "++++=====######");
this.initBasicData().then(res=>{
let temp = JSON.parse(this.propData.callParameter || '[{}]')[0]; //callParameter
//BoardRecordPreview
if(temp.functions){
temp.functions[1].params.CONTENT = temp.functions[1].params.CONTENT.replaceAll(/\\n/g, '\\\\n').replaceAll(/=/g, '\\=').replaceAll(/,/g, '\\,').replaceAll(/&nbsp/g, ' ');
// temp.functions[1].params.CONTENT = temp.functions[1].params.CONTENT.replaceAll(/\\n/g, '\\\\n').replaceAll(/=/g, '\\=').replaceAll(/,/g, '\\,').replaceAll(/&nbsp/g, ' ');
this.editData = {
id: this.propData.jobId,
direction: temp.direction,
@ -105,7 +106,7 @@ export default {
this.isEditingTask = true;
},
onSubmit(para){
this.emit("onSubmit");
this.$emit("onSubmit");
this.isEditingTask = false;
// let devices = _.filter(this.deviceOptions, item=>{
// this.editData.devices.includes(item.id);
@ -123,7 +124,8 @@ export default {
})
.then((result) => {
if (result.code != 200) return;
Message.success("删除成功");
this.$message.success("删除成功");
this.$emit("onSubmit");
})
},
initBasicData(){
@ -144,6 +146,17 @@ export default {
<style lang="scss" scoped>
.task_editor_box{
.main_ctt{ align-items: stretch; border-top:1px dashed #0AC; padding: 6px 0; max-height: 80px;
.device_type{ width: 200px; display: flex; flex-direction: row; align-items: center; }
.devices{ flex: 1; display: flex; flex-wrap: wrap; align-items: flex-start;
span{ font-size:14px; margin:0 4px 3px 0; border-radius: 3px; white-space: nowrap; word-break: break-all; float: left;}
.title{border: 1px solid #0AC; padding: 2px 8px;}
.other{padding: 3px 8px;}
}
.content{ width: 300px; display: flex; align-items: stretch;
.board{ flex: 1; }
}
.button{ width:140px; margin-left: 10px}
}
}
</style>

31
ruoyi-ui/src/views/JiHeExpressway/pages/control/device/strategy/components/taskEditDialog.vue

@ -121,7 +121,7 @@ import { getDeviceList } from "@screen/utils/api/device.js"
import BoardPreview from "@screen/components/infoBoard/BoardPreview.vue";
import BoardInfoEditor from "@screen/components/infoBoard/BoardInfoEditor";
import BoardUtils from "@screen/utils/infoBoard.js"
import { addTaskRequest } from "@screen/utils/api/batch.js"
import { submitTaskRequest } from "@screen/utils/api/batch.js"
export default {
name: "taskEditDialog",
components: {
@ -206,15 +206,27 @@ export default {
// { "STAY": 90, "ACTION": "1", "SPEED": "0", "COLOR": "ffff00", "FONT": "3", "FONT_SIZE": "24", "CONTENT": "\\\\n", "width": "160", "height": "80", "formatStyle": "2" }
this.editData.type2 = BoardUtils.contentToDeviceItem(this.propData.params);
}else{
this.searchData.deviceType = "";
this.searchData.direction = "";
this.filterData.screenSize = "";
this.editData.devices = [];
this.editData.type2 = {};
}
},
onEditBoard(){
let arr = this.filterData.screenSize.split("*");
console.log(arr, "传入的尺寸")
this.editDialog = {
visible: true,
mode: this.mode,
type: "device",
tpl:this.editData.type2
tpl: {
...this.editData.type2,
origin:{
displayAreaWidth: arr[0],
displayAreaHeight: arr[1]
}
}
// {
// "residenceTime": "90",
// "intonation": "0",
@ -250,6 +262,7 @@ export default {
};
},
____onEditSubmit(data){
this.editDialog.visible = false;
this.editData.type2 = data.data;
},
@ -276,11 +289,9 @@ export default {
if(this.mode == "add"){
}
alert(111)
addTaskRequest(this.groupId, this.time, devices, params, { deviceType: this.searchData.deviceType, screenSize: this.filterData.screenSize }).then(res=>{
console.log(res)
submitTaskRequest(this.propData.id, this.groupId, this.time, devices, params, { deviceType: this.searchData.deviceType, screenSize: this.filterData.screenSize }).then(res=>{
this.$emit("onSubmit")
});
this.$emit("onSubmit")
},
processParams(){
if(this.searchData.deviceType == "2"){
@ -322,8 +333,10 @@ export default {
this.editData.devices = [];
let arr = this.filterData.screenSize.split("*");
this.editData.type2 = {
displayAreaWidth: +arr[0],
displayAreaHeight: +arr[1]
origin:{
displayAreaWidth: +arr[0],
displayAreaHeight: +arr[1]
}
};
}
}

26
ruoyi-ui/src/views/JiHeExpressway/pages/control/device/strategy/components/timeEditDialog.vue

@ -1,24 +1,12 @@
<template>
<Dialog v-model="modelVisible" title="修改" width="400px" label-width="120px">
<el-form>
<el-form-item label="触发时间">
<el-col :span="4">
<el-form-item label="时">
<el-input v-model="editData.hour"></el-input>
</el-col>
<el-col :span="1">
:
</el-col>
<el-col :span="4">
</el-form-item>
<el-form-item label="钟">
<el-input v-model="editData.minute"></el-input>
</el-col>
<el-col :span="1">
:
</el-col>
<el-col :span="4">
<el-input v-model="editData.second"></el-input>
</el-col>
</el-form-item>
<el-form-item>
<el-button size="mini" type="primary" @click="onSubmit">保存</el-button>
</el-form-item>
@ -39,14 +27,13 @@ export default {
},
props: {
visible: Boolean,
propData: Object
propData: String
},
data() {
return {
editData:{
hour:"",
minute:"",
second:""
minute:""
}
};
},
@ -73,14 +60,13 @@ export default {
},
methods: {
onSubmit(){
let time = [this.editData.hour.trim(), this.editData.minute.trim(), this.editData.second.trim()].join(":");
let time = [this.editData.hour.trim(), this.editData.minute.trim(), "00"].join(":");
this.$emit("onSubmit", time)
},
transformData(){
let arr = this.propData.split(":");
this.editData.hour = arr[0];
this.editData.minute = arr[1];
this.editData.second = arr[2];
}
}
};

22
ruoyi-ui/src/views/JiHeExpressway/pages/control/device/strategy/index.vue

@ -9,12 +9,12 @@
</template>
新增
</ButtonGradient>
<ButtonGradient @click.native="handleExport">
<!-- <ButtonGradient @click.native="handleExport">
<template #prefix>
<img src="@screen/images/export.svg" />
</template>
导出
</ButtonGradient>
</ButtonGradient> -->
<ButtonGradient @click.native="onReset">
<template #prefix>
<img src="@screen/images/refresh.svg" />
@ -23,7 +23,7 @@
</ButtonGradient>
</div>
<InputSearch style="width: 402px" type="input" params="word" :disable="true" placeholder="请输入敏感词,回车搜索"
<InputSearch style="width: 402px" type="input" params="word" :disable="true" placeholder="请输入关键词,回车搜索"
@handleSearch="handleSearch" ref="form" />
</div>
@ -151,7 +151,7 @@ export default {
},
getSearchData() {
let params = {
word: this.searchData?.word,
groupName: this.searchData?.word,
pageSize: this.pageSize,
pageNum: this.currentPage,
};
@ -182,13 +182,13 @@ export default {
this.isShowDialog = true;
this.dialogData = data||{};
},
handleExport() {
exportFile({
url: "/business/dcInfoBoardVocabulary/export",
filename: "情报板敏感词",
data: this.getSearchData(),
});
},
// handleExport() {
// exportFile({
// url: "/business/dcInfoBoardVocabulary/export",
// filename: "",
// data: this.getSearchData(),
// });
// },
handleSearch(data) {
this.searchData = data;
this.getData();

55
ruoyi-ui/src/views/JiHeExpressway/pages/datav/gisAndBim/index.vue

@ -1,4 +1,4 @@
<template>
<!-- <template>
<div>
<img class="img" src="@screen/images/digital/gisAndBim.jpg" />
</div>
@ -11,4 +11,57 @@
height: 1030px;
width: 1920px;
}
</style> -->
<template>
<div class='comp_box'>
<iframe class="iframe" :src="alarmUrl" frameborder="0"></iframe>
</div>
</template>
<script>
import { getConfigKey } from "@/api/system/config.js";
export default {
name: 'InDevelopment',
components: {
},
props: {
text: {
type: String,
default: "暂无数据"
},
alarmUrl: {
type: String,
default: "",
}
},
mounted() {
this.alarmUrl = "http://10.0.86.37:81/?HoveringMouse=true&LightMode=false";
// getConfigKey("dc.alarmUrl").then((res) => {
// this.alarmUrl = res.msg
// });
}
}
</script>
<style lang='scss' scoped>
.comp_box {
// padding-top:160px;
width: 100%;
height: 100%;
color: #8A9EAA;
display: flex;
justify-content: center;
align-items: center;
position: relative;
.iframe {
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
}
}
</style>

10
ruoyi-ui/src/views/JiHeExpressway/pages/service/InformationReleaseManagement/Cards/AuditDetails/DetailCard.vue

@ -16,17 +16,17 @@
<div class="content">
{{ data.desc }}
</div>
<div class="people">
<!-- <div class="people">
<img src="@screen/images/people.svg" alt="">
<span>发布对象: 甘易玫</span>
</div>
</div> -->
<div class="people">
<img src="@screen/images/people.svg" alt="">
<span>当前管制: 甘易玫</span>
<span>当前管制: {{data.posts}}</span>
</div>
<div class="suffix remark">
<!-- <div class="suffix remark">
备注:
</div>
</div> -->
<div class="suffix share-with">
分享至
<img v-for="item in shareWithData" :key="item" :src="require(`@screen/images/shareWith/${item}.svg`)">

38
ruoyi-ui/src/views/JiHeExpressway/pages/service/InformationReleaseManagement/Cards/AuditDetails/index.vue

@ -1,5 +1,5 @@
<template>
<Card2 class='AuditDetails' title="审核详情">
<Card2 class='AuditDetails' title="详情">
<TimeLine2 :data="timeLine2List" style="flex: 1;" direction="right">
<template #content="{ data }">
<DetailCard :data="data" />
@ -12,6 +12,7 @@
import Card2 from "@screen/components/Card2/Card.vue";
import TimeLine2 from "@screen/components/TimeLine/TimeLine2/index";
import DetailCard from "./DetailCard.vue"
import request from '@/utils/request'
export default {
name: 'AuditDetails',
@ -22,14 +23,33 @@ export default {
},
data() {
return {
timeLine2List: Array.from({ length: 6 }).map(() => ({
time: "2023-12-21 16:35:44",
name: "甘易玫",
descTitle: "事件详情",
desc: "因改扩建施工,接交警通知,G3京台高速崮山(辅)、泰安西站双向入口临时关闭,万德站北京方向入口临时关闭,崮山(主)站北京方向出口临时关闭;济南崮山服务区(台北方向)入口临时关闭。泰安服务区(北京方向)入口临时关闭。泰山枢纽(G22青兰高速兰州方向转G3京台高速北京方向匝道、G22青兰高速青岛方向转G3京台高速北京方向匝道)临时关闭。",
posts: '淄博发展公司管理员',
state: 0,
})),
timeLine2List: [],
}
},
methods:{
bind(id){
request({
url: '/business/manage/listEvent?eventId='+id,
method: 'get'
}).then(res=>{
console.log(id, res)
let list = []
res.data.forEach(e => {
list.push({
source: "1",
onlyright:true,
time: e.eventTime,
name: e.createBy,
descTitle: "事件详情",
desc: e.contentDetails,
posts: e.facilityName,
channel:e.publishChannels,
state: 0,
})
});
this.timeLine2List = list;
})
}
}
}

18
ruoyi-ui/src/views/JiHeExpressway/pages/service/InformationReleaseManagement/Cards/AuditLists/ListItem.vue

@ -1,7 +1,7 @@
<template>
<div class='ListItem'>
<img class="prefix" :src="require(`@screen/images/ListItem/${eventTypeIcon[data.type]}.svg`)" />
<div class="center">
<div class='ListItem' v-on="$listeners">
<img class="prefix keep-ratio" :src="require(`@screen/images/ListItem/${data.icon}.svg`)" />
<div class="center keep-ratio">
<div class="header">
<span class="title">{{ data.title || '-' }}</span>
<span class="state" :style="{ backgroundColor: state[data.isverify].color }">{{ state[data.isverify].text
@ -9,7 +9,7 @@
</div>
<div class="content">{{ data.content || '-' }}</div>
</div>
<img class="suffix" :src="require(`@screen/images/ListItem/${state[data.isverify].icon}.svg`)" />
<!-- <img class="suffix keep-ratio" :src="require(`@screen/images/ListItem/${state[data.isverify].icon}.svg`)" /> -->
</div>
</template>
@ -27,25 +27,21 @@ export default {
},
data() {
return {
eventTypeIcon: {
0: 'AbnormalWeather',
1: 'TrafficControl',
},
state: {
0: {
color: "#00B1A0",
text: "待审核",
text: "待确认",
icon: 'ToBeReviewed'
},
1: {
color: "#057DD3",
text: "已审核",
text: "处理中",
icon: 'Reviewed'
},
2: {
color: "#C55253",
text: "未通过",
text: "已完成",
icon: 'Failed'
},
}

48
ruoyi-ui/src/views/JiHeExpressway/pages/service/InformationReleaseManagement/Cards/AuditLists/data.js

@ -11,40 +11,40 @@ export const searchFormList = [
options: [
{
key: "0",
label: "未解决",
label: "待确认",
},
{
key: "1",
label: "已解决",
label: "处理中",
},
{
key: "2",
label: "已关闭",
},
],
},
},
{
label: "审核状态:",
key: "checkState",
type: "RadioGroup",
options: {
options: [
{
key: "0",
label: "待审核",
},
{
key: "1",
label: "已审核",
},
{
key: "2",
label: "未通过",
label: "已完成",
},
],
},
},
// {
// label: "审核状态:",
// key: "checkState",
// type: "RadioGroup",
// options: {
// options: [
// {
// key: "0",
// label: "待审核",
// },
// {
// key: "1",
// label: "已审核",
// },
// {
// key: "2",
// label: "未通过",
// },
// ],
// },
// },
{
label: "时间范围:",
key: "daterange",

95
ruoyi-ui/src/views/JiHeExpressway/pages/service/InformationReleaseManagement/Cards/AuditLists/index.vue

@ -1,17 +1,20 @@
<template>
<Card2 class="Auditlists" title="审核列表">
<InputSearch style="width: 100%" :formList="searchFormList" />
<InputSearch style="width: 100%" :formList="searchFormList" @handleSearch="handleSearch" />
<div class="body">
<ListItem
v-for="item in list.rows"
:key="item.id"
:data="item"
origin="left"
class="middle-ratio"
@click.native="onClick(item)"
/>
</div>
<div class="footer">
<Pagination layout="total,prev, pager, next, jumper" :total="list.total" />
<Pagination layout="total,prev, pager, next, jumper" :total="list.total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="bindList" />
</div>
</Card2>
</template>
@ -25,6 +28,19 @@ import ListItem from "./ListItem.vue";
import { method } from "lodash";
import request from '@/utils/request'
import {DirectionTypes} from '@screen/utils/enum.js';
const enum_event_type = [
{key:'1',value:'交通事故',icon:"TrafficControl"},
{key:'2',value:'车辆故障',icon:"TrafficControl"},
{key:'3',value:'交通管制',icon:"TrafficControl"},
{key:'4',value:'交通拥堵',icon:"TrafficControl"},
{key:'5',value:'非法上路',icon:"TrafficControl"},
{key:'6',value:'路障清除',icon:"TrafficControl"},
{key:'7',value:'施工建设',icon:"TrafficControl"},
{key:'8',value:'服务区异常',icon:"TrafficControl"},
{key:'9',value:'设施设备隐患',icon:"TrafficControl"},
{key:'10',value:'异常天气', icon:"AbnormalWeather"},
{key:'11',value:'其他事件',icon:"TrafficControl"}
]
export default {
name: "Auditlists",
components: {
@ -38,65 +54,54 @@ export default {
return {
searchFormList,
list:{total:0,rows:[]},
eventType:[
'交通事故',
'车辆故障',
'交通管制',
'交通拥堵',
'非法上路',
'路障清除',
'施工建设',
'',
'',
'',
'',
],
list1: Array.from({ length: 3 }).map(() => ({
title: "异常天气",
content: "2023.12.23 13:00:00 济南方向K100+000 中雪",
type: 0,
isverify: (() => {
const min = 0;
const max = 2;
return Math.floor(Math.random() * (max - min + 1)) + min;
})(),
})),
list2: Array.from({ length: 10 }).map(() => ({
title: "交通事故",
content: "2023.12.23 13:00:00 济南方向K100+000 交通事故",
type: 1,
isverify: (() => {
const min = 0;
const max = 2;
return Math.floor(Math.random() * (max - min + 1)) + min;
})(),
})),
queryParams: {
pageNum: 1,
pageSize: 10,
},
p:{}
};
},
created() {
this.bindList()
// axiosIns.get("/business/dcPublishInfo/list")
// .then((result) => {
// console.log("%c [ result ]-39-index.vue", "font-size:15px; background:#4bd543; color:#8fff87;", result);
// if (result.code !== 200) return this.list = [];
// this.list = result.rows;
// }).catch((err) => {
// });
},
methods:{
onClick(e){
this.$emit("click",e.eventId);
},
handleSearch(e){
let p = {};
if(e.eventState){
p['eventState']= e.eventState
}
if(e.eventType){
p['eventState']= e.eventState
}
if(e.startStakeMark && e.startStakeMark.length === 2){
p['startStakeMarkValue']= `K${e.startStakeMark[0]}+${e.startStakeMark[1]}`
}
if(e.endStakeMark && e.endStakeMark.length === 2){
p['endStakeMarkValue']= `K${e.endStakeMark[0]}+${e.endStakeMark[1]}`
}
this.p = p;
this.list = [];
this.bindList()
},
bindList(){
request({
url: '/business/manage/list',
method: 'get',
data: {}
params: this.p
}).then(res=>{
res.rows.forEach(e => {
console.log(e)
const ev = _.find(enum_event_type,{key:e.eventType})
e.content = `${e.eventTime} ${e.stakeMark} ${DirectionTypes[e.direction]} ${e.contentDetails}`
e.type = e.eventType
e.icon = ev.icon
e.title = ev.value
e.isverify = e.eventState
});
this.list = res
this.$emit("click",res.rows[0].eventId);
})
}
}

10
ruoyi-ui/src/views/JiHeExpressway/pages/service/InformationReleaseManagement/index.vue

@ -1,7 +1,7 @@
<template>
<div class='info_publish'>
<AuditLists class="card" />
<AuditDetails class="card" />
<AuditLists @click="onListClick" class="card" />
<AuditDetails ref="refDetail" class="card" />
</div>
</template>
@ -14,6 +14,12 @@ export default {
components: {
AuditLists,
AuditDetails
},
methods:{
onListClick(id){
this.$refs.refDetail.bind(id)
}
}
}
</script>

7
ruoyi-ui/src/views/JiHeExpressway/utils/api/batch.js

@ -1,7 +1,7 @@
import request from '@/utils/request'
export function addTaskRequest(jobGroup, time, devices, params, others) {
export function submitTaskRequest(id, jobGroup, time, devices, params, others) {
let temp = [{
...others,
devices: devices,
@ -31,11 +31,14 @@ export function addTaskRequest(jobGroup, time, devices, params, others) {
time,
callParameter: JSON.stringify(temp)
}
if(id!=undefined){
data.jobId = id;
}
// console.log(JSON.stringify(data));
return request({
// url: '/business/board/batch/publish',
url: `/business/dcBatchFunctionsJob`,
method: 'post',
method: id ? 'put' : 'post',
// data: data
data
})

2
ruoyi-ui/vue.config.js

@ -54,7 +54,7 @@ module.exports = {
// target: `http://10.168.78.135:8087`, //王钦
target: `http://10.168.66.196:8087`, //正晨后台 连现场物联 刘文阁2
// target: `http://10.168.68.42:8087`, //王思祥
// target: `http://10.168.72.174:8087`, //赵祥龙
target: `http://10.168.72.174:8087`, //赵祥龙
// target: `http://10.168.65.156:8097`, //孟
// target: `http://10.168.56.165:8087`, //王家宝
// target: `http://10.168.77.128:8087`, //王兴琳

Loading…
Cancel
Save