🔨 添加连接操作.
This commit is contained in:
@@ -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 {
|
||||||
// 其他异常 判断是否弹出错误信息
|
// 其他异常 判断是否弹出错误信息
|
||||||
|
|||||||
@@ -325,6 +325,8 @@
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
defineExpose({ setMessageBoxVisible });
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
// 查询未读消息
|
// 查询未读消息
|
||||||
pullHasUnreadMessage();
|
pullHasUnreadMessage();
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,9 @@
|
|||||||
// 切换菜单状态
|
// 切换菜单状态
|
||||||
export const toggleDrawerMenuKey = Symbol();
|
export const toggleDrawerMenuKey = Symbol();
|
||||||
|
|
||||||
|
// 打开消息盒子
|
||||||
|
export const openMessageBox = Symbol();
|
||||||
|
|
||||||
// 打开偏好设置
|
// 打开偏好设置
|
||||||
export const openAppSettingKey = Symbol();
|
export const openAppSettingKey = Symbol();
|
||||||
|
|
||||||
|
|||||||
@@ -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';
|
||||||
|
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ const columns = [
|
|||||||
}, {
|
}, {
|
||||||
title: '操作',
|
title: '操作',
|
||||||
slotName: 'handle',
|
slotName: 'handle',
|
||||||
width: 180,
|
width: 218,
|
||||||
align: 'left',
|
align: 'left',
|
||||||
fixed: 'right',
|
fixed: 'right',
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -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';
|
||||||
|
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ const columns = [
|
|||||||
}, {
|
}, {
|
||||||
title: '操作',
|
title: '操作',
|
||||||
slotName: 'handle',
|
slotName: 'handle',
|
||||||
width: 118,
|
width: 154,
|
||||||
align: 'center',
|
align: 'center',
|
||||||
fixed: 'right',
|
fixed: 'right',
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -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>
|
||||||
<!-- 表格 -->
|
<!-- 表格 -->
|
||||||
|
|||||||
Reference in New Issue
Block a user