diff --git a/src/app/canvas-share-data.service.ts b/src/app/canvas-share-data.service.ts index 468cc09..4fef136 100644 --- a/src/app/canvas-share-data.service.ts +++ b/src/app/canvas-share-data.service.ts @@ -1,6 +1,6 @@ import { HttpClient } from '@angular/common/http'; import { Injectable } from '@angular/core'; -import {ReplaySubject} from 'rxjs'; +import { ReplaySubject } from 'rxjs'; import { Observable } from 'rxjs'; import { GameMode } from './working-area/model/gameMode'; @@ -8,7 +8,7 @@ import { GameMode } from './working-area/model/gameMode'; providedIn: 'root' }) export class CanvasShareDataService { - constructor(private http:HttpClient) { } + constructor(private http: HttpClient) { } private _sendMessage: ReplaySubject = new ReplaySubject(1); examDisposalNodesData; // 考生进入时获取当前试卷的处置节点 @@ -18,9 +18,9 @@ export class CanvasShareDataService { - isChange:boolean = false; // 数据 是否改动 + isChange: boolean = false; // 数据 是否改动 - selectTemplateData:any; // 选择当前 模板数据 + selectTemplateData: any; // 选择当前 模板数据 // 总平面图/建筑 楼层 selectStorey:any = {area: '', details: ''}; // 选择当前 楼层 数据 @@ -43,36 +43,38 @@ export class CanvasShareDataService { gameMode:GameMode = GameMode.BasicInformation; facilityAssetsName = new Map([ - [ '消防水池', '消防水池'], - [ '疏散楼梯', '疏散楼梯'], - [ '消防电梯', '消防电梯'], - [ '避难区域', '避难区域'], - [ '安全出口', '安全出口'], - [ '地上消火栓', '室外消火栓' ], - [ '地下消火栓', '室外消火栓' ], - [ '室内消火栓', '室内消火栓' ], - [ '供水管网', '供水管网'], - [ '湿式自动喷淋系统', '湿式自动喷淋系统'], - [ '水幕系统', '水幕系统' ], - [ '消防泵房', '消防泵房'], - [ '水泵接合器(地上)', '水泵接合器'], - [ '水泵接合器(地下)', '水泵接合器'], - [ '水泵接合器(墙壁)', '水泵接合器'], - [ '消防水泵房', '消防水泵房'], - [ '箱式消火栓', '箱式消火栓'], - [ '固定水炮', '消防水炮' ], - [ '消防水罐', '储水罐'], - [ '消防水罐2', '储水罐'], - [ '卧式水罐', '储水罐'], - [ '消防泵', '水泵' ], - [ '泡沫泵', '水泵' ], - [ '泡沫泵房', '泡沫站'], - [ '泡沫栓', '泡沫栓' ], - [ '泡沫枪', '泡沫枪'], - [ '泡沫发生器', '泡沫发生器' ], - [ '消防管网', '消防管网'], - [ '泡沫管网', '消防管网'], - [ 'DCS控制室', 'DCS控制室'] + ['消防水池', '消防水池'], + ['疏散楼梯', '疏散楼梯'], + ['消防电梯', '消防电梯'], + ['避难区域', '避难区域'], + ['安全出口', '安全出口'], + ['地上消火栓', '室外消火栓'], + ['地下消火栓', '室外消火栓'], + ['室内消火栓', '室内消火栓'], + ['供水管网', '供水管网'], + ['湿式自动喷淋系统', '湿式自动喷淋系统'], + ['水幕系统', '水幕系统'], + ['消防泵房', '消防泵房'], + ['水泵接合器(地上)', '水泵接合器'], + ['水泵接合器(地下)', '水泵接合器'], + ['水泵接合器(墙壁)', '水泵接合器'], + ['水泵接合器(喷淋)', '水泵接合器'], + ['水泵接合器(消防)', '水泵接合器'], + ['消防水泵房', '消防水泵房'], + ['箱式消火栓', '箱式消火栓'], + ['固定水炮', '消防水炮'], + ['消防水罐', '储水罐'], + ['消防水罐2', '储水罐'], + ['卧式水罐', '储水罐'], + ['消防泵', '水泵'], + ['泡沫泵', '水泵'], + ['泡沫泵房', '泡沫站'], + ['泡沫栓', '泡沫栓'], + ['泡沫枪', '泡沫枪'], + ['泡沫发生器', '泡沫发生器'], + ['消防管网', '消防管网'], + ['泡沫管网', '消防管网'], + ['DCS控制室', 'DCS控制室'] ]); /** * 向其他组件发送信息 * @@ -80,15 +82,15 @@ export class CanvasShareDataService { public sendMessage(message: any) { this._sendMessage.next(message); } - public getMessage(): Observable { + public getMessage(): Observable { return this._sendMessage.asObservable(); } //分段上传 - sectionUpload (companyId:string,file) { - let data = {filename: file.name} - return new Promise ((resolve, reject)=>{ - this.http.post(`/api/NewMultipartUpload/PlanPlatform/${companyId}/DisposalNode`,{},{params:data}).subscribe(async (data:any)=>{ //初始化分段上传 + sectionUpload(companyId: string, file) { + let data = { filename: file.name } + return new Promise((resolve, reject) => { + this.http.post(`/api/NewMultipartUpload/PlanPlatform/${companyId}/DisposalNode`, {}, { params: data }).subscribe(async (data: any) => { //初始化分段上传 let objectName = data.objectName let uploadId = data.uploadId let PartNumberETag = []; //每次返回需要保存的信息 @@ -96,30 +98,30 @@ export class CanvasShareDataService { let fileSize = file.size || null //上传文件的总大小 let shardSize = 5 * 1024 * 1024 //5MB一个分片 let allSlice = Math.ceil(fileSize / shardSize) //总文件/5MB===共分多少段 - - for (let i = 0;i < allSlice;i++) { //循环分段上传 - let start = i * shardSize //切割文件开始位置 - let end = Math.min(fileSize, start + shardSize); //切割文件结束位置 - let formData = new FormData() - formData.append("file",file.slice(start, end)) - - //同步写法实现异步调用 - let result = await new Promise((resolve, reject) => { - // await 需要后面返回一个 promise 对象 - this.http.post(`/api/MultipartUpload/PlanPlatform/${objectName}?uploadId=${uploadId}&partNumber=${i+1}`,formData).subscribe((data:any)=>{ - let msg = { "partNumber":data.partNumber || null, "eTag": data.eTag || null } - resolve(msg) // 调用 promise 内置方法处理成功 - }) - }); - PartNumberETag.push(result) - - if (PartNumberETag.length === allSlice) { //分块上传完成 - let data = PartNumberETag - let paramsData = {uploadId:uploadId} - this.http.post(`/api/CompleteMultipartUpload/PlanPlatform/${objectName}`,data,{params:paramsData}).subscribe(data=>{ - resolve(objectName) - }) - } + + for (let i = 0; i < allSlice; i++) { //循环分段上传 + let start = i * shardSize //切割文件开始位置 + let end = Math.min(fileSize, start + shardSize); //切割文件结束位置 + let formData = new FormData() + formData.append("file", file.slice(start, end)) + + //同步写法实现异步调用 + let result = await new Promise((resolve, reject) => { + // await 需要后面返回一个 promise 对象 + this.http.post(`/api/MultipartUpload/PlanPlatform/${objectName}?uploadId=${uploadId}&partNumber=${i + 1}`, formData).subscribe((data: any) => { + let msg = { "partNumber": data.partNumber || null, "eTag": data.eTag || null } + resolve(msg) // 调用 promise 内置方法处理成功 + }) + }); + PartNumberETag.push(result) + + if (PartNumberETag.length === allSlice) { //分块上传完成 + let data = PartNumberETag + let paramsData = { uploadId: uploadId } + this.http.post(`/api/CompleteMultipartUpload/PlanPlatform/${objectName}`, data, { params: paramsData }).subscribe(data => { + resolve(objectName) + }) + } }//for循环 //分块 处理 @@ -128,7 +130,7 @@ export class CanvasShareDataService { } // 处置节点 筛选出 匹配数据 匹配不到 return undefined - findDisposalNode(parentId: string= null, name: string= null) { + findDisposalNode(parentId: string = null, name: string = null) { if (parentId && name) { // 匹配 父id, name const returnData = this.allDisposalNode.find(item => item.parentId === parentId && item.name === name); return returnData; @@ -155,7 +157,7 @@ export class CanvasShareDataService { /** * 删除建筑数据中当前楼层的数据 */ - public deleteBuildingDataByCurrentFloorData():void { + public deleteBuildingDataByCurrentFloorData(): void { Object.keys(this.originaleveryStoreyData.data).forEach((key) => { // 删除建筑数据 delete this.originalcompanyBuildingData.data[key]; @@ -295,7 +297,22 @@ export class CanvasShareDataService { facility.Id = ''; facility.Name = this.facilityAssetsName.get(item.Name); facility.AssetName = item.Name; - facility.PropertyInfos = item.PropertyInfos; + facility.PropertyInfos = []; + item.PropertyInfos.forEach(e => { + var p: PropertyInfo = new PropertyInfo(); + p.Enabled = e.Enabled; + p.Order = e.Order; + p.PhysicalUnit = e.PhysicalUnit; + p.PropertyName = e.PropertyName; + p.PropertyType = e.PropertyType; + p.PropertyValue = e.PropertyValue.toString(); + p.Required = e.Required; + p.RuleName = e.RuleName; + p.RuleValue = e.RuleValue; + p.Tag = e.Tag; + p.Visible = e.Visible; + facility.PropertyInfos.push(p); + }); facility.SitePlanId = item.FloorId; list.push(facility); } @@ -316,7 +333,22 @@ export class CanvasShareDataService { facility.Id = ''; facility.Name = this.facilityAssetsName.get(item.Name); facility.AssetName = item.Name; - facility.PropertyInfos = item.PropertyInfos; + facility.PropertyInfos = []; + item.PropertyInfos.forEach(e => { + var p: PropertyInfo = new PropertyInfo(); + p.Enabled = e.Enabled; + p.Order = e.Order; + p.PhysicalUnit = e.PhysicalUnit; + p.PropertyName = e.PropertyName; + p.PropertyType = e.PropertyType; + p.PropertyValue = e.PropertyValue.toString(); + p.Required = e.Required; + p.RuleName = e.RuleName; + p.RuleValue = e.RuleValue; + p.Tag = e.Tag; + p.Visible = e.Visible; + facility.PropertyInfos.push(p); + }); facility.BuildingAreaId = item.FloorId; list.push(facility); } @@ -365,7 +397,7 @@ export class CompanyAdjoinInfo { * 建筑毗邻 */ export class BuildingAdjoinInfo { - public BuildingId: string; + public BuildingId: string; public Id: string; public Name: string; public Direction: number; @@ -407,7 +439,7 @@ export class CompanyFacilityAssetInfo { public Id: string; public Name: string; public AssetName: string; - public PropertyInfos: string; + public PropertyInfos: PropertyInfo[]; public AssetId: string; public CompanyId: string; public SitePlanId: string; @@ -419,7 +451,7 @@ export class BuildingFacilityAssetInfo { public Id: string; public Name: string; public AssetName: string; - public PropertyInfos: string; + public PropertyInfos: PropertyInfo[]; public AssetId: string; public BuildingId: string; public BuildingAreaId: string; @@ -559,62 +591,62 @@ export class DisposalNode { * 方向。 */ export enum Direction { - /** - * 东 - */ - East, - /** - * 西 - */ - West, - /** - * 南 - */ - South, - /** - * 北 - */ - North, - /** - * 东南 - */ - Southeast, - /** - * 西南 - */ - Southwest, - /** - * 东北 - */ - Northeast, - /** - * 西北 - */ - Northwest + /** + * 东 + */ + East, + /** + * 西 + */ + West, + /** + * 南 + */ + South, + /** + * 北 + */ + North, + /** + * 东南 + */ + Southeast, + /** + * 西南 + */ + Southwest, + /** + * 东北 + */ + Northeast, + /** + * 西北 + */ + Northwest } /** * 风力等级 */ export enum WindScale { - WS0, - WS1, - WS2, - WS3, - WS4, - WS5, - WS6, - WS7, - WS8, - WS9, - WS10, - WS11, - WS12, - WS13, - WS14, - WS15, - WS16, - WS17, - WS18 + WS0, + WS1, + WS2, + WS3, + WS4, + WS5, + WS6, + WS7, + WS8, + WS9, + WS10, + WS11, + WS12, + WS13, + WS14, + WS15, + WS16, + WS17, + WS18 } /** * 处置节点数据 @@ -636,9 +668,9 @@ export class DisposalNodeData { * 图片地址 */ public BackgroundImageUrl: string; - /** - * 图片地址 - */ + /** + * 图片地址 + */ public BackgroundImageAngle: number; /** * 处置节点编号 @@ -670,105 +702,105 @@ export class FloorNodeData { * 素材数据 */ export class AssetData { - /// - /// 模板编号 - /// + /// + /// 模板编号 + /// public TemplateId: string; - /// - /// 编号 - /// + /// + /// 编号 + /// public Id: string; - /// - /// 名称 - /// + /// + /// 名称 + /// public Name: string; - /// - /// 角度 - /// + /// + /// 角度 + /// public Angle: number; - /// - /// 颜色 - /// + /// + /// 颜色 + /// public Color: string; - /// - /// 坐标 - /// + /// + /// 坐标 + /// public Point: PIXI.Point; - /// - /// 宽度 - /// + /// + /// 宽度 + /// public Width: number; - /// - /// 高度 - /// + /// + /// 高度 + /// public Height: number; - /// - /// 是否启用 - /// + /// + /// 是否启用 + /// public Enabled: boolean; - /// - /// 填充方式 - /// + /// + /// 填充方式 + /// public FillMode: FillMode; - /// - /// 图片地址 - /// + /// + /// 图片地址 + /// public ImageUrl: string; - /// - /// 是否固定大小 - /// - public FixedSize: boolean; - /// - /// 点路径 - /// + /// + /// 是否固定大小 + /// + public FixedSize: boolean; + /// + /// 点路径 + /// public MultiPoint: PIXI.Point[]; - /// - /// 建筑ID - /// + /// + /// 建筑ID + /// public BuildingId: string; - /// - /// 单位ID - /// + /// + /// 单位ID + /// public CompanyId: string; - /// - /// 楼层编号 - /// + /// + /// 楼层编号 + /// public FloorId: string; - /// - /// 楼层名称 - /// + /// + /// 楼层名称 + /// public FloorName: string; - /// - /// 消防要素编号 - /// + /// + /// 消防要素编号 + /// public FireElementId: string; - /// - /// 属性列表 - /// + /// + /// 属性列表 + /// public PropertyInfos: PropertyInfo[]; - /// - /// 交互方式 - /// + /// + /// 交互方式 + /// public InteractiveMode: InteractiveMode; - /// - /// 是否来自建筑 - /// + /// + /// 是否来自建筑 + /// public IsFromBuilding: boolean; - /// - /// 渲染方式。 - /// + /// + /// 渲染方式。 + /// public DrawMode: ImageType; - /// - /// 9宫格边框数值。 - /// + /// + /// 9宫格边框数值。 + /// public Border: Border; - /// - /// 厚度。 - /// + /// + /// 厚度。 + /// public Thickness: number; - /// - /// 素材类型 - /// + /// + /// 素材类型 + /// public GameMode: GameMode; } /** @@ -809,9 +841,9 @@ export enum ImageType { */ export class Border { - public x: number; + public x: number; - public y: number; + public y: number; public z: number; diff --git a/src/app/data-collection/water-collection/water-collection.component.html b/src/app/data-collection/water-collection/water-collection.component.html index 0d5405e..2782ab8 100644 --- a/src/app/data-collection/water-collection/water-collection.component.html +++ b/src/app/data-collection/water-collection/water-collection.component.html @@ -79,8 +79,13 @@
- save保存 - open_in_browser提交审核 + (待审核) + (审核通过) + (审核驳回) + + open_in_browser提交审核 + 撤销审核 + save保存 close关闭
diff --git a/src/app/data-collection/water-collection/water-collection.component.scss b/src/app/data-collection/water-collection/water-collection.component.scss index f0376c1..37f7a20 100644 --- a/src/app/data-collection/water-collection/water-collection.component.scss +++ b/src/app/data-collection/water-collection/water-collection.component.scss @@ -254,8 +254,11 @@ span:hover{ text-decoration: underline; } + .state{ + margin-right:30px; + } .submitAudit{ - margin: 0 30px; + margin-right:30px; } .close{ margin-right: 30px; diff --git a/src/app/data-collection/water-collection/water-collection.component.ts b/src/app/data-collection/water-collection/water-collection.component.ts index 781bb41..08cec7f 100644 --- a/src/app/data-collection/water-collection/water-collection.component.ts +++ b/src/app/data-collection/water-collection/water-collection.component.ts @@ -198,7 +198,7 @@ export class WaterCollectionComponent implements OnInit { //点击水源列表 selectedLiIndex:any clickWaterLi(item,index){ - // console.log(item) + console.log(item) if(this.selectedLiIndex != index){ this.selectedLiIndex = index this.clearData() @@ -430,6 +430,29 @@ export class WaterCollectionComponent implements OnInit { }) } + } + //提交审核 + submitAudit(){ + let isTrue = window.confirm('请确认保存后提交审核,否则将无法审核最新内容,是否继续?') + if(isTrue){ + console.log('提交审核的水源',this.waterData) + let body = { + title: this.waterData.name, + operation: this.waterData.verifyState == -1 ? 0 : 1,//操作方式 + contentType: 12,//水源类型 + itemId: this.waterData.id, + verifyState: 3, + } + this.http.post('/api/ContentVerifies',body).subscribe((data) => { + console.log('提交成功',data) + this.waterData.verifyState = 3 + }) + } + + } + //撤销审核 + cancelAudit(){ + } //关闭 close(){ 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}}

    -
    - - - - - - - - - - - - - - - - - @@ -264,6 +264,9 @@ diff --git a/src/app/key-unit/key-unit-management/key-unit-management.component.scss b/src/app/key-unit/key-unit-management/key-unit-management.component.scss index eb79d8c..ef26154 100644 --- a/src/app/key-unit/key-unit-management/key-unit-management.component.scss +++ b/src/app/key-unit/key-unit-management/key-unit-management.component.scss @@ -263,4 +263,12 @@ .excellent{ // background : #32cd32; // background-image: linear-gradient(to right, #e2e7ee ,#FF4500, #FF8C00,#32cd32); +} + +//审核结果 +.auditDiv{ + p{ + margin: 8px 0; + margin-left: 16px; + } } \ No newline at end of file diff --git a/src/app/key-unit/key-unit-management/key-unit-management.component.ts b/src/app/key-unit/key-unit-management/key-unit-management.component.ts index 8d4441d..ac9f958 100644 --- a/src/app/key-unit/key-unit-management/key-unit-management.component.ts +++ b/src/app/key-unit/key-unit-management/key-unit-management.component.ts @@ -353,7 +353,6 @@ export class KeyUnitManagementComponent implements OnInit { IntegrityScoreMax:this.integrityScoreMax/100||1 } this.http.get("/api/Companies",{params:paramsdata}).subscribe((data:any)=>{ - this.length = data.totalCount this.allKeyUnitInfo = data // data.items.sort( (a,b) => { @@ -429,11 +428,33 @@ export class KeyUnitManagementComponent implements OnInit { } selectedunitArr:any =[] //选中单位的数组 //勾选框事件 + verifyState //判断是否可以修改 checkChange(e,element){ + console.log(element) + if(element.contentVerify!=null){ + this.verifyState=element.contentVerify.verifyState + }else{ + this.verifyState=null + } element.checked = e.checked + + } + checkClick(element){ + if(element.contentVerify!=null){ + if(element.contentVerify.verifyState==0||element.contentVerify.verifyState==3){ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('该单位正在审核不能选中','确定',config); + } + + } } //编辑单位信息 editunit(){ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 let selectedunitArr = [] let selectedunitobj = [] this.allKeyUnitInfo.items.forEach(item => { @@ -444,9 +465,6 @@ export class KeyUnitManagementComponent implements OnInit { }); if(selectedunitArr.length == 0){ - const config = new MatSnackBarConfig(); - config.verticalPosition = 'top'; - config.duration = 3000 this.snackBar.open('请先选择要修改的单位','确定',config); } if(selectedunitArr.length != 1 && selectedunitArr.length != 0){ @@ -492,7 +510,13 @@ export class KeyUnitManagementComponent implements OnInit { } //删除单位信息 deleteunit(){ - let selectedunitArr = [] + if(this.verifyState==0||this.verifyState==3){ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('审核中,不能删除','确定',config); + }else{ + let selectedunitArr = [] this.allKeyUnitInfo.items.forEach(item => { if(item.checked){ selectedunitArr.push(item.id) @@ -524,6 +548,8 @@ export class KeyUnitManagementComponent implements OnInit { } } + } + } @@ -641,6 +667,45 @@ export class KeyUnitManagementComponent implements OnInit { } ); } + //提交审核 + submitAudit(element){ + console.log(element) + let body:any = { + title:element.name, + Operation:0, + itemId:element.id, + verifyState:3, + contentType:11 + } + this.http.post(`/api/ContentVerifies`,body).subscribe(data=>{ + this.getAllKeyUnit() + }) + + } + //撤销审核 + cancelAudit(element){ + let body:any = { + //title:element.name, + //Operation:0, + id:element.contentVerify.id, + itemId:element.id, + verifyState:-1, + contentType:11 + } + this.http.delete(`/api/ContentVerifies/${element.contentVerify.id}`).subscribe(data=>{ + this.getAllKeyUnit() + }) + } + //审核结果 + auditResult(element){ + // console.log(element) + const dialogRef = this.dialog.open(companyAuditResult, { + width:"400px", + //height:"300px", + data: {element:element} + }); + + } } @@ -762,4 +827,34 @@ export class upname{ } } +} + +//查看审核结果 +@Component({ + selector: 'resultmeet', + templateUrl: './resultcompanyPlan.html', + styleUrls: ['./key-unit-management.component.scss'] +}) +export class companyAuditResult{ + constructor(private http: HttpClient,public dialogRef: MatDialogRef,@Inject(MAT_DIALOG_DATA) public data,public snackBar: MatSnackBar) {} + planName:any = this.data.element.name + createTime='' + organizationName=this.data.element.organizationName + verifyTime='' + remark='' + verifyOrganizationName + verifyState=100 + ngOnInit(): void { + if(this.data.element.contentVerify!=null){ + this.createTime=this.data.element.contentVerify.createTime + //this.organizationName=this.data.element.organizationName + this.verifyTime=this.data.element.contentVerify.verifyTime + this.remark=this.data.element.remark + this.verifyState=this.data.element.contentVerify.verifyState + this.verifyOrganizationName=this.data.element.contentVerify.verifyOrganizationName + } + } + onNoClick(): void { + this.dialogRef.close(); + } } \ No newline at end of file diff --git a/src/app/key-unit/key-unit-management/resultcompanyPlan.html b/src/app/key-unit/key-unit-management/resultcompanyPlan.html new file mode 100644 index 0000000..4159eb7 --- /dev/null +++ b/src/app/key-unit/key-unit-management/resultcompanyPlan.html @@ -0,0 +1,27 @@ + +
    + 审批结果 +
    + +
    +

    预案名称:{{planName}}

    +

    提交时间:{{createTime| date:'yyyy-MM-dd HH:mm:ss'||''}}

    +

    发起申请:{{organizationName ||''}}

    + +

    审核时间:{{verifyTime| date:'yyyy-MM-dd HH:mm:ss'||''}}

    +

    审核机构:{{verifyOrganizationName||''}}

    +

    审核意见:{{remark||''}}

    +

    审核结果:{{verifyState==4?'审核通过':verifyState==5?'审核退回':''||''}}

    +
    + + +
    + +
    \ No newline at end of file diff --git a/src/app/key-unit/key-unit.module.ts b/src/app/key-unit/key-unit.module.ts index c70c21c..93d6b60 100644 --- a/src/app/key-unit/key-unit.module.ts +++ b/src/app/key-unit/key-unit.module.ts @@ -84,10 +84,11 @@ import { WaterRoadComponent } from './water-road/water-road.component'; import { PhotoofthesceneComponent } from './photoofthescene/photoofthescene.component'; import { KnowRouteComponent } from './know-route/know-route.component'; import { FindProblemComponent } from './find-problem/find-problem.component'; -import { upname } from './key-unit-management/key-unit-management.component' +import { upname } from './key-unit-management/key-unit-management.component'; +import { companyAuditResult } from './key-unit-management/key-unit-management.component' @NgModule({ - declarations: [KeyUnitManagementComponent, EditUnitInfoComponent, ViewUnitDetailsComponent,CreateUnit,BasicinfoComponent,LookMaster,AddHouseInfo, EditPlanInfoComponent,BasicinfoLookComponent, ViewUnitDetailsPlanComponent,FunctionDivisionComponent,addPartition,addPartitionAttribute,AllaroundComponent,ImgDetails,RealisticPictureComponent,previewImg,addRealPicture,editRealPicture,KeySiteComponent,KeyImgDetail,KeySiteImgs,UploadingCADComponent,readFile,editFile,KeySiteLookComponent,KeySiteImgs2,FunctionDivisionLookComponent,RealisticPictureLookComponent,previewImg3,UploadingCADLookComponent,FireFightingDeviceComponent,ImagesData,previewBigImg,ImgsDataDetail,FireFightingDeviceLookComponent,ImagesData2,ImgsDataDetail2,previewBigImg2,LookMaster2,addPartitionAttribute2, SixFamiliarityComponent, ActualCombatDrillComponent,routerMapComponent, SixFamiliarListComponent,TrainingRecordinfoComponent,RouterGISComponent,WaterRoadComponent,PhotoofthesceneComponent,KnowRouteComponent,FindProblemComponent,upname], + declarations: [KeyUnitManagementComponent, EditUnitInfoComponent, ViewUnitDetailsComponent,CreateUnit,BasicinfoComponent,LookMaster,AddHouseInfo, EditPlanInfoComponent,BasicinfoLookComponent, ViewUnitDetailsPlanComponent,FunctionDivisionComponent,addPartition,addPartitionAttribute,AllaroundComponent,ImgDetails,RealisticPictureComponent,previewImg,addRealPicture,editRealPicture,KeySiteComponent,KeyImgDetail,KeySiteImgs,UploadingCADComponent,readFile,editFile,KeySiteLookComponent,KeySiteImgs2,FunctionDivisionLookComponent,RealisticPictureLookComponent,previewImg3,UploadingCADLookComponent,FireFightingDeviceComponent,ImagesData,previewBigImg,ImgsDataDetail,FireFightingDeviceLookComponent,ImagesData2,ImgsDataDetail2,previewBigImg2,LookMaster2,addPartitionAttribute2, SixFamiliarityComponent, ActualCombatDrillComponent,routerMapComponent, SixFamiliarListComponent,TrainingRecordinfoComponent,RouterGISComponent,WaterRoadComponent,PhotoofthesceneComponent,KnowRouteComponent,FindProblemComponent,upname,companyAuditResult], exports:[ViewUnitDetailsPlanComponent], imports: [ CommonModule, diff --git a/src/app/plan-audit/allaround/allaround.component.ts b/src/app/plan-audit/allaround/allaround.component.ts index 65160a8..384cb55 100644 --- a/src/app/plan-audit/allaround/allaround.component.ts +++ b/src/app/plan-audit/allaround/allaround.component.ts @@ -4,7 +4,7 @@ * @Author: sueRimn * @Date: 2020-11-26 17:10:54 * @LastEditors: sueRimn - * @LastEditTime: 2021-02-03 15:29:11 + * @LastEditTime: 2021-03-02 09:32:08 */ import { Component, OnInit, Inject } from '@angular/core'; import { HttpClient } from '@angular/common/http'; @@ -32,7 +32,7 @@ export class AllaroundComponent implements OnInit { AllAdjoining:any = []; //所有单位毗邻 AllBuilding:any = []; //所有建筑 + 建筑毗邻图片 //单位相关数据 - unitId:string = '5e9964caa760a059e84512e9' + unitId:string = sessionStorage.getItem('companyId') //5ee19fe06f91049f5e23e937 //5fb78554919f2b44e464017e //获取所有单位毗邻图片 diff --git a/src/app/plan-audit/basic-info/basic-info.component.ts b/src/app/plan-audit/basic-info/basic-info.component.ts index 485ad67..0437661 100644 --- a/src/app/plan-audit/basic-info/basic-info.component.ts +++ b/src/app/plan-audit/basic-info/basic-info.component.ts @@ -59,7 +59,8 @@ export class BasicInfoComponent implements OnInit { //每次初始化 加载 组件调用方法 everyInin () { //this.unitId = sessionStorage.getItem('unitId') - this.unitId='5e9964caa760a059e84512e9' + + this.unitId=sessionStorage.getItem('companyId') if (this.unitId) { this.getUnitInfo().then(()=>{ setTimeout(() => { diff --git a/src/app/plan-audit/cad-draw/cad-draw.component.ts b/src/app/plan-audit/cad-draw/cad-draw.component.ts index 288f7b1..9f0b777 100644 --- a/src/app/plan-audit/cad-draw/cad-draw.component.ts +++ b/src/app/plan-audit/cad-draw/cad-draw.component.ts @@ -17,7 +17,7 @@ export class CadDrawComponent implements OnInit { this.companyId = this.unitId this.getAllCAD() } - unitId:any = '5e9964caa760a059e84512e9' + unitId:any = sessionStorage.getItem('companyId') displayedColumns: string[] = ['checked', 'name', 'time', 'state','size']; diff --git a/src/app/plan-audit/fire-facilities/fire-facilities.component.ts b/src/app/plan-audit/fire-facilities/fire-facilities.component.ts index 0c6d5de..2e73659 100644 --- a/src/app/plan-audit/fire-facilities/fire-facilities.component.ts +++ b/src/app/plan-audit/fire-facilities/fire-facilities.component.ts @@ -4,7 +4,7 @@ * @Author: sueRimn * @Date: 2020-11-23 09:28:54 * @LastEditors: sueRimn - * @LastEditTime: 2021-02-03 10:12:45 + * @LastEditTime: 2021-03-02 09:32:21 */ import { Component, OnInit, ViewChild, Inject } from '@angular/core'; import {HttpClient, HttpHeaders} from '@angular/common/http' @@ -32,7 +32,7 @@ export class FireFacilitiesComponent implements OnInit { this.getAllBuilding() } - unitId:any = '5e9964caa760a059e84512e9' + unitId:any = sessionStorage.getItem('companyId') //定义属性数据 singleElection:Food[]=[ {value:'true', name: '有'}, diff --git a/src/app/plan-audit/function-partition/function-partition.component.ts b/src/app/plan-audit/function-partition/function-partition.component.ts index 9e8c35a..a5ccfd8 100644 --- a/src/app/plan-audit/function-partition/function-partition.component.ts +++ b/src/app/plan-audit/function-partition/function-partition.component.ts @@ -20,7 +20,7 @@ export class FunctionPartitionComponent implements OnInit { } displayedColumns: string[] = ['checked', 'region', 'measure', 'situation']; - unitId:any = '5e9964caa760a059e84512e9' + unitId:any = sessionStorage.getItem('companyId') companyId:any; //单位编号 companyFunctionalZoning:any=[]; //所有单位功能分区属性 diff --git a/src/app/plan-audit/key-site-look/key-site.component.ts b/src/app/plan-audit/key-site-look/key-site.component.ts index 653a08c..371d6c6 100644 --- a/src/app/plan-audit/key-site-look/key-site.component.ts +++ b/src/app/plan-audit/key-site-look/key-site.component.ts @@ -23,7 +23,7 @@ export class KeySiteLookComponent implements OnInit { this.getCompanyTips() this.getAllBuilding() } - unitId:any = '5e9964caa760a059e84512e9' + unitId:any = sessionStorage.getItem('companyId') allCompanyPosition:any = []; //所有单位重点部位 companyTips:any; //所有单位重点提示 diff --git a/src/app/plan-audit/plan-list/plan-list.component.ts b/src/app/plan-audit/plan-list/plan-list.component.ts index 5dacf04..8dc7ae8 100644 --- a/src/app/plan-audit/plan-list/plan-list.component.ts +++ b/src/app/plan-audit/plan-list/plan-list.component.ts @@ -12,7 +12,7 @@ export class PlanListComponent implements OnInit { constructor(private http: HttpClient,public snackBar: MatSnackBar,public dialog: MatDialog) { } //单位相关数据 - unitId:any = '5e9964caa760a059e84512e9' + unitId:any = sessionStorage.getItem('companyId') ngOnInit(): void { this.getAllBuildings() diff --git a/src/app/plan-audit/plan-record/plan-record.component.html b/src/app/plan-audit/plan-record/plan-record.component.html index 70079c6..edae64d 100644 --- a/src/app/plan-audit/plan-record/plan-record.component.html +++ b/src/app/plan-audit/plan-record/plan-record.component.html @@ -4,7 +4,7 @@ * @Author: sueRimn * @Date: 2020-12-25 10:19:31 * @LastEditors: sueRimn - * @LastEditTime: 2021-02-20 10:40:25 + * @LastEditTime: 2021-03-03 13:54:44 -->
    @@ -118,60 +118,48 @@
    - - - - - - - - - - 平面图 - - - - - 四周毗邻 - - - - - 消防设施 - - - - - 重点部位 - - - - - 功能分区 - - - - - 实景图 - - - - - cad - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    diff --git a/src/app/plan-audit/plan-record/plan-record.component.ts b/src/app/plan-audit/plan-record/plan-record.component.ts index f0b0bbf..47b1516 100644 --- a/src/app/plan-audit/plan-record/plan-record.component.ts +++ b/src/app/plan-audit/plan-record/plan-record.component.ts @@ -4,7 +4,7 @@ * @Author: sueRimn * @Date: 2020-12-25 10:19:31 * @LastEditors: sueRimn - * @LastEditTime: 2021-02-22 10:49:38 + * @LastEditTime: 2021-03-03 14:01:47 */ import { Component, OnInit,Inject } from '@angular/core'; import { FormControl } from '@angular/forms'; @@ -133,48 +133,67 @@ export class PlanRecordComponent implements OnInit { //表格点击事件 viewer//全景图对象 tableClick(e,item){ + this.showtype = -1 //e.target.parentElement.bgColor='#2196F3' //console.log(e,item) this.organizationName='' this.id=item.id this.fetchUrl='' - - this.http.get(`/api/PlanComponents/${item.itemId}`).subscribe((data:any)=>{ - this.companyId=data.companyId - this.companyName=data.companyName - if(data.planType!=2&&data.planType!=1){ - this.fetchUrl=data.attachmentUrls[0] - var index=this.fetchUrl.indexOf("\/") - if(this.fetchUrl.substr(0,index)=='psw'){ - this.showtype=1 - var obj=document.getElementById('viewer') - if(obj!=null){ - obj.innerHTML='' + this.viewer={} + if(item.contentType == 11){ + window.setTimeout(()=>{ + this.showtype = 3 + sessionStorage.setItem('companyId',item.itemId) + },0) + }else if(item.contentType == 12){ + //水源 + this.showtype = 12 + }else if(item.contentType == 13){ + //消防力量 + this.showtype = 13 + }else if(item.contentType == 14){ + //联动力量 + this.showtype = 14 + }else{ + this.http.get(`/api/PlanComponents/${item.itemId}`).subscribe((data:any)=>{ + this.companyId=data.companyId + this.companyName=data.companyName + if(data.planType!=2&&data.planType!=1){ + this.fetchUrl=data.attachmentUrls[0] + var index=this.fetchUrl.indexOf("\/") + if(this.fetchUrl.substr(0,index)=='psw'){ + this.showtype=1 + var obj=document.getElementById('viewer') + if(obj!=null){ + obj.innerHTML='' + } + window.setTimeout(()=>{ + this.viewer = new Viewer({ + container: document.querySelector('#viewer'), + panorama:'/api/Objects/PlanPlatform/'+ this.fetchUrl, + + }); + }) + + }else{ + this.lookWord() } - window.setTimeout(()=>{ - this.viewer = new Viewer({ - container: document.querySelector('#viewer'), - panorama:'/api/Objects/PlanPlatform/'+ this.fetchUrl, - - }); - }) - }else{ - this.lookWord() + this.organizationName=item.organizationName + this.planData = data + this.handleData() + return + + //this.src=`/planAudit/planpass?id=${data.companyId}&companyName=${data.companyName}&auditPlanId=${data.id}&auditStatus=${data.auditStatus}&planType=1` + //this.iframeSrc=this.sanitizer.bypassSecurityTrustResourceUrl(this.src); + //window.open(`/planAudit/planpass?id=${data.companyId}&companyName=${data.companyName}&auditPlanId=${data.id}&auditStatus=${data.auditStatus}&planType=1`) } - }else{ - this.organizationName=item.organizationName - this.planData = data - this.handleData() - return - //this.src=`/planAudit/planpass?id=${data.companyId}&companyName=${data.companyName}&auditPlanId=${data.id}&auditStatus=${data.auditStatus}&planType=1` - //this.iframeSrc=this.sanitizer.bypassSecurityTrustResourceUrl(this.src); - //window.open(`/planAudit/planpass?id=${data.companyId}&companyName=${data.companyName}&auditPlanId=${data.id}&auditStatus=${data.auditStatus}&planType=1`) - } - - - }) + + }) + } + + if(e.checked){ this.shenheTable.push(item) diff --git a/src/app/plan-audit/realistic-picture-look/realistic-picture.component.ts b/src/app/plan-audit/realistic-picture-look/realistic-picture.component.ts index a75ae55..65431ec 100644 --- a/src/app/plan-audit/realistic-picture-look/realistic-picture.component.ts +++ b/src/app/plan-audit/realistic-picture-look/realistic-picture.component.ts @@ -35,7 +35,7 @@ export class RealisticPictureLookComponent implements OnInit { } - unitId:any = '5e9964caa760a059e84512e9' + unitId:any = sessionStorage.getItem('companyId') companyId:any; //单位编号 allRealPicture:any=[]; //所有实景图文件 diff --git a/src/app/plan-audit/wait-examineer/wait-examineer.component.html b/src/app/plan-audit/wait-examineer/wait-examineer.component.html index 9719e05..fbfe6c5 100644 --- a/src/app/plan-audit/wait-examineer/wait-examineer.component.html +++ b/src/app/plan-audit/wait-examineer/wait-examineer.component.html @@ -54,12 +54,11 @@
    - - - 装置区名称* - - 工艺流程* - - 火灾危险性* - - 灭火注意事项 - + +
    +

    + + {{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 diff --git a/src/app/key-unit/key-unit-management/key-unit-management.component.html b/src/app/key-unit/key-unit-management/key-unit-management.component.html index d849e3c..3e66280 100644 --- a/src/app/key-unit/key-unit-management/key-unit-management.component.html +++ b/src/app/key-unit/key-unit-management/key-unit-management.component.html @@ -104,7 +104,7 @@
    - + 操作 查看详情 + 提交审核 + 撤销审核 + 审批结果 关注单位 取消关注
    - + + 'Ⅴ级预案':item.contentType=='6'?'应急预案(国家级)':item.contentType=='7'?'应急预案(市级)':item.contentType=='8'?'类型预案':item.contentType=='11'?'重点单位':item.contentType=='12'?'水源':item.contentType=='13'?'消防力量':item.contentType=='14'?'联动力量':'未知'}}
    - {{item.contentType=='1'?'Ⅰ级预案':item.contentType=='2'?'Ⅱ级预案':item.contentType=='3'?'Ⅲ级预案':item.contentType=='4'?'Ⅳ级预案':item.contentType=='5'? - 'Ⅴ级预案':item.contentType=='6'?'应急预案(国家级)':item.contentType=='7'?'应急预案(市级)':item.contentType=='8'?'类型预案':item.contentType=='11'?'重点单位':'消防车辆'}} {{item.operation=='0'?'新增':item.operation=='1'?'更新':'删除'}} {{item.verifyOrganizationName}} {{item.verifyState=='0'?'待初审':item.verifyState=='1'? @@ -82,56 +81,59 @@ -
    +
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    @@ -239,11 +241,11 @@
    -
    +
    -
    -
    +
    +
    单位名称: {{compantData.name?compantData.name : '暂无数据'}} @@ -265,17 +267,17 @@
    - +
    + +
    - +
    - +
    diff --git a/src/app/plan-audit/wait-examineer/wait-examineer.component.scss b/src/app/plan-audit/wait-examineer/wait-examineer.component.scss index de3a49e..5f58468 100644 --- a/src/app/plan-audit/wait-examineer/wait-examineer.component.scss +++ b/src/app/plan-audit/wait-examineer/wait-examineer.component.scss @@ -50,6 +50,9 @@ overflow-y: auto; height: 700px; width: 100%; + .selectedTr{ + background-color: #b3d3ee; + } } table{ margin-left:10px; @@ -71,6 +74,7 @@ } .boxright{ height: 100%; + width: 55%; flex: 1; background-color: #FFFFFF; margin-left: 10px; diff --git a/src/app/plan-audit/wait-examineer/wait-examineer.component.ts b/src/app/plan-audit/wait-examineer/wait-examineer.component.ts index ac87c81..01921d1 100644 --- a/src/app/plan-audit/wait-examineer/wait-examineer.component.ts +++ b/src/app/plan-audit/wait-examineer/wait-examineer.component.ts @@ -4,7 +4,7 @@ * @Author: sueRimn * @Date: 2020-12-25 16:13:50 * @LastEditors: sueRimn - * @LastEditTime: 2021-02-22 10:49:28 + * @LastEditTime: 2021-03-03 15:13:25 */ import { Component, Inject, OnInit } from '@angular/core'; import { FormControl } from '@angular/forms'; @@ -103,7 +103,7 @@ export class WaitExamineerComponent implements OnInit { chuorzhong//判断初审还是终审 radioid//选中的id shenheTable=[]//选中要审核的对象 - showtype//0:word,1:全景图,2:二维三维,3:重点单位 + showtype=-1//0:word,1:全景图,2:二维三维,3:重点单位 compantData={name:'',buildingTypes:[],address:''} organizationName planData @@ -122,7 +122,7 @@ export class WaitExamineerComponent implements OnInit { verifyState:[0,3] } this.http.get("/api/ContentVerifies",{params:paramsdata}).subscribe((data:any)=>{ - //console.log(data) + console.log(data) this.tableDate=data.items this.count=data.totalCount }) @@ -153,49 +153,75 @@ export class WaitExamineerComponent implements OnInit { } //radio点击事件 viewer//全景图对象 + waterData:any//需要传递给子组件的水源信息 radioClick(e,item){ + this.showtype = -1 //e.target.parentElement.bgColor='#2196F3' - //console.log(e,item) + console.log(item) this.organizationName='' this.id=item.id this.fetchUrl='' this.viewer={} - this.http.get(`/api/PlanComponents/${item.itemId}`).subscribe((data:any)=>{ - this.companyId=data.companyId - this.companyName=data.companyName - if(data.planType!=2&&data.planType!=1){ - this.fetchUrl=data.attachmentUrls[0] - var index=this.fetchUrl.indexOf("\/") - if(this.fetchUrl.substr(0,index)=='psw'){ - this.showtype=1 - var obj=document.getElementById('viewer') - if(obj!=null){ - obj.innerHTML='' + if(item.contentType == 11){ + window.setTimeout(()=>{ + this.showtype = 3 + sessionStorage.setItem('companyId',item.itemId) + },0) + }else if(item.contentType == 12){ + //水源 + + // console.log(item.itemId) + this.http.get(`/api/WaterSources/${item.itemId}`).subscribe((data)=>{ + + console.log('水源',data) + this.waterData = data + this.showtype = 12 + }) + }else if(item.contentType == 13){ + //消防力量 + this.showtype = 13 + }else if(item.contentType == 14){ + //联动力量 + this.showtype = 14 + }else{ + this.http.get(`/api/PlanComponents/${item.itemId}`).subscribe((data:any)=>{ + this.companyId=data.companyId + this.companyName=data.companyName + if(data.planType!=2&&data.planType!=1){ + this.fetchUrl=data.attachmentUrls[0] + var index=this.fetchUrl.indexOf("\/") + if(this.fetchUrl.substr(0,index)=='psw'){ + this.showtype=1 + var obj=document.getElementById('viewer') + if(obj!=null){ + obj.innerHTML='' + } + window.setTimeout(()=>{ + this.viewer = new Viewer({ + container: document.querySelector('#viewer'), + panorama:'/api/Objects/PlanPlatform/'+ this.fetchUrl, + + }); + }) + + }else{ + this.lookWord() } - window.setTimeout(()=>{ - this.viewer = new Viewer({ - container: document.querySelector('#viewer'), - panorama:'/api/Objects/PlanPlatform/'+ this.fetchUrl, - - }); - }) - }else{ - this.lookWord() + this.organizationName=item.organizationName + this.planData = data + this.handleData() + return + + //this.src=`/planAudit/planpass?id=${data.companyId}&companyName=${data.companyName}&auditPlanId=${data.id}&auditStatus=${data.auditStatus}&planType=1` + //this.iframeSrc=this.sanitizer.bypassSecurityTrustResourceUrl(this.src); + //window.open(`/planAudit/planpass?id=${data.companyId}&companyName=${data.companyName}&auditPlanId=${data.id}&auditStatus=${data.auditStatus}&planType=1`) } - }else{ - this.organizationName=item.organizationName - this.planData = data - this.handleData() - return - //this.src=`/planAudit/planpass?id=${data.companyId}&companyName=${data.companyName}&auditPlanId=${data.id}&auditStatus=${data.auditStatus}&planType=1` - //this.iframeSrc=this.sanitizer.bypassSecurityTrustResourceUrl(this.src); - //window.open(`/planAudit/planpass?id=${data.companyId}&companyName=${data.companyName}&auditPlanId=${data.id}&auditStatus=${data.auditStatus}&planType=1`) - } - - - }) + + }) + } + if(e.checked){ this.shenheTable.push(item) @@ -304,85 +330,198 @@ export class WaitExamineerComponent implements OnInit { //同意操作 agree(){ var agreeList=[] + var companyAgreeList=[] const config = new MatSnackBarConfig(); config.verticalPosition = 'top'; config.duration = 3000 - /* if(this.chuorzhong==2){ - this.snackBar.open('审核未通过,请修改后再来审核!','确定',config); - } */ - //console.log(this.shenheTable) + console.log(this.shenheTable) if(this.shenheTable.length==0){ - this.snackBar.open('请选择要审核的预案!','确定',config); + this.snackBar.open('请勾选要审核的条目!','确定',config); } - else if(this.shenheTable.length==1){ - if(this.shenheTable[0].verifyState==0){ - this.http.put(`/api/PlanAudits/${this.shenheTable[0].itemId}/First`,{auditStatus:16}).subscribe(data=>{ + //单个审核 + else if(this.shenheTable.length == 1){ + let isTrue = window.confirm('确定同意选中条目的审核吗?') + if(isTrue){ + //重点单位审核 + if(this.shenheTable[0].contentType == 11){ + let body:any = { + id:this.shenheTable[0].id, + itemId:this.shenheTable[0].itemId, + verifyState:4, + contentType:11, + title:this.shenheTable[0].title+'基本信息' + } + this.http.put(`/api/ContentVerifies`,body).subscribe(data=>{ + this.snackBar.open('操作成功!','确定',config); + this.getAlltabledate() + }) + }else if(this.shenheTable[0].contentType == 12){ + let body:any = { + id:this.shenheTable[0].id, + itemId:this.shenheTable[0].itemId, + verifyState:4, + contentType:12, + title:this.shenheTable[0].title + } + this.http.put(`/api/ContentVerifies`,body).subscribe(data=>{ + this.snackBar.open('操作成功!','确定',config); + this.showtype = -1 + this.getAlltabledate() + }) + }else if(this.shenheTable[0].contentType == 13){ + + }else if(this.shenheTable[0].contentType == 14){ + + }else{ + //预案审核 + if(this.shenheTable[0].verifyState==0){ + this.http.put(`/api/PlanAudits/${this.shenheTable[0].itemId}/First`,{auditStatus:16}).subscribe(data=>{ + this.snackBar.open('操作成功!','确定',config); + this.getAlltabledate() + }) + }else if(this.shenheTable[0].verifyState==3){ + this.http.put(`/api/PlanAudits/${this.radioid}`,{auditStatus:2}).subscribe(data=>{ + this.snackBar.open('操作成功!','确定',config); + this.getAlltabledate() + }) + } + } + } + } + //批量审核 + else{ + let isTrue = window.confirm('确定同意选中条目的审核吗?') + if(isTrue){ + if(this.shenheTable[0].contentType==11||this.shenheTable[0].contentType==12){ //批量审批水源和重点单位 + for(var i=0;i{ + this.snackBar.open('操作成功!','确定',config); + this.getAlltabledate() + }) + }else{ //批量审核预案 + for(var i=0;i{ + this.snackBar.open('操作成功!','确定',config); + this.getAlltabledate() + }) + } + + } + + } + this.shenheTable=[] + } + //拒绝操作 + refuse(){ + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + var refuseList = [] + var companyrefuseList=[] + if(this.shenheTable.length==0){ + this.snackBar.open('请选择要审核的预案!','确定',config); + } + //单个审核拒绝 + else if(this.shenheTable.length==1){ + let isTrue = window.confirm('确定拒绝选中条目的审核吗?') + if(isTrue){ + //重点单位审核拒绝 + if(this.shenheTable[0].contentType == 11){ + let body:any = { + id:this.shenheTable[0].id, + itemId:this.shenheTable[0].itemId, + verifyState:5, + contentType:11, + title:this.shenheTable[0].title+'基本信息' + } + this.http.put(`/api/ContentVerifies`,body).subscribe(data=>{ this.snackBar.open('操作成功!','确定',config); this.getAlltabledate() }) - }else if(this.shenheTable[0].verifyState==3){ - this.http.put(`/api/PlanAudits/${this.radioid}`,{auditStatus:2}).subscribe(data=>{ + }else if(this.shenheTable[0].contentType == 12){ + let body:any = { + id:this.shenheTable[0].id, + itemId:this.shenheTable[0].itemId, + verifyState:5, + contentType:12, + title:this.shenheTable[0].title + } + this.http.put(`/api/ContentVerifies`,body).subscribe(data=>{ + this.showtype = -1 this.snackBar.open('操作成功!','确定',config); this.getAlltabledate() }) - } - } - else{ - for(var i=0;i{ + this.snackBar.open('操作成功!','确定',config); + this.getAlltabledate() + }) + }else if(this.shenheTable[0].verifyState==3){ + this.http.put(`/api/PlanAudits/${this.radioid}`,{auditStatus:4}).subscribe(data=>{ + this.snackBar.open('操作成功!','确定',config); + this.getAlltabledate() + }) } - agreeList.push(cart) } - this.http.put(`/api/PlanAudits/Batch`,agreeList).subscribe(data=>{ - this.snackBar.open('操作成功!','确定',config); - this.getAlltabledate() - }) } - this.shenheTable=[] - } - //拒绝操作 - refuse(){ - const config = new MatSnackBarConfig(); - config.verticalPosition = 'top'; - config.duration = 3000 - var refuseList=[] - if(this.shenheTable.length==0){ - this.snackBar.open('请选择要审核的预案!','确定',config); - } - else if(this.shenheTable.length==1){ - if(this.shenheTable[0].verifyState==0){ - this.http.put(`/api/PlanAudits/${this.shenheTable[0].itemId}/First`,{auditStatus:32}).subscribe(data=>{ - this.snackBar.open('操作成功!','确定',config); - this.getAlltabledate() - }) - }else if(this.shenheTable[0].verifyState==3){ - this.http.put(`/api/PlanAudits/${this.radioid}`,{auditStatus:4}).subscribe(data=>{ - this.snackBar.open('操作成功!','确定',config); - this.getAlltabledate() - }) } - } - else{ - for(var i=0;i{ + this.snackBar.open('操作成功!','确定',config); + this.getAlltabledate() + }) + }else{ + for(var i=0;i{ + this.snackBar.open('操作成功!','确定',config); + this.getAlltabledate() + }) + } } - refuseList.push(cart) } - this.http.put(`/api/PlanAudits/Batch`,refuseList).subscribe(data=>{ - this.snackBar.open('操作成功!','确定',config); - this.getAlltabledate() - }) - } - this.shenheTable=[] - + this.shenheTable=[] + - } + } //分数饼状图 bar(){ diff --git a/src/app/plan-audit/water-audit/water-audit.component.html b/src/app/plan-audit/water-audit/water-audit.component.html index 3a3decd..be8eb68 100644 --- a/src/app/plan-audit/water-audit/water-audit.component.html +++ b/src/app/plan-audit/water-audit/water-audit.component.html @@ -4,7 +4,7 @@
    - 消火栓 + {{selectedWaterTypeIndex == 0 ? '消火栓' : selectedWaterTypeIndex == 1 ? '消防水池' : selectedWaterTypeIndex == 2 ? '天然水源' : null}}
    diff --git a/src/app/plan-audit/water-audit/water-audit.component.ts b/src/app/plan-audit/water-audit/water-audit.component.ts index ed885ad..cf81d83 100644 --- a/src/app/plan-audit/water-audit/water-audit.component.ts +++ b/src/app/plan-audit/water-audit/water-audit.component.ts @@ -1,4 +1,4 @@ -import { Component, OnInit } from '@angular/core'; +import { Component, Input, OnInit } from '@angular/core'; declare var AMap: any; @Component({ selector: 'app-water-audit', @@ -6,7 +6,7 @@ declare var AMap: any; styleUrls: ['./water-audit.component.scss'] }) export class WaterAuditComponent implements OnInit { - + @Input() public waterData: any;//data名字根据引用场景自定义 constructor() { } map:any newPositionMarker:any @@ -15,9 +15,12 @@ export class WaterAuditComponent implements OnInit { ' ' + '
    ' ngOnInit(): void { + + this.selectedWaterTypeIndex = this.waterData.waterSourceType this.waterData.detailData = JSON.parse(this.waterData.detailData) this.fireCockData = this.waterData.detailData - console.log(789, this.fireCockData) + this.poolData = this.waterData.detailData + this.naturalWaterData = this.waterData.detailData setTimeout(() => { this.map = new AMap.Map('container', { zoom:18 @@ -38,27 +41,27 @@ export class WaterAuditComponent implements OnInit { }, 0); } - selectedWaterTypeIndex:number = 0//选择的水源类型 0消火栓 1水池 2天然水源 + selectedWaterTypeIndex:number //选择的水源类型 0消火栓 1水池 2天然水源 fireCockData:any = []//消火栓详情 poolData:any = []//水池详情 naturalWaterData:any = []//天然水源详情 - waterData:any = { - id: "60125d31d31fab7de81c56b0", - name: "上海中心消火栓01", - administrativeRegion: "上海区", - governmentLevel: "1", - village: "小高社区", - address: "国际会议中心", - location: { - x: 121.496717, - y: 31.239452 - }, - detailData: "[{\"PropertyName\":\"可用状态\",\"PropertyValue\":\"1\"},{\"PropertyName\":\"放置形式\",\"PropertyValue\":\"1\"},{\"PropertyName\":\"管网形式\",\"PropertyValue\":\"2\"},{\"PropertyName\":\"管网直径\",\"PropertyValue\":\"2\"},{\"PropertyName\":\"管网压力类型\",\"PropertyValue\":\"1\"},{\"PropertyName\":\"管网压力范围\",\"PropertyValue\":\"2222\"},{\"PropertyName\":\"接口形式\",\"PropertyValue\":\"1\"},{\"PropertyName\":\"接口口径\",\"PropertyValue\":\"3\"},{\"PropertyName\":\"最大流量\",\"PropertyValue\":\"333\"},{\"PropertyName\":\"供水单位\",\"PropertyValue\":\"剃剃头\"},{\"PropertyName\":\"联系方式\",\"PropertyValue\":\"119\"},{\"PropertyName\":\"备注\",\"PropertyValue\":\"突突突突突突\"}]", - detailItems: null, - createTime: "2021-02-03T02:36:57.451Z", - creatorId: "5e8eced2aaca5f7c1025309b", - deleted: false, - waterSourceType: 0, - integrityScore: 0.21052632 - } + // waterData:any = { + // id: "60125d31d31fab7de81c56b0", + // name: "上海中心消火栓01", + // administrativeRegion: "上海区", + // governmentLevel: "1", + // village: "小高社区", + // address: "国际会议中心", + // location: { + // x: 121.496717, + // y: 31.239452 + // }, + // detailData: "[{\"PropertyName\":\"可用状态\",\"PropertyValue\":\"1\"},{\"PropertyName\":\"放置形式\",\"PropertyValue\":\"1\"},{\"PropertyName\":\"管网形式\",\"PropertyValue\":\"2\"},{\"PropertyName\":\"管网直径\",\"PropertyValue\":\"2\"},{\"PropertyName\":\"管网压力类型\",\"PropertyValue\":\"1\"},{\"PropertyName\":\"管网压力范围\",\"PropertyValue\":\"2222\"},{\"PropertyName\":\"接口形式\",\"PropertyValue\":\"1\"},{\"PropertyName\":\"接口口径\",\"PropertyValue\":\"3\"},{\"PropertyName\":\"最大流量\",\"PropertyValue\":\"333\"},{\"PropertyName\":\"供水单位\",\"PropertyValue\":\"剃剃头\"},{\"PropertyName\":\"联系方式\",\"PropertyValue\":\"119\"},{\"PropertyName\":\"备注\",\"PropertyValue\":\"突突突突突突\"}]", + // detailItems: null, + // createTime: "2021-02-03T02:36:57.451Z", + // creatorId: "5e8eced2aaca5f7c1025309b", + // deleted: false, + // waterSourceType: 0, + // integrityScore: 0.21052632 + // } } diff --git a/src/app/plan-management/entry-plan-look/entry-plan-look.component.ts b/src/app/plan-management/entry-plan-look/entry-plan-look.component.ts index f9de17b..ab4927a 100644 --- a/src/app/plan-management/entry-plan-look/entry-plan-look.component.ts +++ b/src/app/plan-management/entry-plan-look/entry-plan-look.component.ts @@ -297,6 +297,11 @@ export class EntryPlanLookComponent implements OnInit { }else{ this.http.put(`/api/PlanComponents/${element.id}/Cancel`,"").subscribe(data=>{ this.getAllPlanComponents() + },err => { + const config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open(err,'确定',config); }) } } diff --git a/src/app/statistic-analysis/buildingType/building-type-one/building-type-one.component.ts b/src/app/statistic-analysis/buildingType/building-type-one/building-type-one.component.ts index 76bcddd..68f7da8 100644 --- a/src/app/statistic-analysis/buildingType/building-type-one/building-type-one.component.ts +++ b/src/app/statistic-analysis/buildingType/building-type-one/building-type-one.component.ts @@ -16,7 +16,7 @@ export class BuildingTypeOneComponent implements OnInit { ngOnInit(): void { window.setTimeout(()=>{ this.initCharts() - },0) + },100) } ngOnDestroy(): void { this.indexBzt.clear() @@ -28,11 +28,14 @@ export class BuildingTypeOneComponent implements OnInit { count=0//总数 indexData=[]//所有数据 initCharts(){ - this.http.get("/api/StatisticsAnalysis").subscribe((data:any)=>{ - for(var i=0;i{ + console.log(data) + for(var i=0;i{return {name: v.buildingTypeName,value:v.count,id:v.buildingTypeId}}) diff --git a/src/app/statistic-analysis/echarts-data.service.ts b/src/app/statistic-analysis/echarts-data.service.ts index cee619d..bd53afe 100644 --- a/src/app/statistic-analysis/echarts-data.service.ts +++ b/src/app/statistic-analysis/echarts-data.service.ts @@ -409,7 +409,7 @@ export class EchartsDataService { BuildingTypeId:datas.id } //var res - this.http.get("/api/StatisticsAnalysis/Companies",{params:paramsdata}).subscribe((data:any)=>{ + this.http.get("/api/StatisticsAnalysis/BuildingTypes",{params:paramsdata}).subscribe((data:any)=>{ this.tishiData=data console.log(this.tishiData) this.res= '
    '+datas.name+'
    ' @@ -465,6 +465,17 @@ export class EchartsDataService { } + //获取所有数据 + allDate=[] + getData(paramsdata){ + this.http.get("/api/StatisticsAnalysis",{params:paramsdata}).subscribe((data:any)=>{ + this.allDate.push(data) + console.log(this.allDate) + return this.allDate + }) + } + + } diff --git a/src/app/ui/collection-tools-building/collection-tools.component.ts b/src/app/ui/collection-tools-building/collection-tools.component.ts index aeddad8..1b6e0e6 100644 --- a/src/app/ui/collection-tools-building/collection-tools.component.ts +++ b/src/app/ui/collection-tools-building/collection-tools.component.ts @@ -669,7 +669,10 @@ export class CollectionToolsBuildingComponent implements OnInit { this.isShowProperty = false } }, this) - + AxMessageSystem.addListener('imageResize', (eventName, args1) => { + this.assetWidth = args1.Width + this.assetHeight = args1.Height + }, this) if(this.router.url.indexOf("keyUnit/viewunitinfo") != -1){ //查看模式 this.isEditPattern = false this.isediticon = false @@ -1353,7 +1356,6 @@ export class CollectionToolsBuildingComponent implements OnInit { }); this.dataSource.data = treeData this.treeControl.expandAll() - } //点击树节点 @@ -1493,11 +1495,11 @@ export class CollectionToolsBuildingComponent implements OnInit { let companyBuildingData = JSON.parse(JSON.stringify( this.canvasData.originalcompanyBuildingData || {} )) // 当前 单位/建筑 数据 let storeyData = JSON.parse(JSON.stringify( this.canvasData.originaleveryStoreyData || {} )) //当前 楼层 数据 - for(let key in companyBuildingData.data){ - if (companyBuildingData.data[key].FloorId === beforeOneId) { //处理 单位/建筑 数据是否归于当前楼层下 - storeyData.data[key] = companyBuildingData.data[key] - } - } + // for(let key in companyBuildingData.data){ + // if (companyBuildingData.data[key].FloorId === beforeOneId) { //处理 单位/建筑 数据是否归于当前楼层下 + // storeyData.data[key] = companyBuildingData.data[key] + // } + // } for(let key in storeyData.data){ //筛选数据 没有匹配全部放入到 其他 数组 let noMatch = this.allFireElements.find( every=> every.id===storeyData.data[key].FireElementId ) if (!noMatch) { diff --git a/src/app/ui/collection-tools-plan/collection-tools.component.ts b/src/app/ui/collection-tools-plan/collection-tools.component.ts index 528ba81..19f6408 100644 --- a/src/app/ui/collection-tools-plan/collection-tools.component.ts +++ b/src/app/ui/collection-tools-plan/collection-tools.component.ts @@ -674,7 +674,10 @@ export class CollectionToolsPlanComponent implements OnInit { this.isShowProperty = false } }, this) - + AxMessageSystem.addListener('imageResize', (eventName, args1) => { + this.assetWidth = args1.Width + this.assetHeight = args1.Height + }, this) if(this.router.url.indexOf("keyUnit/viewunitinfo") != -1){ //查看模式 this.isEditPattern = false this.isediticon = false diff --git a/src/app/ui/collection-tools/collection-tools.component.ts b/src/app/ui/collection-tools/collection-tools.component.ts index 7f3b35e..4c19b08 100644 --- a/src/app/ui/collection-tools/collection-tools.component.ts +++ b/src/app/ui/collection-tools/collection-tools.component.ts @@ -691,7 +691,10 @@ export class CollectionToolsComponent implements OnInit { this.isShowProperty = false } }, this) - + AxMessageSystem.addListener('imageResize', (eventName, args1) => { + this.assetWidth = args1.Width + this.assetHeight = args1.Height + }, this) this.canvasData.gameMode = GameMode.Assignment if (sessionStorage.getItem('editable') == "0") { //查看模式 this.isEditPattern = false diff --git a/src/app/working-area/model/axImageShape.ts b/src/app/working-area/model/axImageShape.ts index 2a91bd1..ddb7ccf 100644 --- a/src/app/working-area/model/axImageShape.ts +++ b/src/app/working-area/model/axImageShape.ts @@ -5,8 +5,10 @@ import { PaintMode } from './paintModel'; import * as PIXI from 'pixi.js'; import { PropertyInfo } from './PropertyInfo'; import { AxShape } from './axShape'; -import { Sprite } from 'pixi.js'; +import { Sprite, Point, Rectangle } from 'pixi.js'; import { AxArrowConnector } from './axArrowConnector'; +import { AxMessageSystem } from './axMessageSystem'; +import { EVENT_IMAGE_RESIZE } from './events'; /** * 安信图片形状 @@ -31,6 +33,7 @@ export class AxImageShape extends AxShape { wordWrapWidth: 100, }); + text = new PIXI.Text(this.assetData.Name + '\r\n' + this.assetData.PropertyInfos?.find(item => item.PropertyName === '名称/编号')?.PropertyValue, this.style); @@ -48,6 +51,16 @@ export class AxImageShape extends AxShape { upRight: PIXI.Sprite; downLeft: PIXI.Sprite; downRight: PIXI.Sprite; + + upDrag: boolean = false; + downDrag: boolean = false; + leftDrag: boolean = false; + rightDrag: boolean = false; + upLeftDrag: boolean = false; + upRightDrag: boolean = false; + downLeftDrag: boolean = false; + downRightDrag: boolean = false; + constructor(assetData: any, workingArea: WorkingAreaComponent) { super(assetData, workingArea); this.angle = -this.workingArea.backgroundImage.angle; @@ -71,84 +84,353 @@ export class AxImageShape extends AxShape { this.addChild(this.image); this.addChild(this.selectionBox); - //// + // up + this.up = new PIXI.Sprite(this.pointTexture); + this.up.cursor = 'ns-resize'; + this.up.anchor.set(0.5); + this.addChild(this.up); + this.up.interactive = true; + this.up.on('pointerdown', event => { + this.upDrag = true; + this.image.anchor.set(0.5, 1); + this.image.position.set(this.image.position.x, this.image.position.y + (this.image.height / 2)); + event.stopPropagation(); + }); + this.up.on('pointermove', event => { + // 移动时调整形状大小,然后重绘边框 + // 检查右下角距离鼠标的位置, + if (this.upDrag) { + var pos = this.toLocal(event.data.global); + var dY = Math.abs(pos.y - this.image.y); + this.assetData.Height = Math.abs(dY); + this.refresh(); + AxMessageSystem.send(EVENT_IMAGE_RESIZE, this.assetData); + } + + }); + this.up.on('pointerup', event => { + if (this.upDrag) { + this.upDrag = false; + this.image.anchor.set(0.5); + this.image.position.set(this.image.position.x, this.image.position.y - (this.image.height / 2)); + } + }); + this.up.on('pointerupoutside', event => { + if (this.upDrag) { + this.upDrag = false; + this.image.anchor.set(0.5); + this.image.position.set(this.image.position.x, this.image.position.y - (this.image.height / 2)); + } + }); + this.up.visible = false; + // down + this.down = new PIXI.Sprite(this.pointTexture); + this.down.cursor = 'ns-resize'; + this.down.anchor.set(0.5); + this.addChild(this.down); + this.down.interactive = true; + this.down.on('pointerdown', event => { + this.downDrag = true; + this.image.anchor.set(0.5, 0); + this.image.position.set(this.image.position.x, this.image.position.y - (this.image.height / 2)); + event.stopPropagation(); + }); + this.down.on('pointermove', event => { + // 移动时调整形状大小,然后重绘边框 + // 检查右下角距离鼠标的位置, + if (this.downDrag) { + var pos = this.toLocal(event.data.global); + var dY = Math.abs(pos.y - this.image.y); + this.assetData.Height = Math.abs(dY); + this.refresh(); + AxMessageSystem.send(EVENT_IMAGE_RESIZE, this.assetData); + } + + }); + this.down.on('pointerup', event => { + if (this.downDrag) { + this.downDrag = false; + this.image.anchor.set(0.5); + this.image.position.set(this.image.position.x, this.image.position.y + (this.image.height / 2)); + } + }); + this.down.on('pointerupoutside', event => { + if (this.downDrag) { + this.downDrag = false; + this.image.anchor.set(0.5); + this.image.position.set(this.image.position.x, this.image.position.y + (this.image.height / 2)); + } + }); + this.down.visible = false; + // left + this.left = new PIXI.Sprite(this.pointTexture); + this.left.cursor = 'ew-resize'; + this.left.anchor.set(0.5); + this.addChild(this.left); + this.left.interactive = true; + this.left.on('pointerdown', event => { + this.leftDrag = true; + this.image.anchor.set(1, 0.5); + this.image.position.set(this.image.position.x + (this.image.width / 2), this.image.position.y); + event.stopPropagation(); + }); + this.left.on('pointermove', event => { + // 移动时调整形状大小,然后重绘边框 + // 检查右下角距离鼠标的位置, + if (this.leftDrag) { + var pos = this.toLocal(event.data.global); + var dX = Math.abs(pos.x - this.image.x); + this.assetData.Width = Math.abs(dX); + this.refresh(); + AxMessageSystem.send(EVENT_IMAGE_RESIZE, this.assetData); + } + + }); + this.left.on('pointerup', event => { + if (this.leftDrag) { + this.leftDrag = false; + this.image.anchor.set(0.5); + this.image.position.set(this.image.position.x - (this.image.width / 2), this.image.position.y); + } + }); + this.left.on('pointerupoutside', event => { + if (this.leftDrag) { + this.leftDrag = false; + this.image.anchor.set(0.5); + this.image.position.set(this.image.position.x - (this.image.width / 2), this.image.position.y); + } + }); + this.left.visible = false; + // right + this.right = new PIXI.Sprite(this.pointTexture); + this.right.cursor = 'ew-resize'; + this.right.anchor.set(0.5); + this.addChild(this.right); + this.right.interactive = true; + this.right.on('pointerdown', event => { + this.rightDrag = true; + this.image.anchor.set(0, 0.5); + this.image.position.set(this.image.position.x - (this.image.width / 2), this.image.position.y); + event.stopPropagation(); + }); + this.right.on('pointermove', event => { + // 移动时调整形状大小,然后重绘边框 + // 检查右下角距离鼠标的位置, + if (this.rightDrag) { + var pos = this.toLocal(event.data.global); + var dX = Math.abs(pos.x - this.image.x); + this.assetData.Width = Math.abs(dX); + this.refresh(); + AxMessageSystem.send(EVENT_IMAGE_RESIZE, this.assetData); + } + + }); + this.right.on('pointerup', event => { + if (this.rightDrag) { + this.rightDrag = false; + this.image.anchor.set(0.5); + this.image.position.set(this.image.position.x + (this.image.width / 2), this.image.position.y); + } + }); + this.right.on('pointerupoutside', event => { + if (this.rightDrag) { + this.rightDrag = false; + this.image.anchor.set(0.5); + this.image.position.set(this.image.position.x + (this.image.width / 2)); + } + }); + this.right.visible = false; // up-left this.upLeft = new PIXI.Sprite(this.pointTexture); + this.upLeft.cursor = 'nwse-resize'; this.upLeft.anchor.set(0.5); this.addChild(this.upLeft); this.upLeft.interactive = true; + this.upLeft.on('pointerdown', event => { + this.upLeftDrag = true; + this.image.anchor.set(1); + this.image.position.set(this.image.position.x + (this.image.width / 2), this.image.position.y + (this.image.height / 2)); + event.stopPropagation(); + }); + this.upLeft.on('pointermove', event => { + // 移动时调整形状大小,然后重绘边框 + // 检查右下角距离鼠标的位置, + if (this.upLeftDrag) { + var pos = this.toLocal(event.data.global); + var dX = Math.abs(pos.x - this.image.x); + var dY = Math.abs(pos.y - this.image.y); + var result = dX > dY ? dX : dY; + this.assetData.Width = Math.abs(result); + this.assetData.Height = Math.abs(result); + this.refresh(); + AxMessageSystem.send(EVENT_IMAGE_RESIZE, this.assetData); + } + + }); + this.upLeft.on('pointerup', event => { + if (this.upLeftDrag) { + this.upLeftDrag = false; + this.image.anchor.set(0.5); + this.image.position.set(this.image.position.x - (this.image.width / 2), this.image.position.y - (this.image.height / 2)); + } + }); + this.upLeft.on('pointerupoutside', event => { + if (this.upLeftDrag) { + this.upLeftDrag = false; + this.image.anchor.set(0.5); + this.image.position.set(this.image.position.x - (this.image.width / 2), this.image.position.y - (this.image.height / 2)); + } + }); this.upLeft.visible = false; // up-right this.upRight = new PIXI.Sprite(this.pointTexture); + this.upRight.cursor = 'nesw-resize'; this.upRight.anchor.set(0.5); this.addChild(this.upRight); this.upRight.interactive = true; + this.upRight.on('pointerdown', event => { + this.upRightDrag = true; + this.image.anchor.set(0, 1); + this.image.position.set(this.image.position.x - (this.image.width / 2), this.image.position.y + (this.image.height / 2)); + event.stopPropagation(); + }); + this.upRight.on('pointermove', event => { + // 移动时调整形状大小,然后重绘边框 + // 检查右下角距离鼠标的位置, + if (this.upRightDrag) { + var pos = this.toLocal(event.data.global); + var dX = Math.abs(pos.x - this.image.x); + var dY = Math.abs(pos.y - this.image.y); + var result = dX > dY ? dX : dY; + this.assetData.Width = Math.abs(result); + this.assetData.Height = Math.abs(result); + this.refresh(); + AxMessageSystem.send(EVENT_IMAGE_RESIZE, this.assetData); + } + + }); + this.upRight.on('pointerup', event => { + if (this.upRightDrag) { + this.upRightDrag = false; + this.image.anchor.set(0.5); + this.image.position.set(this.image.position.x + (this.image.width / 2), this.image.position.y - (this.image.height / 2)); + } + }); + this.upRight.on('pointerupoutside', event => { + if (this.upRightDrag) { + this.upRightDrag = false; + this.image.anchor.set(0.5); + this.image.position.set(this.image.position.x + (this.image.width / 2), this.image.position.y - (this.image.height / 2)); + } + }); this.upRight.visible = false; // down-left this.downLeft = new PIXI.Sprite(this.pointTexture); + this.downLeft.cursor = 'nesw-resize'; this.downLeft.anchor.set(0.5); this.addChild(this.downLeft); this.downLeft.interactive = true; + this.downLeft.on('pointerdown', event => { + this.downLeftDrag = true; + this.image.anchor.set(1, 0); + this.image.position.set(this.image.position.x + (this.image.width / 2), this.image.position.y - (this.image.height / 2)); + event.stopPropagation(); + }); + this.downLeft.on('pointermove', event => { + // 移动时调整形状大小,然后重绘边框 + // 检查右下角距离鼠标的位置, + if (this.downLeftDrag) { + var pos = this.toLocal(event.data.global); + var dX = Math.abs(pos.x - this.image.x); + var dY = Math.abs(pos.y - this.image.y); + var result = dX > dY ? dX : dY; + this.assetData.Width = Math.abs(result); + this.assetData.Height = Math.abs(result); + this.refresh(); + AxMessageSystem.send(EVENT_IMAGE_RESIZE, this.assetData); + } + + }); + this.downLeft.on('pointerup', event => { + if (this.downLeftDrag) { + this.downLeftDrag = false; + this.image.anchor.set(0.5); + this.image.position.set(this.image.position.x - (this.image.width / 2), this.image.position.y + (this.image.height / 2)); + } + }); + this.downLeft.on('pointerupoutside', event => { + if (this.downLeftDrag) { + this.downLeftDrag = false; + this.image.anchor.set(0.5); + this.image.position.set(this.image.position.x - (this.image.width / 2), this.image.position.y + (this.image.height / 2)); + } + }); this.downLeft.visible = false; // down-right this.downRight = new PIXI.Sprite(this.pointTexture); + this.downRight.cursor = 'nwse-resize'; this.downRight.anchor.set(0.5); this.addChild(this.downRight); this.downRight.interactive = true; + this.downRight.on('pointerdown', event => { + this.downRightDrag = true; + this.image.anchor.set(0, 0); + this.image.position.set(this.image.position.x - (this.image.width / 2), this.image.position.y - (this.image.height / 2)); + event.stopPropagation(); + }); + this.downRight.on('pointermove', event => { + // 移动时调整形状大小,然后重绘边框 + // 检查右下角距离鼠标的位置, + if (this.downRightDrag) { + var pos = this.toLocal(event.data.global); + var dX = Math.abs(pos.x - this.image.x); + var dY = Math.abs(pos.y - this.image.y); + var result = dX > dY ? dX : dY; + this.assetData.Width = Math.abs(result); + this.assetData.Height = Math.abs(result); + this.refresh(); + AxMessageSystem.send(EVENT_IMAGE_RESIZE, this.assetData); + } + + }); + this.downRight.on('pointerup', event => { + if (this.downRightDrag) { + this.downRightDrag = false; + this.image.anchor.set(0.5); + this.image.position.set(this.image.position.x + (this.image.width / 2), this.image.position.y + (this.image.height / 2)); + } + }); + this.downRight.on('pointerupoutside', event => { + if (this.downRightDrag) { + this.downRightDrag = false; + this.image.anchor.set(0.5); + this.image.position.set(this.image.position.x + (this.image.width / 2), this.image.position.y + (this.image.height / 2)); + } + }); this.downRight.visible = false; //// - - - - // if (this.assetData.CanConnect) { - // // connectPoint - // this.connectPoint = new PIXI.Sprite(this.connectPointTexture); - // this.connectPoint.anchor.set(0.5); - // this.connectPoint.x = this.image.x; - // this.connectPoint.y = this.image.y; - // this.addChild(this.connectPoint); - // this.connectPoint.interactive = true; - // this.connectPoint - // .on('pointerdown', event => { - // event.stopPropagation(); - // // this.paintingPipeline(this.x, this.y); - // }) - // .on('pointerover', event => { - // this.setSelectionBox(true, this.connectPoint); - // }) - // .on('pointerout', event => { - // this.setSelectionBox(false); - // }); - // // this.showConnectionPoint(false); - // } this.setItemScale(1 / this.workingArea.backgroundImage.scale.x); } - // // 设置选择框 - // public setSelectionBox(b: boolean, sprite?: PIXI.Sprite) { - // if (b) { - // this.selectionBox.lineStyle(2, 0x00EB00, 1); - // this.selectionBox.position = sprite.position; - // this.selectionBox.drawRect(- sprite.width / 2, - sprite.height / 2, sprite.width, sprite.height); - // } else { - // this.selectionBox.clear(); - // } - // } // 设置名称 public setNameVisible(value: boolean, mode: GameMode) { if (this.assetData.GameMode === mode) { this.text.visible = value; } } - // // 显示连接点 - // public showConnectionPoint(b: boolean) { - // this.connectPoint.visible = b; - // } /** * 设置点显示状态 * @param value 显示状态 */ public setPointVisiable(value: boolean) { const rect = this.getLocalBounds(); + this.up.x = rect.right - rect.width / 2; + this.up.y = rect.top; + this.down.x = rect.right - rect.width / 2; + this.down.y = rect.bottom; + this.left.x = rect.left; + this.left.y = rect.bottom - rect.height / 2; + this.right.x = rect.right; + this.right.y = rect.bottom - rect.height / 2; this.upLeft.x = rect.left; this.upLeft.y = rect.top; this.upRight.x = rect.right; @@ -157,6 +439,10 @@ export class AxImageShape extends AxShape { this.downLeft.y = rect.bottom; this.downRight.x = rect.right; this.downRight.y = rect.bottom; + this.up.visible = value; + this.down.visible = value; + this.left.visible = value; + this.right.visible = value; this.upLeft.visible = value; this.upRight.visible = value; this.downLeft.visible = value; @@ -172,6 +458,14 @@ export class AxImageShape extends AxShape { super.drawBorder(scale); const rect = this.getLocalBounds(); + this.up.x = rect.right - rect.width / 2; + this.up.y = rect.top; + this.down.x = rect.right - rect.width / 2; + this.down.y = rect.bottom; + this.left.x = rect.left; + this.left.y = rect.bottom - rect.height / 2; + this.right.x = rect.right; + this.right.y = rect.bottom - rect.height / 2; this.upLeft.x = rect.left; this.upLeft.y = rect.top; this.upRight.x = rect.right; @@ -191,81 +485,57 @@ export class AxImageShape extends AxShape { this.upRight.scale.set(scale); this.downLeft.scale.set(scale); this.downRight.scale.set(scale); + this.up.scale.set(scale); + this.down.scale.set(scale); + this.left.scale.set(scale); + this.right.scale.set(scale); } } - // paintingPipeline(x: number, y: number) { - // if (this.assetData.CanConnect) { - // if (this.workingArea.getPaintMode() === PaintMode.Pipeline) { - // if (this.workingArea.paintingShape === null) { - // this.workingArea.previewLineSegment.visible = true; - // this.workingArea.currentClickPoint.position = - // new PIXI.Point(this.workingArea.circleShadow.x, this.workingArea.circleShadow.y); - // this.workingArea.paintPoints.push(new PIXI.Point(x, y)); - // const json = JSON.parse(JSON.stringify(this.workingArea.canvasData.selectTemplateData.propertyInfos)); - // const list = []; - // json.forEach(element => { - // const property = new PropertyInfo(element); - // list.push(property); - // }); - // const tempData = { - // TemplateId: this.workingArea.canvasData.selectTemplateData.id, - // CanConnect: this.workingArea.canvasData.selectTemplateData.canConnect, - // Pipelines: new Array(), - // FloorId: this.workingArea.canvasData.selectStorey.id, - // Angle: this.workingArea.canvasData.selectTemplateData.angle, - // Color: this.workingArea.canvasData.selectTemplateData.color, - // Enabled: this.workingArea.canvasData.selectTemplateData.enabled, - // FillMode: this.workingArea.canvasData.selectTemplateData.fillMode, - // FireElementId: this.workingArea.canvasData.selectTemplateData.fireElementId, - // FixedSize: this.workingArea.canvasData.selectTemplateData.fixedSize, - // Height : 32, - // Width : 32, - // Id: ObjectID.default.generate(), - // ImageUrl: this.workingArea.canvasData.selectTemplateData.imageUrl, - // InteractiveMode: this.workingArea.canvasData.selectTemplateData.interactiveMode, - // MultiPoint : JSON.parse(JSON.stringify(this.workingArea.paintPoints)), - // Point: new PIXI.Point(0, 0), - // Name : this.workingArea.canvasData.selectTemplateData.name, - // PropertyInfos: list, - // Border : this.workingArea.canvasData.selectTemplateData.border, - // DrawMode : this.workingArea.canvasData.selectTemplateData.drawMode, - // Thickness : this.workingArea.canvasData.selectTemplateData.thickness, - // IsFromBuilding : this.workingArea.canvasData.selectTemplateData.isFromBuilding, - // GameMode: this.workingArea.canvasData.gameMode, - // LinkedObjects: new Array(this.assetData.Id), - // Tag: this.workingArea.canvasData.selectTemplateData.tag - // }; - // this.workingArea.paintingShape = new AxArrowConnector(tempData, this.workingArea, false, true); - // this.assetData.Pipelines.push(this.workingArea.paintingShape.assetData.Id); - // this.workingArea.emit('createIcon', this.workingArea.paintingShape); - // } else { - // this.workingArea.previewLineSegment.visible = false; - // this.workingArea.currentClickPoint.position = - // new PIXI.Point(this.workingArea.circleShadow.x, this.workingArea.circleShadow.y); - // this.workingArea.paintPoints.push(new PIXI.Point(x, y)); - // this.workingArea.paintingShape.assetData.MultiPoint = - // JSON.parse(JSON.stringify(this.workingArea.paintPoints)); - // this.workingArea.paintingShape.assetData.LinkedObjects.push(this.assetData.Id); - // this.assetData.Pipelines.push(this.workingArea.paintingShape.assetData.Id); - // this.workingArea.paintingShape.redraw(); - // this.workingArea.initPipelineData(); - // } - // } - // } - // } // 刷新 public refresh() { - if (this.assetData.CanConnect) { - - } this.image.width = this.assetData.Width; this.image.height = this.assetData.Height; this.image.angle = this.assetData.Angle; this.text.text = this.assetData.Name + '\r\n' + this.assetData.PropertyInfos?.find(item => item.PropertyName === '名称/编号')?.PropertyValue; - this.text.x = this.image.x; - this.text.y = this.image.y - this.image.height / 2; + + + if (this.image.anchor.x == 0) { + if (this.image.anchor.y == 0) { + this.text.x = this.image.x + this.image.width / 2; + this.text.y = this.image.y; + } else if (this.image.anchor.y == 0.5) { + this.text.x = this.image.x + this.image.width / 2; + this.text.y = this.image.y - this.image.height / 2; + } else if (this.image.anchor.y == 1) { + this.text.x = this.image.x + this.image.width / 2; + this.text.y = this.image.y - this.image.height; + } + + } else if (this.image.anchor.x == 0.5) { + if (this.image.anchor.y == 0) { + this.text.x = this.image.x; + this.text.y = this.image.y; + } else if (this.image.anchor.y == 0.5) { + + } else if (this.image.anchor.y == 1) { + this.text.x = this.image.x; + this.text.y = this.image.y - this.image.height; + } + } else if (this.image.anchor.x == 1) { + if (this.image.anchor.y == 0) { + this.text.x = this.image.x - this.image.width / 2; + this.text.y = this.image.y; + } else if (this.image.anchor.y == 0.5) { + this.text.x = this.image.x - this.image.width / 2; + this.text.y = this.image.y - this.image.height / 2; + } else if (this.image.anchor.y == 1) { + this.text.x = this.image.x - this.image.width / 2; + this.text.y = this.image.y - this.image.height; + } + } this.angle = -this.workingArea.backgroundImage.angle; + this.drawBorder(1 / this.workingArea.backgroundImage.scale.x); } } diff --git a/src/app/working-area/model/axMessageSystem.ts b/src/app/working-area/model/axMessageSystem.ts index 1451f9c..fac6c6b 100644 --- a/src/app/working-area/model/axMessageSystem.ts +++ b/src/app/working-area/model/axMessageSystem.ts @@ -5,14 +5,14 @@ export class AxMessageSystem { /** 监听数组 */ private static listeners = {}; - /** + /** * 注册事件 * @param name 事件名称 * @param callback 回调函数 * @param context 上下文 */ - public static addListener(name: string, callback: () => void, context: any) { - const observers: Observer[] = AxMessageSystem.listeners[name]; + public static addListener(name: string, callback: Function, context: any) { + let observers: Observer[] = AxMessageSystem.listeners[name]; if (!observers) { AxMessageSystem.listeners[name] = []; } @@ -25,18 +25,18 @@ export class AxMessageSystem { * @param callback 回调函数 * @param context 上下文 */ - public static removeListener(name: string, callback: () => void, context: any) { - const observers: Observer[] = AxMessageSystem.listeners[name]; - if (!observers) { return; } - const length = observers.length; + public static removeListener(name: string, callback: Function, context: any) { + let observers: Observer[] = AxMessageSystem.listeners[name]; + if (!observers) return; + let length = observers.length; for (let i = 0; i < length; i++) { - const observer = observers[i]; + let observer = observers[i]; if (observer.compar(context)) { observers.splice(i, 1); break; } } - if (observers.length === 0) { + if (observers.length == 0) { delete AxMessageSystem.listeners[name]; } } @@ -46,11 +46,11 @@ export class AxMessageSystem { * @param name 事件名称 */ public static send(name: string, ...args: any[]) { - const observers: Observer[] = AxMessageSystem.listeners[name]; - if (!observers) { return; } - const length = observers.length; + let observers: Observer[] = AxMessageSystem.listeners[name]; + if (!observers) return; + let length = observers.length; for (let i = 0; i < length; i++) { - const observer = observers[i]; + let observer = observers[i]; observer.notify(name, ...args); } } @@ -61,12 +61,12 @@ export class AxMessageSystem { */ class Observer { /** 回调函数 */ - private callback: () => void; + private callback: Function = null; /** 上下文 */ private context: any = null; - constructor(callback: () => void, context: any) { - const self = this; + constructor(callback: Function, context: any) { + let self = this; self.callback = callback; self.context = context; } @@ -76,7 +76,7 @@ class Observer { * @param args 不定参数 */ notify(...args: any[]): void { - const self = this; + let self = this; self.callback.call(self.context, ...args); } @@ -85,6 +85,6 @@ class Observer { * @param context 上下文 */ compar(context: any): boolean { - return context === this.context; + return context == this.context; } } diff --git a/src/app/working-area/model/axShape.ts b/src/app/working-area/model/axShape.ts index 5c6ce51..85ab02c 100644 --- a/src/app/working-area/model/axShape.ts +++ b/src/app/working-area/model/axShape.ts @@ -32,7 +32,7 @@ export class AxShape extends Graphics { this.workingArea.backgroundImage.addChild(this); this.zIndex = 200; this.interactive = true; - this.buttonMode = true; + // this.buttonMode = true; this .on('pointerdown', event => { event.stopPropagation(); @@ -88,10 +88,10 @@ export class AxShape extends Graphics { public hideBorder() { this.border.visible = false; } - /** - * 设置点显示状态 - * @param value 显示状态 - */ + /** + * 设置点显示状态 + * @param value 显示状态 + */ public setPointVisiable(value: boolean) { } @@ -112,7 +112,7 @@ export class AxShape extends Graphics { const spaceLength = scale * 1; const lineLenght = rect.width + 0.5 + 0.5; - const dashLength = scale * ( lineLenght + spaceLength - Math.floor((rect.width + rect.height) / 2 / 4.1)) / Math.floor((rect.width + rect.height) / 2 / 4.1); + const dashLength = scale * (lineLenght + spaceLength - Math.floor((rect.width + rect.height) / 2 / 4.1)) / Math.floor((rect.width + rect.height) / 2 / 4.1); this.drawDash(this.border, p1.x - 0.5 * scale, p1.y, p2.x + 0.5 * scale, p2.y, dashLength, spaceLength); this.drawDash(this.border, p2.x, p2.y - 0.5 * scale, p3.x, p3.y + 0.5 * scale, dashLength, spaceLength); this.drawDash(this.border, p3.x + 0.5 * scale, p3.y, p4.x - 0.5 * scale, p4.y, dashLength, spaceLength); @@ -126,36 +126,36 @@ export class AxShape extends Graphics { this.border.lineTo(p4.x, p4.y); this.border.closePath(); // this.border.endFill(); - } - // 画虚线 - drawDash(target, x1, y1, x2, y2, dashLength = 5, spaceLength = 1) { - const x = x2 - x1; - const y = y2 - y1; - let hyp = Math.sqrt((x) * (x) + (y) * (y)); - const units = hyp / (dashLength + spaceLength); - const dashSpaceRatio = dashLength / (dashLength + spaceLength); - const dashX = (x / units) * dashSpaceRatio; - const spaceX = (x / units) - dashX; - const dashY = (y / units) * dashSpaceRatio; - const spaceY = (y / units) - dashY; + } + // 画虚线 + drawDash(target, x1, y1, x2, y2, dashLength = 5, spaceLength = 1) { + const x = x2 - x1; + const y = y2 - y1; + let hyp = Math.sqrt((x) * (x) + (y) * (y)); + const units = hyp / (dashLength + spaceLength); + const dashSpaceRatio = dashLength / (dashLength + spaceLength); + const dashX = (x / units) * dashSpaceRatio; + const spaceX = (x / units) - dashX; + const dashY = (y / units) * dashSpaceRatio; + const spaceY = (y / units) - dashY; - target.moveTo(x1, y1); + target.moveTo(x1, y1); - while (hyp > 0) { - x1 += dashX; - y1 += dashY; - hyp -= dashLength; - if (hyp < 0) { - x1 = x2; - y1 = y2; + while (hyp > 0) { + x1 += dashX; + y1 += dashY; + hyp -= dashLength; + if (hyp < 0) { + x1 = x2; + y1 = y2; + } + target.lineTo(x1, y1); + x1 += spaceX; + y1 += spaceY; + target.moveTo(x1, y1); + hyp -= spaceLength; } - target.lineTo(x1, y1); - x1 += spaceX; - y1 += spaceY; - target.moveTo(x1, y1); - hyp -= spaceLength; - } - target.moveTo(x2, y2); + target.moveTo(x2, y2); } // 计算多边形重心 public calculatePolygonGravityCenter(points: PIXI.Point[]) { diff --git a/src/app/working-area/model/configuration.ts b/src/app/working-area/model/configuration.ts index bf0507a..f26898b 100644 --- a/src/app/working-area/model/configuration.ts +++ b/src/app/working-area/model/configuration.ts @@ -45,7 +45,7 @@ export const VIEW_RIGHT = 'rightview'; export const VIEW_LEFT = 'leftview'; export const VIEW_ISOMETRY = 'isometryview'; -export enum WallTypes{ +export enum WallTypes { STRAIGHT, CURVED } @@ -77,7 +77,8 @@ export var config = { directionalDrag: true, boundsX: 500, boundsY: 500, - viewBounds: 20000 }; + viewBounds: 60000 +}; export var wallInformation = { exterior: false, interior: false, midline: true, labels: true, exteriorlabel: 'e:', interiorlabel: 'i:', midlinelabel: 'm:' }; @@ -99,7 +100,7 @@ export class Configuration extends EventDispatcher { static getInstance() { if (this.instance === undefined - || this.instance === null) { + || this.instance === null) { this.instance = new Configuration(); } return this.instance; @@ -115,7 +116,7 @@ export class Configuration extends EventDispatcher { // this.data[key] = value; config[key] = value; // if(key !== viewBounds){ - Configuration.getInstance().dispatchEvent({ type: EVENT_CHANGED, item: Configuration.getInstance(), 'key': key, 'value': value }); + Configuration.getInstance().dispatchEvent({ type: EVENT_CHANGED, item: Configuration.getInstance(), 'key': key, 'value': value }); // } } diff --git a/src/app/working-area/model/events.ts b/src/app/working-area/model/events.ts index d7da978..d06de6a 100644 --- a/src/app/working-area/model/events.ts +++ b/src/app/working-area/model/events.ts @@ -67,3 +67,5 @@ export const EVENT_MODIFY_TEXTURE_ATTRIBUTE = 'MODIFY_TEXTURE_ATTRIBUTE_EVENT'; export const EVENT_PARAMETRIC_GEOMETRY_UPATED = 'PARAMETRIC_GEOMETRY_UPATED_EVENT'; export const EVENT_SELECTION_CHANGED = 'selectionChanged'; + +export const EVENT_IMAGE_RESIZE = 'imageResize'; diff --git a/src/app/working-area/model/grid2D.ts b/src/app/working-area/model/grid2D.ts index 9683a49..7a5c17c 100644 --- a/src/app/working-area/model/grid2D.ts +++ b/src/app/working-area/model/grid2D.ts @@ -33,8 +33,8 @@ export class Grid2D extends Graphics { let spacing = Dimensioning.cmToPixel(spacingCMS); let totalLines = gridSize / spacing; let halfSize = gridSize * 0.5; - let linewidth = Math.max(1.0 / this.gridScale, 1.0) * 1/this.canvas.scale.x;// 增加缩放系数 - let highlightLineWidth = Math.max(1 / this.gridScale, 1.0) * 1/this.canvas.scale.x;// 增加缩放系数 + let linewidth = Math.max(1.0 / this.gridScale, 1.0) * 1 / this.canvas.scale.x;// 增加缩放系数 + let highlightLineWidth = Math.max(1 / this.gridScale, 1.0) * 1 / this.canvas.scale.x;// 增加缩放系数 let normalColor = 0xE0E0E0; let highlightColor = 0xD0D0D0; const cellSize = 5; @@ -52,10 +52,10 @@ export class Grid2D extends Graphics { this.endFill(); this.beginFill(0xFF0000, 1.0); - this.drawCircle(-halfSize, -halfSize,5); - this.drawCircle(halfSize, -halfSize,5); - this.drawCircle(halfSize, halfSize,5); - this.drawCircle(-halfSize, halfSize,5); + this.drawCircle(-halfSize, -halfSize, 5); + this.drawCircle(halfSize, -halfSize, 5); + this.drawCircle(halfSize, halfSize, 5); + this.drawCircle(-halfSize, halfSize, 5); this.drawCircle(0, 0, 5); this.endFill(); } @@ -80,8 +80,8 @@ export class Grid2D extends Graphics { let spacing = Dimensioning.cmToPixel(spacingCMS); let halfSize = gridSize * 0.5; return { - x: Math.floor((x - -halfSize) / spacing), - y: Math.floor((y - -halfSize) / spacing), + x: Math.floor((x - -halfSize) / spacing), + y: Math.floor((y - -halfSize) / spacing), }; } } diff --git a/src/app/working-area/working-area.component.ts b/src/app/working-area/working-area.component.ts index 12e5771..60b6c20 100644 --- a/src/app/working-area/working-area.component.ts +++ b/src/app/working-area/working-area.component.ts @@ -21,7 +21,9 @@ import { AxSelection } from './model/axSelection'; import { AxMessageSystem } from './model/axMessageSystem'; import { Grid2D } from './model/grid2D'; import { Viewport } from 'pixi-viewport'; -import { EVENT_SELECTION_CHANGED } from './model/events'; +import { EVENT_IMAGE_RESIZE, EVENT_SELECTION_CHANGED } from './model/events'; +import { Dimensioning } from './model/dimensioning'; +import { Configuration, viewBounds } from './model/configuration'; @Component({ @@ -164,8 +166,7 @@ export class WorkingAreaComponent extends EventEmitter implements OnInit, AfterV * 重大调整-主版本号增加 * 日期变更-日期版本号增加 */ - // todo shift绘制垂直线段 - public VERSION = '1.3.0.20210220_beta'; + public VERSION = '1.4.1.20210303_rc'; /** * 数据初始化 */ @@ -208,7 +209,6 @@ export class WorkingAreaComponent extends EventEmitter implements OnInit, AfterV this.camera2D.destroy(); this.app.destroy(); } - public setMulitSelect(b: boolean) { if (b) { this.isCtrlKeyClicked = true; @@ -366,11 +366,12 @@ export class WorkingAreaComponent extends EventEmitter implements OnInit, AfterV * 创建2D相机 */ private createViewport(): void { + var gridSize = Dimensioning.cmToPixel(Configuration.getNumericValue(viewBounds) * 1); this.camera2D = new Viewport({ screenWidth: this.app.view.width, screenHeight: this.app.view.height, - worldWidth: 20000, - worldHeight: 20000, + worldWidth: gridSize, + worldHeight: gridSize, interaction: this.app.renderer.plugins.interaction, }); this.camera2D.pivot.set(0.5); @@ -379,10 +380,10 @@ export class WorkingAreaComponent extends EventEmitter implements OnInit, AfterV this.camera2D .clamp({ - left: -10000, - right: 10000, - top: -10000, - bottom: 10000, + left: -gridSize / 2, + right: gridSize / 2, + top: -gridSize / 2, + bottom: gridSize / 2, }) .drag() .pinch() diff --git a/src/assets/images/箭头.png b/src/assets/images/箭头.png new file mode 100644 index 0000000..78c5a09 Binary files /dev/null and b/src/assets/images/箭头.png differ diff --git a/src/assets/images/箭头2.png b/src/assets/images/箭头2.png new file mode 100644 index 0000000..8861090 Binary files /dev/null and b/src/assets/images/箭头2.png differ diff --git a/src/assets/images/箭头3.png b/src/assets/images/箭头3.png new file mode 100644 index 0000000..a838f47 Binary files /dev/null and b/src/assets/images/箭头3.png differ