Browse Source

[完善] 采集工具,编制工具按原型图修改

zhuzhou
陈鹏飞 4 years ago
parent
commit
b5e615c006
  1. 2
      src/app/canvas-share-data.service.ts
  2. 39
      src/app/key-unit/edit-plan-info/edit-plan-info.component.html
  3. 25
      src/app/key-unit/view-unit-details/view-unit-details.component.html
  4. 24
      src/app/ui/collection-tools-building/addDisposalNode.html
  5. 38
      src/app/ui/collection-tools-building/addPlaneFigure.html
  6. 384
      src/app/ui/collection-tools-building/collection-tools.component.html
  7. 450
      src/app/ui/collection-tools-building/collection-tools.component.scss
  8. 25
      src/app/ui/collection-tools-building/collection-tools.component.spec.ts
  9. 2391
      src/app/ui/collection-tools-building/collection-tools.component.ts
  10. 28
      src/app/ui/collection-tools-building/createBuilding.html
  11. 23
      src/app/ui/collection-tools-building/editBuilding.html
  12. 23
      src/app/ui/collection-tools-building/editDisposalNode.html
  13. 39
      src/app/ui/collection-tools-building/editPlaneFigure.html
  14. 180
      src/app/ui/collection-tools-building/leftFunctionalDomain.ts
  15. 291
      src/app/ui/collection-tools-building/panel.scss
  16. 300
      src/app/ui/collection-tools-building/save.ts
  17. 5
      src/app/ui/collection-tools-building/saveOne.html
  18. 53
      src/app/ui/collection-tools-building/saveTwo.html
  19. 24
      src/app/ui/collection-tools-building/viewdetails.html
  20. 11
      src/app/ui/collection-tools-plan/addPlaneFigure.html
  21. 152
      src/app/ui/collection-tools-plan/collection-tools.component.html
  22. 37
      src/app/ui/collection-tools-plan/collection-tools.component.scss
  23. 49
      src/app/ui/collection-tools-plan/collection-tools.component.ts
  24. 95
      src/app/ui/collection-tools-plan/leftFunctionalDomain.ts
  25. 25
      src/app/ui/collection-tools-plan/panel.scss
  26. 20
      src/app/ui/collection-tools/collection-tools.component.html
  27. 6
      src/app/ui/collection-tools/collection-tools.component.scss
  28. 52
      src/app/ui/collection-tools/collection-tools.component.ts
  29. 2
      src/app/ui/collection-tools/leftFunctionalDomain.ts
  30. 147
      src/app/ui/collection-tools/save.ts
  31. 6
      src/app/ui/ui.module.ts

2
src/app/canvas-share-data.service.ts

