From 0dc8f985b6dad238c4d525919634d22e32f1e1d8 Mon Sep 17 00:00:00 2001 From: SHAOJIAHAO <55341701@qq.com> Date: Tue, 19 Jan 2021 15:34:04 +0800 Subject: [PATCH] =?UTF-8?q?[=E6=96=B0=E5=A2=9E]=E6=B6=88=E9=98=B2=E5=8A=9B?= =?UTF-8?q?=E9=87=8F=E9=87=87=E9=9B=86=E5=9F=BA=E7=A1=80=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fire-force/fire-force.component.html | 75 +++++- .../fire-force/fire-force.component.scss | 227 ++++++++++++++-- .../fire-force/fire-force.component.ts | 247 ++++++++++++++++-- src/assets/images/pdf.jpg | Bin 0 -> 4679 bytes src/assets/images/txt.jpg | Bin 0 -> 4564 bytes src/assets/images/vedio.jpg | Bin 0 -> 4808 bytes src/assets/images/word.jpg | Bin 0 -> 4964 bytes 7 files changed, 506 insertions(+), 43 deletions(-) create mode 100644 src/assets/images/pdf.jpg create mode 100644 src/assets/images/txt.jpg create mode 100644 src/assets/images/vedio.jpg create mode 100644 src/assets/images/word.jpg diff --git a/src/app/data-collection/fire-force/fire-force.component.html b/src/app/data-collection/fire-force/fire-force.component.html index 2a96222..bebd0d4 100644 --- a/src/app/data-collection/fire-force/fire-force.component.html +++ b/src/app/data-collection/fire-force/fire-force.component.html @@ -6,6 +6,7 @@ 列表过滤
+
@@ -36,7 +37,7 @@ 消防队 完整度 -
+
@@ -44,7 +45,11 @@ {{node.name}}
- + + {{node.fireForceDetailInfo ? accMul(node.fireForceDetailInfo.integrityScore.toFixed(3),100,1) : 0}}% + +
+
highlight_off
@@ -60,11 +65,30 @@ {{node.name}}
- + + {{node.fireForceDetailInfo ? accMul(node.fireForceDetailInfo.integrityScore.toFixed(3),100,1) : 0}}% + +
+
highlight_off
-
+ +
+
+
@@ -82,6 +106,10 @@
+
+ + 上传中... +
@@ -95,10 +123,16 @@
- +
+ + + + +
+ save保存 open_in_browser提交审核
@@ -513,8 +547,31 @@
-->
- 相关资料 +
+ highlight_off +
+ + + + + +
+ {{item.fileName}} + + +
+ + + \ No newline at end of file diff --git a/src/app/data-collection/fire-force/fire-force.component.scss b/src/app/data-collection/fire-force/fire-force.component.scss index 5029bf4..e56576d 100644 --- a/src/app/data-collection/fire-force/fire-force.component.scss +++ b/src/app/data-collection/fire-force/fire-force.component.scss @@ -91,8 +91,20 @@ .integrity{ width: 100px; height: 16px; - background-color: green; - + position: relative; + background-color: #F2F4F6; + .integrityNum{ + position: absolute; + left: 50%; + top: 50%; + transform: translate(-50%, -50%); + color: black; + font-size: 13px; + cursor: default; + } + .integrityColorDiv{ + height: 100%; + } } .mat-tree-node{ cursor: pointer; @@ -119,6 +131,71 @@ } } } + .fireForceList{ + flex: 1; + overflow-y: auto; + li{ + cursor: pointer; + width: 100%; + height: 36px; + line-height: 36px; + display: flex; + align-items: center; + font-size: 14px; + div{ + float: left; + box-sizing: border-box; + } + .name{ + text-align: left; + width: 60%; + padding-left: 22px; + white-space:nowrap; + overflow:hidden; + text-overflow:ellipsis; + } + .integrity{ + height: 58%; + width: 32%; + position: relative; + background-color: #F2F4F6; + .integrityNum{ + position: absolute; + left: 50%; + top: 50%; + transform: translate(-50%, -50%); + color: black; + font-size: 13px; + cursor: default; + } + .integrityColorDiv{ + height: 100%; + } + } + .deletebtn{ + flex: 1; + text-align: center; + mat-icon{ + width: 20px; + height: 20px; + cursor: pointer; + font-size: 20px; + vertical-align: text-top; + color: rgba(49, 46, 46, 0.144); + } + mat-icon:hover{ + color: #000; + } + } + } + li:hover{ + background-color: #b3d3ee; + } + .selectedLi{ + background-color: #b3d3ee; + } + + } .paginator{ height: 56px; width: 100%; @@ -193,9 +270,12 @@ .detailsbox{ width: 100%; height:500px; + position: relative; .tabsbox{ width: 100%; height: 40px; + overflow: hidden; + overflow-x: auto; line-height: 40px; display: flex; justify-content: space-between; @@ -217,7 +297,45 @@ } } .btnbox{ + display: flex; + align-items: center; + .uploadAttachment{ + display: inline-block; + margin-right: 20px; + width: 120px; + text-align: center; + height: 28px; + line-height: 28px; + position: relative; + button{ + width: 100%; + height: 28px; + line-height: 28px; + mat-icon{ + transform: rotate(25deg); + font-size: 20px; + width: 20px; + height: 20px; + } + } + .a-upload{ + display: inline-block; + position: absolute; + left: 0; + top: 0; + display: inline-block; + width: 100%; + height: 100%; + opacity: 0; + input{ + width: 100%; + height: 100%; + cursor: pointer; + } + } + } span{ + display: inline-block; cursor: pointer; color: #2196F3; mat-icon{ @@ -233,22 +351,7 @@ .submitAudit{ margin: 0 30px; } - .uploadAttachment{ - margin-right: 20px; - width: 120px; - text-align: center; - height: 28px; - line-height: 28px; - mat-icon{ - transform: rotate(25deg); - font-size: 20px; - width: 20px; - height: 20px; - } - mat-icon{ - padding: 0 8px; - } - } + } } .contant{ @@ -306,6 +409,94 @@ .smallwidth{ width: 30%; } + // 相关资料 + .fileDivBox{ + position: relative; + float: left; + border: 1px solid #EBEBEB; + width: 160px; + height: 162px; + box-sizing: border-box; + padding: 16px 16px 0; + display: flex; + flex-direction: column; + margin: 12px; + align-items: center; + cursor: pointer; + .imgbox{ + width: 134px; + height: 110px; + display: flex; + justify-content: center; + align-items: center; + .thumbnailImg{ + width: 134px; + height: 110px; + } + } + + span{ + width: 100%; + text-align: center; + margin-top: 5px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + color: gray; + } + .deleteFile{ + position: absolute; + right: 0; + top: 0; + width: 18px; + height: 18px; + font-size: 18px; + display: none; + } + .btn{ + position: absolute; + height: 30px; + line-height: 30px; + font-size: 14px; + display: none; + } + .btn1{ + top: 35px; + } + .btn2{ + top: 75px; + } + } + .fileDivBox:hover{ + border: 1px solid #000; + .deleteFile{ + display: block; + + } + .deleteFile:hover{ + color: red; + } + .btn{ + display: block; + } + } + } + .masklayer{ + position: absolute; + left: 0; + top: 0; + z-index: 2000; + width: 100%; + height: 100%; + background: rgba(0,0,0,0.2); + display: flex; + justify-content: center; + align-items: center; + flex-direction: column; + span{ + font-size: 14px; + margin-top: 5px; + } } } } diff --git a/src/app/data-collection/fire-force/fire-force.component.ts b/src/app/data-collection/fire-force/fire-force.component.ts index 799587a..ea547cf 100644 --- a/src/app/data-collection/fire-force/fire-force.component.ts +++ b/src/app/data-collection/fire-force/fire-force.component.ts @@ -8,6 +8,7 @@ import { MatSnackBar, MatSnackBarConfig } from '@angular/material/snack-bar'; import { MatTreeFlatDataSource, MatTreeFlattener } from '@angular/material/tree'; import { NzTreeNode } from 'ng-zorro-antd/tree'; import { TreeService } from 'src/app/http-interceptors/tree.service'; +import Viewer from 'viewerjs' declare var AMap: any; @Component({ @@ -18,7 +19,7 @@ declare var AMap: any; export class FireForceComponent implements OnInit { constructor(private tree: TreeService,public snackBar: MatSnackBar,private http:HttpClient,private elementRef: ElementRef,public renderer2: Renderer2,public dialog: MatDialog) { } - + isMasklayer:boolean = false//遮罩层是否打开 isCheckedOfSearchDiv:boolean = true//列表过滤滑块 slideChange(e){ this.isCheckedOfSearchDiv = e.checked @@ -51,9 +52,42 @@ export class FireForceComponent implements OnInit { } //获得所有消防力量 newdata:any + allFireForceList:any= [] getAllFireForce(){ - this.http.get('/api/CustomFireForce').subscribe((data:any) => { -    this.dataSource.data = this.tree.toTree(data) + let MinIntegrity = 0 + let MaxIntegrity = 1.1 + if(this.searchForm.integrityNum == '0'){ + MinIntegrity = 0 + MaxIntegrity = 0.5 + }else if(this.searchForm.integrityNum == '1'){ + MinIntegrity = 0.5 + MaxIntegrity = 0.6 + }else if(this.searchForm.integrityNum == '2'){ + MinIntegrity = 0.6 + MaxIntegrity = 0.7 + }else if(this.searchForm.integrityNum == '3'){ + MinIntegrity = 0.7 + MaxIntegrity = 0.8 + }else if(this.searchForm.integrityNum == '4'){ + MinIntegrity = 0.8 + MaxIntegrity = 0.9 + }else if(this.searchForm.integrityNum == '5'){ + MinIntegrity = 0.9 + MaxIntegrity = 1.1 + }else if(this.searchForm.integrityNum == '-1'){ + MinIntegrity = 0 + MaxIntegrity = 1.1 + } + let params:any = { + Keyword : this.searchForm.name ? this.searchForm.name : '', + MinIntegrity : MinIntegrity, + MaxIntegrity : MaxIntegrity + } + this.http.get('/api/CustomFireForce',{params:params}).subscribe((data:any) => { + console.log('所有消防力量列表',data) + this.allFireForceList = data +    this.dataSource.data = this.tree.toTree(data) + this.treeControl.expand(this.treeControl.dataNodes[0]); }) } upDateAllFireForce = ():void=>{ @@ -91,7 +125,8 @@ export class FireForceComponent implements OnInit { code:node.code, division:node.division, fireForceDetailId:node.fireForceDetailId, - forceType:node.forceType + forceType:node.forceType, + fireForceDetailInfo:node.fireForceDetailInfo }; } treeControl = new FlatTreeControl(node => node.level, node => node.expandable); @@ -111,7 +146,7 @@ export class FireForceComponent implements OnInit { this.isGisTopBox = false if(this.selectedFireForceId != node.id){ this.clearData() - + this.selectedFireForce = node this.selectedFireForceId = node.id if(node.forceType != 0){//如果是其他消防力量 @@ -147,6 +182,10 @@ export class FireForceComponent implements OnInit { }else{ this.map.setCity('上海市'); } + //相关资料 + console.log('详情',data) + data.relevantInfomationData ? this.AttachmentArr = JSON.parse(data.relevantInfomationData) : null + if(node.forceType == 0 && node.level == 0){ this.ZongpersonCountData = JSON.parse(data.personCountData) this.ZongcontactData = JSON.parse(data.contactData) @@ -162,20 +201,36 @@ export class FireForceComponent implements OnInit { if(node.forceType != 0){ this.otherpersonCountData = JSON.parse(data.personCountData) this.othercontactData = JSON.parse(data.contactData) - } }) }else{ + this.map.setCity('上海市'); } } } //搜索 + isTreeView:boolean = true//决定显示树还是列表 searchList(){ console.log(this.searchForm) + if(!this.searchForm.name && !this.searchForm.integrityNum){ + this.isTreeView = true + }else{ + this.isTreeView = false + } + + this.getAllFireForce() + } + //重置搜索 + reset(){ + this.isTreeView = true + this.selectedFireForceLevel = null + this.searchForm = { + name:'', + integrityNum:'' + } this.getAllFireForce() } - //js乘法 accMul(arg1,arg2,fix) { if(!parseInt(fix)==fix) @@ -248,7 +303,8 @@ export class FireForceComponent implements OnInit { }, personCountData:[],//人员数量自定义 contactData:[],//联系方式自定义 - dutyForceData:[]//执勤力量自定义 + dutyForceData:[],//执勤力量自定义 + RelevantInfomationData:[]//相关资料 } //总队支队人员数量 ZongpersonCountData:any=[ @@ -305,6 +361,8 @@ export class FireForceComponent implements OnInit { ] //清空表单数据 clearData(){ + this.deletedFile = []//清空相关资料已删除缓存 + this.AttachmentArr = []//清空相关资料 this.superior = { name:'', code:'' @@ -325,7 +383,8 @@ export class FireForceComponent implements OnInit { }, personCountData:[],//人员数量自定义 contactData:[],//联系方式自定义 - dutyForceData:[]//执勤力量自定义 + dutyForceData:[],//执勤力量自定义 + RelevantInfomationData:[]//相关资料 } this.ZongpersonCountData = [ {PropertyName :'现役官兵人数',PropertyValue:''}, @@ -412,10 +471,21 @@ export class FireForceComponent implements OnInit { alert('名称必填') return } - console.log(777,this.atLastPositionLngLat) + //删除一下数据库的文件 + if(this.deletedFile.length != 0){ + this.deletedFile.forEach(item => { + // this.http.delete(`/api/Objects/PlanPlatform/${item.objectName}?x-oss-process=image/resize,m_fixed,h_100,w_100`).subscribe(data=>{ + // console.log('删除缩略图成功') + // }) + this.http.delete(`/api/Objects/PlanPlatform/${item.objectName}`).subscribe(data=>{ + console.log('删除原文件成功') + }) + }); + + } this.FireForceDetailInfo.jurisdictionArea = Number(this.FireForceDetailInfo.jurisdictionArea) + this.FireForceDetailInfo.RelevantInfomationData = JSON.stringify(this.AttachmentArr) //如果是总支大中 - // console.log(8888, this.FireForceDetailInfo) this.FireForceDetailInfo.location = {x:'',y:''} if(this.atLastPositionLngLat.x){ this.FireForceDetailInfo.location.x = this.atLastPositionLngLat.x @@ -447,7 +517,6 @@ export class FireForceComponent implements OnInit { config.duration = 3000 this.snackBar.open('保存成功','确定',config); this.upDateAllFireForce() - console.log(123,data) }) } //如果是其他消防力量 @@ -468,6 +537,7 @@ export class FireForceComponent implements OnInit { config.verticalPosition = 'top'; config.duration = 3000 this.snackBar.open('保存成功','确定',config); + this.upDateAllFireForce() // console.log(123,data) }) }else{ @@ -564,18 +634,18 @@ export class FireForceComponent implements OnInit { isGisTopBox:boolean = false // searchTitle:any = ''// - positionLngLat:any = {}//临时坐标点 - atLastPositionLngLat:any = {x:null,y:null}//最终坐标点 + positionLngLat:any = {x:'',y:''}//临时坐标点 + atLastPositionLngLat:any = {x:'',y:''}//最终坐标点 setPosition(){ if(!this.isGisTopBox){ this.isGisTopBox = true this.newPositionMarker ? this.map.remove(this.newPositionMarker) : null let center - console.log() + console.log(789,this.atLastPositionLngLat) if(this.newPositionMarker && this.atLastPositionLngLat.x){//如果已经标注单位坐标 console.log(1) center = [this.atLastPositionLngLat.x, this.atLastPositionLngLat.y] - }else if(this.newPositionMarker && !this.atLastPositionLngLat.x && this.FireForceDetailInfo.location.x){ + }else if(this.newPositionMarker && !this.atLastPositionLngLat.x && this.FireForceDetailInfo.location && this.FireForceDetailInfo.location.x){ console.log(2) center = [this.FireForceDetailInfo.location.x, this.FireForceDetailInfo.location.y] }else{ @@ -628,6 +698,151 @@ export class FireForceComponent implements OnInit { } } + + + + + //上传附件 + file:any; //上传的文件 + AttachmentArr:any = []//上传附件地址集合 + uploadId:any//分块上传id + objectName:any + uploadAttachment(e){ + console.log('选择的文件',e) + this.file = e.target.files[0] || null //上传的文件 + let file = e.target.files[0] || null //获取上传的文件 + let fileSize = file.size || null //上传文件的总大小 + let shardSize = 5 * 1024 * 1024 //5MB一个分片 + this.isMasklayer = true + if (file && fileSize<=shardSize) { //上传文件<=5MB时 + console.log('file',this.file) + let formData = new FormData() + formData.append("file",file) + //this.selectedFireForce.id 选择的组织机构的id + this.http.post(`/api/Objects/PlanPlatform/FireForce/${this.selectedFireForce.id}`,formData).subscribe((data:any)=>{ + // this.objectName = data.objectName + let obj = { + objectName:data.objectName, + fileName:data.fileName, + fileLength:data.fileLength + } + this.AttachmentArr.push(obj) + this.isMasklayer = false + console.log('上传成功',data) + }) + } else if (file && fileSize>shardSize) { //上传文件>5MB时,分块上传 + let data = {filename: file.name} + this.http.post(`/api/NewMultipartUpload/PlanPlatform/FireForce/${this.selectedFireForce.id}`,{},{params:data}).subscribe((data:any)=>{ //初始化分段上传 + console.log('初始化分块上传成功',data) + this.objectName = data.objectName + this.uploadId = data.uploadId + this.subsectionUploading() + }) + } + } + PartNumberETag:any=[]; //每次返回需要保存的信息 + //开始分段上传 + async subsectionUploading () { + + let file = this.file || null //获取上传的文件 + let fileSize = file.size || null //上传文件的总大小 + let shardSize = 5 * 1024 * 1024 //5MB一个分片 + let allSlice = Math.ceil(fileSize / shardSize) //总文件/5MB===共分多少段 + + for (let i = 0;i < allSlice;i++) { //循环分段上传 + let start = i * shardSize //切割文件开始位置 + let end = Math.min(fileSize, start + shardSize); //切割文件结束位置 + let formData = new FormData() + formData.append("file",file.slice(start, end)) + + //同步写法实现异步调用 + let result = await new Promise((resolve, reject) => { + // await 需要后面返回一个 promise 对象 + this.http.post(`/api/MultipartUpload/PlanPlatform/${this.objectName}?uploadId=${this.uploadId}&partNumber=${i+1}`,formData).subscribe((data:any)=>{ + let msg = { + "partNumber":data.partNumber || null, + "eTag": data.eTag || null} + resolve(msg) // 调用 promise 内置方法处理成功 + }) + }); + this.PartNumberETag.push(result) + // this.uploadProgress = Number((i/allSlice).toFixed(2))*100 + if (this.PartNumberETag.length === allSlice) { + // this.uploadProgress = 100 + this.endUploading()} + }//for循环 + + } + + //完成分块上传 + endUploading () { + let data = this.PartNumberETag + let paramsData = {uploadId:this.uploadId} + this.http.post(`/api/CompleteMultipartUpload/PlanPlatform/${this.objectName}`,data,{params:paramsData}).subscribe(data=>{ + this.PartNumberETag =[] //清空保存返回的信息 + let obj = { + objectName:this.objectName, + fileName:this.file.name, + fileLength:this.file.size + } + this.AttachmentArr.push(obj) + console.log('完成分块上传',data) + this.isMasklayer = false + }) + } + + //删除图片 + deletedFile:any = [] + deleteFile(item,e){ + console.log(this.AttachmentArr) + e.stopPropagation() + let isTrue = window.confirm('确定要删除该文件吗?') + if(isTrue){ + let index + this.AttachmentArr.forEach((element,key) => { + if(element.objectName == item.objectName){ + index = key + } + }); + this.AttachmentArr.splice(index,1) + this.deletedFile.push(item) + let config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('删除成功','确定',config); + } + } + + //点击文件 + clickFile(item){ + console.log(item) + let suffix = item.fileName.split('.')[item.fileName.split('.').length-1] + if(suffix == 'png' || suffix == 'jpg'){ + console.log('这是图片') + let dom = document.getElementById(`viewerjs`) + let pObjs = dom.childNodes; + let node = document.createElement("img") + node.style.display = "none"; + node.src = "/api/Objects/PlanPlatform/" + item.objectName; + node.id = 'img' + dom.appendChild(node) + setTimeout(() => { + let viewer = new Viewer(document.getElementById(`viewerjs`), { + hidden:()=>{ + dom.removeChild(pObjs[0]); + viewer.destroy(); + } + }); + node.click(); + }, 0); + } + if(suffix == 'docx' || suffix == 'doc' || suffix == 'pdf'){ + let config = new MatSnackBarConfig(); + config.verticalPosition = 'top'; + config.duration = 3000 + this.snackBar.open('暂不支持查看','确定',config); + } + } } diff --git a/src/assets/images/pdf.jpg b/src/assets/images/pdf.jpg new file mode 100644 index 0000000000000000000000000000000000000000..77b4f55e69e83181dc1853e2c9807357de796dab GIT binary patch literal 4679 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 literal 0 HcmV?d00001