Browse Source

[合并代码]

develop
陈鹏飞 4 years ago
parent
commit
b71742eb23
  1. 11
      src/app/pipes/boolean.pipe.ts
  2. 53
      src/app/ui/dangerous/dangerous.component.html
  3. 66
      src/app/ui/dangerous/dangerous.component.scss
  4. 269
      src/app/ui/dangerous/dangerous.component.ts
  5. 11
      src/app/ui/dangerous/gis.html
  6. 27
      src/app/ui/disposal-node/disposal-node.component.html
  7. 73
      src/app/ui/disposal-node/disposal-node.component.scss
  8. 16
      src/app/ui/disposal-node/disposal-node.component.ts
  9. 7469
      src/app/ui/plan-assistance/plan-assistance.component.ts
  10. 8
      src/app/ui/plan/collection-tools.component.html
  11. 3
      src/app/ui/plan/collection-tools.component.scss
  12. 25
      src/app/ui/plan/collection-tools.component.ts
  13. 6
      src/app/ui/ui.module.ts
  14. 31
      src/app/working-area/working-area.component.ts

11
src/app/pipes/boolean.pipe.ts

@ -1,5 +1,6 @@
import { Pipe, PipeTransform } from '@angular/core';
import { isno , PlanTypeEnum , AuditStatusEnum , PlanLevelEnum} from '../interface'
import {DomSanitizer} from '@angular/platform-browser'
@Pipe({name: 'isno'})
export class IsnoPipe implements PipeTransform {
transform(value: boolean): string {
@ -29,4 +30,14 @@ export class PlanLevel implements PipeTransform {
transform(value: number): string {
return PlanLevelEnum[value]
}
}
@Pipe({name: 'safeHtml'})
export class SafeHtmlPipe implements PipeTransform {
constructor(private sanitizer: DomSanitizer) {
}
transform(html) {
return this.sanitizer.bypassSecurityTrustHtml(html)
}
}

53
src/app/ui/dangerous/dangerous.component.html

@ -7,7 +7,7 @@
<!-- 危化品类型 -->
<div class="type" *ngIf="istype">
<div class="leftbox">
<div *ngFor="let item of typedata,let key = index" [title]="item.name" (click)="selectedDiv(key,item)" [ngClass]="{'divselected': key == selectedIndex}"><span>{{item.name}}</span></div>
</div>
<div class="rightbox">
<table>
@ -18,51 +18,36 @@
<th>分类</th>
<th>查看详情</th>
</tr>
<tr>
<td>row 1, cell 1</td>
<td>row 1, cell 2</td>
<td>row 1, cell 1</td>
<td>row 1, cell 2</td>
<td (click)="openDetails()">查看详情</td>
</tr>
<tr>
<td>row 1, cell 1</td>
<td>row 1, cell 2</td>
<td>row 1, cell 1</td>
<td>row 1, cell 2</td>
<td>查看详情</td>
</tr>
<tr>
<td>row 1, cell 1</td>
<td>row 1, cell 2</td>
<td>row 1, cell 1</td>
<td>row 1, cell 2</td>
<td>查看详情</td>
<tr *ngFor="let item of detaildata">
<td>{{item.name}}</td>
<td>{{item.englishname}}</td>
<td>{{item.molecularformula}}</td>
<td>{{item.type}}</td>
<td (click)="openDetails(item)">查看详情</td>
</tr>
</table>
</div>
</div>
<!-- 危化品分布 -->
<div id="size" class="size" *ngIf="!istype">
</div>
<app-gis *ngIf="!istype"></app-gis>
<!-- 详情弹出框 -->
<div class="openDiv" *ngIf="isOpen" cdkDragBoundary=".box" cdkDrag>
<div class="top">
<h4>name</h4>
<div class="openDiv" *ngIf="isOpen" cdkDragBoundary=".box" cdkDrag >
<div class="top" cdkDragHandle>
<h4>{{detailNode.name}}</h4>
<!-- <div class="btn" style="right: 33px;" title="最小化">-</div> -->
<div class="btn" title="关闭" (click)="closeDiv()">x</div>
</div>
<div class="details">
<div class="left">
<div>品名</div>
<div>理化属性</div>
<div>危害特性</div>
<div>灭火剂</div>
<div>储运注意事项</div>
<div (click)="clickNode(0)">品名</div>
<div (click)="clickNode(1)">理化属性</div>
<div (click)="clickNode(2)">危害特性</div>
<div (click)="clickNode(3)">灭火剂</div>
<div (click)="clickNode(4)">储运注意事项</div>
</div>
<div class="right">
<div class="right" [innerHTML]="detailNode.content[num].data | safeHtml">
</div>
</div>
</div>

66
src/app/ui/dangerous/dangerous.component.scss

@ -8,6 +8,7 @@
flex: 2%;
width: 100%;
padding-top: 10px;
font-size: 20px;
div{
display: inline-block;
width: 126px;
@ -35,6 +36,28 @@
// flex: 20%;
width: 16%;
border-right: 1px solid #26b5fb;
div{
white-space: nowrap;/*一行显示*/
overflow: hidden;/*超出部分隐藏*/
text-overflow: ellipsis;/*用...代替超出部分*/
width: 100%;
height:46px;
line-height:46px;
letter-spacing: 3px;
font-size: 20px;
color: white;
// padding-left: 5px;
cursor: pointer;
span{
margin-left: 6px;
}
}
div:hover{
background-color: #e6963c;
}
.divselected{
background-color: #e88108;
}
}
.rightbox{
width: 100%;
@ -73,14 +96,14 @@
border-bottom: 1px solid #26b5fb;
width: 100%;
}
tr:nth-child(2){
margin-top: 8px;
}
}
}
}
.size{
width: 100%;
height: 100%;
}
.openDiv{
z-index: 3000;
width:600px;
@ -94,12 +117,16 @@
background: #063659;
opacity: 0.9;
border: 1px solid #26b5fb;
div{
float: left;
}
.top{
width: 100%;
height: 32px;
line-height: 32px;
text-align: center;
border-bottom: 1px solid #26b5fb;
border-bottom: 1px solid #ff4949;
font-size: 18px;
position: relative;
h4{
color: red;
@ -117,10 +144,11 @@
}
.details{
width: 100%;
height: 100%;
height: 468px;
display: flex;
.left{
height: 100%;
width: 24%;
flex: 2;
border-right:1px solid #26b5fb;
div{
width: 100%;
@ -135,7 +163,29 @@
background: #041f33;
}
}
.right{
flex: 8;
height: 468px;
color: white;
letter-spacing: 2px;
padding: 5px 8px;
}
}
}
}
}
}
.size{
width: 100%;
height: 100%;
position: relative;
z-index: 100;
}
#selectedBox{
width: 120px;
height: 20px;
position: absolute;
z-index: 101;
left: 6px;
top: 0;
}