@ -31,7 +31,7 @@ export class CanvasShareDataService {
allDisposalNode: any = []; // 所有 处置节点
allNodeMarkers: any; // 灾情 标签信息
selectPanelPoint: DisposalNodeData = new DisposalNodeData(); // 当前数据节点
selectPanelPointBaseData: any = {description: '', notes: '', weather: '', airTemperature: '', windDirection: '', windScale: ''}; // 当前 数据节点 所对应的 天气,详情 数据节点
selectPanelPointBaseData: any = {description: '', notes: '', weather: '', airTemperature: '', windDirection: '', windScale: ''}; // 当前 数据节点 对应 父级节点
customizeDisposalNode:any; // 新建 自定义数据节点 底图+名称
// 处置 节点

39
src/app/key-unit/edit-plan-info/edit-plan-info.component.html

@ -7,52 +7,57 @@
<app-basicinfo></app-basicinfo>
</ng-template>
</mat-tab>
<mat-tab label="2.平面图">
<mat-tab label="2.平面图">
<ng-template matTabContent>
<app-collection-tools-plan></app-collection-tools-plan>
<app-collection-tools-plan></app-collection-tools-plan>
</ng-template>
</mat-tab>
<mat-tab label="3.四周毗邻">
<ng-template matTabContent>
<app-allaround></app-allaround>
</ng-template>
<mat-tab label="3.平面图">
<ng-template matTabContent>
<app-collection-tools-building></app-collection-tools-building>
</ng-template>
</mat-tab>
<mat-tab label="4.消防设施">
<ng-template matTabContent>
<app-fire-fighting-device></app-fire-fighting-device>
</ng-template>
<mat-tab label="4.四周毗邻">
<ng-template matTabContent>
<app-allaround></app-allaround>
</ng-template>
</mat-tab>
<mat-tab label="5.消防设施">
<ng-template matTabContent>
<app-fire-fighting-device></app-fire-fighting-device>
</ng-template>
</mat-tab>
<mat-tab label="5.重点部位">
<mat-tab label="6.重点部位">
<ng-template matTabContent>
<app-key-site></app-key-site>
</ng-template>
</mat-tab>
<mat-tab label="6.功能分区">
<mat-tab label="7.功能分区">
<ng-template matTabContent>
<app-function-division></app-function-division>
</ng-template>
</mat-tab>
<mat-tab label="7.行车路线">
<mat-tab label="8.行车路线">
<ng-template matTabContent>
<app-router-gis></app-router-gis>
</ng-template>
</mat-tab>
<mat-tab label="8.周边水源">
<mat-tab label="9.周边水源">
<ng-template matTabContent>
<app-water-road></app-water-road>
</ng-template>
</mat-tab>
<mat-tab label="9.实景图">
<mat-tab label="10.实景图">
<ng-template matTabContent>
<app-realistic-picture></app-realistic-picture>
</ng-template>
</mat-tab>
<mat-tab label="10.上传CAD">
<mat-tab label="11.上传CAD">
<ng-template matTabContent>
<app-uploading-cad></app-uploading-cad>
</ng-template>
</mat-tab>
<!-- <mat-tab label="11.unity平面图">
<!-- <mat-tab label="12.unity平面图">
<ng-template matTabContent>
<iframe id="main" src="/unityApp2Basic/index.html" name="unityApp" frameborder="0" width="96%" height="100%" style="margin-left: 2%;"></iframe>
</ng-template>

25
src/app/key-unit/view-unit-details/view-unit-details.component.html

@ -4,52 +4,57 @@
<app-basicinfo-look></app-basicinfo-look>
</ng-template>
</mat-tab>
<mat-tab label="2.平面图">
<mat-tab label="2.平面图">
<ng-template matTabContent>
<app-collection-tools-plan></app-collection-tools-plan>
</ng-template>
</mat-tab>
<mat-tab label="3.四周毗邻">
<mat-tab label="3.平面图">
<ng-template matTabContent>
<app-collection-tools-building></app-collection-tools-building>
</ng-template>
</mat-tab>
<mat-tab label="4.四周毗邻">
<ng-template matTabContent>
<app-allaround></app-allaround>
</ng-template>
</mat-tab>
<mat-tab label="4.消防设施">
<mat-tab label="5.消防设施">
<ng-template matTabContent>
<app-fire-fighting-device-look></app-fire-fighting-device-look>
</ng-template>
</mat-tab>
<mat-tab label="5.重点部位">
<mat-tab label="6.重点部位">
<ng-template matTabContent>
<app-key-site-look></app-key-site-look>
</ng-template>
</mat-tab>
<mat-tab label="6.功能分区">
<mat-tab label="7.功能分区">
<ng-template matTabContent>
<app-function-division-look></app-function-division-look>
</ng-template>
</mat-tab>
<mat-tab label="7.行车路线">
<mat-tab label="8.行车路线">
<ng-template matTabContent>
<app-router-gis></app-router-gis>
</ng-template>
</mat-tab>
<mat-tab label="8.周边水源">
<mat-tab label="9.周边水源">
<ng-template matTabContent>
<app-water-road></app-water-road>
</ng-template>
</mat-tab>
<mat-tab label="9.实景图">
<mat-tab label="10.实景图">
<ng-template matTabContent>
<app-realistic-picture-look></app-realistic-picture-look>
</ng-template>
</mat-tab>
<mat-tab label="10.上传CAD">
<mat-tab label="11.上传CAD">
<ng-template matTabContent>
<app-uploading-cad-look></app-uploading-cad-look>
</ng-template>
</mat-tab>
<!-- <mat-tab label="11.unity平面图">
<!-- <mat-tab label="12.unity平面图">
<ng-template matTabContent>
<iframe id="main" src="/unityApp2Basic/index.html" name="unityApp" frameborder="0" width="96%" height="100%" style="margin-left:2%;"></iframe>
</ng-template>

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

@ -0,0 +1,24 @@
<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>

38
src/app/ui/collection-tools-building/addPlaneFigure.html

@ -0,0 +1,38 @@
<div class="functionalDomainContent">
<div mat-dialog-title>
<label *ngIf="!data.isBuilding">新建平面图</label>
<label *ngIf="data.isBuilding">新建楼层/区域</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="keyMargin" *ngIf="data.isBuilding">
<mat-checkbox name="isRefugeStorey" [(ngModel)]="checked">是否为避难层</mat-checkbox>
</div>
<div class="keyMargin">
<mat-form-field>
<input matInput name="area" type="number" required ngModel placeholder="面积 (平方米)">
</mat-form-field>
</div>
<div class="keyMargin">
<textarea name="details" ngModel placeholder="详情"></textarea>
</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>

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

@ -0,0 +1,384 @@
<div class="content">
<!-- header头部 -->
<div class="header">
<button mat-button (click)="toggle()">
<mat-icon style="vertical-align: middle; color: #279FFF;">toc</mat-icon>
</button>
<button mat-button (click)="toggle2()">
<mat-icon style="vertical-align: middle; color: #279FFF;">list</mat-icon>
</button>
<span [ngClass]="{'icongray': !basicInfo}" title="基本信息名称显示/隐藏" class="marginLeftRight" (click)="basicInfoClick()">
基本信息名称
<mat-icon>visibility</mat-icon>
</span>
<button (click)="copyAsset()" class="copytobutn marginLeftRight" mat-button title="复制" style="margin:0 5px;" *ngIf="isEditPattern">
复制<mat-icon>library_books</mat-icon>
</button>
<button (click)="pasteAsset()" class="copytobutn marginLeftRight" mat-button title="粘贴" *ngIf="isEditPattern">
粘贴<mat-icon>screen_share</mat-icon>
</button>
<span class="rightSave">
<!-- <mat-icon title="查看/编辑模式" (click)="lookpat()" *ngIf="isEditPattern">tv</mat-icon>
<mat-icon title="查看/编辑模式" (click)="editpat()" *ngIf="!isEditPattern && isediticon">create</mat-icon> -->
<label title="保存" (click)="saveSite()"><mat-icon>description</mat-icon>保存</label>
</span>
</div>
<!-- 头部操作栏 -->
<div class="headerOperate">
<button mat-button *ngFor="let item of allBuildings;let key = index" (click)="checkedBuilding(item,key)" class="bigeditdeletebtn"
[ngClass]="{'buildingbtnchecked': checkedBuildingIndex==key}">
<span>{{item.name}}</span>
<span class="editdeletebtn" *ngIf="isEditPattern && pattern">
<mat-icon (click)="editBuilding($event,item)"
style="font-size: 23px;vertical-align:sub;margin-left: 6px;color: rgb(26, 194, 26);">create</mat-icon>
<mat-icon (click)="deleteBuilding($event,item)"
style="font-size: 23px;vertical-align:sub;color: rgb(224, 51, 51);">delete</mat-icon>
</span>
</button>
<button mat-button (click)="createBuilding()" *ngIf="isEditPattern && pattern">
<span style="font-size: 24px;">+</span>
</button>
</div>
<!--功能区 -->
<div class="functionalDomain">
<div class='functionalDomainContent' id="functionalDomainContent">
<!-- 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 class="leftDragDiv" (mousedown)="leftDivMouseDown($event)"></div>
<!-- 平面图 -->
<div class="planarGraph">
<div class="planarGraphHeader" (click)='togglePlanarGraph()'>
<mat-icon *ngIf="togglePlane">keyboard_arrow_up</mat-icon>
<mat-icon *ngIf="!togglePlane">keyboard_arrow_down</mat-icon>
<label class="overflowText" style="font-weight: 550;">平面图</label>
<label class="hover" *ngIf="isEditPattern && pattern">
<mat-icon (click)='foundPanel($event)'>add</mat-icon>
</label>
</div>
<div [hidden]="!togglePlane" >
<div class="sitePlanContent" *ngFor="let item of sitePlanData;let key = index" [ngClass]="{'isRefugeStorey':item.isRefugeStorey==true,'selectSitePlan': selectSitePlanIndex==key}" (click)='selectSitePlan(item,key)'>
<label class="overflowText" style="display:inline-block; max-width: 160px;"><mat-icon *ngIf="!item.imageUrl" class="matIcons">broken_image</mat-icon>{{item.name}}</label>
<a href="javascript:;" class="fireForce" *ngIf="isEditPattern && !pattern">
<img src="../../../assets/images/fire.png" *ngIf="item.fire && item.fire==2">
<img src="../../../assets/images/noFire.png" *ngIf="item.fire && item.fire==1">
<img src="../../../assets/images/force.png" *ngIf="item.force && item.force==2">
<img src="../../../assets/images/noForce.png" *ngIf="item.force && item.force==1">
</a>
<a href="javascript:;" class="a-upload" *ngIf="selectSitePlanIndex==key && isEditPattern && pattern" title="替换底图" >
<input type="file" (change)='replaceBaseMap($event,item)' accept="image/*">
<mat-icon class="matIcons">photo_size_select_actual</mat-icon>
</a>
<a href="javascript:;" id="a-uploadImg" *ngIf="selectSitePlanIndex==key && !item.imageUrl && isEditPattern" title="上传底图" >
<input type="file" (change)='replaceBaseMap($event,item)' accept="image/*">
<img src="../../../assets/images/upload.jpg">
</a>
<!-- 右边定位操作栏 -->
<div id="rightOperate" *ngIf="selectSitePlanIndex==key && item.imageUrl && isEditPattern" (click)="$event.stopPropagation();">
<p class="functionButton">
<mat-icon class="functionIcon bigFunctionIcon" title="上移" (click)='moveUp(item,key)'>keyboard_arrow_up</mat-icon>
</p>
<p class="functionButton">
<mat-icon class="functionIcon" title="编辑属性" (click)='editPlaneData(item)'>edit</mat-icon>
<mat-icon class="functionIcon" title="删除" (click)="deletePlaneData(item)">delete</mat-icon>
</p>
<p class="functionButton">
<mat-icon class="functionIcon" title="旋转底图" (click)='revolveImg(item)'>cached</mat-icon>
<mat-icon class="functionIcon" title="复制" (click)="duplicateLayer(item)">library_books</mat-icon>
</p>
<p class="functionButton">
<mat-icon class="functionIcon bigFunctionIcon" title="下移" (click)='moveDown(item,key)'>keyboard_arrow_down</mat-icon>
</p>
</div>
<!-- 右边定位操作栏 -->
</div>
</div>
</div>
<!-- 素材库 -->
<div id="materialBank" *ngIf="isEditPattern" [ngClass]="{'selectEditMode': pattern}">
<div class="planarGraphHeader" (click)='toggleMaterial()'>
<mat-icon *ngIf="toggleMaterialBank">keyboard_arrow_up</mat-icon>
<mat-icon *ngIf="!toggleMaterialBank">keyboard_arrow_down</mat-icon>
<label class="overflowText" style="font-weight: 550;">素材库</label>
</div>
<div [hidden]="!toggleMaterialBank" [ngClass]="{'materialBankDIV': pattern}">
<mat-accordion *ngFor="let item of allLibrary" id="panelLibrary">
<mat-expansion-panel (opened)='opened(item)'>
<mat-expansion-panel-header>
<label class="text">{{item.name}}</label>
</mat-expansion-panel-header>
<div class="panelLibraryFlex">
<div class="imgBox" *ngFor="let items of item.images;let key = index" [title]="items.name"
(click)='selectImg(item,items,key)'
[ngClass]="{'selectImg': selectLibrary==item.name && selectImageIndex==key}">
<img [src]="items.imageUrl" onerror="javascript:this.src='../../../assets/images/noImg.png'">
<p class="overflowText">{{items.name}}</p>
</div>
</div>
</mat-expansion-panel>
</mat-accordion>
</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鼠标拖动div -->
<div style="width: 3px;height: 100%;position: absolute;left: 0;cursor: e-resize;z-index: 1000;" (mousedown)="rightDivMouseDown($event)"></div>
<!-- 属性 -->
<div [ngClass]="{'forbidden': !isEditPattern}" id="property" class="property" style="height: 50%;background-color: white;">
<div class="title">
<div>
<span style="user-select: none">属性</span>
</div>
</div>
<!-- 平面图属性 -->
<div class="siteproperty" style="user-select: none" *ngIf="isShowProperty && isShowAttribute">
<p>面积(平方米)</p>
<div class="siteproperty_size">{{canvasData.selectStorey.area}}</div>
<p>详情</p>
<div class="siteproperty_size">
{{canvasData.selectStorey.details}}
</div>
</div>
<!-- 素材属性 -->
<div class="assetsproperty" style="user-select: none" *ngIf="isShowProperty && !isShowAttribute">
<h3 style="text-align: center;font-weight: 900;">{{assetName}}</h3>
<div *ngIf="canvasAssetObj.InteractiveMode == 0">
<p>宽度(像素)</p>
<input type="text" class="biginput" [(ngModel)]="assetWidth" (input)="assetWidthIunput()" [disabled]="!isEditPattern || (canvasAssetObj.GameMode == 0 && !pattern)">
<p>高度(像素)</p>
<input type="text" class="biginput" [(ngModel)]="assetHeight" (input)="assetHeightIunput()" [disabled]="!isEditPattern || (canvasAssetObj.GameMode == 0 && !pattern)">
<p>角度</p>
<div style="width: 100%;display: flex;vertical-align: top;height: 22px;">
<input type="number" class="smallinput" [(ngModel)]="sliderValue"
oninput="if(value>360)value=360;if(value<0)value=0;" (input)="assetAngleIunput()" [disabled]="!isEditPattern || (canvasAssetObj.GameMode == 0 && !pattern)">
<mat-slider color="primary" min="0" max="360" step="1" style="bottom: 12px;left: 2px;width: 70%;"
[(ngModel)]="sliderValue" (change)="assetAngleIunput()" [disabled]="!isEditPattern || (canvasAssetObj.GameMode == 0 && !pattern)"></mat-slider>
</div>
</div>
<!-- 如果是多点连线 -->
<div *ngIf="canvasAssetObj.InteractiveMode == 1 || canvasAssetObj.InteractiveMode == 3">
<p>厚度</p>
<div style="width: 100%;display: flex;vertical-align: top;height: 22px;">
<input type="number" class="smallinput" [(ngModel)]="sliderValueThickness"
oninput="if(value>999)value=999;if(value<0)value=0;" (input)="assetThicknessIunput()" [disabled]="!isEditPattern || (canvasAssetObj.GameMode == 0 && !pattern)">
<mat-slider color="primary" min="0" max="999" step="1" style="bottom: 12px;left: 2px;width: 70%;"
[(ngModel)]="sliderValueThickness" (change)="assetThicknessIunput()" [disabled]="!isEditPattern || (canvasAssetObj.GameMode == 0 && !pattern)"></mat-slider>
</div>
</div>
<p style="margin-top: 4px;margin-bottom: 0px;">是否高亮</p>
<div>
<input class="input" [(ngModel)]="isHighLight" type="checkbox" [disabled]="!isEditPattern || (canvasAssetObj.GameMode == 0 && !pattern)">
<span style="font-size: 14px;">选中高亮</span>
</div>
<div class="colorBigDiv" *ngIf="canvasAssetObj.FillMode == 0">
<div class="colorBigTemplateDiv">
<span>颜色</span>
<div class="colorTemplateDiv" [style]="{'background-color':selectedcolor}">
</div>
</div>
<div class="colorDiv" *ngIf="isEditPattern && pattern && canvasAssetObj.GameMode == 0">
<ul>
<li (click)="selectcolor(item,key)" class="colorLi" *ngFor="let item of colors,let key=index" [style]="{'background-color':item}"></li>
</ul>
</div>
<span style="color: #9c9fa5;font-size: 14px;">透明度</span>
<mat-slider color="primary" min="0" max="100%" step="1" style="left: 1px; width: 55%;min-width: 90px;"
[(ngModel)]="colorDivSliderValue" (change)="colorDivSliderChange()" [disabled]="!isEditPattern || (canvasAssetObj.GameMode == 0 && !pattern)"></mat-slider>
<span style="color: #9c9fa5;font-size: 12px;">{{colorDivSliderValue}}%</span>
</div>
<div *ngFor="let item of PropertyInfos;index as key ">
<!-- 单行文本 -->
<div *ngIf="item.PropertyType == 0">
<p>{{item.PropertyName}}<span style="font-size: 14px;" *ngIf="item.PhysicalUnit">({{item.PhysicalUnit}})</span></p>
<input type="text" class="biginput" [value]="item.PropertyValue" (input)="assetInputChange(item,$event)" [disabled]="!isEditPattern || (canvasAssetObj.GameMode == 0 && !pattern)">
</div>
<!-- 多行文本 -->
<div *ngIf="item.PropertyType == 1">
<p>{{item.PropertyName}}<span style="font-size: 14px;" *ngIf="item.PhysicalUnit">({{item.PhysicalUnit}})</span></p>
<textarea class="textarea" name="" id="" [value]="item.PropertyValue" (input)="assetInputChange(item,$event)" [disabled]="!isEditPattern || (canvasAssetObj.GameMode == 0 && !pattern)"></textarea>
</div>
<!-- 数值 -->
<div *ngIf="item.PropertyType == 2">
<p>{{item.PropertyName}}<span style="font-size: 14px;" *ngIf="item.PhysicalUnit">({{item.PhysicalUnit}})</span></p>
<input type="number" class="biginput" [value]="item.PropertyValue" (input)="assetInputChange(item,$event)" [disabled]="!isEditPattern || (canvasAssetObj.GameMode == 0 && !pattern)">
</div>
<!-- 图片数量 -->
<div *ngIf="item.PropertyType == 4" style="height: 140px;">
<div style="position: relative;width: 100%;height: 21px;margin: 1px 0;">
<p style="width: 40%;display: inline-block;">{{item.PropertyName}}</p>
<span style="width: 26%;text-align:right;font-size: 13px;">{{imagesArr.length ? imagesArr.length : 0}} / {{item.PropertyValue}}</span>
<input [disabled]="!isEditPattern || (canvasAssetObj.GameMode == 0 && !pattern)" *ngIf="isImgNumCss" accept="image/*" (change)="selectFile($event)" type="file" style="width: 33%;position: absolute;right: 10px;top: 1px;opacity: 0;z-index: 100;cursor: pointer;height: 21px;">
<div style="width: 33%;height: 21px;line-height: 21px;text-align: center;position: absolute;right: 10px;top: 1px;z-index: 99;border: 1px solid rgb(208, 211, 214);border-radius: 2px;font-size: 13px;cursor: pointer;" (click)="imgNumBeyond()">添加</div>
<div style="position: relative;;width: 89%;border:1px solid rgb(208, 211, 214);height: 100px;margin: 6px auto;" class="swiper-container">
<div id="viewerjs" class="swiper-wrapper" [ngClass]="{'noImgCss': imagesArr.length == 0}">
<div class="swiper-slide" style="text-align: center;" *ngFor="let img of imagesArr"><img [src]="img.PropertyValue + '?x-oss-process=image/resize,m_fixed,h_100,w_100'" alt="" [attr.data-original]="img.PropertyValue"></div>
</div>
<!-- 如果需要导航按钮 -->
<div class="swiper-button-next"></div>
<div class="swiper-button-prev"></div>
<span style="position: absolute;right: 2px;top: 2px;cursor: pointer;z-index: 200;" *ngIf="isEditPattern">
<mat-icon class="hoverred" (click)="deleteImg()">delete</mat-icon>
</span>
</div>
</div>
</div>
<!-- 方向 -->
<div *ngIf="item.PropertyType == 5" class="selectDiv">
<p style="display: inline-block;">{{item.PropertyName}}</p>
<select (change)="direction(item,$event)" [disabled]="!isEditPattern || (canvasAssetObj.GameMode == 0 && !pattern)">
<option value ="0" [selected]="item.PropertyValue =='0'"></option>
<option value ="1" [selected]="item.PropertyValue =='1'">西</option>
<option value ="2" [selected]="item.PropertyValue =='2'"></option>
<option value ="3" [selected]="item.PropertyValue =='3'"></option>
<option value ="4" [selected]="item.PropertyValue =='4'">东南</option>
<option value ="5" [selected]="item.PropertyValue =='5'">西南</option>
<option value ="6" [selected]="item.PropertyValue =='6'">东北</option>
<option value ="7" [selected]="item.PropertyValue =='7'">西北</option>
</select>
</div>
<!-- 布尔值 是1或否0 -->
<div *ngIf="item.PropertyType == 6">
<p>{{item.PropertyName}}</p>
<input [disabled]="!isEditPattern || (canvasAssetObj.GameMode == 0 && !pattern)" [checked]="item.PropertyValue == '1'" class="input" type="radio" name="radio" (click)="assetRadioChange(item,'1')"><span></span>
<input [disabled]="!isEditPattern || (canvasAssetObj.GameMode == 0 && !pattern)" [checked]="item.PropertyValue == '0'" class="input" type="radio" name="radio" (click)="assetRadioChange(item,'0')"><span></span>
</div>
<!-- 供给区域 -->
<div *ngIf="item.PropertyType == 7" class="selectDiv">
<p style="display: inline-block;">{{item.PropertyName}}</p>
<select (change)="supplyArea(item,$event)" [disabled]="!isEditPattern || (canvasAssetObj.GameMode == 0 && !pattern)">
<option value ="0" [selected]="item.PropertyValue =='0'">全部</option>
<option value ="1" [selected]="item.PropertyValue =='1'">高区</option>
<option value ="2" [selected]="item.PropertyValue =='2'">中区</option>
<option value ="3" [selected]="item.PropertyValue =='3'">低区</option>
<option value ="4" [selected]="item.PropertyValue =='4'">高中区</option>
<option value ="5" [selected]="item.PropertyValue =='5'">高低区</option>
<option value ="6" [selected]="item.PropertyValue =='6'">中低区</option>
</select>
</div>
<!-- 供给类型 -->
<div *ngIf="item.PropertyType == 8" class="selectDiv">
<p style="display: inline-block;">{{item.PropertyName}}</p>
<select (change)="supplyType(item,$event)" value="4" [disabled]="!isEditPattern || (canvasAssetObj.GameMode == 0 && !pattern)">
<option value ="0" [selected]="item.PropertyValue =='0'">消火栓</option>
<option value ="1" [selected]="item.PropertyValue =='1'">喷淋</option>
<option value ="2" [selected]="item.PropertyValue =='2'">水幕</option>
<option value ="3" [selected]="item.PropertyValue =='3'">泡沫</option>
<option value ="4" [selected]="item.PropertyValue =='4'">消防</option>
</select>
</div>
</div>
</div>
</div>
<!-- 消防要素 -->
<div id="firecategories" class="firecategories" style="height: 50%;">
<!-- 素材属性div鼠标拖动div -->
<div style="height:3px;width: 100%;position: absolute;top: 0;cursor: n-resize;z-index: 1000;" (mousedown)="firecategoriesDivMouseDown($event)"></div>
<div class="title">
<div>
<span style="user-select: none">消防要素</span>
</div>
</div>
<div class="firecategoriesTree">
<!-- 消防列表树写在这里 -->
<mat-tree [dataSource]="dataSource" [treeControl]="treeControl" cdkDropList [cdkDropListData]="dataSource" (cdkDropListDropped)="drop($event)">
<mat-tree-node cdkDrag cdkDragDisabled="false" [ngClass]="{'isLookPattern': !node.isLookPattern && !isEditPattern}" *matTreeNodeDef="let node;" matTreeNodePadding cdkTreeNodePaddingIndent='26' (click)="clickTreeNode(node)" class="treeNode">
<button mat-icon-button disabled></button>
<span title="{{node.name}}" [ngClass]="{'treeText': !node.isTemplate}">
{{node.name}}
</span>
<span *ngIf="node.isTemplate">({{node.children.length}})</span>
<span class="isLookCss" (click)="clickLookItem(node)"><mat-icon [ngClass]="{'icongray': node.isLook == false}">visibility</mat-icon></span>
</mat-tree-node>
<mat-tree-node cdkDrag cdkDragDisabled="false" [ngClass]="{'isLookPattern': !node.isLookPattern && !isEditPattern}" *matTreeNodeDef="let node;when: hasChild" matTreeNodePadding (click)="clickTreeNode(node)"class="treeNode" >
<button mat-icon-button
matTreeNodeToggle
[attr.aria-label]="'toggle ' + node.name">
<mat-icon class="mat-icon-rtl-mirror">
{{treeControl.isExpanded(node) ? 'expand_more' : 'chevron_right'}}
</mat-icon>
</button>
<span title="{{node.name}}" [ngClass]="{'treeText': !node.isTemplate}">
{{node.name}}
</span>
<span *ngIf="node.isTemplate && node.isNewElement">({{node.children.length}})</span>
<span class="isLookCss" (click)="clickLookItem(node)"><mat-icon [ngClass]="{'icongray': node.isLook == false}">visibility</mat-icon></span>
</mat-tree-node>
</mat-tree>
</div>
</div>
</div>
<div id="bottomDiv" class="bottomCss" *ngIf="!pattern">
<div class="dragDiv" (mousedown)="bottomDivMouseDown($event)"></div>
<div class="title">
<div (click)="details()" [ngClass]="{'detailsAndattentBtn': detailsAndattentBtn}">
节点详情
</div>
<div (click)="attent()" [ngClass]="{'detailsAndattentBtn': !detailsAndattentBtn}">
注意事项
</div>
</div>
<div class="body">
<textarea [disabled]="!isEditPattern" *ngIf="detailsAndattentBtn" name="" id="" rows="10" [(ngModel)]="canvasData.selectPanelPointBaseData.description"></textarea>
<textarea [disabled]="!isEditPattern" *ngIf="!detailsAndattentBtn" name="" id="" rows="10" [(ngModel)]="canvasData.selectPanelPointBaseData.notes"></textarea>
</div>
</div>
</div>
</div>
</div>

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

@ -0,0 +1,450 @@
@import './panel.scss';
.icongray{
color: #D9D0DC;
}
.content {
width: 100%;
height: 100%;
overflow: hidden;
box-sizing: border-box;
padding: 1px;
display: flex;
flex-direction: column;
.buildingbtnchecked{
background-color: #34A6FD;
color: white;
}
}
//header头部
.header {
position: relative;
flex: 5%;
display: flex;
align-items:center;
min-height: 40px;
background-color: #fff;
.marginLeftRight {
margin: 0 8px;
font-size: 16px;
user-select: none;
cursor: pointer;
.mat-icon { vertical-align: middle; font-size: 24px; }
}
.copytobutn{
width: 60px;
min-width: 60px;
display: flex;
justify-content: center;
}
span{
height: 24px;
line-height: 24px;
}
.patternSwitch{
position: absolute;
right: 140px;
span{
font-size: 18px;
cursor: pointer;
margin: 0 3px;
display: inline-block;
border: 1px solid gray;
border-radius: 3px;
padding: 0 5px;
}
.selectedPattern{
background-color: #2196f3;
color: white;
}
}
.rightSave {
cursor: pointer;
position: absolute;
right: 60px;
label { vertical-align: middle; color: #279FFF; }
}
}
//头部操作栏
.headerOperate {
img {
width: 24px;
height: 24px;
vertical-align: middle;
margin-left: 1px;
}
span{
font-size: 18px;
}
flex: 5%;
display: flex;
align-items:center;
min-height: 40px;
box-sizing: border-box;
margin: 3px 0;
background-color: white;
button{
border: 0.5px solid rgb(208, 211, 214);
margin: 0 2px;
}
.editdeletebtn{
display: none;
}
.bigeditdeletebtn:hover{
.editdeletebtn{
display: inline-block;
}
}
}
//功能区
// icon统一样式
.mat-icon {
cursor:pointer;
vertical-align: middle;
}
//左右两侧功能栏 统一样式
.publicCss {
border-radius: 5px;
position: absolute;
height: 100%;
top: 0;
}
.functionalDomain {
flex: 90%;
overflow: hidden;
.functionalDomainContent {
position: relative;
width: 100%;
height: 100%;
}
.functionalDomainLeft {
background-color: #fff;
display: flex;
flex-direction: column;
margin-left: 0px;
transition: margin-left 0.5s;
min-width: 235px;
border: 1px solid #E6EAEE;
width: 235px;
left: 0;
z-index: 111;
.leftDragDiv{
position: absolute;
right: 0;
height: 100%;
width: 3px;
z-index: 1000;
cursor: e-resize;
}
}
.functionalDomainRight {
z-index: 1001;
margin-right: 0px;
transition: margin-right 0.5s;
border: 1px solid #464646;
width: 235px;
right: 0;
}
//右边导航栏显示隐藏
.togglePanel2 {
margin-right: -2000px;
transition: margin-right 1s;
}
//左侧导航栏显示隐藏
.togglePanel {
margin-left: -2000px;
transition: margin-left 1s;
}
}
//右边操作栏
.title{
width: 100%;
height: 35px;
background-color: #464646;
div{
width: 50%;
height: 35px;
line-height: 35px;
background-color: #595959;
border-radius: 5px;
span{
color: white;
font-size: 14px;
font-weight: 400;
padding-left: 5px;
}
}
}
//右侧属性
.property{
display: flex;
flex-flow: column;
.siteproperty{
height: 100%;
overflow-y: auto;
p{
color: #9c9fa5;
padding-left: 5px;
}
.siteproperty_size{
background-color: #e3e3e3;
width: 93%;
margin: 0 auto;
border-radius: 3px;
min-height: 21px;
}
.rightAttribute{
width: 12%;
height: 99.5%;
position: absolute;
top: 0;
right: 0;
bottom: 0;
border: 2px solid #464646;
}
}
.assetsproperty{
overflow-y: auto;
height: 100%;
p{
color: #9c9fa5;
margin:1px 0 3px 8px;
font-size: 14px;
}
span{
font-size: 15px;
}
input{
height: 18px;
}
.biginput{
display: block;
width: 88%;
margin: 0 auto;
}
.smallinput{
display: block;
width: 19%;
margin-left: 8px;
}
.textarea{
display: block;
width: 88%;
height: 50px;
margin: 0 auto;
}
.swiper-button-next{
right: 6px;
}
.swiper-button-prev{
left: 6px;
}
.swiper-container{
// --swiper-theme-color: #ff6600;/* 设置Swiper风格 */
// --swiper-navigation-color: #00ff33;/* 单独设置按钮颜色 */
--swiper-navigation-size:20px;/* 设置按钮大小 */
}
.hoverred:hover{
color: rgb(187, 28, 28);
}
.selectDiv{
height: 21px;
position: relative;
margin-bottom: 5px;
select{
width: 98px;
height: 22px;
vertical-align: middle;
position: absolute;
right: 10px;
top: 1px;
border: 1px solid rgb(208, 211, 214);
border-radius: 2px;
}
}
.colorBigDiv{
width: 88%;
margin-left: 8px;
.colorBigTemplateDiv{
span{
color: #9c9fa5;
font-size: 14px;
height: 26px;
line-height: 26px;
}
.colorTemplateDiv{
width: 65%;
height: 22px;
display: inline-block;
vertical-align: middle;
margin-left: 26px;
}
}
.colorDiv{
.colorLi{
width: 24px;
height: 24px;
list-style: none;
float: left;
border: 2px solid white;
}
.coloractive{
border: 2px solid black;
}
}
}
}
}
//右侧消防要素
.firecategories{
background-color: #fff;
position: relative;
display: flex;
flex-flow: column;
.firecategoriesTree{
overflow-y: auto;
height: 100%;
mat-tree-node{
position: relative;
}
.isLookCss{
position: absolute;
right: 6px;
}
}
}
// 解决轮播图蓝框问题
div:focus {
outline: none;
}
//没有图片时显示无图片背景图
.noImgCss{
background: url(../../../assets/images/noImg.png) no-repeat center center;
background-size: 88% 100%;/*按比例缩放*/
}
.input{
width: 18px;
height: 18px;
vertical-align: middle;
margin-left: 9px;
margin-right: 3px;
}
// tree
.mat-tree-node{
min-height: 0;
height: 32px;
line-height: 32px;
font-size: 13px;
cursor: pointer;
}
.treeNode:hover{
background-color: #ccebf8;
}
.isLookPattern{
display: none;
}
.treeText{
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
display: inline-block;
width: 65px;
}
.bigBox{
width: 700px;
height: 40px;
position: absolute;
overflow: hidden;
right: 0;
}
.weatherBox{
height: 40px;
width: 700px;
line-height: 40px;
position: absolute;
right: 0;
transition: right linear .5s;
.openbtn{
font-size: 45px;
height: 45px;
width: 40px;
}
.name{
font-size: 16px;
vertical-align: middle;
margin-left: 3px;
}
input{
width: 140px;
height: 22px;
margin-left: 3px;
}
select{
width: 96px;
height: 25px;
margin-left: 3px;
vertical-align: middle;
}
}
.open{
right: 0px;
}
.close{
right:-622px;
}
.bottomCss{
position: absolute;
left: 232px;
right: 0px;
bottom: 0;
height: 158px;
width: auto;
z-index: 100;
background-color: white;
border: 1px solid #464646;
.dragDiv{
width: 100%;
height: 3px;
position: absolute;
top: 0;
z-index: 1000;
cursor: n-resize;
}
.title{
height: 35px;
background-color: #464646;
div{
background-color: #464646;
float: left;
width: 80px;
color: white;
font-size: 13px;
padding-left: 5px;
cursor: pointer;
}
.detailsAndattentBtn{
background-color: #595959;
}
}
.body{
textarea{
width: 100%;
border-radius: 0px;
}
}
}

25
src/app/ui/collection-tools-building/collection-tools.component.spec.ts

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

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

File diff suppressed because it is too large Load Diff

28
src/app/ui/collection-tools-building/createBuilding.html

@ -0,0 +1,28 @@
<div mat-dialog-title>新增建筑</div>
<div>
<form (ngSubmit)="onSubmit(form.value)" #form="ngForm" class="example-container">
<div mat-dialog-content>
<mat-form-field>
<input type="text" matInput ngModel
required name="propertyName" placeholder="建筑名称" autocomplete="off">
</mat-form-field>
</div>
<div mat-dialog-content>
<mat-form-field>
<mat-select [(value)]="selected" required ngModel name="buildingId" placeholder="建筑类型">
<mat-option *ngFor="let item of allBuildingType" [value]="item.id">
{{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>

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

@ -0,0 +1,23 @@
<div mat-dialog-title>编辑建筑</div>
<div>
<form (ngSubmit)="onSubmit(form.value)" #form="ngForm" class="example-container">
<div mat-dialog-content>
<mat-form-field>
<input type="text" matInput [(ngModel)]="defaultName" required name="propertyName" placeholder="建筑名称" autocomplete="off">
</mat-form-field>
</div>
<div mat-dialog-content>
<mat-form-field>
<mat-select required [(ngModel)]="defaultBuildingType" name="buildingId" placeholder="建筑类型">
<mat-option *ngFor="let item of allBuildingType" [value]="item.id">
{{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>

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

@ -0,0 +1,23 @@
<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>

39
src/app/ui/collection-tools-building/editPlaneFigure.html

@ -0,0 +1,39 @@
<div class="functionalDomainContent">
<div mat-dialog-title>
<label *ngIf="!data.isBuilding">编辑平面图</label>
<label *ngIf="data.isBuilding">编辑楼层/区域</label>
</div>
<form (ngSubmit)="onSubmit(form.value)" #form="ngForm" class="example-container">
<div class="keyMargin">
<mat-form-field>
<input matInput name="name" required [(ngModel)]="name" placeholder="名称">
</mat-form-field>
</div>
<div class="keyMargin" *ngIf="data.isBuilding">
<mat-checkbox name="isRefugeStorey" [(ngModel)]="checked">是否为避难层</mat-checkbox>
</div>
<div class="keyMargin">
<mat-form-field>
<input matInput name="area" type="number" required [(ngModel)]="area" placeholder="面积 (平方米)">
</mat-form-field>
</div>
<div class="keyMargin">
<textarea name="details" [(ngModel)]="details" placeholder="详情"></textarea>
</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>

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

@ -0,0 +1,180 @@
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';
@Component({
selector: 'app-leftFunctionalDomain-building',
templateUrl: './addPlaneFigure.html',
styleUrls: ['./panel.scss']
})
export class leftFunctionalDomainBuildingComponent implements OnInit {
constructor(
private http:HttpClient,
public dialog: MatDialog,
public snackBar: MatSnackBar,
public dialogRef: MatDialogRef<any>,
@Inject(MAT_DIALOG_DATA) public data) { }
ngOnInit(): void {
}
params = {companyId: sessionStorage.getItem('companyId')}
checked:boolean = false;//是否为避难层
//提交表单创建平面图
onSubmit (e) {
if (!this.data.isBuilding) { //总平面图 创建平面图
let data = {
companyId: sessionStorage.getItem('companyId'),
name: e.name,
order: this.data.order,
area:e.area,
details:e.details,
enabled: true,
modifiedTime: new Date(),
}
this.http.post('/api/SitePlans',data).subscribe(data=>{
this.dialogRef.close('总平面图');
})
} else { //建筑 创建楼层/区域
let data = {
isRefugeStorey: e.isRefugeStorey,
buildingId: this.data.Panel.id,
name: e.name,
order: this.data.order,
area:e.area,
details:e.details,
enabled: true,
modifiedTime: new Date(),
}
this.http.post('/api/BuildingAreas',data,{params:this.params}).subscribe(data=>{
this.dialogRef.close('建筑');
})
}
}
}
//编辑平面图 楼层/区域
@Component({
selector: 'app-editPlaneFigure-building',
templateUrl: './editPlaneFigure.html',
styleUrls: ['./panel.scss']
})
export class editPlaneFigureBuildingComponent 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.name = this.data.buildingData.name || ''
this.checked = this.data.buildingData.isRefugeStorey || false
this.area = this.data.buildingData.area || 0
this.details = this.data.buildingData.details || ''
}
params = {companyId: sessionStorage.getItem('companyId')}
name:any; //name
checked:boolean = false;//是否为避难层
area:number; //面积
details:string; //详情
//提交表单修改平面图
onSubmit (e) {
if (!this.data.isBuilding) { //总平面图 修改平面图
let data = {
companyId: sessionStorage.getItem('companyId'),
id: this.data.buildingData.id,
name: e.name,
cadUrl: this.data.buildingData.cadUrl,
imageUrl: this.data.buildingData.imageUrl,
imageAngle: this.data.buildingData.imageAngle,
order: this.data.buildingData.order,
area:e.area,
details:e.details,
enabled: this.data.buildingData.enabled,
modifiedTime: new Date(),
}
this.http.put(`/api/SitePlans/${this.data.buildingData.id}`,data).subscribe(data=>{
this.dialogRef.close('总平面图');
})
} else { //建筑 修改楼层/区域
let data = {
isRefugeStorey: e.isRefugeStorey,
buildingId: this.data.Panel.id,
id: this.data.buildingData.id,
name: e.name,
cadUrl: this.data.buildingData.cadUrl,
imageUrl: this.data.buildingData.imageUrl,
imageAngle: this.data.buildingData.imageAngle,
order: this.data.buildingData.order,
area:e.area,
details:e.details,
enabled: this.data.buildingData.enabled,
modifiedTime: new Date(),
}
this.http.put(`/api/BuildingAreas/${this.data.buildingData.id}`,data,{params:this.params}).subscribe(data=>{
this.dialogRef.close('建筑');
})
}
}
}
//创建 处置预案 节点
@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);
})
}
}

