diff --git a/README.md b/README.md
index 4af61332..db042119 100644
--- a/README.md
+++ b/README.md
@@ -46,7 +46,7 @@ demo: http://101.43.254.243:1081/#/
* 权限控制: 全面管理用户角色, 支持动态菜单配置和强制下线等功能。
* 在线终端: 提供便捷的在线 Web 终端服务, 支持快捷命令、自定义快捷键和主题风格。
* 文件管理: 实现远程主机大文件的批量上传、下载和在线编辑等操作。
-* 可扩展性: 前后端代码规范统一, 代码质量高、健壮且易于阅读和扩展。
+* 可扩展性: 前后端代码规范统一、代码质量高、健壮且易于阅读和扩展。
[comment]: <> ( FIXME * 批量操作: 支持远程主机批量执行命令 以及 批量执行上传文件)
diff --git a/docs/README.md b/docs/README.md
index f1cfb920..340a035f 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -46,7 +46,7 @@ demo: http://101.43.254.243:1081/#/
* 权限控制: 全面管理用户角色, 支持动态菜单配置和强制下线等功能。
* 在线终端: 提供便捷的在线 Web 终端服务, 支持快捷命令、自定义快捷键和主题风格。
* 文件管理: 实现远程主机大文件的批量上传、下载和在线编辑等操作。
-* 可扩展性: 前后端代码规范统一, 代码质量高、健壮且易于阅读和扩展。
+* 可扩展性: 前后端代码规范统一、代码质量高、健壮且易于阅读和扩展。
[comment]: <> ( FIXME * 批量操作: 支持远程主机批量执行命令 以及 批量执行上传文件)
diff --git a/docs/about/change-log.md b/docs/about/change-log.md
index 3e67e048..7ee54c36 100644
--- a/docs/about/change-log.md
+++ b/docs/about/change-log.md
@@ -4,8 +4,10 @@
`2024-03-` `release`
+🐞 修复 SFTP 加载失败后一直 loading
🐞 修复 SSH 配置未启用还可以连接
-🐞 修复 主机配置保存后无法修改状态
+🐞 修复 主机配置保存后无法修改状态
+🔨 修改 菜单路由地址简化
[如何升级](/about/update.md?id=_v102)
diff --git a/docs/about/roadmap.md b/docs/about/roadmap.md
index 588f70fd..5f652244 100644
--- a/docs/about/roadmap.md
+++ b/docs/about/roadmap.md
@@ -1,10 +1,5 @@
-## 已完成 ✅
+## 功能排期 ⏳
-## 开发中 ⏱
-
-## 未开始 ⏳
-
-* 资产管理表结构优化
* 批量执行
* 定时执行
* 站内消息
diff --git a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-vue-router.ts.vm b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-vue-router.ts.vm
index fdb2d039..6959c09e 100644
--- a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-vue-router.ts.vm
+++ b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-vue-router.ts.vm
@@ -3,12 +3,11 @@ import { DEFAULT_LAYOUT } from '../base';
const $vue.moduleConst: AppRouteRecordRaw = {
name: '$vue.moduleEntityFirstLower',
- path: '/$vue.module',
component: DEFAULT_LAYOUT,
children: [
{
name: '$vue.moduleEntityFirstLower$vue.featureEntity',
- path: '/$vue.module/$vue.feature',
+ path: '/$vue.module-$vue.feature',
component: () => import('@/views/$vue.module/$vue.feature/index.vue'),
},
],
diff --git a/orion-ops-ui/src/components/app/navbar/index.vue b/orion-ops-ui/src/components/app/navbar/index.vue
index a2684422..a526b539 100644
--- a/orion-ops-ui/src/components/app/navbar/index.vue
+++ b/orion-ops-ui/src/components/app/navbar/index.vue
@@ -25,12 +25,15 @@
-
- -
-
-
+
+
-
+
+
-
+
@@ -210,6 +213,7 @@
import { openAppSettingKey, toggleDrawerMenuKey } from '@/types/symbol';
import { preferenceTipsKey } from './const';
import { REDIRECT_ROUTE_NAME, routerToTag } from '@/router/constants';
+ import { openWindow } from '@/utils';
import Menu from '@/components/system/menu/tree/index.vue';
import UpdatePasswordModal from '@/components/user/user/update-password-modal.vue';
import MessageBox from '@/components/system/message-box/index.vue';
@@ -276,6 +280,12 @@
triggerMouseEvent(localeRef);
};
+ // 打开新页面
+ const openNewRoute = (name: string) => {
+ const { href } = router.resolve({ name });
+ openWindow(href);
+ };
+
// 刷新页面
const reloadCurrent = async () => {
if (appStore.tabBar) {
diff --git a/orion-ops-ui/src/router/constants.ts b/orion-ops-ui/src/router/constants.ts
index afd20eb2..4009ab45 100644
--- a/orion-ops-ui/src/router/constants.ts
+++ b/orion-ops-ui/src/router/constants.ts
@@ -11,7 +11,7 @@ export const NOT_FOUND_ROUTER_NAME = 'notFound';
export const DEFAULT_ROUTE_NAME = 'workplace';
-export const DEFAULT_ROUTE_FULL_PATH = '/dashboard/workplace';
+export const DEFAULT_ROUTE_FULL_PATH = '/workplace';
/**
* 路由白名单
diff --git a/orion-ops-ui/src/router/routes/modules/asset-audit.ts b/orion-ops-ui/src/router/routes/modules/asset-audit.ts
index d9fdd6f9..5d3e1da9 100644
--- a/orion-ops-ui/src/router/routes/modules/asset-audit.ts
+++ b/orion-ops-ui/src/router/routes/modules/asset-audit.ts
@@ -1,23 +1,21 @@
import type { AppRouteRecordRaw } from '../types';
import { DEFAULT_LAYOUT } from '../base';
-const ASSET_AUDIT: AppRouteRecordRaw =
- {
- name: 'assetAudit',
- path: '/asset-audit',
- component: DEFAULT_LAYOUT,
- children: [
- {
- name: 'assetAuditConnectLog',
- path: '/asset-audit/connect-log',
- component: () => import('@/views/asset-audit/connect-log/index.vue'),
- },
- {
- name: 'assetAuditSftpLog',
- path: '/asset-audit/sftp-log',
- component: () => import('@/views/asset-audit/sftp-log/index.vue'),
- },
- ],
- };
+const ASSET_AUDIT: AppRouteRecordRaw = {
+ name: 'assetAudit',
+ component: DEFAULT_LAYOUT,
+ children: [
+ {
+ name: 'assetAuditConnectLog',
+ path: '/connect-log',
+ component: () => import('@/views/asset-audit/connect-log/index.vue'),
+ },
+ {
+ name: 'assetAuditSftpLog',
+ path: '/sftp-log',
+ component: () => import('@/views/asset-audit/sftp-log/index.vue'),
+ },
+ ],
+};
export default ASSET_AUDIT;
diff --git a/orion-ops-ui/src/router/routes/modules/asset.ts b/orion-ops-ui/src/router/routes/modules/asset.ts
index 39ec3617..e96f09d0 100644
--- a/orion-ops-ui/src/router/routes/modules/asset.ts
+++ b/orion-ops-ui/src/router/routes/modules/asset.ts
@@ -3,24 +3,23 @@ import { DEFAULT_LAYOUT } from '../base';
const ASSET: AppRouteRecordRaw = {
name: 'asset',
- path: '/asset',
component: DEFAULT_LAYOUT,
children: [
{
name: 'assetHostList',
- path: '/asset/host-list',
+ path: '/host-list',
component: () => import('@/views/asset/host-list/index.vue'),
}, {
name: 'assetHostKey',
- path: '/asset/host-key',
+ path: '/host-key',
component: () => import('@/views/asset/host-key/index.vue'),
}, {
name: 'assetHostIdentity',
- path: '/asset/host-identity',
+ path: '/host-identity',
component: () => import('@/views/asset/host-identity/index.vue'),
}, {
name: 'assetGrant',
- path: '/asset/grant',
+ path: '/asset-grant',
component: () => import('@/views/asset/grant/index.vue'),
},
],
diff --git a/orion-ops-ui/src/router/routes/modules/dashboard.ts b/orion-ops-ui/src/router/routes/modules/dashboard.ts
index 0161f87d..a9f30227 100644
--- a/orion-ops-ui/src/router/routes/modules/dashboard.ts
+++ b/orion-ops-ui/src/router/routes/modules/dashboard.ts
@@ -3,12 +3,11 @@ import { DEFAULT_LAYOUT } from '../base';
const DASHBOARD: AppRouteRecordRaw = {
name: 'dashboard',
- path: '/dashboard',
component: DEFAULT_LAYOUT,
children: [
{
name: 'workplace',
- path: '/dashboard/workplace',
+ path: '/workplace',
component: () => import('@/views/dashboard/workplace/index.vue'),
},
],
diff --git a/orion-ops-ui/src/router/routes/modules/host.ts b/orion-ops-ui/src/router/routes/modules/host.ts
index db8eb615..ac483970 100644
--- a/orion-ops-ui/src/router/routes/modules/host.ts
+++ b/orion-ops-ui/src/router/routes/modules/host.ts
@@ -3,12 +3,11 @@ import { FULL_LAYOUT } from '../base';
const HOST: AppRouteRecordRaw = {
name: 'host',
- path: '/host',
component: FULL_LAYOUT,
children: [
{
name: 'hostTerminal',
- path: '/host/terminal',
+ path: '/terminal',
component: () => import('@/views/host/terminal/index.vue'),
meta: {
noAffix: true
diff --git a/orion-ops-ui/src/router/routes/modules/system.ts b/orion-ops-ui/src/router/routes/modules/system.ts
index d783ec9b..22f5ec43 100644
--- a/orion-ops-ui/src/router/routes/modules/system.ts
+++ b/orion-ops-ui/src/router/routes/modules/system.ts
@@ -3,22 +3,21 @@ import { DEFAULT_LAYOUT } from '../base';
const SYSTEM: AppRouteRecordRaw = {
name: 'system',
- path: '/system',
component: DEFAULT_LAYOUT,
children: [
{
name: 'systemMenu',
- path: '/system/menu',
+ path: '/menu',
component: () => import('@/views/system/menu/index.vue'),
},
{
name: 'systemDictKey',
- path: '/system/dict-key',
+ path: '/dict-key',
component: () => import('@/views/system/dict-key/index.vue'),
},
{
name: 'systemDictValue',
- path: '/system/dict-value',
+ path: '/dict-value',
component: () => import('@/views/system/dict-value/index.vue'),
},
],
diff --git a/orion-ops-ui/src/router/routes/modules/user.ts b/orion-ops-ui/src/router/routes/modules/user.ts
index 4254803b..df9fa352 100644
--- a/orion-ops-ui/src/router/routes/modules/user.ts
+++ b/orion-ops-ui/src/router/routes/modules/user.ts
@@ -3,27 +3,26 @@ import { DEFAULT_LAYOUT } from '../base';
const USER: AppRouteRecordRaw = {
name: 'user',
- path: '/user',
component: DEFAULT_LAYOUT,
children: [
{
name: 'userRole',
- path: '/user/role',
+ path: '/role',
component: () => import('@/views/user/role/index.vue'),
},
{
name: 'userUser',
- path: '/user/user',
+ path: '/user',
component: () => import('@/views/user/user/index.vue'),
},
{
name: 'userInfo',
- path: '/user/info',
+ path: '/user-info',
component: () => import('@/views/user/info/index.vue'),
},
{
name: 'userOperatorLog',
- path: '/user/operator-log',
+ path: '/operator-log',
component: () => import('@/views/user/operator-log/index.vue'),
},
],