add hemo,help

This commit is contained in:
2026-03-21 10:26:44 +08:00
parent 93713e3e3c
commit d5388f3f08
8 changed files with 1726 additions and 2 deletions

View File

@@ -0,0 +1,16 @@
<template>
<div class="standalone-layout">
<router-view />
</div>
</template>
<script lang="ts" setup>
// 独立页面布局,不包含系统的导航栏和侧边栏
</script>
<style scoped lang="less">
.standalone-layout {
width: 100%;
min-height: 100vh;
}
</style>

View File

@@ -1,6 +1,9 @@
export const WHITE_LIST = [
{ name: 'notFound', children: [] },
{ name: 'login', children: [] },
{ name: 'root', children: [] },
{ name: 'Home', children: [] },
{ name: 'Help', children: [] },
]
export const NOT_FOUND = {

View File

@@ -13,7 +13,27 @@ const router = createRouter({
routes: [
{
path: '/',
redirect: 'login',
name: 'root',
component: () => import('@/layout/standalone-layout.vue'),
redirect: '/home',
children: [
{
path: '/home',
name: 'Home',
component: () => import('@/views/home/index.vue'),
meta: {
requiresAuth: false,
},
},
{
path: '/help',
name: 'Help',
component: () => import('@/views/help/index.vue'),
meta: {
requiresAuth: false,
},
},
],
},
{
path: '/login',

839
src/views/help/index.vue Normal file
View File

@@ -0,0 +1,839 @@
<template>
<div class="help-page">
<!-- 顶部导航 -->
<header class="navbar">
<div class="navbar-content">
<div class="logo" @click="goToHome">
<img src="@/assets/logo.svg" alt="Logo" />
<span class="logo-text">智能运维管理系统</span>
</div>
<nav class="nav-links">
<a href="#" @click.prevent="goToHome">首页</a>
<a href="#help">帮助中心</a>
<a-button type="primary" @click="goToLogin">登录系统</a-button>
</nav>
</div>
</header>
<!-- Banner 区域 -->
<section class="help-banner">
<div class="banner-content">
<h1>帮助中心</h1>
<p>查找您需要的答案快速解决问题</p>
<div class="search-box">
<a-input
v-model="searchQuery"
placeholder="搜索帮助文档..."
size="large"
allow-clear
@press-enter="handleSearch"
>
<template #prefix>
<icon-search />
</template>
</a-input>
</div>
</div>
</section>
<!-- 主要内容区 -->
<main class="help-content">
<div class="content-container">
<!-- 左侧目录 -->
<aside class="help-sidebar">
<a-menu :default-selected-keys="[activeCategory]" @menu-item-click="handleCategoryClick">
<a-menu-item key="all">
<template #icon><icon-list /></template>
全部文档
</a-menu-item>
<a-menu-item key="quickstart">
<template #icon><icon-rocket /></template>
快速入门
</a-menu-item>
<a-menu-item key="dashboard">
<template #icon><icon-dashboard /></template>
仪表盘
</a-menu-item>
<a-menu-item key="alert">
<template #icon><icon-alert /></template>
告警管理
</a-menu-item>
<a-menu-item key="datacenter">
<template #icon><icon-storage /></template>
数据中心
</a-menu-item>
<a-menu-item key="report">
<template #icon><icon-chart-line /></template>
报表分析
</a-menu-item>
<a-menu-item key="system">
<template #icon><icon-settings /></template>
系统设置
</a-menu-item>
</a-menu>
</aside>
<!-- 右侧内容 -->
<div class="help-main">
<!-- FAQ 常见问题 -->
<section id="faq" class="help-section">
<h2 class="section-title">
<icon-question-circle />
常见问题
</h2>
<div class="faq-list">
<a-collapse>
<a-collapse-item
v-for="(item, index) in filteredFaqs"
:key="index"
:header="item.question"
>
<div class="faq-answer">
{{ item.answer }}
</div>
</a-collapse-item>
</a-collapse>
</div>
</section>
<!-- 使用指南 -->
<section id="guides" class="help-section">
<h2 class="section-title">
<icon-book />
使用指南
</h2>
<div class="guide-grid">
<div
v-for="guide in filteredGuides"
:key="guide.id"
class="guide-card"
@click="viewGuideDetail(guide)"
>
<div class="guide-icon">
<component :is="guide.icon" />
</div>
<h3>{{ guide.title }}</h3>
<p>{{ guide.description }}</p>
<div class="guide-meta">
<span class="guide-category">{{ guide.categoryName }}</span>
<span class="guide-updated">{{ guide.updatedAt }}</span>
</div>
</div>
</div>
</section>
<!-- 操作手册 -->
<section class="help-section">
<h2 class="section-title">
<icon-file />
操作手册
</h2>
<div class="manual-list">
<div
v-for="manual in manuals"
:key="manual.id"
class="manual-item"
>
<div class="manual-icon">
<icon-download />
</div>
<div class="manual-info">
<h3>{{ manual.title }}</h3>
<p>{{ manual.description }}</p>
<div class="manual-meta">
<span>格式{{ manual.format }}</span>
<span>大小{{ manual.size }}</span>
<span>更新{{ manual.updatedAt }}</span>
</div>
</div>
<a-button type="primary" @click="downloadManual(manual)">
下载
</a-button>
</div>
</div>
</section>
<!-- 联系我们 -->
<section class="help-section contact-section">
<h2 class="section-title">
<icon-customer-service />
需要更多帮助
</h2>
<div class="contact-cards">
<div class="contact-card">
<div class="contact-icon">
<icon-phone />
</div>
<h3>电话联系</h3>
<p>工作日 9:00-18:00</p>
<p class="contact-value">400-XXX-XXXX</p>
</div>
<div class="contact-card">
<div class="contact-icon">
<icon-email />
</div>
<h3>邮件咨询</h3>
<p>我们会在 24 小时内回复</p>
<p class="contact-value">support@example.com</p>
</div>
<div class="contact-card">
<div class="contact-icon">
<icon-message />
</div>
<h3>在线客服</h3>
<p>实时在线解答</p>
<a-button type="primary" @click="openChat">
开始聊天
</a-button>
</div>
</div>
</section>
</div>
</div>
</main>
<!-- 页脚 -->
<footer class="footer">
<div class="footer-content">
<p>&copy; 2026 智能运维管理系统All rights reserved.</p>
</div>
</footer>
</div>
</template>
<script lang="ts" setup>
import { ref, computed } from 'vue'
import { useRouter } from 'vue-router'
const router = useRouter()
const searchQuery = ref('')
const activeCategory = ref('all')
// FAQ 数据
const faqs = ref([
{
question: '如何登录系统?',
answer: '在登录页面输入您的用户名和密码,点击登录按钮即可。如果忘记密码,可以点击"忘记密码"链接进行重置。',
category: 'quickstart'
},
{
question: '如何查看监控仪表盘?',
answer: '登录后,在左侧菜单点击"仪表盘" -> "工作台"即可查看实时监控仪表盘。您可以根据需要切换不同的视图和筛选条件。',
category: 'dashboard'
},
{
question: '如何配置告警策略?',
answer: '进入"告警管理" -> "告警策略"页面,点击"新建策略"按钮,填写相关配置信息,包括告警条件、通知方式等,保存后即可生效。',
category: 'alert'
},
{
question: '如何添加新的机房?',
answer: '在"数据中心" -> "机房管理"页面,点击"新增机房"按钮,填写机房名称、位置、面积等信息,完成后点击保存。',
category: 'datacenter'
},
{
question: '如何导出报表数据?',
answer: '在相应的报表页面,选择需要导出的时间范围和数据类型,点击右上角的"导出"按钮选择导出格式Excel/PDF即可下载报表文件。',
category: 'report'
},
{
question: '如何修改个人信息?',
answer: '点击右上角的用户头像,选择"个人设置",可以修改您的个人信息、密码、联系方式等。修改后记得点击保存。',
category: 'system'
},
{
question: '系统支持哪些浏览器?',
answer: '系统支持主流的现代浏览器,包括 Chrome、Firefox、Edge、Safari 等。建议使用最新版本的浏览器以获得最佳体验。',
category: 'system'
},
{
question: '遇到技术问题如何反馈?',
answer: '您可以通过以下方式反馈问题1. 拨打技术支持热线2. 发送邮件至 support@example.com3. 使用在线客服功能。',
category: 'system'
}
])
// 使用指南数据
const guides = ref([
{
id: 1,
title: '新手入门指南',
description: '帮助您快速了解系统的基本功能和操作流程',
icon: 'icon-rocket',
category: 'quickstart',
categoryName: '快速入门',
updatedAt: '2026-03-15'
},
{
id: 2,
title: '仪表盘使用详解',
description: '详细介绍仪表盘的各个功能模块和使用技巧',
icon: 'icon-dashboard',
category: 'dashboard',
categoryName: '仪表盘',
updatedAt: '2026-03-18'
},
{
id: 3,
title: '告警配置完整教程',
description: '从基础到高级的告警策略配置方法',
icon: 'icon-alert',
category: 'alert',
categoryName: '告警管理',
updatedAt: '2026-03-20'
},
{
id: 4,
title: '机房设备管理手册',
description: '机房、机柜、设备等资源的规范管理方法',
icon: 'icon-storage',
category: 'datacenter',
categoryName: '数据中心',
updatedAt: '2026-03-19'
},
{
id: 5,
title: '数据报表生成指南',
description: '学习如何生成和导出各类业务报表',
icon: 'icon-chart-line',
category: 'report',
categoryName: '报表分析',
updatedAt: '2026-03-17'
},
{
id: 6,
title: '系统权限管理说明',
description: '用户角色和权限配置的详细讲解',
icon: 'icon-settings',
category: 'system',
categoryName: '系统设置',
updatedAt: '2026-03-16'
}
])
// 操作手册数据
const manuals = ref([
{
id: 1,
title: '系统用户手册(完整版)',
description: '包含系统所有功能的详细说明和操作步骤',
format: 'PDF',
size: '5.2 MB',
updatedAt: '2026-03-01'
},
{
id: 2,
title: '快速入门指南',
description: '快速上手指南,适合新用户阅读',
format: 'PDF',
size: '1.8 MB',
updatedAt: '2026-03-01'
},
{
id: 3,
title: '运维管理规范',
description: '标准化的运维操作流程和规范文档',
format: 'Word',
size: '2.5 MB',
updatedAt: '2026-02-28'
},
{
id: 4,
title: '常见问题汇编',
description: '汇总了常见问题及解决方案',
format: 'PDF',
size: '3.1 MB',
updatedAt: '2026-03-10'
}
])
// 计算属性
const filteredFaqs = computed(() => {
if (activeCategory.value === 'all') {
return faqs.value
}
return faqs.value.filter(faq => faq.category === activeCategory.value)
})
const filteredGuides = computed(() => {
if (activeCategory.value === 'all') {
return guides.value
}
return guides.value.filter(guide => guide.category === activeCategory.value)
})
// 方法
const goToHome = () => {
router.push('/')
}
const goToLogin = () => {
router.push('/login')
}
const handleCategoryClick = (key: string) => {
activeCategory.value = key
}
const handleSearch = () => {
// 实现搜索逻辑
console.log('搜索:', searchQuery.value)
}
const viewGuideDetail = (guide: any) => {
// 查看指南详情
console.log('查看指南:', guide)
}
const downloadManual = (manual: any) => {
// 下载手册
console.log('下载手册:', manual)
}
const openChat = () => {
// 打开在线客服
console.log('打开在线客服')
}
</script>
<style scoped lang="less">
.help-page {
min-height: 100vh;
background: #f5f7fa;
// 顶部导航
.navbar {
position: fixed;
top: 0;
left: 0;
right: 0;
height: 60px;
background: rgba(255, 255, 255, 0.95);
backdrop-filter: blur(10px);
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
z-index: 1000;
.navbar-content {
max-width: 1400px;
margin: 0 auto;
padding: 0 24px;
height: 100%;
display: flex;
justify-content: space-between;
align-items: center;
.logo {
display: flex;
align-items: center;
gap: 12px;
cursor: pointer;
img {
height: 32px;
width: auto;
}
.logo-text {
font-size: 20px;
font-weight: 600;
color: var(--color-text-1);
}
}
.nav-links {
display: flex;
align-items: center;
gap: 24px;
a {
color: var(--color-text-2);
text-decoration: none;
font-size: 14px;
transition: color 0.3s;
&:hover {
color: rgb(var(--primary-6));
}
}
}
}
}
// Banner 区域
.help-banner {
padding: 140px 24px 80px;
background: linear-gradient(135deg, rgb(var(--primary-6)), rgb(var(--primary-4)));
text-align: center;
color: #fff;
.banner-content {
max-width: 800px;
margin: 0 auto;
h1 {
font-size: 48px;
font-weight: 700;
margin-bottom: 16px;
}
p {
font-size: 18px;
margin-bottom: 40px;
opacity: 0.9;
}
.search-box {
max-width: 600px;
margin: 0 auto;
:deep(.arco-input) {
background: #fff;
border: none;
font-size: 16px;
&::placeholder {
color: var(--color-text-3);
}
}
}
}
}
// 主要内容区
.help-content {
padding: 40px 24px;
.content-container {
max-width: 1400px;
margin: 0 auto;
display: grid;
grid-template-columns: 280px 1fr;
gap: 32px;
}
.help-sidebar {
position: sticky;
top: 100px;
height: fit-content;
background: #fff;
border-radius: 8px;
padding: 16px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05);
:deep(.arco-menu) {
background: transparent;
.arco-menu-item {
border-radius: 4px;
margin-bottom: 8px;
&.arco-menu-selected {
background: rgb(var(--primary-1));
color: rgb(var(--primary-6));
}
&:hover:not(.arco-menu-selected) {
background: var(--color-fill-2);
}
}
}
}
.help-main {
.help-section {
margin-bottom: 48px;
.section-title {
font-size: 24px;
font-weight: 600;
color: var(--color-text-1);
margin-bottom: 24px;
display: flex;
align-items: center;
gap: 8px;
}
// FAQ 样式
.faq-list {
:deep(.arco-collapse) {
border: none;
.arco-collapse-item {
border: 1px solid var(--color-border);
border-radius: 8px;
margin-bottom: 16px;
.arco-collapse-item-header {
padding: 16px 20px;
background: var(--color-fill-1);
font-weight: 500;
}
.arco-collapse-item-content {
padding: 20px;
line-height: 1.8;
color: var(--color-text-2);
}
}
}
}
// 指南网格
.guide-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
gap: 24px;
.guide-card {
background: #fff;
border: 1px solid var(--color-border);
border-radius: 8px;
padding: 24px;
cursor: pointer;
transition: all 0.3s;
&:hover {
border-color: rgb(var(--primary-6));
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
transform: translateY(-4px);
}
.guide-icon {
width: 48px;
height: 48px;
display: flex;
align-items: center;
justify-content: center;
background: rgb(var(--primary-1));
border-radius: 8px;
color: rgb(var(--primary-6));
font-size: 24px;
margin-bottom: 16px;
}
h3 {
font-size: 18px;
font-weight: 600;
color: var(--color-text-1);
margin-bottom: 8px;
}
p {
font-size: 14px;
color: var(--color-text-2);
line-height: 1.6;
margin-bottom: 16px;
}
.guide-meta {
display: flex;
justify-content: space-between;
font-size: 12px;
color: var(--color-text-3);
.guide-category {
background: var(--color-fill-2);
padding: 2px 8px;
border-radius: 4px;
}
}
}
}
// 手册列表
.manual-list {
.manual-item {
display: flex;
align-items: center;
gap: 20px;
background: #fff;
border: 1px solid var(--color-border);
border-radius: 8px;
padding: 20px;
margin-bottom: 16px;
transition: all 0.3s;
&:hover {
border-color: rgb(var(--primary-6));
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
}
.manual-icon {
width: 48px;
height: 48px;
display: flex;
align-items: center;
justify-content: center;
background: rgb(var(--success-1));
border-radius: 8px;
color: rgb(var(--success-6));
font-size: 24px;
}
.manual-info {
flex: 1;
h3 {
font-size: 16px;
font-weight: 600;
color: var(--color-text-1);
margin-bottom: 8px;
}
p {
font-size: 14px;
color: var(--color-text-2);
margin-bottom: 12px;
}
.manual-meta {
display: flex;
gap: 16px;
font-size: 12px;
color: var(--color-text-3);
}
}
}
}
// 联系我们
.contact-section {
.contact-cards {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
gap: 24px;
.contact-card {
background: #fff;
border: 1px solid var(--color-border);
border-radius: 8px;
padding: 32px 24px;
text-align: center;
transition: all 0.3s;
&:hover {
border-color: rgb(var(--primary-6));
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
}
.contact-icon {
width: 64px;
height: 64px;
display: flex;
align-items: center;
justify-content: center;
background: rgb(var(--primary-1));
border-radius: 50%;
color: rgb(var(--primary-6));
font-size: 32px;
margin: 0 auto 16px;
}
h3 {
font-size: 18px;
font-weight: 600;
color: var(--color-text-1);
margin-bottom: 8px;
}
p {
font-size: 14px;
color: var(--color-text-2);
margin-bottom: 8px;
&.contact-value {
font-size: 16px;
font-weight: 600;
color: rgb(var(--primary-6));
}
}
}
}
}
}
}
}
// 页脚
.footer {
background: var(--color-bg-1);
padding: 24px;
text-align: center;
border-top: 1px solid var(--color-border);
.footer-content {
max-width: 1400px;
margin: 0 auto;
p {
font-size: 14px;
color: var(--color-text-3);
}
}
}
}
// 响应式设计
@media (max-width: 1024px) {
.help-page {
.help-content {
.content-container {
grid-template-columns: 1fr;
}
.help-sidebar {
position: static;
margin-bottom: 24px;
}
}
}
}
@media (max-width: 768px) {
.help-page {
.navbar {
.navbar-content {
.nav-links {
gap: 12px;
a {
display: none;
}
}
}
}
.help-banner {
padding: 100px 16px 60px;
.banner-content {
h1 {
font-size: 32px !important;
}
p {
font-size: 16px !important;
}
}
}
.help-content {
padding: 24px 16px;
.guide-grid {
grid-template-columns: 1fr;
}
.contact-cards {
grid-template-columns: 1fr;
}
}
}
}
</style>

530
src/views/home/index.vue Normal file
View File

@@ -0,0 +1,530 @@
<template>
<div class="home-page">
<!-- 顶部导航 -->
<header class="navbar">
<div class="navbar-content">
<div class="logo">
<img src="@/assets/logo.svg" alt="Logo" />
<span class="logo-text">智能运维管理系统</span>
</div>
<nav class="nav-links">
<a href="#home">首页</a>
<a href="#help">帮助中心</a>
<a-button type="primary" @click="goToLogin">登录系统</a-button>
</nav>
</div>
</header>
<!-- Banner 区域 -->
<section id="home" class="banner">
<div class="banner-content">
<h1 class="banner-title">智能运维管理系统</h1>
<p class="banner-subtitle">
提供全方位的 IT 运维管理解决方案让系统运行更稳定更高效
</p>
</div>
<div class="banner-decoration">
<div class="circle circle-1"></div>
<div class="circle circle-2"></div>
<div class="circle circle-3"></div>
</div>
</section>
<!-- 功能特性区域 -->
<section id="features" class="features">
<div class="section-container">
<h2 class="section-title">核心功能</h2>
<p class="section-subtitle">全面的运维管理工具满足您的各种需求</p>
<div class="feature-grid">
<div class="feature-card">
<div class="feature-icon">
<icon-dashboard />
</div>
<h3>实时监控仪表盘</h3>
<p>多维度数据展示实时掌握系统运行状态关键指标一目了然</p>
</div>
<div class="feature-card">
<div class="feature-icon">
<icon-alert />
</div>
<h3>智能告警管理</h3>
<p>灵活的告警策略配置多渠道通知确保问题及时发现和处理</p>
</div>
<div class="feature-card">
<div class="feature-icon">
<icon-chart-line />
</div>
<h3>数据分析报表</h3>
<p>丰富的可视化报表深度数据分析为决策提供有力支持</p>
</div>
<div class="feature-card">
<div class="feature-icon">
<icon-settings />
</div>
<h3>资源配置管理</h3>
<p>统一的资源配置中心规范化管理提升运维效率</p>
</div>
<div class="feature-card">
<div class="feature-icon">
<icon-shield />
</div>
<h3>权限安全管理</h3>
<p>细粒度的权限控制多重安全保障确保系统数据安全</p>
</div>
<div class="feature-card">
<div class="feature-icon">
<icon-feedback />
</div>
<h3>问题反馈跟踪</h3>
<p>完善的问题反馈机制全流程跟踪快速响应解决</p>
</div>
</div>
</div>
</section>
<!-- 页脚 -->
<footer class="footer">
<div class="footer-content">
<div class="footer-section">
<h4>系统信息</h4>
<p>系统版本:v1.2.0 部署环境:生产环境</p>
</div>
<div class="footer-section">
<h4>帮助中心</h4>
<p><a href="#help" target="_blank">帮助中心</a>技术支持邮箱:<a href="mailto:david.yan@qq.com">david.yan@qq.com</a></p>
</div>
<div class="footer-section">
<h4>版权信息</h4>
<p>Copyright &copy; 2026 智能运维管理系统All rights reserved.</p>
</div>
</div>
</footer>
</div>
</template>
<script lang="ts" setup>
import { useRouter } from 'vue-router'
const router = useRouter()
const goToLogin = () => {
router.push('/login')
}
const scrollToSection = (id: string) => {
const element = document.getElementById(id)
if (element) {
element.scrollIntoView({ behavior: 'smooth' })
}
}
</script>
<style scoped lang="less">
.home-page {
min-height: 100vh;
background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%);
// 顶部导航
.navbar {
position: fixed;
top: 0;
left: 0;
right: 0;
height: 60px;
background: rgba(255, 255, 255, 0.95);
backdrop-filter: blur(10px);
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
z-index: 1000;
.navbar-content {
max-width: 1200px;
margin: 0 auto;
padding: 0 24px;
height: 100%;
display: flex;
justify-content: space-between;
align-items: center;
.logo {
display: flex;
align-items: center;
gap: 12px;
img {
height: 32px;
width: auto;
}
.logo-text {
font-size: 20px;
font-weight: 600;
color: var(--color-text-1);
}
}
.nav-links {
display: flex;
align-items: center;
gap: 24px;
a {
color: var(--color-text-2);
text-decoration: none;
font-size: 14px;
transition: color 0.3s;
&:hover {
color: rgb(var(--primary-6));
}
}
}
}
}
// Banner 区域
.banner {
position: relative;
padding: 160px 24px 100px;
min-height: 600px;
display: flex;
align-items: center;
justify-content: center;
overflow: hidden;
.banner-content {
text-align: center;
z-index: 1;
.banner-title {
font-size: 48px;
font-weight: 700;
color: var(--color-text-1);
margin-bottom: 16px;
background: linear-gradient(135deg, rgb(var(--primary-6)), rgb(var(--primary-4)));
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
}
.banner-subtitle {
font-size: 20px;
color: var(--color-text-2);
margin-bottom: 40px;
max-width: 600px;
margin-left: auto;
margin-right: auto;
}
.banner-actions {
display: flex;
gap: 16px;
justify-content: center;
}
}
.banner-decoration {
position: absolute;
width: 100%;
height: 100%;
top: 0;
left: 0;
pointer-events: none;
.circle {
position: absolute;
border-radius: 50%;
opacity: 0.1;
&.circle-1 {
width: 400px;
height: 400px;
background: rgb(var(--primary-6));
top: -200px;
right: -100px;
}
&.circle-2 {
width: 300px;
height: 300px;
background: rgb(var(--success-6));
bottom: -150px;
left: -100px;
}
&.circle-3 {
width: 200px;
height: 200px;
background: rgb(var(--warning-6));
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
}
}
}
// 功能特性区域
.features {
padding: 100px 24px;
background: #fff;
.section-container {
max-width: 1200px;
margin: 0 auto;
.section-title {
font-size: 36px;
font-weight: 700;
text-align: center;
margin-bottom: 16px;
color: var(--color-text-1);
}
.section-subtitle {
font-size: 16px;
text-align: center;
color: var(--color-text-2);
margin-bottom: 60px;
}
.feature-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(320px, 1fr));
gap: 32px;
.feature-card {
padding: 32px;
background: linear-gradient(135deg, #f8f9fa 0%, #e9ecef 100%);
border-radius: 12px;
transition: all 0.3s;
cursor: pointer;
&:hover {
transform: translateY(-8px);
box-shadow: 0 12px 24px rgba(0, 0, 0, 0.1);
}
.feature-icon {
width: 64px;
height: 64px;
display: flex;
align-items: center;
justify-content: center;
background: rgb(var(--primary-6));
border-radius: 12px;
margin-bottom: 24px;
color: #fff;
font-size: 32px;
}
h3 {
font-size: 20px;
font-weight: 600;
color: var(--color-text-1);
margin-bottom: 12px;
}
p {
font-size: 14px;
color: var(--color-text-2);
line-height: 1.6;
}
}
}
}
}
// 数据中心区域
.datacenter {
padding: 100px 24px;
background: linear-gradient(135deg, rgb(var(--primary-1)) 0%, rgb(var(--primary-2)) 100%);
.section-container {
max-width: 1200px;
margin: 0 auto;
.section-title {
font-size: 36px;
font-weight: 700;
text-align: center;
margin-bottom: 16px;
color: var(--color-text-1);
}
.section-subtitle {
font-size: 16px;
text-align: center;
color: var(--color-text-2);
margin-bottom: 60px;
}
.datacenter-content {
.datacenter-info {
.stat-item {
text-align: center;
padding: 32px;
background: #fff;
border-radius: 12px;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);
.stat-number {
font-size: 48px;
font-weight: 700;
color: rgb(var(--primary-6));
margin-bottom: 8px;
}
.stat-label {
font-size: 16px;
color: var(--color-text-2);
}
}
}
}
}
}
// CTA 区域
.cta-section {
padding: 100px 24px;
background: #fff;
text-align: center;
.section-container {
max-width: 800px;
margin: 0 auto;
h2 {
font-size: 36px;
font-weight: 700;
color: var(--color-text-1);
margin-bottom: 16px;
}
p {
font-size: 18px;
color: var(--color-text-2);
margin-bottom: 40px;
}
.arco-btn {
margin: 8px;
}
}
}
// 页脚
.footer {
background: var(--color-bg-1);
padding: 60px 24px 24px;
.footer-content {
max-width: 1200px;
margin: 0 auto;
display: grid;
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
gap: 40px;
margin-bottom: 40px;
.footer-section {
h4 {
font-size: 18px;
font-weight: 600;
color: var(--color-text-1);
margin-bottom: 16px;
}
p {
font-size: 14px;
color: var(--color-text-2);
line-height: 1.6;
}
ul {
list-style: none;
padding: 0;
margin: 0;
li {
margin-bottom: 12px;
a {
color: var(--color-text-2);
text-decoration: none;
font-size: 14px;
transition: color 0.3s;
&:hover {
color: rgb(var(--primary-6));
}
}
}
}
}
}
.footer-bottom {
max-width: 1200px;
margin: 0 auto;
padding-top: 24px;
border-top: 1px solid var(--color-border);
text-align: center;
p {
font-size: 14px;
color: var(--color-text-3);
}
}
}
}
// 响应式设计
@media (max-width: 768px) {
.home-page {
.navbar {
.navbar-content {
.nav-links {
gap: 12px;
a {
display: none;
}
}
}
}
.banner {
padding: 120px 16px 60px;
min-height: 400px;
.banner-title {
font-size: 32px !important;
}
.banner-subtitle {
font-size: 16px !important;
}
}
.features,
.datacenter,
.cta-section {
padding: 60px 16px;
}
.features {
.feature-grid {
grid-template-columns: 1fr;
}
}
}
}
</style>

View File

@@ -10,6 +10,13 @@
<div class="content-inner">
<LoginForm />
</div>
<div class="home-link" @click="goToHome">
<a-tooltip content="访问官网首页">
<a-button type="text" shape="circle">
<icon-home />
</a-button>
</a-tooltip>
</div>
</div>
</div>
</div>
@@ -27,7 +34,12 @@ export default defineComponent({
},
setup() {
const showQr = ref(false)
return { showQr }
const goToHome = () => {
window.location.href = '/#/home'
}
return { showQr, goToHome }
},
})
</script>
@@ -109,4 +121,26 @@ export default defineComponent({
background: transparent;
}
}
.home-link {
position: absolute;
top: 32px;
right: 32px;
z-index: 2;
.arco-btn {
color: var(--color-text-2);
font-size: 20px;
transition: all 0.3s;
&:hover {
color: rgb(var(--primary-6));
background: rgba(0, 0, 0, 0.05);
}
}
@media (max-width: 900px) {
position: static;
margin: 16px auto 0 auto;
}
}
</style>