From 978d94dddf3d45a7c583654bceff786a6f467791 Mon Sep 17 00:00:00 2001 From: lijiahangmax Date: Sat, 11 May 2024 00:16:42 +0800 Subject: [PATCH] =?UTF-8?q?:sparkles:=20=E6=89=B9=E9=87=8F=E4=B8=8A?= =?UTF-8?q?=E4=BC=A0=E4=BC=98=E5=8C=96.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/UploadTaskController.java | 5 +- .../asset/convert/UploadTaskConvert.java | 5 +- .../asset/entity/domain/UploadTaskDO.java | 8 ++ .../entity/dto/HostTerminalConnectDTO.java | 3 + .../asset/entity/vo/UploadTaskStatusVO.java | 44 +++++++++ .../module/asset/entity/vo/UploadTaskVO.java | 6 ++ .../host/upload/task/FileUploadTask.java | 3 +- .../host/upload/uploader/FileUploader.java | 31 ++++++- .../asset/service/UploadTaskService.java | 3 +- .../service/impl/HostTerminalServiceImpl.java | 1 + .../service/impl/UploadTaskServiceImpl.java | 31 +++---- .../resources/mapper/UploadTaskMapper.xml | 4 +- orion-ops-ui/src/api/exec/upload-task.ts | 15 +++- .../components/batch-upload-files.vue | 22 +++-- .../components/batch-upload-form.vue | 13 +-- .../components/batch-upload-hosts.vue | 19 +++- .../components/batch-upload-progress.vue | 48 +++++++--- .../batch-upload/components/upload-panel.vue | 90 ++++++++++++++----- .../views/exec/batch-upload/types/const.ts | 16 +--- .../exec-command-log-clear-modal.vue | 1 + .../src/views/exec/upload-task-log/index.vue | 17 ---- 21 files changed, 274 insertions(+), 111 deletions(-) create mode 100644 orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/vo/UploadTaskStatusVO.java delete mode 100644 orion-ops-ui/src/views/exec/upload-task-log/index.vue 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 09da6477..f3ae95c1 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 @@ -11,6 +11,7 @@ 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.UploadTaskStatusVO; import com.orion.ops.module.asset.entity.vo.UploadTaskVO; import com.orion.ops.module.asset.service.UploadTaskService; import io.swagger.v3.oas.annotations.Operation; @@ -40,8 +41,6 @@ import java.util.List; @SuppressWarnings({"ELValidationInJSP", "SpringElInspection"}) public class UploadTaskController { - // TODO 前端日志 测试删除慢吗 - @Resource private UploadTaskService uploadTaskService; @@ -92,7 +91,7 @@ public class UploadTaskController { @Operation(summary = "查询上传状态") @Parameter(name = "id", description = "id", required = true) @PreAuthorize("@ss.hasPermission('asset:upload-task:query')") - public List getUploadTaskStatus(@RequestParam("idList") List idList, @RequestParam("queryFiles") Boolean queryFiles) { + public List getUploadTaskStatus(@RequestParam("idList") List idList, @RequestParam("queryFiles") Boolean queryFiles) { return uploadTaskService.getUploadTaskStatus(idList, queryFiles); } diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/convert/UploadTaskConvert.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/convert/UploadTaskConvert.java index aa0da356..5f0d9ac8 100644 --- a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/convert/UploadTaskConvert.java +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/convert/UploadTaskConvert.java @@ -3,6 +3,7 @@ package com.orion.ops.module.asset.convert; import com.orion.ops.module.asset.entity.domain.UploadTaskDO; 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.vo.UploadTaskStatusVO; import com.orion.ops.module.asset.entity.vo.UploadTaskVO; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; @@ -27,6 +28,8 @@ public interface UploadTaskConvert { UploadTaskVO to(UploadTaskDO domain); - List to(List list); + List toList(List list); + + UploadTaskStatusVO toStatus(UploadTaskDO domain); } diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/domain/UploadTaskDO.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/domain/UploadTaskDO.java index 29178b7b..7303686d 100644 --- a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/domain/UploadTaskDO.java +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/domain/UploadTaskDO.java @@ -56,6 +56,14 @@ public class UploadTaskDO extends BaseDO { @TableField("extra_info") private String extraInfo; + @Schema(description = "文件数量") + @TableField("file_count") + private Integer fileCount; + + @Schema(description = "主机数量") + @TableField("host_count") + private Integer hostCount; + @Schema(description = "开始时间") @TableField("start_time") private Date startTime; diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/dto/HostTerminalConnectDTO.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/dto/HostTerminalConnectDTO.java index 37c828f5..ad427560 100644 --- a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/dto/HostTerminalConnectDTO.java +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/dto/HostTerminalConnectDTO.java @@ -38,6 +38,9 @@ public class HostTerminalConnectDTO { @Schema(description = "主机地址") private String hostAddress; + @Schema(description = "系统类型") + private String osType; + @Schema(description = "端口") private Integer port; diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/vo/UploadTaskStatusVO.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/vo/UploadTaskStatusVO.java new file mode 100644 index 00000000..806fa9c8 --- /dev/null +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/vo/UploadTaskStatusVO.java @@ -0,0 +1,44 @@ +package com.orion.ops.module.asset.entity.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +/** + * 上传任务状态 视图响应对象 + * + * @author Jiahang Li + * @version 1.0.7 + * @since 2024-5-7 22:15 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Schema(name = "UploadTaskStatusVO", description = "上传任务状态 视图响应对象") +public class UploadTaskStatusVO implements Serializable { + + private static final long serialVersionUID = 1L; + + @Schema(description = "id") + private Long id; + + @Schema(description = "状态") + private String status; + + @Schema(description = "开始时间") + private Date startTime; + + @Schema(description = "结束时间") + private Date endTime; + + @Schema(description = "上传文件") + private List files; + +} diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/vo/UploadTaskVO.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/vo/UploadTaskVO.java index 618244d4..6b1e66fd 100644 --- a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/vo/UploadTaskVO.java +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/vo/UploadTaskVO.java @@ -47,6 +47,12 @@ public class UploadTaskVO implements Serializable { @Schema(description = "额外信息") private String extraInfo; + @Schema(description = "文件数量") + private Integer fileCount; + + @Schema(description = "主机数量") + private Integer hostCount; + @Schema(description = "开始时间") private Date startTime; 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 34226304..504e5d66 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 @@ -1,6 +1,7 @@ package com.orion.ops.module.asset.handler.host.upload.task; import com.orion.lang.utils.Threads; +import com.orion.lang.utils.io.Files1; import com.orion.lang.utils.io.Streams; import com.orion.ops.framework.common.constant.Const; import com.orion.ops.module.asset.dao.UploadTaskDAO; @@ -136,7 +137,7 @@ public class FileUploadTask implements IFileUploadTask { .map(s -> FileUploadFileItemDTO.builder() .id(s.getId()) .fileId(s.getFileId()) - .remotePath(record.getRemotePath() + Const.SLASH + s.getFilePath()) + .remotePath(Files1.getPath(Const.SLASH + record.getRemotePath() + Const.SLASH + s.getFilePath())) .status(UploadTaskFileStatusEnum.WAITING.name()) .current(0L) .build()) diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/upload/uploader/FileUploader.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/upload/uploader/FileUploader.java index 7847f2de..d9d29a12 100644 --- a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/upload/uploader/FileUploader.java +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/upload/uploader/FileUploader.java @@ -1,15 +1,19 @@ package com.orion.ops.module.asset.handler.host.upload.uploader; import com.orion.lang.utils.Strings; +import com.orion.lang.utils.collect.Maps; +import com.orion.lang.utils.io.Files1; import com.orion.lang.utils.io.Streams; import com.orion.net.host.SessionStore; import com.orion.net.host.sftp.SftpExecutor; import com.orion.ops.framework.common.constant.Const; import com.orion.ops.framework.common.file.FileClient; +import com.orion.ops.framework.common.utils.PathUtils; import com.orion.ops.module.asset.dao.UploadTaskFileDAO; import com.orion.ops.module.asset.define.config.AppSftpConfig; import com.orion.ops.module.asset.entity.domain.UploadTaskFileDO; import com.orion.ops.module.asset.entity.dto.HostTerminalConnectDTO; +import com.orion.ops.module.asset.enums.HostSshOsTypeEnum; import com.orion.ops.module.asset.enums.UploadTaskFileStatusEnum; import com.orion.ops.module.asset.handler.host.upload.dto.FileUploadFileItemDTO; import com.orion.ops.module.asset.service.HostTerminalService; @@ -23,6 +27,7 @@ import java.io.InputStream; import java.io.OutputStream; import java.util.Date; import java.util.List; +import java.util.Map; import java.util.stream.Collectors; /** @@ -100,9 +105,10 @@ public class FileUploader implements IFileUploader { private boolean initSession() { log.info("HostFileUploader.initSession start taskId: {}, hostId: {}", taskId, hostId); try { - // TODO 测试看看有没有问题, 则修改为 打开 executor 后 是否会connect, 不需要的话就关闭 executor 然后重新打开 - // 打开会话 + // 替换用户路径 HostTerminalConnectDTO connectInfo = hostTerminalService.getTerminalConnectInfo(hostId); + this.replaceRemotePathVariable(connectInfo.getOsType(), connectInfo.getUsername()); + // 打开会话 this.sessionStore = hostTerminalService.openSessionStore(connectInfo); this.executor = sessionStore.getSftpExecutor(connectInfo.getFileNameCharset()); executor.connect(); @@ -215,6 +221,27 @@ public class FileUploader implements IFileUploader { uploadTaskFileDAO.updateById(update); } + /** + * 替换文件路径变量 + * + * @param osType osType + * @param username username + */ + private void replaceRemotePathVariable(String osType, String username) { + // 包含变量 + if (!files.get(0).getRemotePath().contains(Const.DOLLAR)) { + return; + } + String home = PathUtils.getHomePath(HostSshOsTypeEnum.WINDOWS.name().equals(osType), username); + // 替换变量 + Map env = Maps.newMap(4); + env.put("username", username); + env.put("home", home); + for (FileUploadFileItemDTO file : files) { + file.setRemotePath(Files1.getPath(Strings.format(file.getRemotePath(), env))); + } + } + @Override public void cancel() { log.info("HostFileUploader.cancel taskId: {}, hostId: {}, canceled: {}, closed: {}", taskId, hostId, canceled, closed); 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 c6a9d462..72285a7b 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 @@ -5,6 +5,7 @@ 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.UploadTaskStatusVO; import com.orion.ops.module.asset.entity.vo.UploadTaskVO; import java.util.List; @@ -51,7 +52,7 @@ public interface UploadTaskService { * @param queryFiles queryFiles * @return rows */ - List getUploadTaskStatus(List idList, Boolean queryFiles); + List getUploadTaskStatus(List idList, Boolean queryFiles); /** * 获取上传任务数量 diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/service/impl/HostTerminalServiceImpl.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/service/impl/HostTerminalServiceImpl.java index e6b94524..99d2f008 100644 --- a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/service/impl/HostTerminalServiceImpl.java +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/service/impl/HostTerminalServiceImpl.java @@ -241,6 +241,7 @@ public class HostTerminalServiceImpl implements HostTerminalService { conn.setHostId(host.getId()); conn.setHostName(host.getName()); conn.setHostAddress(host.getAddress()); + conn.setOsType(config.getOsType()); conn.setPort(config.getPort()); conn.setTimeout(config.getConnectTimeout()); conn.setCharset(config.getCharset()); 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 4b4d8afc..ea524cca 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 @@ -112,6 +112,8 @@ public class UploadTaskServiceImpl implements UploadTaskService { record.setUsername(user.getUsername()); record.setDescription(Strings.def(record.getDescription(), () -> Strings.format(DEFAULT_DESC, Dates.current()))); record.setStatus(UploadTaskStatusEnum.WAITING.name()); + record.setFileCount(files.size()); + record.setHostCount(hostIdList.size()); UploadTaskExtraDTO extra = UploadTaskExtraDTO.builder() .hostIdList(hostIdList) .hosts(hosts) @@ -159,7 +161,7 @@ public class UploadTaskServiceImpl implements UploadTaskService { // 计算传输进度 this.computeUploadProgress(id, files); // 设置任务文件 - this.setTaskFiles(uploadTask, files); + this.setTaskHostFiles(uploadTask, files); return uploadTask; } @@ -174,40 +176,39 @@ public class UploadTaskServiceImpl implements UploadTaskService { } @Override - public List getUploadTaskStatus(List idList, Boolean queryFiles) { + public List getUploadTaskStatus(List idList, Boolean queryFiles) { // 查询任务 - List tasks = uploadTaskDAO.of() + List tasks = uploadTaskDAO.of() .createWrapper() .select(UploadTaskDO::getId, UploadTaskDO::getStatus, UploadTaskDO::getStartTime, UploadTaskDO::getEndTime) .in(UploadTaskDO::getId, idList) .then() - .list(UploadTaskConvert.MAPPER::to); + .list(UploadTaskConvert.MAPPER::toStatus); if (!Booleans.isTrue(queryFiles)) { return tasks; } // 查询任务文件 - Map> filesMap = uploadTaskFileDAO.of() + Map> taskFilesMap = uploadTaskFileDAO.of() .createWrapper() - .select(UploadTaskFileDO::getId, UploadTaskFileDO::getTaskId, - UploadTaskFileDO::getHostId, UploadTaskFileDO::getStatus, + .select(UploadTaskFileDO::getId, UploadTaskFileDO::getTaskId, UploadTaskFileDO::getHostId, + UploadTaskFileDO::getStatus, UploadTaskFileDO::getFileSize, UploadTaskFileDO::getStartTime, UploadTaskFileDO::getEndTime) .in(UploadTaskFileDO::getTaskId, idList) .then() .stream() .map(UploadTaskFileConvert.MAPPER::to) .collect(Collectors.groupingBy(UploadTaskFileVO::getTaskId)); - for (UploadTaskVO task : tasks) { + for (UploadTaskStatusVO task : tasks) { Long id = task.getId(); - List files = filesMap.get(id); + List files = taskFilesMap.get(id); if (files == null) { files = Lists.empty(); } else { // 计算进度 this.computeUploadProgress(id, files); - // 设置任务文件 } - this.setTaskFiles(task, files); + task.setFiles(files); } return tasks; } @@ -311,8 +312,8 @@ public class UploadTaskServiceImpl implements UploadTaskService { return uploadTaskDAO.wrapper() .eq(UploadTaskDO::getId, request.getId()) .eq(UploadTaskDO::getUserId, request.getUserId()) - .in(UploadTaskDO::getDescription, request.getDescription()) - .eq(UploadTaskDO::getRemotePath, request.getRemotePath()) + .like(UploadTaskDO::getDescription, request.getDescription()) + .like(UploadTaskDO::getRemotePath, request.getRemotePath()) .eq(UploadTaskDO::getStatus, request.getStatus()) .ge(UploadTaskDO::getCreateTime, Arrays1.getIfPresent(request.getCreateTimeRange(), 0)) .le(UploadTaskDO::getCreateTime, Arrays1.getIfPresent(request.getCreateTimeRange(), 1)) @@ -450,12 +451,12 @@ public class UploadTaskServiceImpl implements UploadTaskService { } /** - * 设置任务文件 + * 设置主机任务文件 * * @param task task * @param files files */ - private void setTaskFiles(UploadTaskVO task, List files) { + private void setTaskHostFiles(UploadTaskVO task, List files) { Map> hostFiles = files.stream() .collect(Collectors.groupingBy(UploadTaskFileVO::getHostId)); List hosts = JSON.parseObject(task.getExtraInfo(), UploadTaskExtraDTO.class) diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/resources/mapper/UploadTaskMapper.xml b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/resources/mapper/UploadTaskMapper.xml index f717beb1..f10a7600 100644 --- a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/resources/mapper/UploadTaskMapper.xml +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/resources/mapper/UploadTaskMapper.xml @@ -11,6 +11,8 @@ + + @@ -22,7 +24,7 @@ - id, user_id, username, remote_path, description, status, extra_info, start_time, end_time, create_time, update_time, creator, updater, deleted + id, user_id, username, remote_path, description, status, extra_info, file_count, host_count, start_time, end_time, create_time, update_time, creator, updater, deleted diff --git a/orion-ops-ui/src/api/exec/upload-task.ts b/orion-ops-ui/src/api/exec/upload-task.ts index 4eb1e209..6801b6ce 100644 --- a/orion-ops-ui/src/api/exec/upload-task.ts +++ b/orion-ops-ui/src/api/exec/upload-task.ts @@ -53,6 +53,8 @@ export interface UploadTaskQueryResponse extends TableData { description: string; status: string; extraInfo: string; + fileCount: number; + hostCount: number; startTime: number; endTime: number; createTime: number; @@ -86,6 +88,17 @@ export interface UploadTaskFile { current: number; } +/** + * 上传任务状态响应 + */ +export interface UploadTaskStatusResponse extends TableData { + id: number; + status: string; + startTime: number; + endTime: number; + files: Array; +} + /** * 创建上传任务 */ @@ -125,7 +138,7 @@ export function getUploadTaskPage(request: UploadTaskQueryRequest) { * 查询上传任务状态 */ export function getUploadTaskStatus(idList: Array, queryFiles: boolean) { - return axios.get>('/asset/upload-task/status', { + return axios.get>('/asset/upload-task/status', { params: { idList, queryFiles }, paramsSerializer: params => { return qs.stringify(params, { arrayFormat: 'comma' }); diff --git a/orion-ops-ui/src/views/exec/batch-upload/components/batch-upload-files.vue b/orion-ops-ui/src/views/exec/batch-upload/components/batch-upload-files.vue index b99b8542..fd854426 100644 --- a/orion-ops-ui/src/views/exec/batch-upload/components/batch-upload-files.vue +++ b/orion-ops-ui/src/views/exec/batch-upload/components/batch-upload-files.vue @@ -41,14 +41,10 @@