diff --git a/docs/about/change-log.md b/docs/about/change-log.md index a11debb1..ab49b9fa 100644 --- a/docs/about/change-log.md +++ b/docs/about/change-log.md @@ -6,10 +6,17 @@ `2024-04-` `release` -* 🔨 优化 定时删除未引用的 `tag` -* 🔨 优化 命令执行日志时间不自增 +* 🐞 修复 用户列表用户名显示错误 +* 🌈 新增 定时删除未引用的 `tag` +* 🌈 新增 执行命令时可使用脚本文件执行 +* 🌈 新增 主机身份添加类型字段 +* 🔨 优化 文件传输列表进度显示 +* 🔨 优化 命令执行日志持续时间 * 🔨 优化 tracker 监听文件可配置 `app.tracker` * 🔨 优化 sftp 上传文件重复处理可配置 `app.sftp` +* 🔨 优化 用户状态调整交互逻辑 +* 🔨 优化 角色状态调整交互逻辑 +* 🔨 删除 用户锁定状态 [如何升级](/update/v1.0.5.md) diff --git a/docs/about/roadmap.md b/docs/about/roadmap.md index e921cdbe..96d2377c 100644 --- a/docs/about/roadmap.md +++ b/docs/about/roadmap.md @@ -1,10 +1,7 @@ ## 功能排期 ⏳ -* 优化文件传输列表进度显示 -* 主机身份类型 -* 终端断开连接后回车重新连接 -* 使用文件执行命令 * 管理员也需要自行授权资产 +* 快捷命令导入 * 文件夹书签 * 批量上传 * 站内消息 diff --git a/docs/update/v1.0.5.md b/docs/update/v1.0.5.md index 12cda601..c71c7b3c 100644 --- a/docs/update/v1.0.5.md +++ b/docs/update/v1.0.5.md @@ -3,9 +3,33 @@ > sql 脚本 - DDL ```sql +ALTER TABLE `system_user` +MODIFY COLUMN `status` tinyint(0) NULL DEFAULT 1 COMMENT '用户状态 0停用 1启用' AFTER `email`; + +ALTER TABLE `host_identity` +ADD COLUMN `type` char(12) NULL COMMENT '类型' AFTER `name`; + +ALTER TABLE `exec_log` +ADD COLUMN `script_exec` tinyint(0) NULL DEFAULT 0 COMMENT '是否使用脚本执行' AFTER `timeout`; + +ALTER TABLE `exec_job` +ADD COLUMN `script_exec` tinyint(0) NULL DEFAULT 0 COMMENT '是否使用脚本执行' AFTER `timeout`; + +ALTER TABLE `exec_template` +ADD COLUMN `script_exec` tinyint(0) NULL DEFAULT 0 COMMENT '是否使用脚本执行' AFTER `timeout`; + +ALTER TABLE `exec_host_log` +ADD COLUMN `script_path` varchar(512) NULL COMMENT '脚本路径' AFTER `log_path`; ``` > sql 脚本 - DML ```sql +-- 初始化主机身份类型 +UPDATE `host_identity` SET type = IF(key_id IS NOT NULL, 'KEY', 'PASSWORD'); +-- 重新设置用户状态 +UPDATE `system_user` SET status = 0 WHERE status = 2; +DELETE FROM `dict_value` WHERE id = 19; +-- 设置主机配置中的 osType +UPDATE host_config SET config = JSON_SET(config, '$.osType', 'LINUX') WHERE type = 'ssh' AND deleted = 0; ``` diff --git a/docs/update/v1.0.6.md b/docs/update/v1.0.6.md index a3ece676..c1a85c78 100644 --- a/docs/update/v1.0.6.md +++ b/docs/update/v1.0.6.md @@ -3,22 +3,9 @@ > sql 脚本 - DDL ```sql -ALTER TABLE `exec_log` -ADD COLUMN `script_exec` tinyint(0) NULL DEFAULT 0 COMMENT '是否使用脚本执行' AFTER `timeout`; - -ALTER TABLE `exec_job` -ADD COLUMN `script_exec` tinyint(0) NULL DEFAULT 0 COMMENT '是否使用脚本执行' AFTER `timeout`; - -ALTER TABLE `exec_template` -ADD COLUMN `script_exec` tinyint(0) NULL DEFAULT 0 COMMENT '是否使用脚本执行' AFTER `timeout`; - -ALTER TABLE `exec_host_log` -ADD COLUMN `script_path` varchar(512) NULL COMMENT '脚本路径' AFTER `log_path`; ``` > sql 脚本 - DML ```sql --- 设置主机配置中的 osType -UPDATE host_config SET config = JSON_SET(config, '$.osType', 'LINUX') WHERE type = 'ssh' AND deleted = 0; ``` diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/domain/HostIdentityDO.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/domain/HostIdentityDO.java index 900a24ca..f7c340b3 100644 --- a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/domain/HostIdentityDO.java +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/domain/HostIdentityDO.java @@ -31,6 +31,10 @@ public class HostIdentityDO extends BaseDO { @TableField("name") private String name; + @Schema(description = "类型") + @TableField("type") + private String type; + @Schema(description = "用户名") @TableField("username") private String username; diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/dto/HostIdentityCacheDTO.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/dto/HostIdentityCacheDTO.java index eccdd7a3..27d2ced3 100644 --- a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/dto/HostIdentityCacheDTO.java +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/dto/HostIdentityCacheDTO.java @@ -30,6 +30,9 @@ public class HostIdentityCacheDTO implements LongCacheIdModel, Serializable { @Schema(description = "名称") private String name; + @Schema(description = "类型") + private String type; + @Schema(description = "用户名") private String username; diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/request/host/HostIdentityCreateRequest.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/request/host/HostIdentityCreateRequest.java index 92e6e771..2e513039 100644 --- a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/request/host/HostIdentityCreateRequest.java +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/request/host/HostIdentityCreateRequest.java @@ -29,6 +29,11 @@ public class HostIdentityCreateRequest implements Serializable { @Schema(description = "名称") private String name; + @NotBlank + @Size(max = 12) + @Schema(description = "类型") + private String type; + @NotBlank @Size(max = 128) @Schema(description = "用户名") diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/request/host/HostIdentityQueryRequest.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/request/host/HostIdentityQueryRequest.java index 5cba3c0f..0e0cab0e 100644 --- a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/request/host/HostIdentityQueryRequest.java +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/request/host/HostIdentityQueryRequest.java @@ -31,6 +31,10 @@ public class HostIdentityQueryRequest extends PageRequest { @Schema(description = "名称") private String name; + @Size(max = 12) + @Schema(description = "类型") + private String type; + @Size(max = 128) @Schema(description = "用户名") private String username; diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/request/host/HostIdentityUpdateRequest.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/request/host/HostIdentityUpdateRequest.java index 4515beb9..24268622 100644 --- a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/request/host/HostIdentityUpdateRequest.java +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/request/host/HostIdentityUpdateRequest.java @@ -34,6 +34,11 @@ public class HostIdentityUpdateRequest implements UpdatePasswordAction { @Schema(description = "名称") private String name; + @NotBlank + @Size(max = 12) + @Schema(description = "类型") + private String type; + @NotBlank @Size(max = 128) @Schema(description = "用户名") diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/vo/HostIdentityVO.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/vo/HostIdentityVO.java index 3889eb11..4fa0db74 100644 --- a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/vo/HostIdentityVO.java +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/vo/HostIdentityVO.java @@ -31,6 +31,9 @@ public class HostIdentityVO implements Serializable { @Schema(description = "名称") private String name; + @Schema(description = "类型") + private String type; + @Schema(description = "用户名") private String username; diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/enums/HostIdentityTypeEnum.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/enums/HostIdentityTypeEnum.java new file mode 100644 index 00000000..d9a884fd --- /dev/null +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/enums/HostIdentityTypeEnum.java @@ -0,0 +1,36 @@ +package com.orion.ops.module.asset.enums; + +/** + * 主机身份类型 + * + * @author Jiahang Li + * @version 1.0.0 + * @since 2023/9/21 19:01 + */ +public enum HostIdentityTypeEnum { + + /** + * 密码 + */ + PASSWORD, + + /** + * 秘钥 + */ + KEY, + + ; + + public static HostIdentityTypeEnum of(String type) { + if (type == null) { + return null; + } + for (HostIdentityTypeEnum value : values()) { + if (value.name().equals(type)) { + return value; + } + } + return null; + } + +} diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/service/impl/HostIdentityServiceImpl.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/service/impl/HostIdentityServiceImpl.java index 2227f632..a935c706 100644 --- a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/service/impl/HostIdentityServiceImpl.java +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/service/impl/HostIdentityServiceImpl.java @@ -25,6 +25,7 @@ import com.orion.ops.module.asset.entity.request.host.HostIdentityCreateRequest; import com.orion.ops.module.asset.entity.request.host.HostIdentityQueryRequest; import com.orion.ops.module.asset.entity.request.host.HostIdentityUpdateRequest; import com.orion.ops.module.asset.entity.vo.HostIdentityVO; +import com.orion.ops.module.asset.enums.HostIdentityTypeEnum; import com.orion.ops.module.asset.service.HostIdentityService; import com.orion.ops.module.infra.api.DataExtraApi; import lombok.extern.slf4j.Slf4j; @@ -64,7 +65,7 @@ public class HostIdentityServiceImpl implements HostIdentityService { public Long createHostIdentity(HostIdentityCreateRequest request) { log.info("HostIdentityService-createHostIdentity request: {}", JSON.toJSONString(request)); // 检查秘钥是否存在 - this.checkKeyIdPresent(request.getKeyId()); + this.checkCreateParams(request); // 转换 HostIdentityDO record = HostIdentityConvert.MAPPER.to(request); // 查询数据是否冲突 @@ -85,19 +86,25 @@ public class HostIdentityServiceImpl implements HostIdentityService { @Override public Integer updateHostIdentityById(HostIdentityUpdateRequest request) { log.info("HostIdentityService-updateHostIdentityById request: {}", JSON.toJSONString(request)); - // 查询 + // 验证参数 Long id = Valid.notNull(request.getId(), ErrorMessage.ID_MISSING); + HostIdentityTypeEnum type = Valid.valid(HostIdentityTypeEnum::of, request.getType()); + if (HostIdentityTypeEnum.KEY.equals(type)) { + // 秘钥认证 + this.checkKeyId(request.getKeyId()); + } + // 查询主机身份 HostIdentityDO record = hostIdentityDAO.selectById(id); Valid.notNull(record, ErrorMessage.DATA_ABSENT); - // 检查秘钥是否存在 - this.checkKeyIdPresent(request.getKeyId()); // 转换 HostIdentityDO updateRecord = HostIdentityConvert.MAPPER.to(request); // 查询数据是否冲突 this.checkHostIdentityPresent(updateRecord); - // 设置密码 - String newPassword = PasswordModifier.getEncryptNewPassword(request); - updateRecord.setPassword(newPassword); + if (HostIdentityTypeEnum.PASSWORD.equals(type)) { + // 设置密码 + String newPassword = PasswordModifier.getEncryptNewPassword(request); + updateRecord.setPassword(newPassword); + } // 更新 LambdaUpdateWrapper wrapper = Wrappers.lambdaUpdate() .set(HostIdentityDO::getKeyId, request.getKeyId()) @@ -105,10 +112,7 @@ public class HostIdentityServiceImpl implements HostIdentityService { int effect = hostIdentityDAO.update(updateRecord, wrapper); log.info("HostIdentityService-updateHostIdentityById effect: {}", effect); // 删除缓存 - if (!record.getName().equals(updateRecord.getName()) || - !record.getUsername().equals(updateRecord.getUsername())) { - RedisMaps.delete(HostCacheKeyDefine.HOST_IDENTITY); - } + RedisMaps.delete(HostCacheKeyDefine.HOST_IDENTITY); return effect; } @@ -155,6 +159,7 @@ public class HostIdentityServiceImpl implements HostIdentityService { } // 设置秘钥名称 List keyIdList = dataGrid.stream() + .filter(s -> HostIdentityTypeEnum.KEY.name().equals(s.getType())) .map(HostIdentityVO::getKeyId) .filter(Objects::nonNull) .distinct() @@ -212,14 +217,28 @@ public class HostIdentityServiceImpl implements HostIdentityService { } /** - * 检查秘钥是否存在 + * 检查创建参数 + * + * @param request request + */ + private void checkCreateParams(HostIdentityCreateRequest request) { + HostIdentityTypeEnum type = Valid.valid(HostIdentityTypeEnum::of, request.getType()); + if (HostIdentityTypeEnum.PASSWORD.equals(type)) { + // 密码认证 + Valid.notBlank(request.getPassword(), ErrorMessage.PARAM_MISSING); + } else if (HostIdentityTypeEnum.KEY.equals(type)) { + // 秘钥认证 + this.checkKeyId(request.getKeyId()); + } + } + + /** + * 检查 keyId 是否存在 * * @param keyId keyId */ - private void checkKeyIdPresent(Long keyId) { - if (keyId == null) { - return; - } + private void checkKeyId(Long keyId) { + Valid.notNull(keyId, ErrorMessage.PARAM_MISSING); Valid.notNull(hostKeyDAO.selectById(keyId), ErrorMessage.KEY_ABSENT); } @@ -234,6 +253,7 @@ public class HostIdentityServiceImpl implements HostIdentityService { return hostIdentityDAO.wrapper() .eq(HostIdentityDO::getId, request.getId()) .like(HostIdentityDO::getName, request.getName()) + .eq(HostIdentityDO::getType, request.getType()) .like(HostIdentityDO::getUsername, request.getUsername()) .eq(HostIdentityDO::getKeyId, request.getKeyId()) .and(Strings.isNotEmpty(searchValue), c -> c 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 8f09b3be..4f161dd5 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 @@ -243,52 +243,62 @@ public class HostTerminalServiceImpl implements HostTerminalService { private HostTerminalConnectDTO getHostConnectInfo(HostDO host, HostSshConfigModel config, HostSshExtraModel extra) { - // 获取认证方式 - HostSshAuthTypeEnum authType = HostSshAuthTypeEnum.of(config.getAuthType()); - HostExtraSshAuthTypeEnum extraAuthType = Optional.ofNullable(extra) - .map(HostSshExtraModel::getAuthType) - .map(HostExtraSshAuthTypeEnum::of) - .orElse(HostExtraSshAuthTypeEnum.DEFAULT); - if (HostExtraSshAuthTypeEnum.CUSTOM_KEY.equals(extraAuthType)) { - // 自定义秘钥 - authType = HostSshAuthTypeEnum.KEY; - config.setKeyId(extra.getKeyId()); - if (extra.getUsername() != null) { - config.setUsername(extra.getUsername()); - } - } else if (HostExtraSshAuthTypeEnum.CUSTOM_IDENTITY.equals(extraAuthType)) { - // 自定义身份 - authType = HostSshAuthTypeEnum.IDENTITY; - config.setIdentityId(extra.getIdentityId()); - } - Long keyId = null; // 填充认证信息 HostTerminalConnectDTO conn = new HostTerminalConnectDTO(); conn.setHostId(host.getId()); conn.setHostName(host.getName()); conn.setHostAddress(host.getAddress()); conn.setPort(config.getPort()); + conn.setTimeout(config.getConnectTimeout()); conn.setCharset(config.getCharset()); conn.setFileNameCharset(config.getFileNameCharset()); conn.setFileContentCharset(config.getFileContentCharset()); - conn.setTimeout(config.getConnectTimeout()); - conn.setUsername(config.getUsername()); - // 填充身份信息 - if (HostSshAuthTypeEnum.PASSWORD.equals(authType)) { - conn.setPassword(config.getPassword()); - } else if (HostSshAuthTypeEnum.KEY.equals(authType)) { - // 秘钥认证 - keyId = config.getKeyId(); - } else if (HostSshAuthTypeEnum.IDENTITY.equals(authType)) { + + // 获取自定义认证方式 + HostExtraSshAuthTypeEnum extraAuthType = Optional.ofNullable(extra) + .map(HostSshExtraModel::getAuthType) + .map(HostExtraSshAuthTypeEnum::of) + .orElse(null); + if (HostExtraSshAuthTypeEnum.CUSTOM_KEY.equals(extraAuthType)) { + // 自定义秘钥 + config.setAuthType(HostSshAuthTypeEnum.KEY.name()); + config.setKeyId(extra.getKeyId()); + if (extra.getUsername() != null) { + config.setUsername(extra.getUsername()); + } + } else if (HostExtraSshAuthTypeEnum.CUSTOM_IDENTITY.equals(extraAuthType)) { + // 自定义身份 + config.setAuthType(HostSshAuthTypeEnum.IDENTITY.name()); + config.setIdentityId(extra.getIdentityId()); + } + + // 身份认证 + HostSshAuthTypeEnum authType = HostSshAuthTypeEnum.of(config.getAuthType()); + if (HostSshAuthTypeEnum.IDENTITY.equals(authType)) { // 身份认证 HostIdentityDO identity = hostIdentityDAO.selectById(config.getIdentityId()); Valid.notNull(identity, ErrorMessage.IDENTITY_ABSENT); - keyId = identity.getKeyId(); - conn.setUsername(identity.getUsername()); - conn.setPassword(identity.getPassword()); + config.setUsername(identity.getUsername()); + HostIdentityTypeEnum identityType = HostIdentityTypeEnum.of(identity.getType()); + if (HostIdentityTypeEnum.PASSWORD.equals(identityType)) { + // 密码类型 + authType = HostSshAuthTypeEnum.PASSWORD; + config.setPassword(identity.getPassword()); + } else if (HostIdentityTypeEnum.KEY.equals(identityType)) { + // 秘钥类型 + authType = HostSshAuthTypeEnum.KEY; + config.setKeyId(identity.getKeyId()); + } } - // 设置秘钥信息 - if (keyId != null) { + + // 填充认证信息 + conn.setUsername(config.getUsername()); + if (HostSshAuthTypeEnum.PASSWORD.equals(authType)) { + // 密码认证 + conn.setPassword(config.getPassword()); + } else if (HostSshAuthTypeEnum.KEY.equals(authType)) { + // 秘钥认证 + Long keyId = config.getKeyId(); HostKeyDO key = hostKeyDAO.selectById(keyId); Valid.notNull(key, ErrorMessage.KEY_ABSENT); conn.setKeyId(keyId); @@ -296,7 +306,6 @@ public class HostTerminalServiceImpl implements HostTerminalService { conn.setPrivateKey(key.getPrivateKey()); conn.setPrivateKeyPassword(key.getPassword()); } - // 连接 return conn; } diff --git a/orion-ops-ui/src/api/asset/host-identity.ts b/orion-ops-ui/src/api/asset/host-identity.ts index 3e0fb2a3..77276562 100644 --- a/orion-ops-ui/src/api/asset/host-identity.ts +++ b/orion-ops-ui/src/api/asset/host-identity.ts @@ -7,6 +7,7 @@ import axios from 'axios'; */ export interface HostIdentityCreateRequest { name?: string; + type?: string; username?: string; password?: string; keyId?: number; @@ -27,6 +28,7 @@ export interface HostIdentityQueryRequest extends Pagination { searchValue?: string; id?: number; name?: string; + type?: string; username?: string; keyId?: number; } @@ -37,6 +39,7 @@ export interface HostIdentityQueryRequest extends Pagination { export interface HostIdentityQueryResponse extends TableData { id: number; name: string; + type: string; username: string; password: string; keyId: number; 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 d86a616b..68d5f844 100644 --- a/orion-ops-ui/src/components/exec/log/panel/index.vue +++ b/orion-ops-ui/src/components/exec/log/panel/index.vue @@ -57,6 +57,8 @@ // 定时查询执行状态 if (record.status === execStatus.WAITING || record.status === execStatus.RUNNING) { + // 等待一秒后先查询一下状态 + setTimeout(fetchTaskStatus, 1000); // 注册状态轮询 statusIntervalId.value = setInterval(fetchTaskStatus, 5000); } @@ -92,8 +94,8 @@ if (hostStatus) { host.status = hostStatus.status; host.startTime = hostStatus.startTime; - // 使用时间 - host.finishTime = host.finishTime || Date.now(); + // 结束时间绑定了使用时间 如果未完成则使用当前时间 + host.finishTime = hostStatus.finishTime || Date.now(); host.exitStatus = hostStatus.exitStatus; host.errorMessage = hostStatus.errorMessage; } diff --git a/orion-ops-ui/src/views/asset/grant/components/host-identity-grant.vue b/orion-ops-ui/src/views/asset/grant/components/host-identity-grant.vue index 24811bff..36b09923 100644 --- a/orion-ops-ui/src/views/asset/grant/components/host-identity-grant.vue +++ b/orion-ops-ui/src/views/asset/grant/components/host-identity-grant.vue @@ -15,11 +15,24 @@ :pagination="false" :bordered="false" @row-click="clickRow"> + + @@ -38,11 +51,12 @@ import type { HostKeyQueryResponse } from '@/api/asset/host-key'; import { ref, onMounted } from 'vue'; import useLoading from '@/hooks/loading'; - import { getAuthorizedHostIdentity, grantHostIdentity } from '@/api/asset/asset-data-grant'; - import { Message } from '@arco-design/web-vue'; - import { hostIdentityColumns } from '../types/table.columns'; - import { useCacheStore } from '@/store'; import { useRowSelection } from '@/types/table'; + import { getAuthorizedHostIdentity, grantHostIdentity } from '@/api/asset/asset-data-grant'; + import { useCacheStore, useDictStore } from '@/store'; + import { hostIdentityColumns } from '../types/table.columns'; + import { identityTypeKey } from '../types/const'; + import { Message } from '@arco-design/web-vue'; import GrantLayout from './grant-layout.vue'; const props = defineProps<{ @@ -51,6 +65,7 @@ const cacheStore = useCacheStore(); const rowSelection = useRowSelection(); + const { getDictValue } = useDictStore(); const { loading, setLoading } = useLoading(); const selectedKeys = ref>([]); diff --git a/orion-ops-ui/src/views/asset/grant/index.vue b/orion-ops-ui/src/views/asset/grant/index.vue index 0d468130..1b7e0d87 100644 --- a/orion-ops-ui/src/views/asset/grant/index.vue +++ b/orion-ops-ui/src/views/asset/grant/index.vue @@ -26,8 +26,8 @@