Browse Source

[新增]完善消防力量采集 完成联动力量信息采集功能 修复编织工及消防要素icon点击bug 完善gis管理水源和单位标点查看

zhuzhou
邵佳豪 4 years ago
parent
commit
82a7aa3340
  1. 4
      src/app/data-collection/data-collection.module.ts
  2. 15
      src/app/data-collection/linkage-forces/addLinkageForce.html
  3. 258
      src/app/data-collection/linkage-forces/linkage-forces.component.html
  4. 518
      src/app/data-collection/linkage-forces/linkage-forces.component.scss
  5. 760
      src/app/data-collection/linkage-forces/linkage-forces.component.ts
  6. 1
      src/app/data-collection/linkage-forces/viewdetails.html
  7. 2
      src/app/data-collection/water-collection/water-collection.component.html
  8. 2
      src/app/data-collection/water-collection/water-collection.component.ts
  9. 2
      src/app/gis-management/gis-labeling/gis-labeling.component.html
  10. 504
      src/app/gis-management/gis-labeling/gis-labeling.component.ts
  11. 44
      src/app/ui/collection-tools-plan/collection-tools.component.html
  12. 2
      src/app/ui/collection-tools-plan/collection-tools.component.ts
  13. 44
      src/app/ui/collection-tools/collection-tools.component.html
  14. 1
      src/app/ui/collection-tools/collection-tools.component.scss
  15. 13
      src/app/ui/collection-tools/collection-tools.component.ts
  16. 16
      src/app/ui/collection-tools/save.ts
  17. 2
      src/app/ui/collection-tools/saveTwo.html
  18. 2
      src/app/working-area/working-area.component.ts
  19. BIN
      src/assets/images/其他.png
  20. BIN
      src/assets/images/古建筑.png
  21. BIN
      src/assets/images/轨道交通.png
  22. BIN
      src/assets/linkageForces/交通.png
  23. BIN
      src/assets/linkageForces/住建.png
  24. BIN
      src/assets/linkageForces/公安.png
  25. BIN
      src/assets/linkageForces/医疗.png
  26. BIN
      src/assets/linkageForces/安监.png
  27. BIN
      src/assets/linkageForces/市政.png
  28. BIN
      src/assets/linkageForces/应急管理.png
  29. BIN
      src/assets/linkageForces/民政.png
  30. BIN
      src/assets/linkageForces/气象局.png
  31. BIN
      src/assets/linkageForces/水利.png
  32. BIN
      src/assets/linkageForces/海事.png
  33. BIN
      src/assets/linkageForces/燃气局.png
  34. BIN
      src/assets/linkageForces/环保局.png
  35. BIN
      src/assets/linkageForces/电力局.png
  36. BIN
      src/assets/linkageForces/通信.png
  37. 12
      src/styles.scss

4
src/app/data-collection/data-collection.module.ts

