diff --git a/src/app/key-unit/basicinfo-look/basicinfo.component.html b/src/app/key-unit/basicinfo-look/basicinfo.component.html index 92548a9..52a1c4e 100644 --- a/src/app/key-unit/basicinfo-look/basicinfo.component.html +++ b/src/app/key-unit/basicinfo-look/basicinfo.component.html @@ -1,11 +1,10 @@ -
+
- + 单位信息 - keyboard_arrow_down
@@ -16,7 +15,7 @@ * 统一社会信用代码: - * 单位类型: - - + + {{item.name}} @@ -41,7 +40,7 @@ * 联系人: - * 联系电话: - * 辖区中队: -
- +
+ + + +
  • {{node.name}}
  • +
    + + +
  • {{node.name}}
  • +
    +
    +
    * 单位地址: -
    -
    +
    单位照片: -
    - +
    +
    - -
    +
    @@ -120,9 +137,18 @@ {{markerPosition.y || '暂未标注'}}
    - +
    +
    +
    @@ -130,61 +156,56 @@ - - -
    -
    - - - -
    - - -
    -
    - 建筑名称: - - - - * -
    -
    - 建筑类型: - - - {{n.name}} - - - * -
    - -
    -

    {{item.name}}

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

    {{element.name}}

    +
    {{i.propertyName}}({{i.physicalUnit}}) - - - + - - - - - + + + 1级 2级 3级 @@ -192,352 +213,132 @@ - + * -
    +
    {{i.rulevalue}}
    - -
    - -

    自定义信息

    + +
    +

    + {{element.name}} +

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

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

    -
    - {{i.propertyName}} ({{i.physicalUnit}}) - + +
    +

    + 罐区信息 +

    +
    +

    {{element.name}}

    - - - - - - - - - - - - - - 1级 - 2级 - 3级 - 其它 - - - - - * -
    - {{i.rulevalue}} -
    +
    + {{i.propertyName}}({{i.physicalUnit}}) + + + + + + + + + + + + + 1级 + 2级 + 3级 + 其它 + + + + + + * +
    + {{i.rulevalue}} +
    +
    +
    - - -
    -
    - -

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

    -
    - - - - - - - - - - - - -
    - - - 装置区名称* - - 工艺流程* - - 火灾危险性* - + +
    +

    + {{element.name}} +

    + + + + + + - - - - - - - +
    + {{item.propertyName}} + * +
    + 灭火注意事项 - -
    - -
    - -

    储罐信息

    -
    - - - - -
    -
    -

    {{x[0].name}}

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

    {{x[1].name}}

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

    自定义信息

    +
    +
    - -
    - -

    自定义信息

    -
    -
    - - -
    - - - - : - - - - * -
    +
    + + + + : + + + + *
    -
    - - - - - + - - + + +
    - - diff --git a/src/app/key-unit/basicinfo-look/basicinfo.component.scss b/src/app/key-unit/basicinfo-look/basicinfo.component.scss index 2648fb9..9c6800b 100644 --- a/src/app/key-unit/basicinfo-look/basicinfo.component.scss +++ b/src/app/key-unit/basicinfo-look/basicinfo.component.scss @@ -1,7 +1,7 @@ .topbox{ height: 485px; width: 100%; - // border-bottom: 1px solid black; + padding-bottom: 20px; .mainbox{ height: 100%; position: relative; @@ -9,7 +9,6 @@ .mainleft{ width:800px; height: 100%; - // background-color: yellow; float: left; .inputbox{ width: 343px; @@ -41,13 +40,8 @@ } .addbtn{ width: 695px; - position: absolute; - bottom: -495px; - text-align: center; - margin-bottom:20px; - button{ - margin: 0 4px; - } + margin:20px 0; + padding-bottom: 20px; } .uploadimg{ width: 400px; @@ -56,18 +50,13 @@ 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; - + cursor: pointer; position: absolute; top: 0px; left: 79px; @@ -77,20 +66,11 @@ } .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{ @@ -107,7 +87,6 @@ } .gistopbox{ position: absolute; - box-shadow: 0px 3px 6px rgba(0, 0, 0, 0.16); border-radius: 4px; left: 5%; @@ -146,55 +125,60 @@ align-items: center; justify-content: center; } - + .inputBox{ + width: 63%; + display: flex; + align-items: center; + .positionInput{ + border: 0; + border-radius: 6px; + width: 90%; + height: 34px; + background: #F2F2F2; + margin-left: 8px; + box-sizing: border-box; + padding-left: 10px; + } + } } + .hidden{ + opacity: 0; + z-index: -1; + } + .show{ + opacity: 1; + z-index: 1; + } } } } -.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; +.bodyBox{ + flex: 70%;overflow-y: auto; + position: relative; + .addBuilding{ + position: absolute; + z-index: 999; + left: 0; + top: 3px; } - .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; + .buildInfoInput{ + width: 393px; + text-align: end; + margin-left:240px; + } + .infobtnbox{ + position: absolute; + top: 30px; + right: 75px; + button{ + width: 80px; + height: 40px; + margin: 0 12px; + margin-top: 15px; } } } - .btn{ width: 100%; text-align: center; @@ -206,37 +190,29 @@ margin-top: 58px; margin-left: 203px; } -.mat-table{ - width: 99%; -} + table{ - width: 1000px; - thead{ - tr{ - th{ - width: 60px; - display: block; - float: left; - - } + width: 99%; + tr{ + display: flex; + td,th{ + flex: 1; } - } - tbody{ - tr{ + th{ + display: flex; + align-items: center; + justify-content: center; - td{ - width: 60px; - display: block; - float: left; - text-align: center; - } + } + input{ + border: 0px ; } } } - +table,table tr th, table tr td { border: 0.1px solid gray; } +table { text-align: center; border-collapse: collapse; padding:2px;} .deviceinfo{ - // border-bottom: 1px solid black;; padding-bottom: 60px; } .tankdetailinfo{ @@ -250,14 +226,10 @@ table{ } .tankinfo{ display: block; - width: 100%; - // height: 45px; + width: 97.5%; text-align: center; + border: 0px; } -// .adddeviceinfo{ -// // position: absolute; -// // left: 0px; -// } .submit1{ margin-left: -66px !important; } @@ -269,31 +241,7 @@ textarea { 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; diff --git a/src/app/key-unit/basicinfo-look/basicinfo.component.ts b/src/app/key-unit/basicinfo-look/basicinfo.component.ts index afb4dc2..03a70aa 100644 --- a/src/app/key-unit/basicinfo-look/basicinfo.component.ts +++ b/src/app/key-unit/basicinfo-look/basicinfo.component.ts @@ -1,14 +1,13 @@ -import { Component, OnInit, Inject ,ViewChild, ElementRef, Renderer2} from '@angular/core'; +import { Component, OnInit, Inject ,ViewChild, Renderer2, ElementRef, Directive, forwardRef} 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 { AbstractControl, FormControl, NG_VALIDATORS, Validator } 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 { DomSanitizer } from '@angular/platform-browser' import { Injectable } from "@angular/core" import { filter } from 'rxjs/operators'; @@ -16,10 +15,11 @@ 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 Swiper from 'swiper'; import { LookMaster2 } from './lookmaster.component' -import { Router,ActivatedRoute } from '@angular/router' +import { ActivatedRoute } from '@angular/router'; declare var AMap: any; + @Component({ selector: 'app-basicinfo-look', templateUrl: './basicinfo.component.html', @@ -77,28 +77,46 @@ export class BasicinfoLookComponent implements OnInit { selectedorganization: any//所选的辖区中队 selectedorganizationid:any //所选的辖区中队的id highhouse = false//控制高层表单的显示 - houses: any = [] //存储当前单位的建筑信息 + defaultbuildingTypes :any //存储当前建筑的默认类型的id buildingTypesname:any//存储当前建筑的默认类型name buildingCustomData:any //存储当前建筑的自定义信息 allunittype: any //所有单位类型 allorganizing:any = [] //所有组织机构 - constructor(private elementRef: ElementRef,public renderer2: Renderer2,private router:Router,private route:ActivatedRoute,private http: HttpClient, private tree: TreeService, private sanitizer: DomSanitizer, public dialog: MatDialog,public snackBar: MatSnackBar) { } - + constructor(private route:ActivatedRoute,private elementRef: ElementRef,public renderer2: Renderer2,private http: HttpClient, private tree: TreeService, private sanitizer: DomSanitizer, public dialog: MatDialog,public snackBar: MatSnackBar) { } + houses: any = [] //存储当前单位的建筑信息 unitId : any //当前单位id ngOnInit(): void { this.getallunittype() this.getorganization() - // this.getunitinfo() - this.getunitallbuilding() + this.getUnitAllBuildings()//获得单位下所有建筑 this.unitId = this.route.snapshot.queryParams.id } + //获得单位下所有建筑 + getUnitAllBuildings(){ + this.unitId = this.route.snapshot.queryParams.id + this.http.get("/api/Buildings",{ + params:{ + companyId:this.unitId + } + }).subscribe(async (data:any)=>{ // 获得当前单位所有的建筑 + data.forEach(element => { + element.data = [] + }); + this.houses = data + this.getBuildingInfo() + }) + } + + + isMapLabel:boolean //地图标注位置 markerPosition:any = {x: 0, y: 0}//单位坐标 map:any //地图实例 isGisTopBox:boolean = false//点击位置按钮 + isGisTopBoxTwo:boolean = false//点击位置按钮 oldPositionMarker:any //旧位置marker实例 newPositionMarker:any //新位置marker实例 @@ -116,6 +134,23 @@ export class BasicinfoLookComponent implements OnInit { ' ' + '' //初始化地图 + searchTitle:any//搜索内容 + placeSearch:any//地址搜索类 + search(){ + this.placeSearch.search(this.searchTitle, (status, result) => { + // 搜索成功时,result即是对应的匹配数据 + if(result.info == "OK"){ + this.newPositionMarker.setPosition([result.poiList.pois[0].location.lng,result.poiList.pois[0].location.lat]) + this.markerPosition2 = {x: result.poiList.pois[0].location.lng, y: result.poiList.pois[0].location.lat} + this.map.setCenter([result.poiList.pois[0].location.lng,result.poiList.pois[0].location.lat]); //设置地图中心点 + }else{ + alert('查询不到输入地址信息') + } + + }) + + } + //初始化地图 labelGis(){ this.map = new AMap.Map('container', { zoom:12 @@ -123,26 +158,45 @@ export class BasicinfoLookComponent implements OnInit { this.map.on('complete', () => { this.isGisTopBox = true }); - if(this.isMapLabel){//如果已经标注单位坐标 - console.log('已标注单位位置') - this.map.setCenter([this.unitinfo.location.x,this.unitinfo.location.y]); - this.oldPositionMarker = new AMap.Marker({ - position: [this.unitinfo.location.x,this.unitinfo.location.y], - content: this.newPositionMarkerContent, - offset: new AMap.Pixel(-15, -18) - }) - // 将 markers 添加到地图 - this.map.add(this.oldPositionMarker); - }else{ - console.log('未标注单位位置') - this.map.setCity('上海市'); - } + //输入提示 + var autoOptions = { + input: "tipinput" + }; + AMap.plugin(['AMap.PlaceSearch','AMap.AutoComplete'], ()=>{ + var auto = new AMap.AutoComplete(autoOptions); + this.placeSearch = new AMap.PlaceSearch(); //构造地点查询类 + auto.on("select", (e)=>{ + // console.log(e) + // console.log( this.newPositionMarker) + this.newPositionMarker.setPosition([e.poi.location.lng,e.poi.location.lat]) + this.markerPosition2 = {x: e.poi.location.lng, y: e.poi.location.lat} + this.map.setCenter([e.poi.location.lng,e.poi.location.lat]); //设置地图中心点 + });//注册监听,当选中某条记录时会触发 + + }); + + if(this.isMapLabel){//如果已经标注单位坐标 + // console.log('已标注单位位置') + this.map.setCenter([this.unitinfo.location.x,this.unitinfo.location.y]); + this.oldPositionMarker = new AMap.Marker({ + position: [this.unitinfo.location.x,this.unitinfo.location.y], + content: this.newPositionMarkerContent, + offset: new AMap.Pixel(-15, -18) + }) + // 将 markers 添加到地图 + this.map.add(this.oldPositionMarker); + }else{ + // console.log('未标注单位位置') + this.map.setCity('上海'); + } } + markerPosition2 //点击位置按钮 setPosition(){ this.isGisTopBox = false + this.isGisTopBoxTwo = true if(this.isMapLabel){//如果已经标注单位坐标 - console.log('已标注单位位置') + // console.log('已标注单位位置') if(this.oldPositionMarker){ this.oldPositionMarker.setContent(this.oldPositionMarkerContent) @@ -160,41 +214,43 @@ export class BasicinfoLookComponent implements OnInit { this.map.add(this.newPositionMarker); - let markerPosition if(this.markerPosition.x && this.markerPosition.x != 0){ - markerPosition = {x: this.markerPosition.x,y: this.markerPosition.y} + this.markerPosition2 = {x: this.markerPosition.x,y: this.markerPosition.y} }else{ - markerPosition = {x: this.map.getCenter().lng,y: this.map.getCenter().lat} //获取当前地图中心位置 + this.markerPosition2 = {x: this.map.getCenter().lng,y: this.map.getCenter().lat} //获取当前地图中心位置 } this.newPositionMarker.on('dragend', (e)=>{ - markerPosition = {x: e.lnglat.lng, y: e.lnglat.lat} + this.markerPosition2 = {x: e.lnglat.lng, y: e.lnglat.lat} }) //点击确定 this.renderer2.listen(this.elementRef.nativeElement.querySelector('#setPositionOk'),'click',(event)=>{ this.map.clearMap(); this.isGisTopBox = true + this.isGisTopBoxTwo = false this.newPositionMarker = new AMap.Marker({ - position: [markerPosition.x,markerPosition.y], + position: [this.markerPosition2.x,this.markerPosition2.y], content: this.newPositionMarkerContent, offset: new AMap.Pixel(-15, -18) }); - this.markerPosition = markerPosition + this.markerPosition = this.markerPosition2 this.map.add(this.newPositionMarker); }) //点击取消 this.renderer2.listen(this.elementRef.nativeElement.querySelector('#setPositionClose'),'click',(event)=>{ this.isGisTopBox = true + this.isGisTopBoxTwo = false this.map.clearMap(); this.newPositionMarker = new AMap.Marker({ position: [this.markerPosition.x,this.markerPosition.y], content: this.newPositionMarkerContent, offset: new AMap.Pixel(-15, -18) }); + this.map.setCenter([this.markerPosition.x,this.markerPosition.y]); //设置地图中心点 this.map.add(this.newPositionMarker); }) }else{ - console.log('未标注单位位置') + // console.log('未标注单位位置') if(this.newPositionMarker){ this.newPositionMarker.setContent(this.oldPositionMarkerContent) } @@ -214,19 +270,20 @@ export class BasicinfoLookComponent implements OnInit { }); this.map.add(this.newPositionMarker); - let markerPosition + // let markerPosition if(this.markerPosition.x && this.markerPosition.x != 0){ - markerPosition = {x: this.markerPosition.x,y: this.markerPosition.y} + this.markerPosition2 = {x: this.markerPosition.x,y: this.markerPosition.y} }else{ - markerPosition = {x: this.map.getCenter().lng,y: this.map.getCenter().lat} //获取当前地图中心位置 + this.markerPosition2 = {x: this.map.getCenter().lng,y: this.map.getCenter().lat} //获取当前地图中心位置 } this.newPositionMarker.on('dragend', (e)=>{ - markerPosition = {x: e.lnglat.lng, y: e.lnglat.lat} + this.markerPosition2 = {x: e.lnglat.lng, y: e.lnglat.lat} }) //点击确定 this.renderer2.listen(this.elementRef.nativeElement.querySelector('#setPositionOk'),'click',(event)=>{ this.isGisTopBox = true - this.markerPosition = markerPosition + this.isGisTopBoxTwo = false + this.markerPosition = this.markerPosition2 this.map.clearMap(); this.newPositionMarker = new AMap.Marker({ position: [this.markerPosition.x,this.markerPosition.y], @@ -238,19 +295,26 @@ export class BasicinfoLookComponent implements OnInit { this.renderer2.listen(this.elementRef.nativeElement.querySelector('#setPositionClose'),'click',(event)=>{ this.map.clearMap(); this.isGisTopBox = true + this.isGisTopBoxTwo = false if(this.markerPosition.x && this.markerPosition.x != 0){//说明之前标过点 this.newPositionMarker = new AMap.Marker({ position: [this.markerPosition.x,this.markerPosition.y], content: this.newPositionMarkerContent, offset: new AMap.Pixel(-15, -18) }); + this.map.setCenter([this.markerPosition.x,this.markerPosition.y]); //设置地图中心点 this.map.add(this.newPositionMarker); } })//取消 } + + + } + + //获得所有单位类型 getallunittype() { this.http.get("/api/BuildingTypes/Simple").subscribe(data => { @@ -261,7 +325,7 @@ export class BasicinfoLookComponent implements OnInit { getorganization() { this.http.get('/api/Organizations').subscribe( (data: any) => { - this.allorganizing = data; + this.allorganizing = data this.dataSource.data = this.tree.toTree(data); let _this = this this.getunitinfo().then((e)=>{ @@ -280,7 +344,6 @@ export class BasicinfoLookComponent implements OnInit { async getunitinfo(){ let result = await new Promise((resolve, reject) => { this.http.get(`/api/Companies/${this.unitId}`).subscribe((data:any)=>{ - // console.log(111,data) if(data.buildingTypes.length){ sessionStorage.setItem('buildingTypeId',data.buildingTypes[0].id) }else{ @@ -314,7 +377,6 @@ export class BasicinfoLookComponent implements OnInit { this.selectedorganization = str.substr(1) } } - this.unitinfo = data resolve(this.unitinfo) this.selectedorganizationid = data.organizationId @@ -329,433 +391,181 @@ export class BasicinfoLookComponent implements OnInit { }) } - 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 - - - //数据格式化函数 将原始数据映射转化为表格需要的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].buildtype.indexOf("化工") != -1 ){ - 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: "" + //获得建筑自定义信息 + getbuildingCustomData(){ + this.http.get("/api/BuildingCustomData",{params:{ + buildingId:this.houses[this.selectedBuildingIndex].id + }}).subscribe(data=>{ + this.buildingCustomData = data }) } - //删除自定义信息行数 - deleteCustomData(item){ - item.buildingCustomData.customProperties.pop() - } - //得到建筑信息数据并进行处理 - allBuildings:any - getunitallbuilding(){ - this.houses = [] + + //获得建筑的全部信息放到对应houses数组的建筑中 + selectedBuildingIndex:number = 0 + getBuildingInfo(){ this.unitId = this.route.snapshot.queryParams.id - this.http.get("/api/Buildings",{ + this.http.get("/api/BuildingBasicInfos",{ // 循环请求当前单位建筑每一个建筑的信息保存到数组中 params:{ - companyId:this.unitId + companyId :this.unitId, + buildingId:this.houses[this.selectedBuildingIndex].id, + buildingType:this.houses[this.selectedBuildingIndex].buildingTypes[0].id } - }).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.indexOf("储罐") != -1 || data[0].buildtype.indexOf("化工") != -1 ){ - 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{ + // console.log('当前选择建筑的基础信息',data) + //需要处理一下表格信息 + data[0].buildingBasicGroups.forEach(element => { + //需要处理一下表格信息 + if(element.type == 1){ + let afterData = [] + let tempArr = []; + for (let i = 0; i < element.propertyInfos.length; i++) { + element.propertyInfos[i].tag == '' ? element.propertyInfos[i].tag = 1 : null + if (tempArr.indexOf(element.propertyInfos[i].tag) === -1) { + afterData.push({ + tag: element.propertyInfos[i].tag, + origin: [element.propertyInfos[i]] + }); + tempArr.push(element.propertyInfos[i].tag); + } else { + for (let j = 0; j < afterData.length; j++) { + if (afterData[j].tag == element.propertyInfos[i].tag) { + afterData[j].origin.push(element.propertyInfos[i]); + break; } - - - - //bigfor决定当前储罐分组有几个 - bigfor.forEach((item,index)=>{ - - item[1].propertyInfos = this.formatHandle(item[1].propertyInfos) - - }) - data[0].bigfor = bigfor } - resolve(data[0]) //把数据传递出去 - }) + } + } + function compare(property){ + return function(a,b){ + var value1 = a[property]; + var value2 = b[property]; + return value1 - value2; + } + } + afterData.forEach(item =>{ + item.origin = item.origin.sort(compare('order')) }) - this.houses.push(result) // 并且把他添加到 tab 总体数组中 + element.propertyInfos = afterData.sort(compare('tag')) + // console.log(afterData,888); + } + }); + let guanquIndex = data[0].buildingBasicGroups.findIndex(item => item.name.indexOf('罐区')>=0); // 找到第一个灌区的索引 + function transferFn(arr) { + const guanquIndex = arr.findIndex(item => item.name.indexOf('罐区')>=0); // 找到第一个灌区的索引 + + const guanquList = arr.slice(guanquIndex); // 灌区的列表 + const baseList = arr.slice(0, guanquIndex); // 前面的数据 + const len = guanquList.length; + const num = len/2; // 计算一共有多少对,这里的前提是数据本身必须成对出现 + // 灌区切割出来的数据,分别存放,最后做一下合并 + const array1 = []; + const array2 = []; + for(let i = 0; i{ + if(data && data.customProperties.length != 0){ + this.houses[this.selectedBuildingIndex].customData = data + this.houses[this.selectedBuildingIndex].isCustomData = true + }else{ + this.houses[this.selectedBuildingIndex].isCustomData = false + this.houses[this.selectedBuildingIndex].customData = { + id: "", + customProperties: [{name:'',value:''}], + buildingId: this.houses[this.selectedBuildingIndex].id + } + } + }) }) - } - - 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] + //点击选项卡 + selectedTabChange(e){ + // console.log(e) + this.selectedBuildingIndex = e.index + if((this.houses[this.selectedBuildingIndex].data && !this.houses[this.selectedBuildingIndex].data.length) || !this.houses[this.selectedBuildingIndex].data){ + this.getBuildingInfo() + } } - 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] + //表格加一行 + addline(ele){ + let newObj = JSON.parse(JSON.stringify(ele[0])) + for (let index = 0; index < newObj.origin.length; index++) { + const element = newObj.origin[index]; + element.propertyValue = "" + element.tag = Number(ele[ele.length - 1].tag) + 1 } - + newObj.tag = Number(ele[ele.length - 1].tag) + 1 + ele.push(newObj) } - - - //增加储罐大分组 - //在石油化工模板种点击增加储罐信息 - //获得模板信息 - templateinfo:any - gettemplateinfo(typeid){ - + //表格减一行 + removeline(ele){ + if(ele.length>1){ + ele.pop() + }else{ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('只剩一行,无法删除','确定',config); + } } - - addtankbox(item,bigkey){ - this.http.get("/api/CompanyAccount/BasicInfos",{ - 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 - } - - ]) + //建筑自定义信息加一行 + addCustomData(item){ + item.customData.customProperties.push({ + name:'', + value:'' }) - } - //移除储罐大分组 - removetankbox(item,bigkey){ - if(item.bigfor.length > 1){ + //建筑自定义信息减一行 + popCustomData(item){ + item.customData.customProperties.pop() + } + //储罐加一组 + addTankBox(item,groupsIndex){ + //取出现在最后一个罐区的数字 + let num = (item.data[0].buildingBasicGroups[item.data[0].buildingBasicGroups.length - 1].name).replace(/[^0-9]/ig,"") + let obj1 = JSON.parse(JSON.stringify(item.data[0].buildingBasicGroups[groupsIndex])) + let obj2 = JSON.parse(JSON.stringify(item.data[0].buildingBasicGroups[groupsIndex + 1])) + obj1.name = '罐区' + (Number(num) + 1) + obj2.name = '罐区' + (Number(num) + 1) + '/储罐信息' + // console.log(obj2) + obj1.propertyInfos.forEach(element => { + element.propertyValue = '' + }); + let newArr = [obj2.propertyInfos[0]] + obj2.propertyInfos = newArr + obj2.propertyInfos[0].origin.forEach(element => { + element.propertyValue = '' + }); + item.data[0].buildingBasicGroups.push(obj1) + item.data[0].buildingBasicGroups.push(obj2) + // console.log(item.data[0].buildingBasicGroups) + } + //储罐减一组 + removeTankBox(item,groupsIndex){ + let num = (item.data[0].buildingBasicGroups[item.data[0].buildingBasicGroups.length - 1].name).replace(/[^0-9]/ig,"") + if(num != 1){ var isdeleted = confirm("确定要删除末尾储罐分组吗?") if(isdeleted){ - item.bigfor.pop() + item.data[0].buildingBasicGroups.pop() + item.data[0].buildingBasicGroups.pop() } }else{ const config = new MatSnackBarConfig(); @@ -764,135 +574,6 @@ export class BasicinfoLookComponent implements OnInit { 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.indexOf("储罐") != -1 || data[0].buildtype.indexOf("化工") != -1 ){ - 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 - } - - - - //点击不同的tab选项 - selecttab(e) { - } - FunData(e){//切割数组 let proportion = 2; //按照比例切割 let num = 0; @@ -912,7 +593,6 @@ export class BasicinfoLookComponent implements OnInit { //点击辖区中队树,将选择的辖区中队添加到变量 add(node) { - // console.log(node) this.selectedorganizationid = node.id this.isorganizationbox = false @@ -937,13 +617,11 @@ export class BasicinfoLookComponent implements OnInit { this.selectedorganization = str.substr(1) } -} - + } //关闭辖区中队隐藏框 closeorganizationbox() { this.isorganizationbox = false } - //打开辖区中队隐藏框 openorganizationbox() { this.isorganizationbox = true @@ -951,8 +629,8 @@ export class BasicinfoLookComponent implements OnInit { hasChild = (_: number, node: any) => node.expandable; - // imgsrc = "../../../assets/upload.jpg" //没有上传图片时显示的图片,当上传后就会被替换,即保存时需要传的图片地址参数 - imgsrc = "" + imgsrc = "" //没有上传图片时显示的图片,当上传后就会被替换,即保存时需要传的图片地址参数 + noImg = '../../../assets/images/upload.jpg' imgUrl = ""//返回来的图片地址后缀 file: any; //上传的文件 objectName: any; //上传对象名 @@ -979,7 +657,7 @@ export class BasicinfoLookComponent implements OnInit { this.startUploading() } } - + }, 500); } //查看单位大图 @@ -990,7 +668,7 @@ export class BasicinfoLookComponent implements OnInit { data: {img:this.imgsrc} }); dialogRef.afterClosed().subscribe( - + ); } //上传文件 @@ -1024,10 +702,7 @@ export class BasicinfoLookComponent implements OnInit { } } - - - - //小于5MB不需要分块上传 + //小于5MB不需要分块上传 upload(){ this.uploader.queue[0].upload();//开始上传 this.uploader.queue[0].onSuccess = (response, status, headers) => { @@ -1055,7 +730,7 @@ export class BasicinfoLookComponent implements OnInit { } }; } - + //开始分块上传 async subsectionUploading () { let file = this.file || null //获取上传的文件 @@ -1098,17 +773,22 @@ export class BasicinfoLookComponent implements OnInit { }) } //删除具体建筑 - deletedbuilding(item){ + selectedIndex + deletedbuilding(item,key){ + // console.log(item) var isdeleted = confirm("确定要删除此建筑吗?") if(isdeleted){ - //请求删除接口 - this.http.delete(`/api/Buildings/${item.buildingId}`).subscribe(data=>{ - + // console.log(key) + // 请求删除接口 + this.http.delete(`/api/Buildings/${item.id}`).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) + + let obj ={index:key} + this.selectedTabChange(obj) }) } } @@ -1131,10 +811,7 @@ export class BasicinfoLookComponent implements OnInit { phone: value.linkphone, address: value.unitaddress, imageUrl: this.imgsrc, - location: { - x: 0, - y: 0 - }, + location: this.markerPosition, modifiedTime: time, organizationId: this.selectedorganizationid, organizationName: null, @@ -1145,45 +822,45 @@ export class BasicinfoLookComponent implements OnInit { } ] } - 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.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 addbody = { //请求创建单位基本信息成功后 直接创建出一个主体建筑模板 + id: "",//即将要生成具体建筑的id + name: "主体建筑", + order: 0, + enabled: true, + companyId: this.unitinfo.id, + buildingTypes: [ + { + id: value.unittype, + name: "" + } + ] + } + this.http.post("/api/Buildings",addbody).subscribe(data=>{//首先创建建筑成功了,需要刷出当前建筑类型的模板 + // alert('创建主体建筑成功') + this.getUnitAllBuildings() + }) + }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); } - this.http.post("/api/Buildings",addbody).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); } - } } @@ -1192,8 +869,6 @@ export class BasicinfoLookComponent implements OnInit { 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 @@ -1221,923 +896,217 @@ export class BasicinfoLookComponent implements OnInit { } } } + + //可选按钮 + checkboxChange(item,$event,buildingData){ + // console.log(item) + if(item.name == '罐区1'){ + // console.log(buildingData) + buildingData.data[0].buildingBasicGroups.forEach(element => { + if(element.name.indexOf('罐区') != -1){ + element.submitted = item.submitted + } + }); + } + } + + //建筑自定义信息按钮 + checkCustomData($event){ + + } + - //切换建筑类型 - 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, + //提交建筑信息 + onSubmitBuildingInfo(value,item,key,invalid){ + // console.log(1,item) + // console.log(2,invalid) + // console.log(3,value) + // console.log(4,this.allunittype) + if(invalid){ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('请填写必填项','确定',config); + }else { + //先把名称和建筑类型单独修改 + let buildingTypeId + this.allunittype.forEach(element => { + element.name == item.buildingTypes[0].name ? buildingTypeId = element.id : null + }); + this.http.put(`/api/Buildings/${item.id}`,{ //(通用)只修改建筑名称和建筑类型 + id: item.id, + name: value.buildingName, + order: this.houses[key].order, enabled: true, companyId: this.unitinfo.id, buildingTypes: [ { - id: n.id, - name: n.name - } - ] - }).subscribe(data=>{ - this.http.get("/api/BuildingBasicInfos",{//请求当前建筑类型的模板信息保存到数组中 - params:{ - companyId :this.unitId, - buildingId:item.buildingId, - buildingType:n.id + id: buildingTypeId, + name: item.buildingTypes[0].name } - }).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 - } - } - }) - }) + ] + },{ + params:{ + companyId : this.unitId + } + }).subscribe((data:any)=>{ + // alert("名称和类型保存成功") + }, + err=>{ + alert("名称和类型保存失败") }) - }) - - } - - 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 - } - ] - }).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 newbody = JSON.parse(JSON.stringify(item.data)) //把数据深拷贝取出来进行操作 + for (let index = 0; index < newbody[0].buildingBasicGroups.length; index++) { + let element = newbody[0].buildingBasicGroups[index]; + element.propertyInfos.forEach(item => { + if(!element.isOptional){ + item.propertyValue ? element.submitted = true : null } - 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 + //删除规则验证标识 + item.isshowrule ? delete item.isshowrule : null + item.rulevalue ? delete item.rulevalue : null + if(item.propertyValue || item.propertyValue == 0){ + item.propertyValue = String(item.propertyValue) } - this.http.post("/api/BuildingCustomData",CustomDatabody,{params:{ - buildingId:item.buildingId - }}).subscribe(data=>{ + }); + //如果是表格需要转换为一维数组 + if(element.type == 1){ + let arr = [] + for (let index = 0; index < element.propertyInfos.length; index++) { + const ele = element.propertyInfos[index]; - }, - err=>{ - alert("自定义信息保存失败") - }) - }else{ - let CustomDatabody = { - id: "", - customProperties: [], - buildingId: item.buildingId + for (let index = 0; index < ele.origin.length; index++) { + const i = ele.origin[index]; + i.tag = String(i.tag) + + if(!element.isOptional){ + i.propertyValue ? element.submitted = true : null + } + arr.push(i) + } } - this.http.post("/api/BuildingCustomData",CustomDatabody,{params:{ - buildingId:item.buildingId - }}).subscribe(data=>{ - - }, - err=>{ - alert("自定义信息保存失败") + for (let index = 0; index < arr.length; index++) { + const i = arr[index]; + i.order = index + } + element.propertyInfos = arr + } + //如果当前分组没勾选 则需先去重然后重置每一个value为空 + if(!element.submitted){ + const res = new Map(); + element.propertyInfos = element.propertyInfos.filter((a) => !res.has(a.propertyName) && res.set(a.propertyName, 1)) + element.propertyInfos.forEach(ele => { + ele.propertyValue = "" }) } - - - if(item.buildtype.indexOf("储罐") == -1 && item.buildtype != "地铁类" && item.buildtype.indexOf("化工") == -1 ){ - // 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); - }) - } + //如果灌区没勾选 并且包含罐区且不包含罐区1的清除 需要把多余罐区2 3 4清除掉再提交 + if(!element.submitted && element.name.indexOf('罐区1') == -1 && element.name.indexOf('罐区') != -1){ + newbody[0].buildingBasicGroups.splice(index--, 1); } - if(item.buildtype.indexOf("储罐") != -1 || item.buildtype.indexOf("化工") != -1 ){ - // 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) + } + // console.log('newbody',newbody) + 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.isCustomData){ + this.http.post("/api/BuildingCustomData",item.customData,{params:{ + companyId :this.unitId, + buildingId:item.id + }}).subscribe(data=>{ - - 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); - }) + }) + }else{ + item.customData.customProperties = [] + this.http.post("/api/BuildingCustomData",item.customData,{params:{ + companyId :this.unitId, + buildingId:item.id + }}).subscribe(data=>{ + + }) + } + + } + } + //更改模板类型 + templateBuildtype(n,item,key){ + this.http.get("/api/BuildingBasicInfos",{//请求当前建筑类型的模板信息保存到数组中 + params:{ + companyId :this.unitId, + buildingId:item.id, + buildingType:n.id + } + }).subscribe(data=>{ + data[0].buildingBasicGroups.forEach(element => { + //需要处理一下表格信息 + if(element.type == 1){ + let afterData = [] + let tempArr = []; + for (let i = 0; i < element.propertyInfos.length; i++) { + element.propertyInfos[i].tag == '' ? element.propertyInfos[i].tag = 1 : null + if (tempArr.indexOf(element.propertyInfos[i].tag) === -1) { + afterData.push({ + tag: element.propertyInfos[i].tag, + origin: [element.propertyInfos[i]] + }); + tempArr.push(element.propertyInfos[i].tag); + } else { + for (let j = 0; j < afterData.length; j++) { + if (afterData[j].tag == element.propertyInfos[i].tag) { + afterData[j].origin.push(element.propertyInfos[i]); + break; + } + } + } + } + element.propertyInfos = afterData + } + }); + let guanquIndex = data[0].buildingBasicGroups.findIndex(item => item.name.indexOf('罐区')>=0); // 找到第一个灌区的索引 + function transferFn(arr) { + const guanquIndex = arr.findIndex(item => item.name.indexOf('罐区')>=0); // 找到第一个灌区的索引 + const guanquList = arr.slice(guanquIndex); // 灌区的列表 + const baseList = arr.slice(0, guanquIndex); // 前面的数据 + const len = guanquList.length; + const num = len/2; // 计算一共有多少对,这里的前提是数据本身必须成对出现 + // 灌区切割出来的数据,分别存放,最后做一下合并 + const array1 = []; + const array2 = []; + for(let i = 0; i { - 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 + // 拼接最后的数据 + const result = [...baseList]; + for(let i = 0, ll = array1.length; i < ll; i++){ + result.push(array1[i]); + if (array2[i]) { + result.push(array2[i]); } - }).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); - }) - } + return result; + } + if(guanquIndex != -1 && data[0].buildingBasicGroups[guanquIndex + 1].name.indexOf(data[0].buildingBasicGroups[guanquIndex].name) == -1){ + data[0].buildingBasicGroups = transferFn(data[0].buildingBasicGroups) } + this.houses[key].data = data }) - - - }} \ No newline at end of file + } +} \ No newline at end of file diff --git a/src/app/key-unit/basicinfo-look/lookmaster.component.html b/src/app/key-unit/basicinfo-look/lookmaster.component.html index 9cf352f..674e8f4 100644 --- a/src/app/key-unit/basicinfo-look/lookmaster.component.html +++ b/src/app/key-unit/basicinfo-look/lookmaster.component.html @@ -4,7 +4,7 @@
    - +
    @@ -14,4 +14,13 @@ + + + + + diff --git a/src/app/key-unit/basicinfo/addhouseinfo.component.ts b/src/app/key-unit/basicinfo/addhouseinfo.component.ts index e888232..0207384 100644 --- a/src/app/key-unit/basicinfo/addhouseinfo.component.ts +++ b/src/app/key-unit/basicinfo/addhouseinfo.component.ts @@ -21,7 +21,6 @@ import { MatSnackBar } from '@angular/material/snack-bar'; this.dialogRef.close(); } ngOnInit(): void { - // console.log(this.data) this.getallunittype() } getallunittype(){ @@ -30,27 +29,24 @@ import { MatSnackBar } from '@angular/material/snack-bar'; }) } onSubmit(value){ - this.http.get("/api/Buildings",{ params:{ companyId:this.data.unitId } }).subscribe((data:any)=>{ - this.data.allBuildings = data + let allBuildings = data let order - if(data.length == 0){ + if(allBuildings.length == 0){ order = 0 }else{ - order = data[data.length - 1].order + 1 + order = allBuildings[allBuildings.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, @@ -68,10 +64,12 @@ import { MatSnackBar } from '@angular/material/snack-bar'; }}).subscribe(data=>{ this.dialogRef.close(data); }) + }) - + + } } \ No newline at end of file diff --git a/src/app/key-unit/basicinfo/basicinfo.component.html b/src/app/key-unit/basicinfo/basicinfo.component.html index 85224ea..bd4b66c 100644 --- a/src/app/key-unit/basicinfo/basicinfo.component.html +++ b/src/app/key-unit/basicinfo/basicinfo.component.html @@ -1,11 +1,10 @@ -
    +
    - + 单位信息 - keyboard_arrow_down
    @@ -66,7 +65,7 @@
    * - 消防救援站: + 辖区中队:
    -
    +
    单位照片: -
    - - +
    +
    - +
    @@ -124,6 +122,7 @@
    +
    @@ -160,61 +159,56 @@
    - - -
    -
    - - - -
    - - -
    -
    - 建筑名称: - - - - * -
    -
    - 建筑类型: - - - {{n.name}} - - - * -
    - -
    -

    {{item.name}}

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

    {{element.name}}

    +
    {{i.propertyName}}({{i.physicalUnit}}) - - - + - - - + 1级 2级 3级 @@ -222,352 +216,153 @@ - + * -
    +
    {{i.rulevalue}}
    - -
    - -

    自定义信息

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

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

    -
    - {{i.propertyName}} ({{i.physicalUnit}}) - - - - - - - - - - - - - - - - 1级 - 2级 - 3级 - 其它 - - - - - * -
    - {{i.rulevalue}} -
    -
    -
    - - -
    -
    - -

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

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

    + + {{element.name}} +

    + + + + + + - - - +
    + + + {{item.propertyName}} + * +
    + +
    - -
    - -

    储罐信息

    -
    - - - - - -
    -
    -

    {{x[0].name}}

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

    {{x[1].name}}

    -
    - - - - - - - - - - - - - + +
    +

    + - -

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

    +
    +

    + + +

    +

    {{element.name}}

    - [(ngModel)]="element.portnum"> -
    其它设施 - -
    +
    + {{i.propertyName}}({{i.physicalUnit}}) + + + + + + + + + + + + + 1级 + 2级 + 3级 + 其它 + + + + + + * +
    + {{i.rulevalue}} +
    +
    - - -
    - -

    自定义信息

    -
    -
    - - -
    - - - - : - - - - * -
    + +
    +

    + {{element.name}} +

    + + + + + + + +
    + + + {{item.propertyName}} + * +
    + +
    -
    - +
    + +

    自定义信息

    +
    +
    + + +
    + + + + : + + + + * +
    +
    - - + +
    - - + - - + + +
    - - diff --git a/src/app/key-unit/basicinfo/basicinfo.component.scss b/src/app/key-unit/basicinfo/basicinfo.component.scss index 7ffed03..9c6800b 100644 --- a/src/app/key-unit/basicinfo/basicinfo.component.scss +++ b/src/app/key-unit/basicinfo/basicinfo.component.scss @@ -1,7 +1,7 @@ .topbox{ height: 485px; width: 100%; - // border-bottom: 1px solid black; + padding-bottom: 20px; .mainbox{ height: 100%; position: relative; @@ -40,7 +40,8 @@ } .addbtn{ width: 695px; - margin:9px 0; + margin:20px 0; + padding-bottom: 20px; } .uploadimg{ width: 400px; @@ -150,52 +151,34 @@ z-index: 1; } } - } } -.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; +.bodyBox{ + flex: 70%;overflow-y: auto; + position: relative; + .addBuilding{ + position: absolute; + z-index: 999; + left: 0; + top: 3px; } - .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; + .buildInfoInput{ + width: 393px; + text-align: end; + margin-left:240px; + } + .infobtnbox{ + position: absolute; + top: 30px; + right: 75px; + button{ + width: 80px; + height: 40px; + margin: 0 12px; + margin-top: 15px; } } } - .btn{ width: 100%; text-align: center; @@ -207,37 +190,29 @@ margin-top: 58px; margin-left: 203px; } -.mat-table{ - width: 100%; -} + table{ - width: 1000px; - thead{ - tr{ - th{ - width: 60px; - display: block; - float: left; - - } + width: 99%; + tr{ + display: flex; + td,th{ + flex: 1; } - } - tbody{ - tr{ + th{ + display: flex; + align-items: center; + justify-content: center; - td{ - width: 60px; - display: block; - float: left; - text-align: center; - } + } + input{ + border: 0px ; } } } - +table,table tr th, table tr td { border: 0.1px solid gray; } +table { text-align: center; border-collapse: collapse; padding:2px;} .deviceinfo{ - // border-bottom: 1px solid black;; padding-bottom: 60px; } .tankdetailinfo{ @@ -251,14 +226,10 @@ table{ } .tankinfo{ display: block; - width: 100%; - // height: 45px; + width: 97.5%; text-align: center; + border: 0px; } -// .adddeviceinfo{ -// // position: absolute; -// // left: 0px; -// } .submit1{ margin-left: -66px !important; } @@ -270,31 +241,7 @@ textarea { 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; @@ -312,9 +259,4 @@ textarea { padding-left: 77px; font-size: 12px; color: red; - } -.mat-expansion-panel{ - span{ - color: black; - } -} \ No newline at end of file + } \ No newline at end of file diff --git a/src/app/key-unit/basicinfo/basicinfo.component.ts b/src/app/key-unit/basicinfo/basicinfo.component.ts index f390739..f3a523d 100644 --- a/src/app/key-unit/basicinfo/basicinfo.component.ts +++ b/src/app/key-unit/basicinfo/basicinfo.component.ts @@ -1,17 +1,24 @@ -import { Component, OnInit, Inject ,ViewChild, ElementRef, Renderer2} from '@angular/core'; +import { Component, OnInit, Inject ,ViewChild, Renderer2, ElementRef, Directive, forwardRef} 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 { AbstractControl, FormControl, NG_VALIDATORS, Validator } 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 { 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 { ActivatedRoute } from '@angular/router' -import { TabbarAndScoreService } from 'src/app/http-interceptors/tabbar-and-score.service'; +import { ActivatedRoute } from '@angular/router'; declare var AMap: any; @Component({ @@ -39,8 +46,15 @@ export class BasicinfoComponent implements OnInit { } ] } - - + + 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, @@ -60,25 +74,40 @@ export class BasicinfoComponent implements OnInit { isorganizationbox = false//控制辖区中队框的显示隐藏 selectedorganization: any//所选的辖区中队 selectedorganizationid:any //所选的辖区中队的id - highhouse = false//控制高层表单的显示 defaultbuildingTypes :any //存储当前建筑的默认类型的id buildingTypesname:any//存储当前建筑的默认类型name buildingCustomData:any //存储当前建筑的自定义信息 - - - constructor(private elementRef: ElementRef,public renderer2: Renderer2,private tabbarService: TabbarAndScoreService,private route:ActivatedRoute,private http: HttpClient, private tree: TreeService, public dialog: MatDialog,public snackBar: MatSnackBar) { } - + allunittype: any //所有单位类型 + allorganizing:any = [] //所有组织机构 + constructor(private route:ActivatedRoute,private elementRef: ElementRef,public renderer2: Renderer2,private http: HttpClient, private tree: TreeService, private sanitizer: DomSanitizer, public dialog: MatDialog,public snackBar: MatSnackBar) { } + houses: any = [] //存储当前单位的建筑信息 unitId : any //当前单位id ngOnInit(): void { - this.getallunittype()//获得所有单位类型 - this.getorganization()//获得所有组织机构 + 获得当前单位的基本信息 - this.getunitallbuilding()//获得当前单位所有建筑 + this.getallunittype() + this.getorganization() + this.getUnitAllBuildings()//获得单位下所有建筑 this.unitId = this.route.snapshot.queryParams.id - sessionStorage.setItem("companyId",this.route.snapshot.queryParams.id); } + //获得单位下所有建筑 + getUnitAllBuildings(){ + this.unitId = this.route.snapshot.queryParams.id + this.http.get("/api/Buildings",{ + params:{ + companyId:this.unitId + } + }).subscribe(async (data:any)=>{ // 获得当前单位所有的建筑 + data.forEach(element => { + element.data = [] + }); + this.houses = data + this.getBuildingInfo() + }) + } + + isMapLabel:boolean //地图标注位置 @@ -88,6 +117,7 @@ export class BasicinfoComponent implements OnInit { isGisTopBoxTwo:boolean = false//点击位置按钮 oldPositionMarker:any //旧位置marker实例 newPositionMarker:any //新位置marker实例 + newPositionMarkerContent:any = '
    ' + ' ' + @@ -118,46 +148,45 @@ export class BasicinfoComponent implements OnInit { }) } + //初始化地图 labelGis(){ this.map = new AMap.Map('container', { zoom:12 }) - - this.map.on('complete', () => { this.isGisTopBox = true }); - //输入提示 - var autoOptions = { - input: "tipinput" - }; - AMap.plugin(['AMap.PlaceSearch','AMap.AutoComplete'], ()=>{ - var auto = new AMap.AutoComplete(autoOptions); - this.placeSearch = new AMap.PlaceSearch(); //构造地点查询类 - auto.on("select", (e)=>{ - console.log(e) - console.log( this.newPositionMarker) - this.newPositionMarker.setPosition([e.poi.location.lng,e.poi.location.lat]) - this.markerPosition2 = {x: e.poi.location.lng, y: e.poi.location.lat} - this.map.setCenter([e.poi.location.lng,e.poi.location.lat]); //设置地图中心点 - });//注册监听,当选中某条记录时会触发 + //输入提示 + var autoOptions = { + input: "tipinput" + }; + AMap.plugin(['AMap.PlaceSearch','AMap.AutoComplete'], ()=>{ + var auto = new AMap.AutoComplete(autoOptions); + this.placeSearch = new AMap.PlaceSearch(); //构造地点查询类 + auto.on("select", (e)=>{ + // console.log(e) + // console.log( this.newPositionMarker) + this.newPositionMarker.setPosition([e.poi.location.lng,e.poi.location.lat]) + this.markerPosition2 = {x: e.poi.location.lng, y: e.poi.location.lat} + this.map.setCenter([e.poi.location.lng,e.poi.location.lat]); //设置地图中心点 + });//注册监听,当选中某条记录时会触发 - }); + }); - if(this.isMapLabel){//如果已经标注单位坐标 - console.log('已标注单位位置') - this.map.setCenter([this.unitinfo.location.x,this.unitinfo.location.y]); - this.oldPositionMarker = new AMap.Marker({ - position: [this.unitinfo.location.x,this.unitinfo.location.y], - content: this.newPositionMarkerContent, - offset: new AMap.Pixel(-15, -18) - }) - // 将 markers 添加到地图 - this.map.add(this.oldPositionMarker); - }else{ - console.log('未标注单位位置') - this.map.setCity('上海市'); - } + if(this.isMapLabel){//如果已经标注单位坐标 + // console.log('已标注单位位置') + this.map.setCenter([this.unitinfo.location.x,this.unitinfo.location.y]); + this.oldPositionMarker = new AMap.Marker({ + position: [this.unitinfo.location.x,this.unitinfo.location.y], + content: this.newPositionMarkerContent, + offset: new AMap.Pixel(-15, -18) + }) + // 将 markers 添加到地图 + this.map.add(this.oldPositionMarker); + }else{ + // console.log('未标注单位位置') + this.map.setCity('上海'); + } } markerPosition2 //点击位置按钮 @@ -165,7 +194,7 @@ export class BasicinfoComponent implements OnInit { this.isGisTopBox = false this.isGisTopBoxTwo = true if(this.isMapLabel){//如果已经标注单位坐标 - console.log('已标注单位位置') + // console.log('已标注单位位置') if(this.oldPositionMarker){ this.oldPositionMarker.setContent(this.oldPositionMarkerContent) @@ -219,7 +248,7 @@ export class BasicinfoComponent implements OnInit { }) }else{ - console.log('未标注单位位置') + // console.log('未标注单位位置') if(this.newPositionMarker){ this.newPositionMarker.setContent(this.oldPositionMarkerContent) } @@ -276,22 +305,25 @@ export class BasicinfoComponent implements OnInit { } })//取消 } + + + } + + //获得所有单位类型 - allunittype: any //所有单位类型 getallunittype() { this.http.get("/api/BuildingTypes/Simple").subscribe(data => { this.allunittype = data }) } //获得所有组织机构 - allorganizing:any = [] //所有组织机构 getorganization() { this.http.get('/api/Organizations').subscribe( (data: any) => { - this.allorganizing = data; + this.allorganizing = data this.dataSource.data = this.tree.toTree(data); let _this = this this.getunitinfo().then((e)=>{ @@ -342,7 +374,7 @@ export class BasicinfoComponent implements OnInit { }) this.selectedorganization = str.substr(1) } - } + } this.unitinfo = data resolve(this.unitinfo) this.selectedorganizationid = data.organizationId @@ -357,471 +389,196 @@ export class BasicinfoComponent implements OnInit { }) } - - //石油化工 装置信息 勾选框 - checkboxchange(item,e){ - if(item.buildingBasicGroups){ - item.buildingBasicGroups.forEach(item=>{ - if(item.name != "基本信息" && item.name != "装置信息"){ - item.submitted = e.checked - } - }) - } - } - - unitallbuilding:any = []//用于存储当前单位所有的建筑 - - - bigfor:any//循环(储罐信息+罐区信息)大组 - npdata:any = [] - newnpdata:any //用于存储石油化工 储罐信息/罐区情况的 datasource - - - deviceinfodata:any=[];//用于存储石油化工装置信息的数组 - zhuangzhiinfodatasource:any = [] //用于存储石油化工装置信息表格的数据来源 - newzhuangzhiinfodatasource:any= []//存储石油化工装置信息表格的 datasource形式 - devicedataSourcebox:any = [] //存储多个石油化工建筑的不同装置信息表格datasource - //在石油化工模板种点击增加装置信息 - adddeviceinfo(item){ - item.newzhuangzhiinfodatasource.push({ - name:"", - flow:"", - danger:"", - payattentionto:"" + //获得建筑自定义信息 + getbuildingCustomData(){ + this.http.get("/api/BuildingCustomData",{params:{ + buildingId:this.houses[this.selectedBuildingIndex].id + }}).subscribe(data=>{ + this.buildingCustomData = data }) - 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; + //点击+号 增加建筑 + addhouseinfo() { + const dialogRef = this.dialog.open(AddHouseInfo, {//调用open方法打开对话框并且携带参数过去 + width: '260px', + data: {unitinfo:this.unitinfo,unitId:this.unitId} }); - 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.indexOf('化工') != -1 || data[0].buildtype.indexOf('储罐') != -1){ - 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) + dialogRef.afterClosed().subscribe( + async data => { + if(data){ + this.houses.push(data) + // console.log('新增了',this.houses) } - }) - 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 //当前单位所有的建筑 - houses: any = [] //存储当前单位的建筑信息 - basicCategoryId:any //当前单位所有建筑中位于第一个的建筑类型id - presentbuildinfoId:any //用于存储当前单位第一个建筑的具体id - buildinginfoId:any = []//用于存储当前单位所有具体建筑的id - getunitallbuilding(){ - this.houses = [] + //获得建筑的全部信息放到对应houses数组的建筑中 + selectedBuildingIndex:number = 0 + getBuildingInfo(){ this.unitId = this.route.snapshot.queryParams.id - this.http.get("/api/Buildings",{ + this.http.get("/api/BuildingBasicInfos",{ // 循环请求当前单位建筑每一个建筑的信息保存到数组中 params:{ - companyId:this.unitId + companyId :this.unitId, + buildingId:this.houses[this.selectedBuildingIndex].id, + buildingType:this.houses[this.selectedBuildingIndex].buildingTypes[0].id } - }).subscribe(async (data:any)=>{ // 获得当前单位所有的建筑 - console.log('所有建筑',data) - this.allBuildings = 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)=>{ - //获得当前建筑自定义信息并且添加到建筑属性对象中 - let _data = data - console.log('当前建筑信息'+index,data) - this.http.get("/api/BuildingCustomData",{params:{ - buildingId:n.id - }}).subscribe((data:any)=>{ - console.log('当前建筑自定义信息'+index,data) - _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.indexOf('化工') != -1 || data[0].buildtype.indexOf('储罐') != -1){ - 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{ + // console.log('当前选择建筑的基础信息',data) + //需要处理一下表格信息 + data[0].buildingBasicGroups.forEach(element => { + //需要处理一下表格信息 + if(element.type == 1){ + let afterData = [] + let tempArr = []; + for (let i = 0; i < element.propertyInfos.length; i++) { + element.propertyInfos[i].tag == '' ? element.propertyInfos[i].tag = 1 : null + if (tempArr.indexOf(element.propertyInfos[i].tag) === -1) { + afterData.push({ + tag: element.propertyInfos[i].tag, + origin: [element.propertyInfos[i]] + }); + tempArr.push(element.propertyInfos[i].tag); + } else { + for (let j = 0; j < afterData.length; j++) { + if (afterData[j].tag == element.propertyInfos[i].tag) { + afterData[j].origin.push(element.propertyInfos[i]); + break; } - - - - //bigfor决定当前储罐分组有几个 - bigfor.forEach((item,index)=>{ - - item[1].propertyInfos = this.formatHandle(item[1].propertyInfos) - - }) - data[0].bigfor = bigfor } - resolve(data[0]) //把数据传递出去 - }) + } + } + function compare(property){ + return function(a,b){ + var value1 = a[property]; + var value2 = b[property]; + return value1 - value2; + } + } + afterData.forEach(item =>{ + item.origin = item.origin.sort(compare('order')) }) - this.houses.push(result) // 并且把他添加到 tab 总体数组中 + element.propertyInfos = afterData.sort(compare('tag')) + // console.log(afterData,888); } + }); + let guanquIndex = data[0].buildingBasicGroups.findIndex(item => item.name.indexOf('罐区')>=0); // 找到第一个灌区的索引 + function transferFn(arr) { + const guanquIndex = arr.findIndex(item => item.name.indexOf('罐区')>=0); // 找到第一个灌区的索引 + + const guanquList = arr.slice(guanquIndex); // 灌区的列表 + const baseList = arr.slice(0, guanquIndex); // 前面的数据 + const len = guanquList.length; + const num = len/2; // 计算一共有多少对,这里的前提是数据本身必须成对出现 + // 灌区切割出来的数据,分别存放,最后做一下合并 + const array1 = []; + const array2 = []; + for(let i = 0; i{ + if(data && data.customProperties.length != 0){ + this.houses[this.selectedBuildingIndex].customData = data + this.houses[this.selectedBuildingIndex].isCustomData = true + }else{ + this.houses[this.selectedBuildingIndex].isCustomData = false + this.houses[this.selectedBuildingIndex].customData = { + id: "", + customProperties: [{name:'',value:''}], + buildingId: this.houses[this.selectedBuildingIndex].id + } + } + }) }) - } - - 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] + //点击选项卡 + selectedTabChange(e){ + // console.log(e) + this.selectedBuildingIndex = e.index + if((this.houses[this.selectedBuildingIndex].data && !this.houses[this.selectedBuildingIndex].data.length) || !this.houses[this.selectedBuildingIndex].data){ + this.getBuildingInfo() + } } - 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] + //表格加一行 + addline(ele){ + let newObj = JSON.parse(JSON.stringify(ele[0])) + for (let index = 0; index < newObj.origin.length; index++) { + const element = newObj.origin[index]; + element.propertyValue = "" + element.tag = Number(ele[ele.length - 1].tag) + 1 } - + newObj.tag = Number(ele[ele.length - 1].tag) + 1 + ele.push(newObj) } - - - //增加储罐大分组 - //在石油化工模板种点击增加储罐信息 - //获得模板信息 - templateinfo:any - gettemplateinfo(typeid){ - + //表格减一行 + removeline(ele){ + if(ele.length>1){ + ele.pop() + }else{ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('只剩一行,无法删除','确定',config); + } } - - 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 - } - - ]) + //建筑自定义信息加一行 + addCustomData(item){ + item.customData.customProperties.push({ + name:'', + value:'' }) - } - //移除储罐大分组 - removetankbox(item,bigkey){ - if(item.bigfor.length > 1){ + //建筑自定义信息减一行 + popCustomData(item){ + item.customData.customProperties.pop() + } + //储罐加一组 + addTankBox(item,groupsIndex){ + //取出现在最后一个罐区的数字 + let num = (item.data[0].buildingBasicGroups[item.data[0].buildingBasicGroups.length - 1].name).replace(/[^0-9]/ig,"") + let obj1 = JSON.parse(JSON.stringify(item.data[0].buildingBasicGroups[groupsIndex])) + let obj2 = JSON.parse(JSON.stringify(item.data[0].buildingBasicGroups[groupsIndex + 1])) + obj1.name = '罐区' + (Number(num) + 1) + obj2.name = '罐区' + (Number(num) + 1) + '/储罐信息' + // console.log(obj2) + obj1.propertyInfos.forEach(element => { + element.propertyValue = '' + }); + let newArr = [obj2.propertyInfos[0]] + obj2.propertyInfos = newArr + obj2.propertyInfos[0].origin.forEach(element => { + element.propertyValue = '' + }); + item.data[0].buildingBasicGroups.push(obj1) + item.data[0].buildingBasicGroups.push(obj2) + // console.log(item.data[0].buildingBasicGroups) + } + //储罐减一组 + removeTankBox(item,groupsIndex){ + let num = (item.data[0].buildingBasicGroups[item.data[0].buildingBasicGroups.length - 1].name).replace(/[^0-9]/ig,"") + if(num != 1){ var isdeleted = confirm("确定要删除末尾储罐分组吗?") if(isdeleted){ - item.bigfor.pop() + item.data[0].buildingBasicGroups.pop() + item.data[0].buildingBasicGroups.pop() } }else{ const config = new MatSnackBarConfig(); @@ -830,150 +587,6 @@ export class BasicinfoComponent implements OnInit { 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.indexOf('化工') != -1 || data[0].buildtype.indexOf('储罐') != -1){ - 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) - this.tabbarService.sendMessage('changeScore');//通知服务改变分数 - } - } - ); - } - - //点击不同的tab选项 - selecttab(e) { - } - FunData(e){//切割数组 let proportion = 2; //按照比例切割 let num = 0; @@ -993,7 +606,6 @@ export class BasicinfoComponent implements OnInit { //点击辖区中队树,将选择的辖区中队添加到变量 add(node) { - // console.log(node) this.selectedorganizationid = node.id this.isorganizationbox = false @@ -1018,13 +630,11 @@ export class BasicinfoComponent implements OnInit { this.selectedorganization = str.substr(1) } -} - + } //关闭辖区中队隐藏框 closeorganizationbox() { this.isorganizationbox = false } - //打开辖区中队隐藏框 openorganizationbox() { this.isorganizationbox = true @@ -1033,8 +643,7 @@ export class BasicinfoComponent implements OnInit { hasChild = (_: number, node: any) => node.expandable; imgsrc = "" //没有上传图片时显示的图片,当上传后就会被替换,即保存时需要传的图片地址参数 - noImgSrc = '../../../assets/images/upload.jpg' - // imgsrc = "" + noImg = '../../../assets/images/upload.jpg' imgUrl = ""//返回来的图片地址后缀 file: any; //上传的文件 objectName: any; //上传对象名 @@ -1061,7 +670,7 @@ export class BasicinfoComponent implements OnInit { this.startUploading() } } - + }, 500); } //查看单位大图 @@ -1072,7 +681,7 @@ export class BasicinfoComponent implements OnInit { data: {img:this.imgsrc} }); dialogRef.afterClosed().subscribe( - + ); } //上传文件 @@ -1083,6 +692,7 @@ export class BasicinfoComponent implements OnInit { 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)=>{ @@ -1104,7 +714,36 @@ export class BasicinfoComponent implements OnInit { }) } } - + + //小于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 //获取上传的文件 @@ -1117,6 +756,7 @@ export class BasicinfoComponent implements OnInit { 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 对象 @@ -1142,21 +782,26 @@ export class BasicinfoComponent implements OnInit { 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){ + selectedIndex + deletedbuilding(item,key){ + // console.log(item) var isdeleted = confirm("确定要删除此建筑吗?") if(isdeleted){ - //请求删除接口 - this.http.delete(`/api/Buildings/${item.buildingId}`).subscribe(data=>{ - + // console.log(key) + // 请求删除接口 + this.http.delete(`/api/Buildings/${item.id}`).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) - this.tabbarService.sendMessage('changeScore');//通知服务改变分数 + + let obj ={index:key} + this.selectedTabChange(obj) }) } } @@ -1166,7 +811,7 @@ export class BasicinfoComponent implements OnInit { if(invalid){ const config = new MatSnackBarConfig(); config.verticalPosition = 'top'; - config.duration = 3000 + config.duration = 3000 this.snackBar.open('请填写必填项','确定',config); }else{ sessionStorage.setItem('buildingTypeId',value.unittype) @@ -1191,18 +836,17 @@ export class BasicinfoComponent implements OnInit { ] } this.http.put(`/api/Companies/${this.unitId}`,body).subscribe((data:any)=>{ //修改单位基本信息 - this.getunitinfo() + // 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, + order: 0, enabled: true, companyId: this.unitinfo.id, buildingTypes: [ @@ -1212,18 +856,15 @@ export class BasicinfoComponent implements OnInit { } ] } - this.http.post("/api/Buildings",addbody,{params:{ - companyId : this.unitId - }}).subscribe(data=>{//首先创建建筑成功了,需要刷出当前建筑类型的模板 - this.getunitallbuilding() + this.http.post("/api/Buildings",addbody).subscribe(data=>{//首先创建建筑成功了,需要刷出当前建筑类型的模板 + // alert('创建主体建筑成功') + this.getUnitAllBuildings() }) - this.tabbarService.sendMessage('changeScore');//通知服务改变分数 }else{ const config = new MatSnackBarConfig(); config.verticalPosition = 'top'; config.duration = 3000 this.snackBar.open('保存成功','确定',config); - this.tabbarService.sendMessage('changeScore');//通知服务改变分数 } }), err=>{ @@ -1241,8 +882,6 @@ export class BasicinfoComponent implements OnInit { 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 @@ -1270,934 +909,217 @@ export class BasicinfoComponent implements OnInit { } } } + + //可选按钮 + checkboxChange(item,$event,buildingData){ + // console.log(item) + if(item.name == '罐区1'){ + // console.log(buildingData) + buildingData.data[0].buildingBasicGroups.forEach(element => { + if(element.name.indexOf('罐区') != -1){ + element.submitted = item.submitted + } + }); + } + } + + //建筑自定义信息按钮 + checkCustomData($event){ + + } + - //切换建筑类型 - 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, + //提交建筑信息 + onSubmitBuildingInfo(value,item,key,invalid){ + // console.log(1,item) + // console.log(2,invalid) + // console.log(3,value) + // console.log(4,this.allunittype) + if(invalid){ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('请填写必填项','确定',config); + }else { + //先把名称和建筑类型单独修改 + let buildingTypeId + this.allunittype.forEach(element => { + element.name == item.buildingTypes[0].name ? buildingTypeId = element.id : null + }); + this.http.put(`/api/Buildings/${item.id}`,{ //(通用)只修改建筑名称和建筑类型 + id: item.id, + name: value.buildingName, + order: this.houses[key].order, enabled: true, companyId: this.unitinfo.id, buildingTypes: [ { - id: n.id, - name: n.name - } + id: buildingTypeId, + name: item.buildingTypes[0].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 - } - } - }) - }) + }).subscribe((data:any)=>{ + // alert("名称和类型保存成功") + }, + err=>{ + alert("名称和类型保存失败") }) - }) - - } - - 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 newbody = JSON.parse(JSON.stringify(item.data)) //把数据深拷贝取出来进行操作 + for (let index = 0; index < newbody[0].buildingBasicGroups.length; index++) { + let element = newbody[0].buildingBasicGroups[index]; + element.propertyInfos.forEach(item => { + if(!element.isOptional){ + item.propertyValue ? element.submitted = true : null } - 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 + //删除规则验证标识 + item.isshowrule ? delete item.isshowrule : null + item.rulevalue ? delete item.rulevalue : null + if(item.propertyValue || item.propertyValue == 0){ + item.propertyValue = String(item.propertyValue) } - this.http.post("/api/BuildingCustomData",CustomDatabody,{params:{ - companyId :this.unitId, - buildingId:item.buildingId - }}).subscribe(data=>{ + }); + //如果是表格需要转换为一维数组 + if(element.type == 1){ + let arr = [] + for (let index = 0; index < element.propertyInfos.length; index++) { + const ele = element.propertyInfos[index]; - }, - err=>{ - alert("自定义信息保存失败") - }) - }else{ - let CustomDatabody = { - id: "", - customProperties: [], - buildingId: item.buildingId + for (let index = 0; index < ele.origin.length; index++) { + const i = ele.origin[index]; + i.tag = String(i.tag) + + if(!element.isOptional){ + i.propertyValue ? element.submitted = true : null + } + arr.push(i) + } } - this.http.post("/api/BuildingCustomData",CustomDatabody,{params:{ - companyId :this.unitId, - buildingId:item.buildingId - }}).subscribe(data=>{ - - }, - err=>{ - alert("自定义信息保存失败") + for (let index = 0; index < arr.length; index++) { + const i = arr[index]; + i.order = index + } + element.propertyInfos = arr + } + //如果当前分组没勾选 则需先去重然后重置每一个value为空 + if(!element.submitted){ + const res = new Map(); + element.propertyInfos = element.propertyInfos.filter((a) => !res.has(a.propertyName) && res.set(a.propertyName, 1)) + element.propertyInfos.forEach(ele => { + ele.propertyValue = "" }) } - - - if(item.buildtype.indexOf('化工') == -1 && item.buildtype != "地铁类" && item.buildtype.indexOf('储罐') == -1){ - // 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); - this.tabbarService.sendMessage('changeScore');//通知服务改变分数 - }, - err=>{ - const config = new MatSnackBarConfig(); - config.verticalPosition = 'top'; - config.duration = 3000 - this.snackBar.open('请检查输入数据是否有误','确定',config); - }) - } + //如果灌区没勾选 并且包含罐区且不包含罐区1的清除 需要把多余罐区2 3 4清除掉再提交 + if(!element.submitted && element.name.indexOf('罐区1') == -1 && element.name.indexOf('罐区') != -1){ + newbody[0].buildingBasicGroups.splice(index--, 1); } - if(item.buildtype.indexOf('化工') != -1 || item.buildtype.indexOf('储罐') != -1){ - // 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) + } + // console.log('newbody',newbody) + 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.isCustomData){ + this.http.post("/api/BuildingCustomData",item.customData,{params:{ + companyId :this.unitId, + buildingId:item.id + }}).subscribe(data=>{ - - 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("建筑信息保存成功") - this.tabbarService.sendMessage('changeScore');//通知服务改变分数 - }, - err=>{ - const config = new MatSnackBarConfig(); - config.verticalPosition = 'top'; - config.duration = 3000 - this.snackBar.open('请检查输入数据是否有误','确定',config); - }) + }) + }else{ + item.customData.customProperties = [] + this.http.post("/api/BuildingCustomData",item.customData,{params:{ + companyId :this.unitId, + buildingId:item.id + }}).subscribe(data=>{ + + }) + } + + } + } + //更改模板类型 + templateBuildtype(n,item,key){ + this.http.get("/api/BuildingBasicInfos",{//请求当前建筑类型的模板信息保存到数组中 + params:{ + companyId :this.unitId, + buildingId:item.id, + buildingType:n.id + } + }).subscribe(data=>{ + data[0].buildingBasicGroups.forEach(element => { + //需要处理一下表格信息 + if(element.type == 1){ + let afterData = [] + let tempArr = []; + for (let i = 0; i < element.propertyInfos.length; i++) { + element.propertyInfos[i].tag == '' ? element.propertyInfos[i].tag = 1 : null + if (tempArr.indexOf(element.propertyInfos[i].tag) === -1) { + afterData.push({ + tag: element.propertyInfos[i].tag, + origin: [element.propertyInfos[i]] + }); + tempArr.push(element.propertyInfos[i].tag); + } else { + for (let j = 0; j < afterData.length; j++) { + if (afterData[j].tag == element.propertyInfos[i].tag) { + afterData[j].origin.push(element.propertyInfos[i]); + break; + } + } + } + } + element.propertyInfos = afterData + } + }); + let guanquIndex = data[0].buildingBasicGroups.findIndex(item => item.name.indexOf('罐区')>=0); // 找到第一个灌区的索引 + function transferFn(arr) { + const guanquIndex = arr.findIndex(item => item.name.indexOf('罐区')>=0); // 找到第一个灌区的索引 + const guanquList = arr.slice(guanquIndex); // 灌区的列表 + const baseList = arr.slice(0, guanquIndex); // 前面的数据 + const len = guanquList.length; + const num = len/2; // 计算一共有多少对,这里的前提是数据本身必须成对出现 + // 灌区切割出来的数据,分别存放,最后做一下合并 + const array1 = []; + const array2 = []; + for(let i = 0; i { - 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 + // 拼接最后的数据 + const result = [...baseList]; + for(let i = 0, ll = array1.length; i < ll; i++){ + result.push(array1[i]); + if (array2[i]) { + result.push(array2[i]); } - }).subscribe((data:any)=>{ - this.houses[key].id = data[0].id - const config = new MatSnackBarConfig(); - config.verticalPosition = 'top'; - config.duration = 3000 - this.snackBar.open('建筑信息保存成功','确定',config); - this.tabbarService.sendMessage('changeScore');//通知服务改变分数 - }, - err=>{ - const config = new MatSnackBarConfig(); - config.verticalPosition = 'top'; - config.duration = 3000 - this.snackBar.open('请检查输入数据是否有误','确定',config); - }) - } + return result; + } + if(guanquIndex != -1 && data[0].buildingBasicGroups[guanquIndex + 1].name.indexOf(data[0].buildingBasicGroups[guanquIndex].name) == -1){ + data[0].buildingBasicGroups = transferFn(data[0].buildingBasicGroups) } + this.houses[key].data = data }) - - - }} \ No newline at end of file + } +} \ No newline at end of file