人員分組彈窗繼續

dev
lws1334077144 3 years ago
parent d460b79cd7
commit 76fa9c8c4c
  1. 2
      ruoyi-ui/src/api/command-dispatch/commandDispatch.js
  2. 20
      ruoyi-ui/src/views/picture/command-dispatch/command-emergency-plan.vue
  3. 405
      ruoyi-ui/src/views/picture/command-dispatch/index.vue
  4. 6
      ruoyi-ui/src/views/system/management/emergency-command/utils/infoConfig.js
  5. 4
      ruoyi-ui/vue.config.js

@ -66,7 +66,7 @@ export function alarmOrderDetail(ids) {
//9、查询分组、全部人员
export function alarmOrderList(query) {
return request({
url: '/emergencyCommand/manage/alarmOrderList',
url: '/emergencyCommand/manage/alarmSchedulingUser',
method: 'get',
params: query
})

@ -1,11 +1,15 @@
<template>
<base-overflow height="100%">
<div class="p-emergency-plan">
<div class="p-emergency-plan-item" v-for="(item,index) in propsData" :key="index"
:class="getLevelClass(item.level)">
<div class="p-emergency-plan-icon">{{item.eventGradeName}}</div>
<div class="p-emergency-plan-text">{{ item.name }}</div>
</div>
<template v-for="(item,index) in propsData">
<div class="p-emergency-plan-item"
:class="item.eventGradeName?getLevelClass(item.eventGradeName):'green'">
<div class="p-emergency-plan-icon">{{ item.eventGradeName ||'/'}}</div>
<div class="p-emergency-plan-text">{{ item.name }}</div>
</div>
</template>
</div>
</base-overflow>
</template>
@ -22,13 +26,13 @@ export default {
methods: {
getLevelClass(value) {
switch (value) {
case '红':
case'红':
return 'red'
break;
case'':
case'橙色':
return 'yellow'
break;
case'蓝':
case'蓝':
return 'blue'
break;
default:

@ -160,10 +160,10 @@
</base-pane>
</base-tabs>
</div>
<base-tabs v-model="tabType" class="m-t-large" @handleChange="">
<base-tabs v-model="tabType" class="m-t-large" @handleChange="getFatherValue">
<base-pane label="应急预案" name="1">
<base-tabs class="m-t-small m-son-pane" @handleChange="">
<base-pane v-for="item in groupData" v-model="type" :label="item.classificationName"
<base-tabs class="m-t-small m-son-pane" v-model="type" @handleChange="getValue(tabType,$event)">
<base-pane v-for="item in groupData" :label="item.classificationName"
:name="item.classificationCode">
<div class="p-module-small">
<base-overflow height="20vh">
@ -175,19 +175,22 @@
</base-tabs>
</base-pane>
<base-pane label="应急资源" name="2">
<base-tabs class="m-t-small m-son-pane" @handleChange="">
<base-pane v-for="item in groupDatas" v-model="type" :label="item.name"
<base-tabs class="m-t-small m-son-pane" v-model="type" @handleChange="getValue(tabType,$event)">
<base-pane v-for="item in groupDatas" :label="item.name"
:name="item.dataType">
<div class="p-module-small">
<base-overflow height="20vh">
<!-- 应急预案 -->
<command-emergency-plan :propsData="EmergencyPlanData"></command-emergency-plan>
<div v-for="item in emergencyResources">
<div class="e-title">{{ item.name }}</div>
<button class="e-button-emergency" @click="getMaterialsList(item.code)">物资清单</button>
<el-divider></el-divider>
</div>
</base-overflow>
</div>
</base-pane>
</base-tabs>
</base-pane>
</base-pane>
</base-tabs>
</el-col>
<el-col :span="18">
@ -196,7 +199,9 @@
<base-step class="m-b-large" step="3"></base-step>
</el-col>
<el-col :span="8">
<base-card-sub-title class="m-b-large" title="警情信息"></base-card-sub-title>
<base-card-sub-title class="m-b-large m-b-large-title" title="警情信息">
</base-card-sub-title>
<el-button class="p-button e-button-emergency" @click="showAlarmDetailDialog">查看详情</el-button>
<div class="p-module-small p-timeline-box" style="height: 60vh">
<el-timeline>
<el-timeline-item>
@ -302,12 +307,18 @@
<el-option label="Ⅳ级" value="level4"></el-option>
</el-select>
</el-form-item>
<el-form-item v-model="dispatchForm.person" label="负责人">
<el-input></el-input>
<el-form-item v-model="principalUserName" label="负责人">
<el-input>
<el-button class="e-input-button" slot="append" @click.stop="showResponsiblePerson">
选择负责人
</el-button>
</el-input>
</el-form-item>
<base-card-small-title title="警情反馈"></base-card-small-title>
<el-form-item>
<el-input v-model="dispatchForm.alarmFeedback" rows="5" type="textarea"></el-input>
<el-input v-model="dispatchForm.alarmFeedback" rows="5" type="textarea">
</el-input>
</el-form-item>
<div id="CommandAlarmBtn" class="display-flex display-center">
<base-submit-btn icon="icon-warning_submit1" text="结警"
@ -353,6 +364,119 @@
</el-col>
</el-row>
</el-col>
<el-dialog class="p-dialog" v-if="showDialog" :visible.sync="showDialog" :modal="false"
:close-on-click-modal="false">
<div class="p-dialog-title"> 物资清单</div>
<el-table class="p-table" :data="emergencyResourcesTable" style="width: 100%">
<el-table-column prop="name" label="物资名称" width="180"></el-table-column>
<el-table-column prop="type" label="物资类型" width="180"></el-table-column>
<el-table-column prop="count" label="数量"></el-table-column>
</el-table>
</el-dialog>
<el-dialog class="p-dialog" v-if="showEmergencyDialog" :visible.sync='showEmergencyDialog' :modal="false"
:close-on-click-modal="false">
<el-tabs v-model="activeName" class="p-tabs">
<el-tab-pane label="警情信息" name="1">
<el-row>
<el-col :span="12"><span class="m-row-title">告警编号</span>{{ AlertInformation.alarmCode || '/' }}
</el-col>
<el-col :span="12"><span class="m-row-title">告警状态</span>{{ AlertInformation.alarmState || '/' }}
</el-col>
</el-row>
<el-row>
<el-col :span="12"><span class="m-row-title">告警时间</span>{{ AlertInformation.createTime || '/' }}
</el-col>
<el-col :span="12"><span
class="m-row-title">告警来源</span>{{ AlertInformation.alarmSourceName || '/' }}
</el-col>
</el-row>
<el-row>
<el-col :span="12"><span
class="m-row-title">警情类型</span>{{ AlertInformation.classificationDataName || '/' }}
</el-col>
<el-col :span="12"><span
class="m-row-title">事件类型</span>{{ AlertInformation.classificationName || '/' }}
</el-col>
</el-row>
<el-row>
<el-col :span="12"><span
class="m-row-title">事件等级</span>{{ AlertInformation.eventGradeName || '/' }}
</el-col>
<el-col :span="12"><span class="m-row-title">告警人</span>{{ AlertInformation.alerter || '/' }}
</el-col>
</el-row>
<el-row>
<el-col :span="24"><span class="m-row-title">告警位置</span>{{ AlertInformation.location || '/' }}
</el-col>
</el-row>
<el-row>
<el-col :span="24"><span class="m-row-title"> </span>{{ AlertInformation.title || '/' }}
</el-col>
</el-row>
<el-row>
<el-col :span="24"><span
class="m-row-title"> </span>{{ AlertInformation.description || '/' }}
</el-col>
</el-row>
</el-tab-pane>
<el-tab-pane label="接警信息" name="2">
<el-row>
<el-col :span="12"><span class="m-row-title">接警时间</span>{{ AlertInformation.createTime || '/' }}
</el-col>
<el-col :span="12"><span class="m-row-title">接警人</span>{{ AlertInformation.acceptUserName || '/' }}
</el-col>
</el-row>
<el-row>
<el-col :span="12"><span class="m-row-title">紧急程度</span>{{ AlertInformation.gradeName || '/' }}
</el-col>
<el-col :span="12"><span class="m-row-title">接警人手机号</span>{{ AlertInformation.phone || '/' }}
</el-col>
</el-row>
<el-row>
<el-col :span="24"><span
class="m-row-title">接警反馈</span>{{ AlertInformation.acceptUserName || '/' }}
</el-col>
</el-row>
</el-tab-pane>
</el-tabs>
</el-dialog>
<el-dialog class="p-dialog" v-if="showPersonDialog" :visible.sync='showPersonDialog' :modal="false"
:close-on-click-modal="false">
<el-tabs v-model="activeName" class="p-tabs">
<el-tab-pane label="值守人员" name="1">
<el-collapse accordion>
<el-collapse-item v-for="item in personList">
<template slot="title">
<i class="header-icon el-icon-folder-opened"></i>&nbsp;{{ item.deptName }}
</template>
<el-radio-group v-model="item.userId">
<el-radio class="m-e-radio" v-for="dict in item.userList" :key="dict.userId" :label="dict.userName" :value="dict.userId">
{{ dict.userName }}
</el-radio>
</el-radio-group>
</el-collapse-item>
</el-collapse>
</el-tab-pane>
<el-tab-pane label="全部人员" name="2">
<el-collapse accordion>
<el-collapse-item v-for="item in personList">
<template slot="title">
<i class="header-icon el-icon-folder-opened"></i>&nbsp;{{ item.deptName }}
</template>
<el-radio-group v-model="item.userId">
<el-radio class="m-e-radio" v-for="dict in item.userList" :key="dict.userId" :label="dict.userName" :value="dict.userId">
{{ dict.userName }}
</el-radio>
</el-radio-group>
</el-collapse-item>
</el-collapse>
</el-tab-pane>
</el-tabs>
<div slot="footer" class="dialog-footer">
<el-button @click="showPersonDialog = false"> </el-button>
<el-button type="primary" @click="showPersonDialog = false"> </el-button>
</div>
</el-dialog>
</el-row>
</base-card-body>
</base-card>
@ -385,7 +509,7 @@ import {
alarmStatisticsByTrend,
countAlarmInfoByClassification, countAlarmInfoByEventType, countAlarmInfoByGrade,
countAlarmInfoBySource,
countAlarmInfoByStatus, getAlarmList, getMonitoringAids
countAlarmInfoByStatus, getAlarmList, getMaterialsList, getMonitoringAids, getPlanEmergency
} from "@/api/command-dispatch/commandDispatch";
import infoConfig from "@/views/system/management/emergency-command/utils/infoConfig";
import {getTreeList} from "@/api/basicResources/tourBasic";
@ -399,6 +523,20 @@ export default {
},
data() {
return {
//
principalUserName:null,
//
showPersonDialog: false,
//
personList: [],
//id
rowId: null,
//
showDialog: false,
//
showEmergencyDialog: false,
//tab
activeName: '1',
//
searchText: '',
//
@ -435,6 +573,8 @@ export default {
distanceSelect: [],
//
EmergencyPlanData: [],
//
emergencyResources: [],
//
AlarmTrendData: {},
//
@ -461,14 +601,15 @@ export default {
},
getWarningDate: [],
//
AlertInformation: {}
AlertInformation: {},
//
emergencyResourcesTable: []
}
},
created() {
this.getTreeList(3)
this.getTreeList(7)
this.getTreeList(5)
this.getTreeList(8)
},
computed: {
//
@ -509,7 +650,7 @@ export default {
//
this.getList()
//9
// this.alarmOrderList()
this.alarmOrderList()
//
this.getDistance()
@ -637,18 +778,44 @@ export default {
},
//
showDetail(row, column, event) {
this.rowId = row.id
if (row.status != 4) {
this.alarmModeState = true
alarmOrderDetail(row.id).then(response => {
this.AlertInformation = response.data
})
}
//
this.getPlanEmergency(1, this.groupData[0].classificationCode)
},
//9
alarmOrderList() {
alarmOrderList().then(response => {
console.log(response, '查询分组、全部人员')
})
this.personList = [
{
deptName: "河北省景区综合管控平台",
userList: [
{
userId: 106,
userName: "750308295687798784",
phonenumber: "1",
admin: false
},
{
userId: 107,
userName: "hehang",
admin: false
},
{
userId: 109,
userName: "qfzj",
admin: false
}
]
}
]
},
//
@ -659,12 +826,72 @@ export default {
})
},
//
getTreeLists(val){
getTreeList(val).then(response=>{
console.log(response)
getTreeLists(val) {
getTreeList(val).then(response => {
this.groupDatas = response.data
})
},
//
getPlanEmergency(tab, type) {
let params = {
tabType: tab,
type: type,
}
getPlanEmergency(params).then(response => {
console.log(response, '应急列表')
if (tab == 1) {
this.EmergencyPlanData = response.data
} else {
this.emergencyResources = response.data
}
})
this.emergencyResources = [
{
name: '登封市公安消防大队嵩山中队',
code: '"7d3c5a1eb7e111ed910b0242ac15000d"'
}
]
},
//
getFatherValue(val) {
let this_ = this
debugger
this.tabType = val
if (val == 1) {
this.getPlanEmergency(val, this_.groupData[0].classificationCode)
} else {
this.getPlanEmergency(val, this_.groupDatas[0].dataType,)
}
},
getValue(tabType, type) {
this.getPlanEmergency(tabType, type)
},
//
getMaterialsList(val) {
this.showDialog = true
let params = {
code: val
}
getMaterialsList(params).then(response => {
this.emergencyResourcesTable = response.data
})
this.emergencyResourcesTable = [
{
name: '物资',
type: '消防类',
count: '22'
}
]
},
//
showAlarmDetailDialog() {
this.showEmergencyDialog = true
},
//
showResponsiblePerson() {
console.log('23')
this.showPersonDialog = true
},
//
@ -802,6 +1029,39 @@ const twoChartData = {
</script>
<style lang="scss" scoped>
.e-title {
color: #6cdd99;
max-width: 200px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
margin: 11px 0;
}
::v-deep .el-divider {
background-color: #504d4d;
}
.e-button-emergency {
-webkit-box-pack: center;
-ms-flex-pack: center;
justify-content: center;
-webkit-box-align: center;
-ms-flex-align: center;
align-items: center;
width: 87px;
height: 32px;
cursor: pointer;
color: #66dc95;
background: transparent;
border: solid rgba(102, 182, 255, 0.5) 1px;
transition: 1s all;
}
.e-button-emergency:hover {
background: rgba(102, 182, 255, 0.3);
}
.p-close {
position: absolute;
z-index: 100;
@ -1039,6 +1299,7 @@ const twoChartData = {
scrollbar-width: none; /* Firefox */
-ms-overflow-style: none; /* IE 10+ */
white-space: nowrap;
.v-tabs-item {
padding: 0;
margin: 0 3px;
@ -1069,10 +1330,11 @@ const twoChartData = {
padding: 0;
}
.p-module-small{
.p-module-small {
height: 18.5vh;
overflow-y: scroll;
}
.p-module-small::-webkit-scrollbar {
display: none; /* Safari 和 Chrome */
}
@ -1083,7 +1345,8 @@ const twoChartData = {
border: none;
padding: 0;
}
.v-tabs-text::before{
.v-tabs-text::before {
content: "";
position: absolute;
left: 50%;
@ -1094,7 +1357,8 @@ const twoChartData = {
-webkit-transform: translate(-50%, 0);
transform: translate(-50%, 0);
}
.v-tabs-text::after{
.v-tabs-text::after {
content: "";
position: absolute;
left: 50%;
@ -1119,4 +1383,101 @@ const twoChartData = {
border-color: rgba(102, 182, 255, 0.5) !important;
}
}
.m-b-large-title {
display: inline-block;
}
.p-button {
display: inline-block;
padding: 0;
float: right;
}
::v-deep .p-tabs {
.el-row {
margin: 10px 5px;
font-size: 15px;
}
.el-tabs__active-bar {
display: none;
}
.el-tabs__nav {
width: 100%;
display: flex;
justify-content: space-around;
}
.el-tabs__item:hover {
color: #42e983;
}
.el-tabs__item.is-active {
color: #42e983;
}
.m-row-title {
color: #66dc95
}
}
::v-deep .el-input-group__append {
background: transparent;
border-color: rgba(102, 182, 255, 0.5);
.e-input-button {
cursor: pointer;
background-color: transparent;
border: 0 transparent;
height: 100%;
width: 109px;
color: #73df9e;
}
}
.header-icon{
color: #73df9e;
}
::v-deep .el-collapse-item__wrap{
background: transparent;
}
::v-deep .el-icon-arrow-right{
color: #73df9e;
}
::v-deep .el-collapse-item__header{
background: rgba(100,215,146,.2);
padding: 0 22px;
font-size: 16px;
font-weight: 400;
font-stretch: normal;
letter-spacing: 0;
color: #66dc95;
}
::v-deep .el-collapse-item__header.is-active{
background-color: rgba(100,215,146,.2);
border: none;
font-family: MicrosoftYaHei;
font-size: 16px;
font-weight: 400;
font-stretch: normal;
letter-spacing: 0;
color: #66dc95;
padding: 0 22px;
}
::v-deep .el-radio-group{
width: 100%;
.m-e-radio{
background-image: linear-gradient(90deg,rgba(0,16,37,.2),#001025 47%,rgba(0,16,37,.2));
display: block;
width: 100%;
line-height: 40px;
padding: 0 10px;
}
}
::v-deep .el-collapse{
border: none;
}
</style>

@ -59,13 +59,15 @@ export default {
this.groupData = response.data
})
});
} else if (el == '5') {
} else if (el == '5'||el == '8') {
let params = {
type: 2
}
getWaringList(params).then(response => {
this.$nextTick(() => {
this.eventSelectOptions = response.data
if (el == '5'){
this.eventSelectOptions = response.data
}
let obj = {
}
let newArr = []

@ -35,8 +35,8 @@ module.exports = {
proxy: {
// detail: https://cli.vuejs.org/config/#devserver-proxy
[process.env.VUE_APP_BASE_API]: {
// target: `http://localhost:8080/`,//用户名:admin 密码CJYjqgk@2023!
target: `http://39.105.17.128:8096/`,//用户名:cjyadmin/密码:CJYjqgk@2023!
target: `http://localhost:8080/`,//用户名:admin 密码CJYjqgk@2023!
// target: `http://39.105.17.128:8096/`,//用户名:cjyadmin/密码:CJYjqgk@2023!
// target: `http://192.168.0.229:8080/`,//用户名:admin 密码Cjy@123abc
changeOrigin: true,
pathRewrite: {

Loading…
Cancel
Save