diff --git a/src/app/ui/explain-textarea/explain-textarea.component.html b/src/app/ui/explain-textarea/explain-textarea.component.html
new file mode 100644
index 0000000..a56f26c
--- /dev/null
+++ b/src/app/ui/explain-textarea/explain-textarea.component.html
@@ -0,0 +1,14 @@
+
+
+ 说明:
+
+ {{explain}}
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/app/ui/explain-textarea/explain-textarea.component.scss b/src/app/ui/explain-textarea/explain-textarea.component.scss
new file mode 100644
index 0000000..fd5c13e
--- /dev/null
+++ b/src/app/ui/explain-textarea/explain-textarea.component.scss
@@ -0,0 +1,46 @@
+.box{
+ width: 100%;
+ height: 100%;
+ font-size: 0.146484rem;
+ font-family: Source Han Sans CN;
+ display: flex;
+ flex-direction: column;
+ .topbox{
+ margin: 0 auto;
+ width: 90%;
+ margin-top: 0.195313rem;
+ }
+ .textbox{
+ margin: 0 auto;
+ flex: 1;
+ width: 90%;
+ border-radius: 10px;
+ padding: 0.195313rem;
+ textarea{
+ font-family: Source Han Sans CN;
+ font-size: 0.146484rem;
+ border-radius: 10px;
+ background: #F4F5F9;
+ width: 100%;
+ height: 100%;
+ border: none;
+ box-sizing:border-box;
+ padding: 0.195313rem;
+ }
+ }
+ .btn{
+ div{
+ margin: 0 auto;
+ margin-bottom: 0.126953rem;
+ width: 0.78125rem;
+ height: 0.351563rem;
+ color: #fff;
+ text-align: center;
+ line-height: 0.351563rem;
+ background: linear-gradient(337deg, #FC7045 0%, #FF4923 100%);
+ opacity: 1;
+ border-radius: 0.292969rem;
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/src/app/ui/explain-textarea/explain-textarea.component.spec.ts b/src/app/ui/explain-textarea/explain-textarea.component.spec.ts
new file mode 100644
index 0000000..98fb40a
--- /dev/null
+++ b/src/app/ui/explain-textarea/explain-textarea.component.spec.ts
@@ -0,0 +1,25 @@
+import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { ExplainTextareaComponent } from './explain-textarea.component';
+
+describe('ExplainTextareaComponent', () => {
+ let component: ExplainTextareaComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async(() => {
+ TestBed.configureTestingModule({
+ declarations: [ ExplainTextareaComponent ]
+ })
+ .compileComponents();
+ }));
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(ExplainTextareaComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/app/ui/explain-textarea/explain-textarea.component.ts b/src/app/ui/explain-textarea/explain-textarea.component.ts
new file mode 100644
index 0000000..4f2e1fc
--- /dev/null
+++ b/src/app/ui/explain-textarea/explain-textarea.component.ts
@@ -0,0 +1,22 @@
+import { Component, Input, OnInit } from '@angular/core';
+
+@Component({
+ selector: 'app-explain-textarea',
+ templateUrl: './explain-textarea.component.html',
+ styleUrls: ['./explain-textarea.component.scss']
+})
+export class ExplainTextareaComponent implements OnInit {
+ @Input() explain:String
+ @Input() placeholder:String
+ @Input() index:String
+
+ textcontant:string
+ constructor() { }
+
+ ngOnInit(): void {
+ this.textcontant = localStorage.getItem(sessionStorage.getItem('companyId')+'text'+this.index) || ''
+ }
+ save(){
+ localStorage.setItem(sessionStorage.getItem('companyId')+'text'+this.index,this.textcontant)
+ }
+}
diff --git a/src/app/ui/photoofthescene2/photoofthescene.component.html b/src/app/ui/photoofthescene2/photoofthescene.component.html
new file mode 100644
index 0000000..1ac7e11
--- /dev/null
+++ b/src/app/ui/photoofthescene2/photoofthescene.component.html
@@ -0,0 +1,95 @@
+
+
+
+
+
+
+ 
+
+ 上传演练单位照片
+
+ 单位整体建筑或大门照片,要求照拍照时要求设置拍照日期
+
+
+
+
+
+
+ ![]()
+
+
+
+
+ |
+
+
+
+ 
+
+ 上传演练现场照片
+
+ 拍照时要求设置拍照日期
+
+
+
+
+
+
+ ![]()
+
+
+
+
+ |
+
+
+
+
+
+ 
+
+ 上传演练现场照片
+
+ 拍照时要求设置拍照日期
+
+
+
+
+
+
+ ![]()
+
+
+
+
+ |
+
+
+
+ 
+
+ 上传演练总结照片
+
+ 演练总结时的照片,照片要求能反映演练指挥员及演练全体人员,拍照时要求设置拍照日期
+
+
+
+
+
+
+ ![]()
+
+
+
+
+ |
+
+
\ No newline at end of file
diff --git a/src/app/ui/photoofthescene2/photoofthescene.component.scss b/src/app/ui/photoofthescene2/photoofthescene.component.scss
new file mode 100644
index 0000000..625135f
--- /dev/null
+++ b/src/app/ui/photoofthescene2/photoofthescene.component.scss
@@ -0,0 +1,40 @@
+table{
+ margin: 0 auto;
+ width: 85%;
+ height: 80%;
+ margin-top: 5%;
+ overflow-y: auto;
+ border-collapse: collapse;
+ td{
+ position: relative;
+ width: 50%;
+ height: 2.246094rem;
+ p{
+ font-size: 20px;
+ margin: 8px 0;
+ }
+ span{
+ font-size: 15px;
+ font-weight: 500;
+ color: gray;
+ }
+ input{
+ position: absolute;
+ width: 100%;
+ height: 2.246094rem;
+ left: 0;
+ top: 0;
+ opacity: 0;
+ }
+ .image{
+ height: 100%;
+ width: 2.919922rem;
+ }
+ .deleteicon{
+ position: absolute;
+ right: 0.058594rem;
+ top: 0.058594rem;
+ }
+ }
+}
+table,table tr th, table tr td { border:1px solid black;text-align: center; }
\ No newline at end of file
diff --git a/src/app/ui/photoofthescene2/photoofthescene.component.spec.ts b/src/app/ui/photoofthescene2/photoofthescene.component.spec.ts
new file mode 100644
index 0000000..b2b65fe
--- /dev/null
+++ b/src/app/ui/photoofthescene2/photoofthescene.component.spec.ts
@@ -0,0 +1,25 @@
+import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { PhotoofthesceneComponent } from './photoofthescene.component';
+
+describe('PhotoofthesceneComponent', () => {
+ let component: PhotoofthesceneComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async(() => {
+ TestBed.configureTestingModule({
+ declarations: [ PhotoofthesceneComponent ]
+ })
+ .compileComponents();
+ }));
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(PhotoofthesceneComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/app/ui/photoofthescene2/photoofthescene.component.ts b/src/app/ui/photoofthescene2/photoofthescene.component.ts
new file mode 100644
index 0000000..9379a9f
--- /dev/null
+++ b/src/app/ui/photoofthescene2/photoofthescene.component.ts
@@ -0,0 +1,180 @@
+import { HttpClient } from '@angular/common/http';
+import { Component, OnInit } from '@angular/core';
+import { MatSnackBar ,MatSnackBarConfig} from '@angular/material/snack-bar';
+import Viewer from 'viewerjs';
+@Component({
+ selector: 'app-photoofthescene2',
+ templateUrl: './photoofthescene.component.html',
+ styleUrls: ['./photoofthescene.component.scss']
+})
+export class PhotoofthesceneComponent2 implements OnInit {
+
+ constructor(private http: HttpClient,public snackBar: MatSnackBar) { }
+ gallery//viewerJs实例
+ isEditPattern = true
+ ngOnInit(): void {
+ setTimeout(() => {
+ if(document.getElementById('viewerjs1')){
+ this.gallery = new Viewer(document.getElementById('viewerjs1'),{
+ url: 'data-original'
+ });
+ }
+ if(document.getElementById('viewerjs2')){
+ this.gallery = new Viewer(document.getElementById('viewerjs2'),{
+ url: 'data-original'
+ });
+ }
+ if(document.getElementById('viewerjs3')){
+ this.gallery = new Viewer(document.getElementById('viewerjs3'),{
+ url: 'data-original'
+ });
+ }
+ if(document.getElementById('viewerjs4')){
+ this.gallery = new Viewer(document.getElementById('viewerjs4'),{
+ url: 'data-original'
+ });
+ }
+ }, 0);
+
+ if(localStorage.getItem("pattern")=="edit"){
+ this.isEditPattern = true
+ }else if(localStorage.getItem("pattern") == "look"){
+ this.isEditPattern = true
+ }
+ }
+
+ unitImg:any = localStorage.getItem(sessionStorage.getItem("companyId") + "1" + 'rehearsal') || ""
+ lingdaoImg:any = localStorage.getItem(sessionStorage.getItem("companyId") + "2" + 'rehearsal') || ""
+ peopleImg:any = localStorage.getItem(sessionStorage.getItem("companyId") + "3" + 'rehearsal') || ""
+ keysiteImg:any = localStorage.getItem(sessionStorage.getItem("companyId") + "4" + 'rehearsal') || ""
+
+ //删除照片
+ deleteimg(num){
+ var msg = "您真的确定要删除吗?";
+ if (confirm(msg)==true){
+ localStorage.removeItem(sessionStorage.getItem('companyId')+num)
+ if(num == "1"){
+ this.unitImg = ""
+ }
+ if(num == "2"){
+ this.lingdaoImg = ""
+ }
+ if(num == "3"){
+ this.peopleImg = ""
+ }
+ if(num == "4"){
+ this.keysiteImg = ""
+ }
+
+ }else{
+ return false;
+ }
+ }
+ //熟悉单位照片上传
+ file:any
+ filechange1(e,index){
+
+ this.file = e.target.files[0] || null //上传的文件
+ var reader = new FileReader();
+ reader.readAsDataURL(this.file);
+ var image:any = new Image();
+ reader.onload = function(){
+ image.src = reader.result
+ }
+ setTimeout(() => {
+ if(image.width>=4096 || image.height>=5000 ){
+ const config = new MatSnackBarConfig();
+ config.verticalPosition = 'top';
+ config.duration = 3000
+ this.snackBar.open('请选择分辨率小于4096*5000的图片','确定',config);
+ }else{
+ if(this.file){
+ this.startUploading(index)
+ }
+ }
+ }, 500);
+ }
+
+
+ // imgUrl:any //上传后的图片地址
+ // imgsrc:any //上传后的缩略图地址
+
+ //上传文件
+ startUploading(type) {
+ let file = this.file || null //获取上传的文件
+ let fileSize = file.size || null //上传文件的总大小
+ let shardSize = 5 * 1024 * 1024 //5MB一个分片
+
+ if (file && fileSize <= shardSize) { //上传文件<=5MB时
+
+
+
+ let formData = new FormData()
+ formData.append("file",file)
+ this.http.post(`/api/Objects/PlanPlatform/${sessionStorage.getItem('companyId')}`,formData).subscribe((data:any)=>{
+ let imgsrc = `/api/Objects/PlanPlatform/${data.objectName}?x-oss-process=image/resize,m_fill,h_170,w_299`
+ localStorage.setItem(sessionStorage.getItem("companyId") + type + 'rehearsal', imgsrc)
+ if(type == '1'){
+ this.unitImg = imgsrc
+ setTimeout(() => {
+ this.gallery = new Viewer(document.getElementById('viewerjs1'),{
+ url: 'data-original'
+ });
+ }, 0);
+ }
+ if(type == '2'){
+ this.lingdaoImg = imgsrc
+ setTimeout(() => {
+ this.gallery = new Viewer(document.getElementById('viewerjs2'),{
+ url: 'data-original'
+ });
+ }, 0);
+ }
+ if(type == '3'){
+ this.peopleImg = imgsrc
+ setTimeout(() => {
+ this.gallery = new Viewer(document.getElementById('viewerjs3'),{
+ url: 'data-original'
+ });
+ }, 0);
+ }
+ if(type == '4'){
+ this.keysiteImg = imgsrc
+ setTimeout(() => {
+ this.gallery = new Viewer(document.getElementById('viewerjs4'),{
+ url: 'data-original'
+ });
+ }, 0);
+ }
+
+
+
+ const config = new MatSnackBarConfig();
+ config.verticalPosition = 'top';
+ config.duration = 3000
+ this.snackBar.open('上传成功','确定',config);
+
+
+ })
+ } else if (file && fileSize >= shardSize) { //上传文件>5MB时,分块上传
+ const config = new MatSnackBarConfig();
+ config.verticalPosition = 'top';
+ config.duration = 3000
+ this.snackBar.open('请上传小于5M图片','确定',config);
+ // let data = { filename: file.name }
+ // this.http.post(`/api/NewMultipartUpload/PlanPlatform/${this.unitinfo.id}`, {}, { params: data }).subscribe((data: any) => { //初始化分段上传
+ // this.objectName = data.objectName
+ // this.uploadId = data.uploadId
+ // this.subsectionUploading()
+ // })
+ }
+ }
+ dialog(){
+ if(localStorage.getItem("pattern")=="look"){
+ const config = new MatSnackBarConfig();
+ config.verticalPosition = 'top';
+ config.duration = 3000
+ this.snackBar.open('查看模式无法上传','确定',config);
+ }
+ }
+}
diff --git a/src/app/ui/rehearsal-recordinfo/rehearsal-recordinfo.component.html b/src/app/ui/rehearsal-recordinfo/rehearsal-recordinfo.component.html
index 3625759..b70f518 100644
--- a/src/app/ui/rehearsal-recordinfo/rehearsal-recordinfo.component.html
+++ b/src/app/ui/rehearsal-recordinfo/rehearsal-recordinfo.component.html
@@ -9,52 +9,48 @@
-
+
-
-
+
-
-
+
-
-
+
-
-
+
-
+
-
+
-
+
-
-
-
+
+
+
diff --git a/src/app/ui/rehearsal-recordinfo/rehearsal-recordinfo.component.ts b/src/app/ui/rehearsal-recordinfo/rehearsal-recordinfo.component.ts
index e3120d7..6c77785 100644
--- a/src/app/ui/rehearsal-recordinfo/rehearsal-recordinfo.component.ts
+++ b/src/app/ui/rehearsal-recordinfo/rehearsal-recordinfo.component.ts
@@ -10,6 +10,27 @@ export class RehearsalRecordinfoComponent implements OnInit {
title:any = "演练记录信息"
constructor() { }
+ //灾情设定
+ situationexplain = "实情设定要求有灾情时间、地点、灾情范围和发展趋势、被困人员数量、消防设施损坏情况、灭火救援进程等,还可根据演练开展情况随机设置灾情况实情设定要求有灾情时间、地点、灾情范围和发展趋势、被困人员数量、消防设施损坏情况、灭火救援进程等,还可根据演练开展情况随机设置灾情"
+ situationplaceholder = "请输入灾情设定"
+ //组织指挥情况
+ organizationexplain = "支队演练组织指挥主要包括力量调集、信息收集、制订作战方案、部署作战任务、落实战勤保障等情况; 大中队演练组织指挥主要 包括部署作战任务等情况"
+ organizationplaceholder = "请输入组织指挥情况"
+ //作战行动情况
+ operationexplain = "主要包括火警受理、力量调派、灾情侦察、战斗展开、抢救人员、疏散物资、现场破拆、火场供水、火场排烟、现场通信等情况。通常一处战斗行动的描述主要包括作战人员、作战线路、作战技战术措施、作战任务、作战任务落实效果等"
+ operationplaceholder = "请输入作战行动情况"
+ //单位内部消防设施使用情况
+ firefightingequipmentexplain = "通常包括使用人员、使用方式方法、使用目的效果等"
+ firefightingequipmenplaceholder = "请输入单位内部消防设施使用情况"
+ //好的方面
+ goodexplain = "主要对接警调度、指挥决策、战斗部署、战术运用、协同作战、战勤保障、作战秩序、作战安全等方面存在问题进行归纳"
+ goodplaceholder = "请输入好的方面"
+ //存在问题及改进措施
+ problemexplain = "主要对接警调度、指挥决策、战斗部署、战术运用、协同作战、战勤保障、作战秩序、作战安全等方面存在问题进行归纳"
+ problemplaceholder = "请输入存在问题及改进措施"
+ //备注
+ remarkexplain = '1、时间填写到年-月-日-时;2、作战行动主要包括火警受理、力量调派、灾情侦察、战斗展开、抢救人员、疏散物资、现场破拆、火场供水、火场排烟、现场通信等情况;3、组织指挥主要包括力量调集、信息收集、制订作战方案、部署作战任务、指挥战斗行动、落实战勤保障等情况;4、演练要求有影像资料,并及时建档;5、各地可参照此卡,结合本地实际,制定演练记录卡'
+ remarkplaceholder = '请输入存在问题及改进措施'
ngOnInit(): void {
}
onCustom($event){
@@ -18,6 +39,5 @@ export class RehearsalRecordinfoComponent implements OnInit {
}
selectedtab(e){
sessionStorage.setItem("tabsindex",e.index)
- // console.log(e.index)
}
}
diff --git a/src/app/ui/ui.module.ts b/src/app/ui/ui.module.ts
index 727400c..9ecbebd 100644
--- a/src/app/ui/ui.module.ts
+++ b/src/app/ui/ui.module.ts
@@ -70,8 +70,10 @@ import { EditText, WaterRoadComponent } from './water-road/water-road.component'
import { KnowRouteComponent } from './know-route/know-route.component';
import { FindProblemComponent } from './find-problem/find-problem.component';
import { RehearsalRecordinfoComponent } from './rehearsal-recordinfo/rehearsal-recordinfo.component';
+import { ExplainTextareaComponent } from './explain-textarea/explain-textarea.component';
+import { PhotoofthesceneComponent2 } from './photoofthescene2/photoofthescene.component';
@NgModule({
- declarations: [UiComponent, FooterComponent, UserdataComponent, ChangepasswordComponent,IsnoPipe,ConfirmpswDirective,TimePipe,EditUser,CollectionToolsComponent,WorkingAreaComponent,CreateBuilding,EditBuilding,leftFunctionalDomainComponent,editPlaneFigureComponent,ViewDetails,saveOneDialog,saveTwoDialog,addDisposalNodeComponent,editDisposalNodeComponent,HomeComponent, AddSixFamiliarComponent, TitleComponent, SelectUnit, TrainingRecordinfoComponent,RouterGISComponent, PhotoofthesceneComponent, WaterRoadComponent,FindProblemComponent,KnowRouteComponent,EditText, RehearsalRecordinfoComponent],
+ declarations: [UiComponent, FooterComponent, UserdataComponent, ChangepasswordComponent,IsnoPipe,ConfirmpswDirective,TimePipe,EditUser,CollectionToolsComponent,WorkingAreaComponent,CreateBuilding,EditBuilding,leftFunctionalDomainComponent,editPlaneFigureComponent,ViewDetails,saveOneDialog,saveTwoDialog,addDisposalNodeComponent,editDisposalNodeComponent,HomeComponent, AddSixFamiliarComponent, TitleComponent, SelectUnit, TrainingRecordinfoComponent,RouterGISComponent, PhotoofthesceneComponent, WaterRoadComponent,FindProblemComponent,KnowRouteComponent,EditText, RehearsalRecordinfoComponent, ExplainTextareaComponent,PhotoofthesceneComponent2],
imports: [
CommonModule,