徐振升 4 years ago
parent
commit
dadc40d0bd
  1. 8
      src/app/data-collection/fire-force/fire-force.component.ts
  2. 2
      src/app/data-collection/linkage-forces/linkage-forces.component.ts
  3. 2
      src/app/data-collection/water-collection/water-collection.component.scss
  4. 1
      src/app/data-collection/water-collection/water-collection.component.ts
  5. 4
      src/app/key-unit/basicinfo-look/basicinfo.component.html
  6. 4
      src/app/key-unit/basicinfo/basicinfo.component.html
  7. 453
      src/app/plan-audit/fireforce-audit/fireforce-audit.component.html
  8. 265
      src/app/plan-audit/fireforce-audit/fireforce-audit.component.scss
  9. 25
      src/app/plan-audit/fireforce-audit/fireforce-audit.component.spec.ts
  10. 232
      src/app/plan-audit/fireforce-audit/fireforce-audit.component.ts
  11. 1
      src/app/plan-audit/linkageforces-audit/linkageforces-audit.component.html
  12. 0
      src/app/plan-audit/linkageforces-audit/linkageforces-audit.component.scss
  13. 25
      src/app/plan-audit/linkageforces-audit/linkageforces-audit.component.spec.ts
  14. 15
      src/app/plan-audit/linkageforces-audit/linkageforces-audit.component.ts
  15. 10
      src/app/plan-audit/plan-audit.module.ts
  16. 11
      src/app/plan-audit/wait-examineer/show3D.html
  17. 92
      src/app/plan-audit/wait-examineer/wait-examineer.component.html
  18. 30
      src/app/plan-audit/wait-examineer/wait-examineer.component.scss
  19. 141
      src/app/plan-audit/wait-examineer/wait-examineer.component.ts
  20. 359
      src/app/plan-audit/water-audit/water-audit.component.html
  21. 116
      src/app/plan-audit/water-audit/water-audit.component.scss
  22. 25
      src/app/plan-audit/water-audit/water-audit.component.spec.ts
  23. 64
      src/app/plan-audit/water-audit/water-audit.component.ts
  24. 24
      src/app/ui/collection-tools-building/addDisposalNode.html
  25. 44
      src/app/ui/collection-tools-building/collection-tools.component.html
  26. 9
      src/app/ui/collection-tools-building/collection-tools.component.scss
  27. 120
      src/app/ui/collection-tools-building/collection-tools.component.ts
  28. 23
      src/app/ui/collection-tools-building/editDisposalNode.html
  29. 52
      src/app/ui/collection-tools-building/leftFunctionalDomain.ts
  30. 300
      src/app/ui/collection-tools-building/save.ts
  31. 5
      src/app/ui/collection-tools-building/saveOne.html
  32. 53
      src/app/ui/collection-tools-building/saveTwo.html
  33. 24
      src/app/ui/collection-tools-building/viewdetails.html
  34. 24
      src/app/ui/collection-tools-plan/addDisposalNode.html
  35. 42
      src/app/ui/collection-tools-plan/collection-tools.component.html
  36. 9
      src/app/ui/collection-tools-plan/collection-tools.component.scss
  37. 121
      src/app/ui/collection-tools-plan/collection-tools.component.ts
  38. 23
      src/app/ui/collection-tools-plan/editDisposalNode.html
  39. 52
      src/app/ui/collection-tools-plan/leftFunctionalDomain.ts
  40. 300
      src/app/ui/collection-tools-plan/save.ts
  41. 5
      src/app/ui/collection-tools-plan/saveOne.html
  42. 53
      src/app/ui/collection-tools-plan/saveTwo.html
  43. 24
      src/app/ui/collection-tools-plan/viewdetails.html
  44. 14
      src/app/ui/collection-tools/collection-tools.component.html
  45. 9
      src/app/ui/collection-tools/collection-tools.component.scss
  46. 9
      src/app/ui/collection-tools/collection-tools.component.ts
  47. 12
      src/app/ui/ui.module.ts
  48. BIN
      src/assets/images/适应缩放.png
  49. BIN
      src/assets/images/重置缩放.png

8
src/app/data-collection/fire-force/fire-force.component.ts

@ -398,7 +398,7 @@ export class FireForceComponent implements OnInit {
personCountData:[],//人员数量自定义
contactData:[],//联系方式自定义
dutyForceData:[],//执勤力量自定义
RelevantInfomationData:[]//相关资料
relevantInfomationData:[]//相关资料
}
//总队支队人员数量
ZongpersonCountData:any=[
@ -474,7 +474,7 @@ export class FireForceComponent implements OnInit {
personCountData:[],//人员数量自定义
contactData:[],//联系方式自定义
dutyForceData:[],//执勤力量自定义
RelevantInfomationData:[]//相关资料
relevantInfomationData:[]//相关资料
}
this.ZongpersonCountData = [
{PropertyName :'现役官兵人数',PropertyValue:''},
@ -571,7 +571,8 @@ export class FireForceComponent implements OnInit {
}
this.FireForceDetailInfo.jurisdictionArea = Number(this.FireForceDetailInfo.jurisdictionArea)
this.FireForceDetailInfo.RelevantInfomationData = JSON.stringify(this.AttachmentArr)
this.FireForceDetailInfo.relevantInfomationData = JSON.stringify(this.AttachmentArr)
console.log(1111,this.FireForceDetailInfo)
//如果是总支大中
this.FireForceDetailInfo.location = {x:'',y:''}
if(this.atLastPositionLngLat.x){
@ -598,6 +599,7 @@ export class FireForceComponent implements OnInit {
this.FireForceDetailInfo.contactData = JSON.stringify(this.DaZhongcontactData)
this.FireForceDetailInfo.dutyForceData = null
}
console.log('body',body)
this.http.put(`/api/FireForceDetail/0/${this.selectedFireForce.id}`,body).subscribe(data => {
let config = new MatSnackBarConfig();
config.verticalPosition = 'top';

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

@ -404,7 +404,7 @@ export class LinkageForcesComponent implements OnInit {
}
this.LinkageForceDetailInfo.location = {x:'',y:''}
this.LinkageForceDetailInfo.RelevantInfomationData = JSON.stringify(this.AttachmentArr)
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

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

@ -129,7 +129,7 @@
height: 20px;
cursor: pointer;
font-size: 20px;
vertical-align: text-top;
vertical-align: middle;
color: rgba(49, 46, 46, 0.144);
}
mat-icon:hover{

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

@ -407,6 +407,7 @@ export class WaterCollectionComponent implements OnInit {
this.waterData.location.x = this.atLastPositionLngLat.x
this.waterData.location.y = this.atLastPositionLngLat.y
}
console.log(666,this.waterData)
this.http.put(`/api/WaterSources/${this.waterData.id}`,this.waterData).subscribe(data => {
const config = new MatSnackBarConfig();
config.verticalPosition = 'top';

4
src/app/key-unit/basicinfo-look/basicinfo.component.html

@ -188,7 +188,7 @@
<mat-option value="0">1级</mat-option>
<mat-option value="1">2级</mat-option>
<mat-option value="2">3级</mat-option>
<mat-option value="3"></mat-option>
<mat-option value="3"></mat-option>
</mat-select>
</mat-form-field>
<!-- 如果类型是多行文本 -->
@ -278,7 +278,7 @@
<mat-option value="0">1级</mat-option>
<mat-option value="1">2级</mat-option>
<mat-option value="2">3级</mat-option>
<mat-option value="3"></mat-option>
<mat-option value="3"></mat-option>
</mat-select>
</mat-form-field>
<!-- 如果类型是多行文本 -->

4
src/app/key-unit/basicinfo/basicinfo.component.html

@ -218,7 +218,7 @@
<mat-option value="0">1级</mat-option>
<mat-option value="1">2级</mat-option>
<mat-option value="2">3级</mat-option>
<mat-option value="3"></mat-option>
<mat-option value="3"></mat-option>
</mat-select>
</mat-form-field>
<!-- 如果类型是多行文本 -->
@ -308,7 +308,7 @@
<mat-option value="0">1级</mat-option>
<mat-option value="1">2级</mat-option>
<mat-option value="2">3级</mat-option>
<mat-option value="3"></mat-option>
<mat-option value="3"></mat-option>
</mat-select>
</mat-form-field>
<!-- 如果类型是多行文本 -->

453
src/app/plan-audit/fireforce-audit/fireforce-audit.component.html

@ -0,0 +1,453 @@
<!-- 消防力量审核 -->
<div class="box" style="width: 100%;height: 100%;overflow: hidden;">
<div class="mapbox">
<div id="container"></div>
<div class="detailsbox" *ngIf="selectedFireForceLevel != null">
<div class="masklayer" *ngIf="isMasklayer">
<mat-spinner [diameter]='30'></mat-spinner>
<span>请等待...</span>
</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 (click)="selectedTab(3)" [ngClass]="{'selectedBtn': tabIndex == 3}">
<span>相关资料</span>
</div>
</div>
</div>
<!-- 详情 -->
<div class="contant" *ngIf="tabIndex == 1">
<!-- 总队 支队 联系方式不同-->
<div *ngIf="selectedFireForceLevel == 0 || selectedFireForceLevel == 1">
<p>基本信息</p>
<mat-grid-list cols="6" rowHeight="40px">
<mat-grid-tile colspan='6' rowspan='1'>
<span>
<span style="color: red;">*</span>
队站名称:
</span>
<input [(ngModel)]="FireForceDetailInfo.stationName" type="text" style="width:88%;">
</mat-grid-tile>
<mat-grid-tile colspan='2' rowspan='1'>
<span>
联系电话:
</span>
<input [(ngModel)]="FireForceDetailInfo.phoneNumber" type="text">
</mat-grid-tile>
<mat-grid-tile colspan='2' rowspan='1'>
<span>
传真:
</span>
<input [(ngModel)]="FireForceDetailInfo.faxNumber" type="text">
</mat-grid-tile>
<mat-grid-tile colspan='2' rowspan='1'>
<span>
辖区面积:
</span>
<input [(ngModel)]="FireForceDetailInfo.jurisdictionArea" type="text">
</mat-grid-tile>
<mat-grid-tile colspan='6' rowspan='2'>
<span>
备注:
</span>
<textarea [(ngModel)]="FireForceDetailInfo.remark" style="height: 80%;width: 84%;" 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 [(ngModel)]="FireForceDetailInfo.address" type="text" style="width:76%;">
</mat-grid-tile>
<mat-grid-tile colspan='3' rowspan='1'>
<span>
经度:
</span>
<input [(ngModel)]="FireForceDetailInfo.location.x" disabled type="text" style="width: 26%;margin-right: 6%;">
<span>
纬度:
</span>
<input [(ngModel)]="FireForceDetailInfo.location.y" disabled type="text" style="width: 26%;margin-right: 6%;">
</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 [(ngModel)]="ZongpersonCountData[0].PropertyValue" type="text">
</mat-grid-tile>
<mat-grid-tile colspan='2' rowspan='1'>
<span>
政府专职消防员数:
</span>
<input [(ngModel)]="ZongpersonCountData[1].PropertyValue" type="text">
</mat-grid-tile>
<mat-grid-tile colspan='2' rowspan='1'>
<span>
消防文员数:
</span>
<input [(ngModel)]="ZongpersonCountData[2].PropertyValue" type="text">
</mat-grid-tile>
</mat-grid-list>
<p>联系方式</p>
<mat-grid-list cols="6" rowHeight="40px" *ngIf="selectedFireForceLevel == 0">
<mat-grid-tile colspan='3' rowspan='1'>
<span>
总队长名称:
</span>
<input type="text" [(ngModel)]="ZongcontactData[0].PropertyValue">
</mat-grid-tile>
<mat-grid-tile colspan='3' rowspan='1'>
<span>
总队长联系方式:
</span>
<input type="text" [(ngModel)]="ZongcontactData[1].PropertyValue">
</mat-grid-tile>
<mat-grid-tile colspan='3' rowspan='1'>
<span>
总队政委姓名:
</span>
<input type="text" [(ngModel)]="ZongcontactData[2].PropertyValue">
</mat-grid-tile>
<mat-grid-tile colspan='3' rowspan='1'>
<span>
总队政委联系方式:
</span>
<input type="text" [(ngModel)]="ZongcontactData[3].PropertyValue">
</mat-grid-tile>
</mat-grid-list>
<mat-grid-list cols="6" rowHeight="40px" *ngIf="selectedFireForceLevel == 1">
<mat-grid-tile colspan='3' rowspan='1'>
<span>
支队长姓名:
</span>
<input type="text" [(ngModel)]="ZhicontactData[0].PropertyValue">
</mat-grid-tile>
<mat-grid-tile colspan='3' rowspan='1'>
<span>
支队长联系方式:
</span>
<input type="text" [(ngModel)]="ZhicontactData[1].PropertyValue">
</mat-grid-tile>
<mat-grid-tile colspan='3' rowspan='1'>
<span>
支队政委姓名:
</span>
<input type="text" [(ngModel)]="ZhicontactData[2].PropertyValue">
</mat-grid-tile>
<mat-grid-tile colspan='3' rowspan='1'>
<span>
支队政委联系方式:
</span>
<input type="text" [(ngModel)]="ZhicontactData[3].PropertyValue">
</mat-grid-tile>
</mat-grid-list>
</div>
<!-- 大队 中队-->
<div *ngIf="selectedFireForceLevel == 2 || selectedFireForceLevel == 3">
<p>基本信息</p>
<mat-grid-list cols="6" rowHeight="40px">
<mat-grid-tile colspan='6' rowspan='1'>
<span>
<span style="color: red;">*</span>
队站名称:
</span>
<input type="text" style="width:81%;" [(ngModel)]="FireForceDetailInfo.stationName">
</mat-grid-tile>
<mat-grid-tile colspan='3' rowspan='1'>
<span>
值班电话:
</span>
<input type="text" [(ngModel)]="FireForceDetailInfo.phoneNumber">
</mat-grid-tile>
<mat-grid-tile colspan='3' rowspan='1'>
<span>
辖区面积:
</span>
<input type="text" [(ngModel)]="FireForceDetailInfo.jurisdictionArea">
</mat-grid-tile>
<mat-grid-tile colspan='6' rowspan='2'>
<span>
备注:
</span>
<textarea [(ngModel)]="FireForceDetailInfo.remark" style="height: 80%;width: 84%;" 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 [(ngModel)]="FireForceDetailInfo.address" type="text" style="width:76%;">
</mat-grid-tile>
<mat-grid-tile colspan='3' rowspan='1'>
<span>
经度:
</span>
<input [(ngModel)]="FireForceDetailInfo.location.x" disabled type="text" style="width: 26%;margin-right: 6%;">
<span>
纬度:
</span>
<input [(ngModel)]="FireForceDetailInfo.location.y" disabled type="text" style="width: 26%;margin-right: 6%;">
</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)]="DaZhongpersonCountData[0].PropertyValue">
</mat-grid-tile>
<mat-grid-tile colspan='2' rowspan='1'>
<span>
政府专职消防员数:
</span>
<input type="text" [(ngModel)]="DaZhongpersonCountData[1].PropertyValue">
</mat-grid-tile>
<mat-grid-tile colspan='2' rowspan='1'>
<span>
每日执勤人数:
</span>
<input type="text" [(ngModel)]="DaZhongpersonCountData[2].PropertyValue">
</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" [(ngModel)]="DaZhongcontactData[0].PropertyValue">
</mat-grid-tile>
<mat-grid-tile colspan='3' rowspan='1'>
<span>
站长联系方式:
</span>
<input type="text" [(ngModel)]="DaZhongcontactData[1].PropertyValue">
</mat-grid-tile>
<mat-grid-tile colspan='3' rowspan='1'>
<span>
指导员姓名:
</span>
<input type="text" [(ngModel)]="DaZhongcontactData[2].PropertyValue">
</mat-grid-tile>
<mat-grid-tile colspan='3' rowspan='1'>
<span>
指导员联系方式:
</span>
<input type="text" [(ngModel)]="DaZhongcontactData[3].PropertyValue">
</mat-grid-tile>
<mat-grid-tile colspan='3' rowspan='1'>
<span>
副指导员姓名:
</span>
<input type="text" [(ngModel)]="DaZhongcontactData[4].PropertyValue">
</mat-grid-tile>
<mat-grid-tile colspan='3' rowspan='1'>
<span>
副指导员联系方式:
</span>
<input type="text" [(ngModel)]="DaZhongcontactData[5].PropertyValue">
</mat-grid-tile>
<mat-grid-tile colspan='3' rowspan='1'>
<span>
副站长一姓名:
</span>
<input type="text" [(ngModel)]="DaZhongcontactData[6].PropertyValue">
</mat-grid-tile>
<mat-grid-tile colspan='3' rowspan='1'>
<span>
副站长一联系方式:
</span>
<input type="text" [(ngModel)]="DaZhongcontactData[7].PropertyValue">
</mat-grid-tile>
<mat-grid-tile colspan='3' rowspan='1'>
<span>
副站长二姓名:
</span>
<input type="text" [(ngModel)]="DaZhongcontactData[8].PropertyValue">
</mat-grid-tile>
<mat-grid-tile colspan='3' rowspan='1'>
<span>
副站长二联系方式:
</span>
<input type="text" [(ngModel)]="DaZhongcontactData[9].PropertyValue">
</mat-grid-tile>
<mat-grid-tile colspan='3' rowspan='1'>
<span>
副站长三姓名:
</span>
<input type="text" [(ngModel)]="DaZhongcontactData[10].PropertyValue">
</mat-grid-tile>
<mat-grid-tile colspan='3' rowspan='1'>
<span>
副站长三联系方式:
</span>
<input type="text" [(ngModel)]="DaZhongcontactData[11].PropertyValue">
</mat-grid-tile>
</mat-grid-list>
</div>
<!-- 其他消防力量 -->
<div *ngIf="selectedFireForceLevel == 4 || selectedFireForceLevel == 5 || selectedFireForceLevel == 6">
<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 [(ngModel)]="selectedFireForceLevel">
<option value="4">微型消防站</option>
<option value="5">企业专职消防队</option>
<option value="6">义务(志愿)消防队</option>
<!-- <option value="3">其他</option> -->
</select>
</mat-grid-tile>
<mat-grid-tile colspan='3' rowspan='1'>
<span>
<span style="color: red;">*</span>
队伍名称:
</span>
<input type="text" [(ngModel)]="FireForceDetailInfo.stationName">
</mat-grid-tile>
<mat-grid-tile colspan='3' rowspan='1'>
<span>
管辖单位:
</span>
<!-- <input disabled [(ngModel)]="superior.name" class="smallwidth" type="text" placeholder="名称">
<input disabled [(ngModel)]="superior.code" class="smallwidth" type="text" placeholder="编号"> -->
</mat-grid-tile>
<mat-grid-tile colspan='3' rowspan='1'>
<span>
队长:
</span>
<input [(ngModel)]="othercontactData[0].PropertyValue" class="smallwidth" type="text" placeholder="姓名">
<input [(ngModel)]="othercontactData[1].PropertyValue" class="smallwidth" type="text" placeholder="联系方式">
</mat-grid-tile>
<mat-grid-tile colspan='3' rowspan='1'>
<span>
值班电话:
</span>
<input [(ngModel)]="FireForceDetailInfo.phoneNumber" type="text">
</mat-grid-tile>
<mat-grid-tile colspan='3' rowspan='1'>
<span>
传真:
</span>
<input [(ngModel)]="FireForceDetailInfo.faxNumber" type="text">
</mat-grid-tile>
<mat-grid-tile colspan='6' rowspan='2'>
<span>
备注:
</span>
<textarea [(ngModel)]="FireForceDetailInfo.remark" style="height: 80%;width: 82%;" 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 [(ngModel)]="FireForceDetailInfo.address" type="text" style="width:76%;">
</mat-grid-tile>
<mat-grid-tile colspan='3' rowspan='1'>
<span>
经度:
</span>
<input [(ngModel)]="FireForceDetailInfo.location.x" disabled type="text" style="width: 26%;margin-right: 6%;">
<span>
纬度:
</span>
<input [(ngModel)]="FireForceDetailInfo.location.y" disabled type="text" style="width: 26%;margin-right: 6%;">
</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" [(ngModel)]="otherpersonCountData[0].PropertyValue">
</mat-grid-tile>
<mat-grid-tile colspan='3' rowspan='1'>
<span>
消防队员总人数:
</span>
<input type="text" [(ngModel)]="otherpersonCountData[1].PropertyValue">
</mat-grid-tile>
<mat-grid-tile colspan='3' rowspan='1'>
<span>
执勤车辆数:
</span>
<div class="unitDiv">
<input type="text" [(ngModel)]="otherpersonCountData[2].PropertyValue">
<span class="unit"></span>
</div>
</mat-grid-tile>
<mat-grid-tile colspan='3' rowspan='1'>
<span>
灭火剂总量:
</span>
<div class="unitDiv">
<input type="text" [(ngModel)]="otherpersonCountData[3].PropertyValue">
<span class="unit"></span>
</div>
</mat-grid-tile>
</mat-grid-list>
</div>
</div>
<!-- 车辆 -->
<!-- <div class="contant" *ngIf="tabIndex == 2">
车辆
</div> -->
<!-- 相关资料 -->
<div class="contant" *ngIf="tabIndex == 3">
<div class="fileDivBox" *ngFor="let item of AttachmentArr" >
<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>

265
src/app/plan-audit/fireforce-audit/fireforce-audit.component.scss

@ -0,0 +1,265 @@
.box{
width: 100%;
height: 100%;
background-color: #F2F4F6;
display: flex;
box-sizing: border-box;
font-size: 16px;
font-weight: 400;
color: #000000;
}
.mapbox{
flex: 1;
background-color: #fff;
display: flex;
flex-direction: column;
#container{
width: 100%;
height: 200px;
}
.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: sub;
font-size: 20px;
width: 20px;
height: 20px;
}
}
span:hover{
text-decoration: underline;
}
.submitAudit{
margin: 0 30px;
}
.close{
margin-right: 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;
}
}
}
}