@ -45,11 +45,11 @@ import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { DataCollectionRoutingModule } from './data-collection.routing';
import { AddWater, WaterCollectionComponent } from './water-collection/water-collection.component';
import { AddFireForce, FireForceComponent, ViewDetails } from './fire-force/fire-force.component';
import { LinkageForcesComponent } from './linkage-forces/linkage-forces.component';
import { AddLinkageForce, LinkageForcesComponent, ViewDetails2 } from './linkage-forces/linkage-forces.component';
import { NzTreeModule } from 'ng-zorro-antd/tree';
@NgModule({
declarations: [WaterCollectionComponent, FireForceComponent, LinkageForcesComponent,AddWater,AddFireForce,ViewDetails],
declarations: [WaterCollectionComponent, FireForceComponent, LinkageForcesComponent,AddWater,AddFireForce,ViewDetails,AddLinkageForce,ViewDetails2],
imports: [
CommonModule,
A11yModule,

15
src/app/data-collection/linkage-forces/addLinkageForce.html

@ -0,0 +1,15 @@
<div class="addLinkageForceBox">
<div class="topbox">
<span>新增联动力量</span>
</div>
<div class="contant">
<div (click)="selecteAddType(item,key)" *ngFor="let item of addList;let key = index" [ngClass]="{'selectedDiv': item.id == selectedFireForceTypeIndex}">
<img [src]="item.imgUrl" alt="">
{{item.name}}
</div>
</div>
<div class="btnbox">
<button mat-flat-button color="primary" (click)="confirm()">确定</button>
<button mat-flat-button style="background-color: #F2F4F6;" mat-dialog-close>取消</button>
</div>
</div>

258
src/app/data-collection/linkage-forces/linkage-forces.component.html

@ -1,8 +1,260 @@
<div class="box">
<div class="box" style="width: 100%;height: 100%;overflow: hidden;">
<div class="listbox">
<div class="topbox">
<div class="add">
<div>
<mat-slide-toggle color="primary" (change)='slideChange($event)' checked labelPosition='before'>列表过滤</mat-slide-toggle>
</div>
<div>
<button (click)="reset()" style="width: 68px;margin-right: 12px;" mat-flat-button color="primary">重置</button>
<button (click)="addLinkageForce()" style="width: 68px;" mat-flat-button color="primary">新增</button>
</div>
</div>
<div class="searchbox" *ngIf="isCheckedOfSearchDiv">
<div class="inputbox">
<span>
关键字:
</span>
<input type="text" placeholder="请输入名称/类别" [(ngModel)]="searchForm.name"/>
</div>
<div class="inputbox">
<span>
完整度:
</span>
<select [(ngModel)]="searchForm.integrityNum" [ngClass]="{'gray': searchForm.integrityNum == ''}">
<option value='' selected disabled style='display:none;'>请选择</option>
<option *ngFor="let item of listIntegrityNum" [value]="item.id">{{item.name}}</option>
</select>
</div>
<div class="searchbtn">
<button (click)="searchList()" style="width: 100%;" mat-flat-button color="primary"><mat-icon style="width: 20px;height: 20px;font-size: 20px;">search</mat-icon>搜索</button>
</div>
</div>
</div>
<div style="height: 1px;width: 100%;background-color: #F2F4F6;"></div>
<div class="contantbox">
<div class="title">
<span>消防队</span>
<span>完整度</span>
</div>
<div class="linkageForceList">
<ul *ngIf="allLinkageForceObj && allLinkageForceObj.items.length != 0">
<li *ngFor="let item of allLinkageForceObj.items" (click)="selectedLinkageForce(item)" [ngClass]="{'selectedLi': item.id == LinkageForceDetailInfo.id}">
<div class="name" [title]="item.name">{{item.name}}</div>
<div class="integrity">
<span class="integrityNum">
{{accMul(item.integrityScore.toFixed(3),100,1)}}%
</span>
<div class="integrityColorDiv" [style]="integrity((item.integrityScore.toFixed(2) * 100).toFixed())">
</div>
</div>
<div class="deletebtn" (click)="deleteLinkageForc(item,$event)"><mat-icon>highlight_off</mat-icon></div>
</li>
</ul>
</div>
<div class="paginator">
<mat-paginator [length]="dataLength" [pageSize]="15" (page)="chagePage($event)"></mat-paginator>
</div>
</div>
</div>
<div class="mapbox">
<div class="mapbox" id="linkageForcesSwiper">
<div class="mapcheckbox swiper-container">
<div class="swiper-wrapper">
<mat-checkbox class="swiper-slide" color="primary" *ngFor="let item of checkBoxList">
<span>
<img [src]="item.imgUrl" alt="">
{{item.name}}
</span>
</mat-checkbox>
</div>
<!-- 如果需要导航按钮 -->
<div style="left: 2px;top: 52%;" class="swiper-button-prev"></div>
<div style="top: 52%;"class="swiper-button-next"></div>
</div>
<div id="map" class="map" style="overflow: hidden;">
<div id="container"></div>
<div class="gistopbox hidden" [ngClass]="{'show': isGisTopBox}">
<div class="inputBox">
<span>搜索: </span>
<input name="position" [(ngModel)]="searchTitle" id="tipinput" class="positionInput" type="text" autocomplete="off">
</div>
</div>
</div>
<div class="detailsbox" *ngIf="LinkageForceDetailInfo.linkageForceType || LinkageForceDetailInfo.linkageForceType == '0'">
<div class="masklayer" *ngIf="isMasklayer">
<mat-spinner [diameter]='30'></mat-spinner>
<span>请等待...</span>
</div>
<div class="masklayer" *ngIf="isMasklayerUploading">
<mat-progress-bar class="progressbar" mode="determinate" [value]="progressBarValue"></mat-progress-bar>
<span>上传中...({{progressBarValue}}%)</span>
<button (click)="cancelUploading()" class="cancelbtn" mat-flat-button>取消上传</button>
</div>
<div class="masklayer" *ngIf="isMasklayerDownload">
<mat-progress-bar class="progressbar" mode="determinate" [value]="progressBarValue"></mat-progress-bar>
<span>下载中...({{progressBarValue}}%)</span>
</div>
<div class="tabsbox">
<div class="tabs">
<div (click)="selectedTab(1)" [ngClass]="{'selectedBtn': tabIndex == 1}">
<span>详情</span>
</div>
<div (click)="selectedTab(2)" [ngClass]="{'selectedBtn': tabIndex == 2}">
<span>相关资料</span>
</div>
</div>
<div class="btnbox">
<div class="uploadAttachment" *ngIf="tabIndex == 2">
<button mat-flat-button color="primary">
<mat-icon>attach_file</mat-icon>
上传附件
</button>
<a href="javascript:;" class="a-upload">
<input type="file" (change)='uploadAttachment($event)'>
</a>
</div>
<span class="save" (click)="save()"><mat-icon>save</mat-icon>保存</span>
<span class="submitAudit"><mat-icon>open_in_browser</mat-icon>提交审核</span>
</div>
</div>
<!-- 详情 -->
<div class="contant" *ngIf="tabIndex == 1">
<div>
<p>基本信息</p>
<mat-grid-list cols="6" rowHeight="40px">
<mat-grid-tile colspan='3' rowspan='1'>
<span>
<span style="color: red;">*</span>
类型:
</span>
<select disabled style="width: 67.7%;" [(ngModel)]="LinkageForceDetailInfo.linkageForceType">
<option *ngFor="let item of checkBoxList" [value]="item.id">{{item.name}}</option>
</select>
</mat-grid-tile>
<mat-grid-tile colspan='3' rowspan='1'>
<span>
<span style="color: red;">*</span>
名称:
</span>
<input type="text" style="width: 63%;" [(ngModel)]="LinkageForceDetailInfo.name">
</mat-grid-tile>
<mat-grid-tile colspan='3' rowspan='1'>
<span>
单位联系电话:
</span>
<input type="text" [(ngModel)]="LinkageForceDetailInfo.phoneNumber">
</mat-grid-tile>
<mat-grid-tile colspan='3' rowspan='1'>
<span>
单位传真:
</span>
<input type="text" [(ngModel)]="LinkageForceDetailInfo.faxNumber">
</mat-grid-tile>
<mat-grid-tile colspan='6' rowspan='2'>
<span>
备注:
</span>
<textarea [(ngModel)]="LinkageForceDetailInfo.remark" style="height: 80%;width: 84.5%;" name="" id="" cols="30" rows="10"></textarea>
</mat-grid-tile>
</mat-grid-list>
<p>位置信息</p>
<mat-grid-list cols="6" rowHeight="40px">
<mat-grid-tile colspan='3' rowspan='1'>
<span>
行政区:
</span>
<input type="text" style="width: 26%;margin-right: 6%;" [(ngModel)]="LinkageForceDetailInfo.administrativeRegion">
<span>
地址:
</span>
<input type="text" style="width: 26%;margin-right: 6%;" [(ngModel)]="LinkageForceDetailInfo.address">
</mat-grid-tile>
<mat-grid-tile colspan='3' rowspan='1'>
<span>
经度:
</span>
<input [(ngModel)]="positionLngLat.x" disabled type="text" style="width: 26%;margin-right: 6%;">
<span>
纬度:
</span>
<input [(ngModel)]="positionLngLat.y" disabled type="text" style="width: 26%;margin-right: 6%;">
<button (click)="setPosition()" style="width:85px;text-align: center;" mat-flat-button color="primary">
<mat-icon style="width: 20px;height: 20px;font-size: 20px;">place</mat-icon>位置
</button>
</mat-grid-tile>
</mat-grid-list>
<p>联系人</p>
<mat-grid-list cols="6" rowHeight="40px">
<mat-grid-tile colspan='2' rowspan='1'>
<span>
联系人:
</span>
<input type="text" [(ngModel)]="LinkageForceDetailInfo.contactName">
</mat-grid-tile>
<mat-grid-tile colspan='2' rowspan='1'>
<span>
职务:
</span>
<input type="text" [(ngModel)]="LinkageForceDetailInfo.contactTitle">
</mat-grid-tile>
<mat-grid-tile colspan='2' rowspan='1'>
<span>
电话:
</span>
<input type="text" [(ngModel)]="LinkageForceDetailInfo.contactPhone">
</mat-grid-tile>
</mat-grid-list>
<p>应急信息</p>
<mat-grid-list cols="6" rowHeight="40px">
<mat-grid-tile colspan='3' rowspan='2'>
<span>
服务内容:
</span>
<textarea style="height: 80%;width: 70%;" name="" id="" cols="30" rows="10" [(ngModel)]="LinkageForceDetailInfo.serviceContent"></textarea>
</mat-grid-tile>
<mat-grid-tile colspan='3' rowspan='2'>
<span>
资源说明:
</span>
<textarea style="height: 80%;width: 70%;" name="" id="" cols="30" rows="10" [(ngModel)]="LinkageForceDetailInfo.resourceRemark"></textarea>
</mat-grid-tile>
</mat-grid-list>
</div>
</div>
<!-- 相关资料 -->
<div class="contant" *ngIf="tabIndex == 2">
<div class="fileDivBox" *ngFor="let item of AttachmentArr" >
<mat-icon class="deleteFile" (click)="deleteFile(item,$event)">highlight_off</mat-icon>
<div class="imgbox">
<img *ngIf="item.fileName.split('.')[item.fileName.split('.').length-1] == 'png'
|| item.fileName.split('.')[item.fileName.split('.').length-1] == 'jpg'
|| item.fileName.split('.')[item.fileName.split('.').length-1] == 'JPG'"
class="thumbnailImg" src="/api/Objects/PlanPlatform/{{item.objectName}}" alt="">
<img *ngIf="item.fileName.split('.')[item.fileName.split('.').length-1] == 'docx'
|| item.fileName.split('.')[item.fileName.split('.').length-1] == 'doc'"
class="thumbnailImg" src="/assets/images/word.jpg" alt="">
<img *ngIf="item.fileName.split('.')[item.fileName.split('.').length-1] == 'pdf'"
class="thumbnailImg" src="/assets/images/pdf.jpg" alt="">
<img *ngIf="item.fileName.split('.')[item.fileName.split('.').length-1] == 'txt'"
class="thumbnailImg" src="/assets/images/txt.jpg" alt="">
<img *ngIf="item.fileName.split('.')[item.fileName.split('.').length-1] == 'mp4'"
class="thumbnailImg" src="/assets/images/vedio.jpg" alt="">
</div>
<span [title]="item.fileName">{{item.fileName}}</span>
<button (click)="clickFile(item)" class="btn btn1" mat-flat-button color="primary">查看</button>
<button (click)="download (item)" class="btn btn2" mat-flat-button color="primary">下载</button>
</div>
</div>
</div>
</div>
</div>
<div id="viewerjs" style="display:none">
</div>

518
src/app/data-collection/linkage-forces/linkage-forces.component.scss

@ -5,14 +5,532 @@
display: flex;
box-sizing: border-box;
padding: 10px;
font-size: 16px;
font-family: Source Han Sans CN;
font-weight: 400;
color: #000000;
}
.listbox{
width: 400px;
height: 100%;
background-color: #fff;
display: flex;
flex-direction: column;
.topbox{
max-height: 200px;
box-sizing: border-box;
padding: 10px 22px 22px;
.add{
height: 36px;
line-height: 36px;
display: flex;
justify-content: space-between;
}
.searchbox{
.inputbox{
width: 100%;
height: 36px;
font-size: 14px;
line-height: 36px;
margin: 10px 0;
display: flex;
span{
margin-right: 5px;
}
select,input{
flex: 1;
background-color: #F2F4F6;
border: 0;
border-radius: 5px;
box-sizing: border-box;
padding:0 8px;
}
.gray{
color: gray;
}
// input::-moz-placeholder {
// color: rgba(90, 83, 83, 0.89);
// opacity: 1;
// }
// input:-ms-input-placeholder {
// color: rgba(90, 83, 83, 0.89);;
// }
// input::-webkit-input-placeholder {
// color: rgba(90, 83, 83, 0.89);;
// }
}
}
}
.contantbox{
flex: 1;
overflow-y: auto;
display: flex;
flex-direction: column;
.title{
display: flex;
justify-content: space-between;
width: 100%;
box-sizing: border-box;
padding: 0 33px 0 22px;
height: 36px;
line-height: 36px;
span{
font-size: 14px;
font-weight: 500;
}
}
.linkageForceList{
flex: 1;
overflow-y: auto;
li{
cursor: pointer;
width: 100%;
height: 36px;
line-height: 36px;
display: flex;
align-items: center;
font-size: 14px;
div{
float: left;
box-sizing: border-box;
}
.name{
text-align: left;
width: 60%;
padding-left: 22px;
white-space:nowrap;
overflow:hidden;
text-overflow:ellipsis;
}
.integrity{
height: 58%;
width: 32%;
position: relative;
background-color: #F2F4F6;
.integrityNum{
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
color: black;
font-size: 13px;
cursor: default;
}
.integrityColorDiv{
height: 100%;
}
}
.deletebtn{
flex: 1;
text-align: center;
mat-icon{
width: 20px;
height: 20px;
cursor: pointer;
font-size: 20px;
vertical-align: text-top;
color: rgba(49, 46, 46, 0.144);
}
mat-icon:hover{
color: #000;
}
}
}
li:hover{
background-color: #b3d3ee;
}
.selectedLi{
background-color: #b3d3ee;
}
}
.paginator{
height: 56px;
width: 100%;
}
}
}
.mapbox{
flex: 1;
margin-left: 10px;
background-color: #fff;
display: flex;
overflow: hidden;
flex-direction: column;
.mapcheckbox,.swiper-container{
width: 100%;
height: 50px;
.swiper-wrapper{
flex: 1;
display: flex;
height: 50px;
line-height: 50px;
}
mat-checkbox{
font-size: 15px;
span{
display: flex;
justify-content: center;
align-items: center;
img{
margin-right: 3px;
}
}
}
mat-checkbox:nth-child(1){
margin-left: 20px;
}
}
#map{
flex: 1;
position: relative;
#container{
width: 100%;
height: 100%;
}
.gistopbox{
position: absolute;
box-shadow: 0px 3px 6px rgba(0, 0, 0, 0.16);
border-radius: 5px;
top: 3px;
width: 30%;
height:40px;
background: #FFFFFF;
display: flex;
align-items: center;
cursor: default;;
.inputBox{
width: 100%;
display: flex;
align-items: center;
justify-content: center;
box-sizing: border-box;
font-size: 14px;
.positionInput{
border: 0;
border-radius: 6px;
width: 80%;
height: 28px;
background: #F2F2F2;
margin-left: 8px;
box-sizing: border-box;
padding-left: 10px;
}
}
}
.hidden{
opacity: 0;
z-index: -1;
}
.show{
opacity: 1;
z-index: 1;
}
}
.detailsbox{
width: 100%;
height:500px;
position: relative;
.tabsbox{
width: 100%;
height: 40px;
overflow: hidden;
overflow-x: auto;
line-height: 40px;
display: flex;
justify-content: space-between;
font-size: 15px;
.tabs{
div{
float: left;
width: 120px;
text-align: center;
cursor: pointer;
color: #000000;
opacity: 0.4;
border-right: 1px solid #F2F4F6;
}
.selectedBtn{
background-color: #2196F3;
color: #fff;
opacity: 1;
}
}
.btnbox{
display: flex;
align-items: center;
.uploadAttachment{
display: inline-block;
margin-right: 20px;
width: 120px;
text-align: center;
height: 28px;
line-height: 28px;
position: relative;
button{
width: 100%;
height: 28px;
line-height: 28px;
mat-icon{
transform: rotate(25deg);
font-size: 20px;
width: 20px;
height: 20px;
}
}
.a-upload{
display: inline-block;
position: absolute;
left: 0;
top: 0;
display: inline-block;
width: 100%;
height: 100%;
opacity: 0;
input{
width: 100%;
height: 100%;
cursor: pointer;
}
}
}
span{
display: inline-block;
cursor: pointer;
color: #2196F3;
mat-icon{
vertical-align: text-top;
font-size: 20px;
width: 20px;
height: 20px;
}
}
span:hover{
text-decoration: underline;
}
.submitAudit{
margin: 0 30px;
}
}
}
.contant{
width: 100%;
height:460px;
overflow-y: auto;
p{
color: #2196F3;
background-color: #F2F4F6;
height: 33px;
line-height: 33px;
box-sizing: border-box;
padding-left: 20px;
font-size: 15px;
}
span{
font-size: 15px;
}
input,select{
height: 30px;
line-height: 30px;
box-sizing: border-box;
padding: 0 12px;
width: 60%;
margin-left: 5px;
border: 1px solid #EBEBEB;
border-radius: 5px;
}
textarea{
width: 89%;
margin-left: 5px;
height: 85%;
border: 1px solid #EBEBEB;
border-radius: 5px;
}
.longinput{
width: 74%;
}
.unitDiv{
width: 60%;
position: relative;
input,select{
width: 100%;
box-sizing: border-box;
padding-right: 50px;
}
.unit{
position: absolute;
right: 13px;
top: 4px;
color: #000000;
opacity: 0.4;
}
}
.smallwidth{
width: 30%;
}
// 相关资料
.fileDivBox{
position: relative;
float: left;
border: 1px solid #EBEBEB;
width: 160px;
height: 162px;
box-sizing: border-box;
padding: 16px 16px 0;
display: flex;
flex-direction: column;
margin: 12px;
align-items: center;
cursor: pointer;
.imgbox{
width: 134px;
height: 110px;
display: flex;
justify-content: center;
align-items: center;
.thumbnailImg{
width: 134px;
height: 110px;
}
}
span{
width: 100%;
text-align: center;
margin-top: 5px;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
color: gray;
font-size: 14px;
}
.deleteFile{
position: absolute;
right: 0;
top: 0;
width: 18px;
height: 18px;
font-size: 18px;
display: none;
}
.btn{
position: absolute;
height: 30px;
line-height: 30px;
font-size: 14px;
display: none;
}
.btn1{
top: 37px;
}
.btn2{
top: 78px;
}
}
.fileDivBox:hover{
border: 1px solid #000;
.deleteFile{
display: block;
}
.deleteFile:hover{
color: red;
}
.btn{
display: block;
}
}
}
.masklayer{
position: absolute;
left: 0;
top: 0;
z-index: 2000;
width: 100%;
height: 100%;
background: rgba(0,0,0,0.2);
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
span{
font-size: 14px;
margin-top: 5px;
}
.progressbar{
width: 15%;
}
.cancelbtn{
height: 32px;
line-height: 32px;
font-size: 14px;
margin-top: 12px;
}
}
}
}
.addLinkageForceBox{
width: 530px;
height: 262px;
display: flex;
flex-direction: column;
.topbox{
width: 100%;
height: 40px;
line-height: 40px;
background-color: #2196F3;
text-align: center;
color: #FFFFFF;
font-size: 15px;
}
.contant{
flex: 1;
box-sizing: border-box;
padding:20px 30px;
div{
width:86px;
margin: 3px;
height: 36px;
float: left;
line-height: 36px;
text-align: center;
background-color: #F2F4F6;
font-size: 14px;
cursor: pointer;
border: 1px solid #fff;
border-radius: 4px;
display: flex;
justify-content: center;
align-items: center;
img{
margin-right: 3px;
}
}
.selectedDiv{
background-color: #fff;
border: 1px solid #2196F3;
}
}
.btnbox{
width: 100%;
height: 50px;
box-sizing: border-box;
padding: 0px 30px;
display: flex;
align-items: flex-start;;
justify-content: center;
button{
width: 80px;
height: 36px;
line-height: 36px;
margin: 0 20px;
}
}
}

