🔨 添加连接操作.

This commit is contained in:
lijiahangmax
2024-12-26 22:19:30 +08:00
parent 8f1e976c2f
commit 4d08a18548
10 changed files with 56 additions and 26 deletions

View File

@@ -69,8 +69,10 @@ axios.interceptors.response.use(
if (!responseUrl || !responseUrl.includes('/logout')) { if (!responseUrl || !responseUrl.includes('/logout')) {
await useUserStore().logout(); await useUserStore().logout();
} }
// 重新加载自动跳转登录页面 // 非登录页面就重新加载, 会自动跳转登录页面
window.location.reload(); if (!window.location.pathname.includes('/login')) {
window.location.reload();
}
}); });
} else { } else {
// 其他异常 判断是否弹出错误信息 // 其他异常 判断是否弹出错误信息

View File

@@ -325,6 +325,8 @@
} }
}; };
defineExpose({ setMessageBoxVisible });
onMounted(() => { onMounted(() => {
// 查询未读消息 // 查询未读消息
pullHasUnreadMessage(); pullHasUnreadMessage();

View File

@@ -30,6 +30,7 @@
<a-button class="header-button" <a-button class="header-button"
type="text" type="text"
size="small" size="small"
title="清空全部已读消息"
@click="clearAllMessage"> @click="clearAllMessage">
清空 清空
</a-button> </a-button>

View File

@@ -2,7 +2,7 @@
<a-layout class="layout" :class="{ mobile: appStore.hideMenu }"> <a-layout class="layout" :class="{ mobile: appStore.hideMenu }">
<!-- tab bar --> <!-- tab bar -->
<div v-if="navbar" class="layout-navbar"> <div v-if="navbar" class="layout-navbar">
<nav-bar /> <nav-bar ref="navRef" />
</div> </div>
<a-layout style="flex-direction: row;"> <a-layout style="flex-direction: row;">
<!-- 左侧菜单栏 --> <!-- 左侧菜单栏 -->
@@ -58,7 +58,7 @@
import { useRoute, useRouter } from 'vue-router'; import { useRoute, useRouter } from 'vue-router';
import { useAppStore, useUserStore } from '@/store'; import { useAppStore, useUserStore } from '@/store';
import useResponsive from '@/hooks/responsive'; import useResponsive from '@/hooks/responsive';
import { toggleDrawerMenuKey } from '@/types/symbol'; import { openMessageBox, toggleDrawerMenuKey } from '@/types/symbol';
import PageLayout from './page-layout.vue'; import PageLayout from './page-layout.vue';
import NavBar from '@/components/app/navbar/index.vue'; import NavBar from '@/components/app/navbar/index.vue';
import TabBar from '@/components/app/tab-bar/index.vue'; import TabBar from '@/components/app/tab-bar/index.vue';
@@ -71,7 +71,8 @@
const route = useRoute(); const route = useRoute();
useResponsive(true); useResponsive(true);
const isInit = ref(false); const render = ref(false);
const navRef = ref();
const navbarHeight = `60px`; const navbarHeight = `60px`;
const navbar = computed(() => appStore.navbar); const navbar = computed(() => appStore.navbar);
const renderMenu = computed(() => appStore.menu && !appStore.topMenu); const renderMenu = computed(() => appStore.menu && !appStore.topMenu);
@@ -95,7 +96,7 @@
// 设置菜单展开状态 // 设置菜单展开状态
const setCollapsed = (val: boolean) => { const setCollapsed = (val: boolean) => {
if (!isInit.value) return; if (!render.value) return;
appStore.updateSettings({ menuCollapse: val }); appStore.updateSettings({ menuCollapse: val });
}; };
@@ -109,8 +110,13 @@
drawerVisible.value = !drawerVisible.value; drawerVisible.value = !drawerVisible.value;
}); });
// 对外暴露打开消息盒子
provide(openMessageBox, () => {
navRef.value.setMessageBoxVisible();
});
onMounted(() => { onMounted(() => {
isInit.value = true; render.value = true;
}); });
</script> </script>

View File

@@ -1,6 +1,9 @@
// 切换菜单状态 // 切换菜单状态
export const toggleDrawerMenuKey = Symbol(); export const toggleDrawerMenuKey = Symbol();
// 打开消息盒子
export const openMessageBox = Symbol();
// 打开偏好设置 // 打开偏好设置
export const openAppSettingKey = Symbol(); export const openAppSettingKey = Symbol();

View File