25
src/app/plan-audit/fireforce-audit/fireforce-audit.component.spec.ts

@ -0,0 +1,25 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { FireforceAuditComponent } from './fireforce-audit.component';
describe('FireforceAuditComponent', () => {
let component: FireforceAuditComponent;
let fixture: ComponentFixture<FireforceAuditComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ FireforceAuditComponent ]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(FireforceAuditComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

232
src/app/plan-audit/fireforce-audit/fireforce-audit.component.ts

@ -0,0 +1,232 @@
import { HttpClient } from '@angular/common/http';
import { Component, OnInit } from '@angular/core';
import { MatSnackBar } from '@angular/material/snack-bar';
import Viewer from 'viewerjs'
declare var CryptoJS
declare var AMap: any;
@Component({
selector: 'app-fireforce-audit',
templateUrl: './fireforce-audit.component.html',
styleUrls: ['./fireforce-audit.component.scss']
})
export class FireforceAuditComponent implements OnInit {
constructor(public snackBar: MatSnackBar,private http:HttpClient) { }
selectedFireForceLevel:any = 0
FireForceDetailInfo:any = {
id: "600144ffe7036e11b8121684",
stationName: "上海总队",
isIndependentAlarm: true,
phoneNumber: "13864340193",
faxNumber: "120",
jurisdictionArea: 999,
remark: "暂无备注",
address: "齐鲁树谷",
location: {
x:0,
y:0
},
personCountData: "[{\"PropertyName\":\"现役官兵人数\",\"PropertyValue\":\"1\"},{\"PropertyName\":\"政府专职消防员数\",\"PropertyValue\":\"2\"},{\"PropertyName\":\"消防文员数\",\"PropertyValue\":\"3\"}]",
personCountItems: null,
contactData: "[{\"PropertyName\":\"总队长名称\",\"PropertyValue\":\"4\"},{\"PropertyName\":\"总队长联系方式\",\"PropertyValue\":\"5\"},{\"PropertyName\":\"总队政委名称\",\"PropertyValue\":\"6\"},{\"PropertyName\":\"总队政委联系方式\",\"PropertyValue\":\"7\"}]",
contactItems: null,
dutyForceData: null,
dutyForceItems: null,
relevantInfomationData: null,
integrityScore: 0,
integrityTotalCount: 0,
integrityNotEmptyCount: 0,
RelevantInfomationData:"[{\"objectName\":\"FireForce/1/601b69697cea2c03587c4c6d.png\",\"fileName\":\"楼层区域.png\",\"fileLength\":4079},{\"objectName\":\"FireForce/1/601b696e7cea2c03587c4c6e.mp4\",\"fileName\":\"李志 《天空之城》.mp4\",\"fileLength\":56362628},{\"objectName\":\"FireForce/1/601b69867cea2c03587c4c6f.docx\",\"fileName\":\"完整度规划20200724.docx\",\"fileLength\":16480}]"
}
ZongpersonCountData
ZongcontactData
ZhicontactData
DaZhongpersonCountData
DaZhongcontactData
othercontactData
otherpersonCountData
AttachmentArr
ngOnInit(): void {
this.ZongpersonCountData = JSON.parse(this.FireForceDetailInfo.personCountData)
this.ZongcontactData = JSON.parse(this.FireForceDetailInfo.contactData)
this.ZhicontactData = JSON.parse(this.FireForceDetailInfo.contactData)
this.DaZhongpersonCountData = JSON.parse(this.FireForceDetailInfo.personCountData)
this.DaZhongcontactData = JSON.parse(this.FireForceDetailInfo.contactData)
this.othercontactData = JSON.parse(this.FireForceDetailInfo.contactData)
this.otherpersonCountData = JSON.parse(this.FireForceDetailInfo.personCountData)
this.AttachmentArr = JSON.parse(this.FireForceDetailInfo.RelevantInfomationData)
setTimeout(() => {
this.map = new AMap.Map('container', {
zoom:18
})
if(this.FireForceDetailInfo.location && this.FireForceDetailInfo.location.x){
this.map.setCenter([this.FireForceDetailInfo.location.x,this.FireForceDetailInfo.location.y]);
this.newPositionMarker = new AMap.Marker({
position: [this.FireForceDetailInfo.location.x,this.FireForceDetailInfo.location.y],
content: this.newPositionMarkerContent,
offset: new AMap.Pixel(-10, -12)
})
// 将 markers 添加到地图
this.map.add(this.newPositionMarker);
}else{
this.map.setCity('上海市');
}
}, 0);
}
map:any
newPositionMarker:any
newPositionMarkerContent:any =
'<div class="custom-content-marker">' +
' <img style="width:20px;height:24px" src="/assets/images/定位.png">' +
'</div>'
//当前点击tab页面第几个
tabIndex:any = 1
selectedTab(index){
this.tabIndex = index
}
//上传附件
objectName:any
isMasklayer:boolean = false//圆圈遮罩层是否打开
isMasklayerDownload:boolean = false//下载进度条遮罩层是否打开
progressBarValue:any = 0//分块上传进度
//下载
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循环结束
}
//点击文件
clickFile(item){
let suffix = item.fileName.split('.')[item.fileName.split('.').length-1]
if(suffix == 'png' || suffix == 'jpg' || suffix == 'JPG'){
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 fetchUrl = item.objectName
let json={
doc: {
docId: new Date(),
title: item.fileName,
fetchUrl: `http://${location.host}/api/Objects/PlanPlatform/`+fetchUrl
},
user: {
uid: "test",
nickName: "test",
avatar: "",
privilege: [
'FILE_READ','FILE_DOWNLOAD', 'FILE_PRINT'
],
},
}
var stringjson=JSON.stringify(json)
var wordArray = CryptoJS.enc.Utf8.parse(stringjson);
var base64 = CryptoJS.enc.Base64.stringify(wordArray);
window.open(`http://121.5.10.84/apps/editor/openPreview?data=${base64}`)
}
if(suffix == 'mp4'){
// const dialogRef = this.dialog.open(ViewDetails, {//调用open方法打开对话框并且携带参数过去
// data: {item:item,type:"video"},
// id:'videodialog'
// });
// dialogRef.afterClosed().subscribe();
}
}
//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();
}
}
}

1
src/app/plan-audit/linkageforces-audit/linkageforces-audit.component.html

@ -0,0 +1 @@
<!-- 联动力量审核 -->

0
src/app/plan-audit/linkageforces-audit/linkageforces-audit.component.scss

25
src/app/plan-audit/linkageforces-audit/linkageforces-audit.component.spec.ts

@ -0,0 +1,25 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { LinkageforcesAuditComponent } from './linkageforces-audit.component';
describe('LinkageforcesAuditComponent', () => {
let component: LinkageforcesAuditComponent;
let fixture: ComponentFixture<LinkageforcesAuditComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ LinkageforcesAuditComponent ]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(LinkageforcesAuditComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

15
src/app/plan-audit/linkageforces-audit/linkageforces-audit.component.ts

@ -0,0 +1,15 @@
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'app-linkageforces-audit',
templateUrl: './linkageforces-audit.component.html',
styleUrls: ['./linkageforces-audit.component.scss']
})
export class LinkageforcesAuditComponent implements OnInit {
constructor() { }
ngOnInit(): void {
}
}

10
src/app/plan-audit/plan-audit.module.ts

