You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1109 lines
37 KiB
1109 lines
37 KiB
import { Component, OnInit, ViewChild, Inject } from '@angular/core'; |
|
import { HttpClient,HttpHeaders } from '@angular/common/http' |
|
import { MatTreeFlatDataSource, MatTreeFlattener } from '@angular/material/tree'; |
|
import { MatPaginator } from '@angular/material/paginator'; |
|
import { FlatTreeControl } from '@angular/cdk/tree'; |
|
import { FormControl } from '@angular/forms'; |
|
import { Router,ActivatedRoute } from '@angular/router' |
|
import { PageEvent } from '@angular/material/paginator'; |
|
import { MatDialogRef, MatDialog, MAT_DIALOG_DATA } from '@angular/material/dialog'; |
|
import { MatSnackBar, MatSnackBarConfig } from '@angular/material/snack-bar'; |
|
import { TreeService } from '../../http-interceptors/tree.service' |
|
import {FormBuilder, FormGroup, Validators} from '@angular/forms'; |
|
import { async } from '@angular/core/testing'; |
|
import { Viewer } from 'photo-sphere-viewer'; |
|
import {STEPPER_GLOBAL_OPTIONS} from '@angular/cdk/stepper'; |
|
declare var CryptoJS |
|
@Component({ |
|
selector: 'app-entry-plan-look', |
|
templateUrl: './entry-plan-look.component.html', |
|
styleUrls: ['./entry-plan-look.component.scss'] |
|
}) |
|
export class EntryPlanLookComponent implements OnInit { |
|
constructor(private http:HttpClient,private router:Router,private route:ActivatedRoute,private tree: TreeService,public dialog: MatDialog,public snackBar: MatSnackBar) { } |
|
pageEvent: PageEvent; |
|
private _transformer = (node, level: number) => { //初始化tree |
|
return { |
|
expandable: !!node.children && node.children.length > 0, |
|
name: node.name, |
|
level: level, |
|
id: node.id, |
|
parentId: node.parentId, |
|
children: node.children |
|
}; |
|
} |
|
treeControl = new FlatTreeControl<any>(node => node.level, node => node.expandable); |
|
treeFlattener = new MatTreeFlattener(this._transformer, node => node.level, node => node.expandable, node => node.children); |
|
dataSource = new MatTreeFlatDataSource(this.treeControl, this.treeFlattener); |
|
myControl = new FormControl(); |
|
hasChild = (_: number, node: any) => node.expandable; |
|
|
|
displayedColumns: string[] = ['planname', 'addpeople', 'addtime','plantype','auditstate', 'isopen','preparethelevel','operation']; |
|
tabledataSource:any |
|
//分页 |
|
@ViewChild(MatPaginator, {static: true}) |
|
paginator: MatPaginator; |
|
length:any; //共多少条数据 |
|
pageSize:any; //每页条数 |
|
pageSizeOptions: number[] = [10] //设置每页条数 |
|
PageNumber:any = 1; //第几页 |
|
|
|
unitdata:any = {} |
|
|
|
|
|
|
|
unittypeId:any //单位类型id |
|
|
|
//获取当前单位信息 |
|
compantData:any |
|
getCompanyData () { |
|
let CompanyName = sessionStorage.getItem("companyName") |
|
let header = { |
|
CompanyName: CompanyName || '', |
|
} |
|
this.http.get('/api/Plans',{params:header}).subscribe((data:any)=>{ |
|
data.items.forEach(element => { |
|
if (element.companyId===this.route.snapshot.queryParams.unitId) { |
|
this.compantData = element.company |
|
return } }); |
|
// console.log(123,this.compantData) |
|
this.unitdata.unitname = this.compantData.name |
|
this.unitdata.organizationName = this.compantData.organizationName |
|
this.unitdata.unittype = this.compantData.buildingTypes[0].name |
|
this.unitdata.unitaddress = this.compantData.address |
|
this.unittypeId = this.compantData.buildingTypes[0].id |
|
}) |
|
} |
|
//跳转单位信息 |
|
lookUnitData(){ |
|
sessionStorage.setItem("editable","0") |
|
sessionStorage.setItem("companyName",this.route.snapshot.queryParams.unitName) |
|
sessionStorage.setItem("companyId",this.route.snapshot.queryParams.unitId) |
|
// sessionStorage.setItem(element.id,JSON.stringify(element.companyIntegrityScore)) |
|
window.open(`/keyUnit/viewunitinfo?id=${this.route.snapshot.queryParams.unitId}&usci=${this.route.snapshot.queryParams.usci}`) |
|
} |
|
//分页事件 |
|
changePage(e){ |
|
this.PageNumber = e.pageIndex+1 |
|
this.getAllPlanComponents() |
|
} |
|
isoperation:any //判断预案录入 和 审核公开预案 区别变量 |
|
ngOnInit(): void { |
|
this.tabledataSource = [ |
|
] |
|
// this.getCompanyData() |
|
this.isoperation = this.route.snapshot.queryParams.operation |
|
this.unitdata.unitname = this.route.snapshot.queryParams.unitName |
|
this.unitdata.organizationName = this.route.snapshot.queryParams.orName |
|
this.unitdata.unittype = this.route.snapshot.queryParams.unitType |
|
this.unitdata.unitaddress = this.route.snapshot.queryParams.unitAdd |
|
this.companyId = this.route.snapshot.queryParams.unitId |
|
this.unittypeId = this.route.snapshot.queryParams.unitTypeId |
|
this.getAllPlanComponents() |
|
} |
|
//查看预案 |
|
lookPlan(e){ |
|
if(e.planMode == 0){ |
|
// console.log(e.attachmentUrls) |
|
var index=e.attachmentUrls[0].indexOf("\/") |
|
if(e.attachmentUrls[0].substr(0,index)=='psw'){ |
|
const dialogRef = this.dialog.open(PsViewer, { |
|
width: '1500px', |
|
height:'800px', |
|
data: e.attachmentUrls[0] |
|
}); |
|
} |
|
else /* if(e.attachmentUrls[0].substr(e.attachmentUrls[0].length-4,e.attachmentUrls[0].length-1)=='docx'||e.attachmentUrls[0].substr(e.attachmentUrls[0].length-3,e.attachmentUrls[0].length)=='pdf' |
|
||e.attachmentUrls[0].substr(e.attachmentUrls[0].length-3,e.attachmentUrls[0].length)=='doc'||e.attachmentUrls[0].substr(e.attachmentUrls[0].length-3,e.attachmentUrls[0].length)=='DOC' |
|
||e.attachmentUrls[0].substr(e.attachmentUrls[0].length-3,e.attachmentUrls[0].length)=='txt'||e.attachmentUrls[0].substr(e.attachmentUrls[0].length-3,e.attachmentUrls[0].length)=='JPG') */{ |
|
let filename:string |
|
let fetchUrl = e.attachmentUrls[0] |
|
let docIdWordArray = CryptoJS.enc.Utf8.parse(`PlanPlatform/` + fetchUrl); |
|
let docId = CryptoJS.enc.Base64.stringify(docIdWordArray); |
|
let jwt = sessionStorage.getItem("token"); |
|
let rawJwt = CryptoJS.enc.Base64.parse(jwt.split('.')[1]); |
|
let identityJson = CryptoJS.enc.Utf8.stringify(rawJwt); |
|
let identityJsonparse=JSON.parse(identityJson) |
|
this.http.get(`/api/ObjectMetadata/PlanPlatform/${fetchUrl}`).subscribe((data:any)=>{ |
|
filename=data.fileName |
|
let json={ |
|
doc: { |
|
docId: docId, |
|
title: filename, |
|
fetchUrl: `http://39.106.78.171:8000/api/Objects/PlanPlatform/`+fetchUrl, |
|
}, |
|
user: { |
|
uid: identityJsonparse.sub, |
|
nickName: identityJsonparse.name, |
|
avatar: "", |
|
privilege: e.auditStatus!='1'&&e.auditStatus!='16'?[ |
|
'FILE_READ','FILE_WRITE','FILE_DOWNLOAD', 'FILE_PRINT' |
|
]:[ |
|
'FILE_READ','FILE_DOWNLOAD', 'FILE_PRINT' |
|
], |
|
}, |
|
} |
|
var stringjson=JSON.stringify(json) |
|
var wordArray = CryptoJS.enc.Utf8.parse(stringjson); |
|
var base64 = CryptoJS.enc.Base64.stringify(wordArray); |
|
window.open(`http://121.5.10.84/apps/editor/openPreview?data=${base64}`) |
|
}) |
|
} |
|
} |
|
if(e.planMode == 1){ |
|
const config = new MatSnackBarConfig(); |
|
config.verticalPosition = 'top'; |
|
config.duration = 3000 |
|
this.snackBar.open('查看导入word文件','确定',config); |
|
} |
|
if(e.planMode == 2){ //如果是在线编辑 |
|
let id = e.id |
|
sessionStorage.setItem("planId",id) |
|
sessionStorage.setItem("companyId",this.companyId) |
|
sessionStorage.setItem("buildingTypeId",this.unittypeId) |
|
sessionStorage.setItem("editable","0") |
|
sessionStorage.setItem("planName",e.name) |
|
let companyId = sessionStorage.getItem("companyId") |
|
window.open(`/keyUnit/viewunitinfoplan?id=${companyId}&orName=${this.route.snapshot.queryParams.orName}&orId=${this.route.snapshot.queryParams.orId}`); |
|
} |
|
if(e.planMode == 3){ //如果是跳转网页 |
|
sessionStorage.setItem("url",e.url) |
|
window.open(`/planManagement/webLook`) |
|
} |
|
} |
|
//编辑预案 |
|
editPlan(e){ |
|
if(e.planMode == 2){ //如果是在线编辑 |
|
let id = e.id |
|
sessionStorage.setItem("planId",id) |
|
sessionStorage.setItem("companyId",this.companyId) |
|
sessionStorage.setItem("buildingTypeId",this.unittypeId) |
|
sessionStorage.setItem("editable","1") |
|
sessionStorage.setItem("planName",e.name) |
|
let companyId = sessionStorage.getItem("companyId") |
|
window.open(`/keyUnit/editunitinfo?id=${companyId}&orName=${this.route.snapshot.queryParams.orName}&orId=${this.route.snapshot.queryParams.orId}`); |
|
} |
|
} |
|
allPlanComponents:any //所有预案组件 |
|
companyId : any //新建预案需要使用的id |
|
planId : any //统一预案id |
|
lookUrl //查看文件路径 |
|
//改名 |
|
changeName(element){ |
|
// console.log(element) |
|
const dialogRef = this.dialog.open(ChangeName, { |
|
data: {element:element} |
|
}); |
|
dialogRef.afterClosed().subscribe( |
|
data=>{ |
|
if(data){ |
|
const config = new MatSnackBarConfig(); |
|
config.verticalPosition = 'top'; |
|
config.duration = 3000 |
|
this.snackBar.open('修改成功!','确定',config); |
|
this.getAllPlanComponents() |
|
} |
|
} |
|
); |
|
} |
|
//获得所有预案组件 |
|
getAllPlanComponents(){ |
|
let pagetype = this.route.snapshot.queryParams.pagetype |
|
let unitId = this.route.snapshot.queryParams.unitId |
|
let paramsData:any |
|
if(pagetype == 'entryplan'){ |
|
paramsData = { |
|
companyId:unitId, |
|
pageNumber: this.PageNumber, |
|
pageSize: "", |
|
sort: "" |
|
} |
|
} |
|
if(pagetype == 'passplan'){ |
|
paramsData = { |
|
companyId:unitId, |
|
pageNumber: this.PageNumber, |
|
pageSize: "", |
|
AuditStatus:2, |
|
sort: "" |
|
} |
|
} |
|
if(pagetype == 'openplan'){ |
|
paramsData = { |
|
companyId:unitId, |
|
pageNumber: this.PageNumber, |
|
pageSize: "", |
|
IsPublic:true, |
|
sort: "" |
|
} |
|
} |
|
|
|
this.http.get("/api/PlanComponents",{params:paramsData}).subscribe((data:any)=>{ |
|
this.length = data.totalCount |
|
this.allPlanComponents = data |
|
this.tabledataSource = data.items |
|
}) |
|
} |
|
//删除预案 |
|
deletePlan(plandata){ |
|
const config = new MatSnackBarConfig(); |
|
config.verticalPosition = 'top'; |
|
config.duration = 3000 |
|
let isTrue = confirm('您确定要删除吗') |
|
if (isTrue) { |
|
if(plandata.planType == 1){//如果删除的是二维预案 |
|
this.http.delete(`/api/PlanComponents2D/${plandata.id}`).subscribe(data=>{ |
|
this.snackBar.open('删除成功!','确定',config); |
|
this.getAllPlanComponents() |
|
},err => { |
|
this.snackBar.open(err,'确定',config); |
|
}) |
|
}else{ |
|
this.http.delete(`/api/PlanComponents/${plandata.id}`).subscribe(data=>{ |
|
const config = new MatSnackBarConfig(); |
|
config.verticalPosition = 'top'; |
|
config.duration = 3000 |
|
this.snackBar.open('删除成功!','确定',config); |
|
this.getAllPlanComponents() |
|
},err => { |
|
this.snackBar.open(err,'确定',config); |
|
}) |
|
} |
|
} |
|
|
|
} |
|
//提交审核 |
|
submitAudit(element){ |
|
const config = new MatSnackBarConfig(); |
|
config.verticalPosition = 'top'; |
|
config.duration = 3000 |
|
/* if(element.auditStatus == 4){ |
|
this.snackBar.open('审核退回的预案需要修改后方可再次提交审核!','确定',config); |
|
} */ |
|
if(element.planType == 1){//如果提交审核的是二维预案 |
|
if(element.auditStatus ==8){ |
|
this.http.put(`/api/PlanComponents2D/${element.id}/Commit`,"").subscribe(data=>{ |
|
this.getAllPlanComponents() |
|
},err => { |
|
this.snackBar.open(err,'确定',config); |
|
}) |
|
} |
|
else{ |
|
this.snackBar.open('审核退回的预案需要修改后方可再次提交审核!','确定',config); |
|
} |
|
}else{ |
|
this.http.put(`/api/PlanComponents/${element.id}/Commit`,"").subscribe(data=>{ |
|
this.getAllPlanComponents() |
|
},err => { |
|
this.snackBar.open(err,'确定',config); |
|
}) |
|
} |
|
|
|
|
|
} |
|
//撤销审核 |
|
cancelAudit(element){ |
|
if(element.planType == 1){//如果撤销审核的是二维预案 |
|
this.http.put(`/api/PlanComponents2D/${element.id}/Cancel`,"").subscribe(data=>{ |
|
this.getAllPlanComponents() |
|
}) |
|
}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); |
|
}) |
|
} |
|
} |
|
//审核结果 |
|
auditResult(element){ |
|
// console.log(element) |
|
const dialogRef = this.dialog.open(AuditResult, { |
|
width:"395px", |
|
data: {element:element} |
|
}); |
|
dialogRef.afterClosed().subscribe( |
|
data=>{ |
|
if(data){ |
|
|
|
} |
|
} |
|
); |
|
|
|
} |
|
|
|
//下载↓ |
|
selectDownloadFile:any; //选择下载的文件 |
|
download:any; //下载文件元数据 |
|
downloadisLoading:boolean = false; //进度条loading加载 |
|
downloadProgress:number=0; //进度条进度 |
|
downloadFileName:any |
|
|
|
|
|
uploadFileLonging:any |
|
//读取下载文件信息 |
|
readFile (element) { |
|
this.uploadFileLonging = element |
|
const dialogRef = this.dialog.open(DownloadFile, { |
|
width:"435px", |
|
// height:"410px", |
|
data: {fileUrls:element.attachmentUrls,compantData:this.unitdata.unitname,element:element} |
|
}); |
|
dialogRef.afterClosed().subscribe( |
|
data=>{ |
|
if(data){ |
|
this.downloadFileName = data.fileName |
|
this.download = data |
|
this.downloadFile() |
|
} |
|
} |
|
); |
|
} |
|
|
|
//初始化下载 |
|
downloadFile () { |
|
this.downloadProgress = 0 |
|
let file = this.download |
|
let fileSize = file.fileLength//下载文件的总大小 |
|
let shardSize = 10 * 1024 * 1024 //文件大小是否大于10MB |
|
|
|
if (file && fileSize<=shardSize) { //<=10MB时直接下载 |
|
this.downloadisLoading = true |
|
// this.setFileLoading() |
|
this.http.get(`/api/Objects/PlanPlatform/${file.objectName}`,{responseType: 'blob'},).subscribe(data=>{ |
|
|
|
let url = window.URL.createObjectURL(new Blob([data])); //createObjectURL创建一个下载Blob的url地址 |
|
let link = document.createElement("a"); |
|
link.style.display = "none"; |
|
link.href = url; |
|
|
|
let suffix = file.objectName.substring(file.objectName.lastIndexOf(".")+1,file.objectName.length) ; |
|
link.setAttribute("download", file.fileName ? file.fileName : this.unitdata.unitname + "-" +this.uploadFileLonging.name + "." + suffix); |
|
document.body.appendChild(link); |
|
link.click(); |
|
this.downloadisLoading = false |
|
// this.setFileLoading() |
|
}) |
|
} else if (file && fileSize > shardSize) { //>10MB时分块下载 |
|
this.blockingDownload() //分段下载 |
|
this.downloadisLoading = true |
|
// this.setFileLoading() |
|
} |
|
|
|
} |
|
|
|
//分段下载并合并 |
|
async blockingDownload () { |
|
let file = this.download |
|
let fileSize = file.fileLength //下载文件的总大小 |
|
let shardSize = 3 * 1024 * 1024 //3MB一个分片 |
|
let allSlice = Math.ceil(fileSize / shardSize) //总文件/3MB===共分多少段 |
|
let allFile:any = [] //所有的file分段 |
|
|
|
for (let i=0;i<allSlice;i++) { |
|
let start = i * shardSize //每次下载文件开始位置 |
|
let end = Math.min(fileSize, start + shardSize-1); //每次下载文件结束为止 |
|
|
|
let result = await new Promise ((result,reject)=>{ |
|
this.http.get(`/api/Objects/PlanPlatform/${file.objectName}`,{headers:{'range':`bytes= ${start}-${end}`},responseType:'blob'}).subscribe(data=>{ |
|
result(data) }) |
|
}) |
|
allFile.push(result) |
|
this.downloadProgress = Number((i/allSlice).toFixed(2))*100 |
|
|
|
if (allFile.length === allSlice) { //合并文件输出给浏览器 |
|
let url = window.URL.createObjectURL(new Blob(allFile)); //createObjectURL创建一个下载Blob的url地址 |
|
let link = document.createElement("a"); |
|
link.style.display = "none"; |
|
link.href = url; |
|
let suffix = file.objectName.substring(file.objectName.lastIndexOf(".")+1,file.objectName.length) ; |
|
link.setAttribute("download", file.fileName ? file.fileName : this.unitdata.unitname + "-" +this.uploadFileLonging.name + "." + suffix); |
|
document.body.appendChild(link); |
|
link.click(); |
|
// this.downloadProgress = 0 |
|
this.downloadisLoading = false |
|
// this.setFileLoading() |
|
} |
|
|
|
} //for循环 |
|
|
|
} |
|
|
|
//取消分块下载 |
|
cancelDowload () { |
|
} |
|
|
|
//封装函数设置当前文件loading状态 |
|
setFileLoading () { |
|
// let id = this.selectDownloadFile.id |
|
// this.CADList.forEach(element => { |
|
// if (element.id === id) { element.loading = !element.loading } |
|
// }); |
|
} |
|
|
|
//新建预案弹出框 |
|
addplan () { |
|
const dialogRef = this.dialog.open(AddPlanone, { |
|
width:"585px", |
|
height:"430px", |
|
data: {companyId:this.companyId}, |
|
disableClose:true |
|
}); |
|
dialogRef.afterClosed().subscribe( |
|
data=>{ |
|
if(data){ |
|
// this.route.snapshot.queryParams.id = data.planId |
|
this.planId = data.planId |
|
this.getAllPlanComponents() |
|
if(data.planMode == 2){//如果添加方式为在线编辑 |
|
sessionStorage.setItem("planId",data.id); |
|
sessionStorage.setItem("companyId",this.companyId) |
|
sessionStorage.setItem("buildingTypeId",this.unittypeId) |
|
sessionStorage.setItem("editable","1") |
|
let companyId = sessionStorage.getItem("companyId") |
|
window.open(`/keyUnit/editunitinfo?id=${companyId}`); |
|
} |
|
} |
|
} |
|
); |
|
} |
|
} |
|
|
|
|
|
//新建预案弹出框 |
|
@Component({ |
|
selector: 'AddPlanone', |
|
templateUrl: './AddPlanone.html', |
|
styleUrls: ['./entry-plan-look.component.scss'], |
|
|
|
}) |
|
export class AddPlanone { |
|
isLinear = true; //是否为线性步进器 |
|
firstFormGroup: FormGroup; |
|
secondFormGroup: FormGroup; |
|
constructor(private _formBuilder: FormBuilder,private http: HttpClient,public dialogRef: MatDialogRef<AddPlanone>,@Inject(MAT_DIALOG_DATA) public data,public snackBar: MatSnackBar,private tree: TreeService) {} |
|
|
|
|
|
|
|
ngOnInit(): void { |
|
this.levels=sessionStorage.getItem("level") |
|
this.firstFormGroup = this._formBuilder.group({ |
|
firstCtrlone: ['', Validators.required], |
|
firstCtrltwo: ['', Validators.required], |
|
firstCtrlthree: ['', Validators.required], |
|
}); |
|
this.secondFormGroup = this._formBuilder.group({ |
|
secondCtrl: ['', Validators.required] |
|
}); |
|
|
|
} |
|
onNoClick(): void { |
|
this.dialogRef.close(); |
|
} |
|
levels// |
|
isup:boolean = true //上传input框是否显示 |
|
isweb:boolean = false //web输入框是否显示 |
|
isinput:boolean = false //导入是否显示 |
|
defaultisshow = '0' //默认显示上传input框 |
|
pswShow=false //是否为全景图选项默认不显示 |
|
psw//是否为全景图 |
|
cadPlan//是否为卡片预案 |
|
//选择radio |
|
selectradio(e){ |
|
if(e.value == "0"){ //如果点击本地上传 |
|
this.isup = true |
|
this.isinput = false |
|
this.isweb = false |
|
this.webaddress = "" |
|
} |
|
if(e.value == "1"){ //如果点击导入word文档 |
|
this.isinput = true |
|
this.isup = false |
|
this.isweb = false |
|
this.webaddress = "" |
|
} |
|
if(e.value == "2"){ //如果点击在线编辑 |
|
this.isinput = false |
|
this.isup = false |
|
this.isweb = false |
|
this.webaddress = "" |
|
} |
|
if(e.value == "3"){ //如果点击输入网址 |
|
this.isweb = true |
|
this.isup = false |
|
this.isinput = false |
|
this.webaddress = "" |
|
} |
|
} |
|
file2:any = null; //导入的文件 |
|
webaddress:any = "" //输入的网页地址 |
|
|
|
//上传文件↓ |
|
file:any; //上传的文件 |
|
fileName:any; //上传文件name |
|
uploadisLoading:boolean = false; //进度条loading加载 |
|
uploadProgress:number=0; //进度条进度 |
|
objectName:any; //上传对象名 |
|
uploadId:any; //上传分块上传事件编号 |
|
//上传文件input |
|
filechange(e){ |
|
this.psw=false |
|
this.file = e.target.files[0] || null //上传的文件 |
|
if(this.selectedPLanType=='4'&&this.file.type!=null&&this.file.type!=undefined){ |
|
if(this.file.type=='image/png'||this.file.type=='image/jpeg'){ |
|
this.pswShow=true |
|
}else{this.pswShow=false} |
|
}else{this.pswShow=false} |
|
|
|
// this.startUploading() |
|
} |
|
|
|
//上传文件 |
|
startUploading (planType) { |
|
|
|
let file = this.file || null //获取上传的文件 |
|
let fileSize = file.size || null //上传文件的总大小 |
|
let shardSize = 5 * 1024 * 1024 //5MB一个分片 |
|
// console.log(this.psw) |
|
|
|
if (file && fileSize<=shardSize) { //上传文件<=5MB时 |
|
let formData = new FormData() |
|
formData.append("file",file) |
|
this.http.post(this.psw?'/api/Objects/PlanPlatform/psw': `/api/Objects/PlanPlatform/${this.data.companyId}/2D`,formData).subscribe((data:any)=>{ |
|
this.objectName = data.objectName |
|
const config = new MatSnackBarConfig(); |
|
config.verticalPosition = 'top'; |
|
config.duration = 3000 |
|
this.snackBar.open('上传成功!','确定',config); |
|
this.uploadover = true |
|
|
|
let level = sessionStorage.getItem("level") |
|
// console.log(level) |
|
let PlanLevel |
|
if(level == '0'){ |
|
PlanLevel = 1 |
|
} |
|
if(level == '1'){ |
|
PlanLevel = 2 |
|
} |
|
if(level == '2'){ |
|
PlanLevel = 4 |
|
} |
|
if(level == '3'){ |
|
PlanLevel = 8 |
|
} |
|
let uploadUrl |
|
if(planType == "非二维"){ |
|
uploadUrl = "/api/PlanComponents" |
|
}else{ |
|
uploadUrl = "/api/PlanComponents2D" |
|
} |
|
if(this.uploadover){ |
|
this.http.post(uploadUrl,{ |
|
id: "", |
|
name: this.selectedPLanName, |
|
planType:Number(this.selectedPLanType), |
|
planMode: Number(this.defaultisshow), |
|
planLevel: PlanLevel, |
|
planCategory: Number(this.selectedPLanLevel), |
|
url: "", |
|
attachmentUrls: [`${this.objectName}`] |
|
},{params:{ |
|
companyId : this.data.companyId |
|
}}).subscribe(data=>{ |
|
this.dialogRef.close(data); |
|
}) |
|
}else{ |
|
console.log("上传出错") |
|
} |
|
|
|
}) |
|
} else if (file && fileSize>shardSize) { //上传文件>5MB时,分块上传 |
|
let data = {filename: file.name} |
|
this.uploadisLoading = true |
|
this.http.post(this.psw?'/api/NewMultipartUpload/PlanPlatform/psw':`/api/NewMultipartUpload/PlanPlatform/${this.data.companyId}/2D`,{},{params:data}).subscribe((data:any)=>{ //初始化分段上传 |
|
this.objectName = data.objectName |
|
this.uploadId = data.uploadId |
|
this.subsectionUploading(planType) |
|
}) |
|
} |
|
|
|
} |
|
|
|
PartNumberETag:any=[]; //每次返回需要保存的信息 |
|
//开始分段上传 |
|
async subsectionUploading (planType) { |
|
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(planType)} |
|
}//for循环 |
|
|
|
} |
|
uploadover:any = false //上传完成之后提示 |
|
//完成分块上传 |
|
endUploading (planType) { |
|
let data = this.PartNumberETag |
|
let paramsData = {uploadId:this.uploadId} |
|
this.http.post(`/api/CompleteMultipartUpload/PlanPlatform/${this.objectName}`,data,{params:paramsData}).subscribe(data=>{ |
|
const config = new MatSnackBarConfig(); |
|
config.verticalPosition = 'top'; |
|
config.duration = 3000 |
|
this.snackBar.open('上传成功!','确定',config); |
|
this.uploadProgress = 0; |
|
this.uploadisLoading = false |
|
this.PartNumberETag =[] //清空保存返回的信息 |
|
this.uploadover = true |
|
let level = sessionStorage.getItem("level") |
|
// console.log(level) |
|
let PlanLevel |
|
if(level == '0'){ |
|
PlanLevel = 1 |
|
} |
|
if(level == '1'){ |
|
PlanLevel = 2 |
|
} |
|
if(level == '2'){ |
|
PlanLevel = 4 |
|
} |
|
if(level == '3'){ |
|
PlanLevel = 8 |
|
} |
|
let uploadUrl |
|
if(planType == "非二维"){ |
|
uploadUrl = "/api/PlanComponents" |
|
}else{ |
|
uploadUrl = "/api/PlanComponents2D" |
|
} |
|
if(this.uploadover){//如果上次成功了才创建 |
|
this.http.post(uploadUrl,{ |
|
id: "", |
|
name: this.selectedPLanName, |
|
planType:Number(this.selectedPLanType), |
|
planMode: Number(this.defaultisshow), |
|
planLevel: PlanLevel, |
|
planCategory: Number(this.selectedPLanLevel), |
|
url: "", |
|
attachmentUrls: [`${this.objectName}`] |
|
},{params:{ |
|
companyId : this.data.companyId |
|
}}).subscribe(data=>{ |
|
this.dialogRef.close(data); |
|
}) |
|
}else{ |
|
console.log("上传出错!") |
|
} |
|
|
|
}) |
|
} |
|
|
|
//取消分块上传 |
|
cancel () { |
|
this.http.delete(`/api/MultipartUpload/PlanPlatform/${this.objectName}?uploadId=${this.uploadId}`).subscribe(data=>{ |
|
this.uploadProgress = 0; |
|
this.uploadisLoading= false; |
|
(<HTMLInputElement>document.getElementById('uploadFile')).value = null |
|
this.PartNumberETag =[] //清空保存返回的信息 |
|
const config = new MatSnackBarConfig(); |
|
config.verticalPosition = 'top'; |
|
config.duration = 3000 |
|
this.snackBar.open('取消上传成功!','确定',config); |
|
this.uploadover = false |
|
this.file = null |
|
}) |
|
} |
|
|
|
|
|
|
|
|
|
|
|
//导入word文件 |
|
fileInput(e){ |
|
this.file2 = e.target.files[0] |
|
} |
|
//点击下一步 |
|
selectedPLanType:any//所选预案类型 |
|
selectedPLanName:any//所选预案名称 |
|
selectedPLanLevel:any//所选预案级别 |
|
localup:boolean = false //本地上传 |
|
inputword:boolean = false //导入文档 |
|
onlineedit:boolean = false //在线编辑 |
|
website:boolean = false //网页地址 |
|
next(formdata){ |
|
//console.log(formdata.value.firstCtrlthree) |
|
//console.log(this.file) |
|
this.psw=false |
|
this.selectedPLanName = formdata.value.firstCtrlone |
|
this.selectedPLanType = formdata.value.firstCtrltwo |
|
this.selectedPLanLevel= formdata.value.firstCtrlthree |
|
if(formdata.value.firstCtrltwo=='16'){ //如果是卡片预案 |
|
this.localup = true |
|
this.inputword = true |
|
this.onlineedit = false |
|
this.website = false |
|
} |
|
if(formdata.value.firstCtrltwo=='1'){ //如果是2D预案 |
|
this.localup = true |
|
this.inputword = false |
|
this.onlineedit = true |
|
this.website = true |
|
} |
|
if(formdata.value.firstCtrltwo=='2' || formdata.value.firstCtrltwo=='4'){ |
|
this.localup = true |
|
this.inputword = false |
|
this.onlineedit = false |
|
this.website = true |
|
this.pswShow=true |
|
} |
|
if(this.selectedPLanType=='4'&&this.file!=undefined&&this.file.type!=null){ |
|
if(this.file.type=='image/png'||this.file.type=='image/jpeg'){ |
|
this.pswShow=true |
|
}else{this.pswShow=false} |
|
}else{this.pswShow=false} |
|
|
|
} |
|
setttt(){ |
|
this.pswShow=false |
|
this.psw=false |
|
} |
|
closediv(){ |
|
//console.log(this.file) |
|
if(this.file!=undefined){ |
|
this.cancel(); |
|
} |
|
|
|
this.dialogRef.close(); |
|
} |
|
|
|
|
|
|
|
// 提交创建 |
|
onSubmit(value){ |
|
let level = sessionStorage.getItem("level") |
|
// console.log(level) |
|
let PlanLevel |
|
if(level == '0'){ |
|
PlanLevel = 1 |
|
} |
|
if(level == '1'){ |
|
PlanLevel = 2 |
|
} |
|
if(level == '2'){ |
|
PlanLevel = 4 |
|
} |
|
if(level == '3'){ |
|
PlanLevel = 8 |
|
} |
|
if(this.selectedPLanType != "1"){//如果创建的不是二维预案 |
|
if(this.defaultisshow == '0' && this.file == null){ //如果是本地上传 |
|
const config = new MatSnackBarConfig(); |
|
config.verticalPosition = 'top'; |
|
config.duration = 3000 |
|
this.snackBar.open('请先上传文件','确定',config); |
|
} |
|
if(this.defaultisshow == '0' && this.file){ //如果是本地上传并且有文件 |
|
//先上传成功 |
|
this.startUploading("非二维") |
|
|
|
//再创建预案 |
|
// this.http.post("/api/PlanComponents",{ |
|
// id: "", |
|
// name: this.selectedPLanName, |
|
// planType:Number(this.selectedPLanType), |
|
// planMode: Number(this.defaultisshow), |
|
// planLevel: PlanLevel, |
|
// url: "", |
|
// attachmentUrls: [`${this.objectName}`] |
|
// },{params:{ |
|
// companyId : this.data.companyId |
|
// }}).subscribe(data=>{ |
|
// this.dialogRef.close(data); |
|
// }) |
|
} |
|
|
|
if(this.defaultisshow == '1'){//如果是导入则很复杂 |
|
const config = new MatSnackBarConfig(); |
|
config.verticalPosition = 'top'; |
|
config.duration = 3000 |
|
this.snackBar.open('暂不支持导入','确定',config); |
|
} |
|
if(this.defaultisshow == '3' && (this.webaddress == "" || this.webaddress == null)){ //如果是填写网址 |
|
const config = new MatSnackBarConfig(); |
|
config.verticalPosition = 'top'; |
|
config.duration = 3000 |
|
this.snackBar.open('请先输入网址','确定',config); |
|
} |
|
if(this.defaultisshow == '3' && this.webaddress){ //如果是填写网址 |
|
// console.log(99999,this.selectedPLanType) |
|
var reg = new RegExp('(http|https):\/\/([\w.!@#$%^&*()_+-=])*\s*') |
|
if(reg.test(this.webaddress)){ |
|
let body = { |
|
id: "", |
|
name: this.selectedPLanName, |
|
planType:Number(this.selectedPLanType), |
|
planMode: Number(this.defaultisshow), |
|
planCategory: Number(this.selectedPLanLevel), |
|
planLevel: PlanLevel, |
|
url: this.webaddress, |
|
attachmentUrls: null |
|
} |
|
//console.log(body) |
|
this.http.post("/api/PlanComponents",body,{params:{ |
|
companyId : this.data.companyId |
|
}}).subscribe(data=>{ |
|
// console.log("创建成功") |
|
this.dialogRef.close(data); |
|
}) |
|
}else{ |
|
const config = new MatSnackBarConfig(); |
|
config.verticalPosition = 'top'; |
|
config.duration = 3000 |
|
this.snackBar.open('请填写正确网址格式,需以http://或者https://开头的正确网址','确定',config); |
|
} |
|
|
|
} |
|
}else{ //如果创建的是二维预案 |
|
if(this.defaultisshow == '0' && this.file == null){ //如果是本地上传 |
|
const config = new MatSnackBarConfig(); |
|
config.verticalPosition = 'top'; |
|
config.duration = 3000 |
|
this.snackBar.open('请先上传文件','确定',config); |
|
} |
|
if(this.defaultisshow == '0' && this.file){ |
|
this.startUploading("二维") |
|
// let body = { |
|
// id: "", |
|
// name: this.selectedPLanName, |
|
// planType:Number(this.selectedPLanType), |
|
// planMode: Number(this.defaultisshow), |
|
// planLevel: PlanLevel, |
|
// url: "", |
|
// attachmentUrls: [`${this.objectName}`] |
|
// } |
|
// this.http.post("/api/PlanComponents2D",body,{params:{ |
|
// companyId : this.data.companyId |
|
// }}).subscribe(data=>{ |
|
// // console.log("创建成功") |
|
// this.dialogRef.close(data); |
|
// }) |
|
} |
|
if(this.defaultisshow == '2'){ //如果是在线编辑------>跳转编制工具 |
|
let body = { |
|
id: "", |
|
name: this.selectedPLanName, |
|
planType:Number(this.selectedPLanType), |
|
planMode: Number(this.defaultisshow), |
|
planLevel: PlanLevel, |
|
planCategory:Number(this.selectedPLanLevel), |
|
url: "", |
|
attachmentUrls: null |
|
} |
|
this.http.post("/api/PlanComponents2D",body,{params:{ |
|
companyId : this.data.companyId |
|
}}).subscribe(data=>{ |
|
// console.log("创建成功") |
|
this.dialogRef.close(data); |
|
}) |
|
} |
|
if(this.defaultisshow == '3' && (this.webaddress == "" || this.webaddress == null)){ //如果是填写网址 |
|
const config = new MatSnackBarConfig(); |
|
config.verticalPosition = 'top'; |
|
config.duration = 3000 |
|
this.snackBar.open('请先输入网址','确定',config); |
|
} |
|
if(this.defaultisshow == '3' && this.webaddress){ //如果是填写网址 |
|
|
|
var reg = new RegExp('(http|https):\/\/([\w.!@#$%^&*()_+-=])*\s*') |
|
if(reg.test(this.webaddress)){ |
|
let body = { |
|
id: "", |
|
name: this.selectedPLanName, |
|
planType:Number(this.selectedPLanType), |
|
planMode: Number(this.defaultisshow), |
|
planCategory: Number(this.selectedPLanLevel), |
|
planLevel: PlanLevel, |
|
url: this.webaddress, |
|
attachmentUrls: null |
|
} |
|
//console.log(body) |
|
this.http.post("/api/PlanComponents2D",body,{params:{ |
|
companyId : this.data.companyId |
|
}}).subscribe(data=>{ |
|
// console.log("创建成功") |
|
this.dialogRef.close(data); |
|
}) |
|
}else{ |
|
const config = new MatSnackBarConfig(); |
|
config.verticalPosition = 'top'; |
|
config.duration = 3000 |
|
this.snackBar.open('请填写正确网址格式,需以http://或者https://开头的正确网址','确定',config); |
|
} |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
} |
|
onSubmit2(value){ |
|
// console.log(this.webaddress) |
|
var reg = new RegExp('(http|https):\/\/([\w.!@#$%^&*()_+-=])*\s*') |
|
//console.log(reg.test(this.webaddress)) |
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//下载文件弹出框 |
|
@Component({ |
|
selector: 'downloadfile', |
|
templateUrl: './downloadFile.html', |
|
styleUrls: ['./entry-plan-look.component.scss'] |
|
}) |
|
export class DownloadFile { |
|
|
|
constructor(private http: HttpClient,public dialogRef: MatDialogRef<DownloadFile>,@Inject(MAT_DIALOG_DATA) public data,public snackBar: MatSnackBar) {} |
|
fileUrls:any //当前预案附件地址 |
|
fileDatas:any = [] |
|
selectedFileIndex : any = 0 |
|
selectedFileData : any |
|
|
|
name2:any //如果真实姓名为空时 |
|
ngOnInit(): void { |
|
this.name2 = this.data.element.name |
|
this.fileUrls = this.data.fileUrls |
|
this.fileUrls.forEach(item=>{ |
|
this.http.get('/api/ObjectMetadata/PlanPlatform/'+item).subscribe((data:any)=>{ |
|
data.filePige = (data.fileLength / (1024*1024)).toFixed(2) |
|
this.fileDatas.push(data) |
|
this.selectedFileData = data |
|
}) |
|
}) |
|
} |
|
onNoClick(): void { |
|
this.dialogRef.close(); |
|
} |
|
|
|
confirm(){ |
|
this.dialogRef.close(this.selectedFileData); |
|
} |
|
|
|
//点击想要下载的文件 |
|
addurl(item,key){ |
|
// console.log(item,key) |
|
this.selectedFileIndex = key |
|
this.selectedFileData = item |
|
} |
|
} |
|
|
|
|
|
//审批结果弹出框 |
|
@Component({ |
|
selector: 'auditresult', |
|
templateUrl: './auditresult.html', |
|
styleUrls: ['./entry-plan-look.component.scss'] |
|
}) |
|
export class AuditResult { |
|
|
|
constructor(private http: HttpClient,public dialogRef: MatDialogRef<AuditResult>,@Inject(MAT_DIALOG_DATA) public data,public snackBar: MatSnackBar) {} |
|
|
|
planName:any = this.data.element.name |
|
commitTime:any = this.data.element.committedTime |
|
commitOrganizationName:any = this.data.element.committerOrganizationName |
|
|
|
auditOrganizationName:any = this.data.element.auditorOrganizationName |
|
auditResult:any = this.data.element.auditStatus |
|
auditOpinion:any = this.data.element.auditOpinion |
|
ngOnInit(): void { |
|
|
|
} |
|
onNoClick(): void { |
|
this.dialogRef.close(); |
|
} |
|
} |
|
|
|
|
|
//改名弹出框 |
|
@Component({ |
|
selector: 'changename', |
|
templateUrl: './changename.html', |
|
styleUrls: ['./entry-plan-look.component.scss'] |
|
}) |
|
export class ChangeName { |
|
|
|
constructor(private http: HttpClient,public dialogRef: MatDialogRef<ChangeName>,@Inject(MAT_DIALOG_DATA) public data,public snackBar: MatSnackBar) {} |
|
planName:any//预案名称 |
|
ngOnInit(): void { |
|
this.planName = this.data.element.name |
|
} |
|
onNoClick(): void { |
|
this.dialogRef.close(); |
|
} |
|
onSubmit(value){ |
|
let headers = new HttpHeaders({ |
|
'Content-Type': 'text/json' |
|
}); |
|
let options = { |
|
headers |
|
}; |
|
let body = JSON.stringify(value.name); |
|
if(this.data.element.planType == 1){//如果是二维预案 |
|
this.http.put(`/api/PlanComponents2D/${this.data.element.id}`,body,options).subscribe(data=>{ |
|
this.dialogRef.close("success"); |
|
}) |
|
}else{ |
|
this.http.put(`/api/PlanComponents/${this.data.element.id}`,body,options).subscribe(data=>{ |
|
this.dialogRef.close("success"); |
|
}) |
|
} |
|
} |
|
} |
|
|
|
//全景图弹出框 |
|
@Component({ |
|
selector: 'PsViewer', |
|
templateUrl: './Photo-Sphere-Viewer.html', |
|
styleUrls: ['./entry-plan-look.component.scss'] |
|
}) |
|
export class PsViewer{ |
|
constructor(private router:Router,private http: HttpClient,public dialog: MatDialog,public snackBar: MatSnackBar,public dialogRef: MatDialogRef<PsViewer>,@Inject(MAT_DIALOG_DATA) public data: any) {} |
|
ngOnInit(): void { |
|
// console.log(this.data) |
|
const viewer = new Viewer({ |
|
container: document.querySelector('#viewer'), |
|
panorama:'/api/Objects/PlanPlatform/'+ this.data, |
|
|
|
}); |
|
} |
|
} |