269
src/app/ui/dangerous/dangerous.component.ts

@ -12,50 +12,139 @@ export class DangerousComponent implements OnInit {
ngOnInit(): void {
}
//地图范围圆圈
circle = new AMap.Circle({
center: [109.656839, 23.098685],
radius: 500, //半径
strokeOpacity: 1,
fillOpacity: 0.4,
strokeStyle: 'dashed',
strokeDasharray: [10, 10],
// 线样式还支持 'dashed'
fillColor: '#1791fc',
zIndex: 50,
})
selectedIndex = 0
typedata = [
{name:"爆炸品",details:[
{name:"点火绳",englishname:"Det donating Cords",molecularformula:"无",type:"点火绳"},
{name:"乙二硝胺",englishname:"Ethylene Dinitramine",molecularformula:"(CH2NHNO2)2",type:"炸药及爆炸性药品"},
{name:"导爆锁",englishname:"Detonating Cords",molecularformula:"无",type:"起爆器材"}
]},
{name:"气体",details:[
{name:"乙炔",englishname:"Acetylene",molecularformula:"C2H2",type:"易燃气体"},
{name:"二氟氯甲烷",englishname:"Chlorodifluoromethane",molecularformula:"CHCF2",type:"非易燃无毒气体"},
{name:"二氧化硫",englishname:"Sulfur die oxIde",molecularformula:"SO2",type:"毒性气体"}
]},
{name:"易燃液体",details:[
{name:"2-乙基-1-丁烯",englishname:"2-Ethyl-1-butene",molecularformula:"CH3CH2(C2Hb)CCH2",type:"低闪点液体",content:[
{data:"2-乙基-1-丁烯"},
{data:"无色液体,不溶于水,能溶于乙醇丙酮和乙醚。相对密度:0.69(20℃) ,沸点:62℃ ,闪点:<-20℃, 自燃点:315℃"},
{data:`易燃,遇热、明火、强氧化剂,均有引起燃烧爆炸的危险。</br>其蒸气能与空气形成爆炸性混合物,遇火星易爆炸。`},
{data:"泡沫、二氧化碳、干粉、1211。"},
{data:"储存于阴凉通风仓间内,仓温不超过30℃,远离火种、热源,防止阳光直射。应与硝酸等氧化剂分仓间储存。不宜久储,以防聚合变质。搬运时应轻装轻卸,防止包装破损。"},
]},
{name:"2-乙基丁醛",englishname:"Diethyl Acetaldehyde",molecularformula:"C212 CHCHO",type:"中闪点液体",content:[
{data:"2-乙基丁醛"},
{data:`无色液体,不溶于水。能与乙醇、乙燃醚混溶。
相对密度:0.8164(20)
:-89
沸点:116.8
闪点:21.1(
爆炸极限:1.2%~7.7%
蒸气压:1.827kPa(20)`},
{data:`遇明火、高温、氧化剂,有引起燃烧爆
`},
{data:`泡沫、干粉、二氧化碳、砂土。`},
{data:`包装要密封。储存于阴凉通风
,,30,
,
,
,`},
]},
{name:"乙二醇一乙醚",englishname:"Ethylene Glycol Monoethyl Ether",molecularformula:"CH2OHCH2OC2H5",type:"高闪点液体",content:[
{data:`乙二醇一乙醚`},
{data:`无色液体,几无气味。能与水和醇等
,
2.0×10-4
相对密度:0.9360(15)
:-70
沸点:135.1
闪点:43
自燃点:235
爆炸极限:1.8%~14%
蒸气压:506.6Pa(20)`},
{data:`遇明火、高温或氧化剂,有发生燃烧
`},
{data:`泡沫、二氧化碳、砂土、干粉。`},
{data:`储存于阴凉通风仓间内,远离火
,
,`},
]}
]},
{name:"易燃固体",details:[
{name:"N,N-二亚硝基五亚甲基四胺",englishname:"N,N- Dinitrosopentamethylene",molecularformula:"(CH2)(NO)2N",type:"一级易燃固体",content:[
{data:`N,N-二亚硝基五亚甲基四胺`},
{data:`淡黄色粉末或砂粒状固体。<span style="color: #ff6600;" >易燃,有毒</span>。易溶于丙酮,略溶于醇,微溶于氯仿,不溶于乙醚及水。<span style="color: #ff6600;" >温度≥199℃时分解,与酸或酸雾接触,将迅速起火燃烧。</span>
相对密度:1.4~1.4
熔点:200()`},
{data:`遇高温、明火或与酸(无机酸、有机酸)接触,容易引起剧烈燃烧。与氧化剂混和,能成为爆炸性混合物`},
{data:"水、砂土。"},
{data:"储存于阴凉通风干燥的库房内。远离火种及热源。严禁与无机酸、有机酸、碱性物质、氧化剂混储混运。要经常检查同库混放物质观其性能是否抵触。储存期最长不超过6个月(自出厂日起)。搬运时应轻装轻卸,防止摩擦、撞击引起燃烧"},
]},
{name:"2,4-二亚硝基间苯二酚",englishname:"2,4- Dinitrosores",molecularformula:"C6H2(OH)2(NO)2",type:"二级易燃固体",content:[
{data:`2,4-二亚硝基间苯二酚`},
{data:`从50%乙醇中析出者,呈黄褐色叶片
<span style="color: #ff6600;" >,</span>,绿,1,
,162~163
熔点:168
自燃点:115`},
{data:`受热或与氧化剂接触,有燃烧爆炸的
`},
{data:`砂土、二氧化碳、雾状水。`},
{data:`储存于阴凉通风仓间内。最高仓温不宜超过30℃。远离火种及热源。应与氧化剂分仓间存放,与金属粉末及酸类隔离堆放。搬运时应轻装轻卸,防止猛撞引起爆炸。`},
]},
{name:"乙基膦",englishname:"Ethylphosphine",molecularformula:"C2H5PH2",type:"一级易于自燃物质",content:[
{data:`乙基膦`},
{data:`无色液体。遇水分解。
:<1
沸点:25`},
{data:`在空气中能自燃,接触溴、氯和发烟
`},
{data:`干砂、干粉。禁止用水、泡沫`},
{data:`储存于阴凉干燥仓间内。<span style="color: #ff6600;" >最高仓温不超过20℃。</span>包装必须完整、密封,防止与空气接触。堆放时应与卤素、酸类、潮解性物质、氧化剂分开。远离火种、热源。搬运时轻装轻卸,保持包装完整。`},
]}
]},
{name:"氧化物和有机过氧化物",details:[
{name:"三氟化溴",englishname:"Bromine Trifluoride",molecularformula:"BrF3",type:"一级氧化性物质"},
{name:"三氧化铬(无水)",englishname:"Chromic Anhydride",molecularformula:"CrO3",type:"二级氧化性物质"},
{name:"2,5-二甲基-2,5-双",englishname:"2,5- Dimethyl-2",molecularformula:"C16H30O4",type:"有机过氧化物"}
]},
{name:"毒性物质",details:[
{name:"二氧化硒",englishname:"Selenium dioxide",molecularformula:"SeO2",type:"一级无机毒性物质"},
{name:"一氯乙醛",englishname:"Chloroacetaldehyde",molecularformula:"C2H3OCl",type:"一级有机毒性物质"},
{name:"一氧化铅",englishname:"Lead Oxide",molecularformula:"PbO",type:"二级无机毒性物质"}
]},
{name:"化学毒剂",details:[
{name:"二氧二甲胺基氰磷酸乙酯化硒",englishname:"Tabun",molecularformula:"(CH3)2 NPOCNO2H5O",type:"化学毒剂"}
]},
{name:"生物战剂",details:[
{name:"炭疽杆菌",englishname:"Bacillus Anthracis",molecularformula:"无",type:"生物战剂"}
]},
{name:"杂项危险物质",details:[
{name:"乙二醇",englishname:"Ethylene Glycol",molecularformula:"HOCH2CH2OH",type:"杂项危险物质"}
]},
]
num = 0
clickNode(num){
this.num = num
}
detaildata = this.typedata[0].details
selectedDiv(index,item){
this.selectedIndex = index
this.detaildata = item.details
}
//类型选择
istype = true//默认选择危化品类型
typeSelect(type){
if(type ==1 ){
this.istype = true
if(type == 1){
this.istype = true
}else{
this.istype = false
setTimeout(() => {
var satellite = new AMap.TileLayer.Satellite();
var roadNet = new AMap.TileLayer.RoadNet();
// 创建一个 icon
var viaMarker = new AMap.Marker({
position: new AMap.LngLat(116.38,39.92),
// 将一张图片的地址设置为 icon
icon: '//a.amap.com/jsapi_demos/static/demo-center/icons/dir-via-marker.png',
// 设置了 icon 以后,设置 icon 的偏移量,以 icon 的 [center bottom] 为原点
offset: new AMap.Pixel(-13, -30)
});
this.map = new AMap.Map('size',{
center: [109.656839, 23.098685],//中心点坐标
zoom: 16,
layers:[
satellite,
// roadNet
]
});
this.circle.setMap(this.map)
this.map.add([viaMarker]);
// this.map.setFitView([ circle ])
}, 0);
}
}
@ -64,7 +153,107 @@ export class DangerousComponent implements OnInit {
closeDiv(){
this.isOpen = false
}
openDetails(){
detailNode = null
openDetails(item){
this.detailNode = item
this.isOpen = true
this.num = 0
}
}
@Component({
selector: 'app-gis',
templateUrl: './gis.html',
styleUrls: ['./dangerous.component.scss']
})
export class GisComponent implements OnInit {
constructor() { }
map:any //地图
ngOnInit(): void {
setTimeout(() => {
this.creatMap()
}, 0);
}
markerIcon = new AMap.Icon({
image:"//a.amap.com/jsapi_demos/static/demo-center/icons/poi-marker-default.png",
size: new AMap.Size(52, 52), //图标大小
imageSize: new AMap.Size(26,36)
})
//地图范围圆圈
circle = new AMap.Circle({
center: [109.660144, 23.100172],
radius: 500, //半径
strokeOpacity: 1,
fillOpacity: 0.4,
strokeStyle: 'dashed',
strokeDasharray: [10, 10],
// 线样式还支持 'dashed'
fillColor: '#1791fc',
zIndex: 50,
})
creatMap(){
var satellite = new AMap.TileLayer.Satellite();
var roadNet = new AMap.TileLayer.RoadNet();
// 创建一个 icon
var startIcon = new AMap.Icon({
// 图标尺寸
// size: new AMap.Size(150, 60),
// 图标的取图地址
image: '../../../assets/images/fire.png',
// // 图标所用图片大小
imageSize: new AMap.Size(60, 60),
// // 图标取图偏移量
// imageOffset: new AMap.Pixel(-9, -3)
});
var viaMarker = new AMap.Marker({
position: new AMap.LngLat(109.660144, 23.100172),
icon: startIcon,
offset: new AMap.Pixel(-20, -30)
});
let marker1 = new AMap.Marker({
icon: this.markerIcon,
position: [109.644436,23.101842],
offset: new AMap.Pixel(-7, -34)
});
let marker2 = new AMap.Marker({
icon: this.markerIcon,
position: [109.666768,23.104276],
offset: new AMap.Pixel(0, -20)
});
let marker3 = new AMap.Marker({
icon: this.markerIcon,
position: [109.660118,23.095472],
offset: new AMap.Pixel(-13, -8)
});
this.map = new AMap.Map('size',{
center: [109.661536,23.098726],//中心点坐标
zoom: 15.8,
layers:[
satellite,
roadNet
]
});
this.circle.setMap(this.map);//增加范围圆圈
this.map.add([viaMarker]);//火源标点
marker1.setMap(this.map);
marker2.setMap(this.map);
marker3.setMap(this.map);
}
//范围选择
rangevalue = 500
rangeSelect(e){
this.circle.setRadius(Number(this.rangevalue))
this.circle.setMap(this.map);//增加范围圆圈
}
}

11
src/app/ui/dangerous/gis.html

@ -0,0 +1,11 @@
<div style="width: 100%;height: 100%;position: relative;">
<div id="size" class="size">
</div>
<div id="selectedBox" class="selectedBox">
<select (change)="rangeSelect($event)" [(ngModel)]="rangevalue">
<option value="500">500米</option>
<option value="1000">1000米</option>
</select>
</div>
</div>

27
src/app/ui/disposal-node/disposal-node.component.html

@ -12,12 +12,35 @@
<div id="zuzhi" class="bigeditdeletebtn" (click)='xianshi(4)' ngClass="buildingbtnchecked">
<span (click)='this.chooseBiaoti=4'>组织指挥要点</span>
</div>
<div class="bigTalkBox" style="position: absolute;right: 26px;">
<mat-icon class="titleIcon" (click)="openTalkDiv()">volume_up</mat-icon>
<div class="talkBox" *ngIf="isOpenTalk">
<div class="btndiv">
<div>泵房</div>
<div>控制室</div>
</div>
<div class="bottomDiv">
<div>
<mat-icon>settings_voice</mat-icon>
</div>
<div>
按住说话
</div>
<div>
<mat-icon>search</mat-icon>
</div>
</div>
</div>
</div>
</div>
<!--中间文字-->
<div class="wenzi" id="aaa">
<div class="scrollbar"></div>
</div>
<div style="width: 100%;">
<div style="width: 100%;position: absolute;bottom: 30px;right: 20px;">
<button class="button" style="float: right;margin-right: 30px;">分享</button>
</div>
</div>

73
src/app/ui/disposal-node/disposal-node.component.scss

@ -13,12 +13,12 @@
align-items:center;
min-height: 40px;
box-sizing: border-box;
margin: 3px 0;
margin: 0 0;
.bigeditdeletebtn{
border:1px solid #0E79A9;
margin-right: 0px;
height: 80%;
height: 100%;
display: flex;
flex-direction: column;
// align-items:center;/*由于flex-direction: column,因此align-items代表的是水平方向*/
@ -37,10 +37,74 @@
cursor: pointer;
//background-image: url("../../../assets/images/标签经过.png") ;
}
.bigTalkBox{
user-select: none;
.titleIcon{
font-size: 33px;
vertical-align: sub;
color: white;
}
.talkBox{
width: 309px;
height: 326px;
border: 1px solid #30bbec;
background-color: #013a64;
opacity: .9 ;
position: absolute;
top: 32px;
right:4px;
z-index: 2000;
.btndiv{
div{
border-radius: 18px;
width: 70px;
height: 30px;
text-align: center;
line-height: 30px;
display: inline-block;
font-size: 13px;
color: white;
cursor: pointer;
}
div:nth-child(1){
background-color: #fe9400;
margin: 10px;
}
div:nth-child(2){
background-color: #f95e5a;
}
}
.bottomDiv{
position: absolute;
bottom:6px;
width: 100%;
height: 32px;
line-height: 32px;
display: flex;
color: white;
text-align: center;
div:nth-child(1){
flex: 1;
}
div:nth-child(2){
flex: 6;
color: #409eff;
background: url('../../../assets/images/输入框.png');
background-size: 100% 100%;
}
div:nth-child(3){
flex: 1;
}
}
}
}
}
//中间文字区域
.wenzi{
border-top:1px solid #30bbec;
overflow:auto;
height: 85%;
width: 100%;
@ -48,6 +112,9 @@
.h3{
color: #CC5D13;
}
font-size: 20px;
.scrollbar{
width: 30px;
height: 300px;

16
src/app/ui/disposal-node/disposal-node.component.ts

@ -21,7 +21,11 @@ export class DisposalNodeComponent implements OnInit {
}
checkedBuildingIndex:number = -1
chooseBiaoti=1
//打开说话框
isOpenTalk = false
openTalkDiv(){
this.isOpenTalk = !this.isOpenTalk
}
//鼠标移入边框变颜色
yiru(yirunum){
var tedian=document.getElementById(yirunum)
@ -45,8 +49,8 @@ export class DisposalNodeComponent implements OnInit {
tedian.style.border="1px solid #0E79A9"
zhuyi.style.border="1px solid #0E79A9"
chuzhi.style.border="1px solid #0E79A9"
chuzhiYuanze+=`<h3 style="color: #CC5D13">一、处置原则</h3>`;
chuzhiYuanze+='<span style="color: #FFFFFF">(一)灾情处置应坚持“</span>'
chuzhiYuanze+=`<h3 style="color: #CC5D13; padding-top:30px">一、处置原则</h3>`;
chuzhiYuanze+='<span style="color: #FFFFFF ">(一)灾情处置应坚持“</span>'
chuzhiYuanze+='<span style="color: #F95E5A">救人第一、科学施救</span>'
chuzhiYuanze+='<span style="color: #FFFFFF">”的原则,严禁在不熟悉情况时擅自行动,严禁冒险蛮干。</br></span>'
chuzhiYuanze+='<span style="color: #FFFFFF">(二)现场情况基本清楚,无爆炸等次生灾害风险,灾情易于辨识研判,在技术人员指导下,果断下达指令开展灭火救援行动。</br>'
@ -67,7 +71,7 @@ export class DisposalNodeComponent implements OnInit {
tedian.style.border="1px solid #30BBEC"
zhuyi.style.border="1px solid #0E79A9"
chuzhi.style.border="1px solid #0E79A9"
chuzhiYuanze+='<span style="color: #FFFFFF">(1) 爆炸引起燃烧。油罐发生爆炸后,随即易形成稳定燃烧。爆炸后,从罐顶或裂口处流出的油品或因罐体移位流出的油品,易造成地面流淌性燃烧。</br>'
chuzhiYuanze+='</br><span style="color: #FFFFFF; ">(1) 爆炸引起燃烧。油罐发生爆炸后,随即易形成稳定燃烧。爆炸后,从罐顶或裂口处流出的油品或因罐体移位流出的油品,易造成地面流淌性燃烧。</br>'
chuzhiYuanze+='(2) 燃烧引起爆炸。在形成稳定燃烧的油罐的邻近油罐,在热辐射的作用下易发生爆炸,扩大火势。</br>'
chuzhiYuanze+='(3) 火焰高,辐射热强。爆炸后在油罐破裂位置形成的稳定燃烧,其火焰高达几十米,并对其四周产生强烈的热辐射。</br>'
chuzhiYuanze+='(4) 易形成沸溢与喷溅。由于重质油品具有“热波特性”,对含有一定水分或有水垫层的重质油品储罐发生火灾后,如果不能及时进行冷却控制,在其“热波特性”的作用下就会使油品内的乳化水或油层下的水垫层产生过热蒸汽,而导致发生油品的沸溢或喷溅现象。</br>'
@ -78,7 +82,7 @@ export class DisposalNodeComponent implements OnInit {
tedian.style.border="1px solid #0E79A9"
zhuyi.style.border="1px solid #30BBEC"
chuzhi.style.border="1px solid #0E79A9"
chuzhiYuanze+='<span style="color: #FFFFFF">1、油罐火灾的辐射热强,参战人员应配有防高温、防辐射、防毒的防护装备。</br>'
chuzhiYuanze+='</br><span style="color: #FFFFFF; padding-top:20px">1、油罐火灾的辐射热强,参战人员应配有防高温、防辐射、防毒的防护装备。</br>'
chuzhiYuanze+='2、正确选择停车位置。消防车尽量停在上风或侧上风向,与燃烧油罐保持一定的安全距离。扑救重质油罐火灾时,消防车头应背向油罐,以备紧急撤离。作战行动中的部分车辆动画加上文字配音说明</br>'
chuzhiYuanze+='3、注意观察火场情况变化,及时发现沸溢、喷溅征兆。</br>'
chuzhiYuanze+='4、充分冷却,防止复燃。燃烧罐的火势被扑灭后,要继续对其实施冷却,直至使罐内油品温度降到燃点以下为止。设有保温层的原油罐可不予以冷却。轻质油品罐不会形成高温层,冷却的重点是液面以上的罐壁。救活的图片加上文字配音说明。</br>'
@ -95,7 +99,7 @@ export class DisposalNodeComponent implements OnInit {
tedian.style.border="1px solid #0E79A9"
zhuyi.style.border="1px solid #0E79A9"
chuzhi.style.border="1px solid #30BBEC"
chuzhiYuanze+='<h3 style="color: #CC5D13">1、安全防护</h3>'
chuzhiYuanze+='<h3 style="color: #CC5D13; padding-top:30px">1、安全防护</h3>'
chuzhiYuanze+='<span style="color: #FFFFFF">①应综合考虑风力风向、工艺流程、地形地势、封闭管井等因素,</span>'
chuzhiYuanze+='<span style="color: #F95E5A">科学选择车辆站位和阵地设置;</span>'
chuzhiYuanze+='<span style="color: #FFFFFF">②科学设置内、外观察哨,通过单位DCS系统设内观察哨,重点监测着火罐及周边邻近罐的介质、压力、温度、液位以及预警等级;通过在外部设观察哨,实时观察燃烧烟雾、火焰以及罐体外形变化、颤动声响等,确保整个作战行动安全可控;</br>'

7469
src/app/ui/plan-assistance/plan-assistance.component.ts

File diff suppressed because it is too large Load Diff

8
src/app/ui/plan/collection-tools.component.html

@ -225,17 +225,17 @@
<!-- 消防列表树写在这里 -->
<mat-tree [dataSource]="dataSource" [treeControl]="treeControl">
<mat-tree-node cdkDrag cdkDragDisabled="false" [ngClass]="{'isLookPattern': !node.isLookPattern}" *matTreeNodeDef="let node;" matTreeNodePadding cdkTreeNodePaddingIndent='26' (click)="clickTreeNode(node)" class="treeNode">
<mat-tree-node cdkDrag cdkDragDisabled="false" [ngClass]="{'isLookPattern': !node.isLookPattern}" *matTreeNodeDef="let node;" matTreeNodePadding cdkTreeNodePaddingIndent='26' (click)="clickTreeNode(node,$event)" class="treeNode">
<button mat-icon-button disabled></button>
<span title="{{node.name}}" [ngClass]="{'treeText': !node.isTemplate}">
{{node.name}}
</span>
<span *ngIf="node.isTemplate">({{node.children.length}})</span>
<span class="isLookCss" (click)="clickLookItem(node)"><mat-icon [ngClass]="{'icongray': node.isLook == false}">visibility</mat-icon></span>
<span class="isLookCss" (click)="clickLookItem(node,$event)"><mat-icon [ngClass]="{'icongray': node.isLook == false}">visibility</mat-icon></span>
</mat-tree-node>
<mat-tree-node cdkDrag cdkDragDisabled="false" [ngClass]="{'isLookPattern': !node.isLookPattern}" *matTreeNodeDef="let node;when: hasChild" matTreeNodePadding (click)="clickTreeNode(node)"class="treeNode" >
<mat-tree-node cdkDrag cdkDragDisabled="false" [ngClass]="{'isLookPattern': !node.isLookPattern}" *matTreeNodeDef="let node;when: hasChild" matTreeNodePadding (click)="clickTreeNode(node,$event)"class="treeNode" >
<button mat-icon-button
matTreeNodeToggle
[attr.aria-label]="'toggle ' + node.name">
@ -247,7 +247,7 @@
{{node.name}}
</span>
<span *ngIf="node.isTemplate && node.isNewElement">({{node.children.length}})</span>
<span class="isLookCss" (click)="clickLookItem(node)"><mat-icon [ngClass]="{'icongray': node.isLook == false}">visibility</mat-icon></span>
<span class="isLookCss" (click)="clickLookItem(node,$event)"><mat-icon [ngClass]="{'icongray': node.isLook == false}">visibility</mat-icon></span>
</mat-tree-node>
</mat-tree>

3
src/app/ui/plan/collection-tools.component.scss

@ -148,7 +148,7 @@
flex-direction: column;
margin-left: 0px;
transition: margin-left 0.5s;
min-width: 235px;
// min-width: 235px;
border: 1px solid #30bbec;
width: 235px;
left: 0;
@ -361,6 +361,7 @@
.isLookCss{
position: absolute;
right: 6px;
z-index: 1000;
}
}
.mat-tree{

25
src/app/ui/plan/collection-tools.component.ts

@ -557,7 +557,7 @@ export class planComponent implements OnInit {
}
//点击树节点
clickTreeNode(node){
clickTreeNode(node,e){
if(this.canvasData.originalcompanyBuildingData.data[node.id]){
this.setAssetsProperty(this.canvasData.originalcompanyBuildingData.data[node.id])
}else if(this.canvasData.originaleveryStoreyData.data[node.id]){
@ -583,8 +583,8 @@ export class planComponent implements OnInit {
}
//点击数节点的显示隐藏icon
clickLookItem(node){
clickLookItem(node,e){
// e.stopPropation()
//修改真实素材islook属性
for(let key in this.storeyData.data){
if(key == node.id){
@ -615,8 +615,25 @@ export class planComponent implements OnInit {
     }
const nodes = this.treeControl.dataNodes;
const expandNodes = [];
nodes.forEach((item) => {
if(item.expandable && this.treeControl.isExpanded(item)){
expandNodes.push(item.id);
}
});
this.dataSource.data = [...this.dataSource.data]
this.treeControl.expandAll()
let newNodes = this.treeControl.dataNodes;
newNodes = newNodes.filter(n => {
return expandNodes.indexOf(n.id) >= 0;
});
newNodes.forEach(item => {
this.treeControl.expand(item);
});
//canvas上的素材显隐
let iconVisibleArr:any = []

6
src/app/ui/ui.module.ts

@ -48,7 +48,7 @@ import { MatFormFieldModule } from '@angular/material/form-field';
import { MatPaginatorIntl } from '@angular/material/paginator';
import { PersonaldataComponent } from '../pages/personaldata/personaldata.component';
import { ChangepasswordComponent } from './changepassword/changepassword.component';
import { IsnoPipe } from '../pipes/boolean.pipe';
import { IsnoPipe, SafeHtmlPipe } from '../pipes/boolean.pipe';
import {ConfirmpswDirective} from './changepassword/equal-validator.directive'
import { TimePipe } from '../pipes/time.pipe';
import { FileUploadModule } from 'ng2-file-upload'
@ -58,14 +58,14 @@ import {leftFunctionalDomainComponent,editPlaneFigureComponent,addDisposalNodeCo
import { saveOneDialog, saveTwoDialog } from './collection-tools/save';
import { planComponent } from './plan/collection-tools.component';
import { DisposalNodeComponent } from './disposal-node/disposal-node.component';
import { DangerousComponent } from './dangerous/dangerous.component';
import { DangerousComponent, GisComponent } from './dangerous/dangerous.component';
import { SimilarPlansComponent } from './similar-plans/similar-plans.component';
import { RealCasesComponent } from './real-cases/real-cases.component';
import { PlanAssistanceComponent } from './plan-assistance/plan-assistance.component';
import { CountdownModule } from 'ngx-countdown';
@NgModule({
declarations: [UiComponent,PersonaldataComponent, ChangepasswordComponent,IsnoPipe,ConfirmpswDirective,TimePipe, CollectionToolsComponent,WorkingAreaComponent,CreateBuilding,EditBuilding,leftFunctionalDomainComponent,editPlaneFigureComponent,ViewDetails,saveOneDialog,saveTwoDialog,addDisposalNodeComponent,editDisposalNodeComponent, DisposalNodeComponent, DangerousComponent, SimilarPlansComponent, RealCasesComponent, PlanAssistanceComponent,planComponent],
declarations: [SafeHtmlPipe,GisComponent,UiComponent,PersonaldataComponent, ChangepasswordComponent,IsnoPipe,ConfirmpswDirective,TimePipe, CollectionToolsComponent,WorkingAreaComponent,CreateBuilding,EditBuilding,leftFunctionalDomainComponent,editPlaneFigureComponent,ViewDetails,saveOneDialog,saveTwoDialog,addDisposalNodeComponent,editDisposalNodeComponent, DisposalNodeComponent, DangerousComponent, SimilarPlansComponent, RealCasesComponent, PlanAssistanceComponent,planComponent],
imports: [
CommonModule,

31
src/app/working-area/working-area.component.ts

@ -120,6 +120,7 @@ export class WorkingAreaComponent extends EventEmitter implements OnInit, AfterV
// 是否登录
public verificationURL = '/ui/plan'; // 验证url地址是否为验证页面
count = 0;
isLogin() {
const token = sessionStorage.getItem('token'); // 判断 是否登录状态
if (token) {
@ -387,6 +388,7 @@ export class WorkingAreaComponent extends EventEmitter implements OnInit, AfterV
const floorData = this.canvasData.originaleveryStoreyData.data;
const buildingData = this.canvasData.originalcompanyBuildingData.data;
const floor = this.canvasData.selectStorey;
console.log(JSON.stringify(buildingData));
// // key=>属性名 data[key]=>属性值
Object.keys(floorData).forEach((key) => {
switch (floorData[key].InteractiveMode) {
@ -472,9 +474,6 @@ export class WorkingAreaComponent extends EventEmitter implements OnInit, AfterV
IsFromBuilding: false,
GameMode: 2
};
const tempCar = new Car(tempData, this);
tempCar.setParent(this.app.stage);
tempCar.position.set(25, 25);
const tempData2 = {
TemplateId: null,
@ -519,15 +518,27 @@ export class WorkingAreaComponent extends EventEmitter implements OnInit, AfterV
IsFromBuilding: false,
GameMode: 2
};
const tempCar2 = new Car(tempData2, this);
tempCar2.setParent(this.app.stage);
tempCar2.position.set(25, 50);
// 开始绘制管线
this.beginPaintPipeline();
this.ShowCarIcon(tempData);
this.ShowCarIcon(tempData2);
this.ShowCarIcon(tempData);
this.ShowCarIcon(tempData2);
this.ShowCarIcon(tempData);
this.ShowCarIcon(tempData2);
// // 开始绘制管线
// this.beginPaintPipeline();
// this.beginPaintingArrows();
}
/**
*
* @param data
*/
public ShowCarIcon(data: any) {
this.count++;
const tempCar2 = new Car(data, this);
tempCar2.setParent(this.app.stage);
tempCar2.position.set(25, this.count * 25);
}
/**
*
* @param id ID

Loading…
Cancel
Save