291
src/app/ui/collection-tools-building/panel.scss

@ -0,0 +1,291 @@
.matIcons {
color: #8E909F;
}
//平面图 素材库 公共样式 头部
.planarGraphHeader{
height: 35px;
min-height: 35px;
cursor: pointer;
display: flex;
flex-direction: row;
align-items: center;
padding: 0 24px;
border-radius: 5px;
font-family: Roboto, "Helvetica Neue", sans-serif;
font-size: 15px;
font-weight: 400;
color: #000;
background: linear-gradient(to top,#cdced1,#FFF);
}
//平面图头部字体图标样式
.hover {
width: 18px;
height: 18px;
margin-left: 90px;
border: 1px solid #999;
border-radius: 3px;
.mat-icon {font-size: 18px; color: #999;}
}
.hover:hover {
background-color: #4DA5FA;
.mat-icon {color: #fff;}
}
//平面图
.sitePlanContent {
position: relative;
width: 100%;
height: 35px;
line-height: 35px;
box-sizing: border-box;
padding: 0 10px 0 25px;
.mat-icon {
font-size: 20px;
}
}
//火源/力量 图标
.fireForce {
display: block;
float: right;
margin: 8px 5px 0 0;
width: 40px;
height: 20px;
line-height: 20px;
text-align: center;
position: relative;
overflow: hidden;
img{
width: 20px;
height: 20px;
}
}
//替换底图 inputfile
.a-upload {
display: block;
float: right;
margin: 8px 18px 0 0;
width: 20px;
height: 20px;
line-height: 20px;
text-align: center;
position: relative;
overflow: hidden;
input {
position: absolute;
width: 20px;
height: 20px;
left: 0;
top: 0;
opacity: 0;
}
}
.a-upload:hover {
.mat-icon {
color: #fff;
}
}
//上传底图 inputfile
#a-uploadImg {
display: block;
width: 300px;
height: 170px;
position: fixed;
top: 40%;
left: 48%;
overflow: hidden;
border-radius: 5px;
border: 1px solid #999;
z-index: 999;
input {
position: absolute;
width: 300px;
height: 170px;
left: 0;
top: 0;
opacity: 0;
}
img {
width: 100%;
height: auto;
}
}
#a-uploadImg:hover {
border: 5px solid skyblue;
}
//hover时显示右边操作栏
.sitePlanContent:hover {
#rightOperate {
display: block;
}
}
//右边操作栏
#rightOperate{
width: 50px;
height: 100px;
position: absolute;
top: -32px;
right: -48px;
z-index: 99999;
border-radius: 0 100px 100px 0;
background-color: #F0F4F7;
// #F0F4F7 cdced1
display: none;
.functionButton {
height: 25%;
line-height: 25px;
}
.bigFunctionIcon {
font-size: 24px;
}
.functionIcon {
color: #999;
}
.functionIcon:hover {
color: #4DA5FA;
}
}
//处置预案 素材库 公用div
.publiclBankPlan {
flex: 1;
display: flex;
flex-direction: column;
overflow: hidden;
padding-bottom: 10px;
// border-top: 1px dashed #999;
}
// 基本信息/想定作业 切换
.scenarioAssignment {
overflow-y: auto;
}
.selectEditMode {
flex: 1;
display: flex;
flex-direction: column;
overflow: hidden;
}
.materialBankDIV{
flex: 1;
overflow-x: hidden;
overflow-y: auto;
}
// 基本信息/想定作业 切换
//处置预案
#terrNodePublic {
height: 35px;
line-height: 35px;
display: flex;
.textNode {flex: 1;}
}
//字体图标
.planIconDiv {
display: inline-block;
.mat-icon{
font-size: 20px;
width: 20px;
height: 20px;
color: #666;
margin-right: 3px;
}
}
.mat-expansion-panel-header {
height: 40px !important;
}
//素材库溢出隐藏
#materialBank {
margin: 1px 0;
}
//素材库图片flex
#panelLibrary .text{
box-sizing: border-box;
margin-left: 10px;
}
.panelLibraryFlex {
display: flex;
flex-direction: row;
flex-wrap: wrap;
justify-content: space-between; /* 水平居中 */
.imgBox {
width: 70px;
height: 100px;
display: inline-block;
text-align: center;
border-radius: 3px;
margin: 5px 0;
img {
width: 70px;
height: auto;
max-height: 70px;
cursor:pointer;
}
p {
font-size: 12px;
cursor:pointer;
}
}
}
//文本溢出
.overflowText {
overflow: hidden;
text-overflow:ellipsis;
white-space: nowrap;
}
// 楼层/区域 是避难层时
.isRefugeStorey {
color: #fff;
background-color: rgb(238, 186, 186);
}
//选中平面图时
.selectSitePlan {
color: #fff;
background-color: #6BC2FF;
}
//选中素材库图片时
.selectImg {
color: #fff;
background-color: #4DA5FA;
}
//选中 处置节点时
.selectanelPoint {
background-color: #F4C235;
}
//左侧功能区弹出框样式
.keyMargin {
width: 100%;
margin: 5px 0;
.mat-form-field {
width: 100%;
}
}
.submitBottom {
display: flex;
flex-direction: row;
flex-wrap: wrap;
justify-content: space-between; /* 水平居中 */
}
.functionalDomainContent {
width: 300px;
height: 100%;
textarea {
border-radius: 5px;
border: 1px solid #999;
width: 100%;
height: 120px;
resize:none;
}
}

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

