上海预案管理平台
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.
 
 
 
 
 

1886 lines
69 KiB

import { Component, OnInit, ViewChild, Inject } from '@angular/core';
import { HttpClient, HttpHeaders, HttpErrorResponse } 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';
import Swiper from 'swiper';
import { resolve } from 'dns';
import { DomSanitizer } from '@angular/platform-browser';
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, private sanitizer: DomSanitizer) { }
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;
IsNewData=true //维护更新活新增
displayedColumns: string[] = ['state','planname', 'addpeople', 'addtime','planCategory', 'plantype', 'auditstate', 'weihustate','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.planType == 16 || e.planType == 4 || e.planType == 8) {
if (e.planType == 16&&e.attachmentUrls == null){
window.open(`/planManagement/createplanonlinefive?navIsOpen=false&companyId=${this.companyId}&planName=${e.name}&unitName=${this.unitdata.unitname}&planCategory=${e.planCategory}&planId=${e.id}&unitTypeId=${this.compantData.buildingTypes[0].id}&orName=${this.compantData.organizationName}&orId=${this.compantData.organizationId}&pattern=false`)
}else{
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 - 3, e.attachmentUrls[0].length) == 'JPG' || e.attachmentUrls[0].substr(e.attachmentUrls[0].length - 3, e.attachmentUrls[0].length) == 'png' || e.attachmentUrls[0].substr(e.attachmentUrls[0].length - 3, e.attachmentUrls[0].length) == 'jpeg' || e.attachmentUrls[0].substr(e.attachmentUrls[0].length - 3, e.attachmentUrls[0].length) == 'jpg') {
let data = e
const dialogRef = this.dialog.open(ImgDetails, {//调用open方法打开对话框并且携带参数过去
data: data.attachmentUrls,
});
dialogRef.afterClosed().subscribe();
} else {
let fetchUrl = e.attachmentUrls[0]
if (fetchUrl) {
let suffix = fetchUrl.split('.')[fetchUrl.split('.').length - 1].toLowerCase()
if (suffix == 'docx' || suffix == 'doc') {
let arr = fetchUrl.split('.')
arr[arr.length - 1] = 'pdf'
window.open(`/api/Objects/PlanPlatform/` + arr.join('.'))
} else if (suffix == 'pdf') {
window.open(`/api/Objects/PlanPlatform/` + fetchUrl)
} else {
let config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('该文件类型暂不支持在线查看', '确定', config);
}
}
}
}
}
if (e.planType == 1) { //如果是在线编辑
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.planType == 2) { //如果是跳转网页
if (e.url.indexOf('app') == 0) {
window.location.href = e.url
} else {
sessionStorage.setItem("url", e.url)
if ((e.url as string).includes('gis/threeDimensionalHome')) { //三维预案
window.open(`${e.url}?unitId=${this.companyId}&unitName=${this.unitdata.unitname}&editMode=false`)
} else {
window.open(`/planManagement/webLook`)
}
}
}
}
//编辑预案
editPlan(e) {
const config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
if(e.openRange!='未公开'||e.auditStatus!=8){
let isTrue = confirm('您确定编辑吗,若是公开预案会变成未公开状态,审核状态也会改变')
if(isTrue){
if (e.auditStatus == 8) {
if (e.planType == 1) { //如果是在线编辑
let id = e.id
let body = {};
let resetAudit = true
let headers = new HttpHeaders({
'Content-Type': 'text/json'
});
let options = {
headers
};
this.http.put(`/api/PlanComponents/${e.id}?resetAudit=${resetAudit}`, body, options).subscribe(data => {
this.getAllPlanComponents()
// this.lookPlan(e)
})
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}`);
}
else if (e.planType == 16) {
if (e.attachmentUrls == null) {
if(e.planMode==4){
window.open(`/planManagement/createplanonlinefive?navIsOpen=false&companyId=${this.companyId}&planName=${e.name}&unitName=${this.unitdata.unitname}&planCategory=${e.planCategory}&planId=${e.id}&unitTypeId=${this.compantData.buildingTypes[0].id}&orName=${this.compantData.organizationName}&orId=${this.compantData.organizationId}&pattern=true&planMode=${e.planMode}`)
}else{
window.open(`/planManagement/createplanonlinefive?navIsOpen=false&companyId=${this.companyId}&planName=${e.name}&unitName=${this.unitdata.unitname}&planCategory=${e.planCategory}&planId=${e.id}&unitTypeId=${this.compantData.buildingTypes[0].id}&orName=${this.compantData.organizationName}&orId=${this.compantData.organizationId}&pattern=true&planMode=${e.planMode}`)
}
}
else {
let body = {};
let resetAudit = true
let headers = new HttpHeaders({
'Content-Type': 'text/json'
});
let options = {
headers
};
this.http.put(`/api/PlanComponents/${e.id}?resetAudit=${resetAudit}`, body, options).subscribe(data => {
/* this.getAllPlanComponents()
this.lookPlan(e) */
const dialogRef = this.dialog.open(editUpload, {
width: "300px",
height: "150px",
data: { id:e.id, companyId: this.companyId, unitType: this.unitdata.unittype, unitName: this.unitdata.unitname },
disableClose: true
});
dialogRef.afterClosed().subscribe(data => {
this.getAllPlanComponents()
})
}/* ,err => {
this.snackBar.open(err,'确定',config);
} */)
}
}
else if (e.planType == 2) { //三维预案
const dialogRef = this.dialog.open(ChangeUrl, {
//改网址
data: { element: e }
});
dialogRef.afterClosed().subscribe(
data => {
if (data) {
const config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('修改成功!', '确定', config);
this.getAllPlanComponents()
}
}
);
} else {
this.snackBar.open('只有二维预案和文本预案可以编辑!', '确定', config);
}
} else {
//let isTrue = confirm('编辑后审核状态会成为未审核状态,您确定要编辑吗')
if (e.planType == 1) { //如果是在线编辑
let id = e.id
let body = {};
let resetAudit = true
let headers = new HttpHeaders({
'Content-Type': 'text/json'
});
let options = {
headers
};
this.http.put(`/api/PlanComponents/${e.id}?resetAudit=${resetAudit}`, body, options).subscribe(data => {
this.getAllPlanComponents()
// this.lookPlan(e)
}/* ,err => {
this.snackBar.open(err,'确定',config);
} */)
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}`);
}
else if (e.planType == 16) {
if (e.attachmentUrls == null) {
console.log(this.compantData)
window.open(`/planManagement/createplanonlinefive?navIsOpen=false&companyId=${this.companyId}&planName=${e.name}&unitName=${this.unitdata.unitname}&planCategory=${e.planCategory}&planId=${e.id}&unitTypeId=${this.compantData.buildingTypes[0].id}&orName=${this.compantData.organizationName}&orId=${this.compantData.organizationId}&planMode=${e.planMode}`)
}
else {
let body = {};
let resetAudit = true
let headers = new HttpHeaders({
'Content-Type': 'text/json'
});
let options = {
headers
};
this.http.put(`/api/PlanComponents/${e.id}?resetAudit=${resetAudit}`, body, options).subscribe(data => {
const dialogRef = this.dialog.open(editUpload, {
width: "300px",
height: "150px",
data: { id:e.id, companyId: this.companyId, unitType: this.unitdata.unittype, unitName: this.unitdata.unitname },
disableClose: true
});
dialogRef.afterClosed().subscribe(data => {
this.getAllPlanComponents()
})
}/* ,err => {
this.snackBar.open(err,'确定',config);
} */)
}
}
else if (e.planType == 2) { //三维预案
const dialogRef = this.dialog.open(ChangeUrl, {
data: { element: e }
});
dialogRef.afterClosed().subscribe(
data => {
if (data) {
const config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('修改成功!', '确定', config);
this.getAllPlanComponents()
}
}
);
} else {
this.snackBar.open('只有二维预案和文本预案可以编辑!', '确定', config);
}
}
}
}else{
if (e.planType == 1) { //如果是在线编辑
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}`);
}
else if (e.planType == 16) {
if (e.attachmentUrls == null) {
if(e.planMode==4){
window.open(`/planManagement/createplanonlinefive?navIsOpen=false&companyId=${this.companyId}&planName=${e.name}&unitName=${this.unitdata.unitname}&planCategory=${e.planCategory}&planId=${e.id}&unitTypeId=${this.compantData.buildingTypes[0].id}&orName=${this.compantData.organizationName}&orId=${this.compantData.organizationId}&pattern=true&planMode=${e.planMode}`)
}else{
window.open(`/planManagement/createplanonlinefive?navIsOpen=false&companyId=${this.companyId}&planName=${e.name}&unitName=${this.unitdata.unitname}&planCategory=${e.planCategory}&planId=${e.id}&unitTypeId=${this.compantData.buildingTypes[0].id}&orName=${this.compantData.organizationName}&orId=${this.compantData.organizationId}&pattern=true&planMode=${e.planMode}`)
}
}
else {
let body = {};
let resetAudit = true
let headers = new HttpHeaders({
'Content-Type': 'text/json'
});
let options = {
headers
};
this.http.put(`/api/PlanComponents/${e.id}?resetAudit=${resetAudit}`, body, options).subscribe(data => {
const dialogRef = this.dialog.open(editUpload, {
width: "300px",
height: "150px",
data: { id:e.id, companyId: this.companyId, unitType: this.unitdata.unittype, unitName: this.unitdata.unitname },
disableClose: true
});
dialogRef.afterClosed().subscribe(data => {
this.getAllPlanComponents()
})
//this.lookPlan(e)
}/* ,err => {
this.snackBar.open(err,'确定',config);
} */)
}
}
else if (e.planType == 2) { //三维预案
const dialogRef = this.dialog.open(ChangeUrl, {
//改网址
data: { element: e }
});
dialogRef.afterClosed().subscribe(
data => {
if (data) {
const config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('修改成功!', '确定', config);
this.getAllPlanComponents()
}
}
);
/* if (e.url.indexOf('app') == 0) {
window.location.href = e.url
} else {
sessionStorage.setItem("url", e.url)
if ((e.url as string).includes('gis/threeDimensionalHome')) { //三维预案
window.open(`${e.url}?unitId=${this.companyId}&unitName=${this.unitdata.unitname}&editMode=true`)
} else {
window.open(`/planManagement/webLook`)
}
} */
} else {
this.snackBar.open('只有二维预案和文本预案可以编辑!', '确定', config);
}
/* else {
if (e.planType == 1) { //如果是在线编辑
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}`);
}
else if (e.planType == 16) {
if (e.attachmentUrls == null) {
console.log(this.compantData)
window.open(`/planManagement/createplanonlinefive?navIsOpen=false&companyId=${this.companyId}&planName=${e.name}&unitName=${this.unitdata.unitname}&planCategory=${e.planCategory}&planId=${e.id}&unitTypeId=${this.compantData.buildingTypes[0].id}&orName=${this.compantData.organizationName}&orId=${this.compantData.organizationId}`)
}
else {
let body = {};
let resetAudit = true
let headers = new HttpHeaders({
'Content-Type': 'text/json'
});
let options = {
headers
};
this.http.put(`/api/PlanComponents/${e.id}?resetAudit=${resetAudit}`, body, options).subscribe(data => {
this.getAllPlanComponents()
this.lookPlan(e)
})
}
}
else if (e.planType == 2) { //三维预案
const dialogRef = this.dialog.open(ChangeUrl, {
data: { element: e }
});
dialogRef.afterClosed().subscribe(
data => {
if (data) {
const config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('修改成功!', '确定', config);
this.getAllPlanComponents()
}
}
);
} else {
this.snackBar.open('只有二维预案和文本预案可以编辑!', '确定', config);
}
} */
}
}
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()
}
}
);
}
//获得所有预案组件
audit:boolean
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
/* if(this.tabledataSource.isNewData){
this.tabledataSource.auditStatus==8?this.audit=true:false
}else{
(this.tabledataSource.newVerifyState=='待终审'&&this.tabledataSource.newVerifyState=='审核中'&&this.tabledataSource.maintenanceVerifyState!='未提交审核')?this.audit=false:true
} */
})
}
//删除预案
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()
})
}
}
//撤销审核
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
console.log(element)
if(element.planType==16&&(element.planMode==4||element.planMode==2)){
const dialogRef = this.dialog.open(wenbenUpload, {
width: "180px",
height:"200px",
disableClose: true,
data: {src:`/planManagement/createplanonlinefive?navIsOpen=false&companyId=${this.companyId}&planName=${element.name}&unitName=${this.unitdata.unitname}&planCategory=${element.planCategory}&planId=${element.id}&unitTypeId=${this.compantData.buildingTypes[0].id}&orName=${this.compantData.organizationName}&orId=${this.compantData.organizationId}&pattern=false&xiazai=true`}
});
//window.open(`/planManagement/createplanonlinefive?navIsOpen=false&companyId=${this.companyId}&planName=${element.name}&unitName=${this.unitdata.unitname}&planCategory=${element.planCategory}&planId=${element.id}&unitTypeId=${this.compantData.buildingTypes[0].id}&orName=${this.compantData.organizationName}&orId=${this.compantData.organizationId}&pattern=false&xiazai=true`)
}else{
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
console.log(file)
if (file && fileSize <= shardSize) { //<=10MB时直接下载
this.downloadisLoading = true
// this.setFileLoading()
this.http.get(`/api/Objects/PlanPlatform/${file.objectName}`, { responseType: 'blob' },).subscribe(data => {
console.log(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, unitType: this.unitdata.unittype, unitName: this.unitdata.unitname },
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}&orName=${this.route.snapshot.queryParams.orName}&orId=${this.route.snapshot.queryParams.orId}`);
}
}
}
);
}
//上传word转在线编制
spinner=false//圈圈是否存在
async upzhuanMb(element){
this.spinner=true
const config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
let objectName//预案文件名称
let formData = new FormData()
//模板导入接口传参
let type=this.unitdata.unittype=='高层建筑'?1:this.unitdata.unittype=='居民小区'?2:this.unitdata.unittype=='厂房'?3
:(this.unitdata.unittype=='商市场'||this.unitdata.unittype=='医院'||this.unitdata.unittype=='学校'
||this.unitdata.unittype=='宾馆'||this.unitdata.unittype=='娱乐场所'||this.unitdata.unittype=='餐饮业'
||this.unitdata.unittype=='影剧院'||this.unitdata.unittype=='展览建筑'||this.unitdata.unittype=='养老院'
||this.unitdata.unittype=='会议中心')?4:this.unitdata.unittype=='储罐类'?'StorageTankFivePlan'
:this.unitdata.unittype=='化工生产'?'ChemicalProductionFivePlan':this.unitdata.unittype=='农村'?'CountrysideFivePlan':''
let blob=[]
/*
调用下载接口获取文件流,并赋值给blob
*/
let fileRuquest=await new Promise((resolve,reject)=>{
this.http.get(`/api/ObjectMetadata/PlanPlatform/`+element.attachmentUrls[0]).subscribe((obdata: any) => {
objectName=obdata.objectName
this.http.get(`/api/Objects/PlanPlatform/${objectName}`, { responseType: 'blob' },).subscribe(blobdata => {
resolve(blobdata)
})
})
})
blob.push(fileRuquest)//接收返回的blob类型数据
let file=new File(blob,objectName)//转化为file类型
formData.append('file',file)
let pData//接受返回的模板信息数据
/*
调用模板导入接口,获取在线编制的json,并赋值给pData
*/
let pRequest=await new Promise((resolve,rejest)=>{
this.http.post(`/api/OfficeExtract/ExtractWordPlan?type=${type}`,formData).subscribe((data:any)=>{
resolve(data)
},err=>{
this.spinner=false
this.snackBar.open('解析失败,请确定好格式再重新上传!', '确定', config);
})
})
pData=pRequest
/* 调用新建预案接口,新建一条新的预案,并跳转新建在线编制页面 */
let body={
name:(element.planCategory==3?'Ⅲ级':element.planCategory==4?'Ⅳ级':element.planCategory==5?'Ⅴ级':'')+ element.name+'转在线编制',
planType: element.planType,
planMode: 2,
planLevel: element.planLevel,
planCategory:element.planCategory,
webTextData:JSON.stringify(pData)
}
let planData
let newyuan=await new Promise((resolve,reject)=>{
this.http.post('/api/PlanComponents', body, {
params: {
companyId: this.route.snapshot.queryParams.unitId
}
}).subscribe(plandata => {
resolve(plandata)
})
})
planData=newyuan
window.open(`/planManagement/createplanonlinefive?navIsOpen=false&companyId=${this.route.snapshot.queryParams.unitId}&planName=${planData.name}&unitName=${this.unitdata.unitname}&planCategory=${planData.planCategory}&planId=${planData.id}&&wordChange=true`)
this.getAllPlanComponents()
this.spinner=false
}
}
//新建预案弹出框
@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 = false //上传input框是否显示
isweb: boolean = false //web输入框是否显示
isinput: boolean = false //编制按钮是否显示
defaultisshow = '0' //默认显示上传input框
pswShow = false //是否为全景图选项默认不显示
psw//是否为全景图
cadPlan//是否为卡片预案
//选择radio
selectradio(e) {
if (e.value == "1") { //如果点击本地上传
this.isup = true
this.isinput = false
this.isweb = false
this.webaddress = ""
}
if (e.value == "4") { //如果点击导入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 //网页地址
inputNew :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' && formdata.value.firstCtrlthree == '4') { //如果是文本预案
this.localup = true
this.inputword = false
this.onlineedit = false
this.website = false
}
if (formdata.value.firstCtrltwo == '16' ) {//&& formdata.value.firstCtrlthree != '4'
this.localup = true
this.inputword = true
this.onlineedit = false
this.website = false
this.inputNew=true
}
if (formdata.value.firstCtrltwo == '16' && formdata.value.firstCtrlthree != '4') {//&& formdata.value.firstCtrlthree != '4'
this.localup = true
this.inputword = true
this.inputNew=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
this.inputNew=false
}
if (formdata.value.firstCtrltwo == '2' || formdata.value.firstCtrltwo == '4') {
this.localup = true
this.inputword = false
this.inputNew=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
this.website = false
} 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();
}
//文本预案在线编制跳转
newleftTabledata
planData
createWord(haveNew) {
const config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
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
}
this.http.get("/api/PlanTemplate").subscribe((data: any) => {
this.newleftTabledata = data
this.newleftTabledata.forEach((value, index, array) => {
value.data = JSON.parse(value.data)
})
this.http.get("/api/BuildingTypes").subscribe((buildData: any) => {
this.newleftTabledata.forEach((value, index, array) => {
buildData.forEach((element, i, buildArray) => {
if (value.buildingTypeId == element.id) {
array[index].unitname = buildArray[i].name
array[index].facilityCategoryId = buildArray[i].facilityCategoryId
}
});
})
let open = this.newleftTabledata.filter((value, index, array) => {
return value.unitname == this.data.unitType && value.planCategory == this.selectedPLanLevel
})
if(haveNew==true){
this.http.post('/api/PlanComponents', {
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(plandata => {
this.planData = plandata
this.dialogRef.close(plandata);
//console.log(plandata)
window.open(`/planManagement/createplanonlinefive?navIsOpen=false&companyId=${this.data.companyId}&planName=${this.planData.name}&unitName=${this.data.unitName}&planCategory=${this.selectedPLanLevel}&planId=${this.planData.id}&haveNew=${haveNew}&planMode=${this.defaultisshow}`)
})
}else{
if (open.length > 0) {
this.http.post('/api/PlanComponents', {
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(plandata => {
this.planData = plandata
this.dialogRef.close(plandata);
//console.log(plandata)
window.open(`/planManagement/createplanonlinefive?navIsOpen=false&companyId=${this.data.companyId}&planName=${this.planData.name}&unitName=${this.data.unitName}&planCategory=${this.selectedPLanLevel}&planId=${this.planData.id}&haveNew=${haveNew}`)
})
} else {
this.snackBar.open('请先创建模板!', '确定', config);
}
}
})
})
//window.open('')
}
// 提交创建
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 == '1' && this.file == null) { //如果是本地上传
const config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('请先上传文件', '确定', config);
}
if (this.defaultisshow == '1' && 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 == '2') {//如果是导入则很复杂
const config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
//this.snackBar.open('暂不支持导入','确定',config);
this.createWord(false)
}
if(this.defaultisshow == '4'){
this.createWord(true)
}
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|app1|app2):\/\/([\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 => {
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 == '1' && this.file == null) { //如果是本地上传
const config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('请先上传文件', '确定', config);
}
if (this.defaultisshow == '1' && 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 = {
name: value.name
}
let body2d = JSON.stringify(value.name)
if (this.data.element.planType == 1) {//如果是二维预案
this.http.put(`/api/PlanComponents2D/${this.data.element.id}`, body2d, 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,
});
}
}
//普通图片弹窗
@Component({
selector: 'imgdetails',
templateUrl: './previewImg.html',
styleUrls: ['./entry-plan-look.component.scss']
})
export class ImgDetails {
constructor(private http: HttpClient, public dialog: MatDialog, public dialogRef: MatDialogRef<ImgDetails>,
@Inject(MAT_DIALOG_DATA) public data) { }
testSwiper: Swiper;
ngOnInit(): void {
//console.log(this.data)
this.allImages = []
this.data.forEach(element => {
element = `/api/Objects/PlanPlatform/${element}?x-oss-process=image/auto-orient,1`
this.allImages.push(element)
});
//this.allImages.push(`${this.data.attachmentUrls[0]}?x-oss-process=image/auto-orient,1`)
}
ngAfterViewInit() {
this.testSwiper = new Swiper('.swiper-container', {
lazy: true,
direction: 'horizontal',
loop: false,
// 如果需要前进后退按钮
navigation: {
nextEl: '.swiper-button-next',
prevEl: '.swiper-button-prev',
}
});
}
allImages: any; //展示所有的图片
rotationAngle: number = 0; //旋转角度
//旋转图片
rotate() {
this.rotationAngle = this.rotationAngle + 90
if (this.rotationAngle === 360) { this.rotationAngle = 0 }
}
}
//修改三维预案地址
@Component({
selector: 'changename',
templateUrl: './changeurl.html',
styleUrls: ['./entry-plan-look.component.scss']
})
export class ChangeUrl{
constructor(private http: HttpClient, public dialogRef: MatDialogRef<ChangeUrl>, @Inject(MAT_DIALOG_DATA) public data, public snackBar: MatSnackBar) { }
planUrl: any//预案路径
updata//修改后的data
ngOnInit(): void {
this.planUrl = this.data.element.url
}
onNoClick(): void {
this.dialogRef.close();
}
onSubmit(value) {
console.log(value)
let headers = new HttpHeaders({
'Content-Type': 'text/json'
});
let options = {
headers
};
let body = {
url: value.name,
auditStatus:8
}
this.http.put(`/api/PlanComponents/${this.data.element.id}`, body, options).subscribe(data => {
console.log(data)
this.updata=data
this.dialogRef.close("success");
sessionStorage.setItem("url", this.updata.url)
if ((this.updata.url as string).includes('gis/threeDimensionalHome')) { //三维预案
window.open(`${this.updata.url}?unitId=${this.updata.companyId}&unitName=${this.updata.name}&editMode=true`)
} else {
window.open(`/planManagement/webLook`)
}
})
}
}
//编辑上传文件
@Component({
selector: 'editUpload',
templateUrl: './upLoad.html',
styleUrls: ['./entry-plan-look.component.scss']
})
export class editUpload{
constructor(private http: HttpClient, public dialogRef: MatDialogRef<editUpload>, @Inject(MAT_DIALOG_DATA) public data, public snackBar: MatSnackBar) { }
planName: any//预案名称
ngOnInit(): void {
//console.log(this.data)
}
onNoClick(): void {
this.dialogRef.close();
}
//上传文件↓
file: any; //上传的文件
fileName: any; //上传文件name
uploadisLoading: boolean = false; //进度条loading加载
uploadProgress: number = 0; //进度条进度
objectName: any; //上传对象名
uploadId: any; //上传分块上传事件编号
lastyuanData //之前的预案数据
//上传
upload() {
document.getElementById('up').click()
}
//上传文件input
filechange(e) {
this.file = e.target.files[0] || null //上传的文件
}
//上传文件
startUploading() {
console.log(this.file)
let file = this.file || null //获取上传的文件
let fileSize = file.size || null //上传文件的总大小
let shardSize = 5 * 1024 * 1024 //5MB一个分片
// console.log(this.psw)
if(this.file!=undefined){
if (file && fileSize <= shardSize) { //上传文件<=5MB时
let formData = new FormData()
formData.append("file", file)
this.http.post(`/api/Objects/PlanPlatform/${this.data.companyId}/2D`, formData).subscribe((data: any) => {
this.objectName = data.objectName
let headers = new HttpHeaders({
'Content-Type': 'text/json'
});
let options = {
headers
};
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 = "/api/PlanComponents"
this.http.get(`/api/PlanComponents/${this.data.id}`).subscribe(yuandata => {
console.log(yuandata)
this.lastyuanData=yuandata
this.lastyuanData.attachmentUrls[0]=this.objectName
this.http.put(`/api/PlanComponents/${this.data.id}`, this.lastyuanData,options).subscribe(data => {
this.dialogRef.close(data);
})
})
})
} else if (file && fileSize > shardSize) { //上传文件>5MB时,分块上传
let data = { filename: file.name }
//this.uploadisLoading = tru
this.subsectionUploading()
}
}
else{
const config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('请选择文件!', '确定', config);
}
}
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循环
}
uploadover: any = false //上传完成之后提示
//完成分块上传
endUploading() {
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")
let headers = new HttpHeaders({
'Content-Type': 'text/json'
});
let options = {
headers
};
// 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 = "/api/PlanComponents"
if (this.uploadover) {//如果上次成功了才创建
this.http.get(`/api/PlanComponents/${this.data.id}`).subscribe(yuandata => {
console.log(yuandata)
this.lastyuanData=yuandata
this.lastyuanData.attachmentUrls[0]=this.objectName
this.http.put(`/api/PlanComponents/${this.data.id}`, this.lastyuanData,options).subscribe(data => {
this.dialogRef.close(data);
})
})
} else {
console.log("上传出错!")
}
})
}
}
//在线编制文本预案下载
@Component({
selector: 'wenbenUpload',
templateUrl: './upNew.html',
styleUrls: ['./entry-plan-look.component.scss']
})
export class wenbenUpload{
constructor(private http: HttpClient, public dialogRef: MatDialogRef<wenbenUpload>, @Inject(MAT_DIALOG_DATA) public data, public snackBar: MatSnackBar, private sanitizer: DomSanitizer) { }
ngOnInit(): void {
console.log(this.data)
window.setTimeout(()=>{
this.dialogRef.close();
},7500)
}
src=this.sanitizer.bypassSecurityTrustResourceUrl(this.data.src);
}