diff --git a/src/style.css b/src/style.css index 17be750..7215d25 100644 --- a/src/style.css +++ b/src/style.css @@ -7,23 +7,44 @@ /* 根元素样式 */ :root { - font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif; + /* 王者荣耀风格字体 - 使用系统默认字体但设置更多样化 */ + font-family: 'Microsoft YaHei', 'PingFang SC', 'SimHei', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; line-height: 1.5; - font-weight: 400; + font-weight: 500; - /* 自定义颜色变量 */ - --primary-color: #ff6b6b; - --secondary-color: #ee5a24; - --accent-color: #6c5ce7; - --success-color: #28a745; - --warning-color: #ffc107; - --danger-color: #dc3545; - --info-color: #17a2b8; - --dark-color: #343a40; - --light-color: #f8f9fa; + /* 王者荣耀风格配色方案 */ + /* 主色调:金色、红色、黑色 */ + --primary-color: #ffc107; /* 王者荣耀金色 */ + --secondary-color: #e74c3c; /* 王者荣耀红色 */ + --accent-color: #f39c12; /* 亮金色 */ + --success-color: #27ae60; /* 成功绿色 */ + --warning-color: #e67e22; /* 警告橙色 */ + --danger-color: #c0392b; /* 危险深红色 */ + --info-color: #3498db; /* 信息蓝色 */ + --dark-color: #1a1a1a; /* 几乎黑色 */ + --light-color: #f5f5f5; /* 浅灰色背景 */ --white-color: #ffffff; - --text-color: #495057; - --text-light: #6c757d; + --text-color: #333333; + --text-light: #666666; + + /* 王者荣耀特有颜色 */ + --gold-primary: #ffd700; /* 纯金色 */ + --gold-secondary: #ffc700; /* 次级金色 */ + --gold-tertiary: #ffb700; /* 三级金色 */ + --red-primary: #e74c3c; /* 主红色 */ + --red-secondary: #c0392b; /* 次级红色 */ + --black-primary: #1a1a1a; /* 主黑色 */ + --black-secondary: #2c2c2c; /* 次级黑色 */ + + /* 边框发光效果 */ + --glow-primary: 0 0 10px rgba(255, 215, 0, 0.5); + --glow-secondary: 0 0 15px rgba(231, 76, 60, 0.4); + + /* 渐变背景 */ + --gradient-primary: linear-gradient(135deg, #ffd700, #ffc700, #ffb700); + --gradient-secondary: linear-gradient(135deg, #e74c3c, #c0392b, #a93226); + --gradient-background: linear-gradient(135deg, #1a1a1a, #2c2c2c, #1a1a1a); + --gradient-card: linear-gradient(145deg, #ffffff, #f0f0f0); font-synthesis: none; text-rendering: optimizeLegibility; @@ -38,7 +59,9 @@ html, body { width: 100%; height: 100%; color: var(--text-color); - background-color: var(--light-color); + background-color: var(--dark-color); + background-image: var(--gradient-background); + background-attachment: fixed; } #app { @@ -46,49 +69,347 @@ html, body { min-height: 100vh; } -/* 标题样式 */ +/* 游戏化标题样式 */ h1, h2, h3, h4, h5, h6 { - font-weight: 600; + font-weight: 700; line-height: 1.2; - color: var(--dark-color); + color: var(--gold-primary); + text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.3); + letter-spacing: 0.5px; } -/* 链接样式 */ +/* 游戏化主标题 */ +h1.game-title { + color: black; + font-size: 3.5rem; + font-weight: 800; + letter-spacing: 1px; + text-transform: uppercase; + text-shadow: 0 0 10px rgba(255, 215, 0, 0.5); + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + text-rendering: optimizeLegibility; +} + +/* 游戏化次级标题 */ +h2.game-subtitle { + color: var(--gold-secondary); + font-size: 1.8rem; + font-weight: 700; + letter-spacing: 0.5px; +} + +/* 游戏化链接样式 */ a { - color: var(--accent-color); + color: var(--gold-primary); text-decoration: none; - transition: color 0.3s ease; + transition: all 0.3s ease; + font-weight: 500; + position: relative; } a:hover { - color: var(--primary-color); - text-decoration: underline; + color: var(--gold-tertiary); + text-decoration: none; } -/* 按钮基础样式重置 */ +a::after { + content: ''; + position: absolute; + width: 0; + height: 2px; + bottom: -2px; + left: 0; + background-color: var(--gold-primary); + transition: width 0.3s ease; +} + +a:hover::after { + width: 100%; + box-shadow: 0 0 5px var(--gold-primary); +} + +/* 游戏化按钮样式 */ button { font-family: inherit; font-size: inherit; line-height: inherit; cursor: pointer; transition: all 0.3s ease; + position: relative; + overflow: hidden; } button:focus { outline: none; } -/* 输入框基础样式 */ +/* 游戏化主按钮 */ +.btn-game { + background: var(--gradient-primary); + color: var(--black-primary); + border: 2px solid var(--gold-primary); + padding: 10px 20px; + border-radius: 30px; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 1px; + box-shadow: 0 4px 15px rgba(255, 215, 0, 0.3), var(--glow-primary); + transition: all 0.3s ease; + position: relative; + overflow: hidden; +} + +.btn-game:hover { + transform: translateY(-3px); + box-shadow: 0 6px 20px rgba(255, 215, 0, 0.4), var(--glow-primary); + background: var(--gold-tertiary); +} + +.btn-game:active { + transform: translateY(-1px); + box-shadow: 0 2px 10px rgba(255, 215, 0, 0.3), var(--glow-primary); +} + +/* 按钮波纹效果 */ +.btn-game::before { + content: ''; + position: absolute; + top: 50%; + left: 50%; + width: 0; + height: 0; + border-radius: 50%; + background: rgba(255, 255, 255, 0.3); + transform: translate(-50%, -50%); + transition: width 0.6s, height 0.6s; +} + +.btn-game:active::before { + width: 300px; + height: 300px; +} + +/* 游戏化次要按钮 */ +.btn-game-secondary { + background: var(--gradient-secondary); + color: var(--white-color); + border: 2px solid var(--red-primary); + padding: 10px 20px; + border-radius: 30px; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 1px; + box-shadow: 0 4px 15px rgba(231, 76, 60, 0.3), var(--glow-secondary); + transition: all 0.3s ease; + position: relative; + overflow: hidden; +} + +.btn-game-secondary:hover { + transform: translateY(-3px); + box-shadow: 0 6px 20px rgba(231, 76, 60, 0.4), var(--glow-secondary); + background: var(--red-secondary); + animation: borderGlow 1.5s ease-in-out infinite alternate; +} + +.btn-game-secondary:active { + transform: translateY(-1px); + box-shadow: 0 2px 10px rgba(231, 76, 60, 0.3), var(--glow-secondary); +} + +/* 次要按钮波纹效果 */ +.btn-game-secondary::before { + content: ''; + position: absolute; + top: 50%; + left: 50%; + width: 0; + height: 0; + border-radius: 50%; + background: rgba(255, 255, 255, 0.2); + transform: translate(-50%, -50%); + transition: width 0.6s, height 0.6s; +} + +.btn-game-secondary:active::before { + width: 300px; + height: 300px; +} + +/* 游戏化输入框样式 */ input, select, textarea { font-family: inherit; font-size: inherit; line-height: inherit; + background: rgba(0, 0, 0, 0.8); + border: 2px solid var(--gold-primary); + border-radius: 8px; + padding: 10px 15px; + color: var(--gold-primary); + transition: all 0.3s ease; + box-shadow: 0 0 5px rgba(255, 215, 0, 0.3); + font-weight: 600; + letter-spacing: 0.5px; } -/* 表格样式重置 */ +/* 登录表单输入框增强 */ +.form-input { + background: rgba(0, 0, 0, 0.9); + border-color: var(--gold-secondary); + color: var(--gold-primary); + font-size: 1.1rem; + padding: 12px 15px; + width: 100%; + box-shadow: 0 0 10px rgba(255, 215, 0, 0.3), inset 0 0 10px rgba(0, 0, 0, 0.5); +} + +.form-input:focus { + border-color: var(--gold-tertiary); + box-shadow: 0 0 15px rgba(255, 215, 0, 0.5), inset 0 0 10px rgba(0, 0, 0, 0.5); + background: rgba(0, 0, 0, 0.85); +} + +/* 表单标签增强 */ +.form-group label { + color: var(--gold-primary); + font-weight: 700; + font-size: 1.1rem; + margin-bottom: 8px; + display: block; + text-shadow: 0 0 10px rgba(255, 215, 0, 0.3); +} + +/* 占位符文本颜色 */ +input::placeholder { + color: rgba(255, 215, 0, 0.6); + font-style: italic; +} + +/* 登录表单容器增强 */ +.login-form { + background: rgba(0, 0, 0, 0.85); + padding: 30px; + border-radius: 15px; + box-shadow: 0 0 30px rgba(255, 215, 0, 0.4); +} + +/* 错误信息增强 */ +.error-message { + color: var(--red-primary); + font-weight: 600; + text-align: center; + margin-top: 15px; + padding: 10px; + border: 1px solid var(--red-primary); + border-radius: 5px; + background: rgba(231, 76, 60, 0.1); +} + +input:focus, select:focus, textarea:focus { + outline: none; + border-color: var(--gold-tertiary); + box-shadow: 0 0 15px rgba(255, 215, 0, 0.4), var(--glow-primary); + background: rgba(255, 255, 255, 0.15); +} + +/* 游戏化表格样式 */ table { border-collapse: collapse; width: 100%; + border: 2px solid var(--gold-primary); + box-shadow: 0 0 20px rgba(255, 215, 0, 0.2); + border-radius: 10px; + overflow: hidden; + animation: tableGlow 2s ease-in-out infinite alternate; +} + +/* 表格发光动画 */ +@keyframes tableGlow { + from { box-shadow: 0 0 20px rgba(255, 215, 0, 0.2); } + to { box-shadow: 0 0 30px rgba(255, 215, 0, 0.4); } +} + +/* 游戏化卡片样式 */ +.card-game { + background: rgba(255, 255, 255, 0.05); + border: 2px solid var(--gold-primary); + border-radius: 15px; + padding: 20px; + box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3), var(--glow-primary); + backdrop-filter: blur(10px); + transition: all 0.3s ease; + position: relative; + overflow: hidden; + animation: float 3s ease-in-out infinite; +} + +.card-game::before { + content: ''; + position: absolute; + top: -50%; + left: -50%; + width: 200%; + height: 200%; + background: linear-gradient(45deg, transparent, rgba(255, 215, 0, 0.1), transparent); + transform: rotate(45deg); + animation: shine 6s infinite; +} + +.card-game:hover { + transform: translateY(-5px); + box-shadow: 0 12px 40px rgba(0, 0, 0, 0.4), var(--glow-primary); + border-color: var(--gold-tertiary); +} + +@keyframes shine { + 0% { transform: rotate(45deg) translate(-100%, -100%); } + 100% { transform: rotate(45deg) translate(100%, 100%); } +} + +/* 卡片浮动动画 */ +@keyframes float { + 0% { transform: translateY(0px); } + 50% { transform: translateY(-5px); } + 100% { transform: translateY(0px); } +} + +/* 游戏化边框发光效果 */ +.glow-border { + border: 2px solid var(--gold-primary); + box-shadow: 0 0 15px var(--gold-primary), 0 0 30px var(--gold-secondary), inset 0 0 15px var(--gold-primary); + border-radius: 10px; + transition: all 0.3s ease; + animation: glowPulse 2s ease-in-out infinite alternate; +} + +.glow-border:hover { + box-shadow: 0 0 20px var(--gold-primary), 0 0 40px var(--gold-secondary), inset 0 0 20px var(--gold-primary); + border-color: var(--gold-tertiary); + animation: glowPulse 1s ease-in-out infinite alternate; +} + +/* 发光脉动动画 */ +@keyframes glowPulse { + from { + box-shadow: 0 0 10px var(--gold-primary), 0 0 20px var(--gold-secondary), inset 0 0 10px var(--gold-primary); + } + to { + box-shadow: 0 0 20px var(--gold-primary), 0 0 40px var(--gold-secondary), inset 0 0 20px var(--gold-primary); + } +} + +/* 游戏化徽章样式 */ +.badge-game { + background: var(--gradient-primary); + color: var(--black-primary); + padding: 5px 12px; + border-radius: 20px; + font-weight: 700; + font-size: 0.85rem; + text-transform: uppercase; + letter-spacing: 0.5px; + box-shadow: 0 2px 8px rgba(255, 215, 0, 0.3); } /* 滚动条样式 */ @@ -136,6 +457,36 @@ table { .mb-4 { margin-bottom: 1.5rem; } .mb-5 { margin-bottom: 3rem; } +/* 表格行样式增强 */ +.table-row { + /* color: var(--gold-secondary); */ + font-weight: 600; + font-size: 1rem; + transition: all 0.3s ease; +} + +.table-row:hover { + color: var(--gold-primary); + background: rgba(255, 215, 0, 0.1); +} + +.table-header { + color: var(--gold-primary); + font-weight: 700; + font-size: 1.1rem; +} + +/* 表格单元格样式增强 */ +.rank-col, .score-col, .bonus-col { + /* color: var(--gold-tertiary); */ + font-weight: 700; +} + +.name-col, .dept-col, .level-col { + /* color: var(--gold-secondary); */ + font-weight: 600; +} + /* 响应式断点 */ @media (max-width: 768px) { :root { @@ -148,3 +499,148 @@ table { font-size: 13px; } } + +/* 游戏化标题发光动画 */ +.game-title { + animation: titleGlow 3s ease-in-out infinite alternate; + text-stroke: 1px var(--gold-tertiary); + -webkit-text-stroke: 1px var(--gold-tertiary); +} + +@keyframes titleGlow { + from { + text-shadow: + 0 0 1px rgba(0, 0, 0, 0.9), /* 提高清晰度的细影 */ + 0 0 10px rgba(255, 215, 0, 0.5); + } + to { + text-shadow: + 0 0 1px rgba(0, 0, 0, 0.9), /* 提高清晰度的细影 */ + 0 0 15px rgba(255, 215, 0, 0.7), + 0 0 25px rgba(255, 215, 0, 0.5); + } +} + +/* 游戏化副标题发光动画 */ +.game-subtitle { + animation: subtitleGlow 2s ease-in-out infinite alternate; +} + +@keyframes subtitleGlow { + from { + text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.8), 0 0 15px rgba(255, 193, 7, 0.4); + } + to { + text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.8), 0 0 25px rgba(255, 193, 7, 0.6); + } +} + +/* 数字滚动动画 */ +@keyframes countUp { + from { opacity: 0; transform: translateY(20px); } + to { opacity: 1; transform: translateY(0); } +} + +/* 数字滚动效果类 */ +.count-animation { + animation: countUp 0.8s ease-out; + font-weight: bold; + color: var(--gold-primary); +} + +/* 鼠标悬停缩放效果 */ +.hover-scale { + transition: transform 0.3s ease; +} + +.hover-scale:hover { + transform: scale(1.05); +} + +/* 游戏化滚动条样式 */ +::-webkit-scrollbar { + width: 12px; + height: 12px; +} + +::-webkit-scrollbar-track { + background: var(--dark-bg); + border-radius: 6px; +} + +::-webkit-scrollbar-thumb { + background: linear-gradient(var(--gold-primary), var(--gold-secondary)); + border-radius: 6px; + border: 2px solid var(--dark-bg); +} + +::-webkit-scrollbar-thumb:hover { + background: linear-gradient(var(--gold-secondary), var(--gold-tertiary)); + box-shadow: 0 0 10px rgba(255, 193, 7, 0.5); +} + +/* 渐变背景动画 */ +.gradient-bg { + background-size: 400% 400%; + animation: gradient 15s ease infinite; +} + +@keyframes gradient { + 0% { + background-position: 0% 50%; + } + 50% { + background-position: 100% 50%; + } + 100% { + background-position: 0% 50%; + } +} + +/* 内容区域渐入动画 */ +.content { + animation: fadeIn 0.8s ease-out; +} + +@keyframes fadeIn { + from { + opacity: 0; + transform: translateY(20px); + } + to { + opacity: 1; + transform: translateY(0); + } +} + +/* 排名前三名特殊发光动画 */ +.rank-1 { + animation: championGlow 2s ease-in-out infinite alternate; +} + +.rank-2 { + animation: championGlow 2.5s ease-in-out infinite alternate; +} + +.rank-3 { + animation: championGlow 3s ease-in-out infinite alternate; +} + +@keyframes championGlow { + from { + transform: scale(1); + } + to { + transform: scale(1.05); + } +} + +/* 金色文本悬停效果增强 */ +.text-gold { + transition: all 0.3s ease; +} + +.text-gold:hover { + color: var(--gold-secondary); + text-shadow: 0 0 10px rgba(255, 193, 7, 0.7); +} diff --git a/src/views/AdminPanel.vue b/src/views/AdminPanel.vue index 35ad1b2..fd3217d 100644 --- a/src/views/AdminPanel.vue +++ b/src/views/AdminPanel.vue @@ -2,10 +2,10 @@
- @@ -33,11 +33,11 @@
-

📊 百人大战管理系统

+

📊 百人大战管理系统

@@ -47,16 +47,16 @@ v-for="tab in tabs" :key="tab.key" @click="currentTab = tab.key" - :class="['tab-btn', { active: currentTab === tab.key }]" + :class="['btn-game', { active: currentTab === tab.key }]" >{{ tab.label }}
-

⏰ 百人大战结束时间设置

+

⏰ 百人大战结束时间设置

-
- 提示:设置的结束时间将用于动态计算并显示"距离结束还有多少时间" + 提示:设置的结束时间将用于动态计算并显示"距离结束还有多少时间"
-

⚙️ 显示配置管理

+

⚙️ 显示配置管理

-

👤 个人排名显示选项

+

👤 个人排名显示选项

-
@@ -104,19 +104,19 @@ type="checkbox" v-model="localDisplayConfig.individual.showDepartment" > - 显示部门列 + 显示部门列
- +
- +
- +
- +
- +
- +
@@ -171,7 +171,7 @@
-

👥 战队排名显示选项

+

👥 战队排名显示选项

@@ -188,19 +188,19 @@ type="checkbox" v-model="localDisplayConfig.team.showLeader" > - 显示队长列 + 显示队长列
- +
- +
- +
- +
- +
@@ -252,8 +252,8 @@
-

👤 个人排名管理

- +

👤 个人排名管理

+
@@ -278,8 +278,8 @@ {{ item.department }} ¥{{ item.bonus }} - - + +
@@ -287,8 +287,8 @@
-

👥 战队排名管理

- +

👥 战队排名管理

+
@@ -313,8 +313,8 @@ {{ item.leader }} ¥{{ item.bonus }} - - + +
@@ -322,9 +322,9 @@
-

🎯 奖金设置

+

🎯 奖金设置

-

🏆 奖金规则配置

+

🏆 奖金规则配置

- +
- +
- +
- +
- +
- +
-

🥁 战鼓配置管理

+

🥁 战鼓配置管理

-

🔊 音效配置

+

🔊 音效配置