@@ -155,11 +155,12 @@
<!-- 操作 --> <!-- 操作 -->
<template #handle="{ record }"> <template #handle="{ record }">
<div class="table-handle-wrapper"> <div class="table-handle-wrapper">
<!-- 详情 --> <!-- 连接 -->
<a-button type="text" <a-button v-permission="['asset:terminal:access']"
type="text"
size="mini" size="mini"
@click="emits('openDetail', record)"> @click="openNewRoute({ name: 'terminal', query: { connect: record.hostId, type: record.type } })">
详情 连接
</a-button> </a-button>
<!-- 下线 --> <!-- 下线 -->
<a-popconfirm v-if="record.status === TerminalConnectStatus.CONNECTING" <a-popconfirm v-if="record.status === TerminalConnectStatus.CONNECTING"
@@ -174,6 +175,12 @@
下线 下线
</a-button> </a-button>
</a-popconfirm> </a-popconfirm>
<!-- 详情 -->
<a-button type="text"
size="mini"
@click="emits('openDetail', record)">
详情
</a-button>
<!-- 删除 --> <!-- 删除 -->
<a-popconfirm content="确认删除这条记录吗?" <a-popconfirm content="确认删除这条记录吗?"
position="left" position="left"
@@ -210,6 +217,7 @@
import useLoading from '@/hooks/loading'; import useLoading from '@/hooks/loading';
import { copy } from '@/hooks/copy'; import { copy } from '@/hooks/copy';
import { dateFormat } from '@/utils'; import { dateFormat } from '@/utils';
import { openNewRoute } from '@/router';
import UserSelector from '@/components/user/user/selector/index.vue'; import UserSelector from '@/components/user/user/selector/index.vue';
import HostSelector from '@/components/asset/host/selector/index.vue'; import HostSelector from '@/components/asset/host/selector/index.vue';

View File

@@ -50,7 +50,7 @@ const columns = [
}, { }, {
title: '操作', title: '操作',
slotName: 'handle', slotName: 'handle',
width: 180, width: 218,
align: 'left', align: 'left',
fixed: 'right', fixed: 'right',
}, },

View File

@@ -95,6 +95,13 @@
<!-- 操作 --> <!-- 操作 -->
<template #handle="{ record }"> <template #handle="{ record }">
<div class="table-handle-wrapper"> <div class="table-handle-wrapper">
<!-- 连接 -->
<a-button v-permission="['asset:terminal:access']"
type="text"
size="mini"
@click="openNewRoute({ name: 'terminal', query: { connect: record.hostId, type: record.type } })">
连接
</a-button>
<!-- 下线 --> <!-- 下线 -->
<a-popconfirm content="确认要强制下线吗?" <a-popconfirm content="确认要强制下线吗?"
position="left" position="left"
@@ -129,6 +136,7 @@
import columns from '../types/table.columns'; import columns from '../types/table.columns';
import useLoading from '@/hooks/loading'; import useLoading from '@/hooks/loading';
import { copy } from '@/hooks/copy'; import { copy } from '@/hooks/copy';
import { openNewRoute } from '@/router';
import UserSelector from '@/components/user/user/selector/index.vue'; import UserSelector from '@/components/user/user/selector/index.vue';
import HostSelector from '@/components/asset/host/selector/index.vue'; import HostSelector from '@/components/asset/host/selector/index.vue';

View File

@@ -47,7 +47,7 @@ const columns = [
}, { }, {
title: '操作', title: '操作',
slotName: 'handle', slotName: 'handle',
width: 118, width: 154,
align: 'center', align: 'center',
fixed: 'right', fixed: 'right',
}, },

View File

@@ -6,13 +6,6 @@
@submit="fetchTableData" @submit="fetchTableData"
@reset="fetchTableData" @reset="fetchTableData"
@keyup.enter="() => fetchTableData()"> @keyup.enter="() => fetchTableData()">
<!-- id -->
<a-form-item field="id" label="id">
<a-input-number v-model="formModel.id"
placeholder="请输入id"
allow-clear
hide-button />
</a-form-item>
<!-- 任务名称 --> <!-- 任务名称 -->
<a-form-item field="name" label="任务名称"> <a-form-item field="name" label="任务名称">
<a-input v-model="formModel.name" <a-input v-model="formModel.name"
@@ -25,6 +18,19 @@
placeholder="请输入执行命令" placeholder="请输入执行命令"
allow-clear /> allow-clear />
</a-form-item> </a-form-item>
<!-- 执行用户 -->
<a-form-item field="execUserId" label="执行用户">
<user-selector v-model="formModel.execUserId"
placeholder="请选择执行用户"
allow-clear />
</a-form-item>
<!-- id -->
<a-form-item field="id" label="id">
<a-input-number v-model="formModel.id"
placeholder="请输入id"
allow-clear
hide-button />
</a-form-item>
<!-- 任务状态 --> <!-- 任务状态 -->
<a-form-item field="status" label="任务状态"> <a-form-item field="status" label="任务状态">
<a-select v-model="formModel.status" <a-select v-model="formModel.status"
@@ -32,12 +38,6 @@
placeholder="请选择状态" placeholder="请选择状态"
allow-clear /> allow-clear />
</a-form-item> </a-form-item>
<!-- 执行用户 -->
<a-form-item field="execUserId" label="执行用户">
<user-selector v-model="formModel.execUserId"
placeholder="请选择执行用户"
allow-clear />
</a-form-item>
</query-header> </query-header>
</a-card> </a-card>
<!-- 表格 --> <!-- 表格 -->