📝 修改文档.
36
README.md
@@ -3,7 +3,7 @@
|
||||
</h1>
|
||||
|
||||
`orion-ops-pro` 是一款现代化、高颜值的一站式智能运维管理平台,集资产管理、资产授权、批量执行、Web终端、WebSftp、角色管理、系统管理等功能于一体,致力于简化运维团队的治理工作。它是基于 `orion-ops`
|
||||
的产品思路进行重构,技术架构升级,并优化了交互逻辑,让操作更快捷友好。
|
||||
的产品思路进行重构,技术架构升级,并优化了交互逻辑,让操作更快捷更友好。
|
||||
|
||||
<p style="text-align: left">
|
||||
<a target="_blank" style="text-decoration: none" href="https://app.codacy.com/gh/lijiahangmax/orion-ops-pro/dashboard?utm_source=gh&utm_medium=referral&utm_content=&utm_campaign=Badge_grade">
|
||||
@@ -77,32 +77,38 @@ roadmap: https://lijiahangmax.gitee.io/orion-ops-pro/#/about/roadmap
|
||||
|
||||
> 工作台
|
||||
|
||||

|
||||

|
||||
|
||||
> 资产管理
|
||||
|
||||

|
||||

|
||||

|
||||

|
||||
|
||||
> 主机终端
|
||||
|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||
|
||||
> 批量执行
|
||||
|
||||

|
||||

|
||||

|
||||
|
||||
> 用户管理
|
||||
|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||
|
||||
> 系统管理
|
||||
|
||||

|
||||

|
||||

|
||||

|
||||
|
||||
## 联系我
|
||||
|
||||
|
||||
@@ -2,8 +2,9 @@
|
||||
<img style="margin-right: 8px;" src="./assert/logo.svg" width="32px" height="32px"/> orion-ops-pro 是什么
|
||||
</h1>
|
||||
|
||||
`orion-ops-pro` 是一款现代化、高颜值的一站式智能运维管理平台,集资产管理、资产授权、批量执行、Web终端、WebSftp、角色管理、系统管理等功能于一体,致力于简化运维团队的治理工作。它是基于 `orion-ops`
|
||||
的产品思路进行重构,技术架构升级,并优化了交互逻辑,让操作更快捷友好。
|
||||
`orion-ops-pro`
|
||||
是一款现代化、高颜值的一站式智能运维管理平台,集资产管理、资产授权、批量执行、Web终端、WebSftp、角色管理、系统管理等功能于一体,致力于简化运维团队的治理工作。它是基于 `orion-ops`
|
||||
的产品思路进行重构,技术架构升级,并优化了交互逻辑,让操作更快捷更友好。
|
||||
|
||||
<p style="text-align: left">
|
||||
<a target="_blank" style="text-decoration: none" href="https://app.codacy.com/gh/lijiahangmax/orion-ops-pro/dashboard?utm_source=gh&utm_medium=referral&utm_content=&utm_campaign=Badge_grade">
|
||||
@@ -91,6 +92,12 @@ roadmap: https://lijiahangmax.gitee.io/orion-ops-pro/#/about/roadmap
|
||||

|
||||

|
||||
|
||||
> 批量执行
|
||||
|
||||

|
||||

|
||||

|
||||
|
||||
> 用户管理
|
||||
|
||||

