You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
3379 lines
115 KiB
3379 lines
115 KiB
import { |
|
Component, |
|
OnInit, |
|
Inject, |
|
ViewChild, |
|
ElementRef, |
|
Renderer2, |
|
ViewContainerRef, |
|
} 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 { |
|
leftFunctionalDomainBuildingComponent, |
|
editPlaneFigureBuildingComponent, |
|
} from "./leftFunctionalDomain"; |
|
import { |
|
MatTreeFlatDataSource, |
|
MatTreeFlattener, |
|
} from "@angular/material/tree"; |
|
import { FlatTreeControl } from "@angular/cdk/tree"; |
|
import { WorkingAreaComponent } from "../../working-area/working-area.component"; |
|
import { |
|
CanvasShareDataService, |
|
DisposalNodeData, |
|
} from "../../canvas-share-data.service"; //引入服务 |
|
import Viewer from "viewerjs"; |
|
import Swiper from "swiper"; |
|
import { |
|
NzFormatBeforeDropEvent, |
|
NzFormatEmitEvent, |
|
NzTreeComponent, |
|
} from "ng-zorro-antd/tree"; |
|
import { Observable, of } from "rxjs"; |
|
import { GameMode } from "src/app/working-area/model/gameMode"; |
|
import { ActivatedRoute, Router } from "@angular/router"; |
|
import { TabbarAndScoreService } from "src/app/http-interceptors/tabbar-and-score.service"; |
|
import { MaskLayerService } from "src/app/mask-layer.service"; |
|
import * as ObjectID from "bson-objectid"; |
|
import { AxMessageSystem } from "src/app/working-area/model/axMessageSystem"; |
|
@Component({ |
|
selector: "app-collection-tools-building", |
|
templateUrl: "./collection-tools.component.html", |
|
styleUrls: ["./collection-tools.component.scss"], |
|
}) |
|
export class CollectionToolsBuildingComponent implements OnInit { |
|
@ViewChild("canvas", { static: true }) canvas: WorkingAreaComponent; //父组件中获得子组件的引用 |
|
|
|
constructor( |
|
private maskLayerService: MaskLayerService, |
|
private tabbarService: TabbarAndScoreService, |
|
private http: HttpClient, |
|
public dialog: MatDialog, |
|
public snackBar: MatSnackBar, |
|
private element: ElementRef, |
|
public canvasData: CanvasShareDataService, |
|
private router: Router, |
|
private route: ActivatedRoute |
|
) {} |
|
@ViewChild("nzTreeComponent", { static: false }) |
|
nzTreeComponent!: NzTreeComponent; |
|
// tree配置 |
|
private _transformer = (node, level: number) => { |
|
//要给渲染节点传那些属性参数 |
|
return { |
|
expandable: !!node.children && node.children.length > 0, |
|
name: node.name || node.Name, |
|
level: level, |
|
id: node.id || node.Id, |
|
children: node.children, |
|
isTemplate: node.isTemplate, |
|
isNewElement: node.isNewElement, |
|
isLook: node.isLook, |
|
isLookPattern: node.isLookPattern || null, |
|
}; |
|
}; |
|
treeControl = new FlatTreeControl<any>( |
|
(node) => node.level, |
|
(node) => node.expandable |
|
); |
|
|
|
treeFlattener = new MatTreeFlattener( |
|
this._transformer, |
|
(node) => node.level, |
|
(node) => node.expandable, |
|
(node) => node.children |
|
); |
|
dataSource = new MatTreeFlatDataSource(this.treeControl, this.treeFlattener); |
|
hasChild = (_: number, node: any) => node.expandable; |
|
|
|
colors = [ |
|
"#076eec", |
|
"#4dd0e1", |
|
"#00ee76", |
|
"#ffff00", |
|
"#eeb422", |
|
"#FF6A6A", |
|
"#ff0000", |
|
"#ff6eb4", |
|
"#00bfff", |
|
"#54ff9f", |
|
"#009688", |
|
"#836fff", |
|
"#ff8c00", |
|
"#ee00ee", |
|
"#ffa07a", |
|
"#00C500", |
|
"#00ffff", |
|
"#6495ed", |
|
"#ffdAb9", |
|
"#AA00FF", |
|
]; |
|
selected = "1"; //图标大小选择框 |
|
|
|
allBuildings; //该单位所有建筑 |
|
beforeOneCheckedBuilding: any; //当前点击选择的建筑 |
|
checkedBuildingIndex: number = 0; //当前点击选择的建筑index |
|
isEditPat: boolean = true; //当前是否是编辑模式 |
|
|
|
assetName: String; //素材名称 |
|
assetWidth: number; //素材宽度 |
|
assetHeight: number; //素材高度 |
|
sliderValue: number = 0; //角度滑竿的值 |
|
sliderValueThickness: number = 0; //厚度滑竿的值 |
|
isHighLight: boolean = false; //是否高亮选择框 |
|
PropertyInfos = []; //去除图片链接真正用于循环的内容 |
|
imagesArrNum; //素材属性图片数量上限 |
|
imagesArr = []; //属性中的图片链接集合 |
|
clickedIndex; //点击图片时的索引值 |
|
|
|
//传入素材对象,设置右侧属性栏内容 |
|
canvasAssetObj; //传入的素材属性对象 |
|
isImgNumCss = false; //控制上传文件input显隐 |
|
mySwiper: any; //轮播图实例 |
|
|
|
gallery; //viewerJs实例 |
|
//设置属性框 |
|
setAssetsProperty(obj) { |
|
//初始化viewerJs实例 |
|
setTimeout(() => { |
|
obj.PropertyInfos.forEach((item) => { |
|
if (item.PropertyType == 4) { |
|
if (document.getElementById("viewerjs")) { |
|
this.gallery = new Viewer(document.getElementById("viewerjs"), { |
|
url: "data-original", |
|
}); |
|
} |
|
} |
|
}); |
|
}, 0); |
|
|
|
//从颜色中取出透明度 |
|
let color = obj.Color; |
|
let strh = color.substring(color.length - 2, color.length); |
|
let opacity = Math.round((parseInt(strh, 16) / 255) * 100); |
|
this.colorDivSliderValue = opacity; |
|
|
|
this.isShowProperty = true; |
|
this.isShowAttribute = false; |
|
let _this = this; |
|
this.imagesArr = []; |
|
this.imagesArrNum = ""; |
|
|
|
this.canvasAssetObj = obj; //将选中素材对象存到本地变量 |
|
|
|
this.assetName = obj.Name; |
|
this.assetWidth = obj.Width; |
|
this.assetHeight = obj.Height; |
|
this.sliderValue = obj.Angle; |
|
this.selectedcolor = obj.Color; |
|
this.PropertyInfos = obj.PropertyInfos; |
|
this.sliderValueThickness = obj.Thickness; |
|
this.PropertyInfos.forEach((item) => { |
|
if (item.PropertyType == 3) { |
|
//如果是图片链接类型 |
|
this.imagesArr.push(item); |
|
} |
|
if (item.PropertyType == 4) { |
|
//图片数值上线 |
|
this.imagesArrNum = item.PropertyValue; |
|
} |
|
}); |
|
|
|
//如果存在图片则加载轮播图 |
|
if (this.imagesArr.length) { |
|
setTimeout(() => { |
|
this.mySwiper = new Swiper(".swiper-container", { |
|
loop: false, |
|
// grabCursor: true, |
|
// 如果需要前进后退按钮 |
|
navigation: { |
|
nextEl: ".swiper-button-next", |
|
prevEl: ".swiper-button-prev", |
|
}, |
|
on: { |
|
click: function () { |
|
_this.clickedIndex = this.clickedIndex; |
|
}, |
|
}, |
|
}); |
|
}, 0); |
|
} |
|
//判断此时图片数量是否达到上限 |
|
if (this.imagesArr.length < this.imagesArrNum) { |
|
//如果不超出 |
|
this.isImgNumCss = true; |
|
} else { |
|
this.isImgNumCss = false; |
|
} |
|
} |
|
pattern: boolean = true; //默认为基本信息编辑 |
|
|
|
//基本信息编辑模式 |
|
baseInfo() { |
|
if (!this.pattern) { |
|
this.pattern = true; |
|
this.canvasData.gameMode = GameMode.BasicInformation; |
|
this.canvasData.selectPanelPoint = new DisposalNodeData(); |
|
this.mateDeleteCustomize(); |
|
this.getAllLibrary(); |
|
this.checkedBuildingIndex = -1; |
|
this.getSitePlan(); //总平面图一层 |
|
} |
|
} |
|
|
|
//想定作业编辑模式 |
|
wantWork() { |
|
if (this.pattern) { |
|
this.pattern = false; |
|
this.canvasData.gameMode = GameMode.Assignment; |
|
this.getAllLibrary("plan"); |
|
this.getDisposalNode(); |
|
} |
|
} |
|
//适应缩放 |
|
adaptZoom() { |
|
this.canvas.zoomFit(); |
|
} |
|
//重置缩放 |
|
resetZoom() { |
|
this.canvas.resetCamera2D(); |
|
} |
|
//ngzorro tree 拖拽 |
|
nzEvent(event: NzFormatEmitEvent): void { |
|
if (this.isDrag) { |
|
let parentId; |
|
if (this.pos == 0) { |
|
parentId = event.node.key; |
|
} else { |
|
if (event.node.level == 0) { |
|
parentId = null; |
|
} else { |
|
parentId = event.node.origin.parentId; |
|
} |
|
} |
|
|
|
let orders = {}; |
|
let originalData = JSON.parse( |
|
JSON.stringify(this.canvasData.allDisposalNode || []) |
|
); //tree原始数据 |
|
let targetNodeData = []; //拖动移入节点的数据,用于遍历求出放在该数组的第几位 |
|
|
|
//找到需要重新排序的数组 |
|
if (this.pos == 0) { |
|
originalData.forEach((item) => { |
|
if (item.parentId == event.node.key) { |
|
targetNodeData.push(item); |
|
} |
|
}); |
|
} else { |
|
if (event.node.origin.parentId) { |
|
//如果拖动目标为非一级节点 |
|
originalData.forEach((item) => { |
|
if (item.parentId == event.node.origin.parentId) { |
|
targetNodeData.push(item); |
|
} |
|
}); |
|
} else { |
|
//如果拖动目标为一级节点 |
|
originalData.forEach((item) => { |
|
if (!item.parentId) { |
|
targetNodeData.push(item); |
|
} |
|
}); |
|
} |
|
} |
|
|
|
let idArr = []; |
|
targetNodeData.forEach((i) => { |
|
idArr.push(i.id); |
|
}); |
|
if (this.pos == 0 && event.node.origin.children.length == 1) { |
|
let key = event.dragNode.key; |
|
orders[key] = 0; |
|
parentId = event.node.key; |
|
} else { |
|
let array = []; |
|
targetNodeData.forEach((item) => { |
|
if (item.id != event.dragNode.key) { |
|
//将拖动项先移除掉 |
|
array.push(item); |
|
} |
|
}); |
|
if (event.dragNode.isEnd[event.dragNode.isEnd.length - 1]) { |
|
//如果移入到最后一个 |
|
array.push(event.dragNode.origin); |
|
} else if (event.dragNode.isStart[event.dragNode.isStart.length - 1]) { |
|
//如果移入到第一个 |
|
array.unshift(event.dragNode.origin); |
|
} else { |
|
//如果移入中间位置 |
|
array.splice(event.node.origin.order, 0, event.dragNode.origin); |
|
} |
|
array.forEach((item, key) => { |
|
orders[item.id] = key; |
|
}); |
|
} |
|
|
|
let obj = { |
|
id: event.dragNode.origin.id, |
|
parentId: parentId, |
|
orders: orders, |
|
}; |
|
|
|
this.http.put("/api/DisposalNodes/Sort", obj).subscribe((data) => { |
|
const config = new MatSnackBarConfig(); |
|
config.verticalPosition = "top"; |
|
config.duration = 3000; |
|
this.snackBar.open("排序成功", "确定", config); |
|
this.refurbishTreeData(); |
|
}); |
|
} |
|
} |
|
|
|
isDrag; //是否可以拖动 |
|
pos; //放置位置 |
|
beforeDrop = (arg: NzFormatBeforeDropEvent) => { |
|
if (arg.dragNode.origin.isDataNode && arg.node.level === 0) { |
|
//如果为数据节点则不允许拖到一级节点 |
|
const config = new MatSnackBarConfig(); |
|
config.verticalPosition = "top"; |
|
config.duration = 3000; |
|
this.snackBar.open("数据节点不允许拖拽到一级节点", "确定", config); |
|
this.isDrag = false; |
|
return of(false); |
|
} else if (!arg.dragNode.origin.isDataNode && arg.node.level === 2) { |
|
const config = new MatSnackBarConfig(); |
|
config.verticalPosition = "top"; |
|
config.duration = 3000; |
|
this.snackBar.open("处置节点不允许拖拽到三级节点", "确定", config); |
|
this.isDrag = false; |
|
return of(false); |
|
} else { |
|
this.isDrag = true; |
|
this.pos = arg.pos; |
|
return of(true); |
|
} |
|
}; |
|
//ngzorro tree 拖拽 |
|
|
|
//天气栏目 |
|
weatherBtn = true; |
|
weatherBtnShow() { |
|
this.weatherBtn = !this.weatherBtn; |
|
} |
|
weatherBtnHidden() { |
|
this.weatherBtn = !this.weatherBtn; |
|
} |
|
|
|
//底部切换按钮div |
|
detailsAndattentBtn = true; |
|
//节点详情 |
|
details() { |
|
this.detailsAndattentBtn = true; |
|
} |
|
//注意事项 |
|
attent() { |
|
this.detailsAndattentBtn = false; |
|
} |
|
|
|
//消防要素div边框高度调节 |
|
firecategoriesDivMouseDown(e) { |
|
document.onmousemove = (ev) => { |
|
let bodyHeight = document.body.clientHeight; //网页宽度 |
|
let maxHeight = |
|
this.element.nativeElement.querySelector("#rightDiv").clientHeight - 35; //最大宽度 |
|
if (bodyHeight - ev.clientY >= maxHeight) { |
|
this.element.nativeElement.querySelector( |
|
"#firecategories" |
|
).style.height = maxHeight + "px"; |
|
this.element.nativeElement.querySelector("#property").style.height = |
|
35 + "px"; |
|
} else { |
|
this.element.nativeElement.querySelector( |
|
"#firecategories" |
|
).style.height = bodyHeight - ev.clientY + "px"; |
|
this.element.nativeElement.querySelector("#property").style.height = |
|
this.element.nativeElement.querySelector("#rightDiv").clientHeight - |
|
this.element.nativeElement.querySelector("#firecategories") |
|
.clientHeight + |
|
"px"; |
|
} |
|
}; |
|
document.onmouseup = () => { |
|
document.onmousemove = null; |
|
document.onmouseup = null; |
|
}; |
|
} |
|
|
|
//左侧div边框宽度调节 |
|
leftDivMouseDown(e) { |
|
document.onmousemove = (ev) => { |
|
let bodyWidth = document.body.clientWidth; //网页宽度 |
|
let maxWidth = |
|
bodyWidth - |
|
260 - |
|
this.element.nativeElement.querySelector("#rightDiv").clientWidth; //最大宽度 |
|
if (ev.clientX - 240 >= maxWidth) { |
|
this.element.nativeElement.querySelector("#leftDiv").style.width = |
|
maxWidth + "px"; |
|
} else { |
|
this.element.nativeElement.querySelector("#leftDiv").style.width = |
|
ev.clientX - 260 + "px"; |
|
} |
|
}; |
|
document.onmouseup = () => { |
|
document.onmousemove = null; |
|
document.onmouseup = null; |
|
}; |
|
} |
|
|
|
//底部div高度调节 |
|
bottomDivMouseDown(e) { |
|
document.onmousemove = (ev) => { |
|
let bodyHeight = document.body.clientHeight; //网页高度 |
|
let maxHeight = |
|
this.element.nativeElement.querySelector("#rightDiv").clientHeight; //最大高度 |
|
if (bodyHeight - ev.clientY >= maxHeight) { |
|
this.element.nativeElement.querySelector("#bottomDiv").style.height = |
|
maxHeight + "px"; |
|
} else { |
|
this.element.nativeElement.querySelector("#bottomDiv").style.height = |
|
bodyHeight - ev.clientY + "px"; |
|
} |
|
}; |
|
document.onmouseup = () => { |
|
document.onmousemove = null; |
|
document.onmouseup = null; |
|
}; |
|
} |
|
|
|
//右侧div边框宽度调节 |
|
rightDivMouseDown(e) { |
|
document.onmousemove = (ev) => { |
|
let bodyWidth = document.body.clientWidth; //网页宽度 |
|
let maxWidth = |
|
bodyWidth - |
|
240 - |
|
this.element.nativeElement.querySelector("#leftDiv").clientWidth; //最大宽度 |
|
if (bodyWidth - ev.clientX >= maxWidth) { |
|
this.element.nativeElement.querySelector("#rightDiv").style.width = |
|
maxWidth + "px"; |
|
} else { |
|
this.element.nativeElement.querySelector("#rightDiv").style.width = |
|
bodyWidth - ev.clientX + "px"; |
|
} |
|
}; |
|
document.onmouseup = () => { |
|
document.onmousemove = null; |
|
document.onmouseup = null; |
|
}; |
|
} |
|
|
|
//放大图标 |
|
iconScale() { |
|
let number = Number(this.selected); |
|
this.canvas.setIconScale(number); |
|
} |
|
|
|
//素材宽度输入框改变 |
|
assetWidthIunput() { |
|
this.canvasAssetObj.Width = this.assetWidth; |
|
this.canvasData.isChange = true; |
|
this.canvas.refreshIcon(this.canvasAssetObj.Id); |
|
} |
|
|
|
//素材高度输入框改变 |
|
assetHeightIunput() { |
|
this.canvasAssetObj.Height = this.assetHeight; |
|
this.canvasData.isChange = true; |
|
this.canvas.refreshIcon(this.canvasAssetObj.Id); |
|
} |
|
|
|
//素材角度输入框改变 |
|
assetAngleIunput() { |
|
this.canvasAssetObj.Angle = this.sliderValue; |
|
this.canvasData.isChange = true; |
|
this.canvas.refreshIcon(this.canvasAssetObj.Id); |
|
} |
|
|
|
//素材厚度输入框改变 |
|
assetThicknessIunput() { |
|
this.canvasAssetObj.Thickness = this.sliderValueThickness; |
|
this.canvasData.isChange = true; |
|
this.canvas.refreshIcon(this.canvasAssetObj.Id); |
|
} |
|
|
|
//素材是否高亮改变----->本地操作行为 |
|
assetHighLightIunput() {} |
|
|
|
//动态属性素材input框值改变 |
|
assetInputChange(i, e) { |
|
if (e.target.value) { |
|
let index = this.canvasAssetObj.PropertyInfos.findIndex((item) => { |
|
return i.PropertyName == item.PropertyName; |
|
}); |
|
if (this.myIsNaN(e.target.value)) { |
|
e.target.value = String(e.target.value); |
|
} |
|
this.canvasAssetObj.PropertyInfos[index].PropertyValue = e.target.value; |
|
this.canvasData.isChange = true; |
|
this.canvas.refreshIcon(this.canvasAssetObj.Id); |
|
} |
|
} |
|
//判断是否是数字类型 |
|
myIsNaN(value) { |
|
return typeof value === "number" && !isNaN(value); |
|
} |
|
//动态属性素材布尔值框改变radio |
|
assetRadioChange(i, boolean) { |
|
let index = this.canvasAssetObj.PropertyInfos.findIndex((item) => { |
|
return i.PropertyName == item.PropertyName; |
|
}); |
|
this.canvasAssetObj.PropertyInfos[index].PropertyValue = boolean; |
|
this.canvasData.isChange = true; |
|
} |
|
|
|
colorIndex; //默认素材颜色 |
|
selectedcolor; //点击选择的颜色 |
|
//选择素材颜色 |
|
selectcolor(item, key) { |
|
//在当前透明度基础上改变颜色 |
|
this.selectedcolor = |
|
item + this.selectedcolor.substring(this.selectedcolor.length - 2); |
|
this.canvasAssetObj.Color = this.selectedcolor; |
|
this.canvasData.isChange = true; |
|
this.canvas.refreshIcon(this.canvasAssetObj.Id); |
|
} |
|
//颜色选择滑竿的值 |
|
colorDivSliderValue; |
|
colorDivSliderChange() { |
|
let colorOpacity = Math.round(255 * this.colorDivSliderValue * 0.01); |
|
//根据滑竿值改变16进制颜色后两位 |
|
function replacepos(text, start, stop, replacetext) { |
|
let mystr = |
|
text.substring(0, stop - 1) + replacetext + text.substring(stop + 1); |
|
return mystr; |
|
} |
|
this.selectedcolor = replacepos( |
|
this.selectedcolor, |
|
7, |
|
8, |
|
colorOpacity.toString(16) |
|
); |
|
this.canvasAssetObj.Color = this.selectedcolor; |
|
this.canvasData.isChange = true; |
|
this.canvas.refreshIcon(this.canvasAssetObj.Id); |
|
} |
|
|
|
//上传素材图片 |
|
selectFile(e) { |
|
let imgFile = e.target.files[0] || null; //上传的文件 |
|
this.startUploading(imgFile); |
|
} |
|
objectName: any; //上传对象名 |
|
startUploading(imgFile) { |
|
let _this = this; |
|
let file = imgFile || null; //获取上传的文件 |
|
let fileSize = file.size || null; //上传文件的总大小 |
|
let shardSize = 10 * 1024 * 1024; //5MB一个分片 |
|
let companyId = sessionStorage.getItem("companyId"); |
|
if (file && fileSize <= shardSize) { |
|
//上传文件<=5MB时 |
|
let formData = new FormData(); |
|
formData.append("file", file); |
|
this.http |
|
.post(`api/Objects/WebPlan2D/${companyId}`, formData) |
|
.subscribe((data: any) => { |
|
this.objectName = data.objectName; |
|
const config = new MatSnackBarConfig(); |
|
config.verticalPosition = "top"; |
|
config.duration = 3000; |
|
this.snackBar.open("上传成功", "确定", config); |
|
|
|
//在原始素材对象和需要循环图片的对象中分别push最新上传的图片 |
|
let imgObj = { |
|
Tag: null, |
|
Order: 0, |
|
Enabled: false, |
|
Visible: false, |
|
Required: false, |
|
RuleName: null, |
|
RuleValue: null, |
|
PhysicalUnit: null, |
|
PropertyName: "图片", |
|
PropertyType: 3, |
|
PropertyValue: "/api/Objects/WebPlan2D/" + this.objectName, |
|
}; |
|
|
|
this.imagesArr.push(imgObj); |
|
this.canvasAssetObj.PropertyInfos.push(imgObj); |
|
|
|
setTimeout(() => { |
|
this.mySwiper = new Swiper(".swiper-container", { |
|
loop: false, |
|
// grabCursor: true, |
|
// 如果需要前进后退按钮 |
|
navigation: { |
|
nextEl: ".swiper-button-next", |
|
prevEl: ".swiper-button-prev", |
|
}, |
|
on: { |
|
click: function () { |
|
_this.clickedIndex = this.clickedIndex; |
|
}, |
|
}, |
|
}); |
|
|
|
this.mySwiper.slideTo(this.imagesArr.length - 1); |
|
this.gallery.update(); |
|
}, 0); |
|
|
|
//判断上传素材属性图片是否超出数量 超出数量则隐藏input框 |
|
if (this.imagesArr.length < this.imagesArrNum) { |
|
//不超出input才会显示 |
|
this.isImgNumCss = true; |
|
} else { |
|
this.isImgNumCss = false; |
|
} |
|
|
|
this.canvasData.isChange = true; |
|
}); |
|
} else if (file && fileSize > shardSize) { |
|
//上传文件>5MB时,分块上传 |
|
let config = new MatSnackBarConfig(); |
|
config.verticalPosition = "top"; |
|
config.duration = 3000; |
|
this.snackBar.open("上传图片文件不允许大于10mb", "确定", config); |
|
} |
|
} |
|
|
|
//不能上传图片提示 |
|
imgNumBeyond() { |
|
const config = new MatSnackBarConfig(); |
|
config.verticalPosition = "top"; |
|
config.duration = 3000; |
|
this.snackBar.open("图片数量已达上限", "确定", config); |
|
} |
|
|
|
//删除素材属性图片 |
|
deleteImg() { |
|
if (this.imagesArr.length == 0) { |
|
const config = new MatSnackBarConfig(); |
|
config.verticalPosition = "top"; |
|
config.duration = 3000; |
|
this.snackBar.open("没有可删除的图片,请先上传", "确定", config); |
|
} else { |
|
// 在素材原始对象中将删除的图片去掉 |
|
this.canvasAssetObj.PropertyInfos = [ |
|
...this.canvasAssetObj.PropertyInfos.filter((item) => { |
|
return ( |
|
item.PropertyValue != |
|
this.imagesArr[this.mySwiper.activeIndex].PropertyValue |
|
); |
|
}), |
|
]; |
|
//在图片循环数组中将图片去掉 |
|
this.imagesArr.splice(this.mySwiper.activeIndex, 1); |
|
//更新swiper视图 |
|
setTimeout(() => { |
|
this.mySwiper.update(); |
|
this.gallery.update(); |
|
}, 0); |
|
|
|
//将上传的input框显示出来 |
|
this.isImgNumCss = true; |
|
//清除图片缓存 |
|
if (<HTMLInputElement>document.getElementById("inputimg")) { |
|
(<HTMLInputElement>document.getElementById("inputimg")).value = null; //清空input框缓存 |
|
} |
|
|
|
this.canvasData.isChange = true; |
|
} |
|
} |
|
|
|
//动态属性方向select选择框 |
|
direction(i, e) { |
|
let index = this.canvasAssetObj.PropertyInfos.findIndex((item) => { |
|
return i.PropertyName == item.PropertyName; |
|
}); |
|
this.canvasAssetObj.PropertyInfos[index].PropertyValue = e.target.value; |
|
this.canvasData.isChange = true; |
|
} |
|
|
|
//动态属性供给区域select选择框 |
|
supplyArea(i, e) { |
|
let index = this.canvasAssetObj.PropertyInfos.findIndex((item) => { |
|
return i.PropertyName == item.PropertyName; |
|
}); |
|
this.canvasAssetObj.PropertyInfos[index].PropertyValue = e.target.value; |
|
this.canvasData.isChange = true; |
|
} |
|
|
|
//动态属性供给类型select选择框 |
|
supplyType(i, e) { |
|
let index = this.canvasAssetObj.PropertyInfos.findIndex((item) => { |
|
return i.PropertyName == item.PropertyName; |
|
}); |
|
this.canvasAssetObj.PropertyInfos[index].PropertyValue = e.target.value; |
|
this.canvasData.isChange = true; |
|
} |
|
|
|
isediticon = true; //控制查看编辑模式的编辑模式小笔按钮 |
|
|
|
isMultipleAsset: boolean = false; //框选多个素材属性显隐 |
|
multipleAsset: any = { |
|
Width: null, |
|
Height: null, |
|
Angle: null, |
|
Thickness: null, |
|
Color: null, |
|
PropertyInfos: [], |
|
}; //多个素材共同属性 |
|
multipleAssetData: any; //当前多选的素材 |
|
firstMultipleAssetData: any; //当前多选的第一个素材 |
|
ngOnInit(): void { |
|
let _this = this; |
|
AxMessageSystem.addListener( |
|
"selectionChanged", |
|
() => { |
|
if (this.canvas.selection.size() == 1) { |
|
//如果是单选 |
|
this.isMultipleAsset = false; |
|
console.log("单选", this.canvas.selection.first().assetData); |
|
this.setAssetsProperty(this.canvas.selection.first().assetData); |
|
} else if (this.canvas.selection.size()) { |
|
this.isShowProperty = true; |
|
this.multipleAssetData = this.canvas.selection.all(); |
|
this.firstMultipleAssetData = this.canvas.selection.first(); |
|
this.multipleAsset = { |
|
Width: null, |
|
Height: null, |
|
Angle: null, |
|
Thickness: null, |
|
Color: null, |
|
PropertyInfos: [], |
|
}; |
|
this.isMultipleAsset = true; |
|
let firstAssetData = this.canvas.selection.first().assetData; //拿出第一个素材作为例子与其他素材进行对比 |
|
let InteractiveMode = firstAssetData.InteractiveMode; //素材连接方式 |
|
let isInteractiveMode = this.canvas.selection |
|
.all() |
|
.every( |
|
(item) => item.assetData.InteractiveMode === InteractiveMode |
|
); |
|
if (isInteractiveMode) { |
|
this.multipleAsset.InteractiveMode = InteractiveMode; |
|
} |
|
let isFillMode = this.canvas.selection |
|
.all() |
|
.every((item) => item.assetData.FillMode === 0); //素材填充方式都为0 |
|
if (isFillMode) { |
|
this.multipleAsset.FillMode = 0; |
|
} |
|
this.canvas.selection.first().assetData.PropertyInfos.forEach((i) => { |
|
let index = 0; |
|
this.canvas.selection.all().forEach((item) => { |
|
item.assetData.PropertyInfos.forEach((element) => { |
|
if ( |
|
element.PropertyName == i.PropertyName && |
|
element.PropertyType == i.PropertyType && |
|
element.PropertyType != 3 && |
|
element.PropertyType != 4 |
|
) { |
|
index++; |
|
if (index == this.canvas.selection.size()) { |
|
let newElement = JSON.parse(JSON.stringify(element)); |
|
newElement.PropertyValue = ""; |
|
this.multipleAsset.PropertyInfos.push(newElement); |
|
} |
|
} |
|
}); |
|
}); |
|
}); |
|
// console.log(666,_this.multipleAsset.PropertyInfos) |
|
} else if (this.canvas.selection.size() == 0) { |
|
this.isShowProperty = false; |
|
} |
|
}, |
|
this |
|
); |
|
AxMessageSystem.addListener( |
|
"imageResize", |
|
(eventName, args1) => { |
|
this.assetWidth = args1.Width; |
|
this.assetHeight = args1.Height; |
|
}, |
|
this |
|
); |
|
if (this.router.url.indexOf("keyUnit/viewunitinfo") != -1) { |
|
//查看模式 |
|
this.isEditPattern = false; |
|
this.isediticon = false; |
|
this.canvasData.gameMode = GameMode.Assignment; |
|
} else if (this.router.url.indexOf("keyUnit/editplaninfo") != -1) { |
|
//编辑模式 |
|
this.canvasData.gameMode = GameMode.BasicInformation; |
|
} |
|
|
|
//gis模块平面图 |
|
if ( |
|
this.router.url.indexOf("gis") != -1 && |
|
sessionStorage.getItem("gisplan") == "look" |
|
) { |
|
this.isEditPattern = false; |
|
this.isediticon = false; |
|
this.canvasData.gameMode = GameMode.Assignment; |
|
} else { |
|
this.getAllLibrary(); //获取素材库 |
|
} |
|
|
|
let that = this; |
|
window.setTimeout(() => { |
|
document.getElementById("functionalDomainContentTwo").oncontextmenu = |
|
function (event) { |
|
// that.canvas.cancelPaint() |
|
that.selectImageIndex = -1; |
|
event.preventDefault(); |
|
}; |
|
}); |
|
|
|
this.canvasData.getMessage().subscribe((message: any) => { |
|
if (message == "send a message") { |
|
this.refurbishTreeData(); |
|
} |
|
}); |
|
} |
|
//多选宽度共同改变 |
|
multipleAssetWidthInput() { |
|
this.multipleAssetData.forEach((item) => { |
|
item.assetData.Width = this.multipleAsset.Width; |
|
this.canvas.refreshIcon(item.assetData.Id); |
|
this.canvasData.isChange = true; |
|
}); |
|
} |
|
//多选高度共同改变 |
|
multipleAssetHeightInput() { |
|
this.multipleAssetData.forEach((item) => { |
|
item.assetData.Height = this.multipleAsset.Height; |
|
this.canvas.refreshIcon(item.assetData.Id); |
|
this.canvasData.isChange = true; |
|
}); |
|
} |
|
//多选角度共同改变 |
|
multipleAssetAngleInput() { |
|
this.multipleAssetData.forEach((item) => { |
|
item.assetData.Angle = this.multipleAsset.Angle; |
|
this.canvas.refreshIcon(item.assetData.Id); |
|
this.canvasData.isChange = true; |
|
}); |
|
} |
|
//多选厚度共同改变 |
|
multipleAssetThicknessInput() { |
|
this.multipleAssetData.forEach((item) => { |
|
item.assetData.Thickness = this.multipleAsset.Thickness; |
|
this.canvas.refreshIcon(item.assetData.Id); |
|
this.canvasData.isChange = true; |
|
}); |
|
} |
|
//多选颜色共同改变 |
|
multipleSelectedcolor: any; |
|
multipleAssetSelectcolor(item, key) { |
|
//在当前透明度基础上改变颜色 |
|
this.multipleSelectedcolor = item; |
|
this.multipleAssetData.forEach((item) => { |
|
item.assetData.Color = this.multipleSelectedcolor; |
|
this.canvasData.isChange = true; |
|
this.canvas.refreshIcon(item.assetData.Id); |
|
}); |
|
} |
|
//多选颜色滑竿改变 |
|
multipleColorDivSliderChange() { |
|
let colorOpacity = Math.round(255 * this.colorDivSliderValue * 0.01); |
|
//根据滑竿值改变16进制颜色后两位 |
|
function replacepos(text, start, stop, replacetext) { |
|
let mystr = |
|
text.substring(0, stop - 1) + replacetext + text.substring(stop + 1); |
|
return mystr; |
|
} |
|
this.multipleAssetData.forEach((item) => { |
|
this.multipleSelectedcolor = replacepos( |
|
this.multipleSelectedcolor, |
|
7, |
|
8, |
|
colorOpacity.toString(16) |
|
); |
|
item.assetData.Color = this.multipleSelectedcolor; |
|
this.canvasData.isChange = true; |
|
this.canvas.refreshIcon(item.assetData.Id); |
|
}); |
|
} |
|
//多选状态动态属性素材input框值改变 |
|
multipleAssetInputChange(i, e) { |
|
e.stopPropagation(); |
|
setTimeout(() => { |
|
this.multipleAssetData.forEach((item) => { |
|
item.assetData.PropertyInfos.forEach((element) => { |
|
if (element.PropertyName == i.PropertyName) { |
|
if (this.myIsNaN(i.PropertyValue)) { |
|
i.PropertyValue = String(i.PropertyValue); |
|
} |
|
element.PropertyValue = i.PropertyValue; |
|
this.canvas.refreshIcon(item.assetData.Id); |
|
this.canvasData.isChange = true; |
|
} |
|
}); |
|
}); |
|
}, 0); |
|
} |
|
//多选状态动态属性素材radio框值改变 |
|
multipleAssetRadioChange(i, value) { |
|
// e.stopPropagation() |
|
this.multipleAssetData.forEach((item) => { |
|
// console.log(item) |
|
item.assetData.PropertyInfos.forEach((element) => { |
|
if (element.PropertyName == i.PropertyName) { |
|
element.PropertyValue = value; |
|
this.canvas.refreshIcon(item.assetData.Id); |
|
this.canvasData.isChange = true; |
|
} |
|
}); |
|
}); |
|
} |
|
//多选状态动态属性素材下拉框值改变 |
|
multipleSupplyArea(i, e) { |
|
e.stopPropagation(); |
|
this.multipleAssetData.forEach((item) => { |
|
item.assetData.PropertyInfos.forEach((element) => { |
|
if (element.PropertyName == i.PropertyName) { |
|
element.PropertyValue = i.PropertyValue; |
|
this.canvas.refreshIcon(item.assetData.Id); |
|
this.canvasData.isChange = true; |
|
} |
|
}); |
|
}); |
|
} |
|
|
|
ngAfterViewInit(): void { |
|
//不是gis模块平面图 |
|
if (this.router.url.indexOf("gis") == -1) { |
|
this.getAllBuildings(true); //获取所有建筑 |
|
} |
|
//监听数据变化后 |
|
this.canvas.on("canvasDataChanged", () => { |
|
// 收到数据表示共享数据发生变化 |
|
this.renovateTreeData(false); |
|
}); |
|
} |
|
|
|
copyAssetData: any; //存储用于复制的素材 |
|
//复制素材 |
|
copyAsset() { |
|
this.canvas.copy(); |
|
} |
|
//粘贴素材 |
|
pasteAsset() { |
|
let companyId = sessionStorage.getItem("companyId"); |
|
let buildingId = this.beforeOneCheckedBuilding.id; |
|
let floorId = this.selectingSitePlan.id; |
|
this.canvas.paste(companyId, buildingId, floorId); |
|
this.renovateTreeData(false); |
|
} |
|
//截图 |
|
takeScreenshot() { |
|
this.canvas.takeScreenshot(); |
|
} |
|
isMultiSelect: boolean = false; // 多选/单选 切换 |
|
changeMultiSelect(e) { |
|
this.canvas.setMulitSelect(this.isMultiSelect); |
|
} |
|
isShowLegend: boolean = true; //图例是否显示 |
|
changeLegend(e) { |
|
this.canvasData.selectPanelPoint.BackgroundImageUrl |
|
? null |
|
: this.canvas.setLegendVisible(this.isShowLegend); |
|
} |
|
|
|
basicInfo: boolean = false; //基本信息名称显隐 |
|
wantToWork: boolean = true; //想定作业名称显隐 |
|
//点击基本信息名称 |
|
basicInfoClick() { |
|
this.basicInfo = !this.basicInfo; |
|
this.canvas.setNameVisible(this.basicInfo, 0); |
|
} |
|
|
|
//点击想定作业名称 |
|
wantToWorkClick() { |
|
this.wantToWork = !this.wantToWork; |
|
this.canvas.setNameVisible(this.wantToWork, 1); |
|
} |
|
|
|
isEditPattern: boolean = true; //是否为编辑模式 |
|
//进入编辑模式 |
|
editpat() { |
|
let config = new MatSnackBarConfig(); |
|
config.verticalPosition = "top"; |
|
config.duration = 3000; |
|
this.snackBar.open("进入编辑模式", "确定", config); |
|
this.isEditPattern = true; |
|
} |
|
|
|
//进入查看模式 |
|
lookpat() { |
|
let config = new MatSnackBarConfig(); |
|
config.verticalPosition = "top"; |
|
config.duration = 3000; |
|
this.snackBar.open("进入查看模式", "确定", config); |
|
this.isEditPattern = false; |
|
} |
|
|
|
//保存平面图 |
|
saveNum: any = []; |
|
saveSite() { |
|
//更新用于统计的数据 |
|
this.canvasData.updateBuildingData(); |
|
|
|
if (this.selectingSitePlan && this.selectingSitePlan.id) { |
|
//打开遮罩层 |
|
this.maskLayerService.sendMessage(true); |
|
//遍历 建筑数据 删除多余数据 |
|
let object = this.canvasData.originalcompanyBuildingData.data; |
|
let adjoinArr = []; //毗邻数组 |
|
Object.keys(object).forEach((key) => { |
|
let isExist = this.sitePlanData.find((item) => { |
|
return item.id === object[key].FloorId; |
|
}); |
|
if (isExist === undefined) { |
|
console.log(object[key], "当前楼层已被删除"); |
|
delete object[key]; |
|
} |
|
}); |
|
//遍历 建筑数据 删除多余数据 |
|
this.saveNum = []; |
|
let SitePlanData = JSON.parse( |
|
JSON.stringify(this.canvasData.originaleveryStoreyData) |
|
); |
|
console.log(SitePlanData.data); |
|
for (const key in SitePlanData.data) { |
|
if (Object.prototype.hasOwnProperty.call(SitePlanData.data, key)) { |
|
const element = SitePlanData.data[key]; |
|
element.Width = Number(element.Width); |
|
element.Height = Number(element.Height); |
|
element.PropertyInfos.forEach((item) => { |
|
item.PropertyType = Number(item.PropertyType); |
|
item.PropertyValue = String(item.PropertyValue); |
|
}); |
|
} |
|
} |
|
SitePlanData.data = JSON.stringify(SitePlanData.data); |
|
|
|
let CompanyData = JSON.parse( |
|
JSON.stringify(this.canvasData.originalcompanyBuildingData) |
|
); |
|
CompanyData.data = JSON.stringify(CompanyData.data); |
|
|
|
if (this.pattern) { |
|
//如果是基本信息编辑模式 |
|
for (const key in object) { |
|
if (object[key].Name == "毗邻") { |
|
//如果是相同楼层,则筛选出毗邻 |
|
object[key].PropertyInfos.forEach((element) => { |
|
element.PropertyValue = String(element.PropertyValue); |
|
if (element.PropertyName == "方向") { |
|
adjoinArr.push(element.PropertyValue); |
|
} |
|
}); |
|
} |
|
} |
|
|
|
if (new Set(adjoinArr).size != adjoinArr.length) { |
|
this.maskLayerService.sendMessage(false); |
|
let config = new MatSnackBarConfig(); |
|
config.verticalPosition = "top"; |
|
config.duration = 3000; |
|
this.snackBar.open("保存失败,毗邻存在相同方向", "确定", config); |
|
return false; |
|
} else { |
|
//如果是单位 总平面图 |
|
if (this.checkedBuildingIndex == -1) { |
|
// console.log(111,SitePlanData) |
|
//保存平面图数据 |
|
this.http |
|
.post("/api/SitePlanData", SitePlanData, { |
|
params: { |
|
companyId: this.params.companyId, |
|
}, |
|
}) |
|
.subscribe( |
|
(data) => { |
|
this.saveNum.push("1"); |
|
if (this.saveNum.length == 5) { |
|
this.maskLayerService.sendMessage(false); |
|
this.canvasData.isChange = false; |
|
let config = new MatSnackBarConfig(); |
|
config.verticalPosition = "top"; |
|
config.duration = 3000; |
|
this.snackBar.open("保存成功", "确定", config); |
|
this.tabbarService.sendMessage("changeScore"); |
|
} |
|
}, |
|
(err) => { |
|
this.maskLayerService.sendMessage(false); |
|
let config = new MatSnackBarConfig(); |
|
config.verticalPosition = "top"; |
|
config.duration = 3000; |
|
this.canvasData.isChange = true; |
|
this.snackBar.open("平面图数据保存失败", "确定", config); |
|
} |
|
); |
|
|
|
//保存建筑数据 |
|
this.http |
|
.post("/api/CompanyData", CompanyData, { |
|
params: { |
|
companyId: this.params.companyId, |
|
}, |
|
}) |
|
.subscribe( |
|
(data) => { |
|
this.saveNum.push("1"); |
|
if (this.saveNum.length == 5) { |
|
this.maskLayerService.sendMessage(false); |
|
this.canvasData.isChange = false; |
|
let config = new MatSnackBarConfig(); |
|
config.verticalPosition = "top"; |
|
config.duration = 3000; |
|
this.snackBar.open("保存成功", "确定", config); |
|
this.tabbarService.sendMessage("changeScore"); |
|
} |
|
}, |
|
(err) => { |
|
this.maskLayerService.sendMessage(false); |
|
let config = new MatSnackBarConfig(); |
|
config.verticalPosition = "top"; |
|
config.duration = 3000; |
|
this.canvasData.isChange = true; |
|
this.snackBar.open("单位数据保存失败", "确定", config); |
|
} |
|
); |
|
|
|
//批量保存单位毗邻 |
|
let CompanyAdjoins = this.canvasData.getCompanyAdjoinInfo(); |
|
this.http |
|
.post("/api/CompanyAdjoins/Batch", CompanyAdjoins, { |
|
params: { |
|
companyId: this.params.companyId, |
|
}, |
|
}) |
|
.subscribe( |
|
(data) => { |
|
this.saveNum.push("1"); |
|
if (this.saveNum.length == 5) { |
|
this.maskLayerService.sendMessage(false); |
|
this.canvasData.isChange = false; |
|
let config = new MatSnackBarConfig(); |
|
config.verticalPosition = "top"; |
|
config.duration = 3000; |
|
this.snackBar.open("保存成功", "确定", config); |
|
this.tabbarService.sendMessage("changeScore"); |
|
} |
|
}, |
|
(err) => { |
|
this.maskLayerService.sendMessage(false); |
|
let config = new MatSnackBarConfig(); |
|
config.verticalPosition = "top"; |
|
config.duration = 3000; |
|
this.canvasData.isChange = true; |
|
if (err == "infos 有重复方向!") { |
|
this.snackBar.open( |
|
"单位毗邻同步失败,存在相同方向", |
|
"确定", |
|
config |
|
); |
|
} else { |
|
this.snackBar.open("单位毗邻同步失败", "确定", config); |
|
} |
|
} |
|
); |
|
|
|
//批量保存单位重点部位 |
|
let CompanyImportantLocations = |
|
this.canvasData.getCompanyImportantLocations(); |
|
this.http |
|
.post( |
|
"/api/CompanyImportantLocations/Batch", |
|
CompanyImportantLocations, |
|
{ |
|
params: { |
|
companyId: this.params.companyId, |
|
}, |
|
} |
|
) |
|
.subscribe( |
|
(data) => { |
|
this.saveNum.push("1"); |
|
if (this.saveNum.length == 5) { |
|
this.maskLayerService.sendMessage(false); |
|
this.canvasData.isChange = false; |
|
let config = new MatSnackBarConfig(); |
|
config.verticalPosition = "top"; |
|
config.duration = 3000; |
|
this.snackBar.open("保存成功", "确定", config); |
|
this.tabbarService.sendMessage("changeScore"); |
|
} |
|
}, |
|
(err) => { |
|
this.maskLayerService.sendMessage(false); |
|
let config = new MatSnackBarConfig(); |
|
config.verticalPosition = "top"; |
|
config.duration = 3000; |
|
this.canvasData.isChange = true; |
|
this.snackBar.open("单位重点部位同步失败", "确定", config); |
|
} |
|
); |
|
|
|
//批量保存单位消防设施素材 |
|
let CompanyFacilityAssets = |
|
this.canvasData.getAllCompanyFacilityAssetInfo(); |
|
this.http |
|
.post("/api/CompanyFacilityAssets/Batch", CompanyFacilityAssets, { |
|
params: { |
|
companyId: this.params.companyId, |
|
}, |
|
}) |
|
.subscribe( |
|
(data) => { |
|
this.saveNum.push("1"); |
|
if (this.saveNum.length == 5) { |
|
this.maskLayerService.sendMessage(false); |
|
this.maskLayerService.sendMessage(false); |
|
this.canvasData.isChange = false; |
|
let config = new MatSnackBarConfig(); |
|
config.verticalPosition = "top"; |
|
config.duration = 3000; |
|
this.snackBar.open("保存成功", "确定", config); |
|
this.tabbarService.sendMessage("changeScore"); |
|
} |
|
}, |
|
(err) => { |
|
this.maskLayerService.sendMessage(false); |
|
let config = new MatSnackBarConfig(); |
|
config.verticalPosition = "top"; |
|
config.duration = 3000; |
|
this.canvasData.isChange = true; |
|
this.snackBar.open( |
|
"单位消防设施素材同步失败", |
|
"确定", |
|
config |
|
); |
|
} |
|
); |
|
} else { |
|
//如果是建筑 |
|
//建筑平面图数据 |
|
this.http |
|
.post("/api/BuildingAreaData", SitePlanData, { |
|
params: { |
|
companyId: this.params.companyId, |
|
}, |
|
}) |
|
.subscribe( |
|
(data) => { |
|
this.saveNum.push("1"); |
|
if (this.saveNum.length == 5) { |
|
this.maskLayerService.sendMessage(false); |
|
this.maskLayerService.sendMessage(false); |
|
this.canvasData.isChange = false; |
|
let config = new MatSnackBarConfig(); |
|
config.verticalPosition = "top"; |
|
config.duration = 3000; |
|
this.snackBar.open("保存成功", "确定", config); |
|
this.tabbarService.sendMessage("changeScore"); |
|
} |
|
}, |
|
(err) => { |
|
this.maskLayerService.sendMessage(false); |
|
let config = new MatSnackBarConfig(); |
|
config.verticalPosition = "top"; |
|
config.duration = 3000; |
|
this.canvasData.isChange = true; |
|
this.snackBar.open("平面图数据保存失败", "确定", config); |
|
} |
|
); |
|
|
|
//建筑数据 |
|
this.http |
|
.post("/api/BuildingData", CompanyData, { |
|
params: { |
|
companyId: this.params.companyId, |
|
}, |
|
}) |
|
.subscribe( |
|
(data) => { |
|
this.saveNum.push("1"); |
|
if (this.saveNum.length == 5) { |
|
this.maskLayerService.sendMessage(false); |
|
this.canvasData.isChange = false; |
|
this.maskLayerService.sendMessage(false); |
|
let config = new MatSnackBarConfig(); |
|
config.verticalPosition = "top"; |
|
config.duration = 3000; |
|
this.snackBar.open("保存成功", "确定", config); |
|
this.tabbarService.sendMessage("changeScore"); |
|
} |
|
}, |
|
(err) => { |
|
this.maskLayerService.sendMessage(false); |
|
let config = new MatSnackBarConfig(); |
|
config.verticalPosition = "top"; |
|
config.duration = 3000; |
|
this.canvasData.isChange = true; |
|
this.snackBar.open("单位数据保存失败", "确定", config); |
|
} |
|
); |
|
|
|
//批量保存建筑毗邻 |
|
let buildingAdjoins = this.canvasData.getBuildingAdjoinInfo(); |
|
this.http |
|
.post( |
|
`/api/BuildingAdjoins/Batch?companyId=${this.params.companyId}&buildingId=${this.canvasData.selectStorey.buildingId}`, |
|
buildingAdjoins |
|
) |
|
.subscribe( |
|
(data) => { |
|
this.saveNum.push("1"); |
|
if (this.saveNum.length == 5) { |
|
this.maskLayerService.sendMessage(false); |
|
this.canvasData.isChange = false; |
|
let config = new MatSnackBarConfig(); |
|
config.verticalPosition = "top"; |
|
config.duration = 3000; |
|
this.snackBar.open("保存成功", "确定", config); |
|
this.tabbarService.sendMessage("changeScore"); |
|
} |
|
}, |
|
(err) => { |
|
this.maskLayerService.sendMessage(false); |
|
let config = new MatSnackBarConfig(); |
|
config.verticalPosition = "top"; |
|
config.duration = 3000; |
|
this.canvasData.isChange = true; |
|
if (err == "infos 有重复方向!") { |
|
this.snackBar.open( |
|
"建筑毗邻同步失败,存在相同方向", |
|
"确定", |
|
config |
|
); |
|
} else { |
|
this.snackBar.open("建筑毗邻同步失败", "确定", config); |
|
} |
|
} |
|
); |
|
|
|
//批量保存建筑重点部位 |
|
let buildingImportantLocations = |
|
this.canvasData.getBuildingImportantLocations(); |
|
this.http |
|
.post( |
|
`/api/BuildingImportantLocations/Batch?companyId=${this.params.companyId}&buildingId=${this.canvasData.selectStorey.buildingId}`, |
|
buildingImportantLocations |
|
) |
|
.subscribe( |
|
(data) => { |
|
this.saveNum.push("1"); |
|
if (this.saveNum.length == 5) { |
|
this.maskLayerService.sendMessage(false); |
|
this.canvasData.isChange = false; |
|
let config = new MatSnackBarConfig(); |
|
config.verticalPosition = "top"; |
|
config.duration = 3000; |
|
this.snackBar.open("保存成功", "确定", config); |
|
this.tabbarService.sendMessage("changeScore"); |
|
} |
|
}, |
|
(err) => { |
|
this.maskLayerService.sendMessage(false); |
|
let config = new MatSnackBarConfig(); |
|
config.verticalPosition = "top"; |
|
config.duration = 3000; |
|
this.canvasData.isChange = true; |
|
this.snackBar.open("建筑重点部位同步失败", "确定", config); |
|
} |
|
); |
|
|
|
//批量保存建筑消防设施素材 |
|
let buildingFacilityAssets = |
|
this.canvasData.getAllBuildingFacilityAssetInfo(); |
|
this.http |
|
.post( |
|
`/api/BuildingFacilityAssets/Batch?companyId=${this.params.companyId}&buildingId=${this.canvasData.selectStorey.buildingId}`, |
|
buildingFacilityAssets |
|
) |
|
.subscribe( |
|
(data) => { |
|
this.saveNum.push("1"); |
|
if (this.saveNum.length == 5) { |
|
this.maskLayerService.sendMessage(false); |
|
this.canvasData.isChange = false; |
|
let config = new MatSnackBarConfig(); |
|
config.verticalPosition = "top"; |
|
config.duration = 3000; |
|
this.snackBar.open("保存成功", "确定", config); |
|
this.tabbarService.sendMessage("changeScore"); |
|
} |
|
}, |
|
(err) => { |
|
this.maskLayerService.sendMessage(false); |
|
let config = new MatSnackBarConfig(); |
|
config.verticalPosition = "top"; |
|
config.duration = 3000; |
|
this.canvasData.isChange = true; |
|
this.snackBar.open( |
|
"建筑消防设施素材同步失败", |
|
"确定", |
|
config |
|
); |
|
} |
|
); |
|
} |
|
} |
|
} |
|
} else { |
|
//if |
|
const config = new MatSnackBarConfig(); |
|
config.verticalPosition = "top"; |
|
config.duration = 3000; |
|
this.snackBar.open("暂无楼层数据", "确定", config); |
|
} |
|
} |
|
|
|
//获得所有的建筑物 |
|
getAllBuildings(init: boolean = false) { |
|
this.http |
|
.get("/api/Buildings", { params: { companyId: this.params.companyId } }) |
|
.subscribe((data: any) => { |
|
this.allBuildings = data; |
|
if (init) { |
|
this.checkedBuildingIndex = 0; |
|
data && data.length |
|
? (this.beforeOneCheckedBuilding = data[0]) |
|
: (this.beforeOneCheckedBuilding = { |
|
id: null, |
|
buildingTypes: [{ id: null }], |
|
}); |
|
this.getBuildingSitePlan(this.beforeOneCheckedBuilding); |
|
} //if |
|
}); |
|
} |
|
|
|
//创建建筑 |
|
createBuilding() { |
|
let data = { |
|
allBuildings: this.allBuildings, |
|
companyId: this.params.companyId, |
|
}; |
|
let dialogRef = this.dialog.open(CreateBuildingBuilding, { data }); |
|
dialogRef.afterClosed().subscribe((data) => { |
|
if (data == "创建成功") { |
|
const config = new MatSnackBarConfig(); |
|
config.verticalPosition = "top"; |
|
config.duration = 3000; |
|
this.snackBar.open("创建成功", "确定", config); |
|
this.allBuildings.length |
|
? this.getAllBuildings() |
|
: this.getAllBuildings(true); |
|
} else if (data == "创建失败") { |
|
const config = new MatSnackBarConfig(); |
|
config.verticalPosition = "top"; |
|
config.duration = 3000; |
|
this.snackBar.open("创建失败", "确定", config); |
|
} |
|
}); |
|
} |
|
|
|
//选择建筑 |
|
checkedBuilding(item, index) { |
|
if (this.checkedBuildingIndex != index) { |
|
this.canvasData.selectPanelPoint = new DisposalNodeData(); |
|
if (this.canvasData.isChange) { |
|
//true 数据被改动 |
|
let isTrue = confirm("是否保存当前编辑数据"); |
|
if (isTrue) { |
|
//先保存数据 在切换 |
|
let isSuccess = this.saveSite(); //true的时候 先保存数据 |
|
if (isSuccess != false) { |
|
this.beforeOneCheckedBuilding = item; |
|
this.checkedBuildingIndex = index; |
|
if (index == -1) { |
|
//总平面图数据 |
|
this.getSitePlan(); |
|
} else { |
|
//建筑楼层/区域数据 |
|
this.getBuildingSitePlan(item); |
|
} |
|
} |
|
} else { |
|
this.beforeOneCheckedBuilding = item; |
|
this.checkedBuildingIndex = index; |
|
if (index == -1) { |
|
//总平面图数据 |
|
this.getSitePlan(); |
|
} else { |
|
//建筑楼层/区域数据 |
|
this.getBuildingSitePlan(item); |
|
} |
|
} |
|
} else { |
|
//flase 数据未被改动 |
|
this.beforeOneCheckedBuilding = item; |
|
this.checkedBuildingIndex = index; |
|
if (index == -1) { |
|
//总平面图数据 |
|
this.getSitePlan(); |
|
} else { |
|
//建筑楼层/区域数据 |
|
this.getBuildingSitePlan(item); |
|
} |
|
} //if |
|
} //if |
|
} |
|
|
|
//编辑建筑 |
|
editBuilding(e, item) { |
|
e.stopPropagation(); |
|
let dialogRef = this.dialog.open(EditBuildingBuilding, { |
|
data: { item: item }, |
|
}); |
|
dialogRef.afterClosed().subscribe((data) => { |
|
if (data == "修改成功") { |
|
const config = new MatSnackBarConfig(); |
|
config.verticalPosition = "top"; |
|
config.duration = 3000; |
|
this.snackBar.open("修改成功", "确定", config); |
|
this.getAllBuildings(); |
|
} else if (data == "修改失败") { |
|
const config = new MatSnackBarConfig(); |
|
config.verticalPosition = "top"; |
|
config.duration = 3000; |
|
this.snackBar.open("修改失败", "确定", config); |
|
} |
|
}); |
|
} |
|
|
|
//删除建筑 |
|
deleteBuilding(e, item) { |
|
e.stopPropagation(); |
|
if (confirm("是否删除该建筑") == true) { |
|
let isHave = this.canvasData.allDisposalNode.find((items) => { |
|
return items.buildingId === item.id; |
|
}); |
|
if (isHave == undefined) { |
|
this.http.delete(`/api/Buildings/${item.id}`).subscribe( |
|
(data) => { |
|
const config = new MatSnackBarConfig(); |
|
config.verticalPosition = "top"; |
|
config.duration = 3000; |
|
this.snackBar.open("删除成功", "确定", config); |
|
this.getAllBuildings(true); |
|
}, |
|
(err) => { |
|
const config = new MatSnackBarConfig(); |
|
config.verticalPosition = "top"; |
|
config.duration = 3000; |
|
this.snackBar.open("删除失败", "确定", config); |
|
this.getAllBuildings(true); |
|
} |
|
); |
|
} else { |
|
//建筑 含有数据节点时 |
|
const config = new MatSnackBarConfig(); |
|
config.verticalPosition = "top"; |
|
config.duration = 3000; |
|
this.snackBar.open("含有数据节点的建筑不允许删除", "确定", config); |
|
} |
|
} |
|
} |
|
|
|
storeyData; //将建筑素材和当前楼层素材合二为一 |
|
|
|
//处理 tree 数据结构 |
|
handleTreeData(storeyData) { |
|
this.hideAllTreenode = true; |
|
this.storeyData = storeyData; |
|
let data = this.allFireElements; //所有消防要素模板 |
|
let treeData = []; //tree型 处理完成后的数据 |
|
data.forEach((element) => { |
|
element.isTemplate = true; //添加模板标识 |
|
element.isLook = true; //添加是否可见标识 |
|
element.name != "其他" ? (element.children = []) : null; |
|
|
|
if (storeyData) { |
|
for (let key in storeyData.data) { |
|
storeyData.data[key].isLookPattern = true; |
|
if (element.id == storeyData.data[key].FireElementId) { |
|
storeyData.data[key].isTemplate = false; |
|
storeyData.data[key].isLook = true; |
|
|
|
element.isNewElement = true; //该节点children是否存在新添加的真实素材 标识 |
|
|
|
//定义查看模式下能看到的元素 |
|
element.isLookPattern = true; |
|
if (element.parentId) { |
|
data.forEach((i) => { |
|
if (i.id == element.parentId) { |
|
i.isLookPattern = true; |
|
} |
|
}); |
|
} |
|
// |
|
|
|
element.children.push(storeyData.data[key]); |
|
} |
|
} |
|
} |
|
data.forEach((item) => { |
|
if (item.parentId == element.id) { |
|
element.children.push(item); |
|
} |
|
}); |
|
}); |
|
data.forEach((element) => { |
|
if (!element.parentId) { |
|
treeData.push(element); |
|
} |
|
}); |
|
this.dataSource.data = treeData; |
|
this.treeControl.expandAll(); |
|
} |
|
|
|
//点击树节点 |
|
clickTreeNode(node) { |
|
if (this.canvasData.originalcompanyBuildingData.data[node.id]) { |
|
this.setAssetsProperty( |
|
this.canvasData.originalcompanyBuildingData.data[node.id] |
|
); |
|
} else if (this.canvasData.originaleveryStoreyData.data[node.id]) { |
|
this.setAssetsProperty( |
|
this.canvasData.originaleveryStoreyData.data[node.id] |
|
); |
|
} |
|
|
|
//canvas上的素材高亮 |
|
let iconHighLightArr: any = []; |
|
if (node.isTemplate) { |
|
//如果是模板,则开始向下找 |
|
node.children.forEach((item) => { |
|
if (item.isTemplate) { |
|
//如果子节点依旧是模板,则继续开始向下找 |
|
item.children.forEach((i) => { |
|
iconHighLightArr.push(i.Id); |
|
}); |
|
} else { |
|
iconHighLightArr.push(item.Id); |
|
} |
|
}); |
|
} else { |
|
iconHighLightArr.push(node.id); |
|
} |
|
this.canvas.setHighlight(iconHighLightArr); |
|
} |
|
|
|
hideAllTreenode: boolean = true; //全部显示/隐藏tree节点 |
|
toggoleAllTreenode() { |
|
this.hideAllTreenode = !this.hideAllTreenode; |
|
let list = []; |
|
this.allFireElements.forEach((element) => { |
|
if (element.isTemplate) { |
|
this.hideAllTreenode |
|
? (element.isLook = false) |
|
: (element.isLook = true); |
|
} |
|
}); |
|
this.treeControl.dataNodes.forEach((item) => { |
|
this.hideAllTreenode ? (item.isLook = false) : (item.isLook = true); |
|
item.level === 0 ? list.push(item) : null; |
|
}); |
|
list.forEach((item) => { |
|
this.clickLookItem(item); |
|
}); |
|
} |
|
|
|
//点击数节点的显示隐藏icon |
|
clickLookItem(node) { |
|
//修改真实素材islook属性 |
|
for (let key in this.storeyData.data) { |
|
if (key == node.id) { |
|
this.storeyData.data[key].isLook = !this.storeyData.data[key].isLook; |
|
} |
|
} |
|
|
|
//所有消防要素模板变化islook值 |
|
console.log(node); |
|
if (node.isTemplate) { |
|
this.allFireElements.forEach((item) => { |
|
if (item.id == node.id) { |
|
item.isLook = !item.isLook; |
|
} |
|
if (item.name == "其他" && node.name == "其他") { |
|
item.isLook = !item.isLook; |
|
} |
|
}); |
|
} |
|
|
|
//子节点跟随父节点的islook变化 |
|
if (node.children && node.children.length != 0) { |
|
node.children.forEach((item) => { |
|
item.isLook = !node.isLook; |
|
if (item.children && item.children.length != 0) { |
|
item.children.forEach((i) => { |
|
i.isLook = !node.isLook; |
|
}); |
|
} |
|
}); |
|
} |
|
|
|
const nodes = this.treeControl.dataNodes; |
|
const expandNodes = []; |
|
nodes.forEach((item) => { |
|
if (item.expandable && this.treeControl.isExpanded(item)) { |
|
expandNodes.push(item.id); |
|
} |
|
}); |
|
|
|
this.dataSource.data = [...this.dataSource.data]; |
|
|
|
let newNodes = this.treeControl.dataNodes; |
|
newNodes = newNodes.filter((n) => { |
|
return expandNodes.indexOf(n.id) >= 0; |
|
}); |
|
newNodes.forEach((item) => { |
|
this.treeControl.expand(item); |
|
}); |
|
|
|
//canvas上的素材显隐 |
|
let iconVisibleArr: any = []; |
|
if (node.isTemplate) { |
|
//如果是模板,则开始向下找 |
|
node.children.forEach((item) => { |
|
if (item.isTemplate) { |
|
//如果子节点依旧是模板,则继续开始向下找 |
|
item.children.forEach((i) => { |
|
iconVisibleArr.push(i.Id); |
|
}); |
|
} else { |
|
iconVisibleArr.push(item.Id); |
|
} |
|
}); |
|
} else { |
|
iconVisibleArr.push(node.id); |
|
} |
|
this.canvas.setIconVisible(iconVisibleArr, !node.isLook); |
|
} |
|
|
|
//计算 可视区域内宽度, 是否缩放背景图 |
|
backGroundScale() { |
|
// let that = this |
|
// let dad = this.element.nativeElement.querySelector('.functionalDomainContent').clientWidth |
|
// let dadHeight = this.element.nativeElement.querySelector('.functionalDomainContent').clientHeight |
|
// let left = this.element.nativeElement.querySelector('.functionalDomainLeft').clientWidth |
|
// let right = this.element.nativeElement.querySelector('.functionalDomainRight').clientWidth |
|
// let imgWidth = dad - left - right//可视区域内 宽度 |
|
// let img = new Image() |
|
// img.src = this.selectingSitePlan.imageUrl; |
|
// img.onload = function(){ |
|
// if (img.height > dadHeight && img.width > imgWidth) { |
|
// let width = imgWidth/img.width |
|
// let height = dadHeight/img.height |
|
// that.canvas.setBackgroundScale((width>height? height : width)-0.005) |
|
// return |
|
// } else if (img.height > dadHeight) { |
|
// that.canvas.setBackgroundScale((dadHeight/img.height)-0.005) |
|
// return |
|
// } else if (img.width > imgWidth) { |
|
// that.canvas.setBackgroundScale((imgWidth/img.width)-0.005) |
|
// return |
|
// } |
|
// }; |
|
} |
|
|
|
//封装 刷新 tree 数据 |
|
async renovateTreeData(isRefresh: boolean = true) { |
|
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); |
|
this.canvas.setLegendVisible(this.isShowLegend); //图例显隐 |
|
if (this.router.url.indexOf("keyUnit/viewunitinfo") != -1) { |
|
//查看模式 |
|
console.log("查看模式"); |
|
this.canvas.allowEdit = false; |
|
} |
|
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 || {}) |
|
); //当前 楼层 数据 |
|
|
|
// 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 && storeyData.data[key].Id != "图例") { |
|
this.allFireElements[this.allFireElements.length - 1].children.push( |
|
storeyData.data[key] |
|
); |
|
} |
|
} |
|
this.handleTreeData(storeyData); //处理tree数据结构 |
|
} |
|
|
|
//陈鹏飞↓↓↓ |
|
//陈鹏飞↓↓↓ |
|
//陈鹏飞↓↓↓ |
|
params = { companyId: sessionStorage.getItem("companyId") }; |
|
allFireElements: any = []; //当前 单位/建筑 下的消防要素 |
|
|
|
isShowAttribute: boolean = true; //属性栏 是否显示 默认数据 |
|
isShowProperty: boolean = false; //属性栏 是否有东西 |
|
|
|
toggleExpandPanel: boolean = false; //左侧可展开面板展开或关闭 |
|
toggleExpandPanelRight: boolean = false; //右侧可展开面板展开或关闭 |
|
togglePlane: boolean = true; //可展开面板平面图 显隐 |
|
toggleMaterialBank: boolean = false; //可展开面板素材库 显隐 |
|
toggleHandlePlans: boolean = true; //可展开面板处置预案 显隐 |
|
//可展开面板展开或关闭 |
|
toggle() { |
|
this.toggleExpandPanel = !this.toggleExpandPanel; |
|
} |
|
//可展开面板展开或关闭 |
|
toggle2() { |
|
this.toggleExpandPanelRight = !this.toggleExpandPanelRight; |
|
} |
|
//可展开面板 平面图 展开或关闭 |
|
togglePlanarGraph() { |
|
this.togglePlane = !this.togglePlane; |
|
} |
|
//可展开面板 素材库 展开或关闭 |
|
toggleMaterial() { |
|
this.toggleMaterialBank = !this.toggleMaterialBank; |
|
} |
|
//可展开面板 处置预案 展开或关闭 |
|
toggleHandlePlan() { |
|
this.toggleHandlePlans = !this.toggleHandlePlans; |
|
} |
|
|
|
sitePlanData: any = []; //总平面图 楼层/区域 数据 |
|
selectingSitePlan: any; //选中的 平面图 楼层/区域 |
|
selectSitePlanIndex: number; //选中的 平面图 楼层/区域 index |
|
|
|
//获取总平面图 |
|
getSitePlan() { |
|
let fireData = this.getFireElements( |
|
sessionStorage.getItem("buildingTypeId") |
|
); //获取单位下 消防要素 |
|
let planData = this.getSitePlanCompanyData(); //获取 单位 数据 |
|
this.http |
|
.get("/api/SitePlans", { params: this.params }) |
|
.subscribe((data) => { |
|
this.sitePlanData = data; |
|
this.selectingSitePlan = this.sitePlanData[0] || {}; |
|
this.canvasData.selectStorey = this.sitePlanData[0] || {}; //服务中 存一份数据 |
|
this.selectSitePlanIndex = 0; |
|
|
|
Promise.all([fireData, planData]).then((res) => { |
|
this.getSitePlanStorey(this.selectingSitePlan); //获取 平面图 楼层数据 |
|
}); |
|
}); |
|
} |
|
|
|
//获取建筑 楼层/区域 |
|
getBuildingSitePlan(item) { |
|
let params = { buildingId: item.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; |
|
this.selectingSitePlan = this.sitePlanData[0] || {}; |
|
this.canvasData.selectStorey = this.sitePlanData[0] || {}; //服务中 存一份数据 |
|
this.selectSitePlanIndex = 0; |
|
|
|
Promise.all([fireData, planData]).then((res) => { |
|
this.getBuildingStorey(this.selectingSitePlan); //获取 建筑 楼层数据 |
|
}); |
|
}); |
|
} |
|
|
|
//根据单位类型获得所有的消防要素 |
|
getFireElements(e) { |
|
let params = { ids: e }; |
|
return new Promise((resolve, reject) => { |
|
this.http |
|
.get("/api/Companies/FireElements", { params }) |
|
.subscribe((data: any) => { |
|
this.allFireElements = data; //所有消防要素 |
|
let other = { |
|
children: [], |
|
computed: true, |
|
id: "", |
|
name: "其他", |
|
order: 999, |
|
parentId: null, |
|
tag: "INPUT", |
|
isLookPattern: true, |
|
}; |
|
this.allFireElements.push(other); |
|
resolve("success"); |
|
}); |
|
}); |
|
} |
|
|
|
//获取 单位 数据 |
|
getSitePlanCompanyData() { |
|
return new Promise((resolve, reject) => { |
|
this.http |
|
.get("/api/CompanyData", { params: this.params }) |
|
.subscribe((data: any) => { |
|
this.canvasData.originalcompanyBuildingData = data || {}; // 单位原数据 |
|
this.canvasData.originalcompanyBuildingData.data |
|
? (this.canvasData.originalcompanyBuildingData.data = JSON.parse( |
|
this.canvasData.originalcompanyBuildingData.data |
|
)) |
|
: (this.canvasData.originalcompanyBuildingData.data = {}); |
|
this.canvasData.originalcompanyBuildingData.version = "2.0"; |
|
this.canvasData.originalcompanyBuildingData.companyId |
|
? null |
|
: (this.canvasData.originalcompanyBuildingData.companyId = |
|
sessionStorage.getItem("companyId")); |
|
resolve("success"); |
|
}); |
|
}); |
|
} |
|
|
|
//获取 平面图 楼层数据 |
|
getSitePlanStorey(e) { |
|
let params = { sitePlanId: e.id }; |
|
this.http.get(`/api/SitePlanData`, { params }).subscribe((data: any) => { |
|
this.canvasData.originaleveryStoreyData = data || {}; // 楼层原数据 |
|
this.canvasData.originaleveryStoreyData.data |
|
? (this.canvasData.originaleveryStoreyData.data = JSON.parse( |
|
this.canvasData.originaleveryStoreyData.data |
|
)) |
|
: (this.canvasData.originaleveryStoreyData.data = {}); |
|
this.canvasData.originaleveryStoreyData.version = "2.0"; |
|
this.canvasData.originaleveryStoreyData.sitePlanId |
|
? null |
|
: (this.canvasData.originaleveryStoreyData.sitePlanId = e.id || null); |
|
this.renovateTreeData(); |
|
}); |
|
} |
|
|
|
//获取 建筑 数据 |
|
getBuildingData(e) { |
|
return new Promise((resolve, reject) => { |
|
this.http |
|
.get(`/api/BuildingData`, { params: e }) |
|
.subscribe((data: any) => { |
|
this.canvasData.originalcompanyBuildingData = data || {}; // 建筑原数据 |
|
this.canvasData.originalcompanyBuildingData.data |
|
? (this.canvasData.originalcompanyBuildingData.data = JSON.parse( |
|
this.canvasData.originalcompanyBuildingData.data |
|
)) |
|
: (this.canvasData.originalcompanyBuildingData.data = {}); |
|
this.canvasData.originalcompanyBuildingData.version = "2.0"; |
|
this.canvasData.originalcompanyBuildingData.buildingId |
|
? null |
|
: (this.canvasData.originalcompanyBuildingData.buildingId = |
|
e.buildingId); |
|
resolve("success"); |
|
}); |
|
}); |
|
} |
|
|
|
//获取 建筑 楼层数据 |
|
getBuildingStorey(e) { |
|
let params = { buildingAreaId: e.id }; |
|
this.http |
|
.get(`/api/BuildingAreaData`, { params }) |
|
.subscribe((data: any) => { |
|
console.log("建筑楼层数据", data); |
|
this.canvasData.originaleveryStoreyData = data || {}; // 楼层原数据 |
|
this.canvasData.originaleveryStoreyData.data |
|
? (this.canvasData.originaleveryStoreyData.data = JSON.parse( |
|
this.canvasData.originaleveryStoreyData.data |
|
)) |
|
: (this.canvasData.originaleveryStoreyData.data = {}); |
|
this.canvasData.originaleveryStoreyData.version = "2.0"; |
|
this.canvasData.originaleveryStoreyData.buildingAreaId |
|
? null |
|
: (this.canvasData.originaleveryStoreyData.buildingAreaId = |
|
e.id || null); |
|
this.renovateTreeData(); |
|
}); |
|
} |
|
|
|
//点击选中 平面图 楼层/区域 时 |
|
selectSitePlan(item, index) { |
|
if (this.selectSitePlanIndex != index) { |
|
this.canvasData.selectPanelPoint = new DisposalNodeData(); |
|
if (this.canvasData.isChange) { |
|
//true 数据被改动 |
|
let isTrue = confirm("是否保存当前编辑数据"); |
|
if (isTrue) { |
|
//先保存数据 在切换 |
|
let isSuccess = this.saveSite(); //true的时候 先保存数据 |
|
if (isSuccess != false) { |
|
this.selectingSitePlan = item; |
|
this.selectSitePlanIndex = index; |
|
this.canvasData.selectStorey = item; //服务中 存一份数据 |
|
if (this.checkedBuildingIndex == -1) { |
|
//总平面图时 |
|
this.getSitePlanStorey(item); //获取 平面图 楼层数据 |
|
} else { |
|
//楼层/区域时 |
|
this.getBuildingStorey(item); //获取 建筑 楼层数据 |
|
} |
|
} |
|
} else { |
|
//不保存数据 直接切换 |
|
this.selectingSitePlan = item; |
|
this.selectSitePlanIndex = index; |
|
this.canvasData.selectStorey = item; //服务中 存一份数据 |
|
if (this.checkedBuildingIndex == -1) { |
|
//总平面图时 |
|
this.getSitePlanStorey(item); //获取 平面图 楼层数据 |
|
this.getSitePlanCompanyData(); |
|
} else { |
|
//楼层/区域时 |
|
this.getBuildingStorey(item); //获取 建筑 楼层数据 |
|
let params = { buildingId: this.beforeOneCheckedBuilding.id }; |
|
this.getBuildingData(params); |
|
} |
|
} |
|
} else { |
|
//false 数据没被改动 |
|
this.selectingSitePlan = item; |
|
this.selectSitePlanIndex = index; |
|
this.canvasData.selectStorey = item; //服务中 存一份数据 |
|
if (this.checkedBuildingIndex == -1) { |
|
//总平面图时 |
|
this.getSitePlanStorey(item); //获取 平面图 楼层数据 |
|
} else { |
|
//楼层/区域时 |
|
this.getBuildingStorey(item); //获取 建筑 楼层数据 |
|
} |
|
} //if |
|
} |
|
|
|
if (this.element.nativeElement.querySelector("#rightOperate")) { |
|
setTimeout(() => { |
|
this.element.nativeElement.querySelector( |
|
"#rightOperate" |
|
).style.position = "fixed"; |
|
this.element.nativeElement.querySelector("#rightOperate").style.left = |
|
document |
|
.getElementsByClassName("sitePlanContentBox")[0] |
|
.children[this.selectSitePlanIndex].getBoundingClientRect().left + |
|
document.getElementById("leftDiv").offsetWidth + |
|
"px"; |
|
this.element.nativeElement.querySelector("#rightOperate").style.top = |
|
document |
|
.getElementsByClassName("sitePlanContentBox")[0] |
|
.children[this.selectSitePlanIndex].getBoundingClientRect().top - |
|
32 + |
|
"px"; |
|
}, 0); |
|
} |
|
} |
|
hoverSitePlan(item, key) { |
|
if (key == this.selectSitePlanIndex) { |
|
if (this.element.nativeElement.querySelector("#rightOperate")) { |
|
setTimeout(() => { |
|
this.element.nativeElement.querySelector( |
|
"#rightOperate" |
|
).style.position = "fixed"; |
|
this.element.nativeElement.querySelector("#rightOperate").style.left = |
|
document |
|
.getElementsByClassName("sitePlanContentBox")[0] |
|
.children[this.selectSitePlanIndex].getBoundingClientRect().left + |
|
document.getElementById("leftDiv").offsetWidth + |
|
"px"; |
|
this.element.nativeElement.querySelector("#rightOperate").style.top = |
|
document |
|
.getElementsByClassName("sitePlanContentBox")[0] |
|
.children[this.selectSitePlanIndex].getBoundingClientRect().top - |
|
32 + |
|
"px"; |
|
}, 0); |
|
} |
|
} |
|
} |
|
|
|
//新增平面图 楼层/区域 |
|
foundPanel(e) { |
|
e.stopPropagation(); |
|
if (this.beforeOneCheckedBuilding.id) { |
|
let data = { |
|
isBuilding: this.checkedBuildingIndex == -1 ? false : true, |
|
Panel: this.beforeOneCheckedBuilding, |
|
order: this.sitePlanData.length |
|
? this.sitePlanData[this.sitePlanData.length - 1].order + 1 |
|
: 0, |
|
}; |
|
let dialogRef = this.dialog.open(leftFunctionalDomainBuildingComponent, { |
|
data, |
|
}); |
|
dialogRef.afterClosed().subscribe((data) => { |
|
if (data == "总平面图") { |
|
this.renovateSitePlan(); |
|
} else if (data == "建筑") { |
|
this.renovateBuilding(); |
|
} |
|
}); |
|
} else { |
|
const config = new MatSnackBarConfig(); |
|
config.verticalPosition = "top"; |
|
config.duration = 3000; |
|
this.snackBar.open("请选择建筑", "确定", config); |
|
} |
|
} |
|
|
|
//编辑平面图 楼层/区域 |
|
editPlaneData(e) { |
|
let data = { |
|
isBuilding: this.checkedBuildingIndex == -1 ? false : true, |
|
Panel: this.beforeOneCheckedBuilding, |
|
buildingData: e, |
|
}; |
|
let dialogRef = this.dialog.open(editPlaneFigureBuildingComponent, { |
|
disableClose: true, |
|
hasBackdrop: false, |
|
position: { left: "150px", top: "200px" }, |
|
data, |
|
}); |
|
dialogRef.keydownEvents().subscribe((data) => { |
|
if (data.key === "Enter") { |
|
this.canvas.refreshBackgroundImage(); |
|
} |
|
}); |
|
dialogRef.afterClosed().subscribe((data) => { |
|
if (data == "总平面图") { |
|
let isSuccess = this.renovateSitePlan(); |
|
isSuccess.then((res) => { |
|
this.canvas.refreshBackgroundImage(); |
|
}); |
|
} else if (data == "建筑") { |
|
let isSuccess = this.renovateBuilding(); |
|
isSuccess.then((res) => { |
|
this.canvas.refreshBackgroundImage(); |
|
}); |
|
} else if (data == "更新背景图") { |
|
this.canvas.refreshBackgroundImage(); |
|
} |
|
}); |
|
} |
|
|
|
//平面图 楼层/区域 上移 |
|
moveUp(item, index) { |
|
if (index != 0) { |
|
let replaceIndex = this.sitePlanData[index].order; |
|
this.sitePlanData[index].order = this.sitePlanData[index - 1].order; |
|
this.sitePlanData[index - 1].order = replaceIndex; |
|
if (this.checkedBuildingIndex == -1) { |
|
//总平面图 |
|
this.http |
|
.put( |
|
`/api/SitePlans/${this.sitePlanData[index - 1].id}`, |
|
this.sitePlanData[index - 1] |
|
) |
|
.subscribe((data) => { |
|
this.http |
|
.put( |
|
`/api/SitePlans/${this.sitePlanData[index].id}`, |
|
this.sitePlanData[index] |
|
) |
|
.subscribe((data) => { |
|
this.selectSitePlanIndex = this.selectSitePlanIndex - 1; |
|
this.renovateSitePlan(); |
|
}); |
|
}); |
|
} else { |
|
//楼层/区域 |
|
this.http |
|
.put( |
|
`/api/BuildingAreas/${this.sitePlanData[index - 1].id}`, |
|
this.sitePlanData[index - 1], |
|
{ params: this.params } |
|
) |
|
.subscribe((data) => { |
|
this.http |
|
.put( |
|
`/api/BuildingAreas/${this.sitePlanData[index].id}`, |
|
this.sitePlanData[index], |
|
{ params: this.params } |
|
) |
|
.subscribe((data) => { |
|
this.selectSitePlanIndex = this.selectSitePlanIndex - 1; |
|
this.renovateBuilding(); |
|
}); |
|
}); |
|
} |
|
} //if index |
|
} |
|
|
|
//平面图 楼层/区域 下移 |
|
moveDown(item, index) { |
|
if (index != this.sitePlanData.length - 1) { |
|
let replaceIndex = this.sitePlanData[index].order; |
|
this.sitePlanData[index].order = this.sitePlanData[index + 1].order; |
|
this.sitePlanData[index + 1].order = replaceIndex; |
|
if (this.checkedBuildingIndex == -1) { |
|
//总平面图 |
|
this.http |
|
.put( |
|
`/api/SitePlans/${this.sitePlanData[index + 1].id}`, |
|
this.sitePlanData[index + 1] |
|
) |
|
.subscribe((data) => { |
|
this.http |
|
.put( |
|
`/api/SitePlans/${this.sitePlanData[index].id}`, |
|
this.sitePlanData[index] |
|
) |
|
.subscribe((data) => { |
|
this.selectSitePlanIndex = this.selectSitePlanIndex + 1; |
|
this.renovateSitePlan(); |
|
}); |
|
}); |
|
} else { |
|
//楼层/区域 |
|
this.http |
|
.put( |
|
`/api/BuildingAreas/${this.sitePlanData[index + 1].id}`, |
|
this.sitePlanData[index + 1], |
|
{ params: this.params } |
|
) |
|
.subscribe((data) => { |
|
this.http |
|
.put( |
|
`/api/BuildingAreas/${this.sitePlanData[index].id}`, |
|
this.sitePlanData[index], |
|
{ params: this.params } |
|
) |
|
.subscribe((data) => { |
|
this.selectSitePlanIndex = this.selectSitePlanIndex + 1; |
|
this.renovateBuilding(); |
|
}); |
|
}); |
|
} |
|
} //if index |
|
} |
|
|
|
//旋转底图 |
|
revolveImg(item) { |
|
item.imageAngle == 270 |
|
? (item.imageAngle = 0) |
|
: (item.imageAngle = item.imageAngle + 90); |
|
if (this.checkedBuildingIndex == -1) { |
|
//总平面图 |
|
this.http.put(`/api/SitePlans/${item.id}`, item).subscribe((data) => { |
|
let isSuccess = this.renovateSitePlan(); |
|
isSuccess.then((res) => { |
|
this.canvas.refreshBackgroundImage(item.imageUrl, item.imageAngle); |
|
}); |
|
}); |
|
} else { |
|
//楼层/区域 |
|
this.http |
|
.put(`/api/BuildingAreas/${item.id}`, item, { params: this.params }) |
|
.subscribe((data) => { |
|
let isSuccess = this.renovateBuilding(); |
|
isSuccess.then((res) => { |
|
this.canvas.refreshBackgroundImage(item.imageUrl, item.imageAngle); |
|
}); |
|
}); |
|
} |
|
} |
|
|
|
//删除 平面图 楼层/区域 |
|
deletePlaneData(item) { |
|
const isDelete = confirm("您确定要删除吗"); |
|
if (isDelete) { |
|
//打开遮罩层 |
|
this.maskLayerService.sendMessage(true); |
|
if (this.checkedBuildingIndex == -1) { |
|
//总平面图 |
|
let isHave = this.canvasData.allDisposalNode.find((items) => { |
|
return items.sitePlanId === item.id; |
|
}); |
|
if (isHave == undefined) { |
|
this.http.delete(`/api/SitePlans/${item.id}`).subscribe((data) => { |
|
this.deleteShareData(item, -1); |
|
}); |
|
} else { |
|
const config = new MatSnackBarConfig(); |
|
config.verticalPosition = "top"; |
|
config.duration = 3000; |
|
this.snackBar.open("含有数据节点的楼层不允许删除", "确定", config); |
|
} |
|
} else { |
|
//楼层/区域 |
|
let isHave = this.canvasData.allDisposalNode.find((items) => { |
|
return items.buildingAreaId === item.id; |
|
}); |
|
if (isHave == undefined) { |
|
this.http |
|
.delete(`/api/BuildingAreas/${item.id}`) |
|
.subscribe((data) => { |
|
this.deleteShareData(item, 1); |
|
}); |
|
} else { |
|
const config = new MatSnackBarConfig(); |
|
config.verticalPosition = "top"; |
|
config.duration = 3000; |
|
this.snackBar.open("含有数据节点的楼层不允许删除", "确定", config); |
|
} |
|
} |
|
} |
|
} |
|
|
|
//删除当前 单位/建筑的 共享数据中 已删除data |
|
deleteShareData(e, isCompany) { |
|
this.sitePlanData.forEach((element, index) => { |
|
if (element.id === e.id) { |
|
this.sitePlanData.splice(index, 1); |
|
return; |
|
} |
|
}); |
|
let data = this.canvasData.originalcompanyBuildingData; |
|
for (let key in data.data) { |
|
if (data.data[key].FloorId === e.id) { |
|
//处理 单位/建筑 数据是否归于当前楼层下 |
|
delete data.data[key]; |
|
} |
|
} |
|
let newData = JSON.parse( |
|
JSON.stringify(this.canvasData.originalcompanyBuildingData) |
|
); |
|
newData.data = JSON.stringify(newData.data); // 转换JSON 数据格式 |
|
this.selectingSitePlan = this.sitePlanData[0] || {}; |
|
this.canvasData.selectStorey = this.sitePlanData[0] || {}; //服务中 存一份数据 |
|
this.selectSitePlanIndex = 0; |
|
this.canvasData.isChange = false; |
|
if (isCompany === -1) { |
|
this.http.post("/api/CompanyData", newData).subscribe((data) => {}); |
|
this.getSitePlanStorey(this.selectingSitePlan); //获取 平面图 楼层数据 |
|
this.maskLayerService.sendMessage(false); |
|
} else { |
|
this.http |
|
.post("/api/BuildingData", newData, { params: this.params }) |
|
.subscribe((data) => {}); |
|
this.getBuildingStorey(this.selectingSitePlan); //获取 建筑 楼层数据 |
|
this.maskLayerService.sendMessage(false); |
|
} |
|
} |
|
|
|
//复制图层 平面图 楼层/区域 |
|
duplicateLayer(item) { |
|
this.maskLayerService.sendMessage(true); |
|
let paramsData = JSON.parse( |
|
JSON.stringify(this.canvasData.originaleveryStoreyData.data || {}) |
|
); |
|
Object.keys(paramsData).forEach((key) => { |
|
if (key != "图例") { |
|
let ID = ObjectID.default.generate(); |
|
paramsData[key].Id = ID; |
|
paramsData[ID] = paramsData[key]; |
|
delete paramsData[key]; |
|
} |
|
}); //图标Id重新赋值 |
|
if (this.checkedBuildingIndex == -1) { |
|
//总平面图 |
|
item.id = ""; |
|
item.modifiedTime = new Date(); |
|
item.name = item.name + "(副本)"; |
|
item.order = this.sitePlanData[this.sitePlanData.length - 1].order + 1; |
|
this.http.post("/api/SitePlans", item).subscribe((data: any) => { |
|
for (const key in paramsData) { |
|
if (Object.prototype.hasOwnProperty.call(paramsData, key)) { |
|
const element = paramsData[key]; |
|
element.FloorId = data.id; |
|
} |
|
} |
|
let newData = { |
|
version: "2.0", |
|
id: "", |
|
data: JSON.stringify(paramsData) || null, |
|
sitePlanId: data.id, |
|
}; |
|
this.http |
|
.post("/api/SitePlanData", newData, { params: this.params }) |
|
.subscribe((data) => { |
|
this.canvasData.originaleveryStoreyData = data || {}; // 楼层原数据 |
|
this.canvasData.originaleveryStoreyData.data |
|
? (this.canvasData.originaleveryStoreyData.data = JSON.parse( |
|
this.canvasData.originaleveryStoreyData.data |
|
)) |
|
: (this.canvasData.originaleveryStoreyData.data = {}); |
|
Object.keys(this.canvasData.originaleveryStoreyData.data).forEach( |
|
(key) => { |
|
this.canvasData.originalcompanyBuildingData.data[key] = |
|
this.canvasData.originaleveryStoreyData.data[key]; |
|
} |
|
); |
|
let list = []; |
|
//保存建筑数据 |
|
let CompanyData = JSON.parse( |
|
JSON.stringify(this.canvasData.originalcompanyBuildingData) |
|
); |
|
CompanyData.data = JSON.stringify(CompanyData.data); |
|
this.http |
|
.post("/api/CompanyData", CompanyData, { |
|
params: { companyId: this.params.companyId }, |
|
}) |
|
.subscribe((data) => { |
|
list.push(1); |
|
if (list.length === 4) { |
|
this.updateCurrentFloor(); |
|
} |
|
}); |
|
//批量保存单位毗邻 |
|
let CompanyAdjoins = this.canvasData.getCompanyAdjoinInfo(); |
|
this.http |
|
.post("/api/CompanyAdjoins/Batch", CompanyAdjoins, { |
|
params: { companyId: this.params.companyId }, |
|
}) |
|
.subscribe( |
|
(data) => { |
|
list.push(1); |
|
if (list.length === 4) { |
|
this.updateCurrentFloor(); |
|
} |
|
}, |
|
(err) => { |
|
let config = new MatSnackBarConfig(); |
|
config.verticalPosition = "top"; |
|
config.duration = 3000; |
|
if (err == "infos 有重复方向!") { |
|
this.snackBar.open( |
|
"单位毗邻同步失败,存在相同方向", |
|
"确定", |
|
config |
|
); |
|
} else { |
|
this.snackBar.open("单位毗邻同步失败", "确定", config); |
|
} |
|
} |
|
); |
|
//批量保存单位重点部位 |
|
let CompanyImportantLocations = |
|
this.canvasData.getCompanyImportantLocations(); |
|
this.http |
|
.post( |
|
"/api/CompanyImportantLocations/Batch", |
|
CompanyImportantLocations, |
|
{ params: { companyId: this.params.companyId } } |
|
) |
|
.subscribe((data) => { |
|
list.push(1); |
|
if (list.length === 4) { |
|
this.updateCurrentFloor(); |
|
} |
|
}); |
|
//批量保存单位消防设施素材 |
|
let CompanyFacilityAssets = |
|
this.canvasData.getAllCompanyFacilityAssetInfo(); |
|
this.http |
|
.post("/api/CompanyFacilityAssets/Batch", CompanyFacilityAssets, { |
|
params: { companyId: this.params.companyId }, |
|
}) |
|
.subscribe((data) => { |
|
list.push(1); |
|
if (list.length === 4) { |
|
this.updateCurrentFloor(); |
|
} |
|
}); |
|
}); |
|
}); |
|
} else { |
|
//楼层/区域 |
|
item.id = ""; |
|
item.modifiedTime = new Date(); |
|
item.name = item.name + "(副本)"; |
|
item.order = this.sitePlanData[this.sitePlanData.length - 1].order + 1; |
|
this.http |
|
.post("/api/BuildingAreas", item, { params: this.params }) |
|
.subscribe((data: any) => { |
|
// console.log('复制出的新楼层',data.id) |
|
// console.log('复制的数据',paramsData) |
|
for (const key in paramsData) { |
|
if (Object.prototype.hasOwnProperty.call(paramsData, key)) { |
|
const element = paramsData[key]; |
|
element.FloorId = data.id; |
|
} |
|
} |
|
let newData = { |
|
version: "2.0", |
|
id: "", |
|
data: JSON.stringify(paramsData) || null, |
|
buildingAreaId: data.id, |
|
}; |
|
this.http |
|
.post("/api/BuildingAreaData", newData, { params: this.params }) |
|
.subscribe((data) => { |
|
this.canvasData.originaleveryStoreyData = data || {}; // 楼层原数据 |
|
this.canvasData.originaleveryStoreyData.data |
|
? (this.canvasData.originaleveryStoreyData.data = JSON.parse( |
|
this.canvasData.originaleveryStoreyData.data |
|
)) |
|
: (this.canvasData.originaleveryStoreyData.data = {}); |
|
Object.keys(this.canvasData.originaleveryStoreyData.data).forEach( |
|
(key) => { |
|
this.canvasData.originalcompanyBuildingData.data[key] = |
|
this.canvasData.originaleveryStoreyData.data[key]; |
|
} |
|
); |
|
let list = []; |
|
//建筑数据 |
|
let CompanyData = JSON.parse( |
|
JSON.stringify(this.canvasData.originalcompanyBuildingData) |
|
); |
|
CompanyData.data = JSON.stringify(CompanyData.data); |
|
this.http |
|
.post("/api/BuildingData", CompanyData, { |
|
params: { companyId: this.params.companyId }, |
|
}) |
|
.subscribe((data) => { |
|
list.push(1); |
|
if (list.length === 4) { |
|
this.updateCurrentFloor(); |
|
} |
|
}); |
|
//批量保存建筑毗邻 |
|
let buildingAdjoins = this.canvasData.getBuildingAdjoinInfo(); |
|
this.http |
|
.post( |
|
`/api/BuildingAdjoins/Batch?companyId=${this.params.companyId}&buildingId=${this.canvasData.selectStorey.buildingId}`, |
|
buildingAdjoins |
|
) |
|
.subscribe( |
|
(data) => { |
|
list.push(1); |
|
if (list.length === 4) { |
|
this.updateCurrentFloor(); |
|
} |
|
}, |
|
(err) => { |
|
let config = new MatSnackBarConfig(); |
|
config.verticalPosition = "top"; |
|
config.duration = 3000; |
|
if (err == "infos 有重复方向!") { |
|
this.snackBar.open( |
|
"建筑毗邻同步失败,存在相同方向", |
|
"确定", |
|
config |
|
); |
|
} else { |
|
this.snackBar.open("建筑毗邻同步失败", "确定", config); |
|
} |
|
} |
|
); |
|
//批量保存建筑重点部位 |
|
let buildingImportantLocations = |
|
this.canvasData.getBuildingImportantLocations(); |
|
this.http |
|
.post( |
|
`/api/BuildingImportantLocations/Batch?companyId=${this.params.companyId}&buildingId=${this.canvasData.selectStorey.buildingId}`, |
|
buildingImportantLocations |
|
) |
|
.subscribe((data) => { |
|
list.push(1); |
|
if (list.length === 4) { |
|
this.updateCurrentFloor(); |
|
} |
|
}); |
|
//批量保存建筑消防设施素材 |
|
let buildingFacilityAssets = |
|
this.canvasData.getAllBuildingFacilityAssetInfo(); |
|
this.http |
|
.post( |
|
`/api/BuildingFacilityAssets/Batch?companyId=${this.params.companyId}&buildingId=${this.canvasData.selectStorey.buildingId}`, |
|
buildingFacilityAssets |
|
) |
|
.subscribe((data) => { |
|
list.push(1); |
|
if (list.length === 4) { |
|
this.updateCurrentFloor(); |
|
} |
|
}); |
|
}); |
|
}); |
|
} |
|
} |
|
|
|
//复制完楼层后 刷新视图 |
|
updateCurrentFloor() { |
|
if (this.checkedBuildingIndex == -1) { |
|
//总平面图 |
|
let fireData = this.getFireElements( |
|
sessionStorage.getItem("buildingTypeId") |
|
); //获取单位下 消防要素 |
|
let planData = this.getSitePlanCompanyData(); //获取 单位 数据 |
|
this.http |
|
.get("/api/SitePlans", { params: this.params }) |
|
.subscribe((data) => { |
|
this.sitePlanData = data; |
|
this.selectingSitePlan = |
|
this.sitePlanData[this.sitePlanData.length - 1] || {}; |
|
this.canvasData.selectStorey = |
|
this.sitePlanData[this.sitePlanData.length - 1] || {}; //服务中 存一份数据 |
|
this.selectSitePlanIndex = this.sitePlanData.length - 1; |
|
|
|
Promise.all([fireData, planData]).then((res) => { |
|
this.getSitePlanStorey(this.selectingSitePlan); //获取 平面图 楼层数据 |
|
this.maskLayerService.sendMessage(false); |
|
}); |
|
}); //重新加载 新楼层 |
|
} else { |
|
//楼层/区域 |
|
let params = { buildingId: this.beforeOneCheckedBuilding.id }; |
|
let fireData = this.getFireElements( |
|
this.beforeOneCheckedBuilding.buildingTypes[0].id || "" |
|
); //获取建筑下 消防要素 |
|
let planData = this.getBuildingData(params); //获取 建筑 数据 |
|
this.http.get("/api/BuildingAreas", { params }).subscribe((data) => { |
|
this.sitePlanData = data; |
|
this.selectingSitePlan = |
|
this.sitePlanData[this.sitePlanData.length - 1] || {}; |
|
this.canvasData.selectStorey = |
|
this.sitePlanData[this.sitePlanData.length - 1] || {}; //服务中 存一份数据 |
|
this.selectSitePlanIndex = this.sitePlanData.length - 1; |
|
|
|
Promise.all([fireData, planData]).then((res) => { |
|
this.getBuildingStorey(this.selectingSitePlan); //获取 建筑 楼层数据 |
|
this.maskLayerService.sendMessage(false); |
|
}); |
|
}); //重新加载 新楼层 |
|
} |
|
} |
|
|
|
//平面图 楼层/区域 替换底图 |
|
replaceBaseMap(e, item) { |
|
e.stopPropagation(); |
|
let file = e.target.files[0] || null; //获取上传的文件 |
|
let fileSize = file.size || null; //上传文件的总大小 |
|
let maxSize = 5 * 1024 * 1024; //5MB一个分片 |
|
let tenSize = 100 * 1024 * 1024; //100MB限制 |
|
if ( |
|
file && |
|
file.name.toLowerCase().indexOf("png") == -1 && |
|
file.name.toLowerCase().indexOf("jpg") == -1 && |
|
file.name.toLowerCase().indexOf("jpeg") == -1 |
|
) { |
|
const config = new MatSnackBarConfig(); |
|
config.verticalPosition = "top"; |
|
config.duration = 3000; |
|
this.snackBar.open("请上传图片后缀为png,jpg,jpeg的文件", "确定", config); |
|
return; |
|
} |
|
|
|
if (file && fileSize <= maxSize) { |
|
//上传文件<=5MB时 |
|
let formData = new FormData(); |
|
formData.append("file", file); |
|
this.http |
|
.post( |
|
`/api/Objects/WebPlan2D/${sessionStorage.getItem("companyId")}`, |
|
formData |
|
) |
|
.subscribe((data: any) => { |
|
this.renovateBaseMap( |
|
"/api/Objects/WebPlan2D/" + data.objectName, |
|
item |
|
); |
|
}); |
|
} else if (file && fileSize > maxSize && fileSize < tenSize) { |
|
//上传文件>100MB时 |
|
let upload = this.canvasData.sectionUpload( |
|
sessionStorage.getItem("companyId"), |
|
file |
|
); |
|
upload.then((res) => { |
|
this.renovateBaseMap("/api/Objects/PlanPlatform/" + res, item); |
|
}); |
|
} else { |
|
const config = new MatSnackBarConfig(); |
|
config.verticalPosition = "top"; |
|
config.duration = 3000; |
|
this.snackBar.open("上传底图需小于100MB", "确定", config); |
|
} |
|
} |
|
|
|
//封装 替换底图 function |
|
renovateBaseMap(e, item) { |
|
let that = this; |
|
let img = new Image(); |
|
img.src = e; |
|
img.onload = function () { |
|
item.imageUrl = e; |
|
item.imageWidth = img.width; |
|
item.imageHeight = img.height; |
|
if (that.checkedBuildingIndex == -1) { |
|
//总平面图 |
|
that.http.put(`/api/SitePlans/${item.id}`, item).subscribe((data) => { |
|
let isSuccess = that.renovateSitePlan(); |
|
isSuccess.then((res) => { |
|
that.canvas.refreshBackgroundImage(); |
|
}); |
|
const config = new MatSnackBarConfig(); |
|
config.verticalPosition = "top"; |
|
config.duration = 3000; |
|
that.snackBar.open("上传底图成功", "确定", config); |
|
}); |
|
} else { |
|
//楼层/区域 |
|
that.http |
|
.put(`/api/BuildingAreas/${item.id}`, item, { params: that.params }) |
|
.subscribe((data) => { |
|
let isSuccess = that.renovateBuilding(); |
|
isSuccess.then((res) => { |
|
that.canvas.refreshBackgroundImage(); |
|
}); |
|
const config = new MatSnackBarConfig(); |
|
config.verticalPosition = "top"; |
|
config.duration = 3000; |
|
that.snackBar.open("上传底图成功", "确定", config); |
|
}); |
|
} //else |
|
}; //onload |
|
} |
|
|
|
//封装 刷新总平面图 数据 |
|
renovateSitePlan() { |
|
return new Promise((resolve, reject) => { |
|
this.http |
|
.get("/api/SitePlans", { params: this.params }) |
|
.subscribe((data) => { |
|
this.sitePlanData = data; |
|
this.selectingSitePlan = this.sitePlanData[this.selectSitePlanIndex]; |
|
this.canvasData.selectStorey = |
|
this.sitePlanData[this.selectSitePlanIndex]; //服务中 存一份数据 |
|
this.canvasData.originaleveryStoreyData.sitePlanId |
|
? null |
|
: (this.canvasData.originaleveryStoreyData.sitePlanId = |
|
this.selectingSitePlan.id || null); |
|
const config = new MatSnackBarConfig(); |
|
config.verticalPosition = "top"; |
|
config.duration = 3000; |
|
this.snackBar.open("数据更新成功", "确定", config); |
|
resolve("success"); |
|
}); |
|
}); |
|
} |
|
|
|
//封装 刷新 楼层/区域 数据 |
|
renovateBuilding() { |
|
let params = { |
|
buildingId: this.beforeOneCheckedBuilding.id, |
|
}; |
|
return new Promise((resolve, reject) => { |
|
this.http.get("/api/BuildingAreas", { params }).subscribe((data) => { |
|
this.sitePlanData = data; |
|
this.selectingSitePlan = this.sitePlanData[this.selectSitePlanIndex]; |
|
this.canvasData.selectStorey = |
|
this.sitePlanData[this.selectSitePlanIndex]; //服务中 存一份数据 |
|
this.canvasData.originaleveryStoreyData.buildingAreaId |
|
? null |
|
: (this.canvasData.originaleveryStoreyData.buildingAreaId = |
|
this.selectingSitePlan.id || null); |
|
const config = new MatSnackBarConfig(); |
|
config.verticalPosition = "top"; |
|
config.duration = 3000; |
|
this.snackBar.open("数据更新成功", "确定", config); |
|
resolve("success"); |
|
}); |
|
}); |
|
} |
|
|
|
allLibrary: any = []; //所有素材库 + 素材 |
|
selectLibrary: any; //选中的素材库 |
|
selectImage: any; //选中的素材库图片 |
|
selectImageIndex: number; //选中的素材库图片index |
|
searchSettimeout: any; //延时器 |
|
searchInput: string = null; //模糊搜索 input |
|
searchLibrary: any = []; //模糊搜索 素材 |
|
|
|
//输入框 输入事件 |
|
libraryChange() { |
|
window.clearTimeout(this.searchSettimeout); |
|
this.searchSettimeout = window.setTimeout(() => { |
|
if (this.searchInput === "") { |
|
this.searchLibrary = []; |
|
} else { |
|
this.http |
|
.get(`/api/Assets?assetName=${this.searchInput}`) |
|
.subscribe((data: any) => { |
|
this.searchLibrary = data; |
|
}); |
|
} |
|
}, 500); |
|
} |
|
|
|
//获取素材库 |
|
getAllLibrary(type: string = "input") { |
|
this.http.get(`/api/AssetLibraries?tag=${type}`).subscribe((data: any) => { |
|
data.forEach((element) => { |
|
element.images = []; |
|
}); |
|
this.allLibrary = data; |
|
this.selectImageIndex = -1; |
|
}); |
|
} |
|
|
|
//素材库展开面板展开时 |
|
opened(e) { |
|
if (!e.images.length) { |
|
//当前素材库没加载素材时 |
|
this.http.get(`/api/Assets?libraryId=${e.id}`).subscribe((data: any) => { |
|
e.images = data; |
|
}); |
|
} |
|
} |
|
|
|
//点击选中素材库图片时 |
|
selectImg(item, items, index) { |
|
this.selectLibrary = item.name; |
|
this.selectImage = items; |
|
this.selectImageIndex = index; |
|
this.canvasData.selectTemplateData = items; |
|
this.canvas.beginPaint(); |
|
} |
|
|
|
//处置预案 |
|
allFirePlan: any = []; //所有灾情 |
|
selectDisposalNode: string = ""; //当前点击tree节点 css选中样式 |
|
|
|
//获取所有灾情 |
|
getAllFirePlan() { |
|
let params = { componentId: sessionStorage.getItem("planId") }; |
|
this.http |
|
.get("/api/Disasters", { params: params }) |
|
.subscribe((data: any) => { |
|
if (!data.length) { |
|
//该 单位没有灾情时 |
|
let msg = { |
|
name: "灾情", |
|
modifiedTime: new Date(), |
|
planComponentId: sessionStorage.getItem("planId"), |
|
}; |
|
this.http.post("/api/Disasters", msg).subscribe((data) => { |
|
this.allFirePlan.push(data); |
|
let params = { disasterId: this.allFirePlan[0].id || "" }; |
|
this.http |
|
.get("/api/DisposalNodes", { params: params }) |
|
.subscribe((data) => { |
|
//所有处置节点 |
|
this.canvasData.allDisposalNode = data; |
|
}); |
|
}); |
|
} else { |
|
//单位 有灾情时 |
|
this.allFirePlan = data; |
|
let params = { disasterId: this.allFirePlan[0].id || "" }; |
|
this.http |
|
.get("/api/DisposalNodes", { params: params }) |
|
.subscribe((data) => { |
|
//所有处置节点 |
|
this.canvasData.allDisposalNode = data; |
|
}); |
|
} |
|
}); |
|
} |
|
|
|
//获取所有处置节点 |
|
getDisposalNode() { |
|
this.selectDisposalNode = ""; |
|
let params = { disasterId: this.allFirePlan[0].id || "" }; |
|
this.http |
|
.get("/api/DisasterData/Markers", { params: params }) |
|
.subscribe((data) => { |
|
//灾情标签信息 |
|
this.canvasData.allNodeMarkers = data; |
|
this.mateFireForce(); |
|
}); |
|
this.http |
|
.get("/api/DisposalNodes", { params: params }) |
|
.subscribe((data) => { |
|
//处置节点 |
|
this.canvasData.allDisposalNode = data; |
|
this.handleHybridTree(); |
|
}); |
|
} |
|
|
|
treeData: any = []; //渲染tree处理完成数据 |
|
defaultExpandedKeys: any = []; //首次渲染 tree展开状态 |
|
//处理 节点 Tree数据 |
|
handleHybridTree() { |
|
this.defaultExpandedKeys = []; |
|
let treeData = []; |
|
let data = JSON.parse( |
|
JSON.stringify(this.canvasData.allDisposalNode || []) |
|
); |
|
data.forEach((element) => { |
|
this.defaultExpandedKeys.push(element.id); |
|
element.title = element.name; //name |
|
element.key = element.id; //id |
|
element.children = []; //children |
|
if (element.sitePlanId || element.buildingAreaId) { |
|
//是数据节点 |
|
element.isLeaf = true; |
|
element.isDataNode = true; |
|
} else { |
|
//不是数据节点 |
|
element.isLeaf = false; |
|
element.isDataNode = false; |
|
} |
|
data.forEach((item) => { |
|
item.parentId === element.id ? element.children.push(item) : null; |
|
}); |
|
}); |
|
data.forEach((element) => { |
|
!element.parentId ? treeData.push(element) : null; |
|
}); |
|
this.treeData = [...treeData]; |
|
this.defaultExpandedKeys = [...this.defaultExpandedKeys]; |
|
} |
|
|
|
//刷新 treeData 保存已展开节点 |
|
refurbishTreeData() { |
|
this.defaultExpandedKeys = []; |
|
let params = { disasterId: this.allFirePlan[0].id || "" }; |
|
this.http |
|
.get("/api/DisposalNodes", { params: params }) |
|
.subscribe((nodeData) => { |
|
//处置节点 |
|
this.canvasData.allDisposalNode = nodeData; |
|
let oldTreeData = this.nzTreeComponent.getExpandedNodeList(); |
|
oldTreeData.forEach((item) => { |
|
this.defaultExpandedKeys.push(item.key); |
|
}); |
|
let treeData = []; |
|
let data = JSON.parse( |
|
JSON.stringify(this.canvasData.allDisposalNode || []) |
|
); |
|
data.forEach((element) => { |
|
element.title = element.name; //name |
|
element.key = element.id; //id |
|
element.children = []; //children |
|
if (element.sitePlanId || element.buildingAreaId) { |
|
//是数据节点 |
|
element.isLeaf = true; |
|
element.isDataNode = true; |
|
} else { |
|
//不是数据节点 |
|
element.isLeaf = false; |
|
element.isDataNode = false; |
|
} |
|
data.forEach((item) => { |
|
item.parentId === element.id ? element.children.push(item) : null; |
|
}); |
|
}); |
|
data.forEach((element) => { |
|
!element.parentId ? treeData.push(element) : null; |
|
}); |
|
this.treeData = [...treeData]; |
|
this.defaultExpandedKeys = [...this.defaultExpandedKeys]; |
|
}); |
|
} |
|
|
|
sitePlanIcon = { fire: 0, force: 0 }; // 总平面图 火源/力量 图标 是否展示 |
|
|
|
//刷新 建筑楼层 匹配 火源/力量 图标 |
|
mateFireForce() { |
|
let data = this.canvasData.allNodeMarkers.markers || {}; |
|
for (let key in data) { |
|
//遍历 火/力量 图标 |
|
this.sitePlanData.forEach((element) => { |
|
//楼层 |
|
if (element.id == key) { |
|
// 相匹配时 |
|
data[key].fireCount != 0 ? (element.fire = 1) : (element.fire = 0); |
|
data[key].forceCount != 0 ? (element.force = 1) : (element.force = 0); |
|
} |
|
}); |
|
this.allBuildings.forEach((element) => { |
|
//建筑 |
|
if (element.id == key) { |
|
// 相匹配时 |
|
data[key].fireCount != 0 ? (element.fire = 1) : (element.fire = 0); |
|
data[key].forceCount != 0 ? (element.force = 1) : (element.force = 0); |
|
} |
|
}); |
|
if (this.params.companyId == key) { |
|
//总平面图时 |
|
data[key].fireCount != 0 |
|
? (this.sitePlanIcon.fire = 1) |
|
: (this.sitePlanIcon.fire = 0); |
|
data[key].forceCount != 0 |
|
? (this.sitePlanIcon.force = 1) |
|
: (this.sitePlanIcon.force = 0); |
|
} |
|
} |
|
|
|
let buildingMSG = this.canvasData.allNodeMarkers.highlightMarkers || {}; |
|
for (let key in buildingMSG) { |
|
if (key === this.canvasData.selectPanelPoint.DisposalNodeId) { |
|
for (let keys in buildingMSG[key]) { |
|
this.sitePlanData.forEach((element) => { |
|
//楼层 |
|
if (element.id === keys) { |
|
buildingMSG[key][keys].fireCount != 0 ? (element.fire = 2) : null; |
|
buildingMSG[key][keys].forceCount != 0 |
|
? (element.force = 2) |
|
: null; |
|
} |
|
}); |
|
this.allBuildings.forEach((element) => { |
|
//建筑 |
|
if (element.id === keys) { |
|
// 相匹配时 |
|
buildingMSG[key][keys].fireCount != 0 ? (element.fire = 2) : null; |
|
buildingMSG[key][keys].forceCount != 0 |
|
? (element.force = 2) |
|
: null; |
|
} |
|
}); |
|
if (this.params.companyId === keys) { |
|
//总平面图时 |
|
buildingMSG[key][keys].fireCount != 0 |
|
? (this.sitePlanIcon.fire = 2) |
|
: null; |
|
buildingMSG[key][keys].forceCount != 0 |
|
? (this.sitePlanIcon.force = 2) |
|
: null; |
|
} |
|
} |
|
} |
|
} |
|
} |
|
|
|
// 切换 基本信息时 刷新 删除 建筑楼层 自定义属性 |
|
mateDeleteCustomize() { |
|
this.canvasData.selectPanelPointBaseData = { |
|
description: "", |
|
notes: "", |
|
weather: "", |
|
airTemperature: "", |
|
windDirection: "", |
|
windScale: "", |
|
}; |
|
this.defaultExpandedKeys = []; |
|
this.sitePlanIcon = { fire: 0, force: 0 }; |
|
this.sitePlanData.forEach((element) => { |
|
//楼层 |
|
delete element.fire; |
|
delete element.force; |
|
}); |
|
this.allBuildings.forEach((element) => { |
|
//建筑 |
|
delete element.fire; |
|
delete element.force; |
|
}); |
|
} |
|
|
|
//计算差异 |
|
countValue(e) { |
|
e.stopPropagation(); |
|
let params = { disasterId: this.allFirePlan[0].id || "" }; |
|
this.http |
|
.get("/api/DisasterData/Diffs", { params: params }) |
|
.subscribe((data) => { |
|
this.canvasData.allNodeMarkers = data; |
|
this.mateFireForce(); |
|
const config = new MatSnackBarConfig(); |
|
config.verticalPosition = "top"; |
|
config.duration = 3000; |
|
this.snackBar.open("计算差异完成", "确定", config); |
|
}); |
|
} |
|
|
|
//复制 处置预案 节点 |
|
copyPanelPoint(e, item, treeData) { |
|
e.stopPropagation(); |
|
if (confirm(`确定要复制 ${item.title} ?`)) { |
|
let params = { id: item.origin.id }; |
|
let order; |
|
if (item.level == 0) { |
|
treeData.length |
|
? (order = treeData[treeData.length - 1].order + 1) |
|
: (order = 0); |
|
} else { |
|
let parent = item.getParentNode(); //获取父节点 |
|
parent.origin.children.length |
|
? (order = |
|
parent.origin.children[parent.origin.children.length - 1].order + |
|
1) |
|
: (order = 0); |
|
} |
|
let data = { |
|
name: item.title + "(副本)", |
|
level: item.level, |
|
order: order, |
|
description: "", |
|
disasterId: item.origin.disasterId || "", |
|
parentId: item.origin.parentId || null, |
|
planComponentId: item.origin.planComponentId || "", |
|
}; |
|
this.http |
|
.post("/api/DisposalNodes/Clone", data, { params: params }) |
|
.subscribe((data) => { |
|
this.refurbishTreeData(); |
|
}); |
|
} //isTrue |
|
} |
|
|
|
//删除 处置预案 节点 |
|
deletePanelPoint(e, item) { |
|
e.stopPropagation(); |
|
if (confirm(`确定要删除 ${item.name} ?`)) { |
|
this.http.delete(`/api/DisposalNodes/${item.id}`).subscribe((data) => { |
|
this.refurbishTreeData(); |
|
}); |
|
} |
|
} |
|
|
|
//点击 处置Tree节点 |
|
selectanelPoint(e) { |
|
if (!e.buildingAreaId && !e.sitePlanId) { |
|
//当前节点 不是 数据节点 时 |
|
let msg = this.canvasData.findDisposalNode(e.id); |
|
this.canvasData.selectPanelPointBaseData = msg; |
|
this.selectDisposalNode == msg.id |
|
? (this.selectDisposalNode = "") |
|
: (this.selectDisposalNode = msg.id); //选中 节点 |
|
} else if (e.buildingAreaId || e.sitePlanId) { |
|
//当前节点 是 数据节点 时 |
|
let msg = this.canvasData.findDisposalNode(e.parentId); |
|
this.canvasData.selectPanelPointBaseData = msg; |
|
this.selectDisposalNode = e.parentId; //选中 节点 |
|
|
|
if (this.canvasData.selectPanelPoint.DisposalNodeId != e.id) { |
|
//选择节点 不是当前节点时 |
|
let params = { nodeId: e.id }; |
|
let parameter = { |
|
//查询 节点 对应 建筑/楼层 index,id |
|
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.canvasData.selectPanelPoint = this.canvasData.deserialize( |
|
JSON.stringify(data || new DisposalNodeData()) |
|
); //选择 当前 节点 |
|
this.canvasData.selectPanelPoint.Data = this.canvasData.deserialize( |
|
this.canvasData.selectPanelPoint.Data |
|
); |
|
this.seekPanelPoint(parameter); |
|
}); |
|
} //if |
|
} //else if |
|
} |
|
|
|
//查找 数据节点 对应 建筑/楼层 |
|
seekPanelPoint(paramsData) { |
|
this.checkedBuildingIndex = paramsData.buildingIndex; |
|
if (paramsData.buildingIndex == -1) { |
|
//总平面图时 |
|
this.beforeOneCheckedBuilding = { name: "总平面图" }; |
|
let fireData = this.getFireElements( |
|
sessionStorage.getItem("buildingTypeId") |
|
); //获取单位下 消防要素 |
|
let planData = this.getSitePlanCompanyData(); //获取 单位 数据 |
|
this.http |
|
.get("/api/SitePlans", { params: this.params }) |
|
.subscribe((data) => { |
|
this.sitePlanData = data; |
|
let index = this.sitePlanData.findIndex((item) => { |
|
return item.id === paramsData.storeyId; |
|
}); |
|
this.selectingSitePlan = this.sitePlanData[index] || {}; |
|
this.canvasData.selectStorey = this.sitePlanData[index] || {}; //服务中 存一份数据 |
|
this.selectSitePlanIndex = index; |
|
|
|
Promise.all([fireData, planData]).then((res) => { |
|
this.getSitePlanStorey(this.selectingSitePlan); //获取 平面图 楼层数据 |
|
}); |
|
}); //get |
|
} else { |
|
//建筑时 |
|
this.beforeOneCheckedBuilding = |
|
this.allBuildings[paramsData.buildingIndex]; |
|
let params = { buildingId: this.beforeOneCheckedBuilding.id }; |
|
let fireData = this.getFireElements( |
|
this.beforeOneCheckedBuilding.buildingTypes[0].id || "" |
|
); //获取建筑下 消防要素 |
|
let planData = this.getBuildingData(params); //获取 建筑 数据 |
|
this.http.get("/api/BuildingAreas", { params }).subscribe((data) => { |
|
this.sitePlanData = data; |
|
let index = this.sitePlanData.findIndex((item) => { |
|
return item.id === paramsData.storeyId; |
|
}); |
|
this.selectingSitePlan = this.sitePlanData[index] || {}; |
|
this.canvasData.selectStorey = this.sitePlanData[index] || {}; //服务中 存一份数据 |
|
this.selectSitePlanIndex = index; |
|
|
|
Promise.all([fireData, planData]).then((res) => { |
|
this.getBuildingStorey(this.selectingSitePlan); //获取 建筑 楼层数据 |
|
}); |
|
}); //get |
|
} |
|
} |
|
} |
|
|
|
//创建建筑 |
|
@Component({ |
|
selector: "app-createBuilding-building", |
|
templateUrl: "./createBuilding.html", |
|
styleUrls: ["./collection-tools.component.scss"], |
|
}) |
|
export class CreateBuildingBuilding { |
|
constructor( |
|
private http: HttpClient, |
|
public dialog: MatDialog, |
|
public dialogRef: MatDialogRef<any>, |
|
@Inject(MAT_DIALOG_DATA) public data |
|
) {} |
|
|
|
allBuildingType: any; //所有的建筑类型 |
|
selected: any; //选中的建筑 |
|
ngOnInit(): void { |
|
this.getAllBuildingType(); |
|
} |
|
|
|
//获得所有单位类型 |
|
getAllBuildingType() { |
|
this.http.get("/api/BuildingTypes/Simple").subscribe((data) => { |
|
this.allBuildingType = data; |
|
}); |
|
} |
|
|
|
//创建建筑功能分区 |
|
onSubmit(e) { |
|
let companyId = sessionStorage.getItem("companyId"); |
|
let lastBuildingOrder = |
|
this.data.allBuildings.length != 0 |
|
? this.data.allBuildings[this.data.allBuildings.length - 1].order + 1 |
|
: 0; |
|
let data = { |
|
id: "", |
|
name: e.propertyName, |
|
order: lastBuildingOrder, |
|
enabled: true, |
|
companyId: companyId, |
|
buildingTypes: [ |
|
{ |
|
id: e.buildingId, |
|
name: "", |
|
}, |
|
], |
|
}; |
|
this.http |
|
.post("/api/Buildings", data, { |
|
params: { |
|
companyId: this.data.companyId, |
|
}, |
|
}) |
|
.subscribe( |
|
(data) => { |
|
this.dialogRef.close("创建成功"); |
|
}, |
|
(err) => { |
|
this.dialogRef.close("创建失败"); |
|
} |
|
); |
|
} |
|
} |
|
|
|
//编辑建筑 |
|
@Component({ |
|
selector: "app-editBuilding-building", |
|
templateUrl: "./editBuilding.html", |
|
styleUrls: ["./collection-tools.component.scss"], |
|
}) |
|
export class EditBuildingBuilding { |
|
constructor( |
|
private http: HttpClient, |
|
public dialog: MatDialog, |
|
public dialogRef: MatDialogRef<any>, |
|
@Inject(MAT_DIALOG_DATA) public data |
|
) {} |
|
|
|
defaultName: String = this.data.item.name; //默认建筑名称 |
|
defaultBuildingType: String = this.data.item.buildingTypes[0].id; //默认建筑类型 |
|
allBuildingType: any; //所有的建筑类型 |
|
|
|
ngOnInit(): void { |
|
this.getAllBuildingType(); |
|
} |
|
|
|
getAllBuildingType() { |
|
this.http.get("/api/BuildingTypes/Simple").subscribe((data) => { |
|
this.allBuildingType = data; |
|
}); |
|
} |
|
|
|
//编辑建筑信息 |
|
onSubmit(e) { |
|
let companyId = sessionStorage.getItem("companyId"); |
|
let data = { |
|
id: this.data.item.id, |
|
name: e.propertyName, |
|
order: this.data.item.order, |
|
enabled: true, |
|
companyId: companyId, |
|
buildingTypes: [ |
|
{ |
|
id: e.buildingId, |
|
name: "", |
|
}, |
|
], |
|
}; |
|
this.http |
|
.put(`/api/Buildings/${this.data.item.id}`, data, { |
|
params: { |
|
id: this.data.item.id, |
|
companyId: companyId, |
|
}, |
|
}) |
|
.subscribe( |
|
(data) => { |
|
this.dialogRef.close("修改成功"); |
|
}, |
|
(err) => { |
|
this.dialogRef.close("修改失败"); |
|
} |
|
); |
|
} |
|
}
|
|
|