diff --git a/src/app/app-routing.module.ts b/src/app/app-routing.module.ts index 1b4c265..7b8bdbd 100644 --- a/src/app/app-routing.module.ts +++ b/src/app/app-routing.module.ts @@ -2,41 +2,32 @@ import { NgModule } from '@angular/core'; import { Routes, RouterModule } from '@angular/router'; import { LoginComponent } from './pages/login/login.component'; import { NavigationComponent } from './navigation/navigation.component'; -import { HomeComponent } from './home/home.component' +import { HomeComponent } from './ui/home/home.component' //路由守卫 import { AuthGuard } from './auth.guard' -import { MTokenK1Component } from './m-token-k1/m-token-k1.component' //K1秘钥 import { AddSixFamiliarComponent } from './ui/add-six-familiar/add-six-familiar.component'; import { TrainingRecordinfoComponent } from './ui/training-recordinfo/training-recordinfo.component'; - - const routes: Routes = [ {path:'',redirectTo:'login',pathMatch:'full'}, - { - path:'', - component:NavigationComponent, - canActivate: [AuthGuard],//守卫验证 - children:[ - {path:'ui',loadChildren:() => import('./ui/ui.module').then(m => m.UiModule)}, - {path:'keyUnit',loadChildren:() => import('./key-unit/key-unit.module').then(m => m.KeyUnitModule)}, - {path:'home',loadChildren:() => import('./pages/pages.module').then(m => m.PagesModule)}, - {path:'visualization',component: HomeComponent} - ] - }, + // { + // path:'', + // component:NavigationComponent, + // canActivate: [AuthGuard],//守卫验证 + // children:[ + // {path:'ui',loadChildren:() => import('./ui/ui.module').then(m => m.UiModule)}, + // {path:'keyUnit',loadChildren:() => import('./key-unit/key-unit.module').then(m => m.KeyUnitModule)}, + // ] + // }, {path:'addsixfamiliar', - component:AddSixFamiliarComponent}, + component:AddSixFamiliarComponent,canActivate: [AuthGuard],}, {path:'trainingrecordinfo', - component:TrainingRecordinfoComponent}, + component:TrainingRecordinfoComponent,canActivate: [AuthGuard],}, {path:'login', component:LoginComponent}, - - {path:'getNoMToken', - component:MTokenK1Component, canActivate: [AuthGuard],}, - //K1秘钥验证失败是跳转页面 {path:'home', component:HomeComponent,canActivate: [AuthGuard],}//守卫验证 ] diff --git a/src/app/app.module.ts b/src/app/app.module.ts index 56a0618..eea1f7b 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -19,7 +19,6 @@ import {CacheTokenService} from './http-interceptors/cache-token.service' import { TreeService } from'./http-interceptors/tree.service'; import { MTokenK1Component } from './m-token-k1/m-token-k1.component' //K1秘钥 import { CountdownModule } from 'ngx-countdown'; //倒计时插件 -import { KeyUnitModule } from './key-unit/key-unit.module'; @NgModule({ declarations: [ @@ -39,8 +38,7 @@ import { KeyUnitModule } from './key-unit/key-unit.module'; PagesModule, FormsModule, HttpClientModule, - CountdownModule, - KeyUnitModule + CountdownModule ], providers: [httpInterceptorProviders, CacheTokenService,TreeService], bootstrap: [AppComponent] diff --git a/src/app/key-unit/edit-unit-info/edit-unit-info.component.html b/src/app/key-unit/edit-unit-info/edit-unit-info.component.html index e0d9853..15ef7a7 100644 --- a/src/app/key-unit/edit-unit-info/edit-unit-info.component.html +++ b/src/app/key-unit/edit-unit-info/edit-unit-info.component.html @@ -54,7 +54,7 @@ - + diff --git a/src/app/key-unit/key-unit.module.ts b/src/app/key-unit/key-unit.module.ts index c536b4c..f41b0c5 100644 --- a/src/app/key-unit/key-unit.module.ts +++ b/src/app/key-unit/key-unit.module.ts @@ -74,11 +74,10 @@ import { FireFightingDeviceLookComponent } from './fire-fighting-device-look/fir import { ImagesData2, previewBigImg2 } from './fire-fighting-device-look/imagesdata.component'; import { ImgsDataDetail2 } from './fire-fighting-device-look/addGrouping.component'; import { LookMaster2 } from './basicinfo-look/lookmaster.component'; -import { UiModule } from '../../app/ui/ui.module' @NgModule({ declarations: [KeyUnitManagementComponent, EditUnitInfoComponent, ViewUnitDetailsComponent,CreateUnit,BasicinfoComponent,LookMaster,AddHouseInfo, EditPlanInfoComponent,BasicinfoLookComponent, ViewUnitDetailsPlanComponent,FunctionDivisionComponent,addPartition,addPartitionAttribute,AllaroundComponent,ImgDetails,RealisticPictureComponent,previewImg,addRealPicture,editRealPicture,KeySiteComponent,KeyImgDetail,KeySiteImgs,UploadingCADComponent,readFile,editFile,KeySiteLookComponent,KeySiteImgs2,FunctionDivisionLookComponent,RealisticPictureLookComponent,previewImg3,UploadingCADLookComponent,FireFightingDeviceComponent,ImagesData,previewBigImg,ImgsDataDetail,FireFightingDeviceLookComponent,ImagesData2,ImgsDataDetail2,previewBigImg2,LookMaster2,addPartitionAttribute2], - exports:[ViewUnitDetailsPlanComponent,BasicinfoComponent], + exports:[ViewUnitDetailsPlanComponent,BasicinfoComponent,FireFightingDeviceComponent], imports: [ CommonModule, KeyUnitRoutingModule, @@ -127,7 +126,6 @@ import { UiModule } from '../../app/ui/ui.module' FormsModule, CountdownModule, FileUploadModule, - UiModule ] }) export class KeyUnitModule { } diff --git a/src/app/ui/add-six-familiar/add-six-familiar.component.ts b/src/app/ui/add-six-familiar/add-six-familiar.component.ts index c0b0177..a922967 100644 --- a/src/app/ui/add-six-familiar/add-six-familiar.component.ts +++ b/src/app/ui/add-six-familiar/add-six-familiar.component.ts @@ -2,6 +2,7 @@ import { HttpClient } from '@angular/common/http'; import { Component, OnInit, Inject } from '@angular/core'; import { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog'; import { MatSnackBar, MatSnackBarConfig } from '@angular/material/snack-bar'; +import { Router,ActivatedRoute } from '@angular/router' @Component({ selector: 'app-add-six-familiar', templateUrl: './add-six-familiar.component.html', @@ -9,9 +10,11 @@ import { MatSnackBar, MatSnackBarConfig } from '@angular/material/snack-bar'; }) export class AddSixFamiliarComponent implements OnInit { - constructor(private http:HttpClient,public dialog: MatDialog,public snackBar: MatSnackBar) { } + constructor(private http:HttpClient,public dialog: MatDialog,public snackBar: MatSnackBar,private router:Router) { } title:String = "新增六熟悉记录" + + unitdata:any unitname:any address:any contactname:any @@ -25,6 +28,7 @@ export class AddSixFamiliarComponent implements OnInit { let dialogRef = this.dialog.open(SelectUnit); dialogRef.afterClosed().subscribe(data=>{ if(data){ + this.unitdata = data this.unitname = data.name this.address = data.address this.contactname = data.contacts @@ -34,9 +38,10 @@ export class AddSixFamiliarComponent implements OnInit { } //确定 ok(){ - console.log(this.unitname) + // ?id=${this.unitdata.id} + console.log(this.unitdata) if(this.unitname && this.address && this.contactname && this.contactphone && this.peoplenum && this.leadname){ - + this.router.navigate([`/trainingrecordinfo`],{queryParams:{'id':this.unitdata.id}}) }else{ const config = new MatSnackBarConfig(); config.verticalPosition = 'top'; @@ -46,7 +51,7 @@ export class AddSixFamiliarComponent implements OnInit { } //取消 cancel(){ - + this.router.navigate([`/home`]) } } diff --git a/src/app/ui/basicinfo/addhouseinfo.component.html b/src/app/ui/basicinfo/addhouseinfo.component.html new file mode 100644 index 0000000..3ce162d --- /dev/null +++ b/src/app/ui/basicinfo/addhouseinfo.component.html @@ -0,0 +1,25 @@ +
新增建筑
+
+ + + + {{input.value?.length || 0}}/20 + + + + + {{item.name}} + + + +
+ + +
+ +
\ No newline at end of file diff --git a/src/app/ui/basicinfo/addhouseinfo.component.ts b/src/app/ui/basicinfo/addhouseinfo.component.ts new file mode 100644 index 0000000..e888232 --- /dev/null +++ b/src/app/ui/basicinfo/addhouseinfo.component.ts @@ -0,0 +1,77 @@ +import { Component, OnInit, Inject } from '@angular/core'; +import {MatTreeFlatDataSource, MatTreeFlattener} from '@angular/material/tree'; +import {FlatTreeControl} from '@angular/cdk/tree'; +import { HttpClient } from '@angular/common/http'; +import {MatDialog, MatDialogRef, MAT_DIALOG_DATA} from '@angular/material/dialog'; +import {FormControl} from '@angular/forms'; +import { MatSnackBar } from '@angular/material/snack-bar'; + +@Component({ + selector: 'addhouseinfo', + templateUrl: './addhouseinfo.component.html', + styleUrls: ['./basicinfo.component.scss'] + }) + export class AddHouseInfo { + myControl = new FormControl(); + //注入MatDialogRef,可以用来关闭对话框 + //要访问对话框组件中的数据,必须使用MAT_DIALOG_DATA注入令牌 + constructor(private http: HttpClient,public dialogRef: MatDialogRef,@Inject(MAT_DIALOG_DATA) public data) {} + allunittype:any + onNoClick(): void { + this.dialogRef.close(); + } + ngOnInit(): void { + // console.log(this.data) + this.getallunittype() + } + getallunittype(){ + this.http.get("/api/BuildingTypes/Simple").subscribe(data=>{ + this.allunittype = data + }) + } + onSubmit(value){ + + this.http.get("/api/Buildings",{ + params:{ + companyId:this.data.unitId + } + }).subscribe((data:any)=>{ + this.data.allBuildings = data + let order + if(data.length == 0){ + order = 0 + }else{ + order = data[data.length - 1].order + 1 + } + + let buildingTypename = "" + this.allunittype.forEach(item => { + if(item.id == value.unittype){ + buildingTypename = item.name + } + }); + + this.http.post("/api/Buildings",{ + id: "", + name: value.name, + order: order, + enabled: true, + companyId: this.data.unitinfo.id, + buildingTypes: [ + { + id: value.unittype, + name: buildingTypename + } + ] + },{params:{ + companyId : this.data.unitId + }}).subscribe(data=>{ + this.dialogRef.close(data); + }) + }) + + + + } + } + \ No newline at end of file diff --git a/src/app/ui/basicinfo/basicinfo.component.html b/src/app/ui/basicinfo/basicinfo.component.html new file mode 100644 index 0000000..43f73ea --- /dev/null +++ b/src/app/ui/basicinfo/basicinfo.component.html @@ -0,0 +1,531 @@ +
+ + + + + + 单位信息 + keyboard_arrow_down + + +
+
+
+
+
+ * + 统一社会信用代码: + + + +
+
+ 统一社会信用代码格式不正确 +
+
+
+
+ * + 单位类型: + + + {{item.name}} + + +
+
+ * + 联系人: + + + +
+
+ * + 联系电话: + + + +
+
+ 电话号码格式不正确 +
+
+
+
+ * + 辖区中队: + + + +
+
+ + + +
  • {{node.name}}
  • +
    + + +
  • {{node.name}}
  • +
    +
    +
    +
    + * + 单位地址: + + + +
    +
    + 单位照片: +
    + +
    + +
    +
    + +
    +
    + +
    +
    + + + +
    +
    +
    +
    +
    + + + +
    +
    + + + +
    + + +
    +
    + 建筑名称: + + + + * +
    +
    + 建筑类型: + + + {{n.name}} + + + * +
    + +
    +

    {{item.name}}

    +
    + {{i.propertyName}}({{i.physicalUnit}}) + + + + + + + + + + + + + + + + * +
    + {{i.rulevalue}} +
    +
    +
    + +
    + +

    自定义信息

    +
    +
    + + +
    + + + + : + + + + * +
    +
    +
    + + +
    + +
    +
    + 建筑名称: + + + + * +
    +
    + 建筑类型: + + + {{n.name}} + + + * +
    +

    {{item.buildingBasicGroups[0].name}}

    +
    + {{i.propertyName}} ({{i.physicalUnit}}) + + + + + + + + + + + + + + + + * +
    + {{i.rulevalue}} +
    +
    +
    + + +
    +
    + +

    {{item.buildingBasicGroups[1].name}}

    +
    + + + + + + + + + + + + + + + + + + + + +
    + + + 装置区名称* + + 工艺流程* + + 火灾危险性* + + 灭火注意事项 + +
    +
    + +
    + +

    储罐信息

    +
    + + + + + +
    +
    +

    {{x[0].name}}

    +
    +
    + {{i.propertyName}} {{i.physicalUnit}}: + + + + + * +
    + +
    +

    {{x[1].name}}

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + 罐区 + + 罐区编号* + + 储存介质* + + 储罐类型* + + 容量(m³)* + + 直径(m)* + + 高度(m)* + + 顶盖形式 + + 浮盘材质 + + 浮盘类型 + + 泡沫产生器型号 + + 泡沫产生器形式 + + 是否设置氮封惰化保护装置 + + 防护堤高度(m)* + + 半固定泡沫灭火接口数量 + + 其它设施 + +
    +
    +
    +
    + + +
    + +

    自定义信息

    +
    +
    + + +
    + + + + : + + + + * +
    +
    + +
    + + +
    + + +
    + +
    +
    + +
    + +
    + +
    + +
    + + + + + + + + + diff --git a/src/app/ui/basicinfo/basicinfo.component.scss b/src/app/ui/basicinfo/basicinfo.component.scss new file mode 100644 index 0000000..c80c8c3 --- /dev/null +++ b/src/app/ui/basicinfo/basicinfo.component.scss @@ -0,0 +1,269 @@ +.topbox{ + height: 485px; + width: 100%; + // border-bottom: 1px solid black; + .mainbox{ + height: 100%; + position: relative; + .mainleft{ + width:800px; + height: 100%; + // background-color: yellow; + float: left; + .inputbox{ + width: 343px; + height: 58px; + margin:2px 6px; + float: left; + text-align: end; + } + .organizationbox{ + width:538px; + height: 200px; + background: white; + position: absolute; + top: 164px; + left:166px; + z-index: 100; + border: 1px solid grey; + overflow: auto; + li{ + list-style: none; + + } + mat-tree-node{ + cursor: pointer; + } + mat-tree-node:hover{ + background: rgba(225, 225, 225, 0.8); + } + } + .addbtn{ + width: 695px; + position: absolute; + bottom: -495px; + text-align: center; + margin-bottom:20px; + button{ + margin: 0 4px; + } + } + .uploadimg{ + width: 400px; + height: 200px; + float: left; + margin-top:12px; + position: relative; + margin-left: 80px; + cursor: pointer; + span{ + float: left; + } + // img{ + // float: left; + // } + .uploadingimg{ + width: 299px; + height: 170px; + // background: url('../../../assets/images/upload2.png') no-repeat center center; + + position: absolute; + top: 0px; + left: 79px; + border: 1px dashed gray; + border-radius:3px; + } + + } + .image{ + // position: absolute; + // top: 199px; + // left: 160px; + // width: 299px; + // height: 170px; + input{ + // width: 299px; + // height: 170px; + width: 190px; + margin-top: 160px; + cursor: pointer; + } + // opacity:0; + + } + } + .mainright{ + float: left; + width: 600px; + height: 400px; + // position: absolute; + // right: 170px; + + } + } +} +.bottombox{ + // height:400px; + width: 100%; + // background-color: skyblue; + + .bottomtitle{ + height: 60px; + // background-color: orange; + line-height: 60px; + border-top: 1px solid black; + border-bottom: 1px solid black; + } + .houseinfobox{ + // height:340px; + overflow: auto; + .addhouseinfo{ + float: left; + } + .infobtnbox{ + margin-left: 800px; + position: absolute; + top: 30px; + right: 75px; + button{ + width: 80px; + height: 40px; + margin: 0 12px; + margin-top: 15px; + } + } + .infotitle{ + font-size: 28px; + font-weight: 900; + margin-left: 180px; + } + .houseinfoinput{ + width: 393px; + text-align: end; + margin-left:240px; + } + } +} + +.btn{ + width: 100%; + text-align: center; + button{ + margin: 0 8px; + } +} +.mat-spinner{ + margin-top: 58px; + margin-left: 203px; +} +.mat-table{ + width: 100%; +} + +table{ + width: 1000px; + thead{ + tr{ + th{ + width: 60px; + display: block; + float: left; + + } + } + } + tbody{ + tr{ + + td{ + width: 60px; + display: block; + float: left; + text-align: center; + } + } + } +} + +.deviceinfo{ + // border-bottom: 1px solid black;; + padding-bottom: 60px; +} +.tankdetailinfo{ + // border-bottom: 1px solid black;; + padding-bottom: 35px; + table{ + th{ + text-align: center; + } + } +} +.tankinfo{ + display: block; + width: 100%; + // height: 45px; + text-align: center; +} +// .adddeviceinfo{ +// // position: absolute; +// // left: 0px; +// } +.submit1{ + margin-left: -66px !important; +} +textarea { + vertical-align: middle; + border-radius: 5px; + padding: 5px; + width: 600px; + height: 110px; + resize: none; + } + //预览图片旋转角度 + .img1{ + transform:rotate(90deg) scale(0.55); + height: 100%; +} +.img2{ + transform:rotate(180deg); + // height: 100%; +} +.img3{ + transform:rotate(270deg) scale(0.55); + // height: 100%; +} +.img4{ + transform:rotate(90deg) scale(1.3); + // height: 100%; +} +.img5{ + transform:rotate(180deg); + // height: 100%; +} +.img6{ + transform:rotate(270deg) scale(1.3); + // height: 100%; +} +.imgbox{ + text-align: center; + height: 750px; + img{ + max-width: 1500px; + max-height: 740px; + } +} +.previewImgBottom{ + text-align: center; +} +.alert-danger { + margin-top: -16px; + text-align: left; + padding-left: 77px; + font-size: 12px; + color: red; + } +.mat-expansion-panel{ + span{ + color: black; + } +} \ No newline at end of file diff --git a/src/app/ui/basicinfo/basicinfo.component.spec.ts b/src/app/ui/basicinfo/basicinfo.component.spec.ts new file mode 100644 index 0000000..81d25e7 --- /dev/null +++ b/src/app/ui/basicinfo/basicinfo.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { BasicinfoComponent } from './basicinfo.component'; + +describe('BasicinfoComponent', () => { + let component: BasicinfoComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ BasicinfoComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(BasicinfoComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/ui/basicinfo/basicinfo.component.ts b/src/app/ui/basicinfo/basicinfo.component.ts new file mode 100644 index 0000000..cf630d3 --- /dev/null +++ b/src/app/ui/basicinfo/basicinfo.component.ts @@ -0,0 +1,2031 @@ +import { Component, OnInit, Inject ,ViewChild} from '@angular/core'; +import { MatTreeFlatDataSource, MatTreeFlattener } from '@angular/material/tree'; +import { FlatTreeControl } from '@angular/cdk/tree'; +import { HttpClient,HttpHeaders, HttpEventType } from '@angular/common/http'; +import { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog'; +import { FormControl } from '@angular/forms'; +import { MatSnackBar ,MatSnackBarConfig} from '@angular/material/snack-bar'; +import format from 'date-fns/format'; +import { TreeService } from '../../http-interceptors/tree.service' +import { FileUploader, FileItem } from 'ng2-file-upload' +// import { House } from '../../interface' +import { AddHouseInfo } from './addhouseinfo.component' +import { DomSanitizer } from '@angular/platform-browser' +import { Injectable } from "@angular/core" +import { filter } from 'rxjs/operators'; +import { async } from '@angular/core/testing'; +import { MatTableDataSource } from '@angular/material/table'; +import { isNgTemplate } from '@angular/compiler'; +import * as _ from 'lodash'; +// import Swiper from 'swiper'; +import { LookMaster } from './lookmaster.component' +import { Router,ActivatedRoute } from '@angular/router' + +@Component({ + selector: 'app-basicinfo', + templateUrl: './basicinfo.component.html', + styleUrls: ['./basicinfo.component.scss'] +}) +export class BasicinfoComponent implements OnInit { + unitinfo:any={ + id: '', + name: '', //单位信息名字 + usci: '', //单位信用代码 + contacts: '', //联系人 + phone: '', //联系电话 + address: '', //单位地址 + imageUrl: '', //图片地址 + location: '', //单位地理位置 + modifiedTime: '', //信息修改时间 + organizationId: '', //所属组织机构 + organizationName: '', //组织机构名称 + buildingTypes: [ + { + id:'', + name:'' + } + ] + } + + uploader:FileUploader = new FileUploader({ //初始化上传事件 ng2-upload + url: `/api/Objects/PlanPlatform/${sessionStorage.getItem('companyId')}`, + method: "POST", + itemAlias: "uploadedfile", + autoUpload: false, + removeAfterUpload:true //上传之后是否在队列中移除,如果不移除就会出现无法上传第二次的情况 + }); + + + + + private _transformer = (node, level: number) => { //初始化tree + return { + expandable: !!node.children && node.children.length > 0, + name: node.name, + level: level, + id: node.id, + parentId: node.parentId, + children: node.children + }; + } + treeControl = new FlatTreeControl(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); + + myControl = new FormControl(); + + isorganizationbox = false//控制辖区中队框的显示隐藏 + selectedorganization: any//所选的辖区中队 + selectedorganizationid:any //所选的辖区中队的id + highhouse = false//控制高层表单的显示 + houses: any = [] //存储当前单位的建筑信息 + defaultbuildingTypes :any //存储当前建筑的默认类型的id + buildingTypesname:any//存储当前建筑的默认类型name + buildingCustomData:any //存储当前建筑的自定义信息 + allunittype: any //所有单位类型 + allorganizing:any = [] //所有组织机构 + constructor(private router:Router,private route:ActivatedRoute,private http: HttpClient, private tree: TreeService, private sanitizer: DomSanitizer, public dialog: MatDialog,public snackBar: MatSnackBar) { } + + + unitId : any //当前单位id + ngOnInit(): void { + this.getallunittype() + this.getorganization() + this.getunitallbuilding() + this.unitId = this.route.snapshot.queryParams.id + sessionStorage.setItem("companyId",this.route.snapshot.queryParams.id); + } + //获得所有单位类型 + getallunittype() { + this.http.get("/api/BuildingTypes/Simple").subscribe(data => { + this.allunittype = data + }) + } + //获得所有组织机构 + getorganization() { + this.http.get('/api/Organizations').subscribe( + (data: any) => { + this.allorganizing = data; + this.dataSource.data = this.tree.toTree(data); + this.getunitinfo(); + } + ) + } + //获得当前单位的基本信息 + CompanyId + getunitinfo(){ + + this.http.get(`/api/Companies/${this.unitId}`).subscribe((data:any)=>{ + if(data.buildingTypes.length){ + sessionStorage.setItem('buildingTypeId',data.buildingTypes[0].id) + }else{ + sessionStorage.setItem('buildingTypeId',"") + } + let node + this.allorganizing.forEach(item => { + if(item.id == data.organizationId){ + node = item + } + }); + if(node){ + if(!node.parentId){ + this.selectedorganization = node.name + }else{ + let namearr = [node.name] + let targetId = node.parentId; // 临时变量 + for(let i = 0; i < node.level ; i++){ + this.allorganizing.forEach(item => { + if(item.id == targetId ){ + namearr.push(item.name) + targetId = item.parentId; // 临时变量更新没有副作用 + } + }); + } + namearr.reverse() + let str = '' + namearr.forEach(item=>{ + str += '/' + item + }) + this.selectedorganization = str.substr(1) + } + } + + this.unitinfo = data + this.selectedorganizationid = data.organizationId + if(data.imageUrl){ + this.imgsrc = data.imageUrl + } + if(data.buildingTypes[0]){ + this.defaultbuildingTypes = data.buildingTypes[0].id + this.buildingTypesname = data.buildingTypes[0].name + } + }) + } + //石油化工 装置信息 勾选框 + checkboxchange(item,e){ + if(item.buildingBasicGroups){ + item.buildingBasicGroups.forEach(item=>{ + if(item.name != "基本信息" && item.name != "装置信息"){ + item.submitted = e.checked + } + }) + } + } + + unitallbuilding:any = []//用于存储当前单位所有的建筑 + buildinginfoId:any = []//用于存储当前单位所有具体建筑的id + presentbuildinfoId:any // 用于存储当前单位第一个建筑的id + bigfor:any//循环(储罐信息+罐区信息)大组 + npdata:any = [] + newnpdata:any //用于存储石油化工 储罐信息/罐区情况的 datasource + + basicCategoryId:any //当前单位所有建筑中位于第一个的建筑id + deviceinfodata:any=[];//用于存储石油化工装置信息的数组 + zhuangzhiinfodatasource:any = [] //用于存储石油化工装置信息表格的数据来源 + newzhuangzhiinfodatasource:any= []//存储石油化工装置信息表格的 datasource形式 + devicedataSourcebox:any = [] //存储多个石油化工建筑的不同装置信息表格datasource + //在石油化工模板种点击增加装置信息 + adddeviceinfo(item){ + item.newzhuangzhiinfodatasource.push({ + name:"", + flow:"", + danger:"", + payattentionto:"" + }) + this.devicedataSourcebox[item.buildingId] = new MatTableDataSource(item.newzhuangzhiinfodatasource) + } + //在石油化工模板种点击减少装置信息 + removedeviceinfo(item){ + if(item.newzhuangzhiinfodatasource.length>1){ + item.newzhuangzhiinfodatasource.pop() + }else{ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('只剩一行,无法删除','确定',config); + } + this.devicedataSourcebox[item.buildingId] = new MatTableDataSource(item.newzhuangzhiinfodatasource) + } + + //数据格式化函数 将原始数据映射转化为表格需要的datasource + formatHandle(list) { + const result = [{}]; // tag 是从1开始,因此预置索引为0的项 + list.forEach((item) => { + const { tag, propertyName, propertyValue } = item; + if (result[tag] === undefined) { // 初始化对象 + result[tag] = {}; + } + const fieldMap = { // 字段映射,实现自动映射 + '罐区': 'tank', + '储罐编号': 'tankid', + '储存介质': 'tankmedium', + '储罐类型': 'tanktype', + '容量': 'tankcapacity', + '直径': 'tankdiameter', + '高度': 'tankheight', + '顶盖形式': 'tanktectum', + '浮盘材质': 'tanktexture', + '浮盘类型': 'platetype', + '泡沫产生器型号': 'foamgeneratorid', + '泡沫产生器形式': 'foamgeneratortype', + '是否设置氮封惰化保护装置': 'isprotect', + '防护堤高度': 'fendinggroyneheight', + '半固定泡沫灭火接口数量': 'portnum', + '其它设施': 'else' + }; + result[tag][fieldMap[propertyName]] = propertyValue; + }); + result.shift(); // 移除预置的 索引为0 的值 + return result; + } + + //将模板信息加工成附带自定义属性的信息 + getunithouse(data,n,x){ //data是原始模板在此基础上加工 n是当前建筑名称和建筑id、 x是当前循环的item信息 + data[0].buildingtypeId = n.id + data[0].name = x.name + data[0].username =x.name + data[0].buildtype = n.name + data[0].tongyong = true + data[0].index = x.index + if(data[0].buildtype == "石油化工类"){ + data[0].tongyong = false + data[0].isshiyou = true + this.deviceinfodata = data[0].buildingBasicGroups[1].propertyInfos //存储装置信息的初始数据,需要转换成datasource形式 + var map = [] + this.deviceinfodata.forEach((item,index) => { + if(item.tag == ""){ + item.tag = "1" + } + if(!(item.tag in map)){ + map[item.tag] = [] + } + map[item.tag].push(item) + }); + let zhuangzhiinfodatasource = [] + map.forEach((item,index)=>{ + zhuangzhiinfodatasource[index] = {} + item.forEach(i => { + if (i.propertyName == "装置区名称") { + zhuangzhiinfodatasource[index].name = i.propertyValue + } + if (i.propertyName == "工艺流程") { + zhuangzhiinfodatasource[index].flow = i.propertyValue + } + if (i.propertyName == "火灾危险性") { + zhuangzhiinfodatasource[index].danger = i.propertyValue + } + if (i.propertyName == "灭火注意事项") { + zhuangzhiinfodatasource[index].payattentionto = i.propertyValue + } + }); + }) + this.newzhuangzhiinfodatasource =[] //数据去空 + zhuangzhiinfodatasource.forEach(item=>{ + if(item !== "" && item != undefined){ + this.newzhuangzhiinfodatasource.push(item) + } + }) + this.devicedataSourcebox[data[0].buildingId] = new MatTableDataSource(this.newzhuangzhiinfodatasource) + data[0].newzhuangzhiinfodatasource = this.newzhuangzhiinfodatasource + + + //把bigfor分组取出来 先大循环 (储罐信息---储罐信息/罐区情况)为一组 + let noemptybigfordata = data[0].buildingBasicGroups + // if(noemptybigfordata.length > 4){ + // noemptybigfordata.forEach((item,index) => { + // if(!item.submitted && item.name !="装置信息"){ + // noemptybigfordata.splice(index, 1) + // } + // }) + // } + let bigtankgroups = noemptybigfordata.slice(2) + // console.log("bigtankgroups",bigtankgroups) + let proportion = 2; //按照比例切割 + let num = 0; + let bigfor =[]; + for(let i=0;i{ + item[1].propertyInfos.forEach(item => { + if(item.tag == ""){ + item.tag = 1 + } + }); + item[1].propertyInfos = this.formatHandle(item[1].propertyInfos) + + }) + data[0].bigfor = bigfor + } + // if(data[0].buildtype == "地铁类"){ + // data[0].tongyong = true + // // data[0].ditie = true + // } + return data[0] + } + + //点击建筑自定义信息的checkbox + isCustomData = false + checkCustomData(e){ + this.isCustomData = e.checked + } + //增加自定义信息行数 + addCustomData(item){ + item.buildingCustomData.customProperties.push({ + name: "", + value: "" + }) + } + //删除自定义信息行数 + deleteCustomData(item){ + item.buildingCustomData.customProperties.pop() + } + //得到建筑信息数据并进行处理 + allBuildings:any + getunitallbuilding(){ + this.houses = [] + this.unitId = this.route.snapshot.queryParams.id + this.http.get("/api/Buildings",{ + params:{ + companyId:this.unitId + } + }).subscribe(async (data:any)=>{ // 获得当前单位所有的建筑 + this.allBuildings = data + // console.log(data) + if(data.length != 0){ + this.basicCategoryId = data[0].buildingTypes[0].id + this.presentbuildinfoId = data[0].id // 用于存储当前单位第一个建筑的id + for (let i = 0, length = data.length; i < length; i++) {//循环所有建筑 + const n = data[i]; + const index = i; + this.buildinginfoId.push(n.id) + const result = await new Promise((resolve) => { + this.http.get("/api/BuildingBasicInfos",{ // 循环请求当前单位建筑每一个建筑的信息保存到数组中 + params:{ + companyId :this.unitId, + buildingId:n.id, + buildingType:n.buildingTypes[0].id + } + }).subscribe((data)=>{ + //获得当前建筑自定义信息并且添加到item自定义属性上 + let _data = data + this.http.get("/api/BuildingCustomData",{params:{ + buildingId:n.id + }}).subscribe((data:any)=>{ + _data[0].buildingCustomData = data + if(data && data.customProperties.length != 0){ + _data[0].isCustomData = true + }else{ + _data[0].isCustomData = false + _data[0].buildingCustomData ={ + id: "", + customProperties: [ + { + name: "", + value: "" + } + ], + buildingId: _data[0].buildingId + } + } + }) + //为每个建筑添加自定义属性 + data[0].buildingtypeId = n.buildingTypes[0].id + data[0].name = n.name + data[0].username = n.name + data[0].buildtype = n.buildingTypes[0].name + data[0].tongyong = true + data[0].index = index + + if(data[0].buildtype == "石油化工类"){ + data[0].tongyong = false + data[0].isshiyou = true + let noemptydeviceArr = data[0].buildingBasicGroups[1].propertyInfos + noemptydeviceArr.forEach((item,index) => { + if(item.tag == ""){ + noemptydeviceArr.splice(index,1) + } + }); + this.deviceinfodata = noemptydeviceArr //存储装置信息的初始数据,需要转换成datasource形式 + var map = [] + this.deviceinfodata.forEach((item,index) => { + if(!data[0].buildingBasicGroups[1].submitted){ + if(item.tag == ""){ + item.tag = "1" + } + } + + if(!(item.tag in map)){ + map[item.tag] = [] + } + map[item.tag].push(item) + }); + let zhuangzhiinfodatasource = [] + map.forEach((item,index)=>{ + zhuangzhiinfodatasource[index] = {} + item.forEach(i => { + if (i.propertyName == "装置区名称") { + zhuangzhiinfodatasource[index].name = i.propertyValue + } + if (i.propertyName == "工艺流程") { + zhuangzhiinfodatasource[index].flow = i.propertyValue + } + if (i.propertyName == "火灾危险性") { + zhuangzhiinfodatasource[index].danger = i.propertyValue + } + if (i.propertyName == "灭火注意事项") { + zhuangzhiinfodatasource[index].payattentionto = i.propertyValue + } + }); + }) + this.newzhuangzhiinfodatasource =[] //数据去空 + zhuangzhiinfodatasource.forEach(item=>{ + if(item !== "" && item != undefined){ + this.newzhuangzhiinfodatasource.push(item) + } + }) + this.devicedataSourcebox[data[0].buildingId] = new MatTableDataSource(this.newzhuangzhiinfodatasource) + data[0].newzhuangzhiinfodatasource = this.newzhuangzhiinfodatasource + + //把bigfor分组取出来 先大循环 (储罐信息---储罐信息/罐区情况)为一组 + let noemptybigfordata = data[0].buildingBasicGroups + + let bigtankgroups = noemptybigfordata.slice(2) + let proportion = 2; //按照比例切割 + let num = 0; + let bigfor =[]; + for(let i=0;i{ + + item[1].propertyInfos = this.formatHandle(item[1].propertyInfos) + + }) + data[0].bigfor = bigfor + } + resolve(data[0]) //把数据传递出去 + }) + }) + this.houses.push(result) // 并且把他添加到 tab 总体数组中 + } + } + // console.log(666,this.houses) + }) + + } + + unitinfotemplate:any //存储选择不同单位类型时的模板信息 + displayedColumns: string[]=['name', 'flow','danger','payattentionto']; + displayedColumns2: string[]=['tank','tankid', 'tankmedium','tanktype','tankcapacity','tankdiameter', 'tankheight','tanktectum','tanktexture','platetype', 'foamgeneratorid','foamgeneratortype','isprotect','fendinggroyneheight', 'portnum','else']; + devicedataSource:any; //存储石油化工模板中的装置信息表格 + tankinfodatabox:any = [ + [] + ] + // dataSourceArr = [] + tankinfodata:any=[];//用于存储石油化工储罐信息的数组 + adddeviceinfo2(e,item){//点击加一行 视图上多一行 + item.bigfor[e][1].propertyInfos.push({ + tank:"", + tankid:"", + tankmedium:"", + tanktype:"", + tankcapacity:"", + tankdiameter:"", + tankheight:"", + tanktectum:"", + tanktexture:"", + platetype:"", + foamgeneratorid:"", + foamgeneratortype:"", + isprotect:"", + fendinggroyneheight:"", + portnum:"", + else:"" + }) + item.bigfor[e][1].propertyInfos = [...item.bigfor[e][1].propertyInfos] + } + removedeviceinfo3(e,item){//点击减一行 + var isdeleted = confirm("确定要删除末行吗?") + if(isdeleted){ + if(item.bigfor[e][1].propertyInfos.length > 1){ + item.bigfor[e][1].propertyInfos.pop() + }else{ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('只剩一行,无法删除','确定',config); + } + item.bigfor[e][1].propertyInfos = [...item.bigfor[e][1].propertyInfos] + } + + } + + + //增加储罐大分组 + //在石油化工模板种点击增加储罐信息 + //获得模板信息 + templateinfo:any + gettemplateinfo(typeid){ + + } + + addtankbox(item,bigkey){ + this.http.get("/api/BuildingBasicInfos",{ + params:{ + companyId : this.unitId, + buildingType:item.buildingtypeId + } + }).subscribe((data:any)=>{ + // console.log(1314,data) + // console.log(777,data[0]) + item.bigfor.push([ + { + id: "", + name: "罐区"+ (item.bigfor.length+ 1), + type: 0, + addMode: 2, + basicGroupId:'', + basicCategoryId: item.basicCategoryId, + buildingBasicId: null, + buildingId: item.buildingId, + companyId: this.unitinfo.id, + enabled: true, + order: item.bigfor.length+2, + propertyInfos:data[0].buildingBasicGroups[2].propertyInfos + }, + { + addMode: 2, + basicCategoryId:item.basicCategoryId, + buildingBasicId:null, + buildingId: item.buildingId, + companyId: this.unitinfo.id, + enabled: true, + basicGroupId:'', + id: "", + name: "罐区" + (item.bigfor.length+ 1) +"/储罐信息", + order: item.bigfor.length+3, + propertyInfos: [ + { + else: "", + fendinggroyneheight: "", + foamgeneratorid: "", + foamgeneratortype: "", + isprotect: "", + platetype: "", + portnum: "", + tank: "", + tankcapacity: "", + tankdiameter: "", + tankheight: "", + tankid: "", + tankmedium: "", + tanktectum: "", + tanktexture: "", + tanktype: "" + } + ], + type: 1 + } + + ]) + }) + + } + //移除储罐大分组 + removetankbox(item,bigkey){ + if(item.bigfor.length > 1){ + var isdeleted = confirm("确定要删除末尾储罐分组吗?") + if(isdeleted){ + item.bigfor.pop() + } + }else{ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('只剩唯一储罐,无法删除','确定',config); + } + } + + //新建建筑时把原始建筑数据放进来进行加工处理成可用数据 + async changebuildingdata(data){ + let n = data + let yyy + let result = await new Promise(resolve=>{ + this.http.get("/api/BuildingBasicInfos",{ // 需要请求建筑信息的模板 + params:{ + companyId : this.unitId, + buildingId:data.id, + buildingType:data.buildingTypes[0].id + } + }).subscribe((data)=>{//此时的data才是模板详细信息 + let _data = data + this.http.get("/api/BuildingCustomData",{params:{ //-----处理建筑自定义属性部分 + buildingId:n.id + }}).subscribe(data=>{ + if(data){ + _data[0].isCustomData = true //如果data存在则把自定义属性isCustomData设为true + _data[0].buildingCustomData = data //把建筑自定义信息赋给buildingCustomData自定义属性 + }else{ + _data[0].isCustomData = false + _data[0].buildingCustomData ={ //否则设为false,并且把自定义信息属性赋值为空 + id: "", + customProperties: [ + { + name: "", + value: "" + } + ], + buildingId: _data[0].buildingId + } + } + }) + data[0].buildingtypeId = n.buildingTypes[0].id + data[0].buildtype = n.buildingTypes[0].name + data[0].name = n.name + data[0].username = n.name + data[0].tongyong = true + data[0].index = this.houses.length ////////////////// + if(data[0].buildtype == "石油化工类"){ + data[0].tongyong = false + data[0].isshiyou = true //如果是石油化工则启用石油化工的模板 + this.deviceinfodata = data[0].buildingBasicGroups[1].propertyInfos //存储装置信息表格的初始数据,需要转换成datasource形式 + var map = [] + this.deviceinfodata.forEach((item,index) => { + if(item.tag == ""){ + item.tag = "1" + } + if(!(item.tag in map)){ + map[item.tag] = [] + } + map[item.tag].push(item) + }); + let zhuangzhiinfodatasource = [] + map.forEach((item,index)=>{ + zhuangzhiinfodatasource[index] = {} + item.forEach(i => { + if (i.propertyName == "装置区名称") { + zhuangzhiinfodatasource[index].name = i.propertyValue + } + if (i.propertyName == "工艺流程") { + zhuangzhiinfodatasource[index].flow = i.propertyValue + } + if (i.propertyName == "火灾危险性") { + zhuangzhiinfodatasource[index].danger = i.propertyValue + } + if (i.propertyName == "灭火注意事项") { + zhuangzhiinfodatasource[index].payattentionto = i.propertyValue + } + }); + }) + this.newzhuangzhiinfodatasource =[] //数据去空 + zhuangzhiinfodatasource.forEach(item=>{ + if(item !== "" && item != undefined){ + this.newzhuangzhiinfodatasource.push(item) + } + }) + this.devicedataSourcebox[data[0].buildingId] = new MatTableDataSource(this.newzhuangzhiinfodatasource) //强制渲染表格 + data[0].newzhuangzhiinfodatasource = this.newzhuangzhiinfodatasource + + + //把bigfor分组取出来 先大循环 (储罐信息---储罐信息/罐区情况)为一组 + let bigtankgroups = data[0].buildingBasicGroups.slice(2) + let proportion = 2; //按照比例切割 + let num = 0; + let bigfor =[]; + for(let i=0;i{ + item[1].propertyInfos.forEach(item => { + if(item.tag == ""){ + item.tag = 1 + } + }); + item[1].propertyInfos = this.formatHandle(item[1].propertyInfos) + }) + data[0].bigfor = bigfor + } + if(data[0].buildtype == "地铁类"){ + data[0].tongyong = true + // data[0].ditie = true + } + yyy = data[0] + resolve(yyy) + }) + }) + return result + } + + //点击+号 增加建筑 + addhouseinfo() { + const dialogRef = this.dialog.open(AddHouseInfo, {//调用open方法打开对话框并且携带参数过去 + width: '260px', + data: {unitinfo:this.unitinfo,allBuildings:this.allBuildings,unitId:this.unitId} + }); + dialogRef.afterClosed().subscribe( + async data => { + if(data){ + let newbuilding = await this.changebuildingdata(data) + this.houses.push(newbuilding) + } + } + ); + } + + //点击不同的tab选项 + selecttab(e) { + } + + FunData(e){//切割数组 + let proportion = 2; //按照比例切割 + let num = 0; + let _data =[]; + for(let i=0;i { + if(item.id == targetId ){ + namearr.push(item.name) + targetId = item.parentId; // 临时变量更新没有副作用 + } + }); + } + namearr.reverse() + let str = '' + namearr.forEach(item=>{ + str += '/' + item + }) + + this.selectedorganization = str.substr(1) + } +} + + //关闭辖区中队隐藏框 + closeorganizationbox() { + this.isorganizationbox = false + } + + //打开辖区中队隐藏框 + openorganizationbox() { + this.isorganizationbox = true + } + + hasChild = (_: number, node: any) => node.expandable; + + imgsrc = "../../../assets/images/upload.jpg" //没有上传图片时显示的图片,当上传后就会被替换,即保存时需要传的图片地址参数 + // imgsrc = "" + imgUrl = ""//返回来的图片地址后缀 + file: any; //上传的文件 + objectName: any; //上传对象名 + uploadId: any; //上传分块上传事件编号 + isspinner:boolean=false //控制进度圈的显示隐藏 + PartNumberETag: any = []; //分块上传每次返回需要保存的信息 + //change选择文件 + filechange(e) { + this.file = e.target.files[0] || null //上传的文件 + var reader = new FileReader(); + reader.readAsDataURL(this.file); + var image:any = new Image(); + reader.onload = function(){ + image.src = reader.result + } + setTimeout(() => { + if(image.width>=4096 || image.height>=5000 ){ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('请选择分辨率小于4096*5000的图片','确定',config); + }else{ + if(this.file){ + this.startUploading() + } + } + + }, 500); + } + //查看单位大图 + lookmaster(){ + const dialogRef = this.dialog.open(LookMaster, {//调用open方法打开对话框并且携带参数过去 + width: '1600px', + height:'900px', + data: {img:this.imgsrc} + }); + dialogRef.afterClosed().subscribe( + + ); + } + //上传文件 + startUploading() { + this.isspinner = true + let file = this.file || null //获取上传的文件 + let fileSize = file.size || null //上传文件的总大小 + let shardSize = 5 * 1024 * 1024 //5MB一个分片 + + if (file && fileSize <= shardSize) { //上传文件<=5MB时 + // this.upload() + let formData = new FormData() + formData.append("file",file) + this.http.post(`/api/Objects/PlanPlatform/${sessionStorage.getItem('companyId')}`,formData).subscribe((data:any)=>{ + this.isspinner = false + this.imgUrl = data.objectName + this.imgsrc = `/api/Objects/PlanPlatform/${this.imgUrl}?x-oss-process=image/resize,m_fill,h_170,w_299` + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('上传成功','确定',config); + }) + } else if (file && fileSize >= shardSize) { //上传文件>5MB时,分块上传 + + let data = { filename: file.name } + this.http.post(`/api/NewMultipartUpload/PlanPlatform/${this.unitinfo.id}`, {}, { params: data }).subscribe((data: any) => { //初始化分段上传 + this.objectName = data.objectName + this.uploadId = data.uploadId + this.subsectionUploading() + }) + } + } + + + + + //小于5MB不需要分块上传 + upload(){ + this.uploader.queue[0].upload();//开始上传 + this.uploader.queue[0].onSuccess = (response, status, headers) => { + // 上传文件成功 + if (status == 201) { + // 上传文件后获取服务器返回的数据 + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('上传成功','确定',config); + this.isspinner = false + let tempRes = JSON.parse(response); + this.imgUrl = tempRes.objectName + this.imgsrc = `/api/Objects/PlanPlatform/${this.imgUrl}?x-oss-process=image/resize,m_fill,h_170,w_299` + }else { + // 上传文件后获取服务器返回的数据错误 + } + }; + this.uploader.queue[0].onError = (response, status, headers) => { + if (status == 401) { + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('上传失败','确定',config); + } + }; + } + + //开始分块上传 + 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() + } + } + } + //完成分块上传 + endUploading() { + let data = this.PartNumberETag + let paramsData = { uploadId: this.uploadId } + this.http.post(`/api/CompleteMultipartUpload/PlanPlatform/${this.objectName}`, data, { params: paramsData }).subscribe(data => { + this.imgsrc = `/api/Objects/PlanPlatform/${this.objectName}?x-oss-process=image/resize,m_fill,h_170,w_299` + this.isspinner = false + this.PartNumberETag = [] + this.uploader.clearQueue(); //清空input控件文件 + }) + } + //删除具体建筑 + deletedbuilding(item){ + var isdeleted = confirm("确定要删除此建筑吗?") + if(isdeleted){ + //请求删除接口 + this.http.delete(`/api/Buildings/${item.buildingId}`).subscribe(data=>{ + + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('删除成功','确定',config); + this.houses.splice(this.houses.findIndex(items=>items==item),1) + }) + } + } + + //提交单位基本信息 + onSubmit(value,invalid,form) { + if(invalid){ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('请填写必填项','确定',config); + }else{ + sessionStorage.setItem('buildingTypeId',value.unittype) + let time =new Date() + let body = { + id: this.unitinfo.id, + name: this.unitinfo.name, + usci: value.creditcode, + contacts: value.linkman, + phone: value.linkphone, + address: value.unitaddress, + imageUrl: this.imgsrc, + location: { + x: 0, + y: 0 + }, + modifiedTime: time, + organizationId: this.selectedorganizationid, + organizationName: null, + buildingTypes: [ + { + id: value.unittype, + name: this.buildingTypesname + } + ] + } + this.http.put(`/api/Companies/${this.unitId}`,body).subscribe((data:any)=>{ //修改单位基本信息 + this.getunitinfo() + if(!this.houses.length){ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('单位基本信息保存成功,请填写单位建筑模板信息','确定',config); + // alert("单位基本信息保存成功,请填写单位建筑模板信息") + let order = 0 + let addbody = { //请求创建单位基本信息成功后 直接创建出一个主体建筑模板 + id: "",//即将要生成具体建筑的id + name: "主体建筑", + order: order, + enabled: true, + companyId: this.unitinfo.id, + buildingTypes: [ + { + id: value.unittype, + name: "" + } + ] + } + this.http.post("/api/Buildings",addbody,{params:{ + companyId : this.unitId + }}).subscribe(data=>{//首先创建建筑成功了,需要刷出当前建筑类型的模板 + this.getunitallbuilding() + }) + }else{ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('保存成功','确定',config); + } + }), + err=>{ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('请填写正确信息','确定',config); + } + } + + + } + selected:any + + isshowrule:boolean = false + rulevalue:any + inputchange(e,name,value,item){ + // console.log(e.target.value,name,value,item) + // console.log(item) + if(name == "≥"){ + if(Number(e.target.value)< Number(value)){ + item.isshowrule = true + item.rulevalue = `请输入≥${value}的值` + }else{ + item.isshowrule = false + } + } + if(name == "≤"){ + if(Number(e.target.value) > Number(value)){ + item.isshowrule = true + item.rulevalue = `请输入≤${value}的值` + }else{ + item.isshowrule = false + } + } + if(name == "Range"){ + let rangenum = value.split(",") + // console.log(rangenum) + if(Number(e.target.value) < Number(rangenum[0]) || Number(e.target.value) >= Number(rangenum[1])){ + item.isshowrule = true + item.rulevalue = `请输入位于${Number(rangenum[0])}和${Number(rangenum[1])-1}之间的值` + }else{ + item.isshowrule = false + } + } + } + + //切换建筑类型 + templatebuildtype(n ,item,key){ + this.http.get("/api/Buildings",{ + params:{ + companyId:this.unitId + } + }).subscribe((data:any)=>{ + this.allBuildings = data + this.http.put(`/api/Buildings/${item.buildingId}`,{ //修改当前建筑类型 + id: item.buildingId, + name: item.housename, + order: this.allBuildings[key].order, + enabled: true, + companyId: this.unitinfo.id, + buildingTypes: [ + { + id: n.id, + name: n.name + } + ] + },{ + params:{ + companyId : this.unitId + } + }).subscribe(data=>{ + this.http.get("/api/BuildingBasicInfos",{//请求当前建筑类型的模板信息保存到数组中 + params:{ + companyId :this.unitId, + buildingId:item.buildingId, + buildingType:n.id + } + }).subscribe(data=>{ + this.getunithouse(data,n,item) + this.houses[item.index] = data[0] + + let _data = data + this.http.get("/api/BuildingCustomData",{params:{ + buildingId:item.buildingId + }}).subscribe((data:any)=>{ + _data[0].buildingCustomData = data + if(data && data.customProperties.length != 0){ + _data[0].isCustomData = true + }else{ + _data[0].isCustomData = false + _data[0].buildingCustomData ={ + id: "", + customProperties: [ + { + name: "", + value: "" + } + ], + buildingId: _data[0].buildingId + } + } + }) + }) + }) + }) + + + } + + deviceinfo=[] //用于存储石头化工的第一个表格 + //提交单位模板信息 + onSubmit2(value,item,key,invalid){ + this.http.get("/api/Buildings",{ + params:{ + companyId:this.unitId + } + }).subscribe((data:any)=>{ + this.allBuildings = data + if(invalid){ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('请填写必填项','确定',config); + }else{ + this.http.put(`/api/Buildings/${item.buildingId}`,{ //(通用)只修改建筑名称和建筑类型 + id: item.buildingId, + name: value.housename, + order: this.allBuildings[key].order, + enabled: true, + companyId: this.unitinfo.id, + buildingTypes: [ + { + id: item.buildingtypeId, + name: item.buildtype + } + ] + },{params:{ + companyId : this.unitId + }}).subscribe((data:any)=>{ + this.houses[item.index].username = item.name + }, + err=>{ + alert("名称和类型保存失败") + }) + + if(value.checkbuilding){//如果勾选了自定义信息的checkbox + var CustomDataval = [] + for (const key in value) { + if (key.indexOf("CustomData") != -1) { + CustomDataval.push(value[key]) + } + } + let newCustomData = this.FunData(CustomDataval) + let newCustomDataval = [] + newCustomData.forEach(n=>{ + newCustomDataval.push({ + name:n[0], + value:n[1] + }) + }) + let CustomDatabody = { + id: "", + customProperties: newCustomDataval, + buildingId: item.buildingId + } + this.http.post("/api/BuildingCustomData",CustomDatabody,{params:{ + companyId :this.unitId, + buildingId:item.buildingId + }}).subscribe(data=>{ + + }, + err=>{ + alert("自定义信息保存失败") + }) + }else{ + let CustomDatabody = { + id: "", + customProperties: [], + buildingId: item.buildingId + } + this.http.post("/api/BuildingCustomData",CustomDatabody,{params:{ + companyId :this.unitId, + buildingId:item.buildingId + }}).subscribe(data=>{ + + }, + err=>{ + alert("自定义信息保存失败") + }) + } + + + if(item.buildtype != "石油化工类" && item.buildtype != "地铁类"){ + // console.log(this.houses[key]) + // console.log(value) + this.houses[key].buildingBasicGroups[0].propertyInfos.forEach(item => { + + if(item.propertyValue || item.propertyValue == 0){ + // item.propertyValue = "" + value[key] + item.propertyValue = String(item.propertyValue) + } + + }); + let newObj = _.cloneDeep(this.houses[key]) //把数据深拷贝取出来进行操作 + newObj.buildingBasicGroups[0].buildingId = item.buildingId + newObj.buildingBasicGroups[0].companyId = this.unitinfo.id + newObj.buildingBasicGroups[0].submitted = true //把是否提交过变为true + delete newObj.name + delete newObj.username + delete newObj.buildtype + delete newObj.tongyong + delete newObj.index + delete newObj.isCustomData + delete newObj.buildingCustomData + newObj.buildingBasicGroups[0].propertyInfos.forEach(item => { + delete item.isshowrule + delete item.rulevalue + }); + + let body = newObj + let newbody = [] + newbody.push(body) + if(newbody[0].buildingBasicGroups.length){ + this.http.post("/api/BuildingBasicInfos",newbody,{ + params:{ + companyId : this.unitId, + buildingId :newbody[0].buildingId + } + }).subscribe((data:any)=>{ + this.houses[key].id = data[0].id + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('建筑信息保存成功','确定',config); + }, + err=>{ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('请检查输入数据是否有误','确定',config); + }) + } + } + if(item.buildtype == "石油化工类"){ + // console.log(888,item) + let bodyObj = _.cloneDeep(item) + delete bodyObj.name + delete bodyObj.username + delete bodyObj.isshiyou + delete bodyObj.newzhuangzhiinfodatasource + delete bodyObj.tongyong + delete bodyObj.buildtype + delete bodyObj.buildingtypeId + delete bodyObj.bigfor + delete bodyObj.index + delete bodyObj.isCustomData + delete bodyObj.buildingCustomData + // console.log(456,bodyObj) + bodyObj.buildingBasicGroups[0].propertyInfos.forEach(item => { + delete item.isshowrule + delete item.rulevalue + }); + //修改基本信息 + bodyObj.buildingBasicGroups[0].propertyInfos.forEach(item => { + for (const key in value) { + if (item.propertyName == key) { + if(item.propertyValue || item.propertyValue == 0){ + // item.propertyValue = "" + value[key] + item.propertyValue = String(value[key]) + } + + } + } + }); + bodyObj.buildingBasicGroups[0].submitted = true + bodyObj.buildingBasicGroups[0].buildingId = item.buildingId + bodyObj.buildingBasicGroups[0].companyId = this.unitinfo.id + //石油化工类的 装置信息 就提交这个表单——————————————————————————————this.deviceinfo 记得清空 + // console.log(this.deviceinfodata) + if(bodyObj.buildingBasicGroups[1].submitted){ //如果用户点击了并填写了装置信息就提交这个表格数据 + this.deviceinfo = [] + item.newzhuangzhiinfodatasource.forEach((element,index) => { + this.deviceinfo.push({ + propertyName: "装置区名称", + propertyValue: element.name, + propertyType: 0, + required: true, + ruleName: "", + ruleValue: "", + physicalUnit: "", + order:0, + enabled: true, + visible: true, + tag: String(index + 1) + }, + { + propertyName: "工艺流程", + propertyValue: element.flow, + propertyType: 0, + required: true, + ruleName: "", + ruleValue: "", + physicalUnit: "", + order:1, + enabled: true, + visible: true, + tag: String(index + 1) + }, + { + propertyName: "火灾危险性", + propertyValue: element.danger, + propertyType: 0, + required: true, + ruleName: "", + ruleValue: "", + physicalUnit: "", + order:2, + enabled: true, + visible: true, + tag: String(index + 1) + }, + { + propertyName: "灭火注意事项", + propertyValue: element.payattentionto, + propertyType: 1, + required: false, + ruleName: "", + ruleValue: "", + physicalUnit: "", + order:3, + enabled: true, + visible: true, + tag: String(index + 1) + }) + }); + }else{//否则就传一个空的 + this.deviceinfo = [ + { + propertyName: "装置区名称", + propertyValue: "", + propertyType: 0, + required: true, + ruleName: "", + ruleValue: "", + physicalUnit: "", + order: 0, + enabled: true, + visible: true, + tag: "1" + }, + { + propertyName: "工艺流程", + propertyValue: "", + propertyType: 0, + required: true, + ruleName: "", + ruleValue: "", + physicalUnit: "", + order: 0, + enabled: true, + visible: true, + tag: "1" + }, + { + propertyName: "火灾危险性", + propertyValue: "", + propertyType: 0, + required: true, + ruleName: "", + ruleValue: "", + physicalUnit: "", + order: 0, + enabled: true, + visible: true, + tag: "1" + }, + { + propertyName: "灭火注意事项", + propertyValue: "", + propertyType: 1, + required: false, + ruleName: "", + ruleValue: "", + physicalUnit: "", + order: 0, + enabled: true, + visible: true, + tag: "1" + } + ] + } + bodyObj.buildingBasicGroups[1].propertyInfos = this.deviceinfo + bodyObj.buildingBasicGroups[1].buildingId = item.buildingId + bodyObj.buildingBasicGroups[1].companyId = this.unitinfo.id + + + if(bodyObj.buildingBasicGroups[2].submitted){ //如果勾选了储罐信息 则直接提交当前bodyObj + var map = {}; //用于存储石油化工要提交的储罐信息表单 + for (let key in value) { + if (key.indexOf('tanker') != -1) { + const list = key.split('-'); // 2,tanker,1 + const orderKey = list[0]; // 2 or 3 + if (!(orderKey in map)) { + map[orderKey] = []; // map[2] or map[3] = []; + } + map[orderKey][list[2]] = value[key]; // map[2][1] = xxxxx + } + } + + bodyObj.buildingBasicGroups.splice( 2 , bodyObj.buildingBasicGroups.length) + + // console.log(123, item) + + let basictankinfobody:any = {} + + for(let key in map){//------------------------------------------------------------石油化工 储罐信息 + + + basictankinfobody = { + id: null, + name: "罐区" + (Number(key)-1), + type: 0, + addMode: 2, + basicGroupId:'', + submitted:true, + isOptional:true, + order: Number(key), + enabled: true, + propertyInfos: item.bigfor[Number(key)-2][0].propertyInfos, + basicCategoryId: item.basicCategoryId, + buildingBasicId: null, + buildingId: item.buildingId,//当前建筑id + companyId: this.unitinfo.id//当前企业id + } + + bodyObj.buildingBasicGroups.push(basictankinfobody) + } + + + let basictankchildinfobody:any = []//-------------后续储罐信息以及储罐信息/罐区情况都push到这个数组中 + item.bigfor.forEach(item => { + basictankchildinfobody.push(item[1].propertyInfos) + }); + var _item = item + basictankchildinfobody.forEach((item,index) => { + let tankfieldArr = [] + item.forEach((element,key) => { + tankfieldArr.push( + { + propertyName: "罐区", + propertyValue: element.tank, + propertyType: 0, + required: false, + ruleName: "", + ruleValue: "", + physicalUnit: "", + order: 0, + enabled: true, + visible: true, + tag:String(key + 1) + }, + { + propertyName: "储罐编号", + propertyValue: element.tankid, + propertyType: 0, + required: true, + ruleName: "", + ruleValue: "", + physicalUnit: "", + order: 0, + enabled: true, + visible: true, + tag:String(key + 1) + }, + { + propertyName: "储存介质", + propertyValue: element.tankmedium, + propertyType: 0, + required: true, + ruleName: "", + ruleValue: "", + physicalUnit: "", + order: 0, + enabled: true, + visible: true, + tag:String(key + 1) + }, + { + propertyName: "储罐类型", + propertyValue: element.tanktype, + propertyType: 0, + required: true, + ruleName: "", + ruleValue: "", + physicalUnit: "", + order: 0, + enabled: true, + visible: true, + tag:String(key + 1) + }, + { + propertyName: "容量", + propertyValue: element.tankcapacity, + propertyType: 2, + required: true, + ruleName: "", + ruleValue: "", + physicalUnit: "㎡", + order: 0, + enabled: true, + visible: true, + tag:String(key + 1) + }, + { + propertyName: "直径", + propertyValue:element.tankdiameter, + propertyType: 2, + required: true, + ruleName: "", + ruleValue: "", + physicalUnit: "m", + order: 0, + enabled: true, + visible: true, + tag:String(key + 1) + }, + { + propertyName: "高度", + propertyValue: element.tankheight, + propertyType: 2, + required: true, + ruleName: "", + ruleValue: "", + physicalUnit: "m", + order: 0, + enabled: true, + visible: true, + tag:String(key + 1) + }, + { + propertyName: "顶盖形式", + propertyValue: element.tanktectum, + propertyType: 0, + required: false, + ruleName: "", + ruleValue: "", + physicalUnit: "", + order: 0, + enabled: true, + visible: true, + tag:String(key + 1) + }, + { + propertyName: "浮盘材质", + propertyValue: element.tanktexture, + propertyType: 0, + required: false, + ruleName: "", + ruleValue: "", + physicalUnit: "", + order: 0, + enabled: true, + visible: true, + tag:String(key + 1) + }, + { + propertyName: "浮盘类型", + propertyValue: element.platetype, + propertyType: 0, + required: false, + ruleName: "", + ruleValue: "", + physicalUnit: "", + order: 0, + enabled: true, + visible: true, + tag:String(key + 1) + }, + { + propertyName: "泡沫产生器型号", + propertyValue: element.foamgeneratorid, + propertyType: 0, + required: false, + ruleName: "", + ruleValue: "", + physicalUnit: "", + order: 0, + enabled: true, + visible: true, + tag:String(key + 1) + }, + { + propertyName: "泡沫产生器形式", + propertyValue: element.foamgeneratortype, + propertyType: 0, + required: false, + ruleName: "", + ruleValue: "", + physicalUnit: "", + order: 0, + enabled: true, + visible: true, + tag:String(key + 1) + }, + { + propertyName: "是否设置氮封惰化保护装置", + propertyValue: element.isprotect, + propertyType: 0, + required: false, + ruleName: "", + ruleValue: "", + physicalUnit: "", + order: 0, + enabled: true, + visible: true, + tag:String(key + 1) + }, + { + propertyName: "防护堤高度", + propertyValue: element.fendinggroyneheight, + propertyType: 2, + required: true, + ruleName: "", + ruleValue: "", + physicalUnit: "m", + order: 0, + enabled: true, + visible: true, + tag:String(key + 1) + }, + { + propertyName: "半固定泡沫灭火接口数量", + propertyValue: element.portnum, + propertyType: 2, + required: false, + ruleName: "", + ruleValue: "", + physicalUnit: "个", + order: 0, + enabled: true, + visible: true, + tag:String(key + 1) + }, + { + propertyName: "其它设施", + propertyValue: element.else, + propertyType: 0, + required: false, + ruleName: "", + ruleValue: "", + physicalUnit: "", + order: 0, + enabled: true, + visible: true, + tag:String(key + 1) + } + ) + }); + basictankchildinfobody={// + id: null, + name: "罐区" + Number(index+1) + "/储罐信息", + type: 1, + addMode: 2, + basicGroupId:'', + order: Number(index + 2), + enabled: true, + submitted:true, + isOptional:true, + propertyInfos: tankfieldArr, + basicCategoryId: _item.basicCategoryId, + buildingBasicId: null, + buildingId: _item.buildingId, + companyId: this.unitinfo.id + } + bodyObj.buildingBasicGroups.push(basictankchildinfobody) + }); + }else{ + + + bodyObj.buildingBasicGroups[2].buildingId = item.buildingId + bodyObj.buildingBasicGroups[2].companyId = this.unitinfo.id + bodyObj.buildingBasicGroups[2].propertyInfos.forEach(item=>{ + item.propertyValue = "" + }) + bodyObj.buildingBasicGroups[3].buildingId = item.buildingId + bodyObj.buildingBasicGroups[3].companyId = this.unitinfo.id + bodyObj.buildingBasicGroups[3].propertyInfos = [ + { + propertyName: "罐区", + propertyValue: "", + propertyType: 0, + required: false, + ruleName: "", + ruleValue: "", + physicalUnit: "", + order: 0, + enabled: true, + visible: true, + tag:"1" + }, + { + propertyName: "储罐编号", + propertyValue: "", + propertyType: 0, + required: true, + ruleName: "", + ruleValue: "", + physicalUnit: "", + order: 0, + enabled: true, + visible: true, + tag:"1" + }, + { + propertyName: "储存介质", + propertyValue: "", + propertyType: 0, + required: true, + ruleName: "", + ruleValue: "", + physicalUnit: "", + order: 0, + enabled: true, + visible: true, + tag:"1" + }, + { + propertyName: "储罐类型", + propertyValue:"", + propertyType: 0, + required: true, + ruleName: "", + ruleValue: "", + physicalUnit: "", + order: 0, + enabled: true, + visible: true, + tag:"1" + }, + { + propertyName: "容量", + propertyValue: "", + propertyType: 2, + required: true, + ruleName: "", + ruleValue: "", + physicalUnit: "㎡", + order: 0, + enabled: true, + visible: true, + tag:"1" + }, + { + propertyName: "直径", + propertyValue:"", + propertyType: 2, + required: true, + ruleName: "", + ruleValue: "", + physicalUnit: "m", + order: 0, + enabled: true, + visible: true, + tag:"1" + }, + { + propertyName: "高度", + propertyValue: "", + propertyType: 2, + required: true, + ruleName: "", + ruleValue: "", + physicalUnit: "m", + order: 0, + enabled: true, + visible: true, + tag:"1" + }, + { + propertyName: "顶盖形式", + propertyValue: "", + propertyType: 0, + required: false, + ruleName: "", + ruleValue: "", + physicalUnit: "", + order: 0, + enabled: true, + visible: true, + tag:"1" + }, + { + propertyName: "浮盘材质", + propertyValue:"", + propertyType: 0, + required: false, + ruleName: "", + ruleValue: "", + physicalUnit: "", + order: 0, + enabled: true, + visible: true, + tag:"1" + }, + { + propertyName: "浮盘类型", + propertyValue: "", + propertyType: 0, + required: false, + ruleName: "", + ruleValue: "", + physicalUnit: "", + order: 0, + enabled: true, + visible: true, + tag:"1" + }, + { + propertyName: "泡沫产生器型号", + propertyValue:"", + propertyType: 0, + required: false, + ruleName: "", + ruleValue: "", + physicalUnit: "", + order: 0, + enabled: true, + visible: true, + tag:"1" + }, + { + propertyName: "泡沫产生器形式", + propertyValue: "", + propertyType: 0, + required: false, + ruleName: "", + ruleValue: "", + physicalUnit: "", + order: 0, + enabled: true, + visible: true, + tag:"1" + }, + { + propertyName: "是否设置氮封惰化保护装置", + propertyValue:"", + propertyType: 0, + required: false, + ruleName: "", + ruleValue: "", + physicalUnit: "", + order: 0, + enabled: true, + visible: true, + tag:"1" + }, + { + propertyName: "防护堤高度", + propertyValue:"", + propertyType: 2, + required: true, + ruleName: "", + ruleValue: "", + physicalUnit: "m", + order: 0, + enabled: true, + visible: true, + tag:"1" + }, + { + propertyName: "半固定泡沫灭火接口数量", + propertyValue: "", + propertyType: 2, + required: false, + ruleName: "", + ruleValue: "", + physicalUnit: "个", + order: 0, + enabled: true, + visible: true, + tag:"1" + }, + { + propertyName: "其它设施", + propertyValue: "", + propertyType: 0, + required: false, + ruleName: "", + ruleValue: "", + physicalUnit: "", + order: 0, + enabled: true, + visible: true, + tag:"1" + } + ] + // console.log(888,bodyObj) + bodyObj.buildingBasicGroups.splice(4,bodyObj.buildingBasicGroups.length) + } + + + + let newbodyObj = [] + newbodyObj.push(bodyObj) + // console.log(1111,newbodyObj) + this.http.post("/api/BuildingBasicInfos",newbodyObj,{ + params:{ + companyId : this.unitId, + buildingId :item.buildingId + } + }).subscribe((data:any)=>{ + this.houses[key].id = data[0].id + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('建筑信息保存成功','确定',config); + // alert("建筑信息保存成功") + }, + err=>{ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('请检查输入数据是否有误','确定',config); + }) + } + if(item.buildtype == "地铁类"){ + let newObj = _.cloneDeep(item) + delete newObj.username + delete newObj.name + delete newObj.tongyong + delete newObj.ditie + delete newObj.buildtype + delete newObj.isCustomData + delete newObj.buildingCustomData + newObj.buildingBasicGroups.forEach(item => { + item.propertyInfos.forEach(element => { + delete element.isshowrule + delete element.rulevalue + if( element.propertyValue || element.propertyValue == 0){ + element.propertyValue = String(element.propertyValue) + } + }); + item.buildingId = newObj.buildingId + item.companyId = this.unitinfo.id + item.submitted = true + }); + let newbodyObj2 = [] + newbodyObj2.push(newObj) + this.http.post("/api/BuildingBasicInfos",newbodyObj2,{ + params:{ + companyId : this.unitId, + buildingId :newObj.buildingId + } + }).subscribe((data:any)=>{ + this.houses[key].id = data[0].id + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('建筑信息保存成功','确定',config); + }, + err=>{ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('请检查输入数据是否有误','确定',config); + }) + + } + } + }) + + + }} \ No newline at end of file diff --git a/src/app/ui/basicinfo/lookmaster.component.html b/src/app/ui/basicinfo/lookmaster.component.html new file mode 100644 index 0000000..674e8f4 --- /dev/null +++ b/src/app/ui/basicinfo/lookmaster.component.html @@ -0,0 +1,26 @@ +
    单位照片
    +
    +
    + +
    + + +
    +
    + +

    暂无单位图片,请先上传

    +
    +
    + + +
    + + + + + + diff --git a/src/app/ui/basicinfo/lookmaster.component.ts b/src/app/ui/basicinfo/lookmaster.component.ts new file mode 100644 index 0000000..79f3883 --- /dev/null +++ b/src/app/ui/basicinfo/lookmaster.component.ts @@ -0,0 +1,66 @@ +import { Component, OnInit, Inject } from '@angular/core'; +import {MatTreeFlatDataSource, MatTreeFlattener} from '@angular/material/tree'; +import {FlatTreeControl} from '@angular/cdk/tree'; +import { HttpClient } from '@angular/common/http'; +import {MatDialog, MatDialogRef, MAT_DIALOG_DATA} from '@angular/material/dialog'; +import {FormControl} from '@angular/forms'; +import { MatSnackBar } from '@angular/material/snack-bar'; + +@Component({ + selector: 'lookmaster', + templateUrl: './lookmaster.component.html', + styleUrls: ['./basicinfo.component.scss'] + }) + export class LookMaster { + // myControl = new FormControl(); + //注入MatDialogRef,可以用来关闭对话框 + //要访问对话框组件中的数据,必须使用MAT_DIALOG_DATA注入令牌 + constructor(private http: HttpClient,public dialogRef: MatDialogRef,@Inject(MAT_DIALOG_DATA) public data) {} + allunittype:any + ImgUrl:string + rotationAngle=0 + isheng:any + isshowimg:boolean + onNoClick(): void { + this.dialogRef.close(); + } + ngOnInit(): void { + if(this.data.img.indexOf('?') == -1){ + this.isshowimg = false + }else{ + this.isshowimg = true + var imgurl = this.data.img.split("?") + this.ImgUrl = imgurl[0] + } + + } + //点击旋转按钮时 + rotateA = 0 + rotateB = 0 + rotate(){ + var w= document.getElementsByClassName("imgitemdefault")[0]['naturalWidth']; + var h = document.getElementsByClassName("imgitemdefault")[0]['naturalHeight']; + + if(w > h){ + this.isheng = true + }else{ + this.isheng = false + } + if(this.isheng){ + this.rotateA += 90 + if(this.rotateA == 360){ + this.rotateA = 0 + } + }else{ + this.rotateB += 10 + if(this.rotateB == 40){ + this.rotateB = 0 + } + } + } + + + + + } + \ No newline at end of file diff --git a/src/app/ui/home/home.component.html b/src/app/ui/home/home.component.html index f0f913a..38b04dd 100644 --- a/src/app/ui/home/home.component.html +++ b/src/app/ui/home/home.component.html @@ -16,15 +16,34 @@
    - + - +
    - +
    + + + + + + + + + + + + + + + + + +
    熟悉对象熟悉时间带队领导上传人员操作
    {{item.target}}{{item.time}}{{item.leadTheTeam}}{{item.updateStaff}}查看详情
    +
    diff --git a/src/app/ui/home/home.component.scss b/src/app/ui/home/home.component.scss index 9c713f1..f5a0c67 100644 --- a/src/app/ui/home/home.component.scss +++ b/src/app/ui/home/home.component.scss @@ -12,7 +12,7 @@ line-height: 0.585938rem; text-align: center; position: relative; - label { font-weight: 550; } + label { font-weight: 550; font-size: 0.195313rem; } .floatRight { position: absolute; top: 0.146484rem; @@ -61,12 +61,14 @@ button.mat-menu-item { text-align: center; } align-items: center; div { margin: 0 0.097656rem } input { + width: 1.757813rem; height: 0.292969rem; line-height: 0.292969rem; padding-left: 0.048828rem; border-radius: 0.195313rem; outline: none; border: 0.009766rem solid #999; + font-size: 0.136719rem; } button { width: 0.78125rem; @@ -78,7 +80,45 @@ button.mat-menu-item { text-align: center; } color: #fff; } } -.mat-datepicker-toggle{ vertical-align: middle; } +.mat-datepicker-toggle{ vertical-align: middle; margin: 0 0; padding: 0 0; } .centerTable { flex: 1; + box-sizing: border-box; + padding: 0.097656rem; + overflow: hidden; + .table { + width: 100%; + max-height: 100%; + overflow-y: auto; + } + table { + width: 100%; + border-radius: 0.244141rem; + background: #FD5A31; + text-align: center; + border-collapse:collapse; + word-break:break-all; + word-wrap:break-all; + table-layout:fixed; + .firstContent { width: 0.488281rem; } + th { + height: 0.390625rem; + font-weight: normal; + font-size: 0.15625rem; + color: #fff; + // border-bottom: 1px solid rgb(211, 207, 207); + } + td { + height: 0.390625rem; + font-size: 0.136719rem; + background-color: #fff; + border-top: 1px solid rgb(211, 207, 207); + } + } +} +.fontColor { color: #FC7045; } +.overflowText { + overflow: hidden; + text-overflow:ellipsis; + white-space: nowrap; } \ No newline at end of file diff --git a/src/app/ui/home/home.component.ts b/src/app/ui/home/home.component.ts index 1642a5e..9024e44 100644 --- a/src/app/ui/home/home.component.ts +++ b/src/app/ui/home/home.component.ts @@ -22,6 +22,19 @@ export class HomeComponent implements OnInit { } enddate:any; //查询时间 + tableData :any = [ + {target: '梧州市金龙万豪酒店', time: '2020-10-29 07:19', leadTheTeam: '郑子墨', updateStaff: '赵竹林', }, + {target: '众美光合原筑', time: '2020-11-02 07:19', leadTheTeam: '何先超', updateStaff: '何晨', }, + {target: '凡尔赛公馆', time: '2020-11-02 11:19', leadTheTeam: '吴洁丽', updateStaff: '赵玉', }, + {target: '西黄岛九号', time: '2020-11-03 07:19', leadTheTeam: '吴毅溪', updateStaff: '赵晓慧', }, + {target: '首城双景', time: '2020-11-07 07:19', leadTheTeam: '周伟林', updateStaff: '李英顺', }, + {target: '华贸国际公馆', time: '2020-11-11 07:19', leadTheTeam: '李林颖', updateStaff: '吴思怡', }, + {target: '鸿威翡翠城', time: '2020-11-12 07:19', leadTheTeam: '李双杆', updateStaff: '钱浩宇', }, + {target: '泽信公馆', time: '2020-11-14 11:19', leadTheTeam: '孙正荣', updateStaff: '孙正云', }, + {target: '润泽御府', time: '2020-11-17 07:19', leadTheTeam: '赵虎林', updateStaff: '冯燕', }, + {target: '万达广场', time: '2020-11-20 07:19', leadTheTeam: '周伟林', updateStaff: '李英顺', }, + {target: '天悦', time: '2020-11-22 07:19', leadTheTeam: '冯燕', updateStaff: '冯靖宇', }, + ] //退出系统 signOut () { @@ -42,12 +55,17 @@ export class HomeComponent implements OnInit { //查询 query () { - + console.log('查询') } //新增 add () { + this.router.navigate([`/addsixfamiliar`]) + } + //查看详情 + viewDetails () { + console.log('查看详情') } diff --git a/src/app/ui/router-gis/router-gis.component.html b/src/app/ui/router-gis/router-gis.component.html new file mode 100644 index 0000000..1f2f2b9 --- /dev/null +++ b/src/app/ui/router-gis/router-gis.component.html @@ -0,0 +1,3 @@ +
    +
    +
    diff --git a/src/app/ui/router-gis/router-gis.component.scss b/src/app/ui/router-gis/router-gis.component.scss new file mode 100644 index 0000000..219d8f4 --- /dev/null +++ b/src/app/ui/router-gis/router-gis.component.scss @@ -0,0 +1,11 @@ +.content { + width: 100%; + height: 100%; + box-sizing: border-box; + padding: 0.244141rem; + overflow: hidden; + .center { + width: 100%; + height: 100%; + } +} \ No newline at end of file diff --git a/src/app/ui/router-gis/router-gis.component.spec.ts b/src/app/ui/router-gis/router-gis.component.spec.ts new file mode 100644 index 0000000..5ab8e67 --- /dev/null +++ b/src/app/ui/router-gis/router-gis.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { RouterGISComponent } from './router-gis.component'; + +describe('RouterGISComponent', () => { + let component: RouterGISComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ RouterGISComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(RouterGISComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/ui/router-gis/router-gis.component.ts b/src/app/ui/router-gis/router-gis.component.ts new file mode 100644 index 0000000..bb9a124 --- /dev/null +++ b/src/app/ui/router-gis/router-gis.component.ts @@ -0,0 +1,48 @@ +import { Component, OnInit } from '@angular/core'; +declare var AMap: any; + +@Component({ + selector: 'app-router-gis', + templateUrl: './router-gis.component.html', + styleUrls: ['./router-gis.component.scss'] +}) +export class RouterGISComponent implements OnInit { + + constructor() { } + + ngOnInit(): void { + + } + + ngAfterViewInit(): void { + window.setTimeout(()=>{ + this.mapInit() + },0) + } + + //地图初始化 + mapInit () { + //创建地图 + let map = new AMap.Map('center', { + resizeEnable: true, + cursor: 'default', + zooms:[6,18], + }); + //构造路线导航类 实际路线 + let driving = new AMap.Driving({ + map: map, + showTraffic: true, + isOutline: true, + }); + driving.search( [{keyword: '广西消防总队',city:'广西'},{keyword: '万科公园里',city:'广西'},{keyword: '南宁明安医院',city:'广西'}], ); + //构造路线导航类 导航路线 + let drivingTwo = new AMap.Driving({ + map: map, + showTraffic: false, + }); + drivingTwo.search( [{keyword: '广西消防总队',city:'广西'},{keyword: '南宁明安医院',city:'广西'}], ); + //function (status,result) { console.log(status,result) } //地图路线 匹配起始点回调函数 + //new AMap.LngLat(116.379028, 39.865042), new AMap.LngLat(116.427281, 39.903719) / [{keyword: '淄博站',city:'山东'},{keyword: '淄博北站',city:'山东'}], //路线可搜索, 可用坐标 + } + +} diff --git a/src/app/ui/training-recordinfo/training-recordinfo.component.html b/src/app/ui/training-recordinfo/training-recordinfo.component.html index a255997..a724086 100644 --- a/src/app/ui/training-recordinfo/training-recordinfo.component.html +++ b/src/app/ui/training-recordinfo/training-recordinfo.component.html @@ -13,19 +13,21 @@
    - + - 行驶路线 + - + 平面图 安全疏散设施情况 - 消防设施情况 + + + 水源道路情况 重点部位情况 diff --git a/src/app/ui/training-recordinfo/training-recordinfo.component.scss b/src/app/ui/training-recordinfo/training-recordinfo.component.scss index b3c59e4..2fdf654 100644 --- a/src/app/ui/training-recordinfo/training-recordinfo.component.scss +++ b/src/app/ui/training-recordinfo/training-recordinfo.component.scss @@ -1,23 +1,28 @@ .bigbox{ - width: 10rem; + width: 100%; height: 100%; background: #F4F5F9; + display: flex; + flex-direction: column; overflow: hidden; .title{ - width: 10rem; + width: 100%; height: 0.585938rem; - } .content{ - width: 10rem; - height: 6.71875rem; + flex: 1; + overflow: hidden; .cardbox{ margin: 0 auto; margin-top:0.195313rem; background-color: #fff; border-radius: 0.048828rem; - width:9.570313rem; - height: 6.523438rem; + width:100%; + height: 100%; } } +} +.mat-tab-body-wrapper { + height: 100%; + overflow: hidden; } \ No newline at end of file diff --git a/src/app/ui/ui-routing.module.ts b/src/app/ui/ui-routing.module.ts index 50aef13..716cbe5 100644 --- a/src/app/ui/ui-routing.module.ts +++ b/src/app/ui/ui-routing.module.ts @@ -9,10 +9,7 @@ import { AddSixFamiliarComponent } from './add-six-familiar/add-six-familiar.com const routes: Routes = [ - { path: '', component: UiComponent}, - { path: 'paginator', component:PaginatorComponent }, - { path: 'userdata', component:UserdataComponent }, - { path: 'collectionTools', component:CollectionToolsComponent }, + ]; @NgModule({ diff --git a/src/app/ui/ui.module.ts b/src/app/ui/ui.module.ts index e0381ac..bfc6477 100644 --- a/src/app/ui/ui.module.ts +++ b/src/app/ui/ui.module.ts @@ -63,12 +63,12 @@ import { AddSixFamiliarComponent, SelectUnit } from './add-six-familiar/add-six- import { TitleComponent } from './title/title.component' import { HomeComponent } from './home/home.component'; import { TrainingRecordinfoComponent } from './training-recordinfo/training-recordinfo.component'; -import { BasicinfoComponent } from '../key-unit/basicinfo/basicinfo.component'; +import { RouterGISComponent } from './router-gis/router-gis.component'; import { KeyUnitModule } from '../key-unit/key-unit.module'; import { KnowRouteComponent } from './know-route/know-route.component'; import { FindProblemComponent } from './find-problem/find-problem.component'; @NgModule({ - declarations: [UiComponent, FooterComponent, UserdataComponent, ChangepasswordComponent,IsnoPipe,ConfirmpswDirective,TimePipe,EditUser,CollectionToolsComponent,WorkingAreaComponent,CreateBuilding,EditBuilding,leftFunctionalDomainComponent,editPlaneFigureComponent,ViewDetails,saveOneDialog,saveTwoDialog,addDisposalNodeComponent,editDisposalNodeComponent,HomeComponent, AddSixFamiliarComponent, TitleComponent, SelectUnit, TrainingRecordinfoComponent,KnowRouteComponent, FindProblemComponent], + declarations: [UiComponent, FooterComponent, UserdataComponent, ChangepasswordComponent,IsnoPipe,ConfirmpswDirective,TimePipe,EditUser,CollectionToolsComponent,WorkingAreaComponent,CreateBuilding,EditBuilding,leftFunctionalDomainComponent,editPlaneFigureComponent,ViewDetails,saveOneDialog,saveTwoDialog,addDisposalNodeComponent,editDisposalNodeComponent,HomeComponent, AddSixFamiliarComponent, TitleComponent, SelectUnit, TrainingRecordinfoComponent,RouterGISComponent, FindProblemComponent], imports: [ CommonModule, @@ -120,6 +120,7 @@ import { FindProblemComponent } from './find-problem/find-problem.component'; FormsModule, PaginatorModule, FileUploadModule, + KeyUnitModule ],