@ -51,7 +51,10 @@ import {ViewUnitDetailsPlanComponent} from '../key-unit/view-unit-details-plan/v
import {KeyUnitModule} from '../key-unit/key-unit.module';
import { PlanRecordComponent } from './plan-record/plan-record.component';
import { BasicInfoComponent } from './basic-info/basic-info.component';
import { WaitExamineerComponent } from './wait-examineer/wait-examineer.component'
import { WaitExamineerComponent } from './wait-examineer/wait-examineer.component';
import { WaterAuditComponent } from './water-audit/water-audit.component';
import { FireforceAuditComponent } from './fireforce-audit/fireforce-audit.component';
import { LinkageforcesAuditComponent } from './linkageforces-audit/linkageforces-audit.component'
import { AllaroundComponent } from './allaround/allaround.component'
import { ImgDetails } from './allaround/imgdetails.component'
import { FireFacilitiesComponent } from './fire-facilities/fire-facilities.component'
@ -66,11 +69,10 @@ import { FunctionPartitionComponent } from './function-partition/function-partit
import { CadDrawComponent } from './cad-draw/cad-draw.component'
import { RealisticPictureLookComponent }from './realistic-picture-look/realistic-picture.component'
import { previewImg3 } from './realistic-picture-look/realistic-picture.component'
import { show3D } from './wait-examineer/wait-examineer.component'
@NgModule({
declarations: [DetachmentLevelComponent, PlanAuditComponent, PlanPassComponent,PlanOpen, PlanRecordComponent, BasicInfoComponent,
WaitExamineerComponent,AllaroundComponent,ImgDetails,FireFacilitiesComponent,ImagesData2,previewBigImg2,PlanListComponent,OpenPlanToolDialog,
KeySiteLookComponent,KeySiteImgs2,FunctionPartitionComponent,CadDrawComponent,RealisticPictureLookComponent,previewImg3],
WaitExamineerComponent,AllaroundComponent,ImgDetails,FireFacilitiesComponent,ImagesData2,previewBigImg2,PlanListComponent,OpenPlanToolDialog,KeySiteLookComponent,KeySiteImgs2,FunctionPartitionComponent,CadDrawComponent,RealisticPictureLookComponent,previewImg3,show3D, WaterAuditComponent, FireforceAuditComponent, LinkageforcesAuditComponent],
imports: [
CommonModule,
PlanAuditRoutingModule,

11
src/app/plan-audit/wait-examineer/show3D.html

@ -0,0 +1,11 @@
<!--
* @Descripttion:
* @version:
* @Author: sueRimn
* @Date: 2021-02-04 16:03:00
* @LastEditors: sueRimn
* @LastEditTime: 2021-02-05 09:41:49
-->
<div style="width:100%;height: 100%;">
<iframe style="width:100%;height: 100%;border: none;" [src]='threedUrl'></iframe>
</div>

92
src/app/plan-audit/wait-examineer/wait-examineer.component.html

@ -90,7 +90,6 @@
</div>
<mat-tab-group *ngIf="showtype==3" style="flex: 1;overflow-y: auto;margin-top: 10px;" [selectedIndex]="selected.value" (selectedIndexChange)="selected.setValue($event)">
<mat-tab label="基本信息">
<ng-template matTabContent>
<app-basic-info></app-basic-info>
@ -179,45 +178,52 @@
</mat-expansion-panel>
</mat-accordion>
</div>
</mat-expansion-panel>
</mat-accordion>
<mat-accordion class="tableContent" >
<mat-expansion-panel *ngIf="!isallDate" style="box-shadow: 0 0 black;border: 1px solid #EEF1F5;">
<mat-expansion-panel expanded style="box-shadow: 0 0 black;border: 1px solid #EEF1F5;">
<mat-expansion-panel-header collapsedHeight ='40px' expandedHeight='40px' class="panelhead" style="background-color: #2196F3;">
<mat-panel-title style="font-size: 16px;color: #FFFFFF;" >
四周毗邻
基本信息
</mat-panel-title>
</mat-expansion-panel-header >
<div class="accordingin">
<mat-accordion>
<mat-expansion-panel style="box-shadow: 0 0 black;border: 1px solid #EEF1F5;">
<mat-expansion-panel expanded style="box-shadow: 0 0 black;border: 1px solid #EEF1F5;">
<mat-expansion-panel-header collapsedHeight ='30px' expandedHeight='30px' class="panelhead" >
<mat-panel-title style="font-size: 16px;color:#2196F3;" >
<img src="../../../assets/images/update.png"><span>一号建筑</span>
<img src="../../../assets/images/update.png"><span>修改-沃尔玛(上海)职业发展有限公司</span>
</mat-panel-title>
</mat-expansion-panel-header>
<div class="onebuilding">
<div class="accordingleft">
<span>一号建筑:</span>
</div>
<div class="accordingright">
<span></span><img src="../../../assets/images/chatchange.png">
<span>变更为</span><img src="../../../assets/images/chatchange.png">
</div>
</div>
<table>
<tr>
<th>单位地址 :</th>
<td><span style="margin-left: 7px;"></span> <span style="color: #2196F3;">上海市上海市黄浦区武胜路333号</span>变更为
<span style="color: #2196F3;">上海市上海市黄浦区金陵西路28号</span></td>
</tr>
<tr>
<th>联系电话 :</th>
<td><span style="margin-left: 7px;"></span><span style="color: #2196F3;">15069853369</span>变更为
<span style="color: #2196F3;">13869877764</span></td>
</tr>
<tr>
<th>始建于(年):</th>
<td><span style="margin-left: 7px;"></span><span style="color: #2196F3;">1991</span>变更为
<span style="color: #2196F3;">2003</span></td>
</tr>
</table>
</mat-expansion-panel>
</mat-accordion>
</div>
</mat-expansion-panel>
</mat-accordion>
<mat-accordion class="tableContent" >
<mat-expansion-panel *ngIf="!isallDate" style="box-shadow: 0 0 black;border: 1px solid #EEF1F5;">
<mat-expansion-panel-header collapsedHeight ='40px' expandedHeight='40px' class="panelhead" style="background-color: #2196F3;">
<mat-panel-title style="font-size: 16px;color: #FFFFFF;" >
消防设施
四周毗邻
</mat-panel-title>
</mat-expansion-panel-header >
<div class="accordingin">
@ -225,16 +231,18 @@
<mat-expansion-panel style="box-shadow: 0 0 black;border: 1px solid #EEF1F5;">
<mat-expansion-panel-header collapsedHeight ='30px' expandedHeight='30px' class="panelhead" >
<mat-panel-title style="font-size: 16px;color:#2196F3;" >
<img src="../../../assets/images/update.png"><span>室内消火栓</span>
<img src="../../../assets/images/update.png"><span>一号建筑</span>
</mat-panel-title>
</mat-expansion-panel-header>
<table>
<tr>
<th>总数:</th>
<td><span style="margin-left: 7px;"></span><span style="color: #2196F3;">5</span>变更为
<span style="color: #2196F3;">8</span></td>
</tr>
</table>
<div class="onebuilding">
<div class="accordingleft">
<span>一号建筑:</span>
</div>
<div class="accordingright">
<span></span><img src="../../../assets/images/chatchange.png">
<span>变更为</span><img src="../../../assets/images/chatchange.png">
</div>
</div>
</mat-expansion-panel>
</mat-accordion>
</div>
@ -242,11 +250,43 @@
</mat-expansion-panel>
</mat-accordion>
</div>
<div class="word" *ngIf="showtype==0||showtype==2">
<div class="word" *ngIf="showtype==0">
<iframe [src]='iframeSrc'></iframe>
</div>
<div id="viewer" *ngIf="showtype==1"></div>
<div class="twoD" *ngIf="showtype==2">
<div class="planBox">
<span>单位名称: </span>
<span>{{compantData.name?compantData.name : '暂无数据'}}</span>
</div>
<div class="planBox">
<span>消防救援站: </span>
<span>{{organizationName}}</span>
</div>
<div class="planBox">
<span>单位类型: </span>
<span>{{compantData.buildingTypes.length?compantData.buildingTypes[0].name : '暂无数据'}}</span>
</div>
<div class="planBox">
<span>单位地址: </span>
<span>{{compantData.address?compantData.address : '暂无数据'}}</span>
</div>
<div class="planBox">
<span style="color: #2196F3;cursor:pointer;" (click)='oopen3Dshow()'>查看详情</span>
</div>
</div>
<!-- 水源审核 -->
<!-- <div class="waterAudit">
<app-water-audit></app-water-audit>
</div> -->
<!-- 消防力量审核 -->
<!-- <div class="fireForceAudit">
<app-fireforce-audit></app-fireforce-audit>
</div> -->
<!-- 联动力量审核 -->
<!-- <div class="LinkageForcesAudit">
</div> -->
</div>
</div>
<div class="echarts" *ngIf="previewshow" ><!-- [style.display]="previewshow==true?'block':'none'" -->

30
src/app/plan-audit/wait-examineer/wait-examineer.component.scss

@ -52,12 +52,9 @@
width: 100%;
}
table{
//margin: 20px 20px;
margin-left:10px;
margin-right: 10px;
width: 97.5%;
//border: 1px solid #2196F3;
thead{
height:48px;
color: #FFFFFF;
@ -74,12 +71,16 @@
}
.boxright{
height: 100%;
width: 55%;
flex: 1;
background-color: #FFFFFF;
margin-left: 10px;
display: flex;
flex-direction: column;
.righthead{
width: 100%;
display: flex;
height: 50px;
align-items: center;
flex-direction: row-reverse;
button{
margin-left: 10px;
@ -87,19 +88,16 @@
}
.rightheadone{
width: 50%;
margin-top: 20px;
margin-right: 7%;
}
.rightheadtwo{
width: 40%;
margin-top: 20px;
margin-right: 2%;
}
}
.word{
width: 100%;
height: 100%;
//margin: 10px 10px 0 10px;
iframe{
height: 91%;
width: 97%;
@ -113,6 +111,12 @@
width: 97%;
height: 91%;
}
.waterAudit,.fireForceAudit,.LinkageForcesAudit{
flex: 1;
width: 100%;
height: 100%;
box-sizing: border-box;
}
}
}
th,td{
@ -200,6 +204,18 @@ th,td{
opacity: 1;
}
}
.twoD {
width: 100%;
box-sizing: border-box;
display: flex;
flex-direction: column;
align-items: left;
.planBox {
margin: 30px 30px;
color: black;
:first-child {margin-right: 10px;}
}
}
//滚动条样式
::-webkit-scrollbar{

141
src/app/plan-audit/wait-examineer/wait-examineer.component.ts

@ -4,11 +4,12 @@
* @Author: sueRimn
* @Date: 2020-12-25 16:13:50
* @LastEditors: sueRimn
* @LastEditTime: 2021-02-03 16:24:16
* @LastEditTime: 2021-02-05 09:46:54
*/
import { Component, OnInit } from '@angular/core';
import { Component, Inject, OnInit } from '@angular/core';
import { FormControl } from '@angular/forms';
import { MatSnackBar, MatSnackBarConfig } from '@angular/material/snack-bar';
import {MatDialog, MatDialogRef, MAT_DIALOG_DATA} from '@angular/material/dialog';
import { HttpClient } from '@angular/common/http'
declare var CryptoJS
import { DomSanitizer } from '@angular/platform-browser';
@ -22,7 +23,7 @@ declare var echarts: any;
})
export class WaitExamineerComponent implements OnInit {
constructor(private http:HttpClient,public snackBar: MatSnackBar,private sanitizer: DomSanitizer) {
constructor(private http:HttpClient,public snackBar: MatSnackBar,private sanitizer: DomSanitizer,public dialog: MatDialog) {
}
@ -101,7 +102,14 @@ export class WaitExamineerComponent implements OnInit {
chuorzhong//判断初审还是终审
radioid//选中的id
shenheTable=[]//选中要审核的对象
showtype=2//0:word,1:全景图,2:二维三维,3:重点单位
showtype//0:word,1:全景图,2:二维三维,3:重点单位
compantData={name:'',buildingTypes:[],address:''}
organizationName
planData
id
companyId
fetchUrl
companyName
//获取表格数据
getAlltabledate(){
@ -146,32 +154,65 @@ export class WaitExamineerComponent implements OnInit {
radioClick(e,item){
//e.target.parentElement.bgColor='#2196F3'
console.log(e,item)
let filename:string
let fetchUrl
this.id=item.id
this.fetchUrl=''
this.http.get(`/api/PlanComponents/${item.itemId}`).subscribe((data:any)=>{
this.companyId=data.companyId
this.companyName=data.companyName
if(data.planType!=2&&data.planType!=1){
fetchUrl=data.attachmentUrls[0]
var index=fetchUrl.indexOf("\/")
if(fetchUrl.substr(0,index)=='psw'){
this.fetchUrl=data.attachmentUrls[0]
var index=this.fetchUrl.indexOf("\/")
if(this.fetchUrl.substr(0,index)=='psw'){
this.showtype=1
window.setTimeout(()=>{
const viewer = new Viewer({
container: document.querySelector('#viewer'),
panorama:'/api/Objects/PlanPlatform/'+ fetchUrl,
panorama:'/api/Objects/PlanPlatform/'+ this.fetchUrl,
});
})
}else{
this.lookWord()
}
}else{
this.organizationName=item.organizationName
this.getPlanData()
//this.src=`/planAudit/planpass?id=${data.companyId}&companyName=${data.companyName}&auditPlanId=${data.id}&auditStatus=${data.auditStatus}&planType=1`
//this.iframeSrc=this.sanitizer.bypassSecurityTrustResourceUrl(this.src);
//window.open(`/planAudit/planpass?id=${data.companyId}&companyName=${data.companyName}&auditPlanId=${data.id}&auditStatus=${data.auditStatus}&planType=1`)
}
})
if(e.checked){
this.shenheTable.push(item)
}
else{
for(var i=0;i<this.shenheTable.length;i++ ){
if(this.shenheTable[i].id==item.id){
this.shenheTable.splice(i,1)
}
}
}
/* this.chuorzhong=item.verifyState
this.radioid=item.itemId */
}
//毕升
lookWord(){
this.showtype=0
this.http.get(`/api/ObjectMetadata/PlanPlatform/${fetchUrl}`).subscribe((data:any)=>{
let filename:string
this.http.get(`/api/ObjectMetadata/PlanPlatform/${this.fetchUrl}`).subscribe((data:any)=>{
filename=data.fileName
let json={
doc: {
docId: item.id,
docId: this.id,
title: filename,
//title: filename,
fetchUrl: `http://${location.host}/api/Objects/PlanPlatform/`+fetchUrl
fetchUrl: `http://${location.host}/api/Objects/PlanPlatform/`+this.fetchUrl
},
user: {
uid: "test",
@ -190,28 +231,56 @@ export class WaitExamineerComponent implements OnInit {
//window.open(`http://121.5.10.84/apps/editor/openPreview?data=${base64}`)
})
}
}else{
this.showtype=2
this.src=`/planAudit/planpass?id=${data.companyId}&companyName=${data.companyName}&auditPlanId=${data.id}&auditStatus=${data.auditStatus}&planType=1`
this.iframeSrc=this.sanitizer.bypassSecurityTrustResourceUrl(this.src);
//window.open(`/planAudit/planpass?id=${data.companyId}&companyName=${data.companyName}&auditPlanId=${data.id}&auditStatus=${data.auditStatus}&planType=1`)
getPlanData () {
let header = {
CompanyName: this.companyName || '',
//AuditStatus: this.id || '',
PageSize: '100',
}
console.log(header)
this.http.get('/api/PlanAudits',{params:header}).subscribe((data:any)=>{
data.items.forEach(element => {
/* if (element.id===this.id) {
} */
this.planData = element
this.organizationName = element.committerOrganizationName
this.handleData()
return
});
})
if(e.checked){
this.shenheTable.push(item)
}
else{
for(var i=0;i<this.shenheTable.length;i++ ){
if(this.shenheTable[i].id==item.id){
this.shenheTable.splice(i,1)
}
//查看二维三维预案
thirdPartyURL
planType
handleData () {
this.planType = this.planData.planMode
let data = this.planData
console.log(this.planData)
if (this.planData.planMode==0) { //预案planMode=0时, 查看word
//this.lookWord()
} else if (this.planData.planMode==1) { //预案planMode=1时, 解析文档
} else if (this.planData.planMode==2) { //预案planMode=2时, 跳查看页面组件
sessionStorage.setItem("buildingTypeId", this.compantData.buildingTypes.length? this.compantData.buildingTypes[0].id: undefined);
sessionStorage.setItem("companyId",this.companyId);
sessionStorage.setItem("planId",this.id);
sessionStorage.setItem("editable",'0');
} else if (this.planData.planMode==3) { //预案planMode=3时, 第三方网址
this.showtype=2
this.http.get(`/api/Plans/${data.companyId}`).subscribe((data:any)=>{
data && data.company? this.compantData = data.company : null
})
//this.dialog.open(show3D,{width:'1350px',height:'700px',data:{url:data.url}}); //打开图片弹窗
this.thirdPartyURL = this.sanitizer.bypassSecurityTrustResourceUrl(data.url)
}
}
/* this.chuorzhong=item.verifyState
this.radioid=item.itemId */
//打开三维预案弹窗
oopen3Dshow(){
this.dialog.open(show3D,{width:'1550px',height:'850px',data:{url:this.thirdPartyURL}});
}
//变更数据和全部数据切换按钮
buttonChange(){
@ -439,3 +508,17 @@ export class WaitExamineerComponent implements OnInit {
}
}
@Component({
selector: 'app-wait-examineer-show3D',
templateUrl: './show3D.html',
styleUrls: ['./wait-examineer.component.scss']
})
export class show3D{
constructor(private sanitizer: DomSanitizer,public dialogRef: MatDialogRef<show3D>,@Inject(MAT_DIALOG_DATA) public data,public dialog: MatDialog) {}
ngOnInit(): void {
console.log(this.data.url.changingThisBreaksApplicationSecurity)
this.threedUrl=this.sanitizer.bypassSecurityTrustResourceUrl(this.data.url.changingThisBreaksApplicationSecurity)
}
threedUrl
}

359
src/app/plan-audit/water-audit/water-audit.component.html

@ -0,0 +1,359 @@
<div class="box" style="width: 100%;height: 100%;overflow: hidden;">
<div class="mapbox">
<div class="detailsbox">
<div class="tabsbox">
<div class="tabs">
<div class="selectedBtn">
<span>消火栓</span>
</div>
</div>
</div>
<div id="container"></div>
<div class="contant" >
<p>基本信息</p>
<mat-grid-list cols="6" rowHeight="40px">
<mat-grid-tile colspan='6' rowspan='1'>
<span>
<span style="color: red;">*</span>
名称:
</span>
<input readonly [(ngModel)]="waterData.name" type="text" style="width: 88.6%;">
</mat-grid-tile>
<mat-grid-tile colspan='2' rowspan='1'>
<span>
行政区:
</span>
<input readonly [(ngModel)]="waterData.administrativeRegion" type="text">
</mat-grid-tile>
<mat-grid-tile colspan='2' rowspan='1'>
<span>
水源归属:
</span>
<select disabled [(ngModel)]="waterData.governmentLevel">
<option value="0">市政</option>
<option value="1">单位(小区)</option>
</select>
</mat-grid-tile>
<mat-grid-tile colspan='2' rowspan='1'>
<span>
所属单位(小区):
</span>
<input readonly [(ngModel)]="waterData.village" type="text">
</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 readonly [(ngModel)]="waterData.address" type="text" style="width:76%;">
</mat-grid-tile>
<mat-grid-tile colspan='3' rowspan='1'>
<span>
经度:
</span>
<input readonly [(ngModel)]="waterData.location.x" disabled type="text" style="width: 26%;margin-right: 6%;">
<span>
纬度:
</span>
<input readonly [(ngModel)]="waterData.location.y" disabled type="text" style="width: 26%;margin-right: 6%;">
</mat-grid-tile>
</mat-grid-list>
<p>详细信息</p>
<!-- 消火栓 -->
<mat-grid-list cols="6" rowHeight="40px" *ngIf="selectedWaterTypeIndex == 0 && fireCockData.length != 0">
<mat-grid-tile colspan='2' rowspan='1'>
<span>
可用状态:
</span>
<select disabled [(ngModel)]="fireCockData[0].PropertyValue">
<option value="0">可用</option>
<option value="1">维护</option>
<option value="2">损坏</option>
</select>
</mat-grid-tile>
<mat-grid-tile colspan='2' rowspan='1'>
<span>
放置形式:
</span>
<select disabled [(ngModel)]="fireCockData[1].PropertyValue">
<option value="0">地上</option>
<option value="1">地下</option>
</select>
</mat-grid-tile>
<mat-grid-tile colspan='2' rowspan='1'>
<span>
管网形式:
</span>
<select disabled [(ngModel)]="fireCockData[2].PropertyValue">
<option value="0">枝状管网</option>
<option value="1">环状管网</option>
<option value="2">混合状管网</option>
<option value="3">其他</option>
</select>
</mat-grid-tile>
<mat-grid-tile colspan='2' rowspan='1'>
<span>
管网直径:
</span>
<div class="unitDiv">
<select disabled [(ngModel)]="fireCockData[3].PropertyValue">
<option value="0">100</option>
<option value="1">150</option>
<option value="2">200</option>
<option value="3">300</option>
<option value="4">350</option>
<option value="5">400</option>
</select>
<span class="unit">mm</span>
</div>
</mat-grid-tile>
<mat-grid-tile colspan='2' rowspan='1'>
<span>
管网压力类型:
</span>
<select disabled [(ngModel)]="fireCockData[4].PropertyValue">
<option value="0">高压管网</option>
<option value="1">临时高压管网</option>
<option value="2">低压管网</option>
</select>
</mat-grid-tile>
<mat-grid-tile colspan='2' rowspan='1'>
<span>
管网压力范围:
</span>
<div class="unitDiv">
<input readonly type="text" [(ngModel)]="fireCockData[5].PropertyValue">
<span class="unit">Mpa</span>
</div>
</mat-grid-tile>
<mat-grid-tile colspan='2' rowspan='1'>
<span>
接口形式:
</span>
<select disabled [(ngModel)]="fireCockData[6].PropertyValue">
<option value="0">内扣式</option>
<option value="1">卡式</option>
<option value="2">螺纹式</option>
</select>
</mat-grid-tile>
<mat-grid-tile colspan='2' rowspan='1'>
<span>
接口口径:
</span>
<div class="unitDiv">
<select disabled [(ngModel)]="fireCockData[7].PropertyValue">
<option value="0">65</option>
<option value="1">80</option>
<option value="2">100</option>
<option value="3">150</option>
</select>
<span class="unit">mm</span>
</div>
</mat-grid-tile>
<mat-grid-tile colspan='2' rowspan='1'>
<span>
最大流量:
</span>
<div class="unitDiv">
<input readonly type="text" [(ngModel)]="fireCockData[8].PropertyValue">
<span class="unit">L/s</span>
</div>
</mat-grid-tile>
<mat-grid-tile colspan='3' rowspan='1'>
<span>
供水单位:
</span>
<input readonly style="width: 74%;" type="text" [(ngModel)]="fireCockData[9].PropertyValue">
</mat-grid-tile>
<mat-grid-tile colspan='3' rowspan='1'>
<span>
联系方式:
</span>
<input readonly style="width: 74%;" type="text" [(ngModel)]="fireCockData[10].PropertyValue">
</mat-grid-tile>
<mat-grid-tile colspan='6' rowspan='2'>
<span>
备注:
</span>
<textarea readonly [(ngModel)]="fireCockData[11].PropertyValue" style="height: 80%;" name="" id="" cols="30" rows="10"></textarea>
</mat-grid-tile>
</mat-grid-list>
<!-- 消防水池 -->
<mat-grid-list cols="6" rowHeight="40px" *ngIf="selectedWaterTypeIndex == 1">
<mat-grid-tile colspan='2' rowspan='1'>
<span>
可用状态:
</span>
<select disabled [(ngModel)]="poolData[0].PropertyValue">
<option value="0">可用</option>
<option value="1">维护</option>
<option value="2">损坏</option>
</select>
</mat-grid-tile>
<mat-grid-tile colspan='2' rowspan='1'>
<span>
储水量:
</span>
<div class="unitDiv">
<input readonly type="text" [(ngModel)]="poolData[1].PropertyValue">
<span class="unit"></span>
</div>
</mat-grid-tile>
<mat-grid-tile colspan='2' rowspan='1'>
<span>
取水最大流量:
</span>
<div class="unitDiv">
<input readonly type="text" [(ngModel)]="poolData[2].PropertyValue">
<span class="unit">L/s</span>
</div>
</mat-grid-tile>
<mat-grid-tile colspan='2' rowspan='1'>
<span>
进水流量:
</span>
<div class="unitDiv">
<input readonly type="text" [(ngModel)]="poolData[3].PropertyValue">
<span class="unit">L/s</span>
</div>
</mat-grid-tile>
<mat-grid-tile colspan='2' rowspan='1'>
<span>
同时取水车辆数:
</span>
<input readonly type="text" [(ngModel)]="poolData[4].PropertyValue">
</mat-grid-tile>
<mat-grid-tile colspan='2' rowspan='1'>
<span>
水源标高差:
</span>
<div class="unitDiv">
<input readonly type="text" [(ngModel)]="poolData[5].PropertyValue">
<span class="unit">m</span>
</div>
</mat-grid-tile>
<mat-grid-tile colspan='3' rowspan='1'>
<span>
补水时间:
</span>
<input readonly class="longinput" type="text" [(ngModel)]="poolData[6].PropertyValue">
</mat-grid-tile>
<mat-grid-tile colspan='3' rowspan='1'>
<span>
管网形式:
</span>
<input readonly class="longinput" type="text" [(ngModel)]="poolData[7].PropertyValue">
</mat-grid-tile>
<mat-grid-tile colspan='3' rowspan='1'>
<span>
供水单位:
</span>
<input readonly class="longinput" type="text" [(ngModel)]="poolData[8].PropertyValue">
</mat-grid-tile>
<mat-grid-tile colspan='3' rowspan='1'>
<span>
联系方式:
</span>
<input readonly class="longinput" type="text" [(ngModel)]="poolData[9].PropertyValue">
</mat-grid-tile>
<mat-grid-tile colspan='6' rowspan='2'>
<span>
备注:
</span>
<textarea [(ngModel)]="poolData[10].PropertyValue" style="height: 80%;" name="" id="" cols="30" rows="10"></textarea>
</mat-grid-tile>
</mat-grid-list>
<!-- 天然水源 -->
<mat-grid-list cols="6" rowHeight="40px" *ngIf="selectedWaterTypeIndex == 2">
<mat-grid-tile colspan='2' rowspan='1'>
<span>
可用状态:
</span>
<select disabled [(ngModel)]="naturalWaterData[0].PropertyValue">
<option value="0">可用</option>
<option value="1">维护</option>
<option value="2">损坏</option>
</select>
</mat-grid-tile>
<mat-grid-tile colspan='2' rowspan='1'>
<span>
天然水源类型:
</span>
<input readonly type="text" [(ngModel)]="naturalWaterData[1].PropertyValue">
</mat-grid-tile>
<mat-grid-tile colspan='2' rowspan='1'>
<span>
有无消防码头:
</span>
<select disabled [(ngModel)]="naturalWaterData[2].PropertyValue">
<option value="0"></option>
<option value="1"></option>
</select>
</mat-grid-tile>
<mat-grid-tile colspan='2' rowspan='1'>
<span>
水质:
</span>
<select disabled [(ngModel)]="naturalWaterData[3].PropertyValue">
<option value="0">淡水</option>
<option value="1">海水</option>
<option value="2">中水</option>
</select>
</mat-grid-tile>
<mat-grid-tile colspan='2' rowspan='1'>
<span>
同时取水车辆数:
</span>
<input readonly type="text" [(ngModel)]="naturalWaterData[4].PropertyValue">
</mat-grid-tile>
<mat-grid-tile colspan='2' rowspan='1'>
<span>
水源标高差:
</span>
<div class="unitDiv">
<input readonly type="text" [(ngModel)]="naturalWaterData[5].PropertyValue">
<span class="unit">m</span>
</div>
</mat-grid-tile>
<mat-grid-tile colspan='3' rowspan='1'>
<span>
有无枯水期:
</span>
<select disabled class="longinput" [(ngModel)]="naturalWaterData[6].PropertyValue">
<option value="0"></option>
<option value="1"></option>
</select>
</mat-grid-tile>
<mat-grid-tile colspan='3' rowspan='1'>
<span>
枯水期时间:
</span>
<input readonly class="longinput" type="text" [(ngModel)]="naturalWaterData[7].PropertyValue">
</mat-grid-tile>
<mat-grid-tile colspan='3' rowspan='1'>
<span>
供水单位:
</span>
<input readonly class="longinput" type="text" [(ngModel)]="naturalWaterData[8].PropertyValue">
</mat-grid-tile>
<mat-grid-tile colspan='3' rowspan='1'>
<span>
联系方式:
</span>
<input readonly class="longinput" type="text" [(ngModel)]="naturalWaterData[9].PropertyValue">
</mat-grid-tile>
<mat-grid-tile colspan='6' rowspan='2'>
<span>
备注:
</span>
<textarea [(ngModel)]="naturalWaterData[10].PropertyValue" style="height: 80%;" name="" id="" cols="30" rows="10"></textarea>
</mat-grid-tile>
</mat-grid-list>
</div>
</div>
</div>
</div>

116
src/app/plan-audit/water-audit/water-audit.component.scss

@ -0,0 +1,116 @@
.mapbox{
flex: 1;
background-color: #fff;
display: flex;
flex-direction: column;
select:disabled {
color: black!important;
opacity: 1;
}
#container{
width: 100%;
height: 200px;
}
.detailsbox{
width: 100%;
height:500px;
.tabsbox{
width: 100%;
height: 40px;
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{
span{
cursor: pointer;
color: #2196F3;
mat-icon{
vertical-align: sub;
font-size: 20px;
width: 20px;
height: 20px;
}
}
span:hover{
text-decoration: underline;
}
.submitAudit{
margin: 0 30px;
}
.close{
margin-right: 30px;
}
}
}
.contant{
width: 100%;
height:480px;
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;
}
}
}
}
}

25
src/app/plan-audit/water-audit/water-audit.component.spec.ts

@ -0,0 +1,25 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { WaterAuditComponent } from './water-audit.component';
describe('WaterAuditComponent', () => {
let component: WaterAuditComponent;
let fixture: ComponentFixture<WaterAuditComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ WaterAuditComponent ]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(WaterAuditComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

64
src/app/plan-audit/water-audit/water-audit.component.ts

@ -0,0 +1,64 @@
import { Component, OnInit } from '@angular/core';
declare var AMap: any;
@Component({
selector: 'app-water-audit',
templateUrl: './water-audit.component.html',
styleUrls: ['./water-audit.component.scss']
})
export class WaterAuditComponent implements OnInit {
constructor() { }
map:any
newPositionMarker:any
newPositionMarkerContent:any =
'<div class="custom-content-marker">' +
' <img style="width:20px;height:24px" src="/assets/images/定位.png">' +
'</div>'
ngOnInit(): void {
this.waterData.detailData = JSON.parse(this.waterData.detailData)
this.fireCockData = this.waterData.detailData
console.log(789, this.fireCockData)
setTimeout(() => {
this.map = new AMap.Map('container', {
zoom:18
})
if(this.waterData.location && this.waterData.location.x){
this.map.setCenter([this.waterData.location.x,this.waterData.location.y]);
this.newPositionMarker = new AMap.Marker({
position: [this.waterData.location.x,this.waterData.location.y],
content: this.newPositionMarkerContent,
offset: new AMap.Pixel(-10, -12)
})
// 将 markers 添加到地图
this.map.add(this.newPositionMarker);
}else{
this.map.setCity('上海市');
}
}, 0);
}
selectedWaterTypeIndex:number = 0//选择的水源类型 0消火栓 1水池 2天然水源
fireCockData:any = []//消火栓详情
poolData:any = []//水池详情
naturalWaterData:any = []//天然水源详情
waterData:any = {
id: "60125d31d31fab7de81c56b0",
name: "上海中心消火栓01",
administrativeRegion: "上海区",
governmentLevel: "1",
village: "小高社区",
address: "国际会议中心",
location: {
x: 121.496717,
y: 31.239452
},
detailData: "[{\"PropertyName\":\"可用状态\",\"PropertyValue\":\"1\"},{\"PropertyName\":\"放置形式\",\"PropertyValue\":\"1\"},{\"PropertyName\":\"管网形式\",\"PropertyValue\":\"2\"},{\"PropertyName\":\"管网直径\",\"PropertyValue\":\"2\"},{\"PropertyName\":\"管网压力类型\",\"PropertyValue\":\"1\"},{\"PropertyName\":\"管网压力范围\",\"PropertyValue\":\"2222\"},{\"PropertyName\":\"接口形式\",\"PropertyValue\":\"1\"},{\"PropertyName\":\"接口口径\",\"PropertyValue\":\"3\"},{\"PropertyName\":\"最大流量\",\"PropertyValue\":\"333\"},{\"PropertyName\":\"供水单位\",\"PropertyValue\":\"剃剃头\"},{\"PropertyName\":\"联系方式\",\"PropertyValue\":\"119\"},{\"PropertyName\":\"备注\",\"PropertyValue\":\"突突突突突突\"}]",
detailItems: null,
createTime: "2021-02-03T02:36:57.451Z",
creatorId: "5e8eced2aaca5f7c1025309b",
deleted: false,
waterSourceType: 0,
integrityScore: 0.21052632
}
}

24
src/app/ui/collection-tools-building/addDisposalNode.html

@ -1,24 +0,0 @@
<div class="functionalDomainContent">
<div mat-dialog-title>
<label *ngIf="!data.parentId">新建处置节点</label>
<label *ngIf="data.parentId">新建节点</label>
</div>
<form (ngSubmit)="onSubmit(form.value)" #form="ngForm" class="example-container">
<div class="keyMargin">
<mat-form-field>
<input matInput name="name" required ngModel placeholder="名称">
</mat-form-field>
</div>
<div class="submitBottom">
<button mat-raised-button color="primary" type="submit" [disabled]="!form.form.valid">
确定
</button>
<button mat-raised-button mat-dialog-close>取消</button>
</div>
</form>
</div>

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

@ -20,7 +20,14 @@
<button (click)="pasteAsset()" class="copytobutn marginLeftRight" mat-button title="粘贴" *ngIf="isEditPattern">
粘贴<mat-icon>screen_share</mat-icon>
</button>
<span title="适应缩放" class="zoom" (click)="adaptZoom()">
<img src="/assets/images/适应缩放.png" alt="">
适应缩放
</span>
<span title="重置缩放" class="zoom" (click)="resetZoom()">
<img src="/assets/images/重置缩放.png" alt="">
重置缩放
</span>
<span class="rightSave">
<!-- <mat-icon title="查看/编辑模式" (click)="lookpat()" *ngIf="isEditPattern">tv</mat-icon>
<mat-icon title="查看/编辑模式" (click)="editpat()" *ngIf="!isEditPattern && isediticon">create</mat-icon> -->
@ -52,7 +59,7 @@
<!-- H5Canvas -->
<app-working-area #canvas [init]='this'></app-working-area>
<!-- H5Canvas -->
<div id="leftDiv" class='functionalDomainLeft publicCss' [ngClass]="{'togglePanel': toggleExpandPanel==true,'scenarioAssignment': !pattern}" style="user-select: none;">
<div id="leftDiv" (mousewheel)="$event.stopPropagation()" class='functionalDomainLeft publicCss' [ngClass]="{'togglePanel': toggleExpandPanel==true,'scenarioAssignment': !pattern}" style="user-select: none;">
<div class="leftDragDiv" (mousedown)="leftDivMouseDown($event)"></div>
<!-- 平面图 -->
<div class="planarGraph">
@ -131,39 +138,10 @@
</div>
</div>
<!-- 素材库 -->
<!-- 处置预案 -->
<div class="handlePlan" *ngIf="!pattern">
<div class="planarGraphHeader" (click)='toggleHandlePlan()'>
<mat-icon *ngIf="toggleHandlePlans">keyboard_arrow_up</mat-icon>
<mat-icon *ngIf="!toggleHandlePlans">keyboard_arrow_down</mat-icon>
<label class="overflowText" style="font-weight: 550;">处置预案</label>
<label style="margin-left: 45px;">
<mat-icon style="color: #c2a40ce8;" title="计算差异" (click)='countValue($event)'>flash_on</mat-icon>
<mat-icon style="margin-left: 3px;" title="新建空节点" (click)='addPanelPoint($event,null,treeData)'>add</mat-icon>
</label>
</div>
<div [hidden]="!toggleHandlePlans">
<nz-tree #nzTreeComponent [nzData]="treeData" nzBlockNode nzDraggable (nzOnDrop)="nzEvent($event)" [nzTreeTemplate]="nzTreeTemplate" [nzBeforeDrop]="beforeDrop" [nzExpandedKeys]="defaultExpandedKeys"></nz-tree>
<ng-template #nzTreeTemplate let-node let-origin="origin">
<div id="terrNodePublic" (click)='selectanelPoint(node.origin)' [ngClass]="{'selectanelPoint': selectDisposalNode==node.origin.id}">
<label title="{{node.title}}" class="overflowText textNode">{{node.title}}</label>
<div class="planIconDiv">
<mat-icon *ngIf="!node.origin.sitePlanId && !node.origin.buildingAreaId" (click)='editPanelPoint($event,node)'>edit</mat-icon>
<mat-icon *ngIf="node.level===0" (click)='addPanelPoint($event,node.origin,null)'>add</mat-icon>
<mat-icon *ngIf="!node.origin.sitePlanId && !node.origin.buildingAreaId" (click)='copyPanelPoint($event,node,treeData)'>library_books</mat-icon>
<mat-icon (click)='deletePanelPoint($event,node.origin)'>delete_forever</mat-icon>
</div>
</div>
</ng-template>
</div>
</div>
<!-- 处置预案 -->
</div>
<div id="rightDiv" class="functionalDomainRight publicCss " [ngClass]="{'togglePanel2': toggleExpandPanelRight==true}" style="user-select: none;">
<div id="rightDiv" (mousewheel)="$event.stopPropagation()" class="functionalDomainRight publicCss " [ngClass]="{'togglePanel2': toggleExpandPanelRight==true}" style="user-select: none;">
<!-- 右侧div鼠标拖动div -->
<div style="width: 3px;height: 100%;position: absolute;left: 0;cursor: e-resize;z-index: 1000;" (mousedown)="rightDivMouseDown($event)"></div>
<!-- 属性 -->
@ -467,7 +445,7 @@
</div>
</div>
<div id="bottomDiv" class="bottomCss" *ngIf="!pattern">
<div id="bottomDiv" (mousewheel)="$event.stopPropagation()" class="bottomCss" *ngIf="!pattern">
<div class="dragDiv" (mousedown)="bottomDivMouseDown($event)"></div>
<div class="title">
<div (click)="details()" [ngClass]="{'detailsAndattentBtn': detailsAndattentBtn}">

9
src/app/ui/collection-tools-building/collection-tools.component.scss

@ -25,6 +25,15 @@
align-items:center;
min-height: 40px;
background-color: #fff;
.zoom{
display: flex;
align-items: center;
margin-left: 15px;
cursor: pointer;
img{
margin-right: 3px;
}
}
.marginLeftRight {
margin: 0 8px;
font-size: 16px;

120
src/app/ui/collection-tools-building/collection-tools.component.ts

@ -2,14 +2,13 @@ import { Component, OnInit, Inject, ViewChild,ElementRef,Renderer2, ViewContaine
import { HttpClient, HttpHeaders } from '@angular/common/http';
import { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
import { MatSnackBar, MatSnackBarConfig } from '@angular/material/snack-bar';
import {leftFunctionalDomainBuildingComponent,editPlaneFigureBuildingComponent,addDisposalNodeBuildingComponent,editDisposalNodeBuildingComponent} from './leftFunctionalDomain'
import {leftFunctionalDomainBuildingComponent,editPlaneFigureBuildingComponent} from './leftFunctionalDomain'
import {MatTreeFlatDataSource, MatTreeFlattener} from '@angular/material/tree';
import {FlatTreeControl} from '@angular/cdk/tree';
import {WorkingAreaComponent} from '../../working-area/working-area.component'
import {CanvasShareDataService, DisposalNodeData} from '../../canvas-share-data.service' //引入服务
import Viewer from 'viewerjs';
import Swiper from 'swiper';
import { saveOneDialogBuilding } from './save';
import { NzFormatBeforeDropEvent, NzFormatEmitEvent,NzTreeComponent } from 'ng-zorro-antd/tree';
import { Observable, of } from 'rxjs';
import { GameMode } from 'src/app/working-area/model/gameMode';
@ -172,7 +171,14 @@ export class CollectionToolsBuildingComponent implements OnInit {
this.getDisposalNode()
}
}
//适应缩放
adaptZoom(){
this.canvas.zoomFit()
}
//重置缩放
resetZoom(){
this.canvas.resetCamera2D()
}
//ngzorro tree 拖拽
nzEvent(event: NzFormatEmitEvent): void {
if(this.isDrag){
@ -457,14 +463,6 @@ export class CollectionToolsBuildingComponent implements OnInit {
this.canvas.refreshIcon(this.canvasAssetObj.Id)
}
//查看图片详情
lookImg(){
const dialogRef = this.dialog.open(ViewDetailsBuilding, {//调用open方法打开对话框并且携带参数过去
data: {imagesArr:this.imagesArr,index:this.clickedIndex}
});
dialogRef.afterClosed().subscribe(data=>{ });
}
//上传素材图片
selectFile(e){
let imgFile = e.target.files[0] || null //上传的文件
@ -628,10 +626,8 @@ export class CollectionToolsBuildingComponent implements OnInit {
AxMessageSystem.addListener('selectionChanged', ()=>{
if(this.canvas.selection.size() == 1){//如果是单选
this.isMultipleAsset = false
// console.log('单选',this.canvas.selection.first().assetData)
this.setAssetsProperty(this.canvas.selection.first().assetData)
}else if(this.canvas.selection.size()){
// console.log('多选')
this.isShowProperty = true
this.multipleAssetData = this.canvas.selection.all()
this.firstMultipleAssetData = this.canvas.selection.first()
@ -1169,21 +1165,7 @@ export class CollectionToolsBuildingComponent implements OnInit {
}
}
}else{//如果是想定作业编辑模式
const dialogRef = this.dialog.open(saveOneDialogBuilding, {
data: {allDisposalNode: this.canvasData.allDisposalNode,
selectedBuildingData:this.beforeOneCheckedBuilding,
selectedSiteData:this.selectingSitePlan,
siteOrbuilding:this.checkedBuildingIndex,
disasterId: this.allFirePlan[0].id || ''
}
});
dialogRef.afterClosed().subscribe(result => {
// console.log('The dialog was closed');
});
}
} else { //if
const config = new MatSnackBarConfig();
config.verticalPosition = 'top';
@ -2239,43 +2221,6 @@ export class CollectionToolsBuildingComponent implements OnInit {
})
}
//新建 处置预案 节点
addPanelPoint (e,item,treeData) {
e.stopPropagation()
let order
if (item) {
item.children.length? order = item.children[item.children.length-1].order+1 : order = 0
} else {
treeData.length? order = treeData[treeData.length-1].order+1 : order = 0
}
let data = {
name: '',
level: item? 1 : 0,
order: order,
description: '',
disasterId: this.allFirePlan[0].id || '',
parentId: item? item.id : null,
planComponentId: sessionStorage.getItem('planId') || '',
}
let dialogRef = this.dialog.open(addDisposalNodeBuildingComponent,{data});
dialogRef.afterClosed().subscribe(data=>{
if (data) { this.refurbishTreeData() }
})
}
//编辑 处置预案 节点
editPanelPoint (e,item) {
e.stopPropagation()
let data = item.origin
let dialogRef = this.dialog.open(editDisposalNodeBuildingComponent,{data});
dialogRef.afterClosed().subscribe(data=>{
if (data) {
item.title = data
this.canvasData.allDisposalNode.forEach(element => { element.id === item.key? element.name=data : null });
}
})
}
//复制 处置预案 节点
copyPanelPoint (e,item,treeData) {
e.stopPropagation()
@ -2491,50 +2436,3 @@ export class EditBuildingBuilding {
}
}
//查看图片大图
@Component({
selector: 'viewdetails-building',
templateUrl: './viewdetails.html',
styleUrls: ['./collection-tools.component.scss']
})
export class ViewDetailsBuilding {
// myControl = new FormControl();
//注入MatDialogRef,可以用来关闭对话框
//要访问对话框组件中的数据,必须使用MAT_DIALOG_DATA注入令牌
constructor(private http: HttpClient,public dialogRef: MatDialogRef<any>,@Inject(MAT_DIALOG_DATA) public data,private element: ElementRef) {}
imagesArr = this.data.imagesArr
onNoClick(): void {
this.dialogRef.close();
}
ngOnInit(): void {
setTimeout(() => {
var mySwiper = new Swiper('.swiper-container',{
loop: false,
initialSlide :this.data.index,//默认索引
// 如果需要前进后退按钮
navigation: {
nextEl: '.swiper-button-next',
prevEl: '.swiper-button-prev',
}
//其他设置
});
}, 0);
}
closeDialog(){
this.dialogRef.close();
}
count = 10
zoomimg(e) {
if(this.count != 1 || e.wheelDelta >= 120){
if(e.wheelDelta >= 120){
this.count++
}else{
this.count--
}
}
e.srcElement.style.zoom = this.count + '0%'
e.srcElement.style.maxWidth = null
e.srcElement.style.maxHeight = null
}
}

23
src/app/ui/collection-tools-building/editDisposalNode.html

@ -1,23 +0,0 @@
<div class="functionalDomainContent">
<div mat-dialog-title>
<label>修改灾情节点名称</label>
</div>
<form (ngSubmit)="onSubmit(form.value)" #form="ngForm" class="example-container">
<div class="keyMargin">
<mat-form-field>
<input matInput name="name" required [(ngModel)]="nodeName" placeholder="名称">
</mat-form-field>
</div>
<div class="submitBottom">
<button mat-raised-button color="primary" type="submit" [disabled]="!form.form.valid">
确定
</button>
<button mat-raised-button mat-dialog-close>取消</button>
</div>
</form>
</div>

52
src/app/ui/collection-tools-building/leftFunctionalDomain.ts

@ -126,55 +126,3 @@ export class editPlaneFigureBuildingComponent implements OnInit {
}
//创建 处置预案 节点
@Component({
selector: 'app-addDisposalNode-building',
templateUrl: './addDisposalNode.html',
styleUrls: ['./panel.scss']
})
export class addDisposalNodeBuildingComponent implements OnInit {
constructor(private http:HttpClient,public dialog: MatDialog,public snackBar: MatSnackBar,public dialogRef: MatDialogRef<any>,@Inject(MAT_DIALOG_DATA) public data) { }
ngOnInit(): void {
}
//提交表单
onSubmit (e) {
this.data.name = e.name
this.http.post('/api/DisposalNodes',this.data).subscribe(data=>{
this.dialogRef.close('success');
})
}
}
//编辑 处置预案 节点
@Component({
selector: 'app-editDisposalNode-building',
templateUrl: './editDisposalNode.html',
styleUrls: ['./panel.scss']
})
export class editDisposalNodeBuildingComponent implements OnInit {
constructor(private http:HttpClient,public dialog: MatDialog,public snackBar: MatSnackBar,public dialogRef: MatDialogRef<any>,@Inject(MAT_DIALOG_DATA) public data) { }
ngOnInit(): void {
this.nodeName = JSON.parse(JSON.stringify( this.data.name || '' ))
}
nodeName:string;
//提交表单
onSubmit (e) {
this.data.name = e.name
this.http.put(`/api/DisposalNodes/${this.data.id}`,this.data).subscribe(data=>{
this.dialogRef.close(e.name);
})
}
}

300
src/app/ui/collection-tools-building/save.ts

@ -1,300 +0,0 @@
import { Component, OnInit, Inject } from '@angular/core';
import { HttpClient, HttpHeaders } from '@angular/common/http';
import { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
import { MatSnackBar, MatSnackBarConfig } from '@angular/material/snack-bar';
import {CanvasShareDataService,DisposalNodeData} from '../../canvas-share-data.service' //引入服务
// 保存想定作业第一个弹窗
@Component({
selector: 'dialog-overview-example-dialog-building',
templateUrl: 'saveOne.html',
styleUrls: ['./collection-tools.component.scss']
})
export class saveOneDialogBuilding {
constructor(
private http:HttpClient,
public dialog: MatDialog,
public snackBar: MatSnackBar,
public dialogRef: MatDialogRef<any>,
@Inject(MAT_DIALOG_DATA) public data) {}
onNoClick(): void {
this.dialogRef.close()
}
allDisposalNode = this.data.allDisposalNode
saveType(type){
this.dialogRef.close()
const dialogRef = this.dialog.open(saveTwoDialogBuilding, {
data: {type: type,
allDisposalNode: this.data.allDisposalNode,
selectedBuildingData:this.data.selectedBuildingData,
selectedSiteData:this.data.selectedSiteData,
siteOrbuilding:this.data.siteOrbuilding,
disasterId:this.data.disasterId}
});
dialogRef.afterClosed().subscribe(result => {
});
}
}
// 保存想定作业第二个弹窗
@Component({
selector: 'dialog-overview-example-dialog-building',
templateUrl: 'saveTwo.html',
styleUrls: ['./collection-tools.component.scss']
})
export class saveTwoDialogBuilding {
constructor(
private http:HttpClient,
public dialogRef: MatDialogRef<any>,
public canvasData: CanvasShareDataService,
public snackBar: MatSnackBar,
@Inject(MAT_DIALOG_DATA) public data) {}
type = this.data.type
allDisposalNode = this.data.allDisposalNode
allPlanDisposalNode = []
allRootDisposalNode = [{name:"根节点",id:null}]
allDisposalNodeChild = []
ngOnInit(): void {
//所有非数据节点
this.allDisposalNode.forEach(item => {
if(!item.sitePlanId && !item.buildingAreaId){
this.allPlanDisposalNode.push(item)
}
})
//所有一级节点
this.allDisposalNode.forEach(item => {
if(!item.parentId){
this.allRootDisposalNode.push(item)
}
})
this.allDisposalNodeChild = JSON.parse(JSON.stringify(this.allDisposalNode))
this.allDisposalNodeChild.forEach(item => {
item.children = []
this.allDisposalNodeChild.forEach(i => {
if(i.parentId == item.id){
item.children.push(i)
}
})
})
// console.log(this.nodeItem.id)
}
onNoClick(): void {
this.dialogRef.close();
}
nodeItem
itemChildNum = 0 //点击处置节点子数据节点的数量
clickNode(item){
// console.log(item)
this.nodeItem = item
this.allDisposalNodeChild.forEach(item => {
if(item.id == this.nodeItem.id){
this.itemChildNum = item.children.length
}
})
}
selectedBuildingData = this.data.selectedBuildingData
selectedSiteData = this.data.selectedSiteData
onSubmit(value,type){
// console.log(type)
let name = this.selectedBuildingData.name + '-' + this.selectedSiteData.name
//如果保存到已有节点
var postdata = {
id: "",
name: name,
level: 0,
order: this.itemChildNum,
description: "",
notes: "",
weather: null,
airTemperature: null,
windDirection: null,
windScale: null,
imageNames: null,
imageUrls: null,
parentId: this.nodeItem ? this.nodeItem.id : null,
disasterId: this.data.disasterId,
planComponentId: sessionStorage.getItem('planId') || '',
companyId: this.data.siteOrbuilding == -1 ? sessionStorage.getItem('companyId') : null,
sitePlanId: this.data.siteOrbuilding==-1 ? this.selectedSiteData.id : null,
buildingId: this.selectedBuildingData.id || null,
buildingAreaId: this.data.siteOrbuilding!=-1 ? this.selectedSiteData.id : null
}
if(type == 'old'){
let istrue = this.canvasData.findDisposalNode(this.nodeItem.id,name)
let putdata = this.nodeItem
putdata.weather = this.canvasData.selectPanelPointBaseData.weather
putdata.airTemperature = Number(this.canvasData.selectPanelPointBaseData.airTemperature)
putdata.windScale = Number(this.canvasData.selectPanelPointBaseData.windScale)
putdata.windDirection = Number(this.canvasData.selectPanelPointBaseData.windDirection)
putdata.description = this.canvasData.selectPanelPointBaseData.description
putdata.notes = this.canvasData.selectPanelPointBaseData.notes
if(istrue){//如果该处置节点下已有同名数据节点 则只修改 2个接口
new Promise((resolve,reject)=>{
this.http.put(`/api/DisposalNodes/${value.nodeId}`,putdata).subscribe(data => {
resolve("更新处置节点成功,将天气 节点详情等信息保存到点击的节点")
})
}).then((values)=>{
this.canvasData.sendMessage('send a message');//发布一条消息
// 保存平面图数据到当前节点
let postdata =JSON.parse(JSON.stringify(this.canvasData.selectPanelPoint))
postdata.Data = JSON.stringify(postdata.Data)
this.http.post(`/api/DisposalNodeData`,postdata).subscribe(data => {
const config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('保存成功','确定',config)
},err=>{
const config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('保存失败','确定',config)
})
this.dialogRef.close();
this.canvasData.sendMessage('send a message');//发布一条消息
})
}else{//需要3个接口
new Promise((resolve,reject)=>{
this.http.put(`/api/DisposalNodes/${value.nodeId}`,putdata).subscribe(data => {
resolve("更新处置节点成功,将天气 节点详情等信息保存到点击的节点")
})
}).then((values)=>{
// console.log(values)
postdata.level = putdata.level + 1
new Promise((resolve,reject) => {
this.http.post(`/api/DisposalNodes`,postdata).subscribe(data => {
resolve(data)
})
}).then((data:any)=>{
// console.log(7788,data)
let objData = {
id: "",
data: JSON.stringify(this.canvasData.selectPanelPoint.Data) || null,
version: this.canvasData.selectPanelPoint.Version || "2.0",
disposalNodeId: data.id,
planComponentId: sessionStorage.getItem("planId"),
}
this.http.post(`/api/DisposalNodeData`,objData).subscribe(data => {
const config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('保存成功','确定',config)
},err=>{
const config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('保存失败','确定',config)
})
this.dialogRef.close();
this.canvasData.sendMessage('send a message');//发布一条消息
})
})
}
}else{//如果保存到新建节点
let dispositionNodeData //处置节点data
let order
let oneLevelNum = []
//将order赋值为所有一级节点最后一个+1
this.allDisposalNode.forEach(item => {
if(!item.parentId){
oneLevelNum.push(item)
}
})
if(oneLevelNum.length == 0){
order = 0
}else{
order = oneLevelNum[oneLevelNum.length - 1].order + 1
}
if(this.nodeItem){//如果点击了下拉选择框
if(this.nodeItem.id != null){
this.allDisposalNodeChild.forEach(item => {
if(item.id == this.nodeItem.id){
order = item.children.length
}
})
}
}
dispositionNodeData = {
id: "",
name: value.name,
level: this.nodeItem && this.nodeItem.id != null ? this.nodeItem.level + 1 : 0,
order: order,
description: "",
notes: "",
weather: null,
airTemperature: 0,
windDirection: 0,
windScale: 0,
imageNames: null,
imageUrls: null,
parentId: this.nodeItem ? this.nodeItem.id : null,
disasterId: this.data.disasterId,
planComponentId: sessionStorage.getItem('planId') || '',
companyId: null,
sitePlanId: null,
buildingId: null,
buildingAreaId: null
}
dispositionNodeData.weather = this.canvasData.selectPanelPointBaseData.weather
dispositionNodeData.airTemperature = Number(this.canvasData.selectPanelPointBaseData.airTemperature)
dispositionNodeData.windScale = Number(this.canvasData.selectPanelPointBaseData.windScale)
dispositionNodeData.windDirection = Number(this.canvasData.selectPanelPointBaseData.windDirection)
dispositionNodeData.description = this.canvasData.selectPanelPointBaseData.description
dispositionNodeData.notes = this.canvasData.selectPanelPointBaseData.notes
//1.先创建一个处置节点 然后 .then 2.创建数据节点到刚创建的处置节点 3.然后拿着创建好的数据节点的id 将平面图data保存
new Promise((resolve,reject) => {
this.http.post("/api/DisposalNodes",dispositionNodeData).subscribe((data:any) => {
resolve(data.id)
})
}).then((id) => {
let dataNodeData
new Promise((resolve,reject) => {
postdata.parentId = id
postdata.level = dispositionNodeData.level + 1
this.http.post("/api/DisposalNodes",postdata).subscribe((data:any) => {
resolve(data)
})
}).then((data:any) => {
// 保存平面图数据到当前节点
// console.log(6666,data)
// let postdata =JSON.parse(JSON.stringify(this.canvasData.selectPanelPoint))
// postdata.Data = JSON.stringify(postdata.Data)
let objData = {
id: "",
data: JSON.stringify(this.canvasData.selectPanelPoint.Data) || null,
version: this.canvasData.selectPanelPoint.Version || "2.0",
disposalNodeId: data.id,
planComponentId: sessionStorage.getItem("planId"),
}
this.http.post(`/api/DisposalNodeData`,objData).subscribe(data => {
const config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('保存成功','确定',config)
},err=>{
const config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('保存失败','确定',config)
})
this.dialogRef.close();
this.canvasData.sendMessage("send a message")
})
})
}
}
}

5
src/app/ui/collection-tools-building/saveOne.html

@ -1,5 +0,0 @@
<div mat-dialog-title>处置节点保存</div>
<div style="display: flex;">
<button mat-stroked-button style="margin-right: 5px;" (click)="saveType('new')">新建节点并保存</button>
<button mat-stroked-button (click)="saveType('old')">保存到已有节点</button>
</div>

53
src/app/ui/collection-tools-building/saveTwo.html

@ -1,53 +0,0 @@
<div *ngIf="type == 'new'">
<div mat-dialog-title>新增节点</div>
<div>
<form (ngSubmit)="onSubmit(form.value,'new')" #form="ngForm" class="example-container">
<div mat-dialog-content>
<mat-form-field>
<input type="text" matInput ngModel
required name="name" placeholder="节点名称" autocomplete="off">
</mat-form-field>
</div>
<div mat-dialog-content>
<mat-form-field>
<mat-select [(value)]="allRootDisposalNode[0].name" required placeholder="父节点名称">
<mat-option *ngFor="let item of allRootDisposalNode" [value]="item.name" (click)="clickNode(item)">
{{item.name}}
</mat-option>
</mat-select>
</mat-form-field>
</div>
<div mat-dialog-actions>
<button mat-raised-button color="primary" type="submit"
[disabled]="!form.form.valid">
确定
</button>
<button mat-raised-button mat-dialog-close>取消</button>
</div>
</form>
</div>
</div>
<div *ngIf="type == 'old'">
<div mat-dialog-title>保存到已有节点</div>
<div>
<form (ngSubmit)="onSubmit(form.value,'old')" #form="ngForm" class="example-container">
<div mat-dialog-content>
<mat-form-field>
<mat-select required ngModel placeholder="父节点名称" name="nodeId">
<mat-option *ngFor="let item of allPlanDisposalNode" [value]="item.id" (click)="clickNode(item)">
{{item.name}}
</mat-option>
</mat-select>
</mat-form-field>
</div>
<div mat-dialog-actions>
<button mat-raised-button color="primary" type="submit"
[disabled]="!form.form.valid">
确定
</button>
<button mat-raised-button mat-dialog-close>取消</button>
</div>
</form>
</div>
</div>

24
src/app/ui/collection-tools-building/viewdetails.html

@ -1,24 +0,0 @@
<div style="position: relative;width: 1400px;height: 800px;line-height: 800px;" class="swiper-container">
<div style="position: absolute;right: -2px;top: -392px;cursor: pointer;z-index: 999;width: 24px;height: 24px;" (click)="closeDialog()">
<span><mat-icon>clear</mat-icon></span>
</div>
<div class="swiper-wrapper">
<div class="swiper-slide" style="text-align: center;" *ngFor="let img of imagesArr">
<img id="bigimg" (mousewheel)="zoomimg($event)" style="
max-width: 96%;
max-height: 100%;
min-width: 1px;
min-height: 1px;
position: absolute;
top: 0;
left: 0;
bottom: 0;
right: 0;
margin: auto;" [src]="img.PropertyValue" alt="">
</div>
</div>
<!-- 如果需要导航按钮 -->
<div class="swiper-button-next"></div>
<div class="swiper-button-prev"></div>
</div>

24
src/app/ui/collection-tools-plan/addDisposalNode.html

@ -1,24 +0,0 @@
<div class="functionalDomainContent">
<div mat-dialog-title>
<label *ngIf="!data.parentId">新建处置节点</label>
<label *ngIf="data.parentId">新建节点</label>
</div>
<form (ngSubmit)="onSubmit(form.value)" #form="ngForm" class="example-container">
<div class="keyMargin">
<mat-form-field>
<input matInput name="name" required ngModel placeholder="名称">
</mat-form-field>
</div>
<div class="submitBottom">
<button mat-raised-button color="primary" type="submit" [disabled]="!form.form.valid">
确定
</button>
<button mat-raised-button mat-dialog-close>取消</button>
</div>
</form>
</div>

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

@ -20,7 +20,14 @@
<button (click)="pasteAsset()" class="copytobutn marginLeftRight" mat-button title="粘贴" *ngIf="isEditPattern">
粘贴<mat-icon>screen_share</mat-icon>
</button>
<span title="适应缩放" class="zoom" (click)="adaptZoom()">
<img src="/assets/images/适应缩放.png" alt="">
适应缩放
</span>
<span title="重置缩放" class="zoom" (click)="resetZoom()">
<img src="/assets/images/重置缩放.png" alt="">
重置缩放
</span>
<span class="rightSave">
<!-- <mat-icon title="查看/编辑模式" (click)="lookpat()" *ngIf="isEditPattern">tv</mat-icon>
<mat-icon title="查看/编辑模式" (click)="editpat()" *ngIf="!isEditPattern && isediticon">create</mat-icon> -->
@ -35,7 +42,7 @@
<!-- H5Canvas -->
<app-working-area #canvas [init]='this'></app-working-area>
<!-- H5Canvas -->
<div id="leftDiv" class='functionalDomainLeft publicCss' [ngClass]="{'togglePanel': toggleExpandPanel==true,'scenarioAssignment': !pattern}" style="user-select: none;">
<div id="leftDiv" (mousewheel)="$event.stopPropagation()" class='functionalDomainLeft publicCss' [ngClass]="{'togglePanel': toggleExpandPanel==true,'scenarioAssignment': !pattern}" style="user-select: none;">
<div class="leftDragDiv" (mousedown)="leftDivMouseDown($event)"></div>
<!-- 平面图 -->
<div class="planarGraph">
@ -114,39 +121,10 @@
</div>
</div>
<!-- 素材库 -->
<!-- 处置预案 -->
<div class="handlePlan" *ngIf="!pattern">
<div class="planarGraphHeader" (click)='toggleHandlePlan()'>
<mat-icon *ngIf="toggleHandlePlans">keyboard_arrow_up</mat-icon>
<mat-icon *ngIf="!toggleHandlePlans">keyboard_arrow_down</mat-icon>
<label class="overflowText" style="font-weight: 550;">处置预案</label>
<label style="margin-left: 45px;">
<mat-icon style="color: #c2a40ce8;" title="计算差异" (click)='countValue($event)'>flash_on</mat-icon>
<mat-icon style="margin-left: 3px;" title="新建空节点" (click)='addPanelPoint($event,null,treeData)'>add</mat-icon>
</label>
</div>
<div [hidden]="!toggleHandlePlans">
<nz-tree #nzTreeComponent [nzData]="treeData" nzBlockNode nzDraggable (nzOnDrop)="nzEvent($event)" [nzTreeTemplate]="nzTreeTemplate" [nzBeforeDrop]="beforeDrop" [nzExpandedKeys]="defaultExpandedKeys"></nz-tree>
<ng-template #nzTreeTemplate let-node let-origin="origin">
<div id="terrNodePublic" (click)='selectanelPoint(node.origin)' [ngClass]="{'selectanelPoint': selectDisposalNode==node.origin.id}">
<label title="{{node.title}}" class="overflowText textNode">{{node.title}}</label>
<div class="planIconDiv">
<mat-icon *ngIf="!node.origin.sitePlanId && !node.origin.buildingAreaId" (click)='editPanelPoint($event,node)'>edit</mat-icon>
<mat-icon *ngIf="node.level===0" (click)='addPanelPoint($event,node.origin,null)'>add</mat-icon>
<mat-icon *ngIf="!node.origin.sitePlanId && !node.origin.buildingAreaId" (click)='copyPanelPoint($event,node,treeData)'>library_books</mat-icon>
<mat-icon (click)='deletePanelPoint($event,node.origin)'>delete_forever</mat-icon>
</div>
</div>
</ng-template>
</div>
</div>
<!-- 处置预案 -->
</div>
<div id="rightDiv" class="functionalDomainRight publicCss " [ngClass]="{'togglePanel2': toggleExpandPanelRight==true}" style="user-select: none;">
<div id="rightDiv" (mousewheel)="$event.stopPropagation()" class="functionalDomainRight publicCss " [ngClass]="{'togglePanel2': toggleExpandPanelRight==true}" style="user-select: none;">
<!-- 右侧div鼠标拖动div -->
<div style="width: 3px;height: 100%;position: absolute;left: 0;cursor: e-resize;z-index: 1000;" (mousedown)="rightDivMouseDown($event)"></div>
<!-- 属性 -->

9
src/app/ui/collection-tools-plan/collection-tools.component.scss

@ -25,6 +25,15 @@
align-items:center;
min-height: 40px;
background-color: #fff;
.zoom{
display: flex;
align-items: center;
margin-left: 15px;
cursor: pointer;
img{
margin-right: 3px;
}
}
.marginLeftRight {
margin: 0 8px;
font-size: 16px;

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

@ -2,14 +2,13 @@ import { Component, OnInit, Inject, ViewChild,ElementRef,Renderer2, ViewContaine
import { HttpClient, HttpHeaders } from '@angular/common/http';
import { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
import { MatSnackBar, MatSnackBarConfig } from '@angular/material/snack-bar';
import {leftFunctionalDomainComponentPlan,editPlaneFigureComponentPlan,editDisposalNodeComponentPlan,addDisposalNodeComponentPlan} from './leftFunctionalDomain'
import {leftFunctionalDomainComponentPlan,editPlaneFigureComponentPlan} from './leftFunctionalDomain'
import {MatTreeFlatDataSource, MatTreeFlattener} from '@angular/material/tree';
import {FlatTreeControl} from '@angular/cdk/tree';
import {WorkingAreaComponent} from '../../working-area/working-area.component'
import {CanvasShareDataService, DisposalNodeData} from '../../canvas-share-data.service' //引入服务
import Viewer from 'viewerjs';
import Swiper from 'swiper';
import { saveOneDialogPlan } from './save';
import { NzFormatBeforeDropEvent, NzFormatEmitEvent,NzTreeComponent } from 'ng-zorro-antd/tree';
import { Observable, of } from 'rxjs';
import { GameMode } from 'src/app/working-area/model/gameMode';
@ -173,6 +172,14 @@ export class CollectionToolsPlanComponent implements OnInit {
}
}
//适应缩放
adaptZoom(){
this.canvas.zoomFit()
}
//重置缩放
resetZoom(){
this.canvas.resetCamera2D()
}
//ngzorro tree 拖拽
nzEvent(event: NzFormatEmitEvent): void {
if(this.isDrag){
@ -460,14 +467,6 @@ export class CollectionToolsPlanComponent implements OnInit {
this.canvas.refreshIcon(this.canvasAssetObj.Id)
}
//查看图片详情
lookImg(){
const dialogRef = this.dialog.open(ViewDetailsPlan, {//调用open方法打开对话框并且携带参数过去
data: {imagesArr:this.imagesArr,index:this.clickedIndex}
});
dialogRef.afterClosed().subscribe(data=>{ });
}
//上传素材图片
selectFile(e){
let imgFile = e.target.files[0] || null //上传的文件
@ -633,7 +632,6 @@ export class CollectionToolsPlanComponent implements OnInit {
// console.log('单选',this.canvas.selection.first().assetData)
this.setAssetsProperty(this.canvas.selection.first().assetData)
}else if(this.canvas.selection.size()){
// console.log('多选')
this.isShowProperty = true
this.multipleAssetData = this.canvas.selection.all()
this.firstMultipleAssetData = this.canvas.selection.first()
@ -810,8 +808,6 @@ export class CollectionToolsPlanComponent implements OnInit {
})
}
ngAfterViewInit(): void {
//不是gis模块平面图
if(this.router.url.indexOf("gis") == -1) {
@ -1171,21 +1167,7 @@ export class CollectionToolsPlanComponent implements OnInit {
}
}
}else{//如果是想定作业编辑模式
const dialogRef = this.dialog.open(saveOneDialogPlan, {
data: {allDisposalNode: this.canvasData.allDisposalNode,
selectedBuildingData:this.beforeOneCheckedBuilding,
selectedSiteData:this.selectingSitePlan,
siteOrbuilding:this.checkedBuildingIndex,
disasterId: this.allFirePlan[0].id || ''
}
});
dialogRef.afterClosed().subscribe(result => {
// console.log('The dialog was closed');
});
}
} else { //if
const config = new MatSnackBarConfig();
config.verticalPosition = 'top';
@ -2249,43 +2231,6 @@ export class CollectionToolsPlanComponent implements OnInit {
})
}
//新建 处置预案 节点
addPanelPoint (e,item,treeData) {
e.stopPropagation()
let order
if (item) {
item.children.length? order = item.children[item.children.length-1].order+1 : order = 0
} else {
treeData.length? order = treeData[treeData.length-1].order+1 : order = 0
}
let data = {
name: '',
level: item? 1 : 0,
order: order,
description: '',
disasterId: this.allFirePlan[0].id || '',
parentId: item? item.id : null,
planComponentId: sessionStorage.getItem('planId') || '',
}
let dialogRef = this.dialog.open(addDisposalNodeComponentPlan,{data});
dialogRef.afterClosed().subscribe(data=>{
if (data) { this.refurbishTreeData() }
})
}
//编辑 处置预案 节点
editPanelPoint (e,item) {
e.stopPropagation()
let data = item.origin
let dialogRef = this.dialog.open(editDisposalNodeComponentPlan,{data});
dialogRef.afterClosed().subscribe(data=>{
if (data) {
item.title = data
this.canvasData.allDisposalNode.forEach(element => { element.id === item.key? element.name=data : null });
}
})
}
//复制 处置预案 节点
copyPanelPoint (e,item,treeData) {
e.stopPropagation()
@ -2500,51 +2445,3 @@ export class EditBuildingPlan {
})
}
}
//查看图片大图
@Component({
selector: 'viewdetails-plan',
templateUrl: './viewdetails.html',
styleUrls: ['./collection-tools.component.scss']
})
export class ViewDetailsPlan {
// myControl = new FormControl();
//注入MatDialogRef,可以用来关闭对话框
//要访问对话框组件中的数据,必须使用MAT_DIALOG_DATA注入令牌
constructor(private http: HttpClient,public dialogRef: MatDialogRef<ViewDetailsPlan>,@Inject(MAT_DIALOG_DATA) public data,private element: ElementRef) {}
imagesArr = this.data.imagesArr
onNoClick(): void {
this.dialogRef.close();
}
ngOnInit(): void {
setTimeout(() => {
var mySwiper = new Swiper('.swiper-container',{
loop: false,
initialSlide :this.data.index,//默认索引
// 如果需要前进后退按钮
navigation: {
nextEl: '.swiper-button-next',
prevEl: '.swiper-button-prev',
}
//其他设置
});
}, 0);
}
closeDialog(){
this.dialogRef.close();
}
count = 10
zoomimg(e) {
if(this.count != 1 || e.wheelDelta >= 120){
if(e.wheelDelta >= 120){
this.count++
}else{
this.count--
}
}
e.srcElement.style.zoom = this.count + '0%'
e.srcElement.style.maxWidth = null
e.srcElement.style.maxHeight = null
}
}

23
src/app/ui/collection-tools-plan/editDisposalNode.html

@ -1,23 +0,0 @@
<div class="functionalDomainContent">
<div mat-dialog-title>
<label>修改灾情节点名称</label>
</div>
<form (ngSubmit)="onSubmit(form.value)" #form="ngForm" class="example-container">
<div class="keyMargin">
<mat-form-field>
<input matInput name="name" required [(ngModel)]="nodeName" placeholder="名称">
</mat-form-field>
</div>
<div class="submitBottom">
<button mat-raised-button color="primary" type="submit" [disabled]="!form.form.valid">
确定
</button>
<button mat-raised-button mat-dialog-close>取消</button>
</div>
</form>
</div>

52
src/app/ui/collection-tools-plan/leftFunctionalDomain.ts

@ -164,55 +164,3 @@ export class editPlaneFigureComponentPlan implements OnInit {
}
//创建 处置预案 节点
@Component({
selector: 'app-addDisposalNode-plan',
templateUrl: './addDisposalNode.html',
styleUrls: ['./panel.scss']
})
export class addDisposalNodeComponentPlan implements OnInit {
constructor(private http:HttpClient,public dialog: MatDialog,public snackBar: MatSnackBar,public dialogRef: MatDialogRef<any>,@Inject(MAT_DIALOG_DATA) public data) { }
ngOnInit(): void {
}
//提交表单
onSubmit (e) {
this.data.name = e.name
this.http.post('/api/DisposalNodes',this.data).subscribe(data=>{
this.dialogRef.close('success');
})
}
}
//编辑 处置预案 节点
@Component({
selector: 'app-editDisposalNode-plan',
templateUrl: './editDisposalNode.html',
styleUrls: ['./panel.scss']
})
export class editDisposalNodeComponentPlan implements OnInit {
constructor(private http:HttpClient,public dialog: MatDialog,public snackBar: MatSnackBar,public dialogRef: MatDialogRef<any>,@Inject(MAT_DIALOG_DATA) public data) { }
ngOnInit(): void {
this.nodeName = JSON.parse(JSON.stringify( this.data.name || '' ))
}
nodeName:string;
//提交表单
onSubmit (e) {
this.data.name = e.name
this.http.put(`/api/DisposalNodes/${this.data.id}`,this.data).subscribe(data=>{
this.dialogRef.close(e.name);
})
}
}

300
src/app/ui/collection-tools-plan/save.ts

@ -1,300 +0,0 @@
import { Component, OnInit, Inject } from '@angular/core';
import { HttpClient, HttpHeaders } from '@angular/common/http';
import { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
import { MatSnackBar, MatSnackBarConfig } from '@angular/material/snack-bar';
import {CanvasShareDataService,DisposalNodeData} from '../../canvas-share-data.service' //引入服务
// 保存想定作业第一个弹窗
@Component({
selector: 'dialog-overview-example-dialog',
templateUrl: 'saveOne.html',
styleUrls: ['./collection-tools.component.scss']
})
export class saveOneDialogPlan {
constructor(
private http:HttpClient,
public dialog: MatDialog,
public snackBar: MatSnackBar,
public dialogRef: MatDialogRef<saveOneDialogPlan>,
@Inject(MAT_DIALOG_DATA) public data) {}
onNoClick(): void {
this.dialogRef.close()
}
allDisposalNode = this.data.allDisposalNode
saveType(type){
this.dialogRef.close()
const dialogRef = this.dialog.open(saveTwoDialogPlan, {
data: {type: type,
allDisposalNode: this.data.allDisposalNode,
selectedBuildingData:this.data.selectedBuildingData,
selectedSiteData:this.data.selectedSiteData,
siteOrbuilding:this.data.siteOrbuilding,
disasterId:this.data.disasterId}
});
dialogRef.afterClosed().subscribe(result => {
});
}
}
// 保存想定作业第二个弹窗
@Component({
selector: 'dialog-overview-example-dialog',
templateUrl: 'saveTwo.html',
styleUrls: ['./collection-tools.component.scss']
})
export class saveTwoDialogPlan {
constructor(
private http:HttpClient,
public dialogRef: MatDialogRef<saveTwoDialogPlan>,
public canvasData: CanvasShareDataService,
public snackBar: MatSnackBar,
@Inject(MAT_DIALOG_DATA) public data) {}
type = this.data.type
allDisposalNode = this.data.allDisposalNode
allPlanDisposalNode = []
allRootDisposalNode = [{name:"根节点",id:null}]
allDisposalNodeChild = []
ngOnInit(): void {
//所有非数据节点
this.allDisposalNode.forEach(item => {
if(!item.sitePlanId && !item.buildingAreaId){
this.allPlanDisposalNode.push(item)
}
})
//所有一级节点
this.allDisposalNode.forEach(item => {
if(!item.parentId){
this.allRootDisposalNode.push(item)
}
})
this.allDisposalNodeChild = JSON.parse(JSON.stringify(this.allDisposalNode))
this.allDisposalNodeChild.forEach(item => {
item.children = []
this.allDisposalNodeChild.forEach(i => {
if(i.parentId == item.id){
item.children.push(i)
}
})
})
// console.log(this.nodeItem.id)
}
onNoClick(): void {
this.dialogRef.close();
}
nodeItem
itemChildNum = 0 //点击处置节点子数据节点的数量
clickNode(item){
// console.log(item)
this.nodeItem = item
this.allDisposalNodeChild.forEach(item => {
if(item.id == this.nodeItem.id){
this.itemChildNum = item.children.length
}
})
}
selectedBuildingData = this.data.selectedBuildingData
selectedSiteData = this.data.selectedSiteData
onSubmit(value,type){
// console.log(type)
let name = this.selectedBuildingData.name + '-' + this.selectedSiteData.name
//如果保存到已有节点
var postdata = {
id: "",
name: name,
level: 0,
order: this.itemChildNum,
description: "",
notes: "",
weather: null,
airTemperature: null,
windDirection: null,
windScale: null,
imageNames: null,
imageUrls: null,
parentId: this.nodeItem ? this.nodeItem.id : null,
disasterId: this.data.disasterId,
planComponentId: sessionStorage.getItem('planId') || '',
companyId: this.data.siteOrbuilding == -1 ? sessionStorage.getItem('companyId') : null,
sitePlanId: this.data.siteOrbuilding==-1 ? this.selectedSiteData.id : null,
buildingId: this.selectedBuildingData.id || null,
buildingAreaId: this.data.siteOrbuilding!=-1 ? this.selectedSiteData.id : null
}
if(type == 'old'){
let istrue = this.canvasData.findDisposalNode(this.nodeItem.id,name)
let putdata = this.nodeItem
putdata.weather = this.canvasData.selectPanelPointBaseData.weather
putdata.airTemperature = Number(this.canvasData.selectPanelPointBaseData.airTemperature)
putdata.windScale = Number(this.canvasData.selectPanelPointBaseData.windScale)
putdata.windDirection = Number(this.canvasData.selectPanelPointBaseData.windDirection)
putdata.description = this.canvasData.selectPanelPointBaseData.description
putdata.notes = this.canvasData.selectPanelPointBaseData.notes
if(istrue){//如果该处置节点下已有同名数据节点 则只修改 2个接口
new Promise((resolve,reject)=>{
this.http.put(`/api/DisposalNodes/${value.nodeId}`,putdata).subscribe(data => {
resolve("更新处置节点成功,将天气 节点详情等信息保存到点击的节点")
})
}).then((values)=>{
this.canvasData.sendMessage('send a message');//发布一条消息
// 保存平面图数据到当前节点
let postdata =JSON.parse(JSON.stringify(this.canvasData.selectPanelPoint))
postdata.Data = JSON.stringify(postdata.Data)
this.http.post(`/api/DisposalNodeData`,postdata).subscribe(data => {
const config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('保存成功','确定',config)
},err=>{
const config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('保存失败','确定',config)
})
this.dialogRef.close();
this.canvasData.sendMessage('send a message');//发布一条消息
})
}else{//需要3个接口
new Promise((resolve,reject)=>{
this.http.put(`/api/DisposalNodes/${value.nodeId}`,putdata).subscribe(data => {
resolve("更新处置节点成功,将天气 节点详情等信息保存到点击的节点")
})
}).then((values)=>{
// console.log(values)
postdata.level = putdata.level + 1
new Promise((resolve,reject) => {
this.http.post(`/api/DisposalNodes`,postdata).subscribe(data => {
resolve(data)
})
}).then((data:any)=>{
// console.log(7788,data)
let objData = {
id: "",
data: JSON.stringify(this.canvasData.selectPanelPoint.Data) || null,
version: this.canvasData.selectPanelPoint.Version || "2.0",
disposalNodeId: data.id,
planComponentId: sessionStorage.getItem("planId"),
}
this.http.post(`/api/DisposalNodeData`,objData).subscribe(data => {
const config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('保存成功','确定',config)
},err=>{
const config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('保存失败','确定',config)
})
this.dialogRef.close();
this.canvasData.sendMessage('send a message');//发布一条消息
})
})
}
}else{//如果保存到新建节点
let dispositionNodeData //处置节点data
let order
let oneLevelNum = []
//将order赋值为所有一级节点最后一个+1
this.allDisposalNode.forEach(item => {
if(!item.parentId){
oneLevelNum.push(item)
}
})
if(oneLevelNum.length == 0){
order = 0
}else{
order = oneLevelNum[oneLevelNum.length - 1].order + 1
}
if(this.nodeItem){//如果点击了下拉选择框
if(this.nodeItem.id != null){
this.allDisposalNodeChild.forEach(item => {
if(item.id == this.nodeItem.id){
order = item.children.length
}
})
}
}
dispositionNodeData = {
id: "",
name: value.name,
level: this.nodeItem && this.nodeItem.id != null ? this.nodeItem.level + 1 : 0,
order: order,
description: "",
notes: "",
weather: null,
airTemperature: 0,
windDirection: 0,
windScale: 0,
imageNames: null,
imageUrls: null,
parentId: this.nodeItem ? this.nodeItem.id : null,
disasterId: this.data.disasterId,
planComponentId: sessionStorage.getItem('planId') || '',
companyId: null,
sitePlanId: null,
buildingId: null,
buildingAreaId: null
}
dispositionNodeData.weather = this.canvasData.selectPanelPointBaseData.weather
dispositionNodeData.airTemperature = Number(this.canvasData.selectPanelPointBaseData.airTemperature)
dispositionNodeData.windScale = Number(this.canvasData.selectPanelPointBaseData.windScale)
dispositionNodeData.windDirection = Number(this.canvasData.selectPanelPointBaseData.windDirection)
dispositionNodeData.description = this.canvasData.selectPanelPointBaseData.description
dispositionNodeData.notes = this.canvasData.selectPanelPointBaseData.notes
//1.先创建一个处置节点 然后 .then 2.创建数据节点到刚创建的处置节点 3.然后拿着创建好的数据节点的id 将平面图data保存
new Promise((resolve,reject) => {
this.http.post("/api/DisposalNodes",dispositionNodeData).subscribe((data:any) => {
resolve(data.id)
})
}).then((id) => {
let dataNodeData
new Promise((resolve,reject) => {
postdata.parentId = id
postdata.level = dispositionNodeData.level + 1
this.http.post("/api/DisposalNodes",postdata).subscribe((data:any) => {
resolve(data)
})
}).then((data:any) => {
// 保存平面图数据到当前节点
// console.log(6666,data)
// let postdata =JSON.parse(JSON.stringify(this.canvasData.selectPanelPoint))
// postdata.Data = JSON.stringify(postdata.Data)
let objData = {
id: "",
data: JSON.stringify(this.canvasData.selectPanelPoint.Data) || null,
version: this.canvasData.selectPanelPoint.Version || "2.0",
disposalNodeId: data.id,
planComponentId: sessionStorage.getItem("planId"),
}
this.http.post(`/api/DisposalNodeData`,objData).subscribe(data => {
const config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('保存成功','确定',config)
},err=>{
const config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('保存失败','确定',config)
})
this.dialogRef.close();
this.canvasData.sendMessage("send a message")
})
})
}
}
}

5
src/app/ui/collection-tools-plan/saveOne.html

@ -1,5 +0,0 @@
<div mat-dialog-title>处置节点保存</div>
<div style="display: flex;">
<button mat-stroked-button style="margin-right: 5px;" (click)="saveType('new')">新建节点并保存</button>
<button mat-stroked-button (click)="saveType('old')">保存到已有节点</button>
</div>

53
src/app/ui/collection-tools-plan/saveTwo.html

@ -1,53 +0,0 @@
<div *ngIf="type == 'new'">
<div mat-dialog-title>新增节点</div>
<div>
<form (ngSubmit)="onSubmit(form.value,'new')" #form="ngForm" class="example-container">
<div mat-dialog-content>
<mat-form-field>
<input type="text" matInput ngModel
required name="name" placeholder="节点名称" autocomplete="off">
</mat-form-field>
</div>
<div mat-dialog-content>
<mat-form-field>
<mat-select [(value)]="allRootDisposalNode[0].name" required placeholder="父节点名称">
<mat-option *ngFor="let item of allRootDisposalNode" [value]="item.name" (click)="clickNode(item)">
{{item.name}}
</mat-option>
</mat-select>
</mat-form-field>
</div>
<div mat-dialog-actions>
<button mat-raised-button color="primary" type="submit"
[disabled]="!form.form.valid">
确定
</button>
<button mat-raised-button mat-dialog-close>取消</button>
</div>
</form>
</div>
</div>
<div *ngIf="type == 'old'">
<div mat-dialog-title>保存到已有节点</div>
<div>
<form (ngSubmit)="onSubmit(form.value,'old')" #form="ngForm" class="example-container">
<div mat-dialog-content>
<mat-form-field>
<mat-select required ngModel placeholder="父节点名称" name="nodeId">
<mat-option *ngFor="let item of allPlanDisposalNode" [value]="item.id" (click)="clickNode(item)">
{{item.name}}
</mat-option>
</mat-select>
</mat-form-field>
</div>
<div mat-dialog-actions>
<button mat-raised-button color="primary" type="submit"
[disabled]="!form.form.valid">
确定
</button>
<button mat-raised-button mat-dialog-close>取消</button>
</div>
</form>
</div>
</div>

24
src/app/ui/collection-tools-plan/viewdetails.html

@ -1,24 +0,0 @@
<div style="position: relative;width: 1400px;height: 800px;line-height: 800px;" class="swiper-container">
<div style="position: absolute;right: -2px;top: -392px;cursor: pointer;z-index: 999;width: 24px;height: 24px;" (click)="closeDialog()">
<span><mat-icon>clear</mat-icon></span>
</div>
<div class="swiper-wrapper">
<div class="swiper-slide" style="text-align: center;" *ngFor="let img of imagesArr">
<img id="bigimg" (mousewheel)="zoomimg($event)" style="
max-width: 96%;
max-height: 100%;
min-width: 1px;
min-height: 1px;
position: absolute;
top: 0;
left: 0;
bottom: 0;
right: 0;
margin: auto;" [src]="img.PropertyValue" alt="">
</div>
</div>
<!-- 如果需要导航按钮 -->
<div class="swiper-button-next"></div>
<div class="swiper-button-prev"></div>
</div>

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

@ -28,6 +28,14 @@
粘贴<mat-icon>screen_share</mat-icon>
</button>
<span title="适应缩放" class="zoom" (click)="adaptZoom()">
<img src="/assets/images/适应缩放.png" alt="">
适应缩放
</span>
<span title="重置缩放" class="zoom" (click)="resetZoom()">
<img src="/assets/images/重置缩放.png" alt="">
重置缩放
</span>
<div class="bigBox">
<div class="weatherBox" [ngClass]="{'opened': weatherBtn,'close': !weatherBtn}">
<span class="name">天气</span>
@ -108,7 +116,7 @@
</div>
<!-- 中间建筑+楼层 -->
<!-- 左侧操作栏 -->
<div id="leftDiv" class='functionalDomainLeft publicCss' [ngClass]="{'togglePanel': toggleExpandPanel==true,'scenarioAssignment': !pattern}" style="user-select: none;">
<div id="leftDiv" (mousewheel)="$event.stopPropagation()" class='functionalDomainLeft publicCss' [ngClass]="{'togglePanel': toggleExpandPanel==true,'scenarioAssignment': !pattern}" style="user-select: none;">
<div class="leftDragDiv" (mousedown)="leftDivMouseDown($event)"></div>
<!-- 处置预案 -->
<div class="handlePlan" *ngIf="!pattern">
@ -216,7 +224,7 @@
</div>
<!-- 左侧操作栏 -->
<div id="rightDiv" class="functionalDomainRight publicCss " [ngClass]="{'togglePanel2': toggleExpandPanelRight==true}" style="user-select: none;">
<div id="rightDiv" (mousewheel)="$event.stopPropagation()" class="functionalDomainRight publicCss " [ngClass]="{'togglePanel2': toggleExpandPanelRight==true}" style="user-select: none;">
<!-- 右侧div鼠标拖动div -->
<div style="width: 3px;height: 100%;position: absolute;left: 0;cursor: e-resize;z-index: 1000;" (mousedown)="rightDivMouseDown($event)"></div>
<!-- 属性 -->
@ -519,7 +527,7 @@
</div>
</div>
<div id="bottomDiv" class="bottomCss" *ngIf="!pattern">
<div id="bottomDiv" (mousewheel)="$event.stopPropagation()" class="bottomCss" *ngIf="!pattern">
<div class="dragDiv" (mousedown)="bottomDivMouseDown($event)"></div>
<div class="title">
<div (click)="details()" [ngClass]="{'detailsAndattentBtn': detailsAndattentBtn}">

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

@ -25,6 +25,15 @@
align-items:center;
min-height: 40px;
background-color: #fff;
.zoom{
display: flex;
align-items: center;
margin-left: 15px;
cursor: pointer;
img{
margin-right: 3px;
}
}
.marginLeftRight {
margin: 0 8px;
font-size: 16px;

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

@ -179,7 +179,14 @@ export class CollectionToolsComponent implements OnInit {
this.getDisposalNode()
}
}
//适应缩放
adaptZoom(){
this.canvas.zoomFit()
}
//重置缩放
resetZoom(){
this.canvas.resetCamera2D()
}
//ngzorro tree 拖拽
nzEvent(event: NzFormatEmitEvent): void {
if(this.isDrag){

12
src/app/ui/ui.module.ts

@ -80,14 +80,12 @@ import { CollectionToolsComponent, CreateBuilding, EditBuilding, ViewDetails } f
import { WorkingAreaComponent } from '../working-area/working-area.component';
import {leftFunctionalDomainComponent,editPlaneFigureComponent,addDisposalNodeComponent,editDisposalNodeComponent,addBGCDisposalNodeComponent} from './collection-tools/leftFunctionalDomain'
import { saveOneDialog, saveTwoDialog } from './collection-tools/save';
import { CollectionToolsPlanComponent, CreateBuildingPlan, EditBuildingPlan, ViewDetailsPlan } from './collection-tools-plan/collection-tools.component';
import { addDisposalNodeComponentPlan, editDisposalNodeComponentPlan, editPlaneFigureComponentPlan, leftFunctionalDomainComponentPlan } from './collection-tools-plan/leftFunctionalDomain';
import { saveOneDialogPlan, saveTwoDialogPlan } from './collection-tools-plan/save';
import {CollectionToolsBuildingComponent,CreateBuildingBuilding,EditBuildingBuilding,ViewDetailsBuilding} from './collection-tools-building/collection-tools.component'
import {leftFunctionalDomainBuildingComponent,editPlaneFigureBuildingComponent,addDisposalNodeBuildingComponent,editDisposalNodeBuildingComponent} from './collection-tools-building/leftFunctionalDomain'
import {saveOneDialogBuilding,saveTwoDialogBuilding} from './collection-tools-building/save'
import { CollectionToolsPlanComponent, CreateBuildingPlan, EditBuildingPlan } from './collection-tools-plan/collection-tools.component';
import { editPlaneFigureComponentPlan, leftFunctionalDomainComponentPlan } from './collection-tools-plan/leftFunctionalDomain';
import {CollectionToolsBuildingComponent,CreateBuildingBuilding,EditBuildingBuilding} from './collection-tools-building/collection-tools.component'
import {leftFunctionalDomainBuildingComponent,editPlaneFigureBuildingComponent} from './collection-tools-building/leftFunctionalDomain'
@NgModule({
declarations: [UiComponent, UserdataComponent, ChangepasswordComponent, OrganizationComponent, UnittypeComponent, AuthorityComponent, RoleComponent, UsermanagementComponent,IsnoPipe,ConfirmpswDirective,DialogOverviewExampleDialog,CreateAuthority,CreateRole,TimePipe,CreateNewUser,EditNewUser,allRoles,EditRole,CreateOrganization,EditOrganization,seeInformation,EditUser,editorialUnit,FireProtectionElementsComponent,Establish,EditingFireControl,FireFightingTemplateComponent, NavmenusComponent,CreateMenus,EditMenus,NewFireFighting,EditFireClassification, MaterialBankComponent, UnitInformationComponent,AddMatLibrary,EditMatLibrary,attributeComponent,AddOriginalCopy,addAttributeComponent,editAttribute,EditOriginalCopy,SelectOriginalCopy,EditUnitInfo,AddUnitInfo,AddGroups,EditGroup, EnterpriseuserComponent,AddEnterpriserUser,addUnitAttributeComponent,editUnitAttribute,seeenterpriseuser,editenterpriseuser, FireFightingFacilitiesFormworkComponent,addFireFightingFacilitiesFormworkComponent,editFireFightingFacilitiesFormworkComponent,addBuiltInComponent,addBuiltInAttributeComponent,addOptionalComponent,addOptionalAttributeComponent,editBuiltInAttributeComponent,editOptionalAttributeComponent, CollectionToolsComponent,WorkingAreaComponent,CreateBuilding,EditBuilding,leftFunctionalDomainComponent,editPlaneFigureComponent,ViewDetails,saveOneDialog,saveTwoDialog,addDisposalNodeComponent,editDisposalNodeComponent,CollectionToolsPlanComponent,CreateBuildingPlan,EditBuildingPlan,ViewDetailsPlan,leftFunctionalDomainComponentPlan,editPlaneFigureComponentPlan,addDisposalNodeComponentPlan,editDisposalNodeComponentPlan,saveOneDialogPlan,saveTwoDialogPlan,addOffices,editOffices,addBGCDisposalNodeComponent,CollectionToolsBuildingComponent,CreateBuildingBuilding,EditBuildingBuilding,ViewDetailsBuilding,leftFunctionalDomainBuildingComponent,editPlaneFigureBuildingComponent,addDisposalNodeBuildingComponent,editDisposalNodeBuildingComponent,saveOneDialogBuilding,saveTwoDialogBuilding],
declarations: [UiComponent, UserdataComponent, ChangepasswordComponent, OrganizationComponent, UnittypeComponent, AuthorityComponent, RoleComponent, UsermanagementComponent,IsnoPipe,ConfirmpswDirective,DialogOverviewExampleDialog,CreateAuthority,CreateRole,TimePipe,CreateNewUser,EditNewUser,allRoles,EditRole,CreateOrganization,EditOrganization,seeInformation,EditUser,editorialUnit,FireProtectionElementsComponent,Establish,EditingFireControl,FireFightingTemplateComponent, NavmenusComponent,CreateMenus,EditMenus,NewFireFighting,EditFireClassification, MaterialBankComponent, UnitInformationComponent,AddMatLibrary,EditMatLibrary,attributeComponent,AddOriginalCopy,addAttributeComponent,editAttribute,EditOriginalCopy,SelectOriginalCopy,EditUnitInfo,AddUnitInfo,AddGroups,EditGroup, EnterpriseuserComponent,AddEnterpriserUser,addUnitAttributeComponent,editUnitAttribute,seeenterpriseuser,editenterpriseuser, FireFightingFacilitiesFormworkComponent,addFireFightingFacilitiesFormworkComponent,editFireFightingFacilitiesFormworkComponent,addBuiltInComponent,addBuiltInAttributeComponent,addOptionalComponent,addOptionalAttributeComponent,editBuiltInAttributeComponent,editOptionalAttributeComponent, CollectionToolsComponent,WorkingAreaComponent,CreateBuilding,EditBuilding,leftFunctionalDomainComponent,editPlaneFigureComponent,ViewDetails,saveOneDialog,saveTwoDialog,addDisposalNodeComponent,editDisposalNodeComponent,CollectionToolsPlanComponent,CreateBuildingPlan,EditBuildingPlan,leftFunctionalDomainComponentPlan,editPlaneFigureComponentPlan,addOffices,editOffices,addBGCDisposalNodeComponent,CollectionToolsBuildingComponent,CreateBuildingBuilding,EditBuildingBuilding,leftFunctionalDomainBuildingComponent,editPlaneFigureBuildingComponent],
imports: [
CommonModule,

BIN
src/assets/images/适应缩放.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 268 B

BIN
src/assets/images/重置缩放.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 506 B

Loading…
Cancel
Save