diff --git a/orion-visor-modules/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/org/dromara/visor/module/asset/controller/HostGroupController.java b/orion-visor-modules/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/org/dromara/visor/module/asset/controller/HostGroupController.java index 3333ef92..87b32e40 100644 --- a/orion-visor-modules/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/org/dromara/visor/module/asset/controller/HostGroupController.java +++ b/orion-visor-modules/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/org/dromara/visor/module/asset/controller/HostGroupController.java @@ -85,7 +85,7 @@ public class HostGroupController { @OperatorLog(HostGroupOperatorType.RENAME) @PutMapping("/rename") @Operation(summary = "修改名称") - @PreAuthorize("@ss.hasPermission('asset:host-group:update')") + @PreAuthorize("@ss.hasAnyPermission('asset:host-group:update', 'asset:host:query')") public Integer updateHostGroupName(@Validated @RequestBody DataGroupRenameDTO request) { return hostGroupService.updateHostGroupName(request); } @@ -112,7 +112,7 @@ public class HostGroupController { @GetMapping("/rel-list") @Operation(summary = "查询分组内主机") @Parameter(name = "groupId", description = "groupId", required = true) - @PreAuthorize("@ss.hasPermission('asset:host-group:update')") + @PreAuthorize("@ss.hasAnyPermission('asset:host-group:update', 'asset:host:query')") public Set queryHostGroupRel(@RequestParam("groupId") Long groupId) { return hostGroupService.queryHostGroupRel(groupId); } diff --git a/orion-visor-modules/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/org/dromara/visor/module/asset/entity/request/host/HostCreateRequest.java b/orion-visor-modules/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/org/dromara/visor/module/asset/entity/request/host/HostCreateRequest.java index 23bf9166..dd0c77a2 100644 --- a/orion-visor-modules/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/org/dromara/visor/module/asset/entity/request/host/HostCreateRequest.java +++ b/orion-visor-modules/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/org/dromara/visor/module/asset/entity/request/host/HostCreateRequest.java @@ -28,10 +28,7 @@ import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; -import javax.validation.constraints.Max; -import javax.validation.constraints.Min; -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.Size; +import javax.validation.constraints.*; import java.io.Serializable; import java.util.List; @@ -78,6 +75,7 @@ public class HostCreateRequest implements Serializable { @Schema(description = "主机端口") private Integer port; + @NotEmpty @Schema(description = "主机分组") private List groupIdList; diff --git a/orion-visor-modules/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/org/dromara/visor/module/asset/entity/request/host/HostUpdateRequest.java b/orion-visor-modules/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/org/dromara/visor/module/asset/entity/request/host/HostUpdateRequest.java index 0414b028..2494db6b 100644 --- a/orion-visor-modules/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/org/dromara/visor/module/asset/entity/request/host/HostUpdateRequest.java +++ b/orion-visor-modules/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/org/dromara/visor/module/asset/entity/request/host/HostUpdateRequest.java @@ -76,6 +76,7 @@ public class HostUpdateRequest implements Serializable { @Schema(description = "主机端口") private Integer port; + @NotEmpty @Schema(description = "主机分组") private List groupIdList; diff --git a/orion-visor-ui/src/components/asset/host-group/tree-selector/index.vue b/orion-visor-ui/src/components/asset/host-group/tree-selector/index.vue index b51c3e8c..7dd5b31e 100644 --- a/orion-visor-ui/src/components/asset/host-group/tree-selector/index.vue +++ b/orion-visor-ui/src/components/asset/host-group/tree-selector/index.vue @@ -47,7 +47,7 @@ const initOptions = async () => { setLoading(true); try { - treeData.value = await cacheStore.loadHostGroups(); + treeData.value = await cacheStore.loadHostGroupTree(); } catch (e) { } finally { setLoading(false); diff --git a/orion-visor-ui/src/components/asset/host-group/tree/index.vue b/orion-visor-ui/src/components/asset/host-group/tree/index.vue index 6a3ebda0..d4c62fae 100644 --- a/orion-visor-ui/src/components/asset/host-group/tree/index.vue +++ b/orion-visor-ui/src/components/asset/host-group/tree/index.vue @@ -310,7 +310,7 @@ const fetchTreeData = async (force = false) => { try { emits('setLoading', true); - const groups = await cacheStore.loadHostGroups(force); + const groups = await cacheStore.loadHostGroupTree(force); treeData.value = groups || []; } catch (e) { } finally { diff --git a/orion-visor-ui/src/store/modules/cache/index.ts b/orion-visor-ui/src/store/modules/cache/index.ts index 365eda65..2267e6f7 100644 --- a/orion-visor-ui/src/store/modules/cache/index.ts +++ b/orion-visor-ui/src/store/modules/cache/index.ts @@ -93,9 +93,9 @@ export default defineStore('cache', { return await this.load('menus', () => getMenuList({}), ['infra:system-menu:query'], force); }, - // 获取主机分组列表 - async loadHostGroups(force = false) { - return await this.load('hostGroups', getHostGroupTree, ['asset:host-group:update'], force); + // 获取主机分组树 + async loadHostGroupTree(force = false) { + return await this.load('hostGroups', getHostGroupTree, ['asset:host-group:update', 'asset:host:query'], force); }, // 获取主机列表 diff --git a/orion-visor-ui/src/types/arco.d.ts b/orion-visor-ui/src/types/arco.d.ts index 3077df97..20944620 100644 --- a/orion-visor-ui/src/types/arco.d.ts +++ b/orion-visor-ui/src/types/arco.d.ts @@ -1,8 +1,7 @@ -// eslint-disable-next-line @typescript-eslint/no-unused-vars import type { TreeNodeData } from '@arco-design/web-vue'; import type { NodeData } from './global'; declare module '@arco-design/web-vue' { - interface TreeNodeData extends NodeData { + export interface TreeNodeData extends TreeNodeData, NodeData { } } diff --git a/orion-visor-ui/src/types/axios.d.ts b/orion-visor-ui/src/types/axios.d.ts index d74826df..b0e709dd 100644 --- a/orion-visor-ui/src/types/axios.d.ts +++ b/orion-visor-ui/src/types/axios.d.ts @@ -1,9 +1,7 @@ -// eslint-disable-next-line @typescript-eslint/no-unused-vars import type { AxiosRequestConfig } from 'axios'; declare module 'axios' { - // eslint-disable-next-line no-shadow - export interface AxiosRequestConfig { + export interface AxiosRequestConfig extends AxiosRequestConfig { // 是否添加 Authorization setAuthorization?: boolean; // 是否使用原始返回 diff --git a/orion-visor-ui/src/utils/file.ts b/orion-visor-ui/src/utils/file.ts index ed1e1a7b..cf72abb3 100644 --- a/orion-visor-ui/src/utils/file.ts +++ b/orion-visor-ui/src/utils/file.ts @@ -1,5 +1,3 @@ -import { isEmptyStr } from './index'; - /** * 获取 base64 实际数据 */ @@ -56,7 +54,7 @@ export function getPathAnalysis(path: string, paths: PathAnalysis[] = []): PathA return paths; } const name = path.substring(lastSeparatorIndex, path.length); - if (!isEmptyStr(name) && name !== '/') { + if (name && name !== '/') { paths.unshift({ name: name.substring(1, name.length), path: path diff --git a/orion-visor-ui/src/utils/index.ts b/orion-visor-ui/src/utils/index.ts index 2d101056..17f9e280 100644 --- a/orion-visor-ui/src/utils/index.ts +++ b/orion-visor-ui/src/utils/index.ts @@ -51,13 +51,6 @@ export function dataColor(str: string, colors: string[], defaultColor = ''): str return colors[total % colors.length]; } -/** - * 判断值是否非空 - */ -export function isEmptyStr(val: any) { - return typeof (val) === 'undefined' || val == null || val === ''; -} - export const YMD_HMS = 'yyyy-MM-dd HH:mm:ss'; /** @@ -144,54 +137,6 @@ export function toAnonymousNumber(value: string | undefined): number { } } -/** - * 格式化数字为 ,分割 - */ -export function formatNumber(value: number = 0) { - const list = (value + '').split('.'); - const prefix = list[0].charAt(0) === '-' ? '-' : ''; - let num = prefix ? list[0].slice(1) : list[0]; - let result = ''; - while (num.length > 3) { - result = `,${num.slice(-3)}${result}`; - num = num.slice(0, num.length - 3); - } - if (num) { - result = num + result; - } - return `${prefix}${result}${list[1] ? `.${list[1]}` : ''}`; -} - -/** - * 判断是否为数字 - */ -export function isNumber(value: any, decimal = true, negative = true) { - let reg; - if (decimal && negative) { - reg = /^-?[0-9]*(\.[0-9]*)?$/; - } else if (!decimal && negative) { - reg = /^-?[0-9]*$/; - } else if (decimal && !negative) { - reg = /^[0-9]*(\.[0-9]*)?$/; - } else if (!decimal && !negative) { - reg = /^[0-9]*$/; - } else { - return false; - } - return (!isNaN(value) && reg.test(value)) || value === ''; -} - -/** - * 替换数字 - */ -export function replaceNumber(value: string) { - const s = value.charAt(value.length - 1); - if (s === '.' || s === '-') { - return s.substring(0, value.length - 1); - } - return value; -} - /** * 重设对象 */ diff --git a/orion-visor-ui/src/views/asset/grant/components/host-group-grant.vue b/orion-visor-ui/src/views/asset/grant/components/host-group-grant.vue index 11b83614..dba246f0 100644 --- a/orion-visor-ui/src/views/asset/grant/components/host-group-grant.vue +++ b/orion-visor-ui/src/views/asset/grant/components/host-group-grant.vue @@ -151,7 +151,7 @@ // 全选 const selectAll = async () => { // 从缓存中查询全部分组 - const groups = await cacheStore.loadHostGroups(); + const groups = await cacheStore.loadHostGroupTree(); const groupKeys: number[] = []; flatNodeKeys(groups, groupKeys); checkedGroups.value = groupKeys; @@ -160,7 +160,7 @@ // 反选 const reverseSelect = async () => { // 从缓存中查询全部分组 - const groups = await cacheStore.loadHostGroups(); + const groups = await cacheStore.loadHostGroupTree(); const groupKeys: number[] = []; flatNodeKeys(groups, groupKeys); checkedGroups.value = groupKeys.filter(s => !checkedGroups.value.includes(s)); diff --git a/orion-visor-ui/src/views/asset/host-list/types/form.rules.ts b/orion-visor-ui/src/views/asset/host-list/types/form.rules.ts index 02a506fc..d2716ab5 100644 --- a/orion-visor-ui/src/views/asset/host-list/types/form.rules.ts +++ b/orion-visor-ui/src/views/asset/host-list/types/form.rules.ts @@ -44,6 +44,11 @@ export const port = [{ message: '输入的端口不合法' }] as FieldRule[]; +export const groupIdList = [{ + required: true, + message: '请选择主机分组' +}] as FieldRule[]; + export const tags = [{ maxLength: 5, message: '最多选择5个标签' @@ -61,6 +66,7 @@ export default { code, address, port, + groupIdList, tags, description, } as Record;