From c2b4a583f693fba8e10165d0ef706fb7683753fb Mon Sep 17 00:00:00 2001
From: zhouwx <1175765986@qq.com>
Date: Tue, 10 Feb 2026 16:33:59 +0800
Subject: [PATCH] 修改
---
src/views/menuPage.vue | 944 +++++++++++++++++++++++++++++++++++++++-------------------
1 files changed, 637 insertions(+), 307 deletions(-)
diff --git a/src/views/menuPage.vue b/src/views/menuPage.vue
index 09dd2d3..f52206b 100644
--- a/src/views/menuPage.vue
+++ b/src/views/menuPage.vue
@@ -1,192 +1,188 @@
<template>
- <div class="system-select-container">
- <!-- 顶部用户信息栏 -->
- <div class="user-info-bar">
- <div class="user-left"></div>
- <h3 class="user-details">欢迎访问多体系建设信息化系统</h3>
- <div class="avatar-container">
- <el-dropdown @command="handleCommand" class="right-menu-item hover-effect" trigger="click">
- <div class="avatar-wrapper" style="display: flex;align-items: center">
- <img src="../assets/images/avator.png" class="user-avatar" />
- <span style="font-size: 16px">{{userName}}({{userTypeName}})</span>
- <el-icon><caret-bottom /></el-icon>
- </div>
- <template #dropdown>
- <el-dropdown-menu>
-<!-- <el-dropdown-item command="info">-->
-<!-- <span>基本信息</span>-->
-<!-- </el-dropdown-item>-->
- <el-dropdown-item command="password">
- <span>修改密码</span>
- </el-dropdown-item>
- <el-dropdown-item divided command="logout">
- <span>退出登录</span>
- </el-dropdown-item>
- </el-dropdown-menu>
- </template>
- </el-dropdown>
- </div>
- </div>
+ <div class="multi-system-dashboard">
+ <!-- 头部 -->
+ <header>
+ <div class="header-container">
+ <div class="system-title">欢迎进入多体系建设信息化系统</div>
- <!-- 系统选择区域 -->
- <div class="systems-container">
- <div class="systems-grid">
- <div
- v-for="system in systems"
- :key="system.id"
- class="system-card"
- @mouseenter="handleCardEnter($event, system.id)"
- @mousemove="handleCardMove($event, system.id)"
- @mouseleave="handleCardLeave(system.id)"
- @click="enterSystem(system.id)"
- :style="getCardStyle(system.id)"
- >
- <div class="card-content">
- <div class="system-icon">
- <img :src="system.icon"/>
+<!-- <div class="admin-info" @click="handleAdminClick" ref="adminInfoRef">-->
+<!-- <div class="admin-icon">-->
+<!-- <i class="fas fa-user-cog"></i>-->
+<!-- </div>-->
+<!-- <div class="admin-details">-->
+<!-- <div class="admin-name">admin</div>-->
+<!-- <div class="admin-role">系统管理员</div>-->
+<!-- </div>-->
+<!-- </div>-->
+
+ <div class="admin-info">
+ <div class="admin-icon">
+ <img src="../assets/images/avator.png" class="user-avatar" />
</div>
- <h3>{{ system.name }}</h3>
- <p>{{ system.description }}</p>
- </div>
+ <el-dropdown @command="handleCommand" class="right-menu-item hover-effect" trigger="click">
+ <div class="admin-details">
+ <div class="admin-name">{{userName}}</div>
+ <div class="admin-role">{{userTypeName}}</div>
+ </div>
+ <template #dropdown>
+ <el-dropdown-menu>
+ <el-dropdown-item command="password">
+ <span>修改密码</span>
+ </el-dropdown-item>
+ <el-dropdown-item divided command="logout">
+ <span>退出登录</span>
+ </el-dropdown-item>
+ </el-dropdown-menu>
+ </template>
+ </el-dropdown>
</div>
</div>
+ </header>
+
+ <!-- 主体内容 -->
+ <div class="menu-container">
+ <section class="welcome-section">
+ <div class="welcome-decoration"></div>
+ <h1 class="welcome-title">多体系建设信息化系统</h1>
+ <p class="welcome-subtitle">
+ 本系统集成多个国际与国内管理体系标准,为企业提供全面、协同、高效的信息化管理平台。通过统一门户实现质量管理、信息安全、职业健康安全、项目管理等多体系的无缝集成与协同运作,助力企业标准化、数字化、智能化发展。
+ </p>
+ </section>
+
+ <section class="systems-grid">
+ <!-- 使用v-for循环渲染系统卡片 -->
+ <div
+ v-for="(system, index) in systems"
+ :key="system.id"
+ class="system-card"
+ :class="`card-${index + 1}`"
+ @click="handleSystemLinkClick(system.id)"
+ @mouseenter="handleCardHover(system, true)"
+ @mouseleave="handleCardHover(system, false)"
+ ref="cardRefs"
+ >
+ <div class="card-decoration"></div>
+ <div class="system-header">
+ <div class="system-icon-container">
+ <div class="system-icon" ref="iconRefs">
+ <img :src="system.icon"/>
+ </div>
+ <h3 class="system-name">{{ system.name }}</h3>
+ </div>
+ </div>
+ <p class="system-desc">{{ system.description }}</p>
+ <a
+ href="#"
+ class="system-link"
+ @click.stop="handleSystemLinkClick(system.id)"
+ >
+ 进入系统 <el-icon><Right /></el-icon>
+ </a>
+ </div>
+ </section>
</div>
+
+ <!-- 底部 -->
+ <footer>
+ <div class="footer-decoration"></div>
+ <div class="footer-container">
+ <div class="copyright-section">
+ <div class="copyright">
+ © 2025 多体系建设信息化系统 | 中国科学院苏州纳米技术与纳米仿生研究所 版权所有
+ </div>
+ <div class="version">版本号 V1.0.0</div>
+ </div>
+ </div>
+ </footer>
<user-dialog ref="reviewRef"></user-dialog>
</div>
</template>
<script setup>
-import { ref, onMounted } from 'vue'
-import { useRouter } from 'vue-router'
-import {getToken, removeToken} from "@/utils/auth";
-import Cookies from "js-cookie";
+import { ref, onMounted, nextTick } from 'vue'
import {ElMessage, ElMessageBox} from "element-plus";
-import useUserStore from '@/store/modules/user'
+import {getToken, removeToken} from "@/utils/auth";
import userDialog from '@/views/build/conpanyFunctionConsult/staffManage/staffRegister/components/staffDialog.vue'
-import menu1 from '@/assets/icons/menu1.png'
-import menu2 from '@/assets/icons/menu2.png'
-import menu3 from '@/assets/icons/menu3.png'
-import menu4 from '@/assets/icons/menu4.png'
-import menu5 from '@/assets/icons/menu5.png'
-import menu6 from '@/assets/icons/menu6.png'
+import shield from '@/assets/icons/shield-alt.png'
+import lock from '@/assets/icons/lock.png'
+import hat from '@/assets/icons/hard-hat.png'
+import diagram from '@/assets/icons/project-diagram.png'
+import clipboard from '@/assets/icons/clipboard-check.png'
+import chartLine from '@/assets/icons/chart-line.png'
+import Cookies from "js-cookie";
+import useUserStore from "@/store/modules/user";
+import {useRouter} from "vue-router";
+
+// 响应式数据
+const systems = ref([
+ {
+ id: 1,
+ name: '国军标9001C质量管理体系',
+ description: '基于GJB9001C-2017标准,专为军工产品研制、生产、维修和服务单位设计。',
+ icon: shield,
+ color: '#1a56db'
+ },
+ {
+ id: 2,
+ name: 'ISO27001信息安全体系',
+ description: '遵循ISO/IEC 27001:2022标准,帮助企业建立、实施、维护和持续改进信息安全管理体系。',
+ icon: lock,
+ color: '#0d9488'
+ },
+ {
+ id: 3,
+ name: 'ISO45001安全体系',
+ description: '基于ISO45001:2018标准,系统化管理职业健康安全风险,预防工伤和健康损害。',
+ icon: hat,
+ color: '#10b981'
+ },
+ {
+ id: 4,
+ name: '项目管理控制',
+ description: '集成PMBOK和PRINCE2最佳实践的项目管理平台,支持项目全生命周期管理。',
+ icon: diagram,
+ color: '#7c3aed'
+ },
+ {
+ id: 5,
+ name: '承制评价系统',
+ description: '针对承制单位资格管理的综合系统,确保承制单位持续满足军用产品承制要求。',
+ icon: clipboard,
+ color: '#f97316'
+ },
+ {
+ id: 6,
+ name: '新体系评价系统',
+ description: '面向新兴管理体系标准的评估与导入平台,支持新标准的适应性评估和实施规划。',
+ icon: chartLine,
+ color: '#ef4444'
+ }
+])
+
+// Refs
+const adminInfoRef = ref(null)
+const cardRefs = ref([])
+const iconRefs = ref([])
const router = useRouter()
const route = useRoute();
const reviewRef = ref();
const userInfo = ref();
const userName = ref('')
const userTypeName = ref('')
-const cardStates = ref({})
-// 组件挂载时获取用户信息和系统列表
-onMounted(() => {
- if(getToken()){
- userInfo.value = JSON.parse(Cookies.get('userInfo'))
- userName.value = userInfo.value.username
- userTypeName.value = userInfo.value.userType == 0 ? '系统管理员' : (userInfo.value.userType == 1 || userInfo.value.userType == 2 || userInfo.value.userType == 3) ? '企业用户' :userInfo.value.userType == 6 ? '企业管理员' :userInfo.value.userType == 4 ? '其他' : '学员'
- }
-
- const userStore = useUserStore()
- userStore.roles = []
- systems.value.forEach(system => {
- cardStates.value[system.id] = {
- mouseX: 0,
- mouseY: 0,
- width: 0,
- height: 0,
- hover: false
- }
- })
-})
-
-
-// 鼠标进入卡片
-const handleCardEnter = (event, id) => {
- const card = event.currentTarget
- cardStates.value[id] = {
- ...cardStates.value[id],
- width: card.offsetWidth,
- height: card.offsetHeight,
- hover: true
+// 方法
+const handleAdminClick = () => {
+ if (adminInfoRef.value) {
+ adminInfoRef.value.style.transform = 'scale(0.94)'
+ setTimeout(() => {
+ if (adminInfoRef.value) {
+ adminInfoRef.value.style.transform = ''
+ }
+ alert('管理员菜单已打开')
+ }, 150)
}
}
-// 鼠标移动
-const handleCardMove = (event, id) => {
- if (!cardStates.value[id]?.hover) return
-
- const card = event.currentTarget
- const rect = card.getBoundingClientRect()
-
- cardStates.value[id].mouseX = event.clientX - rect.left - cardStates.value[id].width / 2
- cardStates.value[id].mouseY = event.clientY - rect.top - cardStates.value[id].height / 2
-}
-
-// 鼠标离开
-const handleCardLeave = (id) => {
- cardStates.value[id].hover = false;
- // 立即开始归位动画,不使用setTimeout延迟
- cardStates.value[id].mouseX = 0;
- cardStates.value[id].mouseY = 0;
-}
-
-// 获取卡片样式
-const getCardStyle = (id) => {
- const state = cardStates.value[id] || {}
- const mousePX = state.mouseX / (state.width || 1)
- const mousePY = state.mouseY / (state.height || 1)
-
- const rX = mousePX * 18 // 减小旋转角度,使效果更柔和
- const rY = mousePY * -18
-
- const tX = mousePX * -20
- const tY = mousePY * -20
-
- return {
- transform: `rotateY(${rX}deg) rotateX(${rY}deg)`,
- '--bg-transform': `translateX(${tX}px) translateY(${tY}px)`
- }
-}
-
-
-// 系统列表
-const systems = ref([
- {
- id: 1,
- name: 'ISO 9000 质量管理体系',
- description: '确保产品和服务质量符合国际标准',
- icon: menu1
- },
- {
- id: 2,
- name: 'ISO 27001 信息安全体系',
- description: '保护企业信息资产安全与机密性',
- icon: menu2
- },
- {
- id: 3,
- name: 'ISO 45001 安全体系',
- description: '实现企业安全的持续改进',
- icon: menu3
- },
- {
- id: 4,
- name: '项目管理控制',
- description: '标准化项目管理流程与方法',
- icon: menu4
- },
- {
- id: 5,
- name: '承制评价体系',
- description: '供应商与承包商能力评估标准',
- icon: menu5
- },
- {
- id: 6,
- name: '新体系评价',
- description: '新体系评价',
- icon: menu6
- }
-])
function handleCommand(command) {
switch (command) {
case "info":
@@ -202,14 +198,15 @@
break;
}
}
-// 进入系统
-const enterSystem = (systemId) => {
+
+const handleSystemLinkClick = (systemId) => {
if(systemId == 1){
- router.push({ path: "/"});
+ router.push({ path: "/menuIndex"});
}else{
ElMessage.warning('系统正在开发中...')
}
}
+
function getInfo() {
reviewRef.value.openDialog('view',userInfo.value)
}
@@ -229,182 +226,515 @@
}).catch(() => { });
}
+const handleCardHover = (system, isEnter) => {
+ const cardIndex = systems.value.findIndex(s => s.id === system.id)
+ if (cardIndex !== -1 && iconRefs.value[cardIndex]) {
+ iconRefs.value[cardIndex].style.transform = isEnter ? 'scale(1.04)' : 'scale(1)'
+ iconRefs.value[cardIndex].style.transition = 'transform 0.3s ease'
+ }
+}
+// 页面加载后计算高度并调整
+const adjustLayout = () => {
+ const bodyHeight = document.body.scrollHeight
+ const windowHeight = window.innerHeight
+
+ // 获取DOM元素
+ const welcomeSection = document.querySelector('.welcome-section')
+ const systemsGrid = document.querySelector('.systems-grid')
+ const footer = document.querySelector('footer')
+
+ // 如果内容超过屏幕高度,进行微调
+ if (bodyHeight > windowHeight) {
+ if (welcomeSection) welcomeSection.style.marginBottom = '1.5rem'
+ if (systemsGrid) {
+ systemsGrid.style.gap = '1.2rem'
+ systemsGrid.style.marginBottom = '2rem'
+ }
+ if (footer) footer.style.padding = '1.2rem 1.8rem'
+ if (welcomeSection) welcomeSection.style.padding = '1.8rem 1.5rem'
+ }
+}
+
+// 生命周期钩子
+onMounted(() => {
+ if(getToken()){
+ userInfo.value = JSON.parse(Cookies.get('userInfo'))
+ userName.value = userInfo.value.username
+ userTypeName.value = userInfo.value.userType == 0 ? '系统管理员' : (userInfo.value.userType == 1 || userInfo.value.userType == 2 || userInfo.value.userType == 3) ? '企业用户' :userInfo.value.userType == 6 ? '企业管理员' :userInfo.value.userType == 4 ? '其他' : '学员'
+ }
+
+ const userStore = useUserStore()
+ userStore.roles = []
+ // 等待DOM更新完成后执行
+ nextTick(() => {
+ adjustLayout()
+
+ // 渐显效果
+ document.body.style.opacity = '0'
+ document.body.style.transition = 'opacity 0.5s ease'
+
+ setTimeout(() => {
+ document.body.style.opacity = '1'
+ }, 100)
+ })
+
+ // 监听窗口大小变化
+ window.addEventListener('resize', adjustLayout)
+})
</script>
-<style scoped lang="scss">
-.system-select-container {
+<style lang="scss" scoped>
+body {
+ background-color: #f8fafc;
+ color: #1f2937;
+ min-height: 100vh;
+ display: flex;
+ flex-direction: column;
+ overflow-y: auto;
+}
+
+.multi-system-dashboard{
+ width: 100%;
height: 100vh;
display: flex;
flex-direction: column;
- background-color: #f5f7fa;
-}
-
-.user-info-bar {
- display: flex;
- height: 100px;
align-items: center;
+
+ .menu-container {
+ flex: 1;
+ overflow-y: auto;
+ max-width: 1600px;
+ width: 100%;
+ margin: 1rem auto;
+ padding: 0 1.8rem;
+ scrollbar-width: none; /* Firefox */
+ -ms-overflow-style: none; /* IE and Edge */
+ }
+}
+
+/* 头部样式 - 更加紧凑 */
+header {
+ width: 100%;
+ background: linear-gradient(135deg, #1e3a8a 0%, #3b82f6 100%);
+ color: white;
+ padding: 0.8rem 1.8rem;
+ box-shadow: 0 3px 10px rgba(30, 58, 138, 0.12);
+}
+
+.header-container {
+ max-width: 1600px;
+ margin: 0 auto;
+ display: flex;
justify-content: space-between;
- padding: 10px 20px;
- background-color: #ffffff;
- box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
+ align-items: center;
+}
- .user-left{
- width: 20%;
+.system-title {
+ font-size: 1.5rem;
+ font-weight: 700;
+ letter-spacing: 0.2px;
+}
+
+.admin-info {
+ display: flex;
+ align-items: center;
+ gap: 10px;
+ background: rgba(255, 255, 255, 0.15);
+ padding: 8px 16px;
+ border-radius: 10px;
+ backdrop-filter: blur(4px);
+ border: 1px solid rgba(255, 255, 255, 0.2);
+ transition: all 0.3s ease;
+ cursor: pointer;
+}
+
+.admin-info:hover {
+ background: rgba(255, 255, 255, 0.25);
+}
+
+.admin-icon {
+ background: linear-gradient(135deg, #f59e0b, #f97316);
+ width: 36px;
+ height: 36px;
+ border-radius: 50%;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+
+ img{
+ width: 100%;
+ height: 100%;
}
+}
- .user-details{
- width: 60%;
- margin: 0;
- color: #333;
- text-align: center;
- font-size: 28px;
- letter-spacing: 2px;
- }
+.admin-details {
+ display: flex;
+ flex-direction: column;
+ color: #fff;
+}
- .avatar-container {
- width: 20%;
- display: flex;
- justify-content: center;
+.admin-name {
+ font-weight: 600;
+ font-size: 0.95rem;
+ margin-bottom: 0.2rem;
+}
- .avatar-wrapper {
- position: relative;
-
- .user-avatar {
- cursor: pointer;
- width: 40px;
- height: 40px;
- border-radius: 10px;
- margin-right: 15px;
- }
-
- i {
- cursor: pointer;
- position: absolute;
- right: -20px;
- font-size: 12px;
- }
- }
- }
-
+.admin-role {
+ font-size: 0.75rem;
+ opacity: 0.9;
}
-.systems-container {
- flex: 1;
- padding: 20px;
- overflow-y: auto;
- margin-top: 60px;
+.welcome-section {
+ position: relative;
+ text-align: center;
+ margin-bottom: 1rem;
+ padding: 2rem;
+ background: white;
+ border-radius: 16px;
+ box-shadow: 0 5px 15px -4px rgba(0, 0, 0, 0.07);
+ overflow: hidden;
+ border: 1px solid rgba(226, 232, 240, 0.8);
}
+.welcome-decoration {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 3px;
+ background: linear-gradient(90deg,
+ #1a56db,
+ #0d9488,
+ #7c3aed,
+ #f97316
+ );
+}
+
+.welcome-title {
+ font-size: 1.5rem;
+ margin: 0 0 0.8rem;
+ font-weight: 800;
+ color: #1a56db;
+}
+
+.welcome-subtitle {
+ font-size: 0.95rem;
+ color: #4b5563;
+ max-width: 900px;
+ margin: 0 auto;
+ line-height: 1.5;
+ font-weight: 400;
+}
+
+/* 系统入口网格 - 更加紧凑 */
.systems-grid {
display: grid;
- grid-template-columns: repeat(auto-fill, minmax(400px, 1fr));
- gap: 30px;
- max-width: 1500px;
- margin: 0 auto;
- perspective: 1000px;
+ grid-template-columns: repeat(3, 1fr);
+ gap: 1rem;
+ margin-bottom: 2.5rem;
+ width: 100%;
}
+/* 为每个系统卡片分配不同的颜色主题 */
+.system-card.card-1 { --card-color: #1a56db; }
+.system-card.card-2 { --card-color: #0d9488; }
+.system-card.card-3 { --card-color: #10b981; }
+.system-card.card-4 { --card-color: #7c3aed; }
+.system-card.card-5 { --card-color: #f97316; }
+.system-card.card-6 { --card-color: #ef4444; }
+
.system-card {
- position: relative;
- height: 280px;
- background-color: #ffffff;
- border-radius: 4px;
- transition: transform 1s cubic-bezier(0.23, 1, 0.32, 1),
- box-shadow 0.5s cubic-bezier(0.23, 1, 0.32, 1);
- transform-style: preserve-3d;
- cursor: pointer;
+ background: white;
+ border-radius: 14px;
overflow: hidden;
-
- &:hover{
- border-radius: 16px;
- }
-
- &::after {
- content: '';
- position: absolute;
- top: 8px;
- left: 8px;
- right: 8px;
- bottom: 8px;
- border-radius: 4px; /* 比卡片小1px */
- border: 1px solid transparent;
- transition: border-color 0.3s ease;
- pointer-events: none; /* 确保不影响鼠标事件 */
- z-index: 3; /* 确保在内容之上 */
- }
-
- &::before {
- content: '';
- position: absolute;
- top: 0;
- left: 0;
- right: 0;
- bottom: 0;
- border-radius: 4px;
- background: #fff;
- transform: var(--bg-transform, translateX(0) translateY(0));
- transition: transform 0.5s cubic-bezier(0.23, 1, 0.32, 1);
- z-index: 1;
- }
- &:hover::after {
- border-color: rgba(37,99,235,1); /* 使用蓝色描边 */
- border-radius: 12px;
- box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.5); /* 可选:添加内发光效果 */
- }
- &:hover::before {
- border-radius: 16px;
- background: linear-gradient(135deg, rgba(255,255,255,0.1) 0%, rgba(20,20,20,0.05) 100%);
- }
+ box-shadow: 0 5px 15px -4px rgba(0, 0, 0, 0.07);
+ transition: all 0.3s ease;
+ cursor: pointer;
+ display: flex;
+ flex-direction: column;
+ height: 100%;
+ position: relative;
+ width: 100%;
}
.system-card:hover {
- //transform: translateY(-5px);
- box-shadow: 0 15px 30px rgba(0, 0, 0, 0.15),
- 0 0 0 1px rgba(255, 255, 255, 0.5) inset;
+ transform: translateY(-4px);
+ box-shadow: 0 10px 20px rgba(0, 0, 0, 0.1);
}
-.card-content {
+
+.card-decoration {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 3px;
+ background: linear-gradient(90deg,
+ var(--card-color),
+ color-mix(in srgb, var(--card-color) 70%, white)
+ );
+}
+
+.system-header {
+ padding: 0.8rem 1.5rem;
position: relative;
- height: 100%;
+}
+
+.system-icon-container {
+ display: flex;
+ align-items: center;
+ gap: 14px;
+
+}
+
+.system-icon {
+ background: linear-gradient(135deg, var(--card-color), color-mix(in srgb, var(--card-color) 80%, white));
+ width: 48px;
+ height: 48px;
+ border-radius: 12px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ color: white;
+ img{
+ width: 24px;
+ height: 24px;
+ }
+}
+
+.system-name {
+ font-size: 1.25rem;
+ font-weight: 700;
+ color: var(--card-color);
+ flex-grow: 1;
+ line-height: 1.25;
+}
+
+.system-desc {
+ padding: 0 1.5rem 1.2rem;
+ flex-grow: 1;
+ color: #4b5563;
+ line-height: 1.5;
+ font-size: 0.9rem;
+ margin: 0;
+}
+
+.system-link {
+ display: block;
+ padding: 0.8rem;
+ text-align: center;
+ background: linear-gradient(90deg,
+ var(--card-color),
+ color-mix(in srgb, var(--card-color) 80%, white)
+ );
+ color: white;
+ font-weight: 600;
+ text-decoration: none;
+ transition: all 0.3s ease;
+ font-size: 0.95rem;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ gap: 7px;
+}
+
+.system-link:hover {
+ background: linear-gradient(90deg,
+ color-mix(in srgb, var(--card-color) 90%, black),
+ var(--card-color)
+ );
+}
+
+/* 底部样式 - 更加紧凑 */
+footer {
+ width: 100%;
+ height: 100px;
+ background: linear-gradient(90deg, #111827 0%, #1f2937 100%);
+ color: white;
+ padding: 1.5rem 1.8rem;
+ margin-top: auto;
+ position: relative;
+}
+
+.footer-decoration {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 2px;
+ background: linear-gradient(90deg,
+ #1a56db,
+ #0d9488,
+ #7c3aed
+ );
+}
+
+.footer-container {
+ max-width: 1600px;
+ margin: 0 auto;
display: flex;
flex-direction: column;
align-items: center;
- justify-content: center;
- padding: 25px;
- z-index: 2;
- transform-style: preserve-3d;
+ gap: 0.8rem;
}
-.system-icon img {
- width: 80px;
- height: 80px;
- margin-bottom: 30px;
- transition: transform 0.5s;
-}
-
-.system-card:hover .system-icon img {
- transform: scale(1.3);
-}
-
-.system-card h3 {
- margin: 0 0 12px;
- color: #333;
- font-size: 24px;
+.copyright-section {
text-align: center;
- transition: transform 0.3s;
+ width: 100%;
+ display: flex;
+ flex-direction: column;
+ gap: 0.4rem;
}
-.system-card p {
- margin: 0;
- color: #999;
- font-size: 15px;
- text-align: center;
- transition: transform 0.3s;
+.copyright {
+ font-size: 0.9rem;
+ color: #d1d5db;
+ line-height: 1.3;
}
-.system-card:hover h3,
-.system-card:hover p {
- transform: translateZ(20px);
+.version {
+ display: inline-block;
+ background: rgba(59, 130, 246, 0.2);
+ color: #60a5fa;
+ padding: 4px 12px;
+ border-radius: 16px;
+ font-size: 0.85rem;
+ font-weight: 600;
+ letter-spacing: 0.2px;
+ border: 1px solid rgba(96, 165, 250, 0.3);
+}
+
+/* 响应式调整 */
+@media (max-width: 1300px) {
+ .systems-grid {
+ grid-template-columns: repeat(2, 1fr);
+ }
+}
+
+@media (max-width: 900px) {
+ header {
+ padding: 0.7rem 1.5rem;
+ }
+
+ .system-title {
+ font-size: 1.4rem;
+ }
+
+ .menu-container {
+ padding: 0 1.5rem;
+ margin: 0.8rem auto;
+ }
+
+ .welcome-section {
+ padding: 1.5rem;
+ margin-bottom: 0.8rem;
+ }
+
+ .welcome-title {
+ font-size: 1.3rem;
+ }
+
+ .welcome-subtitle {
+ font-size: 0.9rem;
+ }
+
+ .systems-grid {
+ gap: 1rem;
+ margin-bottom: 2rem;
+ }
+
+ .system-header {
+ padding: 0.6rem 1.3rem;
+ }
+
+ .system-desc {
+ padding: 0 1.3rem 1rem;
+ font-size: 0.85rem;
+ }
+
+ .system-link {
+ padding: 0.7rem;
+ }
+}
+
+@media (max-width: 700px) {
+ .systems-grid {
+ grid-template-columns: 1fr;
+ }
+
+ .header-container {
+ flex-direction: column;
+ gap: 0.8rem;
+ text-align: center;
+ }
+
+ .admin-info {
+ padding: 7px 14px;
+ }
+
+ .welcome-title {
+ font-size: 1.2rem;
+ }
+
+ .system-name {
+ font-size: 1.2rem;
+ }
+
+ footer {
+ padding: 1.2rem 1.5rem;
+ }
+}
+
+@media (max-width: 480px) {
+ .menu-container {
+ padding: 0 1.2rem;
+ }
+
+ .welcome-section {
+ padding: 1rem 1.2rem;
+ }
+
+ .welcome-title {
+ font-size: 1rem;
+ }
+
+ .system-header {
+ padding: 0.5rem 1.2rem;
+ }
+
+ .system-icon {
+ width: 42px;
+ height: 42px;
+ }
+
+ .system-name {
+ font-size: 1.15rem;
+ }
+
+ .copyright {
+ font-size: 0.85rem;
+ }
+
+ .version {
+ font-size: 0.8rem;
+ }
+}
+
+/* 确保在一个屏幕内显示 */
+@media (min-height: 900px) {
+ .menu-container {
+ margin: 1rem auto;
+ }
+
+ .welcome-section {
+ margin-bottom: 1rem;
+ padding: 2rem;
+ }
+
+ .systems-grid {
+ gap: 1rem;
+ margin-bottom: 3rem;
+ }
}
</style>
--
Gitblit v1.9.2