Files
abot/admin/dashboard/templates/base.html
2025-06-04 15:51:49 +08:00

292 lines
11 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{% block title %}机器人管理后台{% endblock %}</title>
<!-- 添加favicon -->
<link rel="icon" href="/static/favicon.ico" type="image/x-icon">
<link rel="shortcut icon" href="/static/favicon.ico" type="image/x-icon">
<!-- Element UI CSS -->
<link rel="stylesheet" href="/static/css/element-ui/theme-chalk/index.min.css">
<!-- 图表库 -->
<script src="/static/js/chart.js"></script>
<!-- Vue.js -->
<script src="/static/js/vue.js"></script>
<!-- Element UI JS -->
<script src="/static/js/element-ui/index.min.js"></script>
<!-- Axios -->
<script src="/static/js/axios.min.js"></script>
<style>
body {
margin: 0;
padding: 0;
font-family: "Helvetica Neue", Helvetica, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", Arial, sans-serif;
}
.app-container {
height: 100vh;
display: flex;
flex-direction: column;
}
.header {
background-color: #006af5;
color: white;
padding: 0 20px;
height: 60px;
display: flex;
align-items: center;
justify-content: space-between;
}
.header-left {
display: flex;
align-items: center;
}
.header-logo {
width: 40px;
height: 40px;
margin-right: 10px;
}
.main-container {
display: flex;
flex: 1;
overflow: hidden;
}
.sidebar {
width: 180px;
background-color: #545c64;
height: 100%;
overflow-y: auto;
}
.content {
flex: 1;
padding: 20px;
overflow-y: auto;
background-color: #f0f2f5;
display: flex; /* 添加Flex布局 */
flex-direction: column; /* 确保子元素垂直排列 */
}
.el-menu {
border-right: none;
}
.chart-container {
background-color: white;
padding: 20px;
border-radius: 4px;
box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
margin-bottom: 20px;
}
.stats-card {
margin-bottom: 20px;
}
/* 添加退出登录按钮样式 */
.logout-btn {
color: white;
cursor: pointer;
margin-left: 15px;
}
.header-right {
display: flex;
align-items: center;
}
.user-info {
margin-right: 10px;
}
</style>
{% block head %}{% endblock %}
</head>
<body>
<div id="app" class="app-container">
<header class="header">
<div class="header-left">
<img src="/static/logo.png" alt="Logo" class="header-logo">
<h2>机器人管理后台</h2>
</div>
<!-- 添加退出登录按钮 -->
<div class="header-right">
<span class="user-info">管理员</span>
<el-button type="text" class="logout-btn" @click="logout">
<i class="el-icon-switch-button"></i> 退出登录
</el-button>
</div>
</header>
<div class="main-container">
<!-- 左侧菜单 -->
<div class="sidebar">
<el-menu
:default-active="currentView"
class="el-menu-vertical-demo"
background-color="#545c64"
text-color="#fff"
active-text-color="#ffd04b"
@select="handleSelect">
<el-menu-item index="1">
<i class="el-icon-s-home"></i>
<span slot="title">首页概览</span>
</el-menu-item>
<el-menu-item index="2">
<i class="el-icon-s-grid"></i>
<span slot="title">插件统计</span>
</el-menu-item>
<el-menu-item index="3">
<i class="el-icon-user"></i>
<span slot="title">用户统计</span>
</el-menu-item>
<el-menu-item index="4">
<i class="el-icon-s-cooperation"></i>
<span slot="title">群组统计</span>
</el-menu-item>
<!-- 在左侧菜单中添加群机器人管理选项 -->
<!-- 找到el-menu标签内的菜单项列表添加以下内容 -->
<el-menu-item index="6">
<i class="el-icon-setting"></i>
<span slot="title">权限管理</span>
</el-menu-item>
<!-- 在左侧菜单中添加消息列表选项 -->
<el-menu-item index="7">
<i class="el-icon-chat-line-square"></i>
<span slot="title">消息列表</span>
</el-menu-item>
<!-- 运行日志 -->
<el-menu-item index="9">
<i class="el-icon-document"></i>
<span slot="title">运行日志</span>
</el-menu-item>
<!-- 在导航菜单中添加通讯录管理入口 -->
<el-menu-item index="10">
<i class="el-icon-notebook-1"></i>
<span slot="title">通讯录</span>
</el-menu-item>
<!-- 在导航菜单中添加插件管理选项 -->
<el-menu-item index="11">
<i class="el-icon-s-tools"></i>
<span slot="title">插件管理</span>
</el-menu-item>
<!-- 在导航菜单中添加虚拟群组管理 -->
<el-menu-item index="12">
<i class="el-icon-connection"></i>
<span slot="title">虚拟群组</span>
</el-menu-item>
<!-- 添加接口文档菜单项 -->
<el-menu-item index="13">
<i class="el-icon-document"></i>
<span slot="title">接口文档</span>
</el-menu-item>
<el-menu-item index="14">
<i class="el-icon-cpu"></i>
<span slot="title">资源监控</span>
</el-menu-item>
<!-- 添加文件浏览器菜单项 -->
<el-menu-item index="15">
<i class="el-icon-folder"></i>
<span slot="title">文件浏览</span>
</el-menu-item>
<el-menu-item index="5">
<i class="el-icon-warning"></i>
<span slot="title">错误日志</span>
</el-menu-item>
</el-menu>
</div>
<!-- 右侧内容区 -->
<div class="content">
<!-- 时间范围选择器 - 只在特定页面显示 -->
<el-row :gutter="20" style="margin-bottom: 20px;" v-if="showTimeRangeSelector">
<el-col :span="24">
<el-card shadow="hover">
<el-form :inline="true" size="small">
<el-form-item label="统计时间范围">
<el-select v-model="timeRange" @change="loadData">
<el-option label="最近7天" value="7"></el-option>
<el-option label="最近30天" value="30"></el-option>
<el-option label="最近90天" value="90"></el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="loadData">刷新数据</el-button>
</el-form-item>
</el-form>
</el-card>
</el-col>
</el-row>
<!-- 内容区域 -->
{% block content %}{% endblock %}
</div>
</div>
</div>
<!-- 基础 Vue 实例 -->
<script>
const baseApp = {
data() {
return {
currentView: '1',
timeRange: '7',
charts: {},
// 添加一个标志,用于控制时间范围选择器的显示
showTimeRangeSelector: false
}
},
created() {
// 根据当前页面路径决定是否显示时间范围选择器
const path = window.location.pathname;
// 只在统计相关页面显示时间范围选择器
this.showTimeRangeSelector = ['/', '/plugins', '/users', '/groups','/robot','/errors'].includes(path);
},
methods: {
handleSelect(key, keyPath) {
this.currentView = key;
// 添加页面跳转逻辑
const routes = {
'1': '/',
'2': '/plugins',
'3': '/users',
'4': '/groups',
'5': '/errors',
'6': '/robot',
'7': '/messages',
'9': '/wx_logs',
'10': '/contacts',
'11': '/plugins_manage',
'12': '/virtual_group',
'13': '/api_docs',
'14': '/system_status',
'15': '/file_browser'
};
// 如果当前不在对应页面,则跳转
const currentPath = window.location.pathname;
const targetPath = routes[key];
if (currentPath !== targetPath && targetPath !== undefined) {
window.location.href = targetPath;
}
},
loadData() {
// 由子组件实现
},
// 添加退出登录方法
logout() {
// 显示确认对话框
this.$confirm('确认退出登录吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
// 用户点击确定,跳转到登出页面
window.location.href = '/logout';
}).catch(() => {
// 用户点击取消,不做任何操作
});
}
}
};
</script>
{% block scripts %}{% endblock %}
</body>
</html>