import { FlatTreeControl } from '@angular/cdk/tree';
import { HttpClient } from '@angular/common/http';
import { Inject, Renderer2 } from '@angular/core';
import { ElementRef } from '@angular/core';
import { Component, OnInit } from '@angular/core';
import { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
import { MatSnackBar, MatSnackBarConfig } from '@angular/material/snack-bar';
import { MatTreeFlatDataSource, MatTreeFlattener } from '@angular/material/tree';
import { NzTreeNode } from 'ng-zorro-antd/tree';
import { TreeService } from 'src/app/http-interceptors/tree.service';
import Viewer from 'viewerjs'
import Swiper from 'swiper';
declare var CryptoJS
declare var AMap: any;
@Component({
selector: 'app-linkage-forces',
templateUrl: './linkage-forces.component.html',
styleUrls: ['./linkage-forces.component.scss']
})
export class LinkageForcesComponent implements OnInit {
constructor(private tree: TreeService,public snackBar: MatSnackBar,private http:HttpClient,private elementRef: ElementRef,public renderer2: Renderer2,public dialog: MatDialog) { }
isCheckedOfSearchDiv:boolean = true//列表过滤滑块
slideChange(e){
this.isCheckedOfSearchDiv = e.checked
}
//搜索表单
searchForm:any = {
name:'',
integrityNum:''
}
listIntegrityNum:any[] = [
{id:-1,name:'全部'},
{id:0,name:'<=50%'},
{id:1,name:'50%-60%'},
{id:2,name:'60%-70%'},
{id:3,name:'70%-80%'},
{id:4,name:'80%-90%'},
{id:5,name:'90%-100%'}
]
checkBoxList:any[] = [
{id:0,name:'安监',imgUrl:'/assets/linkageForces/安监.png',isChecked:false},
{id:1,name:'电力局',imgUrl:'/assets/linkageForces/电力局.png',isChecked:false},
{id:2,name:'公安',imgUrl:'/assets/linkageForces/公安.png',isChecked:false},
{id:3,name:'海事',imgUrl:'/assets/linkageForces/海事.png',isChecked:false},
{id:4,name:'环保局',imgUrl:'/assets/linkageForces/环保局.png',isChecked:false},
{id:5,name:'交通',imgUrl:'/assets/linkageForces/交通.png',isChecked:false},
{id:6,name:'民政',imgUrl:'/assets/linkageForces/民政.png',isChecked:false},
{id:7,name:'气象局',imgUrl:'/assets/linkageForces/气象局.png',isChecked:false},
{id:8,name:'燃气局',imgUrl:'/assets/linkageForces/燃气局.png',isChecked:false},
{id:9,name:'市政',imgUrl:'/assets/linkageForces/市政.png',isChecked:false},
{id:10,name:'水利',imgUrl:'/assets/linkageForces/水利.png',isChecked:false},
{id:11,name:'通信',imgUrl:'/assets/linkageForces/通信.png',isChecked:false},
{id:12,name:'医疗',imgUrl:'/assets/linkageForces/医疗.png',isChecked:false},
{id:13,name:'应急管理',imgUrl:'/assets/linkageForces/应急管理.png',isChecked:false},
{id:14,name:'住建',imgUrl:'/assets/linkageForces/住建.png',isChecked:false}
]
//勾选力量类型checkbox在地图上显示marker
checkBoxChange(){
let LinkageForceTypes = []
this.checkBoxList.forEach(item =>{
if(item.isChecked){
LinkageForceTypes.push(item.id)
}
})
let params:any = {
PageSize : 999999,
LinkageForceTypes:LinkageForceTypes
}
if(LinkageForceTypes.length != 0){//如果勾选了checkbox
this.http.get('/api/LinkageForces',{params:params}).subscribe((data:any) => {
this.createMarker(data.items)
})
}else{
this.cluster.setData([])
}
}
//循环渲染出所有力量markers
cluster:any //力量聚合实例
createMarker(list){
let markerArrcluster = []
this.cluster ? this.cluster.setData([]) : null
list.forEach((item) => {
let image
if(item.linkageForceType == 0){//消火栓
image = '/assets/linkageForcesMarkers/安监.png'
}else if(item.linkageForceType == 1){//消防水池
image = '/assets/linkageForcesMarkers/电力局.png'
}else if(item.linkageForceType == 2){//天然水源
image = '/assets/linkageForcesMarkers/公安.png'
}else if(item.linkageForceType == 3){//天然水源
image = '/assets/linkageForcesMarkers/海事.png'
}else if(item.linkageForceType == 4){//天然水源
image = '/assets/linkageForcesMarkers/环保局.png'
}else if(item.linkageForceType == 5){//天然水源
image = '/assets/linkageForcesMarkers/交通.png'
}else if(item.linkageForceType == 6){//天然水源
image = '/assets/linkageForcesMarkers/民政.png'
}else if(item.linkageForceType == 7){//天然水源
image = '/assets/linkageForcesMarkers/气象局.png'
}else if(item.linkageForceType == 8){//天然水源
image = '/assets/linkageForcesMarkers/燃气局.png'
}else if(item.linkageForceType == 9){//天然水源
image = '/assets/linkageForcesMarkers/市政.png'
}else if(item.linkageForceType == 10){//天然水源
image = '/assets/linkageForcesMarkers/水利.png'
}else if(item.linkageForceType == 11){//天然水源
image = '/assets/linkageForcesMarkers/通信.png'
}else if(item.linkageForceType == 12){//天然水源
image = '/assets/linkageForcesMarkers/医疗.png'
}else if(item.linkageForceType == 13){//天然水源
image = '/assets/linkageForcesMarkers/应急管理.png'
}else if(item.linkageForceType == 14){//天然水源
image = '/assets/linkageForcesMarkers/住建.png'
}
// 用于点集合的数组
markerArrcluster.push({
lnglat : [item.location.x,item.location.y],
image : image,
data : item
})
})
this.map.plugin(["AMap.MarkerClusterer"],() => {
var gridSize = 60
var count = markerArrcluster.length;
var _renderClusterMarker = function (context) {
var factor = Math.pow(context.count / count, 1 / 18);
var div = document.createElement('div');
var Hue = 180 - factor * 180;
var bgColor = 'hsla(' + Hue + ',100%,40%,0.7)';
var fontColor = 'hsla(' + Hue + ',100%,90%,1)';
var borderColor = 'hsla(' + Hue + ',100%,40%,1)';
var shadowColor = 'hsla(' + Hue + ',100%,90%,1)';
div.style.backgroundColor = bgColor;
var size = Math.round(30 + Math.pow(context.count / count, 1 / 5) * 20);
div.style.width = div.style.height = size + 'px';
div.style.border = 'solid 1px ' + borderColor;
div.style.borderRadius = size / 2 + 'px';
div.style.boxShadow = '0 0 5px ' + shadowColor;
div.innerHTML = context.count;
div.style.lineHeight = size + 'px';
div.style.color = fontColor;
div.style.fontSize = '14px';
div.style.textAlign = 'center';
context.marker.setOffset(new AMap.Pixel(-size / 2, -size / 2));
context.marker.setContent(div)
};
var _renderMarker = (context)=> {
var content = ``;
var offset = new AMap.Pixel(-12.5, -12.5);
context.marker.setContent(content)
context.marker.setOffset(offset)
}
this.cluster = new AMap.MarkerCluster(this.map, markerArrcluster, {
gridSize: gridSize, // 设置网格像素大小
renderClusterMarker: _renderClusterMarker, // 自定义聚合点样式
renderMarker: _renderMarker, // 自定义非聚合点样式
});
this.cluster.on('click',(e)=>{
if(e.clusterData.length == 1){
}
})
});
}
ngOnInit(): void {
this.getAllFireForce()
setTimeout(() => {
var mySwiper = new Swiper('.swiper-container', {
slidesPerView: 10,//每页显示的个数
slidesPerGroup: 3,//点击一次需要跳多少次
// 如果需要前进后退按钮
navigation: {
nextEl: '.swiper-button-next',
prevEl: '.swiper-button-prev',
},
})
this.createMap()
}, 0);
}
//获得所有联动力量
allLinkageForceObj:any//获得的所有联动力量
dataLength:any //获取的数据一共多少条
PageNumber:any = 1 //当前第几页
getAllFireForce(){
let MinIntegrity = 0
let MaxIntegrity = 1.1
if(this.searchForm.integrityNum == '0'){
MinIntegrity = 0
MaxIntegrity = 0.5
}else if(this.searchForm.integrityNum == '1'){
MinIntegrity = 0.5
MaxIntegrity = 0.6
}else if(this.searchForm.integrityNum == '2'){
MinIntegrity = 0.6
MaxIntegrity = 0.7
}else if(this.searchForm.integrityNum == '3'){
MinIntegrity = 0.7
MaxIntegrity = 0.8
}else if(this.searchForm.integrityNum == '4'){
MinIntegrity = 0.8
MaxIntegrity = 0.9
}else if(this.searchForm.integrityNum == '5'){
MinIntegrity = 0.9
MaxIntegrity = 1.1
}else if(this.searchForm.integrityNum == '-1'){
MinIntegrity = 0
MaxIntegrity = 1.1
}
let params:any = {
Keyword : this.searchForm.name ? this.searchForm.name : '',
MinIntegrity : MinIntegrity,
MaxIntegrity : MaxIntegrity,
PageSize : 15,
PageNumber : this.PageNumber,
}
this.http.get('/api/LinkageForces',{params:params}).subscribe((data:any) => {
this.dataLength = data.totalCount
this.allLinkageForceObj = data
})
}
//选择要显示的联动力量
selectedLinkageForce(item){
this.isGisTopBox = false
if(this.LinkageForceDetailInfo.id != item.id){
this.clearData()
this.LinkageForceDetailInfo = item
item.location?this.positionLngLat = item.location:null
this.AttachmentArr = JSON.parse(item.relevantInfomationData)
if(this.newPositionMarker){
this.map.remove(this.newPositionMarker);
}
if(item.location && item.location.x){//如果已经标注单位坐标
this.map.setCenter([item.location.x,item.location.y]);
this.newPositionMarker = new AMap.Marker({
position: [item.location.x,item.location.y],
content: this.newPositionMarkerContent,
offset: new AMap.Pixel(-15, -18)
})
// 将 markers 添加到地图
this.map.add(this.newPositionMarker);
}
}
}
//搜索
searchList(){
this.getAllFireForce()
}
//重置搜索
reset(){
this.searchForm = {
name:'',
integrityNum:''
}
this.getAllFireForce()
}
//分页事件
chagePage(e){
this.PageNumber = e.pageIndex+1
this.getAllFireForce()
}
//js乘法
accMul(arg1,arg2,fix) {
if(!parseInt(fix)==fix)
{
return;
}
var m=0,s1=arg1.toString(),s2=arg2.toString();
try{m+=s1.split(".")[1].length}catch(e){}
try{m+=s2.split(".")[1].length}catch(e){}
if(m>fix){
return (Math.round(Number(s1.replace(".",""))*Number(s2.replace(".",""))/Math.pow(10,m-fix))/Math.pow(10,fix));
}else if(m<=fix){
return (Number(s1.replace(".",""))*Number(s2.replace(".",""))/Math.pow(10,m)).toFixed(fix);
}else{
return (arg1*arg2).toFixed(fix).toString();
}
}
//完整度颜色
integrity(width){
let _this = this
let style:any = {}
style.width = width +'%';
if(width < 30){
style.background = '#FF5D4A'
}
if(width >= 30 && width < 60){
style.background = '#FFDD00'
}
if(width >= 60){
style.background = '#5CD64E'
}
return style
}
//删除某条联动力量
deleteLinkageForc(item,e){
e.stopPropagation()
let isDelete = window.confirm(`确定要删除${item.name}吗`)
if(isDelete){
this.http.delete(`/api/LinkageForces/${item.id}`).subscribe(data => {
let config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('删除成功','确定',config);
if(item.id == this.LinkageForceDetailInfo.id){
this.LinkageForceDetailInfo.linkageForceType = null
}
this.getAllFireForce()
})
}
}
//当前点击tab页面第几个
tabIndex:any = 1
selectedTab(index){
this.tabIndex = index
}
//联动力量详情提交信息
LinkageForceDetailInfo:any = {
// id:'',//编号
linkageForceType:'',
name:'',//名称
phoneNumber:'',//联系电话
faxNumber:'',//传真
remark:'',//备注
administrativeRegion:'',//行政区
address:'',//地址
location:{
x:'',
y:''
},
contactName:'',//联系人姓名
contactTitle:'',//联系人职务
contactPhone:'',//联系人电话
serviceContent:'',//服务内容
resourceRemark:'',//资源说明
relevantInfomationData:[]//相关资料
}
//清空表单数据
clearData(){
this.deletedFile = []//清空相关资料已删除缓存
this.AttachmentArr = []//清空相关资料
this.positionLngLat = {x:'',y:''}
this.atLastPositionLngLat = {x:'',y:''}
this.LinkageForceDetailInfo = {
// id:'',//编号
linkageForceType:'',
name:'',//名称
phoneNumber:'',//联系电话
faxNumber:'',//传真
remark:'',//备注
administrativeRegion:'',//行政区
address:'',//地址
location:{
x:'',
y:''
},
contactName:'',//联系人姓名
contactTitle:'',//联系人职务
contactPhone:'',//联系人电话
serviceContent:'',//服务内容
resourceRemark:'',//资源说明
relevantInfomationData:[]//相关资料
}
}
//新增联动力量
selectedFireForceTypeIndex:any//新增消防力量名称
addLinkageForce(){
const dialogRef = this.dialog.open(AddLinkageForce, {
data: {},
id:'addLinkageForce'
});
dialogRef.afterClosed().subscribe(
data=>{
if(typeof data === 'number' && !isNaN(data)){
this.clearData()
this.LinkageForceDetailInfo.linkageForceType = data
this.newPositionMarker ? this.map.remove(this.newPositionMarker) : null
this.map.setCity('上海市');
}
}
)
}
//保存
save(){
if(!this.LinkageForceDetailInfo.name){
alert('名称必填')
return
}
this.isMasklayer = true
//删除一下数据库的文件
if(this.deletedFile.length != 0){
this.deletedFile.forEach(item => {
this.http.delete(`/api/Objects/PlanPlatform/${item.objectName}`).subscribe(data=>{
// console.log('删除原文件成功')
})
});
}
this.LinkageForceDetailInfo.location = {x:'',y:''}
this.LinkageForceDetailInfo.relevantInfomationData = JSON.stringify(this.AttachmentArr)
if(this.atLastPositionLngLat.x){
this.LinkageForceDetailInfo.location.x = this.atLastPositionLngLat.x
this.LinkageForceDetailInfo.location.y = this.atLastPositionLngLat.y
}else{
this.LinkageForceDetailInfo.location = null
}
let body = this.LinkageForceDetailInfo
if(this.LinkageForceDetailInfo.id){
this.http.put(`/api/LinkageForces/${this.LinkageForceDetailInfo.id}`,body).subscribe((data:any) =>{
this.isMasklayer = false
let config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('修改成功','确定',config);
this.getAllFireForce()
})
}else{
this.http.post('/api/LinkageForces',body).subscribe((data:any) =>{
this.isMasklayer = false
let config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('保存成功','确定',config);
this.LinkageForceDetailInfo = data
this.getAllFireForce()
})
}
}
//关闭
close(){
this.LinkageForceDetailInfo={}
this.newPositionMarker ? this.map.remove(this.newPositionMarker) : null
}
map:any
placeSearch:any//构造地点查询类
isMapLabel:boolean = false //是否已经标记坐标
newPositionMarkerContent:any =
'