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

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<!-- 紧急事件审核弹框 -->
<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>
<!-- <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);
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>