-
+
-
- {{ item.title }}
+ {{ item.title }}
@@ -372,14 +371,10 @@ async function loadData() {
.msg-content .el-link {
line-height: 30px;
- display: inline-block;
- white-space: nowrap;
- overflow: hidden;
}
-.msg-content .el-link .el-text{
- margin-right: 5px;
- width: 48px;
+:deep(.el-link__inner) {
+ display: flex;
}
.msg-more {
diff --git a/src/pi.ts b/src/pi.ts
index 8630e17..05171d4 100644
--- a/src/pi.ts
+++ b/src/pi.ts
@@ -11,7 +11,6 @@ import errorHandler from "@/utils/errorHandler";
import piDialog from "@/components/piDialog"
import piTable from "@/components/piTable"
-import piPage from "@/components/piPage"
import piUpload from "@/components/piUpload"
export default {
@@ -19,7 +18,6 @@ export default {
// 注册全局组件
app.component('piDialog', piDialog)
app.component('piTable', piTable)
- app.component('piPage', piPage)
app.component('piUpload', piUpload)
//注册全局指令
diff --git a/src/utils/request.ts b/src/utils/request.ts
index d69ebcb..5bbe4b8 100644
--- a/src/utils/request.ts
+++ b/src/utils/request.ts
@@ -23,6 +23,12 @@ axios.interceptors.request.use((config) => {
})
//响应拦截
axios.interceptors.response.use((response) => {
+ // 续签逻辑
+ const newToken = response.headers['x-token-refresh']
+ const ttl = response.headers['x-token-expire']
+ if (newToken && ttl > 0) {
+ tools.data.set("TOKEN", newToken, ttl)
+ }
let res = response.data
if (res.code == 0) {
return Promise.resolve(res)
diff --git a/src/utils/tools.ts b/src/utils/tools.ts
index ff337d6..61835ed 100644
--- a/src/utils/tools.ts
+++ b/src/utils/tools.ts
@@ -108,34 +108,34 @@ const tools = {
return JSON.parse(JSON.stringify(obj || []));
},
/* 日期格式化 */
- dateFormat: function (date, fmt='yyyy-MM-dd hh:mm:ss') {
+ dateFormat: function (date, fmt = 'yyyy-MM-dd hh:mm:ss') {
date = new Date(date)
var o = {
- "M+" : date.getMonth()+1, //月份
- "d+" : date.getDate(), //日
- "h+" : date.getHours(), //小时
- "m+" : date.getMinutes(), //分
- "s+" : date.getSeconds(), //秒
- "q+" : Math.floor((date.getMonth()+3)/3), //季度
- "S" : date.getMilliseconds() //毫秒
+ "M+": date.getMonth() + 1, //月份
+ "d+": date.getDate(), //日
+ "h+": date.getHours(), //小时
+ "m+": date.getMinutes(), //分
+ "s+": date.getSeconds(), //秒
+ "q+": Math.floor((date.getMonth() + 3) / 3), //季度
+ "S": date.getMilliseconds() //毫秒
};
- if(/(y+)/.test(fmt)) {
- fmt=fmt.replace(RegExp.$1, (date.getFullYear()+"").substr(4 - RegExp.$1.length));
+ if (/(y+)/.test(fmt)) {
+ fmt = fmt.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length));
}
- for(var k in o) {
- if(new RegExp("("+ k +")").test(fmt)){
- fmt = fmt.replace(RegExp.$1, (RegExp.$1.length==1) ? (o[k]) : (("00"+ o[k]).substr((""+ o[k]).length)));
+ for (var k in o) {
+ if (new RegExp("(" + k + ")").test(fmt)) {
+ fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
}
}
return fmt;
},
- makeTreeData: function (data, pid = 0, key = "id") {
+ makeTreeData: function (data, pid = 0, key = "id", parent = "pid") {
const arr = [];
for (let item of data) {
- if(item.pid == pid){
+ if (item[parent] == pid) {
// 数据格式处理
const tmp = item;
- const children = tools.makeTreeData(data, item[key], key);
+ const children = tools.makeTreeData(data, item[key], key, parent);
if (children.length > 0) {
tmp['children'] = children
}
diff --git a/src/views/monitor/online/index.vue b/src/views/monitor/online/index.vue
new file mode 100644
index 0000000..85d29dc
--- /dev/null
+++ b/src/views/monitor/online/index.vue
@@ -0,0 +1,80 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 强退
+
+
+
+
+
+
+
+
+
diff --git a/src/views/monitor/server/index.vue b/src/views/monitor/server/index.vue
new file mode 100644
index 0000000..1b3e949
--- /dev/null
+++ b/src/views/monitor/server/index.vue
@@ -0,0 +1,328 @@
+
+
+
+
+
+
+
+
+
+ 核心数
+ {{ cpu.cpu_cores }}
+
+
+
+ 用户使用率
+ {{ cpu.user_usage }}
+
+
+
+ 系统使用率
+ {{ cpu.system_usage }}
+
+
+
+ 当前空闲率
+ {{ cpu.idle }}
+
+
+
+
+
+
+
+
+
+ 总内存
+ {{ mem.total }}
+
+
+
+ 已用内存
+ {{ mem.used }}
+
+
+
+ 剩余内存
+ {{ mem.free }}
+
+
+
+ 使用率
+ {{ mem.usage }}
+
+
+
+
+
+
+
+
+
+ 服务器名称
+ {{ sys.server_name }}
+
+
+
+ 操作系统
+ {{ sys.os }}
+
+
+
+ 服务器IP
+ {{ sys.server_ip }}
+
+
+
+ 系统架构
+ {{ sys.architecture }}
+
+
+
+ PHP版本
+ {{ sys.php_version }}
+
+
+
+
+
+
+
+
+
+ SWOOLE版本
+ {{ app.swoole_version }}
+
+
+
+ HYPERF版本
+ {{ app.hyperf_version }}
+
+
+
+ 项目路径
+ {{ app.project_path }}
+
+
+
+ 启动时间
+ {{ app.start_time }}
+
+
+
+ 运行时长
+ {{ app.uptime }}
+
+
+
+
+
+
+
+
+
+
+
+ Redis版本
+ {{ redis.version }}
+
+
+
+
+
+ 运行模式
+ {{ redis.mode }}
+
+
+
+
+
+ 端口
+ {{ redis.port }}
+
+
+
+
+
+ 客户端数
+ {{ redis.clients }}
+
+
+
+
+
+ 运行时间(天)
+ {{ redis.uptime_days }}
+
+
+
+
+
+ 使用内存
+ {{ redis.used_memory }}
+
+
+
+
+
+ 使用CPU
+ {{ redis.used_cpu }}
+
+
+
+
+
+ 内存配置
+ {{ redis.maxmemory }}
+
+
+
+
+
+ AOF是否开启
+ {{ redis.aof_enabled }}
+
+
+
+
+ RDB是否成功
+ {{ redis.rdb_last_bgsave_status }}
+
+
+
+
+ Key数量
+ {{ redis.keys }}
+
+
+
+
+ 网络入口/出口
+ {{ redis.net_input_bytes }}/{{redis.net_output_bytes}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/system/menu/quick.vue b/src/views/system/menu/quick.vue
index 1b57d19..ba0d6ee 100644
--- a/src/views/system/menu/quick.vue
+++ b/src/views/system/menu/quick.vue
@@ -1,20 +1,20 @@
-
+
-
+
-
+
-
+
-
+
@@ -26,7 +26,7 @@
diff --git a/src/views/system/user/index.vue b/src/views/system/user/index.vue
index fcac4b0..ee956ca 100644
--- a/src/views/system/user/index.vue
+++ b/src/views/system/user/index.vue
@@ -242,10 +242,6 @@ async function saveInfo() {
isSaveing.value = false
}
-function sexOption(v) {
- console.log(v)
-}
-
async function savePass() {
const validate = await passRef.value.validate().catch(() => {});
if(!validate){ return false }
diff --git a/vite.config.ts b/vite.config.ts
index 9d6baff..babcd3d 100644
--- a/vite.config.ts
+++ b/vite.config.ts
@@ -1,7 +1,7 @@
import {defineConfig, loadEnv} from 'vite'
import vue from '@vitejs/plugin-vue'
import path from 'path'
-import { fileURLToPath } from 'url'
+import {fileURLToPath} from 'url'
export default defineConfig(({mode, command}) => {
const env = loadEnv(mode, process.cwd())
@@ -23,14 +23,14 @@ export default defineConfig(({mode, command}) => {
server: {
port: 8611,
host: true,
- // open: true,
+ open: true,
proxy: {
'/api': {
target: VITE_API_BASE,
changeOrigin: true,
rewrite: (p) => p.replace(/^\/api/, '')
}
- }
+ },
},
build: {
outDir: 'dist',
@@ -47,6 +47,16 @@ export default defineConfig(({mode, command}) => {
}
}
},
- plugins: [vue()]
+ plugins: [
+ vue(),
+ {
+ name: 'full-reload',
+ handleHotUpdate({file, server}) {
+ if (file.endsWith('.vue')) {
+ server.ws.send({type: 'full-reload'});
+ }
+ },
+ },
+ ]
}
})