You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
SzplatformWeb/src/views/components/urgencyAudit.vue

440 lines
17 KiB

<!-- 紧急事件审核弹框 -->
<template>
<el-dialog
:visible.sync="showCK"
v-if="showCK"
width="60%"
:show-close="false"
:append-to-body="true"
:close-on-click-modal="false"
:close-on-press-escape="false"
custom-class="travel"
>
<div slot="title" class="dialog-title">
<div class="dialog-title-text">{{ title }}</div>
<i @click="close" class="el-icon-close"></i>
</div>
<div class="audit-generalize">
<el-row>
<el-col :span="14" v-if="!isTrue">
<div class="work-order-info ">
<div class="work-order-item" v-if="auditStatus == 1">
<div class="work-order-item-left">
<div class="work-order-label">
<div class="work-order-labelBox">事件名称</div>
<span></span>
</div>
<el-tooltip class="item" effect="light" :content="eventInfo.title" placement="top">
<!-- @blur="titleBlur" -->
<el-input class="work-order-value-value" v-model="eventInfo.title" :disabled="disabled"></el-input>
</el-tooltip>
</div>
<el-button size="mini" @click="disabled = false"><img src="@/assets/images/changeTitle.png" alt=""> 修改标题</el-button>
</div>
<div class="work-order-item" v-else>
<div class="work-order-item-left">
<div class="work-order-label">
<div class="work-order-labelBox">事件名称</div>
<span></span>
</div>
<el-tooltip class="item" effect="light" :content="eventInfo.title" placement="top">
<div class="work-order-value work-order-value-value" :class="!eventInfo.titleBefore ? 'value-value':''">{{ eventInfo.title }}</div>
</el-tooltip>
</div>
<el-button size="mini" v-if="eventInfo.titleBefore" @click="innerVisible = true"><img src="@/assets/images/changeTitle.png" alt=""> </el-button>
</div>
<div class="work-order-items" v-if="eventInfo.auditTime">
<div class="work-order-label">
<div class="work-order-labelBox">审核时间</div>
<span></span>
</div>
<div class="work-order-value">{{ eventInfo.auditTime }}</div>
</div>
<div class="work-order-items">
<div class="work-order-label">
<div class="work-order-labelBox">预警因素</div>
<span></span>
</div>
<div class="work-order-value">{{ eventInfo.warnFactor }}</div>
</div>
<div class="work-order-items">
<div class="work-order-label">
<div class="work-order-labelBox">预警时间</div>
<span></span>
</div>
<div class="work-order-value">{{ eventInfo.firstWarnTimeDate }}</div>
</div>
<div class="work-order-items">
<div class="work-order-label">
<div class="work-order-labelBox">预警类别</div>
<span></span>
</div>
<div class="work-order-value">{{ eventInfo.msgTypeName }}</div>
</div>
<div class="work-order-items">
<div class="work-order-label">
<div class="work-order-labelBox order-labelBox">事件来源</div>
<span></span>
</div>
<div class="work-order-value">{{ audioInfo.scenceName }}</div>
</div>
<div class="work-order-items">
<div class="work-order-label">
<div class="work-order-labelBox">诉求类型</div>
<span></span>
</div>
<div class="work-order-value">{{ audioInfo.caseType }}</div>
</div>
<!-- <div class="work-order-items">
<div class="work-order-label">
<div class="work-order-labelBox">案件类型</div>
<span></span>
</div>
<div class="work-order-value">{{ audioInfo.caseAccord }}</div>
</div> -->
<div class="work-order-items">
<div class="work-order-label">
<div class="work-order-labelBox">工单标题</div>
<span></span>
</div>
<div class="work-order-value">{{ audioInfo.caseTitle }}</div>
</div>
<div class="work-order-items">
<div class="work-order-label">
<div class="work-order-labelBox">制单时间</div>
<span></span>
</div>
<div class="work-order-value">{{ audioInfo.caseDate }}</div>
</div>
<div class="work-order-items">
<div class="work-order-label">
<div class="work-order-labelBox">诉求内容</div>
<span></span>
</div>
<div class="work-order-value">
{{ audioInfo.caseContent }}
</div>
</div>
<div class="work-order-items">
<div class="work-order-label">
<div class="work-order-labelBox">位置描述</div>
<span></span>
</div>
<div class="work-order-value">{{ audioInfo.caseAddress }}</div>
</div>
<div class="work-order-items">
<div class="work-order-label">
<div class="work-order-labelBox">来电号码</div>
<span></span>
</div>
<div class="work-order-value">{{ audioInfo.creatorTel }}</div>
</div>
<div class="work-order-items">
<div class="work-order-label">
<div class="work-order-labelBox">服务对象姓名</div>
<span></span>
</div>
<div class="work-order-value">{{ audioInfo.creatorName }}</div>
</div>
</div>
</el-col>
<el-col :span="14" v-else>
<div class="work-order-info ">
<div class="work-order-items">
<div class="work-order-label">
<div class="work-order-labelBox order-labelBox">工单编号</div>
<span></span>
</div>
<div class="work-order-value">{{ audioInfo.caseSerial }}</div>
</div>
<div class="work-order-items">
<div class="work-order-label">
<div class="work-order-labelBox order-labelBox">事件来源</div>
<span></span>
</div>
<div class="work-order-value">{{ audioInfo.scenceName }}</div>
</div>
<div class="work-order-items">
<div class="work-order-label">
<div class="work-order-labelBox">诉求类型</div>
<span></span>
</div>
<div class="work-order-value">{{ audioInfo.caseType }}</div>
</div>
<div class="work-order-items">
<div class="work-order-label">
<div class="work-order-labelBox">工单标题</div>
<span></span>
</div>
<div class="work-order-value">{{ audioInfo.caseTitle }}</div>
</div>
<div class="work-order-items">
<div class="work-order-label">
<div class="work-order-labelBox">制单时间</div>
<span></span>
</div>
<div class="work-order-value">{{ audioInfo.caseDate }}</div>
</div>
<div class="work-order-items">
<div class="work-order-label">
<div class="work-order-labelBox">诉求内容</div>
<span></span>
</div>
<div class="work-order-value">
{{ audioInfo.caseContent }}
</div>
</div>
<div class="work-order-items">
<div class="work-order-label">
<div class="work-order-labelBox">位置描述</div>
<span></span>
</div>
<div class="work-order-value">{{ audioInfo.caseAddress }}</div>
</div>
<div class="work-order-items">
<div class="work-order-label">
<div class="work-order-labelBox">来电号码</div>
<span></span>
</div>
<div class="work-order-value">{{ audioInfo.creatorTel }}</div>
</div>
<div class="work-order-items">
<div class="work-order-label">
<div class="work-order-labelBox">服务对象姓名</div>
<span></span>
</div>
<div class="work-order-value">{{ audioInfo.creatorName }}</div>
</div>
</div>
</el-col>
<el-col :span="10">
<div id="newmapTwo" v-loading="mapLoading"></div>
</el-col>
</el-row>
</div>
<div slot="footer" class="dialog-footer" v-if="auditStatus == 1">
<el-button type="primary" @click="reported(1)"></el-button>
<!-- <el-button type="info" plain>不上报</el-button> -->
<el-button type="danger" @click="reported(2)">退</el-button>
5 months ago
<!-- <el-button type="success" @click="reported(3)"></el-button> -->
</div>
<el-dialog
width="30%"
title="查看标题"
:visible.sync="innerVisible"
append-to-body>
<el-descriptions :column="1">
<el-descriptions-item label="当前标题">{{ eventInfo.title }}</el-descriptions-item>
<el-descriptions-item label="历史标题">{{ eventInfo.titleBefore }}</el-descriptions-item>
</el-descriptions>
</el-dialog>
</el-dialog>
</template>
<script>
import L from "leaflet";
import 'leaflet.markercluster';
import "leaflet.markercluster/dist/MarkerCluster.css"
import "proj4";
import "proj4leaflet";
import "@/utils/lib/leaflet.ChineseTmsProviders.js";
import "@/utils/lib/leaflet.mapCorrection.min.js";
import { auditList, eventChangeIsReport, editTitle, getMassEvents } from "@/api/eventPage"
export default {
data() {
return {
showCK:false,
audioInfo:{},
eventInfo:{},
backupsInfo:{},
loading:false,
mapLoading:false,
mapLayers: {
mapLayer1: null,
},
disabled: true,
innerVisible:false,
isTrue: true,
}
},
props:{
title:{
type:String,
default:""
},
auditStatus:{
type:Number,
required: true
},
},
mounted(){
},
methods:{
// 弹出弹框
open(row,item){
this.showCK = true;
this.eventInfo = {...row}
this.backupsInfo = {...row}
if(item){
this.isTrue = true;
if(item.caseSerial) {
this.getListTwo(item.caseSerial);
} else {
this.getListTwo(item.resultId);
}
} else if(!item && this.eventInfo.msgType == '3'){
this.isTrue = false;
this.getList(row.innerEventId);
} else {
this.isTrue = false;
this.audioInfo = {...row}
}
this.$nextTick(() => {
this.initMap();
});
},
// 关闭弹框
close(){
this.showCK = false;
this.loading = false;
},
initMap(){
this.map = L.map("newmapTwo", {
// crs: L.CRS.Baidu,
center: [31.324624, 120.582904],
zoom: 12,
attributionControl: false,
zoomControl: false,
});
this.basemap = L.tileLayer.chinaProvider("GaoDe.Normal.Map", {
maxZoom: 14,
minZoom: 5,
});
this.map.addLayer(this.basemap);
this.map.createPane("mapLayer1");
this.map.getPane("mapLayer1").style.zIndex = 501;
this.map.getPane("mapLayer1").style.pointerEvents = "none";
this.mapLayers.mapLayer1 = L.featureGroup().addTo(this.map);
},
getList(id){
this.loading = true;
auditList(id).then(res=>{
this.audioInfo = {...res.data.records[0]};
if(this.audioInfo.caseLnglat) {
let iconUrl2 = require("@/assets/images/icon2.png");
// 事件有经纬度情况下
var myIcon2 = L.icon({
iconUrl: iconUrl2,
iconSize: [38, 50], // 图标图像的尺寸,单位是像素。
iconAnchor: [19, 29], // 图标 "tip" 的坐标相对于其左上角。图标将被对齐使该点位于标记的地理位置。如果指定了尺寸默认为居中也可以在CSS中设置负的边距。
popupAnchor: [-3, -76], // 弹出窗口popup的坐标相对于图标锚点而言将从该点打开。
});
let lat = this.audioInfo.caseLnglat.split(",")[1];
let lon = this.audioInfo.caseLnglat.split(",")[0];
let marker = L.marker(
L.latLng(lat, lon),
{ icon: myIcon2 }
)
// .addTo(this.mapLayers.mapLayer1)
this.mapLayers.mapLayer1.addLayer(marker);
const bounds = this.mapLayers.mapLayer1.getBounds();
let center = bounds.getCenter();
this.map.setView(center, 12);
}
this.loading = false;
}).catch(err=>{
this.loading = false;
})
},
getListTwo(id){
this.loading = true;
getMassEvents(id).then(res=>{
this.audioInfo = {...res.data};
if(this.audioInfo.caseLnglat) {
let iconUrl2 = require("@/assets/images/icon2.png");
// 事件有经纬度情况下
var myIcon2 = L.icon({
iconUrl: iconUrl2,
iconSize: [38, 50], // 图标图像的尺寸,单位是像素。
iconAnchor: [19, 29], // 图标 "tip" 的坐标相对于其左上角。图标将被对齐使该点位于标记的地理位置。如果指定了尺寸默认为居中也可以在CSS中设置负的边距。
popupAnchor: [-3, -76], // 弹出窗口popup的坐标相对于图标锚点而言将从该点打开。
});
let lat = this.audioInfo.caseLnglat.split(",")[1];
let lon = this.audioInfo.caseLnglat.split(",")[0];
let marker = L.marker(
L.latLng(lat, lon),
{ icon: myIcon2 }
)
// .addTo(this.mapLayers.mapLayer1)
this.mapLayers.mapLayer1.addLayer(marker);
const bounds = this.mapLayers.mapLayer1.getBounds();
let center = bounds.getCenter();
this.map.setView(center, 12);
}
// console.log(res,"res");
this.loading = false;
}).catch(err=>{
this.loading = false;
})
},
titleBlur(){
this.disabled = true;
if(this.backupsInfo.title !== this.eventInfo.title) {
// editTitle({title:this.eventInfo.title, innerEventId:this.eventInfo.innerEventId}).then(res=>{
// if(res.code == 200) {
// this.$message({
// type: "success",
// message: "标题修改成功!",
// });
// }
// })
}
},
// 上报驾驶舱/退回重训练
reported(id){
// console.log(this.multipleSelection);
// console.log(this.audioInfo.innerEventId);
4 months ago
this.$confirm(`确定要${id == 1 ? '重新上报驾驶舱' : id == 2 ? '退回重训练' : id == 3 ? '审核通过':''}吗?`, "警告", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
}).then(() => {
if(id !== 3) {
eventChangeIsReport({isReport:id,caseSerial:[this.audioInfo.caseSerial],innerEventId:this.eventInfo.innerEventId,newTitle:this.eventInfo.title,oldTitle:this.backupsInfo.title}).then(res=>{
// console.log(res);
this.$message({
type: "success",
message: id == 1 ? '已上报驾驶舱' : '已退回重训练' + "!",
});
this.$emit('closeDialog')
this.close();
})
} else {
if(this.backupsInfo.title !== this.eventInfo.title) {
this.$message.error(`您已修改标题,请上报驾驶舱或退回重训练`);
} else {
eventChangeIsReport({isReport:id,caseSerial:[this.audioInfo.caseSerial],innerEventId:this.eventInfo.innerEventId}).then(res=>{
// console.log(res);
this.$message({
type: "success",
message: "审核完成",
});
this.$emit('closeDialog')
this.close();
})
}
}
})
},
// 修改第二列样式
addStyle({row, column, rowIndex, columnIndex}) {
if(columnIndex === 2) {
return "columnFactor"
}
},
},
}
</script>