diff --git a/src/app/ui/data-push/data-push.component.scss b/src/app/ui/data-push/data-push.component.scss
index b1ab0c6..f7762b0 100644
--- a/src/app/ui/data-push/data-push.component.scss
+++ b/src/app/ui/data-push/data-push.component.scss
@@ -1,7 +1,7 @@
.content {
width: 100%;
height: 100%;
- overflow: hidden;
+ // overflow: hidden;
display: flex;
}
diff --git a/src/app/ui/data-push/data-push.component.ts b/src/app/ui/data-push/data-push.component.ts
index c76671f..4bf58bb 100644
--- a/src/app/ui/data-push/data-push.component.ts
+++ b/src/app/ui/data-push/data-push.component.ts
@@ -17,13 +17,15 @@ export class DataPushComponent implements OnInit {
routers:any = [
{name:'基本信息', url: '/ui/plan/basicInfo'},
{name:'平面图', url: '/ui/plan/planarGraph'},
- {name:'四周毗邻', url: '/ui/plan/bbb'},
- {name:'消防设施', url: '/ui/plan/ccc'},
- {name:'重点部位', url: '/ui/plan/ddd'},
+ {name:'四周毗邻', url: '/ui/plan/allaround'},
+ {name:'消防设施', url: '/ui/plan/fire-fighting-device'},
+ {name:'重点部位', url: '/ui/plan/key-site'},
{name:'功能分区', url: '/ui/plan/eee'},
- {name:'实景图', url: '/ui/plan/fff'},
- {name:'上传CAD', url: '/ui/plan/ggg'},
- {name:'三维预案', url: '/ui/plan/hhh'},
+ {name:'实景图', url: '/ui/plan/realistic-picture'},
+ {name:'上传CAD', url: '/ui/plan/ggg'}
+ // {name:'三维预案', url: '/ui/plan/3DPlan'},
]
-
+ open3D(){
+ window.open("http://39.106.78.171:8088/%E5%B9%BF%E8%A5%BF%E8%B4%B5%E6%B8%AF%E5%B8%82%E4%B8%89%E7%BB%B4%E7%81%AD%E7%81%AB%E9%A2%84%E6%A1%88/%5B%E7%BD%91%E9%A1%B5%E7%89%88%5D%E8%B4%B5%E6%B8%AF%E6%B2%B9%E5%BA%93%E4%B8%89%E7%BB%B4%E7%81%AD%E7%81%AB%E9%A2%84%E6%A1%88/")
+ }
}
diff --git a/src/app/ui/fire-fighting-device-look/addGrouping.component.ts b/src/app/ui/fire-fighting-device-look/addGrouping.component.ts
new file mode 100644
index 0000000..ef3ae9d
--- /dev/null
+++ b/src/app/ui/fire-fighting-device-look/addGrouping.component.ts
@@ -0,0 +1,69 @@
+import { Component, OnInit, Inject } from '@angular/core';
+import { HttpClient } from '@angular/common/http';
+import {MatDialog, MatDialogRef, MAT_DIALOG_DATA} from '@angular/material/dialog';
+import { MatSnackBar, MatSnackBarConfig } from '@angular/material/snack-bar';
+
+
+
+@Component({
+ selector: 'imgsdatadetail',
+ templateUrl: './addGrouping.html',
+ styleUrls: ['./fire-fighting-device.component.scss']
+ })
+export class ImgsDataDetail2 {
+
+ constructor(private http: HttpClient,public dialogRef: MatDialogRef
,@Inject(MAT_DIALOG_DATA) public data,public snackBar: MatSnackBar) {}
+
+ ngOnInit(): void {
+
+ }
+
+ ngAfterViewInit(): void{
+
+ }
+
+ //提交表单
+ onSubmit (e) {
+ if (this.data.buildingId) { //建筑新建内置项
+ let repeat = this.data.item.facilityItems.find(items=>items.name==e.name)
+ if (repeat==undefined) {
+ let header = {buildingId:this.data.buildingId, groupId:this.data.item.id}
+ let msg = {
+ isBuiltin: false,
+ details: '',
+ name: e.name,
+ isEachFloor: false,
+ order: this.data.item.facilityItems.length? this.data.item.facilityItems[this.data.item.facilityItems.length-1].order+1 : 0}
+ this.http.post('/api/CompanyAccount/BuildingFacilityItems',msg,{params:header}).subscribe(data=>{
+ this.dialogRef.close(data); })
+ } else {
+ const config = new MatSnackBarConfig();
+ config.verticalPosition = 'top';
+ config.duration = 3000
+ this.snackBar.open('当前分组下禁止创建名称相同内置项','确定',config);
+ }
+ } else { //单位新建内置项
+ let repeat = this.data.facilityItems.find(item=>item.name==e.name)
+ if (repeat==undefined) {
+ let header = {groupId:this.data.id}
+ let msg = {
+ isBuiltin: false,
+ details: '',
+ name: e.name,
+ isEachFloor: false,
+ order: this.data.facilityItems.length? this.data.facilityItems[this.data.facilityItems.length-1].order+1 : 0}
+ this.http.post('/api/CompanyAccount/CompanyFacilityItems',msg,{params:header}).subscribe(data=>{
+ this.dialogRef.close(data); })
+ } else {
+ const config = new MatSnackBarConfig();
+ config.verticalPosition = 'top';
+ config.duration = 3000
+ this.snackBar.open('当前分组下禁止创建名称相同内置项','确定',config);
+ }
+ } //else
+ }
+
+
+
+}
+
\ No newline at end of file
diff --git a/src/app/ui/fire-fighting-device-look/addGrouping.html b/src/app/ui/fire-fighting-device-look/addGrouping.html
new file mode 100644
index 0000000..916fc28
--- /dev/null
+++ b/src/app/ui/fire-fighting-device-look/addGrouping.html
@@ -0,0 +1,18 @@
+创建消防设施内置项
+
\ No newline at end of file
diff --git a/src/app/ui/fire-fighting-device-look/fire-fighting-device.component.html b/src/app/ui/fire-fighting-device-look/fire-fighting-device.component.html
new file mode 100644
index 0000000..44661db
--- /dev/null
+++ b/src/app/ui/fire-fighting-device-look/fire-fighting-device.component.html
@@ -0,0 +1,193 @@
+
+
+
+
+
+
暂无数据,请完善单位基本信息
+
+
{{item.name}}
+
+
+
+
+
+
+
+
+ 项目
+ 照片
+ 总数
+ 主要情况
+
+
+
+
+
+
+
+
+ {{items.name}}
+ 查看图片
+ {{items.total ? items.total : '总数: 0'}}
+
+
+
+
+
+ keyboard_arrow_down
+
+
+
+
+
+
+ {{header}}
+
+
+ {{body[header]? body[header] : '暂无数据'}}
+
+
+
+
+
楼层/区域名称: {{tableMsg.name? tableMsg.name: '暂无名称'}}
+
+
+ {{header}}
+
+
+ {{body[header]? body[header] : '暂无数据'}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
{{item.name}}
+
+
+
+
+
+
+
+
+ 项目
+ 照片
+ 总数
+ 主要情况
+
+
+
+
+
+
+
+
+ {{items.name}}
+ 查看图片
+ {{items.total ? items.total : '总数: 0'}}
+
+
+
+
+
+ keyboard_arrow_down
+
+
+
+
+
+
+ {{header}}
+
+
+ {{body[header]? body[header] : '暂无数据'}}
+
+
+
+
+
楼层/区域名称: {{tableMsg.name? tableMsg.name : '暂无名称'}}
+
+
+ {{header}}
+
+
+ {{body[header]? body[header] : '暂无数据'}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/app/ui/fire-fighting-device-look/fire-fighting-device.component.scss b/src/app/ui/fire-fighting-device-look/fire-fighting-device.component.scss
new file mode 100644
index 0000000..3ea1f32
--- /dev/null
+++ b/src/app/ui/fire-fighting-device-look/fire-fighting-device.component.scss
@@ -0,0 +1,145 @@
+.content {
+ width: 100%;
+ height: 90%;
+ padding: 10px;
+ overflow-y: auto;
+ .contentBox {
+ width: 90%;
+ height: 100%;
+ margin: 0 auto;
+ overflow-y: auto;
+ }
+}
+.mat-icon {
+ color: black;
+ cursor:pointer;
+}
+
+
+
+//可展开面板每一行css
+.mat-expansion-panel-header {
+ padding: 3px 24px;
+}
+
+.firstContent {
+ width: 3%;
+}
+.textContent {
+ width: 12%;
+ color: black;
+ text-align: center;
+ overflow: hidden;
+ text-overflow:ellipsis;
+ white-space: nowrap;
+}
+.totalContent {
+ width: 25%;
+ color: black;
+ text-align: center;
+ white-space: pre-line;
+ max-height: 48px;
+ overflow-y: auto;
+}
+.lastTextContent { //textarea多行文本
+ width: 45%;
+ color: black;
+ text-align: center;
+}
+input {
+ height: 22px;
+ line-height: 22px;
+ padding-left: 5px;
+ border-radius: 3px;
+}
+a {
+ color: #0000ff;
+}
+
+
+
+//bottom用户输入框
+.InputField {
+ display: inline-block;
+ width: 40%;
+ text-align: right;
+ margin: 10px 25px;
+ input {width: 60%;}
+ label {margin-right: 10px;}
+}
+textarea {
+ vertical-align: middle;
+ border-radius: 5px;
+ padding: 5px;
+ width: 60%;
+ height: 36px;
+ resize: none;
+}
+
+
+
+//表格样式
+.overflowTable {
+ width: 95%;
+ margin: 0 auto;
+ max-height: 300px;
+ overflow-y: auto;
+}
+.detailsTable {
+ margin: 10px 0;
+ table {
+ width: 100%;
+ text-align: center;
+ border-collapse:collapse;
+ word-break:break-all;
+ word-wrap:break-all;
+ table-layout:fixed;
+ th {
+ height: 35px;
+ border: 1px solid #999;}
+ td {
+ height: 35px;
+ border: 1px solid #999;}
+ }
+}
+
+
+
+//滚动条样式
+::-webkit-scrollbar{
+ width: 5px;
+ background-color: white;
+}
+::-webkit-scrollbar-thumb{
+ background-color: #999;
+}
+
+
+
+//img图片列表页面
+.imageList {
+ width: 100%;
+ height: 100%;
+ overflow-y: auto;
+ .imageListBox {
+ width: 100%;
+ height: 90%;
+ display: flex;
+ flex-direction: row;
+ flex-wrap: wrap;
+ .imagesBox {
+ width: 300px;
+ height: 200px;
+ margin: 0 11px 0 11px;
+ display: inline-block;
+ img {
+ border: 1px solid #999;
+ width: auto;
+ height: auto;
+ max-width: 100%;
+ height: 170px;
+ cursor:pointer;
+ }
+ }
+ }
+}
diff --git a/src/app/ui/fire-fighting-device-look/fire-fighting-device.component.ts b/src/app/ui/fire-fighting-device-look/fire-fighting-device.component.ts
new file mode 100644
index 0000000..cf62564
--- /dev/null
+++ b/src/app/ui/fire-fighting-device-look/fire-fighting-device.component.ts
@@ -0,0 +1,538 @@
+import { Component, OnInit, ViewChild, Inject } from '@angular/core';
+import {HttpClient, HttpHeaders} from '@angular/common/http'
+import { MatDialogRef, MatDialog, MAT_DIALOG_DATA } from '@angular/material/dialog';
+import { ImgsDataDetail2 } from './addGrouping.component'
+import { MatSnackBarConfig, MatSnackBar } from '@angular/material/snack-bar';
+import { ImagesData2 } from './imagesdata.component'
+import { Router,ActivatedRoute } from '@angular/router'
+
+
+export interface Food {
+ value: string;
+ name: string;
+}
+@Component({
+ selector: 'app-fire-fighting-device-look',
+ templateUrl: './fire-fighting-device.component.html',
+ styleUrls: ['./fire-fighting-device.component.scss']
+})
+export class FireFightingDeviceLookComponent implements OnInit {
+
+ constructor(private router:Router,private route:ActivatedRoute,public http: HttpClient,public dialog: MatDialog,public snackBar: MatSnackBar) { }
+
+ ngOnInit(): void {
+ this.getCompanyInformation()
+ this.getAllBuilding()
+ }
+
+ //定义属性数据
+ singleElection:Food[]=[
+ {value:'true', name: '有'},
+ {value:'false', name: '无'}]
+
+ companyBuiltInGrouping:any = []; //单位消防设施内置分组
+ companyDetails:any = []; //单位详情
+ companyEachDetails:any = [] //单位每层详情
+ companyOptionalGrouping:any = []; //单位消防设施可选分组
+
+ //获得单位基本信息
+ getCompanyInformation () {
+ let companyId = this.route.snapshot.queryParams.id
+ this.http.get(`/api/Companies/${companyId}`).subscribe((data:any)=>{
+ if (data.buildingTypes.length) {
+ let newData = {buildingType: data.buildingTypes[0].id,companyId : companyId}
+ this.http.get('/api/CompanyFacilities',{params:newData}).subscribe((data:any)=>{ //获得单位的消防设施
+ this.companyBuiltInGrouping = data[0].summary.companyFacilityGroups
+ this.companyOptionalGrouping = data[0].summary.companyOptionalGroups
+ this.companyDetails = data[0].details
+ this.companyEachDetails = data[0].eachDetails
+ this.companyBuiltInGrouping.forEach(element => { //循环单位内置分组项
+ element.selectBuiltInGrouping = []
+ element.facilityItems.forEach((elements,index) => {
+ elements.total = element.facilityCount[index]
+ elements.expanded = false});
+ });
+ }) //http
+ } //if
+
+ })
+ }
+
+ //创建单位消防设施内置分组项
+ addCompanyGrouping (e) {
+ let data = e
+ let dialogRef = this.dialog.open(ImagesData2,{data});
+ dialogRef.afterClosed().subscribe(data=>{
+ if (data) { e.facilityItems.push(data) } });
+ }
+
+ //保存单位消防设施内置分组项
+ editCompanyGrouping(e) {
+ let header = {groupId:e.id}
+ let data = []
+ e.facilityItems.forEach((element,index) => {
+ let msg = {
+ isBuiltin: element.isBuiltin,
+ details: element.details,
+ name: element.name,
+ isEachFloor: element.isEachFloor,
+ order: element.order}
+ data.push(msg)
+ if (index==e.facilityItems.length-1) {
+ this.http.post('/api/CompanyFacilityItems/Batch',data,{params:header}).subscribe(data=>{
+ const config = new MatSnackBarConfig();
+ config.verticalPosition = 'top';
+ config.duration = 3000
+ this.snackBar.open('数据更新成功','确定',config);
+ }) }
+ }); //forEach
+
+ }
+
+ //checked单位消防设施内置分组项时
+ checkedCompany (e,item,items) {
+ if (e.checked) {
+ item.selectBuiltInGrouping.push(items)
+ } else {
+ item.selectBuiltInGrouping.splice(item.selectBuiltInGrouping.findIndex(oldItem => oldItem == items), 1)
+ }
+ }
+
+ //删除消防设施内置分组项
+ deleteCompanyGrouping (e) {
+ if (e.selectBuiltInGrouping.length) {
+ let isDelete = confirm('您确定要删除吗')
+ if (isDelete) {
+ let msg:any = `?groupId=${e.id}`
+ e.selectBuiltInGrouping.forEach((element,index) => {
+ let data = `&name=${element.name}`
+ msg = msg + data
+ if (index === e.selectBuiltInGrouping.length-1) {
+ this.http.delete('/api/CompanyFacilityItems/Batch' + msg).subscribe(data=>{
+ let deleteMsg = e.selectBuiltInGrouping
+ deleteMsg.forEach(deleteElement => {
+ e.facilityItems.splice(e.facilityItems.findIndex(item=>item.name==deleteElement.name),1)
+ });
+ e.selectBuiltInGrouping = []
+
+ }) //http
+ } //if
+ }); //forEach
+ }
+ } else {
+ const config = new MatSnackBarConfig();
+ config.verticalPosition = 'top';
+ config.duration = 3000
+ this.snackBar.open('请选择内置分组项','确定',config);
+ }
+ }
+
+ //保存单位消防设施可选分组
+ editCompanyOptional (e,item) {
+ e.stopPropagation() //阻止冒泡
+ item.propertyInfos.forEach((element,index) => {
+ element.propertyValue = String(element.propertyValue)
+ if (index == item.propertyInfos.length-1 ) {
+ this.http.post('/api/CompanyOptionalGroups',item).subscribe(data=>{
+ const config = new MatSnackBarConfig();
+ config.verticalPosition = 'top';
+ config.duration = 3000
+ this.snackBar.open('数据更新成功','确定',config);
+ })
+ } //if
+ });
+ }
+
+ //单位消防设施切换展开面板
+ SwitchBoard (e) {
+ e.expanded = !e.expanded
+ if (e.expanded) { //展开面板展开时
+ if (e.isEachFloor) { //逐层统计时
+ let data = this.companyEachDetails[e.name]
+ if (data) {
+ e.loopTable = []
+ data.forEach(item => {
+ let tableMsg = {name:item.name, header:[], body:[]}
+ item.assets[0].propertyInfos.forEach(element => { //表头
+ if (element.propertyType!=3) {
+ let unit = element.physicalUnit? '('+ element.physicalUnit +')' : '' //单位
+ tableMsg.header.push(element.propertyName+unit)}
+ });
+ item.assets.forEach(element => { //表格内容
+ let everyBody = {}
+ element.propertyInfos.forEach((elements,index) => {
+ if (elements.propertyType!=3 && elements.propertyName!='图片' && elements.propertyType!=6) {
+ let unit = elements.physicalUnit? '('+ elements.physicalUnit +')' : '' //单位
+ everyBody[elements.propertyName+unit] = elements.propertyValue }
+ if (elements.propertyType==6) {
+ let unit = elements.physicalUnit? '('+ elements.physicalUnit +')' : '' //单位
+ everyBody[elements.propertyName+unit] = elements.propertyValue=='1'?'是':'否' }
+ if (elements.propertyType!=3 && elements.propertyName=='图片') {
+ let imgLength = []
+ element.propertyInfos.find(item=>{ if(item.propertyType==3){imgLength.push(item)} })
+ let unit = elements.physicalUnit? '('+ elements.physicalUnit +')' : '' //单位
+ everyBody[elements.propertyName+unit] = String(imgLength.length) }
+
+ }); //propertyInfos
+ tableMsg.body.push(everyBody)
+ }); //assets
+ e.loopTable.push(tableMsg)
+ });
+
+ } //data有数据时
+ } else { //非逐层统计时
+ let data = this.companyDetails[e.name]
+ if (data) {
+ e.header = []
+ e.body = []
+ data[0].propertyInfos.forEach(element => { //表头
+ if (element.propertyType!=3) {
+ let unit = element.physicalUnit? '('+ element.physicalUnit +')' : '' //单位
+ e.header.push(element.propertyName+unit)}
+ });
+ data.forEach(element => { //表格内容
+ let everyBody = {}
+ element.propertyInfos.forEach((elements,index) => {
+ if (elements.propertyType!=3 && elements.propertyName!='图片' && elements.propertyType!=6) {
+ let unit = elements.physicalUnit? '('+ elements.physicalUnit +')' : '' //单位
+ everyBody[elements.propertyName+unit] = elements.propertyValue }
+ if (elements.propertyType==6) {
+ let unit = elements.physicalUnit? '('+ elements.physicalUnit +')' : '' //单位
+ everyBody[elements.propertyName+unit] = elements.propertyValue=='1'?'是':'否' }
+ if (elements.propertyType!=3 && elements.propertyName=='图片') {
+ let imgLength = []
+ element.propertyInfos.find(item=>{ if(item.propertyType==3){imgLength.push(item)} })
+ let unit = elements.physicalUnit? '('+ elements.physicalUnit +')' : '' //单位
+ everyBody[elements.propertyName+unit] = String(imgLength.length) }
+
+ });
+ e.body.push(everyBody)
+ });
+
+ }
+ } //非逐层统计时
+
+
+
+ }
+ }
+
+
+
+ allBuildingGrouping:any; //所有建筑的消防设施 内置分组+可选分组
+ //获取所有建筑
+ getAllBuilding () {
+ let companyId = this.route.snapshot.queryParams.id
+ this.http.get('/api/Buildings',{params:{
+ companyId:companyId
+ }}).subscribe((data:any)=>{
+ this.allBuildingGrouping = data
+ if (this.allBuildingGrouping.length) { this.getAllBuildingFacilities() }
+ })
+ }
+
+ //获取所有建筑的消防设施
+ getAllBuildingFacilities () {
+ let companyId = this.route.snapshot.queryParams.id
+ this.allBuildingGrouping.forEach(element => {
+ let header = {buildingId: element.id, buildingType: element.buildingTypes[0].id,companyId:companyId}
+ this.http.get('/api/BuildingFacilities',{params:header}).subscribe(data=>{
+ element.buildingFacilityGroups = data[0].summary.buildingFacilityGroups
+ element.buildingOptionalGroups = data[0].summary.buildingOptionalGroups
+ element.buildingDetails = data[0].details
+ element.buildingEachDetails = data[0].eachDetails
+ element.buildingFacilityGroups.forEach((elements) => { //循环每个建筑内置分组项
+ elements.selectBuiltInGrouping = []
+ elements.facilityItems.forEach((newElement,index) => {
+ newElement.total = elements.facilityCount[index]
+ newElement.expanded = false });
+ });
+ })
+
+ });
+
+ }
+
+ //创建建筑消防设施内置分组项
+ addBuildingGrouping (e,item) {
+ let data = {buildingId: e.id, item}
+ let dialogRef = this.dialog.open(ImgsDataDetail2,{data});
+ dialogRef.afterClosed().subscribe(data=>{
+ if (data) { item.facilityItems.push(data) }
+ });
+ }
+
+ //保存建筑消防设施内置分组项
+ editBuildingGrouping (e,item) {
+ let companyId = this.route.snapshot.queryParams.id
+ let header = {companyId:companyId,buildingId:e.id, groupId:item.id}
+ let data = []
+ item.facilityItems.forEach((element,index) => {
+ let msg = {
+ isBuiltin: element.isBuiltin,
+ details: element.details,
+ name: element.name,
+ isEachFloor: element.isEachFloor,
+ order: element.order}
+ data.push(msg)
+ if (index==item.facilityItems.length-1) {
+ this.http.post('/api/BuildingFacilityItems/Batch',data,{params:header}).subscribe(data=>{
+ const config = new MatSnackBarConfig();
+ config.verticalPosition = 'top';
+ config.duration = 3000
+ this.snackBar.open('数据更新成功','确定',config);
+ }) }
+ }); //forEach
+
+ }
+
+ //删除建筑消防设施内置分组项
+ deleteBuildingGrouping (e,item) {
+ if (item.selectBuiltInGrouping.length) {
+ let isDelete = confirm('您确定要删除吗')
+ if (isDelete) {
+ let msg:any = `?buildingId=${e.id}&groupId=${item.id}`
+ item.selectBuiltInGrouping.forEach((element,index) => {
+ let data = `&name=${element.name}`
+ msg = msg + data
+ if (index === item.selectBuiltInGrouping.length-1) {
+ this.http.delete('/api/BuildingFacilityItems/Batch'+msg).subscribe(data=>{
+ let deleteMsg = item.selectBuiltInGrouping
+ deleteMsg.forEach(deleteElement => {
+ item.facilityItems.splice(item.facilityItems.findIndex(items=>items.name==deleteElement.name),1)
+ });
+ item.selectBuiltInGrouping = []
+
+ }) //http
+ } //if
+ }) //forEach
+ }
+ } else {
+ const config = new MatSnackBarConfig();
+ config.verticalPosition = 'top';
+ config.duration = 3000
+ this.snackBar.open('请选择内置分组项','确定',config);
+ }
+ }
+
+ //保存建筑消防设施可选分组
+ editBuildingOptional (e,item) {
+ let companyId = this.route.snapshot.queryParams.id
+ e.stopPropagation() //阻止冒泡
+ item.propertyInfos.forEach((element,index) => {
+ element.propertyValue = String(element.propertyValue)
+ if (index == item.propertyInfos.length-1 ) {
+ this.http.post('/api/BuildingOptionalGroups',item,{params:{
+ companyId :companyId
+ }}).subscribe(data=>{
+ const config = new MatSnackBarConfig();
+ config.verticalPosition = 'top';
+ config.duration = 3000
+ this.snackBar.open('数据更新成功','确定',config);
+ })
+ } //if
+ });
+ }
+
+ //建筑消防设施切换展开面板
+ SwitchBuildingBoard (item,e) {
+ e.expanded = !e.expanded
+ if (e.expanded) { //展开面板展开时
+ if (e.isEachFloor) { //逐层统计时
+ let data = item.buildingEachDetails[e.name]
+ if (data) {
+ e.loopTable = []
+ data.forEach(item => {
+ let tableMsg = {name:item.name, header:[], body:[]}
+ item.assets[0].propertyInfos.forEach(element => { //表头
+ if (element.propertyType!=3) {
+ let unit = element.physicalUnit? '('+ element.physicalUnit +')' : '' //单位
+ tableMsg.header.push(element.propertyName+unit)}
+ });
+ item.assets.forEach(element => { //表格内容
+ let everyBody = {}
+ element.propertyInfos.forEach((elements,index) => {
+ if (elements.propertyType!=3 && elements.propertyName!='图片' && elements.propertyType!=6) {
+ let unit = elements.physicalUnit? '('+ elements.physicalUnit +')' : '' //单位
+ everyBody[elements.propertyName+unit] = elements.propertyValue }
+ if (elements.propertyType==6) {
+ let unit = elements.physicalUnit? '('+ elements.physicalUnit +')' : '' //单位
+ everyBody[elements.propertyName+unit] = elements.propertyValue=='1'?'是':'否' }
+ if (elements.propertyType!=3 && elements.propertyName=='图片') {
+ let imgLength = []
+ element.propertyInfos.find(item=>{ if(item.propertyType==3){imgLength.push(item)} })
+ let unit = elements.physicalUnit? '('+ elements.physicalUnit +')' : '' //单位
+ everyBody[elements.propertyName+unit] = String(imgLength.length) }
+
+ }); //propertyInfos
+ tableMsg.body.push(everyBody)
+ }); //assets
+ e.loopTable.push(tableMsg)
+ });
+
+ } //data有数据时
+ } else { //非逐层统计时
+ let data = item.buildingDetails[e.name]
+ if (data) {
+ e.header = []
+ e.body = []
+ data[0].propertyInfos.forEach(element => { //表头
+ if (element.propertyType!=3) {
+ let unit = element.physicalUnit? '('+ element.physicalUnit +')' : '' //单位
+ e.header.push(element.propertyName+unit)}
+ });
+ data.forEach(element => { //表格内容
+ let everyBody = {}
+ element.propertyInfos.forEach((elements,index) => {
+ if (elements.propertyType!=3 && elements.propertyName!='图片' && elements.propertyType!=6) {
+ let unit = elements.physicalUnit? '('+ elements.physicalUnit +')' : '' //单位
+ everyBody[elements.propertyName+unit] = elements.propertyValue }
+ if (elements.propertyType==6) {
+ let unit = elements.physicalUnit? '('+ elements.physicalUnit +')' : '' //单位
+ everyBody[elements.propertyName+unit] = elements.propertyValue=='1'?'是':'否' }
+ if (elements.propertyType!=3 && elements.propertyName=='图片') {
+ let imgLength = []
+ element.propertyInfos.find(item=>{ if(item.propertyType==3){imgLength.push(item)} })
+ let unit = elements.physicalUnit? '('+ elements.physicalUnit +')' : '' //单位
+ everyBody[elements.propertyName+unit] = String(imgLength.length) }
+
+ });
+ e.body.push(everyBody)
+ });
+
+ }
+ } //非逐层统计时
+
+
+
+ }
+ }
+
+ //单位消防设施预览图片
+ previewImg (e) {
+ if (e.isEachFloor) { //逐层统计时
+ let newData = this.companyEachDetails[e.name]
+ if (newData) {
+ let data = {name:e.name, images:[]}
+ let imgName
+ newData.forEach(item => {
+ item.assets.forEach(element => {
+ element.propertyInfos.forEach( elements => {
+ if (elements.propertyName.includes('名称')) {imgName = elements.propertyValue}
+ if (elements.propertyType===3) {
+ elements.propertyName = imgName
+ data.images.push(elements)} });
+ });
+ }); //newDate
+
+ if (data.images.length) {
+ let dialogRef = this.dialog.open(ImagesData2,{width:'1350px',height:'700px',data}); //打开图片弹窗
+ } else {
+ const config = new MatSnackBarConfig();
+ config.verticalPosition = 'top';
+ config.duration = 3000
+ this.snackBar.open('暂无图片数据','确定',config);
+ }
+
+ } else{
+ const config = new MatSnackBarConfig();
+ config.verticalPosition = 'top';
+ config.duration = 3000
+ this.snackBar.open('暂无图片数据','确定',config); }
+ } else { //非逐层统计时
+ let newData = this.companyDetails[e.name]
+ let imgName
+ if (newData) {
+ let data = {name:e.name, images:[]}
+ newData.forEach(element => {
+ element.propertyInfos.forEach(elements => {
+ if (elements.propertyName.includes('名称')) {imgName = elements.propertyValue}
+ if (elements.propertyType===3) {
+ elements.propertyName = imgName
+ data.images.push(elements)} });
+ });
+ if (data.images.length) {
+ let dialogRef = this.dialog.open(ImagesData2,{width:'1350px',height:'700px',data}); //打开图片弹窗
+ } else {
+ const config = new MatSnackBarConfig();
+ config.verticalPosition = 'top';
+ config.duration = 3000
+ this.snackBar.open('暂无图片数据','确定',config);
+ }
+
+ } else {
+ const config = new MatSnackBarConfig();
+ config.verticalPosition = 'top';
+ config.duration = 3000
+ this.snackBar.open('暂无图片数据','确定',config); }
+ }
+
+ }
+
+ //建筑消防设施预览图片
+ previewBuildingImg (item,e) {
+ if (e.isEachFloor) { //逐层统计时
+ let newData = item.buildingEachDetails[e.name]
+ if (newData) {
+ let data = {name:e.name, images:[]}
+ let imgName
+ newData.forEach(item => {
+ item.assets.forEach(element => {
+ element.propertyInfos.forEach( elements => {
+ if (elements.propertyName.includes('名称')) {imgName = elements.propertyValue}
+ if (elements.propertyType===3) {
+ elements.propertyName = imgName
+ data.images.push(elements)} });
+ });
+ }); //newDate
+
+ if (data.images.length) {
+ let dialogRef = this.dialog.open(ImagesData2,{width:'1350px',height:'700px',data}); //打开图片弹窗
+ } else {
+ const config = new MatSnackBarConfig();
+ config.verticalPosition = 'top';
+ config.duration = 3000
+ this.snackBar.open('暂无图片数据','确定',config);
+ }
+
+ } else{
+ const config = new MatSnackBarConfig();
+ config.verticalPosition = 'top';
+ config.duration = 3000
+ this.snackBar.open('暂无图片数据','确定',config); }
+ } else { //非逐层统计时
+ let newData = item.buildingDetails[e.name]
+ let imgName
+ if (newData) {
+ let data = {name:e.name, images:[]}
+ newData.forEach(element => {
+ element.propertyInfos.forEach(elements => {
+ if (elements.propertyName.includes('名称')) {imgName = elements.propertyValue}
+ if (elements.propertyType===3) {
+ elements.propertyName = imgName
+ data.images.push(elements)}
+ });
+ });
+ if (data.images.length) {
+ let dialogRef = this.dialog.open(ImagesData2,{width:'1350px',height:'700px',data}); //打开图片弹窗
+ } else {
+ const config = new MatSnackBarConfig();
+ config.verticalPosition = 'top';
+ config.duration = 3000
+ this.snackBar.open('暂无图片数据','确定',config);
+ }
+
+ } else {
+ const config = new MatSnackBarConfig();
+ config.verticalPosition = 'top';
+ config.duration = 3000
+ this.snackBar.open('暂无图片数据','确定',config); }
+ }
+
+ }
+
+
+
+
+}
+
diff --git a/src/app/ui/fire-fighting-device-look/imagesdata.component.html b/src/app/ui/fire-fighting-device-look/imagesdata.component.html
new file mode 100644
index 0000000..534df3e
--- /dev/null
+++ b/src/app/ui/fire-fighting-device-look/imagesdata.component.html
@@ -0,0 +1,9 @@
+
+
{{data.name}}
+
+
+
+
{{item.propertyName}}
+
+
+
\ No newline at end of file
diff --git a/src/app/ui/fire-fighting-device-look/imagesdata.component.ts b/src/app/ui/fire-fighting-device-look/imagesdata.component.ts
new file mode 100644
index 0000000..5def2fe
--- /dev/null
+++ b/src/app/ui/fire-fighting-device-look/imagesdata.component.ts
@@ -0,0 +1,82 @@
+import { Component, OnInit, Inject } from '@angular/core';
+import { HttpClient } from '@angular/common/http';
+import {MatDialog, MatDialogRef, MAT_DIALOG_DATA} from '@angular/material/dialog';
+import Swiper from 'swiper';
+
+
+
+@Component({
+ selector: 'imagesdata',
+ templateUrl: './imagesdata.component.html',
+ styleUrls: ['./fire-fighting-device.component.scss']
+ })
+export class ImagesData2 {
+
+ constructor(private http: HttpClient,public dialogRef: MatDialogRef,@Inject(MAT_DIALOG_DATA) public data,public dialog: MatDialog) {}
+
+ ngOnInit(): void {
+ this.data.images.forEach(element => {
+ element.newImageUrl = `${element.propertyValue}?x-oss-process=image/resize,m_fill,h_170,w_299`
+ });
+ }
+
+ //查看大图
+ seeImage (index) {
+ let data = {
+ allImages:this.data.images,
+ imgIndex: index}
+ let dialogRef = this.dialog.open(previewBigImg2,
+ {width: '1600px',
+ height:'900px',data});
+ }
+
+}
+
+
+
+@Component({
+ selector: 'previewBigImg',
+ templateUrl: './previewImg.html',
+ styleUrls: ['../realistic-picture-look/realistic-picture.component.scss']
+})
+export class previewBigImg2 {
+
+ constructor(private http:HttpClient,public dialog: MatDialog,public dialogRef: MatDialogRef,
+ @Inject(MAT_DIALOG_DATA) public data) { }
+ testSwiper: Swiper;
+
+ ngOnInit(): void {
+ this.allImages = this.data.allImages
+ this.allImages.forEach(element => {
+ element.previewImageUrl = `${element.propertyValue}?x-oss-process=image/auto-orient,1` //处理图片URL地址
+ });
+ }
+
+ ngAfterViewInit() {
+ this.testSwiper = new Swiper('.swiper-container', {
+ lazy: true,
+ initialSlide: this.data.imgIndex,
+ direction: 'horizontal',
+ loop: false,
+
+
+
+ // 如果需要前进后退按钮
+ navigation: {
+ nextEl: '.swiper-button-next',
+ prevEl: '.swiper-button-prev',
+ }
+ });
+ }
+
+ allImages:any; //展示所有的图片
+ rotationAngle:number=0; //旋转角度
+
+ //旋转图片
+ rotate () {
+ this.rotationAngle = this.rotationAngle+90
+ if (this.rotationAngle === 360) {this.rotationAngle = 0}
+ }
+
+}
+
\ No newline at end of file
diff --git a/src/app/ui/fire-fighting-device-look/previewImg.html b/src/app/ui/fire-fighting-device-look/previewImg.html
new file mode 100644
index 0000000..cd20d6a
--- /dev/null
+++ b/src/app/ui/fire-fighting-device-look/previewImg.html
@@ -0,0 +1,17 @@
+图片详情
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ refresh
+
\ No newline at end of file
diff --git a/src/app/ui/key-site-look/key-site.component.html b/src/app/ui/key-site-look/key-site.component.html
new file mode 100644
index 0000000..8af5827
--- /dev/null
+++ b/src/app/ui/key-site-look/key-site.component.html
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
重点部位情况
+
+
+ 重点部位名称
+
+ {{element.name}}
+
+
+
+ 重点部位所在位置
+
+ {{element.position}}
+
+
+
+ 建筑结构
+
+ {{element.structure}}
+
+
+
+ 使用性质
+
+ {{element.nature}}
+
+
+
+ 主要危险性
+
+ {{element.hazards}}
+
+
+
+ 图片
+
+ 查看图片
+
+
+
+
+
+
暂无数据,请前往平面图进行相关数据录入
+
+
+
+
+
+
+
+
+
+
+
重点部位情况
+
+
+ 重点部位名称
+
+ {{element.name}}
+
+
+
+ 重点部位所在位置
+
+ {{element.position}}
+
+
+
+ 建筑结构
+
+ {{element.structure}}
+
+
+
+ 使用性质
+
+ {{element.nature}}
+
+
+
+ 主要危险性
+
+ {{element.hazards}}
+
+
+
+ 图片
+
+ 查看图片
+
+
+
+
+
+
暂无数据,请前往平面图进行相关数据录入
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/app/ui/key-site-look/key-site.component.scss b/src/app/ui/key-site-look/key-site.component.scss
new file mode 100644
index 0000000..3fbf2eb
--- /dev/null
+++ b/src/app/ui/key-site-look/key-site.component.scss
@@ -0,0 +1,58 @@
+.content {
+ width: 100%;
+ height: 90%;
+ padding: 10px;
+ overflow-y: auto;
+ .contentBox{
+ width: 100%;
+ height: 100%;
+ overflow-y: auto;
+ text-align: center;
+ margin: 0 auto;
+ }
+}
+table {
+ width: 90%;
+ margin: 15px auto;
+ text-align: center;
+ .cdk-header-cell {
+ text-align: center;
+ }
+}
+
+//重点提示
+.tips{
+ width: 75%;
+ height: 150px;
+ border: 1px solid black;
+ border-radius: 5px;
+ margin: 15px auto;
+ text-align: center;
+ padding: 25px;
+ textarea {
+ resize: none;
+ width: 100%;
+ height: 100%;
+ }
+}
+
+//预览图片旋转角度
+.rotateA {transform: rotate(90deg) scale(0.75);}
+.rotateB {transform: rotate(180deg)}
+.rotateC {transform: rotate(270deg) scale(0.75);}
+//预览图片
+.previewImgBox {
+ width: 1500px;
+ height: 700px;
+ text-align: center;
+ img{
+ width: auto;
+ height: auto;
+ max-width: 100%;
+ height: 100%;}
+}
+.previewImgBottom {
+ text-align: center;
+ height: 30px;
+ margin: 20px auto;
+}
diff --git a/src/app/ui/key-site-look/key-site.component.ts b/src/app/ui/key-site-look/key-site.component.ts
new file mode 100644
index 0000000..ba659df
--- /dev/null
+++ b/src/app/ui/key-site-look/key-site.component.ts
@@ -0,0 +1,173 @@
+import { Component, OnInit, ViewChild, Inject } from '@angular/core';
+import {HttpClient} from '@angular/common/http'
+import { MatDialogRef, MatDialog, MAT_DIALOG_DATA } from '@angular/material/dialog';
+import { MatSnackBar, MatSnackBarConfig } from '@angular/material/snack-bar';
+import { KeySiteImgs2 } from './keysiteimgs.component'
+import { ActivatedRoute } from '@angular/router';
+
+
+
+@Component({
+ selector: 'app-key-site-look',
+ templateUrl: './key-site.component.html',
+ styleUrls: ['./key-site.component.scss']
+})
+export class KeySiteLookComponent implements OnInit {
+
+ constructor(public http: HttpClient,public dialog: MatDialog,public snackBar: MatSnackBar,private route:ActivatedRoute,) { }
+
+ displayedColumns: string[] = ['mainname', 'position', 'construction', 'nature', 'danger', 'img'];
+
+ ngOnInit(): void {
+ this.getCompanyPostion()
+ this.getCompanyTips()
+ this.getAllBuilding()
+ }
+
+ allCompanyPosition:any = []; //所有单位重点部位
+ companyTips:any; //所有单位重点提示
+ companyInput:any; //单位重点提示数据
+ allBuilding:any = []; //所有建筑 + 建筑重点部位 + 建筑重点提示
+
+ //获取单位重点部位
+ getCompanyPostion () {
+ let id = {companyId:this.route.snapshot.queryParams.id}
+ this.http.get('/api/CompanyImportantLocations',{params:id}).subscribe(data=>{
+ this.allCompanyPosition = data
+ })
+ }
+
+ //获取单位重点提示
+ getCompanyTips () {
+ let id = {companyId:this.route.snapshot.queryParams.id}
+ this.http.get('/api/CompanyImportantTips',{params:id}).subscribe((data:any)=>{
+ if (data) {
+ this.companyTips = data
+ this.companyInput = data.details}
+ })
+ }
+
+ //获取所有建筑
+ getAllBuilding () {
+ let id = {companyId:this.route.snapshot.queryParams.id}
+ this.http.get('/api/Buildings',{params:id}).subscribe((data:any)=>{
+ if (data.length) {
+ this.allBuilding = data
+ this.allBuilding.forEach(element => {
+ element.position = [] //建筑重点部位
+ element.tips = null //建筑重点提示
+ element.companyInput = null }) //建筑重点提示数据
+ this.getAllBuildingPositon()
+ this.getAllBuildingTips()
+ }
+ })
+ }
+
+ //获取所有建筑重点部位
+ getAllBuildingPositon () {
+ this.allBuilding.forEach(element => {
+ let id = {buildingId:element.id}
+ this.http.get('/api/BuildingImportantLocations',{params:id}).subscribe(data=>{
+ element.position = data
+ })
+ });
+ }
+
+ //获取所有建筑重点提示
+ getAllBuildingTips () {
+ this.allBuilding.forEach(element => {
+ let id = {buildingId:element.id}
+ this.http.get('/api/BuildingImportantTips',{params:id}).subscribe((data:any)=>{
+ if (data) {
+ element.tips = data
+ element.companyInput = data.details}
+ })
+ });
+ }
+
+ //保存单位重点提示
+ Preservation () {
+ if (this.companyTips) { //编辑单位重点提示
+ let data = {
+ companyId: this.companyTips.companyId,
+ id: this.companyTips.id,
+ details: this.companyInput}
+ this.http.put(`/api/CompanyImportantTips/${this.companyTips.id}`,data).subscribe(data=>{
+ this.getCompanyTips()
+ const config = new MatSnackBarConfig();
+ config.verticalPosition = 'top';
+ config.duration = 3000
+ this.snackBar.open('数据修改成功','确定',config);
+ })
+ } else { //新增单位重点提示
+ let data = {
+ companyId: this.route.snapshot.queryParams.id,
+ id : "",
+ details: this.companyInput || ""}
+ this.http.post('/api/CompanyImportantTips',data).subscribe(data=>{
+ this.getCompanyTips()
+ const config = new MatSnackBarConfig();
+ config.verticalPosition = 'top';
+ config.duration = 3000
+ this.snackBar.open('数据修改成功','确定',config);
+ })
+ }
+ }
+
+ //保存建筑重点提示
+ PreservationBuilding (e) {
+ if (e.tips) { //编辑建筑重点提示
+ let data = {
+ buildingId: e.id,
+ id: e.tips.id,
+ details: e.companyInput}
+ this.http.put(`/api/BuildingImportantTips/${e.tips.id}`,data).subscribe(data=>{
+ this.toUpdate(e)
+ })
+ } else { //新增重点单位提示
+ let data = {
+ buildingId: e.id,
+ details: e.companyInput || ""}
+ this.http.post('/api/BuildingImportantTips',data).subscribe(data=>{
+ this.toUpdate(e)
+ })
+ }
+ }
+
+ //查看图片
+ seeImg (e) {
+ if (e.length) {
+ let data = e
+ const dialogRef = this.dialog.open(KeySiteImgs2, {//调用open方法打开对话框并且携带参数过去
+ width: '1600px',
+ height:'900px',data});
+ dialogRef.afterClosed().subscribe();
+ } else {
+ const config = new MatSnackBarConfig();
+ config.verticalPosition = 'top';
+ config.duration = 3000
+ this.snackBar.open('暂无图片数据','确定',config);
+ }
+ }
+
+ //封装方法获取更新当前tab页重点提示
+ toUpdate (e) {
+ let id = {buildingId:e.id}
+ this.http.get('/api/BuildingImportantTips',{params:id}).subscribe((data:any)=>{
+ if (data) {
+ this.allBuilding.forEach(element => {
+ if (element.id === e.id) {
+ element.tips = data
+ element.companyInput = data.details}
+ });
+ } // if
+ const config = new MatSnackBarConfig();
+ config.verticalPosition = 'top';
+ config.duration = 3000
+ this.snackBar.open('数据修改成功','确定',config);
+ })
+ }
+
+
+
+}
diff --git a/src/app/ui/key-site-look/keyimgdetail.component.html b/src/app/ui/key-site-look/keyimgdetail.component.html
new file mode 100644
index 0000000..e69de29
diff --git a/src/app/ui/key-site-look/keyimgdetail.component.ts b/src/app/ui/key-site-look/keyimgdetail.component.ts
new file mode 100644
index 0000000..655cf04
--- /dev/null
+++ b/src/app/ui/key-site-look/keyimgdetail.component.ts
@@ -0,0 +1,17 @@
+import { Component, OnInit, Inject } from '@angular/core';
+import { HttpClient } from '@angular/common/http';
+import {MatDialog, MatDialogRef, MAT_DIALOG_DATA} from '@angular/material/dialog';
+import { MatSnackBar } from '@angular/material/snack-bar';
+import Swiper from 'swiper';
+
+
+
+@Component({
+ selector: 'keyimgdetail',
+ templateUrl: './keyimgdetail.component.html',
+ styleUrls: ['./key-site.component.scss']
+ })
+export class KeyImgDetail {
+
+}
+
\ No newline at end of file
diff --git a/src/app/ui/key-site-look/keysiteimgs.component.html b/src/app/ui/key-site-look/keysiteimgs.component.html
new file mode 100644
index 0000000..992faec
--- /dev/null
+++ b/src/app/ui/key-site-look/keysiteimgs.component.html
@@ -0,0 +1,18 @@
+图片详情
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ refresh
+
\ No newline at end of file
diff --git a/src/app/ui/key-site-look/keysiteimgs.component.ts b/src/app/ui/key-site-look/keysiteimgs.component.ts
new file mode 100644
index 0000000..fb90d71
--- /dev/null
+++ b/src/app/ui/key-site-look/keysiteimgs.component.ts
@@ -0,0 +1,55 @@
+import { Component, OnInit, Inject ,ViewChild} from '@angular/core';
+import { HttpClient } from '@angular/common/http';
+import { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
+import Swiper from 'swiper';
+
+
+
+@Component({
+ selector: 'keysiteimgs',
+ templateUrl: './keysiteimgs.component.html',
+ styleUrls: ['./key-site.component.scss']
+ })
+
+export class KeySiteImgs2 {
+
+ constructor(private http:HttpClient,public dialog: MatDialog,public dialogRef: MatDialogRef,
+ @Inject(MAT_DIALOG_DATA) public data) { }
+ testSwiper: Swiper;
+
+ ngOnInit(): void {
+ this.allImages = []
+ this.data.forEach(element => {
+ element = `${element}?x-oss-process=image/auto-orient,1`
+ this.allImages.push(element)
+ });
+ }
+
+ ngAfterViewInit() {
+
+ this.testSwiper = new Swiper('.swiper-container', {
+ direction: 'horizontal',
+ loop: false,
+ lazy: true,
+ // 如果需要前进后退按钮
+ navigation: {
+ nextEl: '.swiper-button-next',
+ prevEl: '.swiper-button-prev',
+ }
+ });
+
+ }
+
+ allImages:any; //展示所有的图片
+ rotationAngle:number=0; //旋转角度
+
+ //旋转图片
+ rotate () {
+ this.rotationAngle = this.rotationAngle+90
+ if (this.rotationAngle === 360) {this.rotationAngle = 0}
+ }
+
+
+
+}
+
\ No newline at end of file
diff --git a/src/app/ui/realistic-picture-look/addRealPicture.html b/src/app/ui/realistic-picture-look/addRealPicture.html
new file mode 100644
index 0000000..542256f
--- /dev/null
+++ b/src/app/ui/realistic-picture-look/addRealPicture.html
@@ -0,0 +1,18 @@
+创建实景图分组
+
\ No newline at end of file
diff --git a/src/app/ui/realistic-picture-look/editRealPicture.html b/src/app/ui/realistic-picture-look/editRealPicture.html
new file mode 100644
index 0000000..820857d
--- /dev/null
+++ b/src/app/ui/realistic-picture-look/editRealPicture.html
@@ -0,0 +1,18 @@
+编辑实景图分组
+
\ No newline at end of file
diff --git a/src/app/ui/realistic-picture-look/previewImg.html b/src/app/ui/realistic-picture-look/previewImg.html
new file mode 100644
index 0000000..1cde6b9
--- /dev/null
+++ b/src/app/ui/realistic-picture-look/previewImg.html
@@ -0,0 +1,17 @@
+图片详情
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ refresh
+
\ No newline at end of file
diff --git a/src/app/ui/realistic-picture-look/realistic-picture.component.html b/src/app/ui/realistic-picture-look/realistic-picture.component.html
new file mode 100644
index 0000000..0f42fc6
--- /dev/null
+++ b/src/app/ui/realistic-picture-look/realistic-picture.component.html
@@ -0,0 +1,59 @@
+
+
+
+
+
+ folder {{item.name}}
+
+
+ 暂无数据
+
+
+
+
+
+
+
+
+
+
+
+
check_circle
+
+
图片名称:
+
+
保存
+
删除
+
+
+
暂无数据
+
+
+
+
+
+
+
diff --git a/src/app/ui/realistic-picture-look/realistic-picture.component.scss b/src/app/ui/realistic-picture-look/realistic-picture.component.scss
new file mode 100644
index 0000000..cfbc003
--- /dev/null
+++ b/src/app/ui/realistic-picture-look/realistic-picture.component.scss
@@ -0,0 +1,174 @@
+.content {
+ margin: 0 0 0 10px;
+ width: 100%;
+ height: 90%;
+ overflow-y: auto;
+ display: flex;
+ .leftBox {
+ flex: 15%;
+ padding-top: 10px;
+ .bank {
+ display: flex;
+ padding-left: 10px;
+ .mat-icon {margin-right: 15px;}
+ }
+ }
+ .rightBox {
+ border-left: 1px solid #999;
+ flex: 85%;
+ display: flex;
+ flex-direction: column;
+ .topBox {
+ flex: 5%; padding: 10px;
+ display: flex;
+ :first-child {flex: 85%;};
+ :last-child {flex: 15%;}
+ }
+ .bottomBox {
+ flex: 95%;
+ padding: 5px 0 0 25px;
+ overflow: auto;
+ .imgsBoxflex {
+ display: flex;
+ flex-direction: row;
+ flex-wrap: wrap;
+ }
+ }
+ }
+}
+
+//icon统一样式
+.mat-icon {
+ cursor:pointer;
+ width: 18px;
+ height: 18px;
+ vertical-align:top;
+ margin-right: 10px;
+}
+.title {margin-right: 30px;font-weight: 500; font-size: 18px;}
+
+.material {
+ cursor:pointer;
+ height: 30px;
+ font-size: 16px;
+ margin-top: 10px;
+ padding-left: 15px;
+ span {
+ max-width: 200px;
+ display: inline-block;
+ overflow: hidden;
+ text-overflow:ellipsis;
+ white-space: nowrap;
+ }
+ .btn {
+ color: #FFC122;
+ }
+}
+.imgBox{
+ width: 300px;
+ height: 200px;
+ margin: 0 35px 35px 0;
+ display: inline-block;
+ position: relative;
+ .fixedImg {
+ width: 100%;
+ height: 170px;
+ text-align: center;
+ margin-bottom: 3px;
+ img {
+ width: auto;
+ height: auto;
+ max-width: 100%;
+ height: 100%;
+ cursor:pointer;
+ }
+ }
+ input{
+ font-size:12px;
+ width: 100px;
+ height:18px;
+ border-radius:3px;
+ border:1px solid #c8cccf;
+ outline:0;
+ text-align:left;
+ padding-left: 5px;
+ display:inline-block;
+ cursor: pointer;}
+ input::-webkit-input-placeholder{
+ color: #986655;
+ font-size: 12px;
+ }
+ a {display: inline-block;
+ width: 45px;
+ height: 24px;
+ line-height: 24px;
+ text-align: center;
+ border-radius: 3px;
+ background-color: #2196F3;
+ font-size: 14px;
+ color: #fff;}
+}
+.uploadFileFixed {
+ position: relative;
+ .uploadFile {
+ opacity:0;
+ display: inline-block;
+ width: 88px;
+ height: 36px;
+ position: absolute;
+ top: 0px;
+ left: 0px;
+ }
+}
+//分页
+.mat-paginator {
+ background-color: rgba(255,255,255,0);
+ padding-right: 10%;
+}
+.isLoading{
+ display: inline-block;
+ margin-left: 15px;
+ top: 8px;
+}
+
+//左侧实景图文件样式
+.leftFile {
+ background-color: rgba(225,225,225,0.8);
+}
+//选中图片样式
+.selectImg {
+ -webkit-filter: drop-shadow(0px 0px 5px #000);
+ filter: drop-shadow(0px 0px 5px #000);
+ border: 1px solid red;
+}
+.checkedImg {
+ position: absolute;
+ top: 1px;
+ right: 1px;
+ color:#00FF00;
+ font-size: 30px;
+ z-index: 999;
+}
+//预览图片旋转角度
+.rotateA {transform: rotate(90deg) scale(0.75);}
+.rotateB {transform: rotate(180deg)}
+.rotateC {transform: rotate(270deg) scale(0.75);}
+
+
+
+//预览图片
+.previewImgBox {
+ width: 1500px;
+ height: 700px;
+ text-align: center;
+ img{
+ width: auto;
+ height: auto;
+ max-width: 100%;
+ height: 100%;}
+}
+.previewImgBottom {
+ text-align: center;
+ height: 30px;
+ margin: 20px auto;
+}
diff --git a/src/app/ui/realistic-picture-look/realistic-picture.component.ts b/src/app/ui/realistic-picture-look/realistic-picture.component.ts
new file mode 100644
index 0000000..cf1dc66
--- /dev/null
+++ b/src/app/ui/realistic-picture-look/realistic-picture.component.ts
@@ -0,0 +1,410 @@
+import { Component, OnInit, Inject, ViewChild } from '@angular/core';
+import { HttpClient } from '@angular/common/http';
+import { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
+import { FileUploader } from 'ng2-file-upload';
+import { MatPaginator } from '@angular/material/paginator';
+import { MatSnackBar, MatSnackBarConfig } from '@angular/material/snack-bar';
+import Swiper from 'swiper';
+import { Router,ActivatedRoute } from '@angular/router'
+
+@Component({
+ selector: 'app-realistic-picture-look',
+ templateUrl: './realistic-picture.component.html',
+ styleUrls: ['./realistic-picture.component.scss']
+})
+export class RealisticPictureLookComponent implements OnInit {
+ uploader:FileUploader = new FileUploader({ //初始化上传文件
+ url: `/api/Objects/PlanPlatform/${this.route.snapshot.queryParams.id}/RealImgs`,
+ method: "POST",
+ itemAlias: "uploadedfile",
+ autoUpload: false,
+ removeAfterUpload:true,
+ });
+
+ constructor(private router:Router,private route:ActivatedRoute,private http:HttpClient,public dialog: MatDialog,public snackBar: MatSnackBar) { }
+
+ ngOnInit(): void {
+ let companyId = this.route.snapshot.queryParams.id
+ this.http.get('/api/RealityImageGroups',{params:{
+ companyId : companyId
+ }}).subscribe((data:any)=>{
+ this.allRealPicture = data
+ this.selectReal = data[0]
+ this.getAllRealPicture()
+ })
+ }
+
+ companyId:any; //单位编号
+ allRealPicture:any=[]; //所有实景图文件
+ selectReal:any; //选中的实景图文件
+ selectRealIndex:number=0; //选中的实景图文件下标
+ allImages:any=[]; //实景图文件对应所有的实景图
+ isDownload:boolean = false; //是否批量下载
+ downloadList:any = []; //选中需要下载的图片
+
+ //分页
+ @ViewChild(MatPaginator, {static: true})
+ paginator: MatPaginator;
+ length:any; //共多少条数据
+ pageSize:any = '12'; //每页条数
+ pageSizeOptions: number[] = [12] //设置每页条数
+ PageNumber:any; //第几页
+
+ //分页切换
+ chagePage (e) {
+ this.PageNumber = e.pageIndex+1
+ this.getAllRealPicture()
+ }
+
+ //获取所有实景图分组
+ getAllGrouping () {
+ let companyId = this.route.snapshot.queryParams.id
+ this.http.get('/api/RealityImageGroups',{params:{
+ companyId : companyId
+ }}).subscribe((data:any)=>{
+ this.allRealPicture = data
+ this.selectReal = data[this.selectRealIndex]
+ })
+ }
+
+ //获取实景图分组对应实景图
+ getAllRealPicture () {
+ if (this.selectReal) {
+ let data ={
+ groupId: this.selectReal.id,
+ PageNumber: this.PageNumber || 1,
+ pageSize: this.pageSize,
+ }
+ this.http.get('/api/RealityImages',{params:data}).subscribe((data:any)=>{
+ this.allImages = data.items
+ this.length = data.totalCount
+ this.pageSize = data.pageSize
+ this.downloadList = []
+ this.allImages.forEach(element => { //每张图片设置选中状态为false
+ element.newImageUrl = `/api/Objects/PlanPlatform/${element.imageUrl}?x-oss-process=image/resize,m_fill,h_170,w_299` //处理图片URL地址
+ element.checked = false //图片是否选中布尔值
+ element.nameStart = element.name.substring(0,element.name.lastIndexOf(".")); //图片名称前缀
+ element.nameEnd = element.name.substring(element.name.lastIndexOf("."),element.name.length); //图片名称后缀
+ });
+
+ })
+ }
+ }
+
+ //切换左侧实景图文件
+ changeReal (e,index) {
+ if (this.selectRealIndex != index) {
+ this.selectReal = e
+ this.selectRealIndex = index
+ this.isDownload = false
+ this.downloadList = []
+ this.getAllRealPicture()
+ }
+ }
+
+ //选择批量下载
+ download () {
+ this.isDownload = !this.isDownload
+ if (!this.isDownload) { //取消批量下载时数组清空
+ this.allImages.forEach(element => {element.checked = false});
+ this.downloadList = []
+ }
+ }
+
+ // 预览图片---批量选择图片
+ operation (e,index) {
+ if (this.isDownload) { //批量选择图片
+ e.checked = !e.checked
+ if (e.checked==true) {this.downloadList.push(e)}
+ else {this.downloadList.splice(this.downloadList.findIndex(item => item.id === e.id), 1)}
+ } else { //预览图片
+ let data = {
+ allImages:this.allImages,
+ imgIndex: index}
+ let dialogRef = this.dialog.open(previewImg3,
+ {width: '1600px',
+ height:'900px',data});
+ dialogRef.afterClosed().subscribe();
+ }
+
+ }
+
+ //新建实景图文件
+ addReal () {
+
+ }
+
+ //编辑实景图文件
+ editReal () {
+
+ }
+
+ //删除实景图文件
+ delete () {
+ let companyId = this.route.snapshot.queryParams.id
+ if (this.selectReal) {
+ let isDelete = confirm('您确定要删除吗')
+ if (isDelete) {
+ this.http.delete(`/api/RealityImageGroups/${this.selectReal.id}`).subscribe(data=>{
+ this.http.get('/api/RealityImageGroups',{params:{
+ companyId : companyId
+ }}).subscribe((data:any)=>{
+ this.allRealPicture = data
+ this.selectReal = data[this.selectRealIndex]
+ this.allImages = []
+ this.getAllRealPicture()
+ })
+ })
+ }
+ }
+ }
+
+
+
+ //实景图修改
+ preservationImg (e) {
+ let data = {
+ id:e.id,
+ name:e.nameStart+e.nameEnd,
+ imageUrl:e.imageUrl,
+ realityImageGroupId:e.realityImageGroupId
+ }
+ this.http.put(`/api/RealityImages/${e.id}`,data).subscribe(data=>{
+ this.getAllRealPicture()
+ const config = new MatSnackBarConfig();
+ config.verticalPosition = 'top';
+ config.duration = 3000
+ this.snackBar.open('图片修改成功','确定',config);
+ })
+ }
+
+ //实景图删除
+ deleteImg (e) {
+ let isDelete = confirm('您确定要删除吗')
+ if (isDelete) {
+ this.http.delete(`/api/RealityImages/${e.id}`).subscribe(data=>{
+ this.getAllRealPicture()
+ const config = new MatSnackBarConfig();
+ config.verticalPosition = 'top';
+ config.duration = 3000
+ this.snackBar.open('图片删除成功','确定',config);
+ })
+ this.http.delete(`/api/Objects/PlanPlatform/${e.imageUrl}`).subscribe(data=>{})
+ }
+ }
+
+
+
+
+
+ isLoading:boolean = false; //loading加载
+ //上传文件↓
+ file:any; //上传的文件
+ objectName:any; //上传对象名
+ uploadId:any; //上传分块上传事件编号
+
+ //change选择文件
+ uploadFile (e) {
+ if (this.selectReal) {
+ this.file = e.target.files[0] || null //上传的文件
+ let URL = window.URL.createObjectURL(this.file)
+ var img = new Image()
+ img.src = URL
+ let that = this
+ img.onload = function () {
+ if(img.width>=4096 || img.height>=5000 ){
+ const config = new MatSnackBarConfig();
+ config.verticalPosition = 'top';
+ config.duration = 3000
+ that.snackBar.open('请选择分辨率小于4096*5000的图片','确定',config);
+ that.uploader.clearQueue(); //清空input控件文件
+ (document.getElementById('uploadFile')).value = null //清空input框缓存
+ }else{ that.startUploading() }
+ } //onload
+ } else {
+ const config = new MatSnackBarConfig();
+ config.verticalPosition = 'top';
+ config.duration = 3000
+ this.snackBar.open('请选择或创建实景图文件夹','确定',config);
+ this.uploader.clearQueue(); //清空input控件文件
+ (document.getElementById('uploadFile')).value = null //清空input框缓存
+ }
+ }
+
+ //上传文件
+ startUploading () {
+ let file = this.file || null //获取上传的文件
+ let fileSize = file.size || null //上传文件的总大小
+ let shardSize = 5 * 1024 * 1024 //5MB一个分片
+ let maxdSize = 20 * 1024 * 1024 //限制20MB
+
+ if (file && fileSize<=shardSize) { //上传文件<=5MB时
+ this.uploader.queue[0].upload();//开始上传
+ this.uploader.queue[0].onSuccess = (response, status, headers) => {
+ if (status == 201) { // 上传文件成功,上传文件后获取服务器返回的数据
+ let tempRes = JSON.parse(response);
+ this.objectName = tempRes.objectName
+ this.addRealImg()
+ }else { // 上传文件后获取服务器返回的数据错误
+ let tempRes = JSON.parse(response);
+ }};
+ } else if (file && fileSize>shardSize && fileSize5MB时,分块上传
+ let data = {filename: file.name}
+ this.isLoading = true
+ this.http.post(`/api/NewMultipartUpload/PlanPlatform/${this.companyId}/RealImgs`,{},{params:data}).subscribe((data:any)=>{ //初始化分段上传
+ this.objectName = data.objectName
+ this.uploadId = data.uploadId
+ this.subsectionUploading()
+ })
+ }
+
+ }
+
+ PartNumberETag:any=[]; //每次返回需要保存的信息
+ //开始分段上传
+ async subsectionUploading () {
+ let file = this.file || null //获取上传的文件
+ let fileSize = file.size || null //上传文件的总大小
+ let shardSize = 5 * 1024 * 1024 //5MB一个分片
+ let allSlice = Math.ceil(fileSize / shardSize) //总文件/5MB===共分多少段
+
+ for (let i = 0;i < allSlice;i++) { //循环分段上传
+ let start = i * shardSize //切割文件开始位置
+ let end = Math.min(fileSize, start + shardSize); //切割文件结束位置
+ let formData = new FormData()
+ formData.append("file",file.slice(start, end))
+
+ //同步写法实现异步调用
+ let result = await new Promise((resolve, reject) => {
+ // await 需要后面返回一个 promise 对象
+ this.http.post(`/api/MultipartUpload/PlanPlatform/${this.objectName}?uploadId=${this.uploadId}&partNumber=${i+1}`,formData).subscribe((data:any)=>{
+ let msg = {
+ "partNumber":data.partNumber || null,
+ "eTag": data.eTag || null}
+ resolve(msg) // 调用 promise 内置方法处理成功
+ })
+ });
+ this.PartNumberETag.push(result)
+ if (this.PartNumberETag.length === allSlice) {this.endUploading()}
+ }//for循环
+
+ }
+
+ //完成分块上传
+ endUploading () {
+ let data = this.PartNumberETag
+ let paramsData = {uploadId:this.uploadId}
+ this.http.post(`/api/CompleteMultipartUpload/PlanPlatform/${this.objectName}`,data,{params:paramsData}).subscribe(data=>{
+ this.addRealImg() //上传完成后,发送请求创建实景图
+ this.isLoading = false
+ this.uploader.clearQueue(); //清空input控件文件
+ this.PartNumberETag =[] //清空保存返回的信息
+ })
+ }
+
+ //上传图片成功后获取url地址发送请求创建实景图
+ addRealImg () {
+ let data = {
+ name: this.file.name,
+ imageUrl:this.objectName,
+ realityImageGroupId: this.selectReal.id,
+ }
+ this.http.post('/api/RealityImages',data).subscribe(data=>{
+ (document.getElementById('uploadFile')).value = null //清空input框缓存
+ this.getAllRealPicture()
+ const config = new MatSnackBarConfig();
+ config.verticalPosition = 'top';
+ config.duration = 3000
+ this.snackBar.open('图片上传成功','确定',config);
+ })
+ }
+
+
+
+ //批量下载↓
+ //开始下载
+ async batchDownload () {
+ if (this.downloadList.length) { //开始批量循环下载
+ this.isLoading = true
+ for (let i=0;i{
+ this.http.get(`/api/Objects/PlanPlatform/${this.downloadList[i].imageUrl}`,{responseType: 'blob'},).subscribe(data=>{
+ let url = window.URL.createObjectURL(new Blob([data])); //createObjectURL创建一个下载Blob的url地址
+ let link = document.createElement("a");
+ link.style.display = "none";
+ link.href = url;
+ link.setAttribute("download", this.downloadList[i].name);
+ document.body.appendChild(link);
+ link.click();
+ result('success')})
+ })
+ if(i == this.downloadList.length-1) { //判断是否下载完毕
+ this.isLoading = false
+ this.isDownload = false
+ this.allImages.forEach(element => {element.checked = false});
+ this.downloadList = []}
+
+ } //for循环
+ } else {
+ const config = new MatSnackBarConfig();
+ config.verticalPosition = 'top';
+ config.duration = 3000
+ this.snackBar.open('请选择图片','确定',config);}
+ }
+
+
+
+
+
+}
+
+
+
+//预览图片组件
+@Component({
+ selector: 'app-previewImg',
+ templateUrl: './previewImg.html',
+ styleUrls: ['./realistic-picture.component.scss']
+})
+export class previewImg3 {
+
+ constructor(private http:HttpClient,public dialog: MatDialog,public dialogRef: MatDialogRef,
+ @Inject(MAT_DIALOG_DATA) public data) { }
+ testSwiper: Swiper;
+
+ ngOnInit(): void {
+ this.allImages = this.data.allImages
+ this.allImages.forEach(element => {
+ element.previewImageUrl = `/api/Objects/PlanPlatform/${element.imageUrl}?x-oss-process=image/auto-orient,1` //处理图片URL地址
+ });
+ }
+
+ ngAfterViewInit() {
+ this.testSwiper = new Swiper('.swiper-container', {
+ lazy: true,
+ initialSlide: this.data.imgIndex,
+ direction: 'horizontal',
+ loop: false,
+
+
+
+ // 如果需要前进后退按钮
+ navigation: {
+ nextEl: '.swiper-button-next',
+ prevEl: '.swiper-button-prev',
+ }
+ });
+ }
+
+ allImages:any; //展示所有的图片
+ rotationAngle:number=0; //旋转角度
+
+ //旋转图片
+ rotate () {
+ this.rotationAngle = this.rotationAngle+90
+ if (this.rotationAngle === 360) {this.rotationAngle = 0}
+ }
+
+}
+
+
diff --git a/src/app/ui/threetype-plan/threetype-plan.component.html b/src/app/ui/threetype-plan/threetype-plan.component.html
new file mode 100644
index 0000000..643b6b5
--- /dev/null
+++ b/src/app/ui/threetype-plan/threetype-plan.component.html
@@ -0,0 +1,3 @@
+
+
+
diff --git a/src/app/ui/threetype-plan/threetype-plan.component.scss b/src/app/ui/threetype-plan/threetype-plan.component.scss
new file mode 100644
index 0000000..e69de29
diff --git a/src/app/ui/threetype-plan/threetype-plan.component.spec.ts b/src/app/ui/threetype-plan/threetype-plan.component.spec.ts
new file mode 100644
index 0000000..2dd589e
--- /dev/null
+++ b/src/app/ui/threetype-plan/threetype-plan.component.spec.ts
@@ -0,0 +1,25 @@
+import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { ThreetypePlanComponent } from './threetype-plan.component';
+
+describe('ThreetypePlanComponent', () => {
+ let component: ThreetypePlanComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async(() => {
+ TestBed.configureTestingModule({
+ declarations: [ ThreetypePlanComponent ]
+ })
+ .compileComponents();
+ }));
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(ThreetypePlanComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/app/ui/threetype-plan/threetype-plan.component.ts b/src/app/ui/threetype-plan/threetype-plan.component.ts
new file mode 100644
index 0000000..0d0903e
--- /dev/null
+++ b/src/app/ui/threetype-plan/threetype-plan.component.ts
@@ -0,0 +1,15 @@
+import { Component, OnInit } from '@angular/core';
+
+@Component({
+ selector: 'app-threetype-plan',
+ templateUrl: './threetype-plan.component.html',
+ styleUrls: ['./threetype-plan.component.scss']
+})
+export class ThreetypePlanComponent implements OnInit {
+
+ constructor() { }
+
+ ngOnInit(): void {
+ }
+
+}
diff --git a/src/app/ui/ui-routing.module.ts b/src/app/ui/ui-routing.module.ts
index de79c0a..4f046a4 100644
--- a/src/app/ui/ui-routing.module.ts
+++ b/src/app/ui/ui-routing.module.ts
@@ -9,6 +9,11 @@ import { RealCasesComponent } from './real-cases/real-cases.component';
import { SimilarPlansComponent } from './similar-plans/similar-plans.component';
import { DataPushComponent } from './data-push/data-push.component';
import { BasicinfoLookComponent } from './basicinfo-look/basicinfo.component';
+import { AllaroundComponent } from './allaround/allaround.component';
+import { FireFightingDeviceLookComponent } from './fire-fighting-device-look/fire-fighting-device.component';
+import { KeySiteLookComponent } from './key-site-look/key-site.component';
+import { RealisticPictureLookComponent } from './realistic-picture-look/realistic-picture.component';
+import { ThreetypePlanComponent } from './threetype-plan/threetype-plan.component';
@@ -16,7 +21,12 @@ const routes: Routes = [
{ path: 'plan', component:DataPushComponent, //子级路由
children:[
{ path: 'planarGraph', component:planComponent},
- { path: 'basicInfo', component:BasicinfoLookComponent}
+ { path: 'basicInfo', component:BasicinfoLookComponent},
+ { path: 'allaround', component:AllaroundComponent},
+ { path: 'fire-fighting-device', component:FireFightingDeviceLookComponent},
+ { path: 'key-site', component:KeySiteLookComponent},
+ { path: 'realistic-picture', component:RealisticPictureLookComponent},
+ { path: '3DPlan', component:ThreetypePlanComponent},
]},
{ path: 'collectionTools', component:CollectionToolsComponent},
{ path: 'dangerous', component:DangerousComponent},
diff --git a/src/app/ui/ui.module.ts b/src/app/ui/ui.module.ts
index 77b39d6..9f34a9e 100644
--- a/src/app/ui/ui.module.ts
+++ b/src/app/ui/ui.module.ts
@@ -66,9 +66,18 @@ import { CountdownModule } from 'ngx-countdown';
import { DataPushComponent } from './data-push/data-push.component';
import { BasicinfoLookComponent } from './basicinfo-look/basicinfo.component';
import { LookMaster2 } from './basicinfo-look/lookmaster.component';
+import { AllaroundComponent } from './allaround/allaround.component';
+import { ImgDetails } from './allaround/imgdetails.component';
+import { FireFightingDeviceLookComponent } from './fire-fighting-device-look/fire-fighting-device.component';
+import { ImagesData2, previewBigImg2 } from './fire-fighting-device-look/imagesdata.component';
+import { ImgsDataDetail2 } from './fire-fighting-device-look/addGrouping.component';
+import { KeySiteLookComponent } from './key-site-look/key-site.component';
+import { KeySiteImgs2 } from './key-site-look/keysiteimgs.component';
+import { RealisticPictureLookComponent, previewImg3 } from './realistic-picture-look/realistic-picture.component';
+import { ThreetypePlanComponent } from './threetype-plan/threetype-plan.component';
@NgModule({
- declarations: [SafeHtmlPipe,GisComponent,UiComponent,PersonaldataComponent, ChangepasswordComponent,IsnoPipe,ConfirmpswDirective,TimePipe, CollectionToolsComponent,WorkingAreaComponent,CreateBuilding,EditBuilding,leftFunctionalDomainComponent,editPlaneFigureComponent,ViewDetails,saveOneDialog,saveTwoDialog,addDisposalNodeComponent,editDisposalNodeComponent, DisposalNodeComponent, DangerousComponent, SimilarPlansComponent, RealCasesComponent, PlanAssistanceComponent,planComponent, DataPushComponent,BasicinfoLookComponent,LookMaster2],
+ declarations: [SafeHtmlPipe,GisComponent,UiComponent,PersonaldataComponent, ChangepasswordComponent,IsnoPipe,ConfirmpswDirective,TimePipe, CollectionToolsComponent,WorkingAreaComponent,CreateBuilding,EditBuilding,leftFunctionalDomainComponent,editPlaneFigureComponent,ViewDetails,saveOneDialog,saveTwoDialog,addDisposalNodeComponent,editDisposalNodeComponent, DisposalNodeComponent, DangerousComponent, SimilarPlansComponent, RealCasesComponent, PlanAssistanceComponent,planComponent, DataPushComponent,BasicinfoLookComponent,LookMaster2,AllaroundComponent,ImgDetails,FireFightingDeviceLookComponent,ImagesData2,ImgsDataDetail2,KeySiteLookComponent,KeySiteImgs2,previewBigImg2,RealisticPictureLookComponent,previewImg3, ThreetypePlanComponent],
imports: [
CommonModule,