cmat 0.0.31 → 0.0.32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -80,7 +80,7 @@ declare class CmatFilesUtilService implements OnDestroy {
|
|
|
80
80
|
uploadFile(file: FormData): Observable<any>;
|
|
81
81
|
uploadFileToProcessed(file: FormData): Observable<any>;
|
|
82
82
|
deleteFile(fileId: string): Observable<any>;
|
|
83
|
-
getFileList(
|
|
83
|
+
getFileList(queryData: object, pageIndex?: number, pageSize?: number): Observable<any>;
|
|
84
84
|
static ɵfac: i0.ɵɵFactoryDeclaration<CmatFilesUtilService, never>;
|
|
85
85
|
static ɵprov: i0.ɵɵInjectableDeclaration<CmatFilesUtilService>;
|
|
86
86
|
}
|
|
@@ -76,15 +76,9 @@ class CmatFilesUtilService {
|
|
|
76
76
|
headers: CmatUtilsService.getRequestCryptoHeaders(fileId)
|
|
77
77
|
}).pipe(catchError(err => CmatUtilsService.handleError(err)));
|
|
78
78
|
}
|
|
79
|
-
getFileList(
|
|
80
|
-
const query = {
|
|
81
|
-
ids,
|
|
82
|
-
fileName,
|
|
83
|
-
fileCategory,
|
|
84
|
-
searchDate
|
|
85
|
-
};
|
|
79
|
+
getFileList(queryData, pageIndex = -1, pageSize = -1) {
|
|
86
80
|
if (this._config.enableDataProtect) {
|
|
87
|
-
return this._http.post(`${this._config.fileUrl}/${pageIndex}/${pageSize}`, CmatUtilsService.getEncryptData(JSON.stringify(
|
|
81
|
+
return this._http.post(`${this._config.fileUrl}/${pageIndex}/${pageSize}`, CmatUtilsService.getEncryptData(JSON.stringify(queryData)), {
|
|
88
82
|
headers: CmatUtilsService.getRequestCryptoHeaders('fileList'),
|
|
89
83
|
responseType: 'text'
|
|
90
84
|
})
|
|
@@ -93,7 +87,7 @@ class CmatFilesUtilService {
|
|
|
93
87
|
map((res) => JSON.parse(CmatUtilsService.getDecryptData(res))), catchError(err => CmatUtilsService.handleError(err)));
|
|
94
88
|
}
|
|
95
89
|
else {
|
|
96
|
-
return this._http.post(`${this._config.fileUrl}/${pageIndex}/${pageSize}`,
|
|
90
|
+
return this._http.post(`${this._config.fileUrl}/${pageIndex}/${pageSize}`, queryData, {
|
|
97
91
|
headers: CmatUtilsService.getRequestCryptoHeaders('fileList'),
|
|
98
92
|
responseType: 'json'
|
|
99
93
|
})
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cmat-components-upload.mjs","sources":["../../../projects/cmat/components/upload/files.util.service.ts","../../../projects/cmat/components/upload/upload.component.ts","../../../projects/cmat/components/upload/upload.component.html","../../../projects/cmat/components/upload/upload-queue/upload-queue.component.ts","../../../projects/cmat/components/upload/upload-queue/upload-queue.component.html","../../../projects/cmat/components/upload/cmat-components-upload.ts"],"sourcesContent":["import { HttpClient } from '@angular/common/http';\r\nimport { Injectable, OnDestroy, inject } from '@angular/core';\r\nimport { Observable, Subject, catchError, map, takeUntil, tap } from 'rxjs';\r\nimport { IUrlStateConfig, CmatUrlStateConfigService } from 'cmat/services/config';\r\nimport { CmatUtilsService } from 'cmat/services/utils';\r\nimport { FileListModel } from './files.type';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CmatFilesUtilService implements OnDestroy {\r\n private _http = inject(HttpClient);\r\n private _urlStateConfigService = inject(CmatUrlStateConfigService);\r\n\r\n private _config: IUrlStateConfig;\r\n private _unsubscribeAll: Subject<void> = new Subject<void>();\r\n\r\n constructor() {\r\n this._urlStateConfigService.config$\r\n .pipe(takeUntil(this._unsubscribeAll))\r\n .subscribe((config: IUrlStateConfig) => {\r\n this._config = config;\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this._unsubscribeAll.next(void 0);\r\n this._unsubscribeAll.complete();\r\n }\r\n\r\n downloadFile(fileId: string, isStream: boolean = true): Observable<any> {\r\n return this._http.get(`${this._config.fileUrl}/download/${fileId}`, {\r\n headers: CmatUtilsService.getRequestCryptoHeaders(fileId),\r\n observe: 'response',\r\n reportProgress: true,\r\n responseType: 'blob',\r\n params: {\r\n isStream\r\n }\r\n },).pipe<any>(\r\n catchError(CmatUtilsService.handleError));\r\n }\r\n\r\n downloadFileZip(fileIds?: string[]): Observable<any> {\r\n return this._http.post(`${this._config.fileUrl}/download`, fileIds, {\r\n headers: CmatUtilsService.getRequestCryptoHeaders('fileZip'),\r\n observe: 'response',\r\n reportProgress: true,\r\n responseType: 'blob',\r\n }).pipe<any>(\r\n catchError(CmatUtilsService.handleError));\r\n }\r\n\r\n uploadFile(file: FormData): Observable<any> {\r\n return this._http.post(`${this._config.fileUrl}/upload`, file, {\r\n headers: CmatUtilsService.getRequestCryptoHeaders('files'),\r\n observe: 'events',\r\n reportProgress: true,\r\n responseType: 'json'\r\n }).pipe(\r\n tap((res: any) => res),\r\n catchError(CmatUtilsService.handleError));\r\n }\r\n\r\n uploadFileToProcessed(file: FormData): Observable<any> {\r\n return this._http.post(`${this._config.fileUrl}/upload/finish`, file, {\r\n headers: CmatUtilsService.getRequestCryptoHeaders('files'),\r\n observe: 'events',\r\n reportProgress: true,\r\n responseType: 'json'\r\n }).pipe(\r\n tap((res: any) => res),\r\n catchError(CmatUtilsService.handleError));\r\n }\r\n\r\n deleteFile(fileId: string): Observable<any> {\r\n return this._http.delete(`${this._config.fileUrl}/${fileId}`, {\r\n headers: CmatUtilsService.getRequestCryptoHeaders(fileId)\r\n }).pipe(\r\n catchError(err => CmatUtilsService.handleError(err))\r\n );\r\n }\r\n\r\n getFileList(ids?: [], fileName?: string, fileCategory?: string, searchDate?: Date, pageIndex: number = -1, pageSize: number = -1): Observable<any> {\r\n const query = {\r\n ids,\r\n fileName,\r\n fileCategory,\r\n searchDate\r\n };\r\n if (this._config.enableDataProtect) {\r\n return this._http.post(`${this._config.fileUrl}/${pageIndex}/${pageSize}`,\r\n CmatUtilsService.getEncryptData(JSON.stringify(query)),\r\n {\r\n headers: CmatUtilsService.getRequestCryptoHeaders('fileList'),\r\n responseType: 'text'\r\n }\r\n )\r\n .pipe(\r\n // retry(3), // retry a failed request up to 3 times\r\n map((res: string) => JSON.parse(CmatUtilsService.getDecryptData(res))),\r\n catchError(err => CmatUtilsService.handleError(err))\r\n );\r\n } else {\r\n return this._http.post<FileListModel>(`${this._config.fileUrl}/${pageIndex}/${pageSize}`, query, {\r\n headers: CmatUtilsService.getRequestCryptoHeaders('fileList'),\r\n responseType: 'json'\r\n })\r\n .pipe(\r\n // retry(3), // retry a failed request up to 3 times\r\n tap((res: FileListModel) => res),\r\n catchError(err => CmatUtilsService.handleError(err))\r\n );\r\n }\r\n }\r\n}\r\n","import { NgClass } from '@angular/common';\r\nimport { HttpEventType } from '@angular/common/http';\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, OnDestroy, OnInit, Output, ViewEncapsulation, inject } from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { saveAs } from 'file-saver-es';\r\nimport { Subject, takeUntil } from 'rxjs';\r\nimport { CmatBytesPipe } from 'cmat/pipes/bytes';\r\nimport { CmatUtilsService } from 'cmat/services/utils';\r\nimport { FileModel } from './files.type';\r\nimport { CmatFilesUtilService } from './files.util.service';\r\n\r\n@Component({\r\n selector: 'cmat-upload',\r\n templateUrl: './upload.component.html',\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n exportAs: 'cmatUpload',\r\n imports: [MatButtonModule, MatIconModule, MatProgressBarModule, MatTooltipModule, CmatBytesPipe, NgClass]\r\n})\r\nexport class CmatUploadComponent implements OnInit, OnDestroy {\r\n @Input()\r\n fileAlias: string = 'fileData';\r\n\r\n @Input()\r\n filePath: string = '';\r\n\r\n @Input()\r\n fileCategory: string = '';\r\n\r\n @Input()\r\n editMode: boolean = false;\r\n\r\n @Input() autoUpload = true;\r\n\r\n @Input()\r\n id: string;\r\n\r\n @Output() removeEvent = new EventEmitter<CmatUploadComponent>();\r\n @Output() uploadEvent = new EventEmitter<any>();\r\n\r\n progressPercentage: number = 0;\r\n loaded: number = 0;\r\n total: number = 0;\r\n isUploading: boolean = false;\r\n\r\n private _fileService = inject(CmatFilesUtilService);\r\n private _changeDetectorRef = inject(ChangeDetectorRef);\r\n\r\n private _file: any;\r\n private _unsubscribeAll: Subject<any> = new Subject<any>();\r\n\r\n @Input()\r\n get file(): any {\r\n return this._file;\r\n }\r\n set file(file: any) {\r\n this._file = file;\r\n this.total = this._file.size;\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/member-ordering\r\n get fileType(): 'csv' | 'gif' | 'word' | 'excel' | 'jpg' | 'outlook' | 'pdf' | 'png' | 'ppt' | 'file' | 'text' | 'video' | 'zip' {\r\n return CmatUtilsService.getFileType(this.file.type);\r\n }\r\n\r\n ngOnInit(): void {\r\n if (this.autoUpload && this.id === null) {\r\n this.upload();\r\n }\r\n }\r\n ngOnDestroy(): void {\r\n this._unsubscribeAll.next(void 0);\r\n this._unsubscribeAll.complete();\r\n }\r\n\r\n\r\n upload(): void {\r\n this.isUploading = true;\r\n const fileModel = {\r\n id: null,\r\n fileName: this.file.name,\r\n length: this.file.size,\r\n fileCategory: this.fileCategory,\r\n filePath: this.filePath,\r\n fileType: 'file',\r\n data: this.file\r\n } as FileModel;\r\n\r\n fileModel.fileType = this.fileType;\r\n\r\n const formData = new FormData();\r\n\r\n formData.set('fileData', this._file, this._file.name);\r\n formData.append('fileInfo', JSON.stringify(fileModel));\r\n\r\n this._fileService.uploadFile(formData).pipe(\r\n takeUntil(this._unsubscribeAll)\r\n ).subscribe((event: any) => {\r\n if (event.type === HttpEventType.UploadProgress) {\r\n this.progressPercentage = Math.floor(event.loaded * 100 / event.total);\r\n this.loaded = event.loaded;\r\n this.total = event.total;\r\n }\r\n if (event.type === HttpEventType.Response) {\r\n this.id = event.body.id;\r\n this.file.id = event.body.id;\r\n\r\n this.isUploading = false;\r\n }\r\n\r\n this.uploadEvent.emit(this.file);\r\n\r\n this._changeDetectorRef.markForCheck();\r\n });\r\n }\r\n\r\n download(): void {\r\n this._fileService.downloadFile(this.id).pipe(\r\n takeUntil(this._unsubscribeAll)\r\n ).subscribe((file: any) => {\r\n saveAs(new Blob([file.body]), this.file.fileName);\r\n });\r\n }\r\n\r\n remove(): void {\r\n this.removeEvent.emit(this);\r\n }\r\n}\r\n","<div class=\"flex flex-col\">\r\n <div class=\"flex flex-row items-center\">\r\n <span class=\"flex items-center px-1\">\r\n <mat-icon class=\"icon-size-6 text-hint\"\r\n [svgIcon]=\"fileType\"></mat-icon>\r\n </span>\r\n <span matTooltip=\"{{file.name}}\"\r\n class=\"text-sm flex flex-auto whitespace-nowrap overflow-x-hidden text-ellipsis\">{{file.name}}({{file.size | cmatBytes}})</span>\r\n <span class=\"flex flex-row gap-1 print:hidden\">\r\n @if(id===null){\r\n <button mat-icon-button color=\"primary\" class=\"w-8 min-h-8 h-8 max-w-8\" [ngClass]=\"{'disabled' : isUploading}\"\r\n (click)=\"upload()\">\r\n <mat-icon class=\"icon-size-5\" [svgIcon]=\"'mat_outline:file_upload'\"></mat-icon>\r\n </button>\r\n }\r\n\r\n @if(id!==null){\r\n <button mat-icon-button color=\"primary\" class=\"w-8 min-h-8 h-8 max-w-8\" (click)=\"download()\">\r\n <mat-icon class=\"icon-size-5\" [svgIcon]=\"'mat_outline:file_download'\"></mat-icon>\r\n </button>\r\n }\r\n\r\n @if(editMode){\r\n <button mat-icon-button color=\"warn\" class=\"w-8 min-h-8 h-8 max-w-8\" (click)=\"remove()\">\r\n <mat-icon class=\"icon-size-5\" [svgIcon]=\"'heroicons_solid:trash'\"></mat-icon>\r\n </button>\r\n }\r\n </span>\r\n </div>\r\n @if(id===null){\r\n <mat-progress-bar [value]=\"progressPercentage\"></mat-progress-bar>\r\n <div class=\"text-sm block whitespace-nowrap overflow-x-hidden text-ellipsis\">\r\n <span>{{progressPercentage}}%</span><span> {{loaded | cmatBytes}} of {{total | cmatBytes}}</span>\r\n </div>\r\n }\r\n</div>","import { AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, HostListener, Input, OnDestroy, Output, QueryList, ViewChildren, ViewEncapsulation, forwardRef, inject } from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatListModule } from '@angular/material/list';\r\nimport { Subject, takeUntil } from 'rxjs';\r\nimport { CmatMediaWatcherService } from 'cmat/services/media-watcher';\r\nimport { CmatUploadComponent } from '../upload.component';\r\n\r\n@Component({\r\n selector: 'cmat-upload-queue',\r\n templateUrl: './upload-queue.component.html',\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n exportAs: 'cmatUploadQueue',\r\n imports: [MatCardModule, MatListModule, MatButtonModule, MatIconModule, CmatUploadComponent]\r\n})\r\nexport class CmatUploadQueueComponent implements OnDestroy, AfterViewInit {\r\n @ViewChildren(forwardRef(() => CmatUploadComponent)) fileUploads: QueryList<CmatUploadComponent>;\r\n @Input()\r\n fileAlias: string = 'fileData';\r\n\r\n @Input()\r\n filePath: string = '';\r\n @Input()\r\n fileCategory: string;\r\n @Input()\r\n required: boolean = false;\r\n\r\n @Input()\r\n autoUpload: boolean = true;\r\n\r\n @Input() multiple: boolean = true;\r\n @Input() accept: string = '';\r\n @Input() title: string = '附件';\r\n @Input() editMode: boolean = false;\r\n @Input()\r\n filesData: any[] = [];\r\n\r\n @Output() outputRemoveIdEvent = new EventEmitter<string>();\r\n @Output() outputUploadIdEvent = new EventEmitter<string>();\r\n @Output() outputFilesDataEvent = new EventEmitter<any>();\r\n\r\n public id = 'cmatupload-' + Math.floor(Math.random() * 1000000);\r\n\r\n isHandSet: boolean;\r\n\r\n private _changeDetectorRef = inject(ChangeDetectorRef);\r\n private _cmatMediaWatcherService = inject(CmatMediaWatcherService);\r\n private _elementRef = inject(ElementRef);\r\n\r\n private _unsubscribeAll: Subject<any> = new Subject<any>();\r\n\r\n\r\n constructor() {\r\n this._cmatMediaWatcherService.onMediaChange$\r\n .pipe(takeUntil(this._unsubscribeAll))\r\n .subscribe(({ matchingAliases }) => {\r\n this.isHandSet = !matchingAliases.includes('lg');\r\n\r\n this._changeDetectorRef.markForCheck();\r\n });\r\n }\r\n\r\n @HostListener('drop', ['$event'])\r\n onDrop(event: any): void {\r\n const files = event.dataTransfer.files;\r\n\r\n for (const file of files) {\r\n if (this.accept?.includes(file.type))\r\n this.add(file);\r\n }\r\n event.preventDefault();\r\n event.stopPropagation();\r\n }\r\n\r\n @HostListener('dragover', ['$event'])\r\n onDropOver(event: any): void {\r\n event.preventDefault();\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n const fileUpload = this._elementRef.nativeElement.querySelector('#' + this.id) as HTMLInputElement;\r\n\r\n fileUpload.onchange = (): void => {\r\n for (let index = 0; index < (fileUpload.files?.length ?? 0); index++) {\r\n const file = fileUpload.files![index];\r\n this.add(file);\r\n }\r\n };\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this._unsubscribeAll.next(void 0);\r\n this._unsubscribeAll.complete();\r\n }\r\n\r\n add(file: any): void {\r\n if ((this.accept === '' || this.accept === undefined) || (this.accept !== '' && this.accept.includes(file.type))) {\r\n if (!Array.isArray(this.filesData)) {\r\n this.filesData = [];\r\n }\r\n\r\n if (!(!this.multiple && this.filesData.length > 0)) {\r\n this.filesData.push(file);\r\n } else if (this.fileUploads.first.id === null) {\r\n this.filesData.push(file);\r\n this.fileUploads.first.remove();\r\n }\r\n }\r\n\r\n this._changeDetectorRef.markForCheck();\r\n }\r\n\r\n upload(event: any): void {\r\n this.outputUploadIdEvent.emit(event.id);\r\n\r\n this.outputFilesDataEvent.emit(this.filesData);\r\n }\r\n\r\n remove(event: CmatUploadComponent): void {\r\n const index = this.filesData.indexOf(event.file);\r\n if (index > -1) {\r\n this.filesData.splice(index, 1);\r\n if (event.file.id) {\r\n this.outputRemoveIdEvent.emit(event.file.id);\r\n }\r\n\r\n this.outputFilesDataEvent.emit(this.filesData);\r\n }\r\n\r\n this._changeDetectorRef.markForCheck();\r\n }\r\n\r\n uploadAll(): void {\r\n this.fileUploads.forEach((fileUpload) => {\r\n if (fileUpload.id === null) {\r\n fileUpload.upload();\r\n }\r\n });\r\n\r\n this._changeDetectorRef.markForCheck();\r\n }\r\n\r\n removeAll(): void {\r\n this.fileUploads.forEach((fileUpload) => { fileUpload.remove() });\r\n\r\n this._changeDetectorRef.markForCheck();\r\n }\r\n\r\n choose(): void {\r\n (this._elementRef.nativeElement.querySelector('#' + this.id) as HTMLInputElement).click();\r\n }\r\n\r\n getData(): any {\r\n return Array.isArray(this.filesData) ? this.filesData : [];\r\n }\r\n}\r\n","<mat-card>\r\n <mat-card-header>\r\n <mat-card-title>\r\n <legend class=\"text-lg\">\r\n {{title}}\r\n @if(required){\r\n <span>*</span>\r\n }\r\n </legend>\r\n </mat-card-title>\r\n </mat-card-header>\r\n <input type=\"file\" class=\"hidden\" [id]=\"id\" [multiple]=\"multiple\" [accept]=\"accept\" />\r\n\r\n @if(editMode){\r\n <mat-card-actions class=\"flex flex-row gap-1 print:hidden\">\r\n @if(!isHandSet){\r\n <button mat-raised-button color=\"primary\" (click)=\"choose()\">\r\n @if(autoUpload){\r\n <mat-icon [svgIcon]=\"'mat_outline:file_upload'\"></mat-icon>\r\n }@else {\r\n <mat-icon [svgIcon]=\"'mat_outline:add_box'\"></mat-icon>\r\n }\r\n <span class=\"ml-2\">选择</span>\r\n </button>\r\n @if(getData().length > 0&&multiple){\r\n @if(!autoUpload){\r\n <button mat-raised-button color=\"accent\" (click)=\"uploadAll()\"><mat-icon\r\n [svgIcon]=\"'mat_outline:file_upload'\"></mat-icon><span class=\"ml-2\">上传全部</span></button>\r\n }\r\n\r\n <button mat-raised-button color=\"warn\" (click)=\"removeAll()\"><mat-icon\r\n [svgIcon]=\"'heroicons_solid:trash'\"></mat-icon><span class=\"ml-2\">删除全部</span></button>\r\n }\r\n }@else {\r\n <button mat-icon-button color=\"primary\" (click)=\"choose()\">\r\n @if(autoUpload){\r\n <mat-icon [svgIcon]=\"'mat_outline:file_upload'\"></mat-icon>\r\n }@else {\r\n <mat-icon [svgIcon]=\"'mat_outline:add_box'\"></mat-icon>\r\n }\r\n </button>\r\n\r\n @if(getData().length > 0&&multiple){\r\n @if(!autoUpload){\r\n <button mat-icon-button color=\"accent\" (click)=\"uploadAll()\"><mat-icon\r\n [svgIcon]=\"'mat_outline:file_upload'\"></mat-icon></button>\r\n }\r\n\r\n <button mat-icon-button color=\"warn\" (click)=\"removeAll()\"><mat-icon\r\n [svgIcon]=\"'heroicons_solid:trash'\"></mat-icon></button>\r\n }\r\n }\r\n </mat-card-actions>\r\n }\r\n\r\n <mat-card-content>\r\n <mat-list class=\"border-t\">\r\n @for (file of getData(); track $index) {\r\n <mat-list-item class=\"cmat-upload-file-item h-full\">\r\n <cmat-upload class=\"my-2\" [fileAlias]=\"fileAlias\" [filePath]=\"filePath\" [fileCategory]=\"fileCategory\"\r\n [autoUpload]=\"autoUpload\" [editMode]=\"editMode\" [file]=\"file\" [id]=\"file.id||null\"\r\n (removeEvent)=\"remove($event)\" (uploadEvent)=\"upload($event)\"></cmat-upload>\r\n </mat-list-item>\r\n }\r\n </mat-list>\r\n </mat-card-content>\r\n</mat-card>","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i3","i2"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cmat-components-upload.mjs","sources":["../../../projects/cmat/components/upload/files.util.service.ts","../../../projects/cmat/components/upload/upload.component.ts","../../../projects/cmat/components/upload/upload.component.html","../../../projects/cmat/components/upload/upload-queue/upload-queue.component.ts","../../../projects/cmat/components/upload/upload-queue/upload-queue.component.html","../../../projects/cmat/components/upload/cmat-components-upload.ts"],"sourcesContent":["import { HttpClient } from '@angular/common/http';\r\nimport { Injectable, OnDestroy, inject } from '@angular/core';\r\nimport { Observable, Subject, catchError, map, takeUntil, tap } from 'rxjs';\r\nimport { IUrlStateConfig, CmatUrlStateConfigService } from 'cmat/services/config';\r\nimport { CmatUtilsService } from 'cmat/services/utils';\r\nimport { FileListModel } from './files.type';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CmatFilesUtilService implements OnDestroy {\r\n private _http = inject(HttpClient);\r\n private _urlStateConfigService = inject(CmatUrlStateConfigService);\r\n\r\n private _config: IUrlStateConfig;\r\n private _unsubscribeAll: Subject<void> = new Subject<void>();\r\n\r\n constructor() {\r\n this._urlStateConfigService.config$\r\n .pipe(takeUntil(this._unsubscribeAll))\r\n .subscribe((config: IUrlStateConfig) => {\r\n this._config = config;\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this._unsubscribeAll.next(void 0);\r\n this._unsubscribeAll.complete();\r\n }\r\n\r\n downloadFile(fileId: string, isStream: boolean = true): Observable<any> {\r\n return this._http.get(`${this._config.fileUrl}/download/${fileId}`, {\r\n headers: CmatUtilsService.getRequestCryptoHeaders(fileId),\r\n observe: 'response',\r\n reportProgress: true,\r\n responseType: 'blob',\r\n params: {\r\n isStream\r\n }\r\n },).pipe<any>(\r\n catchError(CmatUtilsService.handleError));\r\n }\r\n\r\n downloadFileZip(fileIds?: string[]): Observable<any> {\r\n return this._http.post(`${this._config.fileUrl}/download`, fileIds, {\r\n headers: CmatUtilsService.getRequestCryptoHeaders('fileZip'),\r\n observe: 'response',\r\n reportProgress: true,\r\n responseType: 'blob',\r\n }).pipe<any>(\r\n catchError(CmatUtilsService.handleError));\r\n }\r\n\r\n uploadFile(file: FormData): Observable<any> {\r\n return this._http.post(`${this._config.fileUrl}/upload`, file, {\r\n headers: CmatUtilsService.getRequestCryptoHeaders('files'),\r\n observe: 'events',\r\n reportProgress: true,\r\n responseType: 'json'\r\n }).pipe(\r\n tap((res: any) => res),\r\n catchError(CmatUtilsService.handleError));\r\n }\r\n\r\n uploadFileToProcessed(file: FormData): Observable<any> {\r\n return this._http.post(`${this._config.fileUrl}/upload/finish`, file, {\r\n headers: CmatUtilsService.getRequestCryptoHeaders('files'),\r\n observe: 'events',\r\n reportProgress: true,\r\n responseType: 'json'\r\n }).pipe(\r\n tap((res: any) => res),\r\n catchError(CmatUtilsService.handleError));\r\n }\r\n\r\n deleteFile(fileId: string): Observable<any> {\r\n return this._http.delete(`${this._config.fileUrl}/${fileId}`, {\r\n headers: CmatUtilsService.getRequestCryptoHeaders(fileId)\r\n }).pipe(\r\n catchError(err => CmatUtilsService.handleError(err))\r\n );\r\n }\r\n\r\n getFileList(queryData: object, pageIndex: number = -1, pageSize: number = -1): Observable<any> {\r\n if (this._config.enableDataProtect) {\r\n return this._http.post(`${this._config.fileUrl}/${pageIndex}/${pageSize}`,\r\n CmatUtilsService.getEncryptData(JSON.stringify(queryData)),\r\n {\r\n headers: CmatUtilsService.getRequestCryptoHeaders('fileList'),\r\n responseType: 'text'\r\n }\r\n )\r\n .pipe(\r\n // retry(3), // retry a failed request up to 3 times\r\n map((res: string) => JSON.parse(CmatUtilsService.getDecryptData(res))),\r\n catchError(err => CmatUtilsService.handleError(err))\r\n );\r\n } else {\r\n return this._http.post<FileListModel>(`${this._config.fileUrl}/${pageIndex}/${pageSize}`, queryData, {\r\n headers: CmatUtilsService.getRequestCryptoHeaders('fileList'),\r\n responseType: 'json'\r\n })\r\n .pipe(\r\n // retry(3), // retry a failed request up to 3 times\r\n tap((res: FileListModel) => res),\r\n catchError(err => CmatUtilsService.handleError(err))\r\n );\r\n }\r\n }\r\n}\r\n","import { NgClass } from '@angular/common';\r\nimport { HttpEventType } from '@angular/common/http';\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, OnDestroy, OnInit, Output, ViewEncapsulation, inject } from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { saveAs } from 'file-saver-es';\r\nimport { Subject, takeUntil } from 'rxjs';\r\nimport { CmatBytesPipe } from 'cmat/pipes/bytes';\r\nimport { CmatUtilsService } from 'cmat/services/utils';\r\nimport { FileModel } from './files.type';\r\nimport { CmatFilesUtilService } from './files.util.service';\r\n\r\n@Component({\r\n selector: 'cmat-upload',\r\n templateUrl: './upload.component.html',\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n exportAs: 'cmatUpload',\r\n imports: [MatButtonModule, MatIconModule, MatProgressBarModule, MatTooltipModule, CmatBytesPipe, NgClass]\r\n})\r\nexport class CmatUploadComponent implements OnInit, OnDestroy {\r\n @Input()\r\n fileAlias: string = 'fileData';\r\n\r\n @Input()\r\n filePath: string = '';\r\n\r\n @Input()\r\n fileCategory: string = '';\r\n\r\n @Input()\r\n editMode: boolean = false;\r\n\r\n @Input() autoUpload = true;\r\n\r\n @Input()\r\n id: string;\r\n\r\n @Output() removeEvent = new EventEmitter<CmatUploadComponent>();\r\n @Output() uploadEvent = new EventEmitter<any>();\r\n\r\n progressPercentage: number = 0;\r\n loaded: number = 0;\r\n total: number = 0;\r\n isUploading: boolean = false;\r\n\r\n private _fileService = inject(CmatFilesUtilService);\r\n private _changeDetectorRef = inject(ChangeDetectorRef);\r\n\r\n private _file: any;\r\n private _unsubscribeAll: Subject<any> = new Subject<any>();\r\n\r\n @Input()\r\n get file(): any {\r\n return this._file;\r\n }\r\n set file(file: any) {\r\n this._file = file;\r\n this.total = this._file.size;\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/member-ordering\r\n get fileType(): 'csv' | 'gif' | 'word' | 'excel' | 'jpg' | 'outlook' | 'pdf' | 'png' | 'ppt' | 'file' | 'text' | 'video' | 'zip' {\r\n return CmatUtilsService.getFileType(this.file.type);\r\n }\r\n\r\n ngOnInit(): void {\r\n if (this.autoUpload && this.id === null) {\r\n this.upload();\r\n }\r\n }\r\n ngOnDestroy(): void {\r\n this._unsubscribeAll.next(void 0);\r\n this._unsubscribeAll.complete();\r\n }\r\n\r\n\r\n upload(): void {\r\n this.isUploading = true;\r\n const fileModel = {\r\n id: null,\r\n fileName: this.file.name,\r\n length: this.file.size,\r\n fileCategory: this.fileCategory,\r\n filePath: this.filePath,\r\n fileType: 'file',\r\n data: this.file\r\n } as FileModel;\r\n\r\n fileModel.fileType = this.fileType;\r\n\r\n const formData = new FormData();\r\n\r\n formData.set('fileData', this._file, this._file.name);\r\n formData.append('fileInfo', JSON.stringify(fileModel));\r\n\r\n this._fileService.uploadFile(formData).pipe(\r\n takeUntil(this._unsubscribeAll)\r\n ).subscribe((event: any) => {\r\n if (event.type === HttpEventType.UploadProgress) {\r\n this.progressPercentage = Math.floor(event.loaded * 100 / event.total);\r\n this.loaded = event.loaded;\r\n this.total = event.total;\r\n }\r\n if (event.type === HttpEventType.Response) {\r\n this.id = event.body.id;\r\n this.file.id = event.body.id;\r\n\r\n this.isUploading = false;\r\n }\r\n\r\n this.uploadEvent.emit(this.file);\r\n\r\n this._changeDetectorRef.markForCheck();\r\n });\r\n }\r\n\r\n download(): void {\r\n this._fileService.downloadFile(this.id).pipe(\r\n takeUntil(this._unsubscribeAll)\r\n ).subscribe((file: any) => {\r\n saveAs(new Blob([file.body]), this.file.fileName);\r\n });\r\n }\r\n\r\n remove(): void {\r\n this.removeEvent.emit(this);\r\n }\r\n}\r\n","<div class=\"flex flex-col\">\r\n <div class=\"flex flex-row items-center\">\r\n <span class=\"flex items-center px-1\">\r\n <mat-icon class=\"icon-size-6 text-hint\"\r\n [svgIcon]=\"fileType\"></mat-icon>\r\n </span>\r\n <span matTooltip=\"{{file.name}}\"\r\n class=\"text-sm flex flex-auto whitespace-nowrap overflow-x-hidden text-ellipsis\">{{file.name}}({{file.size | cmatBytes}})</span>\r\n <span class=\"flex flex-row gap-1 print:hidden\">\r\n @if(id===null){\r\n <button mat-icon-button color=\"primary\" class=\"w-8 min-h-8 h-8 max-w-8\" [ngClass]=\"{'disabled' : isUploading}\"\r\n (click)=\"upload()\">\r\n <mat-icon class=\"icon-size-5\" [svgIcon]=\"'mat_outline:file_upload'\"></mat-icon>\r\n </button>\r\n }\r\n\r\n @if(id!==null){\r\n <button mat-icon-button color=\"primary\" class=\"w-8 min-h-8 h-8 max-w-8\" (click)=\"download()\">\r\n <mat-icon class=\"icon-size-5\" [svgIcon]=\"'mat_outline:file_download'\"></mat-icon>\r\n </button>\r\n }\r\n\r\n @if(editMode){\r\n <button mat-icon-button color=\"warn\" class=\"w-8 min-h-8 h-8 max-w-8\" (click)=\"remove()\">\r\n <mat-icon class=\"icon-size-5\" [svgIcon]=\"'heroicons_solid:trash'\"></mat-icon>\r\n </button>\r\n }\r\n </span>\r\n </div>\r\n @if(id===null){\r\n <mat-progress-bar [value]=\"progressPercentage\"></mat-progress-bar>\r\n <div class=\"text-sm block whitespace-nowrap overflow-x-hidden text-ellipsis\">\r\n <span>{{progressPercentage}}%</span><span> {{loaded | cmatBytes}} of {{total | cmatBytes}}</span>\r\n </div>\r\n }\r\n</div>","import { AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, HostListener, Input, OnDestroy, Output, QueryList, ViewChildren, ViewEncapsulation, forwardRef, inject } from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatListModule } from '@angular/material/list';\r\nimport { Subject, takeUntil } from 'rxjs';\r\nimport { CmatMediaWatcherService } from 'cmat/services/media-watcher';\r\nimport { CmatUploadComponent } from '../upload.component';\r\n\r\n@Component({\r\n selector: 'cmat-upload-queue',\r\n templateUrl: './upload-queue.component.html',\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n exportAs: 'cmatUploadQueue',\r\n imports: [MatCardModule, MatListModule, MatButtonModule, MatIconModule, CmatUploadComponent]\r\n})\r\nexport class CmatUploadQueueComponent implements OnDestroy, AfterViewInit {\r\n @ViewChildren(forwardRef(() => CmatUploadComponent)) fileUploads: QueryList<CmatUploadComponent>;\r\n @Input()\r\n fileAlias: string = 'fileData';\r\n\r\n @Input()\r\n filePath: string = '';\r\n @Input()\r\n fileCategory: string;\r\n @Input()\r\n required: boolean = false;\r\n\r\n @Input()\r\n autoUpload: boolean = true;\r\n\r\n @Input() multiple: boolean = true;\r\n @Input() accept: string = '';\r\n @Input() title: string = '附件';\r\n @Input() editMode: boolean = false;\r\n @Input()\r\n filesData: any[] = [];\r\n\r\n @Output() outputRemoveIdEvent = new EventEmitter<string>();\r\n @Output() outputUploadIdEvent = new EventEmitter<string>();\r\n @Output() outputFilesDataEvent = new EventEmitter<any>();\r\n\r\n public id = 'cmatupload-' + Math.floor(Math.random() * 1000000);\r\n\r\n isHandSet: boolean;\r\n\r\n private _changeDetectorRef = inject(ChangeDetectorRef);\r\n private _cmatMediaWatcherService = inject(CmatMediaWatcherService);\r\n private _elementRef = inject(ElementRef);\r\n\r\n private _unsubscribeAll: Subject<any> = new Subject<any>();\r\n\r\n\r\n constructor() {\r\n this._cmatMediaWatcherService.onMediaChange$\r\n .pipe(takeUntil(this._unsubscribeAll))\r\n .subscribe(({ matchingAliases }) => {\r\n this.isHandSet = !matchingAliases.includes('lg');\r\n\r\n this._changeDetectorRef.markForCheck();\r\n });\r\n }\r\n\r\n @HostListener('drop', ['$event'])\r\n onDrop(event: any): void {\r\n const files = event.dataTransfer.files;\r\n\r\n for (const file of files) {\r\n if (this.accept?.includes(file.type))\r\n this.add(file);\r\n }\r\n event.preventDefault();\r\n event.stopPropagation();\r\n }\r\n\r\n @HostListener('dragover', ['$event'])\r\n onDropOver(event: any): void {\r\n event.preventDefault();\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n const fileUpload = this._elementRef.nativeElement.querySelector('#' + this.id) as HTMLInputElement;\r\n\r\n fileUpload.onchange = (): void => {\r\n for (let index = 0; index < (fileUpload.files?.length ?? 0); index++) {\r\n const file = fileUpload.files![index];\r\n this.add(file);\r\n }\r\n };\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this._unsubscribeAll.next(void 0);\r\n this._unsubscribeAll.complete();\r\n }\r\n\r\n add(file: any): void {\r\n if ((this.accept === '' || this.accept === undefined) || (this.accept !== '' && this.accept.includes(file.type))) {\r\n if (!Array.isArray(this.filesData)) {\r\n this.filesData = [];\r\n }\r\n\r\n if (!(!this.multiple && this.filesData.length > 0)) {\r\n this.filesData.push(file);\r\n } else if (this.fileUploads.first.id === null) {\r\n this.filesData.push(file);\r\n this.fileUploads.first.remove();\r\n }\r\n }\r\n\r\n this._changeDetectorRef.markForCheck();\r\n }\r\n\r\n upload(event: any): void {\r\n this.outputUploadIdEvent.emit(event.id);\r\n\r\n this.outputFilesDataEvent.emit(this.filesData);\r\n }\r\n\r\n remove(event: CmatUploadComponent): void {\r\n const index = this.filesData.indexOf(event.file);\r\n if (index > -1) {\r\n this.filesData.splice(index, 1);\r\n if (event.file.id) {\r\n this.outputRemoveIdEvent.emit(event.file.id);\r\n }\r\n\r\n this.outputFilesDataEvent.emit(this.filesData);\r\n }\r\n\r\n this._changeDetectorRef.markForCheck();\r\n }\r\n\r\n uploadAll(): void {\r\n this.fileUploads.forEach((fileUpload) => {\r\n if (fileUpload.id === null) {\r\n fileUpload.upload();\r\n }\r\n });\r\n\r\n this._changeDetectorRef.markForCheck();\r\n }\r\n\r\n removeAll(): void {\r\n this.fileUploads.forEach((fileUpload) => { fileUpload.remove() });\r\n\r\n this._changeDetectorRef.markForCheck();\r\n }\r\n\r\n choose(): void {\r\n (this._elementRef.nativeElement.querySelector('#' + this.id) as HTMLInputElement).click();\r\n }\r\n\r\n getData(): any {\r\n return Array.isArray(this.filesData) ? this.filesData : [];\r\n }\r\n}\r\n","<mat-card>\r\n <mat-card-header>\r\n <mat-card-title>\r\n <legend class=\"text-lg\">\r\n {{title}}\r\n @if(required){\r\n <span>*</span>\r\n }\r\n </legend>\r\n </mat-card-title>\r\n </mat-card-header>\r\n <input type=\"file\" class=\"hidden\" [id]=\"id\" [multiple]=\"multiple\" [accept]=\"accept\" />\r\n\r\n @if(editMode){\r\n <mat-card-actions class=\"flex flex-row gap-1 print:hidden\">\r\n @if(!isHandSet){\r\n <button mat-raised-button color=\"primary\" (click)=\"choose()\">\r\n @if(autoUpload){\r\n <mat-icon [svgIcon]=\"'mat_outline:file_upload'\"></mat-icon>\r\n }@else {\r\n <mat-icon [svgIcon]=\"'mat_outline:add_box'\"></mat-icon>\r\n }\r\n <span class=\"ml-2\">选择</span>\r\n </button>\r\n @if(getData().length > 0&&multiple){\r\n @if(!autoUpload){\r\n <button mat-raised-button color=\"accent\" (click)=\"uploadAll()\"><mat-icon\r\n [svgIcon]=\"'mat_outline:file_upload'\"></mat-icon><span class=\"ml-2\">上传全部</span></button>\r\n }\r\n\r\n <button mat-raised-button color=\"warn\" (click)=\"removeAll()\"><mat-icon\r\n [svgIcon]=\"'heroicons_solid:trash'\"></mat-icon><span class=\"ml-2\">删除全部</span></button>\r\n }\r\n }@else {\r\n <button mat-icon-button color=\"primary\" (click)=\"choose()\">\r\n @if(autoUpload){\r\n <mat-icon [svgIcon]=\"'mat_outline:file_upload'\"></mat-icon>\r\n }@else {\r\n <mat-icon [svgIcon]=\"'mat_outline:add_box'\"></mat-icon>\r\n }\r\n </button>\r\n\r\n @if(getData().length > 0&&multiple){\r\n @if(!autoUpload){\r\n <button mat-icon-button color=\"accent\" (click)=\"uploadAll()\"><mat-icon\r\n [svgIcon]=\"'mat_outline:file_upload'\"></mat-icon></button>\r\n }\r\n\r\n <button mat-icon-button color=\"warn\" (click)=\"removeAll()\"><mat-icon\r\n [svgIcon]=\"'heroicons_solid:trash'\"></mat-icon></button>\r\n }\r\n }\r\n </mat-card-actions>\r\n }\r\n\r\n <mat-card-content>\r\n <mat-list class=\"border-t\">\r\n @for (file of getData(); track $index) {\r\n <mat-list-item class=\"cmat-upload-file-item h-full\">\r\n <cmat-upload class=\"my-2\" [fileAlias]=\"fileAlias\" [filePath]=\"filePath\" [fileCategory]=\"fileCategory\"\r\n [autoUpload]=\"autoUpload\" [editMode]=\"editMode\" [file]=\"file\" [id]=\"file.id||null\"\r\n (removeEvent)=\"remove($event)\" (uploadEvent)=\"upload($event)\"></cmat-upload>\r\n </mat-list-item>\r\n }\r\n </mat-list>\r\n </mat-card-content>\r\n</mat-card>","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i3","i2"],"mappings":"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"}
|