修改终端提示.

This commit is contained in:
lijiahangmax
2025-03-09 19:58:10 +08:00
parent 79d9f69ed4
commit 14c4e77445
14 changed files with 48 additions and 31 deletions

View File

@@ -63,7 +63,7 @@ public class AssetAuthorizedDataServiceController {
@IgnoreLog(IgnoreLogMode.RET)
@GetMapping("/current-host")
@Operation(summary = "查询当前用户已授权的主机")
public AuthorizedHostWrapperVO getCurrentAuthorizedHost(@RequestParam("type") String type) {
public AuthorizedHostWrapperVO getCurrentAuthorizedHost(@RequestParam(value = "type", required = false) String type) {
return assetAuthorizedDataService.getUserAuthorizedHost(SecurityUtils.getLoginUserId(), type);
}

View File

@@ -49,7 +49,17 @@ public interface TerminalConnectLogDAO extends IMapper<TerminalConnectLogDO> {
* @param limit limit
* @return hostId
*/
List<Long> selectLatestConnectHostId(@Param("userId") Long userId, @Param("type") String type, @Param("limit") Integer limit);
default List<Long> selectLatestConnectHostId(Long userId, String type, Integer limit) {
return this.of()
.createWrapper(true)
.select(TerminalConnectLogDO::getHostId)
.eq(TerminalConnectLogDO::getUserId, userId)
.eq(TerminalConnectLogDO::getType, type)
.orderByDesc(TerminalConnectLogDO::getId)
.then()
.limit(limit)
.list(TerminalConnectLogDO::getHostId);
}
/**
* 查询终端连接日志用户数量

View File

@@ -33,16 +33,6 @@
id, user_id, username, host_id, host_name, host_address, type, session_id, status, start_time, end_time, extra_info, create_time, update_time, deleted
</sql>
<select id="selectLatestConnectHostId" resultType="java.lang.Long">
SELECT host_id
FROM terminal_connect_log
WHERE deleted = 0
AND type = #{type}
AND user_id = #{userId}
ORDER BY id DESC
LIMIT #{limit}
</select>
<select id="selectConnectLogUserCount" resultMap="CountResultMap">
SELECT DATE(create_time) connect_date, COUNT(1) total_count
FROM terminal_connect_log

View File

@@ -58,7 +58,7 @@
v-model:selected-group="selectedGroup"
:host-list="hostList"
:groups="hosts?.groupTree as any"
:nodes="treeNodes" />
:nodes="treeNodes as any" />
<!-- 列表视图 -->
<host-table v-else
v-model:selected-keys="selectedKeys"
@@ -83,13 +83,13 @@
import { onMounted, ref, watch, computed } from 'vue';
import { dataColor } from '@/utils';
import { dictKeys, NewConnectionType, newConnectionTypeKey } from './types/const';
import { useDictStore } from '@/store';
import { useCacheStore, useDictStore } from '@/store';
import { tagLabelFilter } from '@/types/form';
import { tagColor } from '@/views/asset/host-list/types/const';
import useLoading from '@/hooks/loading';
import useVisible from '@/hooks/visible';
import { getCurrentAuthorizedHost } from '@/api/asset/asset-authorized-data';
import { getAuthorizedHostOptions } from '@/types/options';
import { getLatestConnectHostId } from '@/api/asset/terminal-connect-log';
import HostTable from './components/host-table.vue';
import HostGroup from './components/host-group.vue';
@@ -151,10 +151,13 @@
setLoading(true);
try {
// 加载主机列表
const { data } = await getCurrentAuthorizedHost(props.type);
hosts.value = data;
const data = await useCacheStore().loadAuthorizedHosts(props.type);
// 禁用别名
data.hostList.forEach(s => s.alias = undefined as unknown as string);
// 查询最近连接的主机
const { data: latestHosts } = await getLatestConnectHostId(props.type, 30);
data.latestHosts = latestHosts;
hosts.value = data;
// 设置主机搜索选项
filterOptions.value = getAuthorizedHostOptions(data.hostList);
} catch (e) {

View File

@@ -15,7 +15,7 @@ import { getHostKeyList } from '@/api/asset/host-key';
import { getHostIdentityList } from '@/api/asset/host-identity';
import { getHostGroupTree } from '@/api/asset/host-group';
import { getMenuList } from '@/api/system/menu';
import { getCurrentAuthorizedHostIdentity, getCurrentAuthorizedHostKey } from '@/api/asset/asset-authorized-data';
import { getCurrentAuthorizedHost, getCurrentAuthorizedHostIdentity, getCurrentAuthorizedHostKey } from '@/api/asset/asset-authorized-data';
import { getCommandSnippetGroupList } from '@/api/asset/command-snippet-group';
import { getExecJobList } from '@/api/exec/exec-job';
import { getPathBookmarkGroupList } from '@/api/asset/path-bookmark-group';
@@ -99,8 +99,8 @@ export default defineStore('cache', {
},
// 获取主机列表
async loadHosts(type: HostType, force = false) {
return await this.load(`host_${type}`, () => getHostList(type), ['asset:host:query'], force);
async loadHosts(type: HostType = '', force = false) {
return await this.load(`host_${type || 'ALL'}`, () => getHostList(type), ['asset:host:query'], force);
},
// 获取主机密钥列表
@@ -123,6 +123,11 @@ export default defineStore('cache', {
return await this.load(`${type}_Tags`, () => getTagList(type), undefined, force);
},
// 获取已授权的主机列表
async loadAuthorizedHosts(type: HostType = '', force = false) {
return await this.load(`authorizedHost_${type || 'ALL'}`, () => getCurrentAuthorizedHost(type), undefined, force);
},
// 获取已授权的主机密钥列表
async loadAuthorizedHostKeys(force = false) {
return await this.load('authorizedHostKeys', getCurrentAuthorizedHostKey, undefined, force);

View File

@@ -1,6 +1,7 @@
// 缓存类型
export type CacheType = 'users' | 'menus' | 'roles'
| 'hostGroups' | 'hostKeys' | 'hostIdentities' | 'host_*'
| 'hostGroups' | 'host_*' | 'authorizedHost_*'
| 'hostKeys' | 'hostIdentities'
| 'dictKeys'
| 'execJob'
| 'authorizedHostKeys' | 'authorizedHostIdentities'

View File

@@ -10,7 +10,6 @@ import type {
} from './types';
import type { ISshSession, ITerminalSession, PanelSessionTabType, TerminalPanelTabItem } from '@/views/host/terminal/types/define';
import type { AuthorizedHostQueryResponse } from '@/api/asset/asset-authorized-data';
import { getCurrentAuthorizedHost } from '@/api/asset/asset-authorized-data';
import type { HostQueryResponse } from '@/api/asset/host';
import type { TerminalTheme, TerminalThemeSchema } from '@/api/asset/terminal';
import { getTerminalThemes } from '@/api/asset/terminal';
@@ -21,6 +20,7 @@ import { getLatestConnectHostId } from '@/api/asset/terminal-connect-log';
import { nextId } from '@/utils';
import { isObject } from '@/utils/is';
import { Message } from '@arco-design/web-vue';
import { useCacheStore } from '@/store';
import { PanelSessionType, TerminalTabs } from '@/views/host/terminal/types/const';
import TerminalTabManager from '@/views/host/terminal/handler/terminal-tab-manager';
import TerminalSessionManager from '@/views/host/terminal/handler/terminal-session-manager';
@@ -131,18 +131,18 @@ export default defineStore('terminal', {
},
// 加载主机列表
async loadHosts() {
async loadHostList() {
if (this.hosts.hostList?.length) {
return;
}
// 查询授权主机
const { data } = await getCurrentAuthorizedHost('SSH');
const data = await useCacheStore().loadAuthorizedHosts();
Object.keys(data).forEach(k => {
this.hosts[k as keyof AuthorizedHostQueryResponse] = data[k as keyof AuthorizedHostQueryResponse] as any;
});
this.hosts.latestHosts = [];
// 查询最近连接的主机
const { data: latestHosts } = await getLatestConnectHostId('SSH', 30);
const { data: latestHosts } = await getLatestConnectHostId('', 30);
this.hosts.latestHosts = latestHosts;
},

View File

@@ -93,7 +93,7 @@
try {
// 加载组内数据
const { data } = await getHostGroupRelList(groupId as number);
const hosts = await cacheStore.loadHosts('');
const hosts = await cacheStore.loadHosts();
selectedGroupHosts.value = data.map(s => hosts.find(h => h.id === s) as HostQueryResponse)
.filter(Boolean);
} catch (e) {
@@ -138,6 +138,8 @@
idList: checkedGroups.value
});
Message.success('授权成功');
// 清空缓存
cacheStore.reset('authorizedHost_ALL', 'authorizedHost_SSH');
} catch (e) {
} finally {
setLoading(false);

View File

@@ -96,6 +96,8 @@
idList: selectedKeys.value
});
Message.success('授权成功');
// 清空缓存
cacheStore.reset('authorizedHostIdentities');
} catch (e) {
} finally {
setLoading(false);

View File

@@ -72,6 +72,8 @@
idList: selectedKeys.value
});
Message.success('授权成功');
// 清空缓存
cacheStore.reset('authorizedHostKeys');
} catch (e) {
} finally {
setLoading(false);

View File

@@ -113,7 +113,7 @@
// 加载主机列表
const loadHosts = () => {
cacheStore.loadHosts('').then(hosts => {
cacheStore.loadHosts().then(hosts => {
data.value = hosts.map(s => {
return {
value: String(s.id),

View File

@@ -339,7 +339,8 @@
// 重新加载数据
fetchCardData();
// 清空缓存
cacheStore.reset('host_', 'host_SSH');
cacheStore.reset('host_ALL', 'host_SSH',
'authorizedHost_ALL', 'authorizedHost_SSH');
};
defineExpose({ reload });

View File

@@ -373,7 +373,8 @@
// 重新加载数据
fetchTableData();
// 清空缓存
cacheStore.reset('host_', 'host_SSH');
cacheStore.reset('host_ALL', 'host_SSH',
'authorizedHost_ALL', 'authorizedHost_SSH');
};
defineExpose({ reload });

View File

@@ -79,7 +79,7 @@
const {
fetchPreference, getCurrentSession, openSession,
layoutState, preference, loadHosts, hosts, tabManager, sessionManager
layoutState, preference, loadHostList, hosts, tabManager, sessionManager
} = useTerminalStore();
const { loading, setLoading } = useLoading(true);
const { enter: enterFull, exit: exitFull } = useFullscreen();
@@ -165,7 +165,7 @@
onMounted(async () => {
try {
// 加载主机
await loadHosts();
await loadHostList();
// 默认连接主机
const connect = route.query.connect as string;
if (connect) {