|
||||
|
||||
@@ -2,8 +2,9 @@
|
||||
|
||||
## v1.0.2
|
||||
|
||||
`2024-03-22` `release`
|
||||
`2024-03-2` `release`
|
||||
|
||||
* 🚀 升级 `arco design` `2.55.0`
|
||||
* 🐞 修复 SFTP 加载失败后一直 loading
|
||||
* 🐞 修复 主机终端搜索框报错
|
||||
* 🐞 修复 SSH 配置未启用还可以连接
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
## 功能排期 ⏳
|
||||
|
||||
* 批量执行
|
||||
* 定时执行
|
||||
* 批量上传
|
||||
* 文件夹书签
|
||||
* 站内消息
|
||||
* 终端背景图片
|
||||
* 资产授权 UI 改版
|
||||
|
||||
|
Before Width: | Height: | Size: 561 KiB After Width: | Height: | Size: 106 KiB |
|
Before Width: | Height: | Size: 584 KiB After Width: | Height: | Size: 100 KiB |
BIN
docs/assert/img/batch_exec.png
Normal file
|
After Width: | Height: | Size: 120 KiB |
BIN
docs/assert/img/batch_exec_log.png
Normal file
|
After Width: | Height: | Size: 108 KiB |
BIN
docs/assert/img/batch_exec_record.png
Normal file
|
After Width: | Height: | Size: 140 KiB |
|
Before Width: | Height: | Size: 605 KiB After Width: | Height: | Size: 156 KiB |
|
Before Width: | Height: | Size: 530 KiB After Width: | Height: | Size: 116 KiB |
|
Before Width: | Height: | Size: 609 KiB After Width: | Height: | Size: 63 KiB |
|
Before Width: | Height: | Size: 509 KiB After Width: | Height: | Size: 106 KiB |
|
Before Width: | Height: | Size: 504 KiB After Width: | Height: | Size: 94 KiB |
|
Before Width: | Height: | Size: 563 KiB After Width: | Height: | Size: 147 KiB |
|
Before Width: | Height: | Size: 524 KiB After Width: | Height: | Size: 91 KiB |
|
Before Width: | Height: | Size: 582 KiB After Width: | Height: | Size: 158 KiB |
|
Before Width: | Height: | Size: 552 KiB After Width: | Height: | Size: 96 KiB |
|
Before Width: | Height: | Size: 554 KiB After Width: | Height: | Size: 88 KiB |
|
Before Width: | Height: | Size: 613 KiB After Width: | Height: | Size: 151 KiB |
|
Before Width: | Height: | Size: 606 KiB After Width: | Height: | Size: 136 KiB |
@@ -2,7 +2,7 @@
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>关于orion-ops-pro</title>
|
||||
<title>关于 orion-ops-pro</title>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/>
|
||||
<meta name="description" content="Description">
|
||||
<link rel="icon" href="./assert/logo.svg">
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
在主机终端页面打开的 `SSH` `SFTP` 连接都会记录下来。
|
||||
|
||||
* 详情: 查看连接详情
|
||||
* 断开: 断开连接
|
||||
* 断开: 断开会话连接
|
||||
* 删除: 删除连接记录
|
||||
* 清理: 根据条件清理数据
|
||||
|
||||
|
||||
@@ -37,17 +37,55 @@
|
||||
> SFTP
|
||||
|
||||
* 预览: 默认只能预览 2MB 以内的普通文件, 这个大小可以在前端 env 文件中修改 `VITE_SFTP_PREVIEW_MB`
|
||||
* 上传: 如果文件已存在则自动重命名之前的文件
|
||||
|
||||
> 终端面板
|
||||
|
||||
⭐ 双击终端标签可快速复制会话
|
||||
|
||||
### 批量执行
|
||||
|
||||
批量执行 ssh 主机 shell 脚本。
|
||||
|
||||
##### 日志面板中有几个内置的快捷键
|
||||
|
||||
* 回车: `Enter`
|
||||
* 向上滚动: `↑`
|
||||
* 向上滚动一页: `ctrl` `↑`
|
||||
* 向下滚动: `↓`
|
||||
* 向下滚动一页: `ctrl` `↓`
|
||||
* 全选: `ctrl` `A`
|
||||
* 复制: `ctrl` `C`
|
||||
* 搜索: `ctrl` `F`
|
||||
* 清空: `ctrl` `L`
|
||||
|
||||
⭐ 内置参数同执行模板参数
|
||||
|
||||
* 重置: 重置全部参数
|
||||
* 执行: 执行所输入的命令
|
||||
* 返回: 返回到执行命令页面
|
||||
* 从模板中选择: 从模板中选择需要执行的命令
|
||||
* 执行历史: 点击历史命令可以快速填入
|
||||
|
||||
### 执行记录
|
||||
|
||||
查看批量执行任务记录。
|
||||
|
||||
* 执行命令: 跳转到批量执行页面
|
||||
* 清空: 清空执行记录
|
||||
* 删除: 删除执行记录
|
||||
* 重新执行: 重新执行此命令
|
||||
* 命令: 查看执行时的命令
|
||||
* 参数: 查看执行时的参数
|
||||
* 日志: 查看执行日志, ctrl + 左键点击会用新页面打开
|
||||
* 下载: 下载执行日志
|
||||
|
||||
### 执行模板
|
||||
|
||||
用来维护批量执行的命令模板, 支持动态参数, 使用 `@{{ xxx }}` 来替换命令参数。
|
||||
|
||||
* 新增: 新增执行模板
|
||||
* 执行: 使用此命令模板批量执行主机命令
|
||||
* 执行: 打开命令执行框并且带入模板参数
|
||||
* 修改: 修改执行模板
|
||||
* 删除: 删除执行模板
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
VITE_API_BASE_URL= 'http://127.0.0.1:9200/orion/api'
|
||||
VITE_WS_BASE_URL= 'ws://127.0.0.1:9200/orion/keep-alive'
|
||||
VITE_APP_VERSION= '1.0.1'
|
||||
VITE_APP_VERSION= '1.0.2'
|
||||
VITE_SFTP_PREVIEW_MB= 2
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
VITE_API_BASE_URL= '/orion/api'
|
||||
VITE_WS_BASE_URL= '/orion/keep-alive'
|
||||
VITE_APP_VERSION= '1.0.1'
|
||||
VITE_APP_VERSION= '1.0.2'
|
||||
VITE_SFTP_PREVIEW_MB= 2
|
||||
|
||||
@@ -35,6 +35,7 @@ export default defineConfig({
|
||||
},
|
||||
define: {
|
||||
'process.env': {},
|
||||
__VUE_PROD_HYDRATION_MISMATCH_DETAILS__: JSON.stringify(true),
|
||||
},
|
||||
css: {
|
||||
preprocessorOptions: {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "orion-ops-pro-ui",
|
||||
"description": "Orion Ops Pro for Vue",
|
||||
"version": "1.0.1",
|
||||
"version": "1.0.2",
|
||||
"private": true,
|
||||
"author": "Jiahang Li",
|
||||
"license": "Apache 2.0",
|
||||
@@ -29,7 +29,7 @@
|
||||
]
|
||||
},
|
||||
"dependencies": {
|
||||
"@arco-design/web-vue": "^2.53.3",
|
||||
"@arco-design/web-vue": "^2.55.0",
|
||||
"@dangojs/a-query-header": "^0.0.31",
|
||||
"@sanqi377/arco-vue-icon-picker": "^1.0.7",
|
||||
"@vueuse/core": "^9.3.0",
|
||||
|
||||
11622
orion-ops-ui/pnpm-lock.yaml
generated
@@ -1,8 +1,8 @@
|
||||
import type { IDisposable, ITerminalInitOnlyOptions, ITerminalOptions, Terminal } from 'xterm';
|
||||
import type { FitAddon } from 'xterm-addon-fit';
|
||||
import type { SearchAddon } from 'xterm-addon-search';
|
||||
import type { CanvasAddon } from 'xterm-addon-canvas';
|
||||
import type { WebLinksAddon } from 'xterm-addon-web-links';
|
||||
import type { WebglAddon } from 'xterm-addon-webgl';
|
||||
|
||||
// appender 配置
|
||||
export const AppenderOptions: ITerminalOptions & ITerminalInitOnlyOptions = {
|
||||
@@ -42,7 +42,7 @@ export interface LogAppenderConf {
|
||||
// appender 插件
|
||||
export interface LogAddons extends Record<string, IDisposable> {
|
||||
fit: FitAddon;
|
||||
canvas: CanvasAddon;
|
||||
webgl: WebglAddon;
|
||||
search: SearchAddon;
|
||||
weblink: WebLinksAddon;
|
||||
}
|
||||
|
||||
@@ -11,8 +11,8 @@ import { copy as copyText } from '@/hooks/copy';
|
||||
import { Terminal } from 'xterm';
|
||||
import { FitAddon } from 'xterm-addon-fit';
|
||||
import { SearchAddon } from 'xterm-addon-search';
|
||||
import { CanvasAddon } from 'xterm-addon-canvas';
|
||||
import { WebLinksAddon } from 'xterm-addon-web-links';
|
||||
import { WebglAddon } from 'xterm-addon-webgl';
|
||||
|
||||
// 执行日志 appender 实现
|
||||
export default class LogAppender implements ILogAppender {
|
||||
@@ -76,26 +76,48 @@ export default class LogAppender implements ILogAppender {
|
||||
if (e.type !== 'keydown') {
|
||||
return true;
|
||||
}
|
||||
if (e.ctrlKey && e.code === 'KeyC') {
|
||||
// 复制
|
||||
if (e.code === 'Enter') {
|
||||
// 新起一行
|
||||
e.preventDefault();
|
||||
this.copy();
|
||||
return false;
|
||||
} else if (e.ctrlKey && e.code === 'KeyL') {
|
||||
// 清空
|
||||
terminal.write('\r\n');
|
||||
} else if (e.code === 'ArrowUp') {
|
||||
e.preventDefault();
|
||||
this.clear();
|
||||
return false;
|
||||
if (e.ctrlKey) {
|
||||
// 上移一页
|
||||
terminal.scrollPages(-1);
|
||||
} else {
|
||||
// 上移
|
||||
terminal.scrollLines(-1);
|
||||
}
|
||||
} else if (e.code === 'ArrowDown') {
|
||||
e.preventDefault();
|
||||
if (e.ctrlKey) {
|
||||
// 下移一页
|
||||
terminal.scrollPages(1);
|
||||
} else {
|
||||
// 下移
|
||||
terminal.scrollLines(1);
|
||||
}
|
||||
} else if (e.ctrlKey && e.code === 'KeyA') {
|
||||
// 全选
|
||||
e.preventDefault();
|
||||
this.selectAll();
|
||||
return false;
|
||||
} else if (e.ctrlKey && e.code === 'KeyC') {
|
||||
// 复制
|
||||
e.preventDefault();
|
||||
this.copy();
|
||||
return false;
|
||||
} else if (e.ctrlKey && e.code === 'KeyF') {
|
||||
// 搜索
|
||||
e.preventDefault();
|
||||
this.current.openSearch();
|
||||
return false;
|
||||
} else if (e.ctrlKey && e.code === 'KeyL') {
|
||||
// 清空
|
||||
e.preventDefault();
|
||||
this.clear();
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
});
|
||||
@@ -105,16 +127,16 @@ export default class LogAppender implements ILogAppender {
|
||||
initAddons(terminal: Terminal): LogAddons {
|
||||
const fit = new FitAddon();
|
||||
const search = new SearchAddon();
|
||||
const canvas = new CanvasAddon();
|
||||
const webgl = new WebglAddon();
|
||||
const weblink = new WebLinksAddon();
|
||||
terminal.loadAddon(fit);
|
||||
terminal.loadAddon(search);
|
||||
terminal.loadAddon(canvas);
|
||||
terminal.loadAddon(webgl);
|
||||
terminal.loadAddon(weblink);
|
||||
return {
|
||||
fit,
|
||||
search,
|
||||
canvas,
|
||||
webgl,
|
||||
weblink
|
||||
};
|
||||
}
|
||||
|
||||