import { OnInit, AfterViewInit, ElementRef, EventEmitter, TemplateRef, NgZone, ChangeDetectorRef, OnChanges, SimpleChanges, Injector, OnDestroy, Renderer2 } from "@angular/core"; import { NotifyService } from "@farris/ui-notify"; import { BsModalService } from "@farris/ui-modal"; import { FFileUploadAPIService, FFileUploaderService, FPreviewEditorService } from "../../service/index"; import { FFileSelectDirective } from "../../directive/index"; import { UploadOutput, UploadInput, UploadFile, UploaderOptions, FUploadFileExtend, DocMetaProperty } from "../../model/index"; import { Observable } from "rxjs"; import { PaginationControlsComponent } from "@farris/ui-pagination"; export declare type CanEditableFn = (fileInfo: any) => boolean; export declare type FileCanEditable = CanEditableFn | boolean; export declare enum DocModeType { Normal = "normal", RevisionOnly = "revisionOnly", Admin = "admin" } export declare enum ButtonDisabledAction { Edit = "edit", Preview = "preview", Download = "download", Delete = "delete" } export declare class UploadAndPreviewComponent implements OnInit, AfterViewInit, OnChanges, OnDestroy { private el; private uploadAPISer; private fileUploaderSer; private notifyService; private ngZone; private modalSer; private cd; private inject; editorService: FPreviewEditorService; render2: Renderer2; cls: boolean; readonly fillState: boolean; readonly paginationState: boolean; previewFileNameTmpl: TemplateRef; fileSizeTmpl: TemplateRef; uapStateTmpl: TemplateRef; previewActionTmpl: TemplateRef; previewDateTmpl: TemplateRef; uploadFileNameTmpl: TemplateRef; /** * 每个组可以设置特殊服务参数,来覆盖默认的统一模块级配置 */ extendServerConfig: any; contentFill: boolean; /** 启用手动调整展示顺序 */ enableOrder: boolean; /** 排序字段 */ orderField: string; /** 是否允许编辑文档,默认为 false */ editfile: FileCanEditable; /**列是否支持拖拽 */ columnResizable: boolean; resizeProxy: ElementRef; resizeProxyBg: ElementRef; resizeMinWidth: number; private resizeColumnInfo; private _docMode; docMode: any; private _renameFromDialog; private _previewColumnsFields; /** * 预置列信息 * 调整: * 1、把列上的checkbox属性去掉,改为只有启用批量选择时,第一列才会有多选,不允许其他列有多选 * 2、解决field重名问题,通过判断是否extend=true来判断,是否是自定义列,如果是自定义列,不使用默认的模版 */ private _presetPreviewColumns; private _previewColumns; previewColumns: any; private _fileInfos; extendInfos: any; fileInfos: FUploadFileExtend[]; /** * 附件预览配置---------------------------------------开始 */ previewDateFormat: string; previewReadonly: boolean; previewVisible: boolean; previewEnableMulti: boolean; previewShowType: string; previewEnableRename: boolean; previewDefaultRename: string; previewShowComments: boolean; previewModeless: boolean; enablePreviewFileList: boolean; showPreviewFileListBtn: boolean; filePreviewEvent: EventEmitter; fileListPreviewEvent: EventEmitter<{ fileInfo: FUploadFileExtend; fileList: FUploadFileExtend[]; options: any; }>; fileDownloadEvent: EventEmitter<{ fileInfos: FUploadFileExtend[]; name: string; }>; fPreviewMultiSelectedEvent: EventEmitter; fSelectedEvent: EventEmitter; fileRemoveEvent: EventEmitter; previewSelectAllBtnChecked: boolean; checkAllIndeterminate: boolean; previewMultiSelected: FUploadFileExtend[]; previewCurrent: string; readonly previewSettings: { readonly: boolean; visible: boolean; enableMulti: boolean; enableRename: boolean; }; /** * 下载或者删除的状态,应用在如下场景 * 比如:只要允许下载或者删除,就可以显示多选框 */ readonly downloadOrDeleteState: boolean; /** * 附件预览配置---------------------------------------结束 */ /** * 附件上传配置---------------------------------------开始 */ fileUpload: FFileSelectDirective; uploadDisabled: boolean; private tUploadVisible; uploadVisible: any; uploadNeedReset: Observable; uploadEnableSelect: boolean; uploadSelectText: string; uploadEnableMulti: boolean; uploadedCount: number; extendDatas: { [key: string]: any; extProperty?: DocMetaProperty | null; }; /** 整个控件禁用 */ disabled: boolean; /** 禁止下载 */ noDownload: boolean; /** 禁止预览 */ noPreview: boolean; /**禁止删除,约定default是默认,按照noDownload的状态走 */ noDelete: string; /** * 是否内部排序 * 目的:命令构件会根据新指令指定字段进行排序,不需要进行内部排序。为了区分内外排序。 */ enableSorting: boolean; uploadOptions: UploaderOptions; ButtonDisabledAction: typeof ButtonDisabledAction; private buttonDisabledStateSubs; private buttonDisabledStateCache; private buttonDisabledStatePending; private buttonDisabledStateDebounceTimer; /** 禁用按钮状态 * ['download' 下载, 'preview' 预览, 'edit' 编辑, 'delete' 删除]; */ buttonDisabledCallback?: (context: { info: any; action: ButtonDisabledAction; }) => Observable | Boolean; /** 启用分块上传 */ enableSliceUpload: boolean; /** 分块上传每片大小,单位:M, 默认 1M/块 */ chunkSize: number; customInfo: any; pagination: boolean; showPageList: boolean; pageSize: number; pageIndex: number; private _pageList; pageList: number[]; private _pageTotal; pageTotal: any; fUploadDoneEvent: EventEmitter; fUploadRemovedEvent: EventEmitter; /** 文件放下事件 */ afterOrdered: EventEmitter<{}>; /**附件编辑后数据改变事件 */ editorValueChanged: EventEmitter<{}>; uploadAndPreviewTbodyRef: ElementRef; pager: PaginationControlsComponent; private uploadAndPreviewTableHeader; private uploadAndPreviewTableHeaderCreated$; uploadAndPreviewTheadRef: ElementRef; readonly uploadSettings: { disabled: boolean; visible: boolean; enableMulti: boolean; extendDatas: { [key: string]: any; extProperty?: DocMetaProperty; }; }; allowedContentTypes: string; maxUploads: number; maxFileSize: string; uploadFiles: UploadOutput[]; notAllowedCharsInFileName: any[]; uploadSelectInput: EventEmitter; private selfUploadOpts; private ro; private localSer; private dateHlp; tips: { download: string; preview: string; remove: string; edit: string; notedit: string; }; perfixStr: string; editorEventsSub: any; paginationOptions: any; /** * * @param el * @param uploadAPISer * @param fileUploaderSer * @param notifyService * @param ngZone */ constructor(el: ElementRef, uploadAPISer: FFileUploadAPIService, fileUploaderSer: FFileUploaderService, notifyService: NotifyService, ngZone: NgZone, modalSer: BsModalService, cd: ChangeDetectorRef, inject: Injector, editorService: FPreviewEditorService, render2: Renderer2); ngOnInit(): void; ngAfterViewInit(): void; ngOnChanges(changes: SimpleChanges): void; ngOnDestroy(): void; /** * 选择或取消所有 * @param ev */ selectOrCancelAllHandler(ev: any): void; /** * 格式化文件大小 * @param bytes */ formateBytes(bytes: any): string; /** * 获取文档类型对应的class * @param fileName */ getFileTypeClassName(fileName: any): string; /** * 格式化预览数据 * @param val */ private formatPreviewDatas; private getValue; private sortPreviewData; /** * 格式化处理数据 */ private getFieldsFromColumns; /** * 根据列获取对应的列模板 * @param columnInfo */ getColumnTemplate(columnInfo: any, type?: string): any; /** * 多选变更 */ previewMultiSelectChange(ev: any): void; /**处理附件上传---------------------------------------------------------开始-- */ /** * 统一触发 附件选择和拖拽附件的事件 * @param ev */ private inputUploadEventEmit; /**单个文件上传 */ startUpload(file: UploadFile): void; /** * 当主从表切换数据当前行时, * 解决刷新时候已勾选数据的问题 */ previewUpdateRefresh(): void; uploadReset(): void; /** * 触发绑定 */ triggerFileSelect(ev: any): boolean; /** * 选择附件按钮,处理抛出事件 * @param output */ selectUploadOutput(output: UploadOutput): void; /** * allAddedToQueue 选中文件追加到队列 * @param output */ private uploadOutputHandler; /** * 临时删除附件 * @param output */ private hideAfterLoaded; /** * 处理上传 * @param output */ private showNotify; /** * 更新附件的状态 * @param output * @param eventType */ private updateFilesState; /** * 是否判断有类型限制 */ judgeContentTypeLimit(): boolean; /** * 判断是否有文件大小的限制 */ judegeFileSizeLimit(): boolean; /** * 获取上传进度 */ getUploadProgress(uploadInfo: UploadOutput): number; /** * 处理显示 * @param ev * @param fileInfo */ getUploadFileSizeProgress(uploadInfo: UploadOutput): string; /** * 处理附件上传---------------------------------------------------------结束-- */ filePreviewBtnClickHandler(ev: Event, fileInfo: FUploadFileExtend): void; /** * 预览 * @param ev * @param fileInfo */ filePreviewHandler(ev: Event, fileInfo: FUploadFileExtend): void; fileListPreviewHandler(ev: Event, fileInfo: FUploadFileExtend): void; private getPreviewOptions; /** * 下载 * @param ev * @param fileInfo */ fileDownloadHandler(ev: Event, fileInfo: FUploadFileExtend): void; /** * 删除数据 * @param ev * @param fileInfo */ fileRemoveHandler(ev: Event, fileInfo: FUploadFileExtend): void; /** * 批量删除 * @param ev */ multiFileRemoveHandler(ev: Event): void; multiFilePreviewHandler(ev: Event): void; /** * 批量下载 * @param ev * @returns */ fileMultiDownloadHandler(ev: Event): void; private getName; showPreviewStateColumn(columnInfo: any): boolean; /** 拖拽排序后事件 */ onOrderFileDrop($event: any): void; private setColumnWidth; editFileHandler($event: any, fileInfo: FUploadFileExtend): void; canEdit(fileInfo: FUploadFileExtend): boolean; /** * 点击当前行 * @param ev * @param fileInfo */ fileSelected(ev: Event, fileInfo: FUploadFileExtend): void; /** * 返回模板上下文 * @param previewIndex * @param colIndex * @returns */ getPreviewCtx(previewIndex: any, colIndex: any): { value: any; rowData: any; settings: { readonly: boolean; visible: boolean; enableMulti: boolean; enableRename: boolean; }; column: any; state: string; }; /** * 放回当前行数据 * @param previewIndex * @returns */ getRowData(previewIndex: any): any; /** * 获取真正的值 * @param previewIndex * @param field * @returns */ getRealDataValue(previewIndex: any, field: any, rowData?: any): any; /** * 解决附件上传更新时,自定义列没有字段值或者是预置列有自定义的情况 */ canUpdateSelfColumn(previewIndex: any, column: any): boolean; getEditorService(): FPreviewEditorService; /** * 获取列宽度 * @param column * @returns */ getColumnWidth(column: any): { width: string; }; /** * * @param colIndex * @returns */ getTheadPadding(colIndex: any): 10 | 56 | 44; setAndGetColumnMinWidth(colIndex: any): any; /** * 初始计算 * 拖拽列按照拖拽后的实际宽度显示,剩余列按照各自宽度比例分配,除去拖拽列宽度之后的剩余宽度 * 例外: * 1、拖拽列的宽度不能小于resizeMinWidth指定的值 * 2、剩余列 */ resizeColumnWidth(resizeBarIndex?: number, newColumnWidth?: number): void; /** * 因为每个列的最小宽度可能是不一致的 * @param computedWidthColumns * @param computedWidthColumnIndex * @param setTotalWidth * @param theadWidth */ private reComputedColumnWidth; private getResizeProxyPosLeft; private toggleResizeProxy; /** * 开始拖拽 * @param e */ onColumnResizeBegin(e: MouseEvent): void; onColumnResize(eventInfo: any): void; onColumnResizeEnd(eventInfo: any): void; /** * 获取按钮禁用状态 * @param previewInfo 文件信息 * @param actionType 操作类型 (download/preview/edit/delete) */ getButtonDisabledState(previewInfo: any, actionType: ButtonDisabledAction): boolean; private scheduleButtonStateUpdate; /** * 手动刷新按钮状态---此处应该用不到,切换用户会刷新界面,不用单独调用 * @param previewInfo 可选,指定文件,不传则刷新所有 * @param actionType 可选,指定操作类型,不传则刷新所有操作 */ refreshButtonState(previewInfo?: any, actionType?: string): void; gotoScrollTop(): void; /** * 页码改变 * @param page */ onPageChange(page: { pageIndex: number; pageSize: number; }): void; /** * 改变分页大小 * @param pageSize */ onPageSizeChange(pageSize: number): void; getPageIndex(curPreviewIndex: number): number; }