@ -0,0 +1,300 @@
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

@ -0,0 +1,5 @@
<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

@ -0,0 +1,53 @@
<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

@ -0,0 +1,24 @@
<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>

11
src/app/ui/collection-tools-plan/addPlaneFigure.html

@ -12,6 +12,17 @@
</mat-form-field>
</div>
<div class="keyMargin">
<a href="javascript:;" class="uploadBackGround" (click)='toGIS()'>导入GIS地图</a>
</div>
<div class="keyMargin">
<a href="javascript:;" class="uploadBackGround">
<input type="file" (change)='selectFile($event)' accept="image/*">上传本地图片
</a>
<p *ngIf="file" style="font-size: 14px; text-align: left;">选择文件: {{file.name}}</p>
</div>
<div class="keyMargin" *ngIf="data.isBuilding">
<mat-checkbox name="isRefugeStorey" [(ngModel)]="checked">是否为避难层</mat-checkbox>
</div>

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

@ -2,16 +2,16 @@
<!-- header头部 -->
<div class="header">
<button mat-button (click)="toggle()">
<mat-icon style="vertical-align: middle;">toc</mat-icon>
<mat-icon style="vertical-align: middle; color: #279FFF;">toc</mat-icon>
</button>
<button mat-button (click)="toggle2()">
<mat-icon style="vertical-align: middle;">list</mat-icon>
<mat-icon style="vertical-align: middle; color: #279FFF;">list</mat-icon>
</button>
<span [ngClass]="{'icongray': !basicInfo}" title="基本信息名称显示/隐藏" class="marginLeftRight" (click)="basicInfoClick()">
<!-- <span [ngClass]="{'icongray': !basicInfo}" title="基本信息名称显示/隐藏" class="marginLeftRight" (click)="basicInfoClick()">
基本信息名称
<mat-icon>visibility</mat-icon>
</span>
</span> -->
<button (click)="copyAsset()" class="copytobutn marginLeftRight" mat-button title="复制" style="margin:0 5px;" *ngIf="isEditPattern">
复制<mat-icon>library_books</mat-icon>
@ -21,81 +21,13 @@
粘贴<mat-icon>screen_share</mat-icon>
</button>
<span style="position: absolute;right: 60px;cursor: pointer;">
<mat-icon title="查看/编辑模式" (click)="lookpat()" *ngIf="isEditPattern">tv</mat-icon>
<mat-icon title="查看/编辑模式" (click)="editpat()" *ngIf="!isEditPattern && isediticon">create</mat-icon>
<mat-icon *ngIf="isEditPattern " style="margin-left: 12px;" title="保存" (click)="saveSite()">description</mat-icon>
<span class="rightSave">
<!-- <mat-icon title="查看/编辑模式" (click)="lookpat()" *ngIf="isEditPattern">tv</mat-icon>
<mat-icon title="查看/编辑模式" (click)="editpat()" *ngIf="!isEditPattern && isediticon">create</mat-icon> -->
<label title="保存" (click)="saveSite()"><mat-icon>description</mat-icon>保存</label>
</span>
</div>
<!-- 头部操作栏 -->
<div class="headerOperate">
<button mat-button (click)="checkedBuilding({name:'总平面图'},-1)"
[ngClass]="{'buildingbtnchecked': checkedBuildingIndex==-1}">
<span>总平面图</span>
<span *ngIf="isEditPattern && !pattern">
<img src="../../../assets/images/fire.png" *ngIf="sitePlanIcon.fire==2">
<img src="../../../assets/images/noFire.png" *ngIf="sitePlanIcon.fire==1">
<img src="../../../assets/images/force.png" *ngIf="sitePlanIcon.force==2">
<img src="../../../assets/images/noForce.png" *ngIf="sitePlanIcon.force==1">
</span>
</button>
<button mat-button *ngFor="let item of allBuildings;let key = index" (click)="checkedBuilding(item,key)" class="bigeditdeletebtn"
[ngClass]="{'buildingbtnchecked': checkedBuildingIndex==key}">
<span>{{item.name}}</span>
<span *ngIf="isEditPattern && !pattern">
<img src="../../../assets/images/fire.png" *ngIf="item.fire && item.fire==2">
<img src="../../../assets/images/noFire.png" *ngIf="item.fire && item.fire==1">
<img src="../../../assets/images/force.png" *ngIf="item.force && item.force==2">
<img src="../../../assets/images/noForce.png" *ngIf="item.force && item.force==1">
</span>
<span class="editdeletebtn" *ngIf="isEditPattern && pattern">
<mat-icon (click)="editBuilding($event,item)"
style="font-size: 23px;vertical-align:sub;margin-left: 6px;color: rgb(26, 194, 26);">create</mat-icon>
<mat-icon (click)="deleteBuilding($event,item)"
style="font-size: 23px;vertical-align:sub;color: rgb(224, 51, 51);">delete</mat-icon>
</span>
</button>
<!-- <button (click)="yyy()">yyyyy</button> -->
<button mat-button (click)="createBuilding()" *ngIf="isEditPattern && pattern">
<span style="font-size: 24px;">+</span>
</button>
<div class="bigBox" *ngIf="!pattern">
<div class="weatherBox" [ngClass]="{'opened': weatherBtn,'close': !weatherBtn}">
<mat-icon class="openbtn" *ngIf="weatherBtn" (click)="weatherBtnHidden()">keyboard_arrow_right</mat-icon>
<mat-icon class="openbtn" *ngIf="!weatherBtn" (click)="weatherBtnShow()">keyboard_arrow_left</mat-icon>
<span class="name">天气</span>
<input [(ngModel)]="canvasData.selectPanelPointBaseData.weather" type="text" placeholder="最多输入10字节" maxlength="10">
<span class="name">气温</span>
<div style="display: inline-block;position: relative;">
<input [(ngModel)]="canvasData.selectPanelPointBaseData.airTemperature" style="width: 120px;" type="number" value="0" oninput="if(value.length>2)value=value.slice(0,2)">
<span style="position: absolute;right:17px;color: #9c9fa5;"></span>
</div>
<span class="name">风力</span>
<select [(ngModel)]="canvasData.selectPanelPointBaseData.windScale">
<option value ="0">0(无风)</option>
<option value ="1">1(软风)</option>
<option value ="2">2(轻风)</option>
<option value ="3">3(微风)</option>
<option value ="4">4(和风)</option>
<option value ="5">5(清风)</option>
<option value ="6">6(强风)</option>
</select>
<span class="name">风向</span>
<select [(ngModel)]="canvasData.selectPanelPointBaseData.windDirection">
<option value ="0"></option>
<option value ="1">西</option>
<option value ="2"></option>
<option value ="3"></option>
<option value ="4">东南</option>
<option value ="5">西南</option>
<option value ="6">东北</option>
<option value ="7">西北</option>
</select>
</div>
</div>
</div>
<!--功能区 -->
<div class="functionalDomain">
<div class='functionalDomainContent' id="functionalDomainContent">
@ -218,12 +150,8 @@
<!-- 右侧div鼠标拖动div -->
<div style="width: 3px;height: 100%;position: absolute;left: 0;cursor: e-resize;z-index: 1000;" (mousedown)="rightDivMouseDown($event)"></div>
<!-- 属性 -->
<div [ngClass]="{'forbidden': !isEditPattern}" id="property" class="property" style="height: 50%;background-color: white;">
<div class="title">
<div>
<span style="user-select: none">属性</span>
</div>
</div>
<div [ngClass]="{'forbidden': !isEditPattern}" id="property" class="property" style="height: 100%;background-color: white;">
<div class="rightTitle">属性</div>
<!-- 平面图属性 -->
<div class="siteproperty" style="user-select: none" *ngIf="isShowProperty && isShowAttribute">
<p>面积(平方米)</p>
@ -366,69 +294,11 @@
</select>
</div>
</div>
</div>
</div>
<!-- 消防要素 -->
<div id="firecategories" class="firecategories" style="height: 50%;">
<!-- 素材属性div鼠标拖动div -->
<div style="height:3px;width: 100%;position: absolute;top: 0;cursor: n-resize;z-index: 1000;" (mousedown)="firecategoriesDivMouseDown($event)"></div>
<div class="title">
<div>
<span style="user-select: none">消防要素</span>
</div>
</div>
<div class="firecategoriesTree">
<!-- 消防列表树写在这里 -->
<mat-tree [dataSource]="dataSource" [treeControl]="treeControl" cdkDropList [cdkDropListData]="dataSource" (cdkDropListDropped)="drop($event)">
<mat-tree-node cdkDrag cdkDragDisabled="false" [ngClass]="{'isLookPattern': !node.isLookPattern && !isEditPattern}" *matTreeNodeDef="let node;" matTreeNodePadding cdkTreeNodePaddingIndent='26' (click)="clickTreeNode(node)" class="treeNode">
<button mat-icon-button disabled></button>
<span title="{{node.name}}" [ngClass]="{'treeText': !node.isTemplate}">
{{node.name}}
</span>
<span *ngIf="node.isTemplate">({{node.children.length}})</span>
<span class="isLookCss" (click)="clickLookItem(node)"><mat-icon [ngClass]="{'icongray': node.isLook == false}">visibility</mat-icon></span>
</mat-tree-node>
<mat-tree-node cdkDrag cdkDragDisabled="false" [ngClass]="{'isLookPattern': !node.isLookPattern && !isEditPattern}" *matTreeNodeDef="let node;when: hasChild" matTreeNodePadding (click)="clickTreeNode(node)"class="treeNode" >
<button mat-icon-button
matTreeNodeToggle
[attr.aria-label]="'toggle ' + node.name">
<mat-icon class="mat-icon-rtl-mirror">
{{treeControl.isExpanded(node) ? 'expand_more' : 'chevron_right'}}
</mat-icon>
</button>
<span title="{{node.name}}" [ngClass]="{'treeText': !node.isTemplate}">
{{node.name}}
</span>
<span *ngIf="node.isTemplate && node.isNewElement">({{node.children.length}})</span>
<span class="isLookCss" (click)="clickLookItem(node)"><mat-icon [ngClass]="{'icongray': node.isLook == false}">visibility</mat-icon></span>
</mat-tree-node>
</mat-tree>
</div>
</div>
</div>
<div id="bottomDiv" class="bottomCss" *ngIf="!pattern">
<div class="dragDiv" (mousedown)="bottomDivMouseDown($event)"></div>
<div class="title">
<div (click)="details()" [ngClass]="{'detailsAndattentBtn': detailsAndattentBtn}">
节点详情
</div>
<div (click)="attent()" [ngClass]="{'detailsAndattentBtn': !detailsAndattentBtn}">
注意事项
</div>
</div>
<div class="body">
<textarea [disabled]="!isEditPattern" *ngIf="detailsAndattentBtn" name="" id="" rows="10" [(ngModel)]="canvasData.selectPanelPointBaseData.description"></textarea>
<textarea [disabled]="!isEditPattern" *ngIf="!detailsAndattentBtn" name="" id="" rows="10" [(ngModel)]="canvasData.selectPanelPointBaseData.notes"></textarea>
</div>
</div>
</div>
</div>

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