760
src/app/data-collection/linkage-forces/linkage-forces.component.ts

@ -1,5 +1,16 @@
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 AMap: any;
@Component({
selector: 'app-linkage-forces',
templateUrl: './linkage-forces.component.html',
@ -7,9 +18,754 @@ import { Component, OnInit } from '@angular/core';
})
export class LinkageForcesComponent implements OnInit {
constructor() { }
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'},
{id:1,name:'电力局',imgUrl:'/assets/linkageForces/电力局.png'},
{id:2,name:'公安',imgUrl:'/assets/linkageForces/公安.png'},
{id:3,name:'海事',imgUrl:'/assets/linkageForces/海事.png'},
{id:4,name:'环保局',imgUrl:'/assets/linkageForces/环保局.png'},
{id:5,name:'交通',imgUrl:'/assets/linkageForces/交通.png'},
{id:6,name:'民政',imgUrl:'/assets/linkageForces/民政.png'},
{id:7,name:'气象局',imgUrl:'/assets/linkageForces/气象局.png'},
{id:8,name:'燃气局',imgUrl:'/assets/linkageForces/燃气局.png'},
{id:9,name:'市政',imgUrl:'/assets/linkageForces/市政.png'},
{id:10,name:'水利',imgUrl:'/assets/linkageForces/水利.png'},
{id:11,name:'通信',imgUrl:'/assets/linkageForces/通信.png'},
{id:12,name:'医疗',imgUrl:'/assets/linkageForces/医疗.png'},
{id:13,name:'应急管理',imgUrl:'/assets/linkageForces/应急管理.png'},
{id:14,name:'住建',imgUrl:'/assets/linkageForces/住建.png'}
]
ngOnInit(): void {
this.getAllFireForce()
window.onload = () => {
var mySwiper = new Swiper('.swiper-container', {
slidesPerView: 10,//每页显示的个数
slidesPerGroup: 3,//点击一次需要跳多少次
// 如果需要前进后退按钮
navigation: {
nextEl: '.swiper-button-next',
prevEl: '.swiper-button-prev',
},
})
}
setTimeout(() => {
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) => {
console.log('所有消防力量列表',data)
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);
}
console.log('当前点击的li',item)
if(item.location && item.location.x){//如果已经标注单位坐标
console.log('开始标注')
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()
console.log('清空了',this.LinkageForceDetailInfo)
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
}
this.LinkageForceDetailInfo.relevantInfomationData = JSON.stringify(this.LinkageForceDetailInfo.relevantInfomationData)
let body = this.LinkageForceDetailInfo
if(this.LinkageForceDetailInfo.id){
this.http.put(`/api/LinkageForces/${this.LinkageForceDetailInfo.id}`,body).subscribe((data:any) =>{
console.log('修改成功',data)
this.isMasklayer = false
let config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('修改成功','确定',config);
// this.LinkageForceDetailInfo.id = data.id
this.getAllFireForce()
})
}else{
this.http.post('/api/LinkageForces',body).subscribe((data:any) =>{
console.log('创建成功',data)
this.isMasklayer = false
let config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('保存成功','确定',config);
this.LinkageForceDetailInfo = data
this.getAllFireForce()
})
}
}
map:any
placeSearch:any//构造地点查询类
isMapLabel:boolean = false //是否已经标记坐标
newPositionMarkerContent:any =
'<div class="custom-content-marker">' +
' <img src="/assets/images/定位.png">' +
'</div>'
newPositionMarkerContentBtn:any =
'<div class="custom-content-marker">' +
' <img src="/assets/images/定位.png">' +
' <div class="btnbox"><img id="setPositionOk" src="/assets/images/ok.png"><span>|</span><img id="setPositionClose" src="/assets/images/close.png"></div>' +
'</div>'
//创建地图
newPositionMarker:any//坐标实例
createMap(){
this.map = new AMap.Map('container', {
zoom:12
})
this.map.setCity('上海市');
//输入提示
var autoOptions = {
input: "tipinput"
};
AMap.plugin(['AMap.PlaceSearch','AMap.AutoComplete'], ()=>{
let auto = new AMap.AutoComplete(autoOptions);
this.placeSearch = new AMap.PlaceSearch(); //构造地点查询类
auto.on("select", (e)=>{
this.newPositionMarker.setPosition([e.poi.location.lng,e.poi.location.lat])
this.positionLngLat = {x: e.poi.location.lng, y: e.poi.location.lat}
this.map.setCenter([e.poi.location.lng,e.poi.location.lat]); //设置地图中心点
});//注册监听,当选中某条记录时会触发
});
if(this.isMapLabel){//如果已经标注单位坐标
console.log('已标注单位位置')
// this.map.setCenter([this.unitinfo.location.x,this.unitinfo.location.y]);
// this.oldPositionMarker = new AMap.Marker({
// position: [this.unitinfo.location.x,this.unitinfo.location.y],
// content: this.newPositionMarkerContent,
// offset: new AMap.Pixel(-15, -18)
// })
// // 将 markers 添加到地图
// this.map.add(this.oldPositionMarker);
}else{
console.log('未标注单位位置')
// this.map.setCity('上海市');
}
}
//点击位置
isGisTopBox:boolean = false //
searchTitle:any = ''//
positionLngLat:any = {x:'',y:''}//临时坐标点
atLastPositionLngLat:any = {x:'',y:''}//最终坐标点
setPosition(){
if(!this.isGisTopBox){
this.isGisTopBox = true
this.newPositionMarker ? this.map.remove(this.newPositionMarker) : null
let center
console.log(789,this.atLastPositionLngLat)
if(this.newPositionMarker && this.atLastPositionLngLat.x){//如果已经标注单位坐标
console.log(1)
center = [this.atLastPositionLngLat.x, this.atLastPositionLngLat.y]
}else if(this.newPositionMarker && !this.atLastPositionLngLat.x && this.LinkageForceDetailInfo.location && this.LinkageForceDetailInfo.location.x){
console.log(2)
center = [this.LinkageForceDetailInfo.location.x, this.LinkageForceDetailInfo.location.y]
}else{
console.log(3)
center = this.map.getCenter(); //获取当前地图中心位置
}
this.newPositionMarker = new AMap.Marker({
draggable: true,
position: center,
content: this.newPositionMarkerContentBtn,
offset: new AMap.Pixel(-15, -18)
});
this.positionLngLat = {x: center.lng || center[0], y: center.lat || center[1]}
this.map.add(this.newPositionMarker);
this.isMapLabel = true
this.newPositionMarker.on('dragend', (e)=>{
this.positionLngLat = {x: e.lnglat.lng, y: e.lnglat.lat}
})
//点击确定
this.renderer2.listen(this.elementRef.nativeElement.querySelector('#setPositionOk'),'click',(event)=>{
this.isGisTopBox = false
this.map.remove(this.newPositionMarker)
this.newPositionMarker = new AMap.Marker({
position: [this.positionLngLat.x,this.positionLngLat.y],
content: this.newPositionMarkerContent,
offset: new AMap.Pixel(-15, -18)
});
this.atLastPositionLngLat = JSON.parse(JSON.stringify(this.positionLngLat))
this.map.add(this.newPositionMarker);
this.positionLngLat = this.atLastPositionLngLat
})
this.renderer2.listen(this.elementRef.nativeElement.querySelector('#setPositionClose'),'click',(event)=>{
this.isGisTopBox = false
this.map.remove(this.newPositionMarker)
if(this.positionLngLat.x && this.positionLngLat.x != 0 && !this.atLastPositionLngLat.x){//直接取消
this.map.remove(this.newPositionMarker)
this.positionLngLat = {}
this.atLastPositionLngLat = {}
}else{
this.newPositionMarker = new AMap.Marker({
position: [this.atLastPositionLngLat.x,this.atLastPositionLngLat.y],
content: this.newPositionMarkerContent,
offset: new AMap.Pixel(-15, -18)
});
this.map.setCenter([this.atLastPositionLngLat.x,this.atLastPositionLngLat.y]); //设置地图中心点
this.map.add(this.newPositionMarker);
this.positionLngLat = this.atLastPositionLngLat
}
})//取消
}
}
//上传附件
file:any; //上传的文件
AttachmentArr:any = []//上传附件地址集合
uploadId:any//分块上传id
objectName:any
progressBarValue:any = 0//分块上传进度
isMasklayer:boolean = false//圆圈遮罩层是否打开
isMasklayerUploading:boolean = false//上传进度条遮罩层是否打开
isMasklayerDownload:boolean = false//下载进度条遮罩层是否打开
uploadAttachment(e){
console.log('选择的文件',e)
this.file = e.target.files[0] || null //上传的文件
let file = e.target.files[0] || null //获取上传的文件
let fileSize = file.size || null //上传文件的总大小
let shardSize = 5 * 1024 * 1024 //5MB一个分片
if (file && fileSize<=shardSize) { //上传文件<=5MB时
this.isMasklayer = true
console.log('file',this.file)
let formData = new FormData()
formData.append("file",file)
//this.selectedFireForce.id 选择的组织机构的id
this.http.post(`/api/Objects/PlanPlatform/LinkageForce/${this.LinkageForceDetailInfo.id}`,formData).subscribe((data:any)=>{
// this.objectName = data.objectName
let obj = {
objectName:data.objectName,
fileName:data.fileName,
fileLength:data.fileLength
}
this.AttachmentArr.push(obj)
this.isMasklayer = false
console.log('上传成功',data)
let config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('上传成功','确定',config);
})
} else if (file && fileSize>shardSize) { //上传文件>5MB时,分块上传
this.isMasklayerUploading = true
let data = {filename: file.name}
this.http.post(`/api/NewMultipartUpload/PlanPlatform/LinkageForce/${this.LinkageForceDetailInfo.id}`,{},{params:data}).subscribe((data:any)=>{ //初始化分段上传
console.log('初始化分块上传成功',data)
this.objectName = data.objectName
this.uploadId = data.uploadId
this.subsectionUploading()
})
}
}
PartNumberETag:any=[]; //每次返回需要保存的信息
//开始分段上传
async subsectionUploading () {
let file = this.file || null //获取上传的文件
let fileSize = file.size || null //上传文件的总大小
let shardSize = 5 * 1024 * 1024 //5MB一个分片
let allSlice = Math.ceil(fileSize / shardSize) //总文件/5MB===共分多少段
for (let i = 0;i < allSlice;i++) { //循环分段上传
let start = i * shardSize //切割文件开始位置
let end = Math.min(fileSize, start + shardSize); //切割文件结束位置
let formData = new FormData()
formData.append("file",file.slice(start, end))
//同步写法实现异步调用
let result = await new Promise((resolve, reject) => {
// await 需要后面返回一个 promise 对象
this.http.post(`/api/MultipartUpload/PlanPlatform/${this.objectName}?uploadId=${this.uploadId}&partNumber=${i+1}`,formData).subscribe((data:any)=>{
let msg = {
"partNumber":data.partNumber || null,
"eTag": data.eTag || null}
resolve(msg) // 调用 promise 内置方法处理成功
})
});
this.PartNumberETag.push(result)
// this.progressBarValue = Number((i/allSlice).toFixed(2))*100
this.progressBarValue = this.accMul(Number((i/allSlice).toFixed(2))*100,1,0)
if (this.PartNumberETag.length === allSlice) {
this.progressBarValue = 100
this.endUploading()}
}//for循环
}
//完成分块上传
endUploading () {
let data = this.PartNumberETag
let paramsData = {uploadId:this.uploadId}
this.http.post(`/api/CompleteMultipartUpload/PlanPlatform/${this.objectName}`,data,{params:paramsData}).subscribe(data=>{
this.PartNumberETag =[] //清空保存返回的信息
let obj = {
objectName:this.objectName,
fileName:this.file.name,
fileLength:this.file.size
}
this.AttachmentArr.push(obj)
this.isMasklayerUploading = false//关闭进度条遮罩层
this.progressBarValue = 0//重置进度数
let config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('上传成功','确定',config);
})
}
//取消分块上传
cancelUploading() {
this.http.delete(`/api/MultipartUpload/PlanPlatform/${this.objectName}?uploadId=${this.uploadId}`).subscribe(data=>{
this.progressBarValue = 0;
this.isMasklayerUploading= false
this.PartNumberETag =[] //清空保存返回的信息
const config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('取消上传成功','确定',config);
})
}
//下载
download (e) {
this.isMasklayerDownload = true //开启下载进度条
let file = e //传递过来的文件元数据
let fileSize = file.fileLength //下载文件的总大小
let shardSize = 3 * 1024 * 1024 //文件大小是否大于10MB
if (file && fileSize<=shardSize) { //<=3MB时直接下载
this.progressBarValue = 60
this.http.get(`/api/Objects/PlanPlatform/${e.objectName}`,{responseType: 'blob'},).subscribe(data=>{
let url = window.URL.createObjectURL(new Blob([data])); //createObjectURL创建一个下载Blob的url地址
let link = document.createElement("a");
link.style.display = "none";
link.href = url;
let fileName = e.fileName ? e.fileName : e.objectName.split('/')[e.objectName.split('/').length-1]
link.setAttribute("download", fileName);
document.body.appendChild(link);
link.click();
this.isMasklayerDownload = false //关闭下载进度条
this.progressBarValue = 0 //初始化进度条
})
} else if (file && fileSize>shardSize) { //>3MB时分块下载
this.blockingDownload(e) //分段下载
}
}
//分段下载并合并
async blockingDownload (e) {
let file = e //传递过来的文件元数据
let fileSize = file.fileLength //下载文件的总大小
let shardSize = 3 * 1024 * 1024 //3MB一个分片
let allSlice = Math.ceil(fileSize / shardSize) //总文件/3MB===共分多少段
let allFile:any = [] //所有的file分段
for (let i=0;i<allSlice;i++) {
let start = i * shardSize //每次下载文件开始位置
let end = Math.min(fileSize, start + shardSize-1); //每次下载文件结束为止
let result = await new Promise ((result,reject)=>{
this.http.get(`/api/Objects/PlanPlatform/${e.objectName}`,{headers:{'range':`bytes= ${start}-${end}`},responseType:'blob'}).subscribe(data=>{
result(data) })
})
allFile.push(result)
// this.progressBarValue = Number((i/allSlice).toFixed(2))*100 //文件进度数
this.progressBarValue = this.accMul(Number((i/allSlice).toFixed(2))*100,1,0)
if (allFile.length === allSlice) { //合并文件输出给浏览器
let url = window.URL.createObjectURL(new Blob(allFile)); //createObjectURL创建一个下载Blob的url地址
let link = document.createElement("a");
link.style.display = "none";
link.href = url;
let fileName = e.fileName ? e.fileName : e.objectName.split('/')[e.objectName.split('/').length-1]
link.setAttribute("download", fileName);
document.body.appendChild(link);
link.click();
this.isMasklayerDownload = false //关闭下载进度条
this.progressBarValue = 0 //初始化进度条
}
} //for循环结束
}
//删除图片
deletedFile:any = []
deleteFile(item,e){
console.log(this.AttachmentArr)
e.stopPropagation()
let isTrue = window.confirm('确定要删除该文件吗?')
if(isTrue){
let index
this.AttachmentArr.forEach((element,key) => {
if(element.objectName == item.objectName){
index = key
}
});
this.AttachmentArr.splice(index,1)
this.deletedFile.push(item)
let config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('删除成功','确定',config);
}
}
//点击文件
clickFile(item){
console.log(item)
let suffix = item.fileName.split('.')[item.fileName.split('.').length-1]
if(suffix == 'png' || suffix == 'jpg' || suffix == 'JPG'){
console.log('这是图片')
let dom = document.getElementById(`viewerjs`)
let pObjs = dom.childNodes;
let node = document.createElement("img")
node.style.display = "none";
node.src = "/api/Objects/PlanPlatform/" + item.objectName;
node.id = 'img'
dom.appendChild(node)
setTimeout(() => {
let viewer = new Viewer(document.getElementById(`viewerjs`), {
hidden:()=>{
dom.removeChild(pObjs[0]);
viewer.destroy();
}
});
node.click();
}, 0);
}
if(suffix == 'docx' || suffix == 'doc' || suffix == 'pdf'){
let config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('暂不支持查看','确定',config);
}
if(suffix == 'mp4'){
const dialogRef = this.dialog.open(ViewDetails2, {//调用open方法打开对话框并且携带参数过去
data: {item:item,type:"video"},
id:'videodialog2'
});
dialogRef.afterClosed().subscribe();
}
}
}
//新增联动力量弹出框
@Component({
selector: 'AddLinkageForce',
templateUrl: './addLinkageForce.html',
styleUrls: ['./linkage-forces.component.scss']
})
export class AddLinkageForce {
constructor(private http: HttpClient,public dialogRef: MatDialogRef<AddLinkageForce>,@Inject(MAT_DIALOG_DATA) public data,public snackBar: MatSnackBar) {}
addList:any = [
{id:0,name:'安监',imgUrl:'/assets/linkageForces/安监.png'},
{id:1,name:'电力局',imgUrl:'/assets/linkageForces/电力局.png'},
{id:2,name:'公安',imgUrl:'/assets/linkageForces/公安.png'},
{id:3,name:'海事',imgUrl:'/assets/linkageForces/海事.png'},
{id:4,name:'环保局',imgUrl:'/assets/linkageForces/环保局.png'},
{id:5,name:'交通',imgUrl:'/assets/linkageForces/交通.png'},
{id:6,name:'民政',imgUrl:'/assets/linkageForces/民政.png'},
{id:7,name:'气象局',imgUrl:'/assets/linkageForces/气象局.png'},
{id:8,name:'燃气局',imgUrl:'/assets/linkageForces/燃气局.png'},
{id:9,name:'市政',imgUrl:'/assets/linkageForces/市政.png'},
{id:10,name:'水利',imgUrl:'/assets/linkageForces/水利.png'},
{id:11,name:'通信',imgUrl:'/assets/linkageForces/通信.png'},
{id:12,name:'医疗',imgUrl:'/assets/linkageForces/医疗.png'},
{id:13,name:'应急管理',imgUrl:'/assets/linkageForces/应急管理.png'},
{id:14,name:'住建',imgUrl:'/assets/linkageForces/住建.png'}
]
selectedFireForceTypeIndex:any = 0
selecteAddType(item,key){
this.selectedFireForceTypeIndex = item.id
}
ngOnInit(): void {
}
confirm(){
this.dialogRef.close(this.selectedFireForceTypeIndex)
}
}
//查看图片大图和视频
@Component({
selector: 'viewdetails',
templateUrl: './viewdetails.html',
styleUrls: ['./linkage-forces.component.scss']
})
export class ViewDetails2 {
// myControl = new FormControl();
//注入MatDialogRef,可以用来关闭对话框
//要访问对话框组件中的数据,必须使用MAT_DIALOG_DATA注入令牌
constructor(private http: HttpClient,public dialogRef: MatDialogRef<ViewDetails2>,@Inject(MAT_DIALOG_DATA) public data) {}
Url:string
onNoClick(): void {
this.dialogRef.close();
}
ngOnInit(): void {
this.Url = '/api/Objects/PlanPlatform/' + this.data.item.objectName
}
closeDialog(){
this.dialogRef.close();
}
}

