From cd312ef5c8c1df5b287a468ae9974d6828aa9273 Mon Sep 17 00:00:00 2001 From: lijiahang Date: Fri, 10 May 2024 11:23:22 +0800 Subject: [PATCH] =?UTF-8?q?:hammer:=20=E6=89=B9=E9=87=8F=E4=B8=8A=E4=BC=A0?= =?UTF-8?q?.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/generator/CodeGenerators.java | 8 +- .../controller/UploadTaskController.java | 7 +- .../request/upload/UploadTaskRequest.java | 3 + .../asset/enums/UploadTaskStatusEnum.java | 9 +- .../host/upload/task/FileUploadTask.java | 2 +- .../asset/service/UploadTaskService.java | 5 +- .../service/impl/UploadTaskServiceImpl.java | 23 ++- .../upload/FileUploadMessageDispatcher.java | 3 + .../upload/enums/FileUploadOperatorType.java | 5 + .../upload/handler/FileUploadHandler.java | 12 ++ .../upload/handler/IFileUploadHandler.java | 5 + orion-ops-ui/src/api/exec/upload-task.ts | 15 +- orion-ops-ui/src/api/system/upload.ts | 2 +- orion-ops-ui/src/components/exec/log/const.ts | 100 ++++++++++++ .../exec/log/panel/appender-const.ts | 99 ------------ .../src/components/exec/log/panel/index.vue | 3 +- .../components/exec/log/panel/log-appender.ts | 5 +- .../components/exec/log/panel/log-item.vue | 3 +- .../components/exec/log/panel/log-view.vue | 2 +- .../src/components/system/uploader/const.ts | 44 ++++++ .../system/uploader/file-uploader.ts | 146 ++++++++++++++++++ .../components/batch-upload-files.vue | 66 +++++++- .../components/batch-upload-form.vue | 53 ++++--- .../components/batch-upload-panel.vue | 142 +++++++++++++++-- .../components/batch-upload-step.vue | 27 +++- .../views/exec/batch-upload/types/const.ts | 69 +++++---- .../exec/batch-upload/types/form.rules.ts | 6 - .../components/sftp/sftp-upload-modal.vue | 7 +- 28 files changed, 658 insertions(+), 213 deletions(-) delete mode 100644 orion-ops-ui/src/components/exec/log/panel/appender-const.ts create mode 100644 orion-ops-ui/src/components/system/uploader/const.ts create mode 100644 orion-ops-ui/src/components/system/uploader/file-uploader.ts diff --git a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/java/com/orion/ops/framework/mybatis/core/generator/CodeGenerators.java b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/java/com/orion/ops/framework/mybatis/core/generator/CodeGenerators.java index f6c99b98..2811e166 100644 --- a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/java/com/orion/ops/framework/mybatis/core/generator/CodeGenerators.java +++ b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/java/com/orion/ops/framework/mybatis/core/generator/CodeGenerators.java @@ -55,8 +55,8 @@ public class CodeGenerators { .enableRowSelection() .dict("uploadTaskStatus", "status") .comment("上传任务状态") - .fields("PREPARATION", "UPLOADING", "FINISHED", "CANCELED") - .labels("准备中", "上传中", "已完成", "已取消") + .fields("WAITING", "UPLOADING", "FINISHED", "FAILED", "CANCELED") + .labels("等待中", "上传中", "已完成", "已失败", "已取消") .valueUseFields() .build(), Template.create("upload_task_file", "上传任务文件", "upload") @@ -65,8 +65,8 @@ public class CodeGenerators { .enableRowSelection() .dict("uploadTaskFileStatus", "status") .comment("上传任务文件状态") - .fields("WAITING", "UPLOADING", "FINISHED", "CANCELED") - .labels("等待中", "上传中", "已完成", "已取消") + .fields("WAITING", "UPLOADING", "FINISHED", "FAILED", "CANCELED") + .labels("等待中", "上传中", "已完成", "已失败", "已取消") .valueUseFields() .build(), }; diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/controller/UploadTaskController.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/controller/UploadTaskController.java index c0f1b5e4..2d3e2fd8 100644 --- a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/controller/UploadTaskController.java +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/controller/UploadTaskController.java @@ -40,6 +40,11 @@ import java.util.List; @SuppressWarnings({"ELValidationInJSP", "SpringElInspection"}) public class UploadTaskController { + // todo create 返回 host, STATUS + // 修改状态元数据 + // 上船前检查size, size不对则直接cancel + // cancel 需要设置子元素为 cancel + @Resource private UploadTaskService uploadTaskService; @@ -64,7 +69,7 @@ public class UploadTaskController { @Operation(summary = "取消上传") @PreAuthorize("@ss.hasPermission('asset:upload-task:upload')") public Boolean cancelUploadTask(@Validated @RequestBody UploadTaskRequest request) { - uploadTaskService.cancelUploadTask(request.getId()); + uploadTaskService.cancelUploadTask(request); return true; } diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/request/upload/UploadTaskRequest.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/request/upload/UploadTaskRequest.java index f6c3ebae..ee8605e8 100644 --- a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/request/upload/UploadTaskRequest.java +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/request/upload/UploadTaskRequest.java @@ -29,4 +29,7 @@ public class UploadTaskRequest implements Serializable { @Schema(description = "id") private Long id; + @Schema(description = "是否失败") + private Boolean failed; + } diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/enums/UploadTaskStatusEnum.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/enums/UploadTaskStatusEnum.java index 1f78bb48..69f78ef4 100644 --- a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/enums/UploadTaskStatusEnum.java +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/enums/UploadTaskStatusEnum.java @@ -15,9 +15,9 @@ import lombok.Getter; public enum UploadTaskStatusEnum { /** - * 准备中 + * 等待中 */ - PREPARATION(true), + WAITING(true), /** * 上传中 @@ -29,6 +29,11 @@ public enum UploadTaskStatusEnum { */ FINISHED(false), + /** + * 已失败 + */ + FAILED(false), + /** * 已取消 */ diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/upload/task/FileUploadTask.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/upload/task/FileUploadTask.java index 638efc78..3cb42831 100644 --- a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/upload/task/FileUploadTask.java +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/upload/task/FileUploadTask.java @@ -68,7 +68,7 @@ public class FileUploadTask implements IFileUploadTask { return; } // 检查任务状态 非准备中则取消执行 - if (!UploadTaskStatusEnum.PREPARATION.name().equals(record.getStatus())) { + if (!UploadTaskStatusEnum.WAITING.name().equals(record.getStatus())) { return; } try { diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/service/UploadTaskService.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/service/UploadTaskService.java index d652bf5d..c410cb17 100644 --- a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/service/UploadTaskService.java +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/service/UploadTaskService.java @@ -3,6 +3,7 @@ package com.orion.ops.module.asset.service; import com.orion.lang.define.wrapper.DataGrid; import com.orion.ops.module.asset.entity.request.upload.UploadTaskCreateRequest; import com.orion.ops.module.asset.entity.request.upload.UploadTaskQueryRequest; +import com.orion.ops.module.asset.entity.request.upload.UploadTaskRequest; import com.orion.ops.module.asset.entity.vo.UploadTaskCreateVO; import com.orion.ops.module.asset.entity.vo.UploadTaskVO; @@ -85,9 +86,9 @@ public interface UploadTaskService { /** * 取消上传 * - * @param id id + * @param request request */ - void cancelUploadTask(Long id); + void cancelUploadTask(UploadTaskRequest request); /** * 删除上传交换区的文件 diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/service/impl/UploadTaskServiceImpl.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/service/impl/UploadTaskServiceImpl.java index f4f7e409..fcfebab9 100644 --- a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/service/impl/UploadTaskServiceImpl.java +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/service/impl/UploadTaskServiceImpl.java @@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.orion.lang.define.wrapper.DataGrid; import com.orion.lang.utils.Arrays1; +import com.orion.lang.utils.Booleans; import com.orion.lang.utils.Strings; import com.orion.lang.utils.collect.Lists; import com.orion.lang.utils.collect.Maps; @@ -27,6 +28,7 @@ import com.orion.ops.module.asset.entity.dto.UploadTaskExtraDTO; import com.orion.ops.module.asset.entity.request.upload.UploadTaskCreateRequest; import com.orion.ops.module.asset.entity.request.upload.UploadTaskFileRequest; import com.orion.ops.module.asset.entity.request.upload.UploadTaskQueryRequest; +import com.orion.ops.module.asset.entity.request.upload.UploadTaskRequest; import com.orion.ops.module.asset.entity.vo.HostBaseVO; import com.orion.ops.module.asset.entity.vo.UploadTaskCreateVO; import com.orion.ops.module.asset.entity.vo.UploadTaskFileVO; @@ -110,7 +112,7 @@ public class UploadTaskServiceImpl implements UploadTaskService { record.setUserId(user.getId()); record.setUsername(user.getUsername()); record.setDescription(Strings.def(record.getDescription(), () -> Strings.format(DEFAULT_DESC, Dates.current()))); - record.setStatus(UploadTaskStatusEnum.PREPARATION.name()); + record.setStatus(UploadTaskStatusEnum.WAITING.name()); UploadTaskExtraDTO extra = UploadTaskExtraDTO.builder() .hostIdList(hostIdList) .hosts(hosts) @@ -231,7 +233,7 @@ public class UploadTaskServiceImpl implements UploadTaskService { // 查询任务 List records = uploadTaskDAO.selectBatchIds(idList); // 取消任务 - this.checkCancelTask(records); + this.checkCancelTask(records, UploadTaskStatusEnum.CANCELED); // 删除任务 int effect = uploadTaskDAO.deleteBatchIds(idList); // 删除任务文件 @@ -248,20 +250,24 @@ public class UploadTaskServiceImpl implements UploadTaskService { UploadTaskDO record = uploadTaskDAO.selectById(id); Valid.notNull(record, ErrorMessage.TASK_ABSENT); // 检查状态 - Valid.eq(record.getStatus(), UploadTaskStatusEnum.PREPARATION.name(), ErrorMessage.ILLEGAL_STATUS); + Valid.eq(record.getStatus(), UploadTaskStatusEnum.WAITING.name(), ErrorMessage.ILLEGAL_STATUS); // 执行任务 FileUploadTasks.start(id); } @Override - public void cancelUploadTask(Long id) { + public void cancelUploadTask(UploadTaskRequest request) { // 查询任务 - UploadTaskDO record = uploadTaskDAO.selectById(id); + UploadTaskDO record = uploadTaskDAO.selectById(request.getId()); Valid.notNull(record, ErrorMessage.TASK_ABSENT); // 检查状态 Valid.isTrue(UploadTaskStatusEnum.of(record.getStatus()).isCancelable(), ErrorMessage.ILLEGAL_STATUS); // 取消任务 - this.checkCancelTask(Lists.singleton(record)); + if (Booleans.isTrue(request.getFailed())) { + this.checkCancelTask(Lists.singleton(record), UploadTaskStatusEnum.FAILED); + } else { + this.checkCancelTask(Lists.singleton(record), UploadTaskStatusEnum.CANCELED); + } } @Override @@ -318,8 +324,9 @@ public class UploadTaskServiceImpl implements UploadTaskService { * 检查需要取消的任务 * * @param records records + * @param status status */ - private void checkCancelTask(List records) { + private void checkCancelTask(List records, UploadTaskStatusEnum status) { // 需要取消的记录 List cancelableRecords = records.stream() .filter(s -> UploadTaskStatusEnum.of(s.getStatus()).isCancelable()) @@ -341,7 +348,7 @@ public class UploadTaskServiceImpl implements UploadTaskService { // 更新状态 if (!updateIdList.isEmpty()) { UploadTaskDO update = new UploadTaskDO(); - update.setStatus(UploadTaskStatusEnum.CANCELED.name()); + update.setStatus(status.name()); update.setEndTime(new Date()); // 更新 uploadTaskDAO.update(update, Conditions.in(UploadTaskDO::getId, updateIdList)); diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/handler/upload/FileUploadMessageDispatcher.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/handler/upload/FileUploadMessageDispatcher.java index 26077f7a..0cad0c48 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/handler/upload/FileUploadMessageDispatcher.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/handler/upload/FileUploadMessageDispatcher.java @@ -53,6 +53,9 @@ public class FileUploadMessageDispatcher extends AbstractWebSocketHandler { } else if (FileUploadOperatorType.FINISH.equals(type)) { // 上传完成 handler.finish(); + } else if (FileUploadOperatorType.ERROR.equals(type)) { + // 上传失败 + handler.error(); } } diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/handler/upload/enums/FileUploadOperatorType.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/handler/upload/enums/FileUploadOperatorType.java index f1545861..05627e6d 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/handler/upload/enums/FileUploadOperatorType.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/handler/upload/enums/FileUploadOperatorType.java @@ -24,6 +24,11 @@ public enum FileUploadOperatorType { */ FINISH("finish"), + /** + * 上传失败 + */ + ERROR("error"), + ; private final String type; diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/handler/upload/handler/FileUploadHandler.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/handler/upload/handler/FileUploadHandler.java index 6d76a0e8..2a69dae9 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/handler/upload/handler/FileUploadHandler.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/handler/upload/handler/FileUploadHandler.java @@ -106,6 +106,18 @@ public class FileUploadHandler implements IFileUploadHandler { this.send(resp); } + @Override + public void error() { + // 释放资源 + this.close(); + // 返回上传路径 + FileUploadResponse resp = FileUploadResponse.builder() + .type(FileUploadReceiverType.ERROR.getType()) + .fileId(this.fileId) + .build(); + this.send(resp); + } + @Override public void close() { if (closed) { diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/handler/upload/handler/IFileUploadHandler.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/handler/upload/handler/IFileUploadHandler.java index 3afe4aa6..8a374e03 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/handler/upload/handler/IFileUploadHandler.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/handler/upload/handler/IFileUploadHandler.java @@ -30,4 +30,9 @@ public interface IFileUploadHandler extends SafeCloseable { */ void finish(); + /** + * 上传失败 + */ + void error(); + } diff --git a/orion-ops-ui/src/api/exec/upload-task.ts b/orion-ops-ui/src/api/exec/upload-task.ts index 7aa11e3c..2f79a587 100644 --- a/orion-ops-ui/src/api/exec/upload-task.ts +++ b/orion-ops-ui/src/api/exec/upload-task.ts @@ -30,13 +30,6 @@ export interface UploadTaskCreateResponse { token: string; } -/** - * 上传任务请求 - */ -export interface UploadTaskRequest { - id?: number; -} - /** * 上传任务查询请求 */ @@ -92,15 +85,15 @@ export function createUploadTask(request: UploadTaskCreateRequest) { /** * 创建上传任务 */ -export function startUploadTask(request: UploadTaskRequest) { - return axios.post('/asset/upload-task/start', request); +export function startUploadTask(id: number) { + return axios.post('/asset/upload-task/start', { id }); } /** * 创建上传任务 */ -export function cancelUploadTask(request: UploadTaskRequest) { - return axios.post('/asset/upload-task/cancel', request); +export function cancelUploadTask(id: number, failed: boolean) { + return axios.post('/asset/upload-task/cancel', { id, failed }); } /** diff --git a/orion-ops-ui/src/api/system/upload.ts b/orion-ops-ui/src/api/system/upload.ts index 71828659..973b9129 100644 --- a/orion-ops-ui/src/api/system/upload.ts +++ b/orion-ops-ui/src/api/system/upload.ts @@ -4,5 +4,5 @@ import { createAppWebSocket } from '@/utils/http'; * 打开文件上传 websocket */ export const openFileUploadChannel = (uploadToken: string) => { - return createAppWebSocket(`"/file/upload/${uploadToken}`); + return createAppWebSocket(`/file/upload/${uploadToken}`); }; diff --git a/orion-ops-ui/src/components/exec/log/const.ts b/orion-ops-ui/src/components/exec/log/const.ts index a7c908a3..0c2b5f2c 100644 --- a/orion-ops-ui/src/components/exec/log/const.ts +++ b/orion-ops-ui/src/components/exec/log/const.ts @@ -1,3 +1,9 @@ +import type { IDisposable, ITerminalInitOnlyOptions, ITerminalOptions, Terminal } from 'xterm'; +import type { FitAddon } from 'xterm-addon-fit'; +import type { SearchAddon } from 'xterm-addon-search'; +import type { WebLinksAddon } from 'xterm-addon-web-links'; +import type { WebglAddon } from 'xterm-addon-webgl'; + // 执行类型 export type ExecType = 'BATCH' | 'JOB'; @@ -37,3 +43,97 @@ export const execHostStatusKey = 'execHostStatus'; // 加载的字典值 export const dictKeys = [execStatusKey, execHostStatusKey]; + +// appender 配置 +export const LogAppenderOptions: ITerminalOptions & ITerminalInitOnlyOptions = { + theme: { + foreground: '#FFFFFF', + background: '#1C1C1C', + selectionBackground: '#444444', + }, + cols: 30, + rows: 8, + rightClickSelectsWord: true, + disableStdin: true, + cursorStyle: 'bar', + cursorBlink: false, + fastScrollModifier: 'alt', + fontSize: 13, + lineHeight: 1.12, + convertEol: true, +}; + +// dom 引用 +export interface LogDomRef { + id: number; + el: HTMLElement; + openSearch: () => {}; +} + +// appender 配置 +export interface LogAppenderConf { + id: number; + el: HTMLElement; + openSearch: () => {}; + terminal: Terminal; + addons: LogAddons; +} + +// appender 插件 +export interface LogAddons extends Record { + fit: FitAddon; + webgl: WebglAddon; + search: SearchAddon; + weblink: WebLinksAddon; +} + +// 执行日志 appender 定义 +export interface ILogAppender { + // 初始化 + init(refs: Array): Promise; + + // 设置当前元素 + setCurrent(id: number): void; + + // 打开搜索 + openSearch(): void; + + // 查找关键字 + find(word: string, next: boolean, options: any): void; + + // 聚焦 + focus(): void; + + // 自适应 + fitAll(): void; + + // 去顶部 + toTop(): void; + + // 去底部 + toBottom(): void; + + // 添加字体大小 + addFontSize(addSize: number): void; + + // 复制 + copy(): void; + + // 复制全部 + copyAll(): void; + + // 选中全部 + selectAll(): void; + + // 清空 + clear(): void; + + // 关闭 client + closeClient(): void; + + // 关闭 view + closeView(): void; + + // 关闭 + close(): void; +} diff --git a/orion-ops-ui/src/components/exec/log/panel/appender-const.ts b/orion-ops-ui/src/components/exec/log/panel/appender-const.ts deleted file mode 100644 index 56f8d12a..00000000 --- a/orion-ops-ui/src/components/exec/log/panel/appender-const.ts +++ /dev/null @@ -1,99 +0,0 @@ -import type { IDisposable, ITerminalInitOnlyOptions, ITerminalOptions, Terminal } from 'xterm'; -import type { FitAddon } from 'xterm-addon-fit'; -import type { SearchAddon } from 'xterm-addon-search'; -import type { WebLinksAddon } from 'xterm-addon-web-links'; -import type { WebglAddon } from 'xterm-addon-webgl'; - -// appender 配置 -export const LogAppenderOptions: ITerminalOptions & ITerminalInitOnlyOptions = { - theme: { - foreground: '#FFFFFF', - background: '#1C1C1C', - selectionBackground: '#444444', - }, - cols: 30, - rows: 8, - rightClickSelectsWord: true, - disableStdin: true, - cursorStyle: 'bar', - cursorBlink: false, - fastScrollModifier: 'alt', - fontSize: 13, - lineHeight: 1.12, - convertEol: true, -}; - -// dom 引用 -export interface LogDomRef { - id: number; - el: HTMLElement; - openSearch: () => {}; -} - -// appender 配置 -export interface LogAppenderConf { - id: number; - el: HTMLElement; - openSearch: () => {}; - terminal: Terminal; - addons: LogAddons; -} - -// appender 插件 -export interface LogAddons extends Record { - fit: FitAddon; - webgl: WebglAddon; - search: SearchAddon; - weblink: WebLinksAddon; -} - -// 执行日志 appender 定义 -export interface ILogAppender { - // 初始化 - init(refs: Array): Promise; - - // 设置当前元素 - setCurrent(id: number): void; - - // 打开搜索 - openSearch(): void; - - // 查找关键字 - find(word: string, next: boolean, options: any): void; - - // 聚焦 - focus(): void; - - // 自适应 - fitAll(): void; - - // 去顶部 - toTop(): void; - - // 去底部 - toBottom(): void; - - // 添加字体大小 - addFontSize(addSize: number): void; - - // 复制 - copy(): void; - - // 复制全部 - copyAll(): void; - - // 选中全部 - selectAll(): void; - - // 清空 - clear(): void; - - // 关闭 client - closeClient(): void; - - // 关闭 view - closeView(): void; - - // 关闭 - close(): void; -} diff --git a/orion-ops-ui/src/components/exec/log/panel/index.vue b/orion-ops-ui/src/components/exec/log/panel/index.vue index fffcc9c5..e869873f 100644 --- a/orion-ops-ui/src/components/exec/log/panel/index.vue +++ b/orion-ops-ui/src/components/exec/log/panel/index.vue @@ -25,8 +25,7 @@ diff --git a/orion-ops-ui/src/views/exec/batch-upload/types/const.ts b/orion-ops-ui/src/views/exec/batch-upload/types/const.ts index 6b36e95b..962ac964 100644 --- a/orion-ops-ui/src/views/exec/batch-upload/types/const.ts +++ b/orion-ops-ui/src/views/exec/batch-upload/types/const.ts @@ -1,35 +1,48 @@ +// 上传任务状态定义 +export interface UploadTaskStatusType { + value: string, + step: number, + status: string, +} + // 上传任务状态 export const UploadTaskStatus = { - // 准备中 - PREPARATION: 'PREPARATION', - // 上传中 - UPLOADING: 'UPLOADING', - // 已完成 - FINISHED: 'FINISHED', - // 已取消 - CANCELED: 'CANCELED', -}; - -// 上传步骤 -export const UploadStep = { - // 准备中 - PREPARATION: 1, + // 等待中 + WAITING: { + value: 'WAITING', + step: 1, + status: 'process', + }, // 请求中 - REQUESTING: 2, - // 分发中 - UPLOADING: 3, + REQUESTING: { + value: 'REQUESTING', + step: 2, + status: 'process', + }, + // 上传中 + UPLOADING: { + value: 'UPLOADING', + step: 3, + status: 'process', + }, // 已完成 - FINISHED: 4, -}; - -// 上传步骤状态 -export const UploadStepStatus = { - // 处理中 - PROCESS: 'process', - // 上传完成 - FINISH: 'finish', - // 上传失败 - ERROR: 'error', + FINISHED: { + value: 'FINISHED', + step: 4, + status: 'finish', + }, + // 已失败 + FAILED: { + value: 'FAILED', + step: 4, + status: 'error', + }, + // 已取消 + CANCELED: { + value: 'CANCELED', + step: 4, + status: 'error', + }, }; // 上传任务状态 字典项 diff --git a/orion-ops-ui/src/views/exec/batch-upload/types/form.rules.ts b/orion-ops-ui/src/views/exec/batch-upload/types/form.rules.ts index 92370901..54b3c3b1 100644 --- a/orion-ops-ui/src/views/exec/batch-upload/types/form.rules.ts +++ b/orion-ops-ui/src/views/exec/batch-upload/types/form.rules.ts @@ -18,14 +18,8 @@ export const remotePath = [{ message: '上传路径长度不能大于1024位' }] as FieldRule[]; -export const files = [{ - required: true, - message: '请选择文件' -}] as FieldRule[]; - export default { description, hostIdList, remotePath, - files, } as Record; diff --git a/orion-ops-ui/src/views/host/terminal/components/sftp/sftp-upload-modal.vue b/orion-ops-ui/src/views/host/terminal/components/sftp/sftp-upload-modal.vue index 15104f42..76a9ac9c 100644 --- a/orion-ops-ui/src/views/host/terminal/components/sftp/sftp-upload-modal.vue +++ b/orion-ops-ui/src/views/host/terminal/components/sftp/sftp-upload-modal.vue @@ -109,7 +109,7 @@ return true; } // 添加到上传列表 - const files = fileList.value.map(s => s.file); + const files = fileList.value.map(s => s.file as File); transferManager.addUpload(hostId.value, parentPath.value, files); Message.success('已开始上传, 点击右侧传输列表查看进度'); // 清空 @@ -158,9 +158,10 @@ } :deep(.arco-upload-list) { - max-height: calc(100vh - 386px); - overflow-y: auto; padding: 0 12px 0 0; + max-height: calc(100vh - 386px); + overflow-x: hidden; + overflow-y: auto; } :deep(.arco-upload-list-item-name) {