@ -59,6 +59,12 @@
color: white;
}
}
.rightSave {
cursor: pointer;
position: absolute;
right: 60px;
label { vertical-align: middle; color: #279FFF; }
}
}
//头部操作栏
@ -107,7 +113,7 @@
top: 0;
}
.functionalDomain {
flex: 90%;
flex: 95%;
overflow: hidden;
.functionalDomainContent {
position: relative;
@ -138,10 +144,9 @@
z-index: 1001;
margin-right: 0px;
transition: margin-right 0.5s;
border: 1px solid #464646;
border: 1px solid #E6EAEE;
width: 235px;
right: 0;
}
//右边导航栏显示隐藏
.togglePanel2 {
@ -153,27 +158,17 @@
margin-left: -2000px;
transition: margin-left 1s;
}
}
//右边操作栏
.title{
width: 100%;
height: 35px;
background-color: #464646;
div{
width: 50%;
height: 35px;
line-height: 35px;
background-color: #595959;
border-radius: 5px;
span{
color: white;
font-size: 14px;
font-weight: 400;
padding-left: 5px;
}
}
.rightTitle{
height: 35x;
line-height: 35px;
text-align: center;
border-top-left-radius: 10px;
border-top-right-radius: 10px;
background-color: #2196F3;
color: #fff;
}

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

@ -607,7 +607,6 @@ export class CollectionToolsPlanComponent implements OnInit {
this.canvasData.isChange = true
}
isSixShow = true
isSixbtn = true //控制想定作业编辑按钮
isediticon = true //控制查看编辑模式的编辑模式小笔按钮
@ -631,7 +630,6 @@ export class CollectionToolsPlanComponent implements OnInit {
this.canvasData.gameMode = GameMode.Assignment
} else {
this.getAllLibrary() //获取素材库
this.getAllBuildings() //获取所有建筑
}
let that = this
@ -645,7 +643,7 @@ export class CollectionToolsPlanComponent implements OnInit {
this.canvasData.getMessage().subscribe((message: any)=>{
if(message == "send a message"){
this.refurbishTreeData()
// this.refurbishTreeData()
}
})
}
@ -669,7 +667,7 @@ export class CollectionToolsPlanComponent implements OnInit {
//监听数据变化后
this.canvas.on('canvasDataChanged',()=>{
// 收到数据表示共享数据发生变化
this.renovateTreeData(false)
// this.renovateTreeData(false)
});
}
@ -684,7 +682,7 @@ export class CollectionToolsPlanComponent implements OnInit {
let buildingId = this.beforeOneCheckedBuilding.id
let floorId = this.selectingSitePlan.id
this.canvas.paste(companyId,buildingId,floorId)
this.renovateTreeData(false)
// this.renovateTreeData(false)
}
basicInfo:boolean = true //基本信息名称显隐
@ -1352,31 +1350,30 @@ export class CollectionToolsPlanComponent implements OnInit {
//封装 刷新 tree 数据
async renovateTreeData (isRefresh:boolean = true) {
this.allFireElements[this.allFireElements.length-1].children = []
// this.allFireElements[this.allFireElements.length-1].children = []
isRefresh? await this.canvas.refresh() : null
this.canvas.setNameVisible(this.basicInfo,0)
this.canvas.setNameVisible(this.wantToWork,1)
isRefresh? this.canvasData.isChange = false : null //服务中 数据是否改动 改为false
isRefresh? this.isShowProperty = true : null
isRefresh? this.isShowAttribute = true : null
!this.pattern? this.mateFireForce() : null //刷新 建筑楼层 火源/力量图标
let beforeOneId = this.selectingSitePlan.id || '' //当前 选中 平面图 楼层/区域 id
let companyBuildingData = JSON.parse(JSON.stringify( this.canvasData.originalcompanyBuildingData || {} )) // 当前 单位/建筑 数据
let storeyData = JSON.parse(JSON.stringify( this.canvasData.originaleveryStoreyData || {} )) //当前 楼层 数据
// let beforeOneId = this.selectingSitePlan.id || '' //当前 选中 平面图 楼层/区域 id
// let companyBuildingData = JSON.parse(JSON.stringify( this.canvasData.originalcompanyBuildingData || {} )) // 当前 单位/建筑 数据
// let storeyData = JSON.parse(JSON.stringify( this.canvasData.originaleveryStoreyData || {} )) //当前 楼层 数据
for(let key in companyBuildingData.data){
if (companyBuildingData.data[key].FloorId === beforeOneId) { //处理 单位/建筑 数据是否归于当前楼层下
storeyData.data[key] = companyBuildingData.data[key]
}
}
for(let key in storeyData.data){ //筛选数据 没有匹配全部放入到 其他 数组
let noMatch = this.allFireElements.find( every=> every.id===storeyData.data[key].FireElementId )
if (!noMatch) {
this.allFireElements[this.allFireElements.length-1].children.push(storeyData.data[key])
}
}
this.handleTreeData(storeyData) //处理tree数据结构
// for(let key in companyBuildingData.data){
// if (companyBuildingData.data[key].FloorId === beforeOneId) { //处理 单位/建筑 数据是否归于当前楼层下
// storeyData.data[key] = companyBuildingData.data[key]
// }
// }
// for(let key in storeyData.data){ //筛选数据 没有匹配全部放入到 其他 数组
// let noMatch = this.allFireElements.find( every=> every.id===storeyData.data[key].FireElementId )
// if (!noMatch) {
// this.allFireElements[this.allFireElements.length-1].children.push(storeyData.data[key])
// }
// }
// this.handleTreeData(storeyData) //处理tree数据结构
}
@ -1423,7 +1420,7 @@ export class CollectionToolsPlanComponent implements OnInit {
//获取总平面图
getSitePlan () {
let fireData = this.getFireElements(sessionStorage.getItem('buildingTypeId')) //获取单位下 消防要素
// let fireData = this.getFireElements(sessionStorage.getItem('buildingTypeId')) //获取单位下 消防要素
let planData = this.getSitePlanCompanyData() //获取 单位 数据
this.http.get('/api/SitePlans',{params:this.params}).subscribe(data=>{
this.sitePlanData = data
@ -1431,7 +1428,7 @@ export class CollectionToolsPlanComponent implements OnInit {
this.canvasData.selectStorey = this.sitePlanData[0] || {} //服务中 存一份数据
this.selectSitePlanIndex = 0
Promise.all([fireData,planData]).then((res)=>{
Promise.all([planData]).then((res)=>{
this.getSitePlanStorey(this.selectingSitePlan) //获取 平面图 楼层数据
})
@ -1441,7 +1438,7 @@ export class CollectionToolsPlanComponent implements OnInit {
//获取建筑 楼层/区域
getBuildingSitePlan (item) {
let params = { buildingId: item.id }
let fireData = this.getFireElements(item.buildingTypes[0].id || '') //获取建筑下 消防要素
// let fireData = this.getFireElements(item.buildingTypes[0].id || '') //获取建筑下 消防要素
let planData = this.getBuildingData(params) //获取 建筑 数据
this.http.get('/api/BuildingAreas',{params}).subscribe(data=>{
this.sitePlanData = data
@ -1449,7 +1446,7 @@ export class CollectionToolsPlanComponent implements OnInit {
this.canvasData.selectStorey = this.sitePlanData[0] || {} //服务中 存一份数据
this.selectSitePlanIndex = 0
Promise.all([fireData,planData]).then((res)=>{
Promise.all([planData]).then((res)=>{
this.getBuildingStorey(this.selectingSitePlan) //获取 建筑 楼层数据
})

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

@ -23,36 +23,75 @@ export class leftFunctionalDomainComponentPlan implements OnInit {
params = {companyId: sessionStorage.getItem('companyId')}
checked:boolean = false;//是否为避难层
file:any = null; //上传的文件
//选择文件
selectFile (e) {
if (e.target.files.length) {
let maxSize = 5*1024*1024
if (e.target.files[0].size <= maxSize) {
this.file = e.target.files[0]
} else {
const config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('上传图片需小于5MB','确定',config);
}
}
}
//导入GIS
toGIS () {
const config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('功能开发测试中,即将上线','确定',config);
}
//提交表单创建平面图
onSubmit (e) {
if (!this.data.isBuilding) { //总平面图 创建平面图
let data = {
companyId: sessionStorage.getItem('companyId'),
name: e.name,
order: this.data.order,
area:e.area,
details:e.details,
enabled: true,
modifiedTime: new Date(),
}
this.http.post('/api/SitePlans',data).subscribe(data=>{
this.dialogRef.close('总平面图');
})
} else { //建筑 创建楼层/区域
let data = {
isRefugeStorey: e.isRefugeStorey,
buildingId: this.data.Panel.id,
name: e.name,
order: this.data.order,
area:e.area,
details:e.details,
enabled: true,
modifiedTime: new Date(),
}
this.http.post('/api/BuildingAreas',data,{params:this.params}).subscribe(data=>{
this.dialogRef.close('建筑');
})
if (this.file) {
let formData = new FormData()
formData.append("file",this.file)
this.http.post(`/api/Objects/WebPlan2D/${sessionStorage.getItem('companyId')}`,formData).subscribe((data:any)=>{
let imgURL = '/api/Objects/WebPlan2D/' + data.objectName
console.log(imgURL)
if (!this.data.isBuilding) { //总平面图 创建平面图
let data = {
companyId: sessionStorage.getItem('companyId'),
name: e.name,
order: this.data.order,
area:e.area,
details:e.details,
enabled: true,
modifiedTime: new Date(),
imageUrl: imgURL,
}
this.http.post('/api/SitePlans',data).subscribe(data=>{
this.dialogRef.close('总平面图');
})
} else { //建筑 创建楼层/区域
let data = {
isRefugeStorey: e.isRefugeStorey,
buildingId: this.data.Panel.id,
name: e.name,
order: this.data.order,
area:e.area,
details:e.details,
enabled: true,
modifiedTime: new Date(),
imageUrl: imgURL,
}
this.http.post('/api/BuildingAreas',data,{params:this.params}).subscribe(data=>{
this.dialogRef.close('建筑');
})
}
}) //post
} else {
const config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('请上传图片','确定',config);
}
}

25
src/app/ui/collection-tools-plan/panel.scss

@ -268,9 +268,34 @@
.keyMargin {
width: 100%;
margin: 5px 0;
text-align: center;
.mat-form-field {
width: 100%;
}
//上传CAD弹窗 inputfile
.uploadBackGround {
width: 80%;
padding: 0 25px;
height: 30px;
line-height: 30px;
position: relative;
cursor: pointer;
color: #000;
font-size: 14px;
background: #fafafa;
border: 1px solid #ddd;
border-radius: 5px;
overflow: hidden;
display: inline-block;
}
.uploadBackGround input {
position: absolute;
width: 100%;
right: 0;
top: 0;
opacity: 0;
cursor: pointer
}
}
.submitBottom {
display: flex;

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

@ -2,21 +2,21 @@
<!-- header头部 -->
<div class="header">
<button mat-button (click)="toggle()">
<mat-icon style="vertical-align: middle;">toc</mat-icon>
<mat-icon style="vertical-align: middle; color: #279FFF;">toc</mat-icon>
</button>
<button mat-button (click)="toggle2()">
<mat-icon style="vertical-align: middle;">list</mat-icon>
<mat-icon style="vertical-align: middle; color: #279FFF;">list</mat-icon>
</button>
<span [ngClass]="{'icongray': !basicInfo}" title="基本信息名称显示/隐藏" class="marginLeftRight" (click)="basicInfoClick()">
<span [ngClass]="{'icongray': !basicInfo}" *ngIf="pattern" title="基本信息名称显示/隐藏" class="marginLeftRight" (click)="basicInfoClick()">
基本信息名称<mat-icon>visibility</mat-icon>
</span>
<span [ngClass]="{'icongray': !wantToWork}" *ngIf="!pattern" title="想定作业名称显示/隐藏" class="marginLeftRight" (click)="wantToWorkClick()">
想定作业名称<mat-icon>visibility</mat-icon>
</span>
<span class="marginLeftRight">
<!-- <span class="marginLeftRight">
<mat-checkbox color="primary"></mat-checkbox> 多选
</span>
</span> -->
<span class="marginLeftRight">
<mat-checkbox color="primary"></mat-checkbox> 显示图例
</span>
@ -36,10 +36,10 @@
想定作业编辑
</span>
</div>
<span style="position: absolute;right: 60px;cursor: pointer;">
<mat-icon title="查看/编辑模式" (click)="lookpat()" *ngIf="isEditPattern">tv</mat-icon>
<mat-icon title="查看/编辑模式" (click)="editpat()" *ngIf="!isEditPattern && isxxx">create</mat-icon>
<mat-icon *ngIf="isEditPattern " style="margin-left: 12px;" title="保存" (click)="saveSite()">description</mat-icon>
<span class="rightSave">
<!-- <mat-icon title="查看/编辑模式" (click)="lookpat()" *ngIf="isEditPattern">tv</mat-icon>
<mat-icon title="查看/编辑模式" (click)="editpat()" *ngIf="!isEditPattern && isxxx">create</mat-icon> -->
<label title="保存" (click)="saveSite()"><mat-icon>description</mat-icon>保存</label>
</span>
</div>
@ -404,7 +404,7 @@
</div>
<!-- 消防要素 -->
<div id="firecategories" class="firecategories" style="height: 50%;">
<div id="firecategories" class="firecategories" style="height: 50%;background-color: white;">
<!-- 素材属性div鼠标拖动div -->
<div style="height:3px;width: 100%;position: absolute;top: 0;cursor: n-resize;z-index: 1000;" (mousedown)="firecategoriesDivMouseDown($event)"></div>

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

@ -59,6 +59,12 @@
color: white;
}
}
.rightSave {
cursor: pointer;
position: absolute;
right: 60px;
label { vertical-align: middle; color: #279FFF; }
}
}
//头部操作栏

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

@ -1025,12 +1025,7 @@ export class CollectionToolsComponent implements OnInit {
disasterId: this.allFirePlan[0].id || ''
}
});
dialogRef.afterClosed().subscribe(result => {
// console.log('The dialog was closed');
});
}
} //else
} else { //if
const config = new MatSnackBarConfig();
config.verticalPosition = 'top';
@ -1276,7 +1271,6 @@ export class CollectionToolsComponent implements OnInit {
//点击数节点的显示隐藏icon
clickLookItem(node){
//修改真实素材islook属性
for(let key in this.storeyData.data){
if(key == node.id){
@ -1563,7 +1557,7 @@ export class CollectionToolsComponent implements OnInit {
selectSitePlan (item,index) {
if (this.selectSitePlanIndex != index) {
this.canvasData.selectPanelPoint = new DisposalNodeData();
if (this.canvasData.isChange) { //true 数据被改动
if (this.pattern && this.canvasData.isChange) { //true 数据被改动
let isTrue = confirm('是否保存当前编辑数据')
if (isTrue) { //先保存数据 在切换
let isSuccess = this.saveSite()//true的时候 先保存数据
@ -2136,9 +2130,13 @@ export class CollectionToolsComponent implements OnInit {
let dialogRef = this.dialog.open(addBGCDisposalNodeComponent);
dialogRef.afterClosed().subscribe(data=>{
if (data) {
this.canvasData.customizeDisposalNode = data
this.canvasData.customizeDisposalNode = data //自定义数据节点
let imgURL = window.URL.createObjectURL(data.file) //将图片生成 url地址
console.log(imgURL,this.canvasData.customizeDisposalNode)
this.canvasData.selectPanelPointBaseData = {description: '', notes: '', weather: '', airTemperature: '', windDirection: '', windScale: ''} //更新 当前数据节点对应父级节点
this.selectDisposalNode = ''
this.canvasData.selectPanelPoint = new DisposalNodeData() //更新 当前数据节点
this.canvasData.selectPanelPoint.BackgroundImageUrl = imgURL
this.customizeNodes()
}
})
}
@ -2235,16 +2233,46 @@ export class CollectionToolsComponent implements OnInit {
buildingIndex: e.sitePlanId? -1 : this.allBuildings.findIndex(item=>{ return item.id===e.buildingId }), //总平面图/建筑 index
storeyId: e.sitePlanId? e.sitePlanId : e.buildingAreaId, //楼层id
}
this.http.get('/api/DisposalNodeData',{params:params}).subscribe(data=>{
this.http.get('/api/DisposalNodeData',{params:params}).subscribe((data:any)=>{
this.canvasData.selectPanelPoint = this.canvasData.deserialize(JSON.stringify(data || new DisposalNodeData())) //选择 当前 节点
this.canvasData.selectPanelPoint.Data = this.canvasData.deserialize(this.canvasData.selectPanelPoint.Data)
this.seekPanelPoint(parameter)
data.backgroundImageUrl? this.customizeNodes() : this.seekPanelPoint(parameter)
})
} //if
} //else if
}
//自定义数据节点 时
async customizeNodes() {
await this.canvas.loadNoRelevantInformationDisposalPlan(this.canvasData.selectPanelPoint)
let other = {
children: [],
computed: true,
id: '',
name: '其他',
order: 999,
parentId: null,
tag: "INPUT",
isLookPattern : true
}
this.allFireElements = [other]
this.canvas.setNameVisible(this.basicInfo,0)
this.canvas.setNameVisible(this.wantToWork,1)
this.beforeOneCheckedBuildingIsShow = false
let selectPanelPoint = JSON.parse(JSON.stringify(this.canvasData.selectPanelPoint || {} )) //当前 节点 数据
if(selectPanelPoint.Data){
for(let key in selectPanelPoint.Data.Stock){ //筛选数据 没有匹配全部放入到 其他 数组
let noMatch = this.allFireElements.find( every=> every.id===selectPanelPoint.Data.Stock[key].FireElementId )
if (!noMatch) {
this.allFireElements[this.allFireElements.length-1].children.push(selectPanelPoint.Data.Stock[key])
}
}
}
this.handleTreeData({data:{}},selectPanelPoint) //处理tree数据结构
}
//查找 数据节点 对应 建筑/楼层
seekPanelPoint (paramsData) {
this.checkedBuildingIndex = paramsData.buildingIndex

2
src/app/ui/collection-tools/leftFunctionalDomain.ts

@ -144,7 +144,7 @@ export class addBGCDisposalNodeComponent implements OnInit {
file:any = null; //文件
//上传图片
selectFile (e) {
if (e.target.files.length ) {
if (e.target.files.length) {
let maxSize = 5*1024*1024
if (e.target.files[0].size <= maxSize) {
this.file = e.target.files[0]

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

@ -92,7 +92,6 @@ export class saveOneDialog {
nodeItem
itemChildNum = 0 //点击处置节点子数据节点的数量
clickNode(item){
// console.log(item)
this.nodeItem = item
this.allDisposalNodeChild.forEach(item => {
if(item.id == this.nodeItem.id){
@ -105,8 +104,17 @@ export class saveOneDialog {
selectedSiteData = this.data.selectedSiteData
onSubmit(value,type){
this.maskLayerService.sendMessage(true)
let name = this.selectedBuildingData.name + '-' + this.selectedSiteData.name
let name
if (this.canvasData.selectPanelPoint.BackgroundImageUrl) { //当前 为自定义处置节点
if (this.canvasData.selectPanelPoint.DisposalNodeId) { // 保存逻辑
let node = this.canvasData.findDisposalNode(this.canvasData.selectPanelPoint.DisposalNodeId,null)
node? name = node.name : null
} else { //新建逻辑
name = this.canvasData.customizeDisposalNode.name
}
} else {
name = this.selectedBuildingData.name + '-' + this.selectedSiteData.name
}
//如果保存到已有节点
var postdata = {
id: "",
@ -138,8 +146,7 @@ export class saveOneDialog {
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 => {
@ -150,21 +157,30 @@ export class saveOneDialog {
// 保存平面图数据到当前节点
let postdata =JSON.parse(JSON.stringify(this.canvasData.selectPanelPoint))
postdata.Data = JSON.stringify(postdata.Data)
this.http.post(`/api/DisposalNodeData`,postdata).subscribe(data => {
this.maskLayerService.sendMessage(false)
const config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('保存成功','确定',config)
},err=>{
this.maskLayerService.sendMessage(false)
const config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('保存失败','确定',config)
})
this.dialogRef.close();
this.canvasData.sendMessage('send a message');//发布一条消息
postdata.Version = "2.0"
postdata.DisposalNodeId ? null : postdata.DisposalNodeId = istrue.id
postdata.PlanComponentId ? null : postdata.PlanComponentId = sessionStorage.getItem("planId")
postdata.Id ? null : postdata.Id = ''
postdata.BackgroundImageUrl? null : postdata.BackgroundImageUrl = null
let imgURL = this.uploadBGC() //更新 背景图
imgURL.then(url=>{
url? postdata.BackgroundImageUrl = url.toString() : null
this.http.post(`/api/DisposalNodeData`,postdata).subscribe(data => {
this.maskLayerService.sendMessage(false)
const config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('保存成功','确定',config)
},err=>{
this.maskLayerService.sendMessage(false)
const config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('保存失败','确定',config)
})
this.dialogRef.close();
this.canvasData.sendMessage('send a message');//发布一条消息
}) //imgURL
})
}else{//需要3个接口
@ -186,22 +202,27 @@ export class saveOneDialog {
version: this.canvasData.selectPanelPoint.Version || "2.0",
disposalNodeId: data.id,
planComponentId: sessionStorage.getItem("planId"),
backgroundImageUrl: this.canvasData.selectPanelPoint.BackgroundImageUrl,
}
this.http.post(`/api/DisposalNodeData`,objData).subscribe(data => {
this.maskLayerService.sendMessage(false)
const config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('保存成功','确定',config)
},err=>{
this.maskLayerService.sendMessage(false)
const config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('保存失败','确定',config)
})
this.dialogRef.close();
this.canvasData.sendMessage('send a message');//发布一条消息
let imgURL = this.uploadBGC() //更新 背景图
imgURL.then(url=>{
url? objData.backgroundImageUrl = url.toString() : null
this.http.post(`/api/DisposalNodeData`,objData).subscribe(data => {
this.maskLayerService.sendMessage(false)
const config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('保存成功','确定',config)
},err=>{
this.maskLayerService.sendMessage(false)
const config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('保存失败','确定',config)
})
this.dialogRef.close();
this.canvasData.sendMessage('send a message');//发布一条消息
}) //imgURL
})
})
}
@ -280,26 +301,48 @@ export class saveOneDialog {
version: this.canvasData.selectPanelPoint.Version || "2.0",
disposalNodeId: data.id,
planComponentId: sessionStorage.getItem("planId"),
backgroundImageUrl: this.canvasData.selectPanelPoint.BackgroundImageUrl,
}
this.http.post(`/api/DisposalNodeData`,objData).subscribe(data => {
this.maskLayerService.sendMessage(false)
const config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('保存成功','确定',config)
},err=>{
this.maskLayerService.sendMessage(false)
const config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('保存失败','确定',config)
})
this.dialogRef.close();
this.canvasData.sendMessage("send a message")
let imgURL = this.uploadBGC() //更新 背景图
imgURL.then(url=>{
url? objData.backgroundImageUrl = url.toString() : null
this.http.post(`/api/DisposalNodeData`,objData).subscribe(data => {
this.maskLayerService.sendMessage(false)
const config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('保存成功','确定',config)
},err=>{
this.maskLayerService.sendMessage(false)
const config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('保存失败','确定',config)
})
this.dialogRef.close();
this.canvasData.sendMessage("send a message")
}) //imgURL
})
})
}
}
//封装方法 上传 自定义底图
uploadBGC () {
return new Promise((resolve,reject)=>{
if (this.canvasData.selectPanelPoint.BackgroundImageUrl && !this.canvasData.selectPanelPoint.DisposalNodeId) { //新建逻辑
if (this.canvasData.customizeDisposalNode) {
let formData = new FormData()
formData.append("file",this.canvasData.customizeDisposalNode.file)
this.http.post(`/api/Objects/WebPlan2D/${sessionStorage.getItem('companyId')}/DisposalNode`,formData).subscribe((data:any)=>{
resolve('/api/Objects/WebPlan2D/' + data.objectName)
})
}
} else {
resolve(null)
} //else
})
}
}

6
src/app/ui/ui.module.ts

@ -96,8 +96,11 @@ 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'
@NgModule({
declarations: [UiComponent, DateselectComponent, MenuComponent, CardComponent, ListComponent, GridComponent, StepperComponent, TabgroupComponent, ButtonComponent, BadgeComponent, ProgressComponent, SnackbarComponent,PersonaldataComponent, FooterComponent, 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],
declarations: [UiComponent, DateselectComponent, MenuComponent, CardComponent, ListComponent, GridComponent, StepperComponent, TabgroupComponent, ButtonComponent, BadgeComponent, ProgressComponent, SnackbarComponent,PersonaldataComponent, FooterComponent, 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],
imports: [
CommonModule,
@ -155,6 +158,7 @@ import { saveOneDialogPlan, saveTwoDialogPlan } from './collection-tools-plan/sa
exports:[
FooterComponent,
CollectionToolsComponent,
CollectionToolsBuildingComponent,
CollectionToolsPlanComponent
]
})

Loading…
Cancel
Save