1
src/app/data-collection/linkage-forces/viewdetails.html

@ -0,0 +1 @@
<video autoplay controls [src]="Url"></video>

2
src/app/data-collection/water-collection/water-collection.component.html

@ -52,7 +52,7 @@
</ul>
</div>
<div class="paginator">
<mat-paginator [length]="dataLength" [pageSize]="30" (page)="chagePage($event)"></mat-paginator>
<mat-paginator [length]="dataLength" [pageSize]="15" (page)="chagePage($event)"></mat-paginator>
</div>
</div>
</div>

2
src/app/data-collection/water-collection/water-collection.component.ts

@ -74,7 +74,7 @@ export class WaterCollectionComponent implements OnInit {
}
let params:any = {
Keyword : this.searchForm.name,
PageSize : 30,
PageSize : 15,
PageNumber : this.PageNumber,
MinIntegrity : MinIntegrity,
MaxIntegrity : MaxIntegrity

2
src/app/gis-management/gis-labeling/gis-labeling.component.html

@ -114,6 +114,7 @@
<span>显示范围 : </span>
<mat-form-field>
<select matNativeControl formControlName="areaUnit" [(ngModel)]="unitAreaDefault">
<option value="-1">全部</option>
<option value="0">当前视野范围</option>
<option value="200">200米</option>
<option value="500">500米</option>
@ -150,6 +151,7 @@
<span>显示范围 : </span>
<mat-form-field>
<select matNativeControl formControlName="areaWater" [(ngModel)]="waterAreaDefault">
<option value="-1">全部</option>
<option value="0">当前视野范围</option>
<option value="200">200米</option>
<option value="500">500米</option>

504
src/app/gis-management/gis-labeling/gis-labeling.component.ts

@ -27,28 +27,14 @@ export class GisLabelingComponent implements OnInit {
{id:'0',name:'消火栓',selected:false},
{id:'1',name:'消防水池',selected:false},
{id:'2',name:'天然水源',selected:false},
// {id:'0',name:'单位地上消火栓',selected:false},
// {id:'0',name:'单位地下消火栓',selected:false},
// {id:'0',name:'市政地上消火栓',selected:false},
// {id:'0',name:'消防水池',selected:false},
// {id:'0',name:'方形储水池',selected:false},
// {id:'0',name:'蓄水池',selected:false},
// {id:'0',name:'原型水塔',selected:false},
// {id:'0',name:'水库',selected:false},
// {id:'0',name:'消防水箱',selected:false},
// {id:'0',name:'码头',selected:false},
// {id:'0',name:'海洋',selected:false},
// {id:'0',name:'河流',selected:false},
// {id:'0',name:'湖泊',selected:false},
// {id:'0',name:'沟渠',selected:false}
]
]
keyUnitForm : FormGroup//gis右上角重点单位表单
watertForm : FormGroup//gis右上角水源表单
selectedUnitList:any = []//选择提交的单位
selectedWaterList:any = []//选择提交的水源
unitAreaDefault:any = '0'//默认单位范围
waterAreaDefault:any = '0'//默认水源范围
unitAreaDefault:any = '-1'//默认单位范围
waterAreaDefault:any = '-1'//默认水源范围
//获得单位循环出来的checkbox列表(formControl实例)
get units():any{
return this.keyUnitForm.get('units')
@ -156,17 +142,19 @@ export class GisLabelingComponent implements OnInit {
//重点单位提交
ketUnitSubmit(value){
if(this.markers.length == 0){
const config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('请先选择一个单位','确定',config);
let paramsdata:any = {
PageSize:99999,
BuildingTypeIdList : this.selectedUnitList.length != 0 ? this.selectedUnitList : ['123']
}
this.http.get("/api/Companies",{params:paramsdata}).subscribe((data:any) => {
this.createUnitMarker(data.items)
})
}else if(!this.mapPattern){
const config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('请切换2D模式使用此功能','确定',config);
}else{
// console.log('提交',this.selectedUnit)
this.circle.setRadius(Number(this.unitAreaDefault))
this.circle.setCenter(this.markers[0]._position)
this.circle.setMap(this.map)
@ -178,32 +166,43 @@ export class GisLabelingComponent implements OnInit {
}else{
Distance = Math.abs(lnglat.offset(0, this.unitAreaDefault).lat - this.selectedUnit.location.y)
}
let paramsdata:any = {
Lon : this.selectedUnit.location.x,
Lat : this.selectedUnit.location.y,
Distance : Distance,
BuildingTypeIdList : this.selectedUnitList.length != 0 ? this.selectedUnitList : ['123']
}
// console.log(666,paramsdata)
this.http.get("/api/Companies",{params:paramsdata}).subscribe((data:any) => {
data.items.forEach((i,index) => {
if(i.id == this.selectedUnit.id){
data.items.splice(index,1)
}
if(this.unitAreaDefault == '-1'){//如果勾选全部
let paramsdata:any = {
PageSize:99999,
BuildingTypeIdList : this.selectedUnitList.length != 0 ? this.selectedUnitList : ['123']
}
this.http.get("/api/Companies",{params:paramsdata}).subscribe((data:any) => {
data.items.forEach((i,index) => {
if(i.id == this.selectedUnit.id){
data.items.splice(index,1)
}
})
this.createUnitMarker(data.items)
})
this.createUnitMarker(data.items)
})
}else{
let paramsdata:any = {
PageSize:99999,
Lon : this.selectedUnit.location.x,
Lat : this.selectedUnit.location.y,
Distance : Distance,
BuildingTypeIdList : this.selectedUnitList.length != 0 ? this.selectedUnitList : ['123']
}
this.http.get("/api/Companies",{params:paramsdata}).subscribe((data:any) => {
data.items.forEach((i,index) => {
if(i.id == this.selectedUnit.id){
data.items.splice(index,1)
}
})
this.createUnitMarker(data.items)
})
}
}
}
//创建单位markers
unitMarkerList:any = []
unitlabelsLayer:any
unitCluster:any //重点单位点聚合实例
createUnitMarker(list){
this.unitlabelsLayer ? this.map.remove(this.unitlabelsLayer) : null
this.unitMarkerList ? this.map.remove(this.unitMarkerList) : null
let markerArr = []
let unitMarkerArrcluster = []
this.unitCluster ? this.unitCluster.setData([]) : null
list.forEach((item) => {
let image
if(item.buildingTypes[0].name.indexOf('高层') != -1){
@ -241,176 +240,262 @@ export class GisLabelingComponent implements OnInit {
}else{
image = '/assets/images/其他.png'
}
var icon = {
// 图标类型,现阶段只支持 image 类型
type: 'image',
// 图片 url
image: image,
// 图片尺寸
size: [32, 32],
// 图片相对 position 的锚点,默认为 bottom-center
anchor: 'center',
};
var text = {
// 要展示的文字内容
content: item.name,
// 文字方向,有 icon 时为围绕文字的方向,没有 icon 时,则为相对 position 的位置
direction: 'bottom',
// 在 direction 基础上的偏移量
offset: [-3, -3],
// 文字样式
style: {
// 字体大小
fontSize: 12,
// 字体颜色
fillColor: '#22886f',
// 描边颜色
strokeColor: '#fff',
// 描边宽度
strokeWidth: 2,
}
// 用于点集合的数组
unitMarkerArrcluster.push({
lnglat : [item.location.x,item.location.y],
image : image,
data : item
})
})
this.map.plugin(["AMap.MarkerClusterer"],() => {
var gridSize = 60
var count = unitMarkerArrcluster.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 labelMarker = new AMap.LabelMarker({
name: item.name, // 此属性非绘制文字内容,仅最为标识使用
position: [item.location.x,item.location.y],
zIndex: 16,
// 将第一步创建的 icon 对象传给 icon 属性
icon: icon,
// 将第二步创建的 text 对象传给 text 属性
text: text,
});
labelMarker.on('click', (e)=>{
// console.log(item)
let markerContent =
`<div style="font-size: 14px" id="gispopupbox">
<div style="color: #0080FF;"><span style="margin-left:8px">${item.name}</span><label style="font-size: 12px; color: #999; margin-left: 10px">${item.address}</label> </div>
<div style="display: flex; margin-top: 10px;margin-left:8px">
<div style="width:240px; overflow: hidden;">: <label style="margin-left: 10px;font-size: 12px;">${item.buildingTypes.length? item.buildingTypes[0].name : "暂无数据"}</label></div>
<div style="flex: 1; margin-left: 25px;">: <label style="margin-left: 10px;font-size: 12px;">${item.contacts || "暂无数据"}</label></div>
</div>
<div style="display: flex; margin-top: 10px;margin-left:8px"">
<div style="width:240px; overflow: hidden;">: <label style="margin-left: 10px;font-size: 12px;"></label></div>
<div style="flex: 1; margin-left: 25px;">: <label style="margin-left: 10px;font-size: 12px;">${item.contacts || "暂无数据"}</label></div>
</div>
<div style="display: flex; margin-top: 10px;margin-left:8px"">
<div style="width:240px; overflow: hidden;">: <label style="margin-left: 10px;font-size: 12px;">${item.organizationName || "暂无数据"}</label></div>
<div style="flex: 1; margin-left: 25px;">: <label style="margin-left: 10px;font-size: 12px;">15022215122</label></div>
</div>
<div style="display: flex; margin-top: 10px;margin-left:8px"">
<div style="width:240px; overflow: hidden;">: <label style="margin-left: 10px;font-size: 12px;"></label></div>
<div style="flex: 1; margin-left: 25px;">: <label style="margin-left: 10px;font-size: 12px;">500</label></div>
</div>
<div style="display: flex; margin-top: 10px;margin-left:8px"">
<div style="width:240px; overflow: hidden;">: <label style="margin-left: 10px;font-size: 12px;"></label></div>
<div style="flex: 1; margin-left: 25px;">: <label style="margin-left: 10px;font-size: 12px;">600</label></div>
</div>
<div style="display: flex; margin-top: 10px;margin-left:8px"">
<div style="width:240px; overflow: hidden;">: <label style="margin-left: 10px;font-size: 12px;">${item.phone || "暂无数据"}</label></div>
</div>
<div style="display: flex; align-items: center; justify-content: center; margin-top: 10px;">
<div class="btn" id="baseInformation"><img src="../../../assets/images/basicinfoicon.png" alt=""></div>
<div class="btn" id="route"><img src="../../../assets/images/navicon.png" alt=""></div>
<div class="btn" id="fullViewNavigation"><img src="../../../assets/images/panoramaicon.png" alt=""></div>
<div class="btn" id="threeeScene"><img src="../../../assets/images/3dicon.png" alt=""></div>
<div class="btn" id="seePlan"><img src="../../../assets/images/planicon.png" alt=""></div>
<div class="btn" id="share"><img src="../../../assets/images/shareicon.png" alt=""></div>
</div>
</div>`
// 创建一个自定义内容的 infowindow 实例
this.infoWindow = new AMap.InfoWindow({
position: [item.location.x,item.location.y],
offset: new AMap.Pixel(0, -30),
content: markerContent,
});
this.infoWindow.open(this.map);
this.renderer2.listen(this.elementRef.nativeElement.querySelector('#baseInformation'),'click',(event)=>{ this.baseInformation(item) })//基本信息点击事件
this.renderer2.listen(this.elementRef.nativeElement.querySelector('#route'),'click',(event)=>{ this.route(item) })//导航点击事件
this.renderer2.listen(this.elementRef.nativeElement.querySelector('#fullViewNavigation'),'click',(event)=>{ this.fullViewNavigation(item) })//全景漫游点击事件
this.renderer2.listen(this.elementRef.nativeElement.querySelector('#threeeScene'),'click',(event)=>{ this.threeeScene(item) })//三维场景点击事件
this.renderer2.listen(this.elementRef.nativeElement.querySelector('#seePlan'),'click',(event)=>{ this.seePlan(item) })//查看预案点击事件
this.renderer2.listen(this.elementRef.nativeElement.querySelector('#share'),'click',(event)=>{ this.share(item) })//分享点击事件
var _renderMarker = (context)=> {
var content = `<img class='clusterImg' src="${context.data[0].image}" alt="">`;
var offset = new AMap.Pixel(-15, -25);
context.marker.setContent(content)
context.marker.setOffset(offset)
}
this.unitCluster = new AMap.MarkerCluster(this.map, unitMarkerArrcluster, {
gridSize: gridSize, // 设置网格像素大小
renderClusterMarker: _renderClusterMarker, // 自定义聚合点样式
renderMarker: _renderMarker, // 自定义非聚合点样式
});
markerArr.push(labelMarker)
})
this.unitlabelsLayer = new AMap.LabelsLayer({
zooms: [3, 20],
zIndex: 1000,
// 该层内标注是否避让
collision: false,
// 设置 allowCollision:true,可以让标注避让用户的标注
// allowCollision: true,
this.unitCluster.on('click',(e)=>{
if(e.clusterData.length == 1){
let item = e.clusterData[0].data
let markerContent =
`<div style="font-size: 14px" id="gispopupbox">
<div style="color: #0080FF;"><span style="margin-left:8px">${item.name}</span><label style="font-size: 12px; color: #999; margin-left: 10px">${item.address}</label> </div>
<div style="display: flex; margin-top: 10px;margin-left:8px">
<div style="width:240px; overflow: hidden;">: <label style="margin-left: 10px;font-size: 12px;">${item.buildingTypes.length? item.buildingTypes[0].name : "暂无数据"}</label></div>
<div style="flex: 1; margin-left: 25px;">: <label style="margin-left: 10px;font-size: 12px;">${item.contacts || "暂无数据"}</label></div>
</div>
<div style="display: flex; margin-top: 10px;margin-left:8px"">
<div style="width:240px; overflow: hidden;">: <label style="margin-left: 10px;font-size: 12px;"></label></div>
<div style="flex: 1; margin-left: 25px;">: <label style="margin-left: 10px;font-size: 12px;">${item.contacts || "暂无数据"}</label></div>
</div>
<div style="display: flex; margin-top: 10px;margin-left:8px"">
<div style="width:240px; overflow: hidden;">: <label style="margin-left: 10px;font-size: 12px;">${item.organizationName || "暂无数据"}</label></div>
<div style="flex: 1; margin-left: 25px;">: <label style="margin-left: 10px;font-size: 12px;">15022215122</label></div>
</div>
<div style="display: flex; margin-top: 10px;margin-left:8px"">
<div style="width:240px; overflow: hidden;">: <label style="margin-left: 10px;font-size: 12px;"></label></div>
<div style="flex: 1; margin-left: 25px;">: <label style="margin-left: 10px;font-size: 12px;">500</label></div>
</div>
<div style="display: flex; margin-top: 10px;margin-left:8px"">
<div style="width:240px; overflow: hidden;">: <label style="margin-left: 10px;font-size: 12px;"></label></div>
<div style="flex: 1; margin-left: 25px;">: <label style="margin-left: 10px;font-size: 12px;">600</label></div>
</div>
<div style="display: flex; margin-top: 10px;margin-left:8px"">
<div style="width:240px; overflow: hidden;">: <label style="margin-left: 10px;font-size: 12px;">${item.phone || "暂无数据"}</label></div>
</div>
<div style="display: flex; align-items: center; justify-content: center; margin-top: 10px;">
<div class="btn" id="baseInformation"><img src="../../../assets/images/basicinfoicon.png" alt=""></div>
<div class="btn" id="route"><img src="../../../assets/images/navicon.png" alt=""></div>
<div class="btn" id="fullViewNavigation"><img src="../../../assets/images/panoramaicon.png" alt=""></div>
<div class="btn" id="threeeScene"><img src="../../../assets/images/3dicon.png" alt=""></div>
<div class="btn" id="seePlan"><img src="../../../assets/images/planicon.png" alt=""></div>
<div class="btn" id="share"><img src="../../../assets/images/shareicon.png" alt=""></div>
</div>
</div>`
// 创建一个自定义内容的 infowindow 实例
this.infoWindow = new AMap.InfoWindow({
position: [item.location.x,item.location.y],
offset: new AMap.Pixel(0, -30),
content: markerContent,
});
this.infoWindow.open(this.map);
this.renderer2.listen(this.elementRef.nativeElement.querySelector('#baseInformation'),'click',(event)=>{ this.baseInformation(item) })//基本信息点击事件
this.renderer2.listen(this.elementRef.nativeElement.querySelector('#route'),'click',(event)=>{ this.route(item) })//导航点击事件
this.renderer2.listen(this.elementRef.nativeElement.querySelector('#fullViewNavigation'),'click',(event)=>{ this.fullViewNavigation(item) })//全景漫游点击事件
this.renderer2.listen(this.elementRef.nativeElement.querySelector('#threeeScene'),'click',(event)=>{ this.threeeScene(item) })//三维场景点击事件
this.renderer2.listen(this.elementRef.nativeElement.querySelector('#seePlan'),'click',(event)=>{ this.seePlan(item) })//查看预案点击事件
this.renderer2.listen(this.elementRef.nativeElement.querySelector('#share'),'click',(event)=>{ this.share(item) })//分享点击事件
}
})
});
this.unitlabelsLayer.add(markerArr);
this.map.add(this.unitlabelsLayer);//增加图层
this.unitMarkerList = markerArr
this.map.add(this.unitMarkerList);//将markers添加到图层上
}
//取消单位markers
clearUnitMarker(){
this.map.remove(this.unitlabelsLayer)
this.map.remove(this.unitMarkerList);
//取消显示单位
resetUnit(){
this.keyUnitForm.reset()
this.keyUnitForm.controls.areaUnit.setValue('-1')
this.map.remove(this.circle)
this.unitCluster.setData([])
}
//水源提交
waterSubmit(value){
if(this.markers.length == 0){
const config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('请先选择一个单位','确定',config);
if(this.selectedWaterList.length != 0){//勾选了水源类型
let paramsdata:any = {
PageSize:99999,
WaterSourceTypes : this.selectedWaterList
}
this.http.get("/api/WaterSources",{params:paramsdata}).subscribe((data:any) => {
console.log('所有水源',data)
this.createwaterMarker(data.items)
})
}else{
let config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('请勾选想要显示的水源类型','确定',config);
}
}else if(!this.mapPattern){
const config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('请切换2D模式使用此功能','确定',config);
}else{
this.createwaterMarker()
this.circleofwater.setRadius(Number(this.waterAreaDefault))
this.circleofwater.setCenter(this.markers[0]._position)
this.circleofwater.setMap(this.map)
let Distance
let lnglat = new AMap.LngLat(this.selectedUnit.location.x, this.selectedUnit.location.y) // lng, lat 替换成传入的坐标
//如果选择当前的视野范围算出查询半径
if(this.waterAreaDefault == '0'){
this.circleofwater.setRadius(this.Calculationofdistance(this.map.getBounds())/2)
Distance = Math.abs(lnglat.offset(0, this.Calculationofdistance(this.map.getBounds())/2).lat - this.selectedUnit.location.y)
}else{
Distance = Math.abs(lnglat.offset(0, this.waterAreaDefault).lat - this.selectedUnit.location.y)
}
//如果选择全部
if(this.waterAreaDefault == '-1'){
if(this.selectedWaterList.length != 0){
let paramsdata:any = {
PageSize:99999,
WaterSourceTypes : this.selectedWaterList
}
this.http.get("/api/WaterSources",{params:paramsdata}).subscribe((data:any) => {
console.log('所有水源',data)
this.createwaterMarker(data.items)
})
}else{
let config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('请勾选想要显示的水源类型','确定',config);
}
}else{
if(this.selectedWaterList.length != 0){
let paramsdata:any = {
PageSize:99999,
Lon : this.selectedUnit.location.x,
Lat : this.selectedUnit.location.y,
Distance : Distance,
WaterSourceTypes :this.selectedWaterList
}
this.http.get("/api/WaterSources",{params:paramsdata}).subscribe((data:any) => {
console.log('所有水源',data)
this.createwaterMarker(data.items)
})
}else{
let config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('请勾选想要显示的水源类型','确定',config);
}
}
}
}
waterIconList = []; //展示的水源图标
//取消显示水源
resetWater(){
this.watertForm.reset()
this.watertForm.controls.areaWater.setValue('-1')
this.map.remove(this.circleofwater)
this.waterCluster.setData([])
}
//循环渲染出所有水源markers
createwaterMarker(){
this.waterIconList.forEach((element,index) => { this.map.remove(element) }); //先删除所有标点
this.waterIconList = []
let waterType = this.selectedWaterList //筛选出展示的 水源类型
if (waterType.length) {
let x = JSON.parse( JSON.stringify(this.markers[0]._position[0]) ) //中心标注的 坐标
let y = JSON.parse( JSON.stringify(this.markers[0]._position[1]) ) //中心标注的 坐标
let positonList = [0.015, -0.035, 0.045, 0.061, -0.013, 0.029]
// 创建一个 Icon
let startIcon = new AMap.Icon({
image: '../../../assets/images/fireHydrant.png',
imageSize: new AMap.Size(20, 20),
});
positonList.forEach((item,index)=>{
let marker = new AMap.Marker({
map: this.map,
position: index%2==0? JSON.parse( JSON.stringify([x+item,y-item]) ) : JSON.parse( JSON.stringify([x-item,y+item]) ),
icon: startIcon,
});
this.waterIconList.push(marker)
waterCluster:any //水源聚合实例
createwaterMarker(list){
let waterMarkerArrcluster = []
this.waterCluster ? this.waterCluster.setData([]) : null
list.forEach((item) => {
let image
if(item.waterSourceType == 0){//消火栓
image = '/assets/images/市政消火栓.png'
}else if(item.waterSourceType == 1){//消防水池
image = '/assets/images/方形储水池.png'
}else if(item.waterSourceType == 2){//天然水源
image = '/assets/images/天然水源.png'
}
// 用于点集合的数组
waterMarkerArrcluster.push({
lnglat : [item.location.x,item.location.y],
image : image,
data : item
})
positonList.forEach((item,index)=>{
let marker = new AMap.Marker({
map: this.map,
position: index%2==0? JSON.parse( JSON.stringify([x+item,y+item]) ) : JSON.parse( JSON.stringify([x-item,y-item]) ),
icon: startIcon,
});
this.waterIconList.push(marker)
})
this.map.plugin(["AMap.MarkerClusterer"],() => {
var gridSize = 60
var count = waterMarkerArrcluster.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 = `<img class='clusterImg' src="${context.data[0].image}" alt="">`;
var offset = new AMap.Pixel(-15, -25);
context.marker.setContent(content)
context.marker.setOffset(offset)
}
this.waterCluster = new AMap.MarkerCluster(this.map, waterMarkerArrcluster, {
gridSize: gridSize, // 设置网格像素大小
renderClusterMarker: _renderClusterMarker, // 自定义聚合点样式
renderMarker: _renderMarker, // 自定义非聚合点样式
});
this.waterCluster.on('click',(e)=>{
if(e.clusterData.length == 1){
}
})
} else {
const config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('请选择水源类型','确定',config);
}
});
}
//计算两地距离
@ -442,24 +527,9 @@ export class GisLabelingComponent implements OnInit {
}
}
//取消显示单位
resetUnit(){
this.keyUnitForm.reset()
this.keyUnitForm.controls.areaUnit.setValue('0')
this.map.remove(this.circle)
this.clearUnitMarker()//取消显示单位markers
// console.log('取消')
}
//取消显示水源
resetWater(){
this.waterIconList.forEach((element,index) => { this.map.remove(element) }); //先删除所有标点
this.waterIconList = []
this.watertForm.reset()
this.watertForm.controls.areaWater.setValue('0')
this.map.remove(this.circleofwater)
// console.log('取消')
}
//右上角点击每一个title
clickTitle(index){
@ -482,15 +552,6 @@ export class GisLabelingComponent implements OnInit {
loadChange(e){
e.checked ? this.map.add(this.roadNetLayer) : this.map.remove(this.roadNetLayer);
}
// floorLayer = new AMap.Buildings({
// zooms: [16, 18],
// zIndex: 10,
// heightFactor: 2 //2倍于默认高度,3D下有效
// })
//楼层图层
// floorChange(e){
// e.checked ? this.map.add(this.floorLayer) : this.map.remove(this.floorLayer);
// }
@ViewChild( 'appLeft',{static: false} ) appLeft:any //子组件
leftDivState:boolean = false; //左侧工作区显示隐藏
@ -556,19 +617,6 @@ export class GisLabelingComponent implements OnInit {
that.map.setCity('上海市');
AMap.plugin(["AMap.RangingTool", "AMap.MouseTool"],function () {
that.mouseTool=new AMap.MouseTool(that.map);
/* that.measureDistance = new AMap.RangingTool(that.map, rulerOptions); //
that.measureArea = new AMap.MouseTool(that.map); //侧面积 */
/* that.measureDistance.on('addnode',function(e){ //
that.distanceList.push(e.marker)
})
that.measureDistance.on('end',function(e){ //监听测距离 连线事件
that.distanceList.push(e.polyline)
}) */
/* that.mouseTool.on("rightclick",function(e){
if(this.mouseTool.eventsList[1]==undefined){
alert("000")
}
}) */
});
}
@ -1093,7 +1141,6 @@ export class LookPlanDialog {
}
this.http.get("/api/PlanComponents",{params:paramsData}).subscribe((data:any)=>{
this.allPlanComponents = data.items
// console.log(this.allPlanComponents)
})
}
//查看预案
@ -1137,7 +1184,6 @@ export class LookPlanDialog {
dialogRef.afterClosed().subscribe(
data=>{
if(data){
// console.log(123,data)
this.downloadFileName = data.fileName
this.download = data
this.downloadFile()

44
src/app/ui/collection-tools-plan/collection-tools.component.html

@ -332,44 +332,44 @@
<div *ngIf="item.PropertyType == 5" class="selectDiv">
<p style="display: inline-block;">{{item.PropertyName}}</p>
<select (change)="direction(item,$event)" [disabled]="!isEditPattern || (canvasAssetObj.GameMode == 0 && !pattern)">
<option value ="0" [selected]="item.PropertyValue ==0"></option>
<option value ="1" [selected]="item.PropertyValue ==1">西</option>
<option value ="2" [selected]="item.PropertyValue ==2"></option>
<option value ="3" [selected]="item.PropertyValue ==3"></option>
<option value ="4" [selected]="item.PropertyValue ==4">东南</option>
<option value ="5" [selected]="item.PropertyValue ==5">西南</option>
<option value ="6" [selected]="item.PropertyValue ==6">东北</option>
<option value ="7" [selected]="item.PropertyValue ==7">西北</option>
<option value ="0" [selected]="item.PropertyValue =='0'"></option>
<option value ="1" [selected]="item.PropertyValue =='1'">西</option>
<option value ="2" [selected]="item.PropertyValue =='2'"></option>
<option value ="3" [selected]="item.PropertyValue =='3'"></option>
<option value ="4" [selected]="item.PropertyValue =='4'">东南</option>
<option value ="5" [selected]="item.PropertyValue =='5'">西南</option>
<option value ="6" [selected]="item.PropertyValue =='6'">东北</option>
<option value ="7" [selected]="item.PropertyValue =='7'">西北</option>
</select>
</div>
<!-- 布尔值 是1或否0 -->
<div *ngIf="item.PropertyType == 6">
<p>{{item.PropertyName}}</p>
<input [disabled]="!isEditPattern || (canvasAssetObj.GameMode == 0 && !pattern)" [checked]="item.PropertyValue == 1" class="input" type="radio" name="radio" (click)="assetRadioChange(item,'1')"><span></span>
<input [disabled]="!isEditPattern || (canvasAssetObj.GameMode == 0 && !pattern)" [checked]="item.PropertyValue == 0" class="input" type="radio" name="radio" (click)="assetRadioChange(item,'0')"><span></span>
<input [disabled]="!isEditPattern || (canvasAssetObj.GameMode == 0 && !pattern)" [checked]="item.PropertyValue == '1'" class="input" type="radio" name="radio" (click)="assetRadioChange(item,'1')"><span></span>
<input [disabled]="!isEditPattern || (canvasAssetObj.GameMode == 0 && !pattern)" [checked]="item.PropertyValue == '0'" class="input" type="radio" name="radio" (click)="assetRadioChange(item,'0')"><span></span>
</div>
<!-- 供给区域 -->
<div *ngIf="item.PropertyType == 7" class="selectDiv">
<p style="display: inline-block;">{{item.PropertyName}}</p>
<select (change)="supplyArea(item,$event)" [disabled]="!isEditPattern || (canvasAssetObj.GameMode == 0 && !pattern)">
<option value ="0" [selected]="item.PropertyValue ==0">全部</option>
<option value ="1" [selected]="item.PropertyValue ==1">高区</option>
<option value ="2" [selected]="item.PropertyValue ==2">中区</option>
<option value ="3" [selected]="item.PropertyValue ==3">低区</option>
<option value ="4" [selected]="item.PropertyValue ==4">高中区</option>
<option value ="5" [selected]="item.PropertyValue ==5">高低区</option>
<option value ="6" [selected]="item.PropertyValue ==6">中低区</option>
<option value ="0" [selected]="item.PropertyValue =='0'">全部</option>
<option value ="1" [selected]="item.PropertyValue =='1'">高区</option>
<option value ="2" [selected]="item.PropertyValue =='2'">中区</option>
<option value ="3" [selected]="item.PropertyValue =='3'">低区</option>
<option value ="4" [selected]="item.PropertyValue =='4'">高中区</option>
<option value ="5" [selected]="item.PropertyValue =='5'">高低区</option>
<option value ="6" [selected]="item.PropertyValue =='6'">中低区</option>
</select>
</div>
<!-- 供给类型 -->
<div *ngIf="item.PropertyType == 8" class="selectDiv">
<p style="display: inline-block;">{{item.PropertyName}}</p>
<select (change)="supplyType(item,$event)" value="4" [disabled]="!isEditPattern || (canvasAssetObj.GameMode == 0 && !pattern)">
<option value ="0" [selected]="item.PropertyValue ==0">消火栓</option>
<option value ="1" [selected]="item.PropertyValue ==1">喷淋</option>
<option value ="2" [selected]="item.PropertyValue ==2">水幕</option>
<option value ="3" [selected]="item.PropertyValue ==3">泡沫</option>
<option value ="4" [selected]="item.PropertyValue ==4">消防</option>
<option value ="0" [selected]="item.PropertyValue =='0'">消火栓</option>
<option value ="1" [selected]="item.PropertyValue =='1'">喷淋</option>
<option value ="2" [selected]="item.PropertyValue =='2'">水幕</option>
<option value ="3" [selected]="item.PropertyValue =='3'">泡沫</option>
<option value ="4" [selected]="item.PropertyValue =='4'">消防</option>
</select>
</div>
</div>

2
src/app/ui/collection-tools-plan/collection-tools.component.ts

@ -661,6 +661,7 @@ export class CollectionToolsPlanComponent implements OnInit {
this.canvas.on("select",obj=>{
//选中素材属性注入函数
this.setAssetsProperty(obj.assetData)
console.log(obj.assetData)
})
// 监听canvas组件取消选中素材事件
this.canvas.on("deselect",obj=>{
@ -1258,6 +1259,7 @@ export class CollectionToolsPlanComponent implements OnInit {
//点击数节点的显示隐藏icon
clickLookItem(node){
//修改真实素材islook属性
for(let key in this.storeyData.data){
if(key == node.id){

44
src/app/ui/collection-tools/collection-tools.component.html

@ -334,44 +334,44 @@
<div *ngIf="item.PropertyType == 5" class="selectDiv">
<p style="display: inline-block;">{{item.PropertyName}}</p>
<select (change)="direction(item,$event)" [disabled]="!isEditPattern || (canvasAssetObj.GameMode == 0 && !pattern)">
<option value ="0" [selected]="item.PropertyValue ==0"></option>
<option value ="1" [selected]="item.PropertyValue ==1">西</option>
<option value ="2" [selected]="item.PropertyValue ==2"></option>
<option value ="3" [selected]="item.PropertyValue ==3"></option>
<option value ="4" [selected]="item.PropertyValue ==4">东南</option>
<option value ="5" [selected]="item.PropertyValue ==5">西南</option>
<option value ="6" [selected]="item.PropertyValue ==6">东北</option>
<option value ="7" [selected]="item.PropertyValue ==7">西北</option>
<option value ="0" [selected]="item.PropertyValue =='0'"></option>
<option value ="1" [selected]="item.PropertyValue =='1'">西</option>
<option value ="2" [selected]="item.PropertyValue =='2'"></option>
<option value ="3" [selected]="item.PropertyValue =='3'"></option>
<option value ="4" [selected]="item.PropertyValue =='4'">东南</option>
<option value ="5" [selected]="item.PropertyValue =='5'">西南</option>
<option value ="6" [selected]="item.PropertyValue =='6'">东北</option>
<option value ="7" [selected]="item.PropertyValue =='7'">西北</option>
</select>
</div>
<!-- 布尔值 是1或否0 -->
<div *ngIf="item.PropertyType == 6">
<p>{{item.PropertyName}}</p>
<input [disabled]="!isEditPattern || (canvasAssetObj.GameMode == 0 && !pattern)" [checked]="item.PropertyValue == 1" class="input" type="radio" name="radio" (click)="assetRadioChange(item,'1')"><span></span>
<input [disabled]="!isEditPattern || (canvasAssetObj.GameMode == 0 && !pattern)" [checked]="item.PropertyValue == 0" class="input" type="radio" name="radio" (click)="assetRadioChange(item,'0')"><span></span>
<input [disabled]="!isEditPattern || (canvasAssetObj.GameMode == 0 && !pattern)" [checked]="item.PropertyValue == '1'" class="input" type="radio" name="radio" (click)="assetRadioChange(item,'1')"><span></span>
<input [disabled]="!isEditPattern || (canvasAssetObj.GameMode == 0 && !pattern)" [checked]="item.PropertyValue == '0'" class="input" type="radio" name="radio" (click)="assetRadioChange(item,'0')"><span></span>
</div>
<!-- 供给区域 -->
<div *ngIf="item.PropertyType == 7" class="selectDiv">
<p style="display: inline-block;">{{item.PropertyName}}</p>
<select (change)="supplyArea(item,$event)" [disabled]="!isEditPattern || (canvasAssetObj.GameMode == 0 && !pattern)">
<option value ="0" [selected]="item.PropertyValue ==0">全部</option>
<option value ="1" [selected]="item.PropertyValue ==1">高区</option>
<option value ="2" [selected]="item.PropertyValue ==2">中区</option>
<option value ="3" [selected]="item.PropertyValue ==3">低区</option>
<option value ="4" [selected]="item.PropertyValue ==4">高中区</option>
<option value ="5" [selected]="item.PropertyValue ==5">高低区</option>
<option value ="6" [selected]="item.PropertyValue ==6">中低区</option>
<option value ="0" [selected]="item.PropertyValue =='0'">全部</option>
<option value ="1" [selected]="item.PropertyValue =='1'">高区</option>
<option value ="2" [selected]="item.PropertyValue =='2'">中区</option>
<option value ="3" [selected]="item.PropertyValue =='3'">低区</option>
<option value ="4" [selected]="item.PropertyValue =='4'">高中区</option>
<option value ="5" [selected]="item.PropertyValue =='5'">高低区</option>
<option value ="6" [selected]="item.PropertyValue =='6'">中低区</option>
</select>
</div>
<!-- 供给类型 -->
<div *ngIf="item.PropertyType == 8" class="selectDiv">
<p style="display: inline-block;">{{item.PropertyName}}</p>
<select (change)="supplyType(item,$event)" value="4" [disabled]="!isEditPattern || (canvasAssetObj.GameMode == 0 && !pattern)">
<option value ="0" [selected]="item.PropertyValue ==0">消火栓</option>
<option value ="1" [selected]="item.PropertyValue ==1">喷淋</option>
<option value ="2" [selected]="item.PropertyValue ==2">水幕</option>
<option value ="3" [selected]="item.PropertyValue ==3">泡沫</option>
<option value ="4" [selected]="item.PropertyValue ==4">消防</option>
<option value ="0" [selected]="item.PropertyValue =='0'">消火栓</option>
<option value ="1" [selected]="item.PropertyValue =='1'">喷淋</option>
<option value ="2" [selected]="item.PropertyValue =='2'">水幕</option>
<option value ="3" [selected]="item.PropertyValue =='3'">泡沫</option>
<option value ="4" [selected]="item.PropertyValue =='4'">消防</option>
</select>
</div>
</div>

1
src/app/ui/collection-tools/collection-tools.component.scss

@ -304,6 +304,7 @@
//右侧消防要素
.firecategories{
position: relative;
background-color: #fff;
display: flex;
flex-flow: column;
.firecategoriesTree{

13
src/app/ui/collection-tools/collection-tools.component.ts

@ -1217,10 +1217,9 @@ export class CollectionToolsComponent implements OnInit {
if(selectPanelPoint.Data){
for(let key in selectPanelPoint.Data.Stock){
selectPanelPoint.Data.Stock[key].isLookPattern = true
selectPanelPoint.Data.Stock[key].isLook = true
if(element.id == selectPanelPoint.Data.Stock[key].FireElementId){
selectPanelPoint.Data.Stock[key].isTemplate = false
selectPanelPoint.Data.Stock[key].isLook = true
element.isNewElement = true //该节点children是否存在新添加的真实素材 标识
//定义查看模式下能看到的元素
@ -1276,13 +1275,19 @@ export class CollectionToolsComponent implements OnInit {
//点击数节点的显示隐藏icon
clickLookItem(node){
//修改真实素材islook属性
for(let key in this.storeyData.data){
if(key == node.id){
this.storeyData.data[key].isLook = !this.storeyData.data[key].isLook
}
}
if(this.selectPanelPoint && this.selectPanelPoint.Data){
for(let key in this.selectPanelPoint.Data.Stock){
if(key == node.id){
this.selectPanelPoint.Data.Stock[key].isLook = !this.selectPanelPoint.Data.Stock[key].isLook
}
}
}
//所有消防要素模板变化islook值
if(node.isTemplate){
@ -1395,7 +1400,7 @@ export class CollectionToolsComponent implements OnInit {
this.allFireElements[this.allFireElements.length-1].children.push(storeyData.data[key])
}
}
let selectPanelPoint = JSON.parse(JSON.stringify(this.canvasData.selectPanelPoint || {} )) //当前 节点 数据
let selectPanelPoint:any = this.canvasData.selectPanelPoint || {} //当前 节点 数据
if(selectPanelPoint.Data){
for(let key in selectPanelPoint.Data.Stock){ //筛选数据 没有匹配全部放入到 其他 数组
let noMatch = this.allFireElements.find( every=> every.id===selectPanelPoint.Data.Stock[key].FireElementId )

16
src/app/ui/collection-tools/save.ts

@ -57,11 +57,13 @@ export class saveOneDialog {
@Inject(MAT_DIALOG_DATA) public data) {}
type = this.data.type
allDisposalNode = this.data.allDisposalNode
allPlanDisposalNode = []
allDisposalNode = this.data.allDisposalNode//所有节点数据
allPlanDisposalNode = []//所有非数据节点
allRootDisposalNode = [{name:"根节点",id:null}]
allDisposalNodeChild = []
defaultSelectedName = '根节点'
ngOnInit(): void {
console.log(111,this.allDisposalNode)
//所有非数据节点
this.allDisposalNode.forEach(item => {
if(!item.sitePlanId && !item.buildingAreaId){
@ -89,10 +91,9 @@ export class saveOneDialog {
onNoClick(): void {
this.dialogRef.close();
}
nodeItem
itemChildNum = 0 //点击处置节点子数据节点的数量
nodeItem:any//当前选中的要保存到的父节点
itemChildNum = 0 //点击处置节点子数据节点的数量(赋值order)
clickNode(item){
// console.log(item)
this.nodeItem = item
this.allDisposalNodeChild.forEach(item => {
if(item.id == this.nodeItem.id){
@ -150,6 +151,10 @@ export class saveOneDialog {
// 保存平面图数据到当前节点
let postdata =JSON.parse(JSON.stringify(this.canvasData.selectPanelPoint))
postdata.Data = JSON.stringify(postdata.Data)
postdata.Version ? null : postdata.Version = "2.0"
postdata.DisposalNodeId ? null : postdata.DisposalNodeId = istrue.id
postdata.PlanComponentId ? null : postdata.PlanComponentId = sessionStorage.getItem("planId")
postdata.Id ? null : postdata.Id = ''
this.http.post(`/api/DisposalNodeData`,postdata).subscribe(data => {
this.maskLayerService.sendMessage(false)
const config = new MatSnackBarConfig();
@ -173,7 +178,6 @@ export class saveOneDialog {
resolve("更新处置节点成功,将天气 节点详情等信息保存到点击的节点")
})
}).then((values)=>{
// console.log(values)
postdata.level = putdata.level + 1
new Promise((resolve,reject) => {
this.http.post(`/api/DisposalNodes`,postdata).subscribe(data => {

2
src/app/ui/collection-tools/saveTwo.html

@ -11,7 +11,7 @@
</div>
<div mat-dialog-content>
<mat-form-field>
<mat-select [(value)]="allRootDisposalNode[0].name" required placeholder="父节点名称">
<mat-select [(value)]="defaultSelectedName" required placeholder="父节点名称">
<mat-option *ngFor="let item of allRootDisposalNode" [value]="item.name" (click)="clickNode(item)">
{{item.name}}
</mat-option>

2
src/app/working-area/working-area.component.ts

@ -315,7 +315,7 @@ export class WorkingAreaComponent extends EventEmitter implements OnInit, AfterV
this.app.stage.addChild(this.grid);
this.grid.drawGrid();
this.grid.onMousemove = (evt, gridCoord) => {
console.log(gridCoord);
// console.log(gridCoord);
};
this.createBackgroundImage();

BIN
src/assets/images/其他.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 791 B

After

Width:  |  Height:  |  Size: 2.2 KiB

BIN
src/assets/images/古建筑.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 904 B

After

Width:  |  Height:  |  Size: 2.2 KiB

BIN
src/assets/images/轨道交通.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 2.5 KiB

BIN
src/assets/linkageForces/交通.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 737 B

BIN
src/assets/linkageForces/住建.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 786 B

BIN
src/assets/linkageForces/公安.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 943 B

BIN
src/assets/linkageForces/医疗.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 839 B

BIN
src/assets/linkageForces/安监.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 916 B

BIN
src/assets/linkageForces/市政.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 789 B

BIN
src/assets/linkageForces/应急管理.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 901 B

BIN
src/assets/linkageForces/民政.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 827 B

BIN
src/assets/linkageForces/气象局.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 901 B

BIN
src/assets/linkageForces/水利.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 788 B

BIN
src/assets/linkageForces/海事.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 960 B

BIN
src/assets/linkageForces/燃气局.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 862 B

BIN
src/assets/linkageForces/环保局.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

BIN
src/assets/linkageForces/电力局.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 920 B

BIN
src/assets/linkageForces/通信.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 561 B

12
src/styles.scss

@ -129,7 +129,7 @@ table td.mat-footer-cell:last-of-type{
}
//弹出框样式取消padding
#shareDialog,#lookPlanDialog,#openPlanToolDialog,#addWater,#videodialog{
#shareDialog,#lookPlanDialog,#openPlanToolDialog,#addWater,#videodialog,#addLinkageForce,#videodialog2{
padding: 0;
}
@ -182,3 +182,13 @@ table td.mat-footer-cell:last-of-type{
line-height: 30px;
}
}
#linkageForcesSwiper{
.swiper-container{
--swiper-navigation-size: 26px;/* 设置按钮大小 */
}
}
//点聚合自定义图片大小
.clusterImg{
width: 30px;
height: 30px;
}

Loading…
Cancel
Save