diff --git a/src/assets/less/Header/header.less b/src/assets/less/Header/header.less index 39f4adc..5f606c8 100644 --- a/src/assets/less/Header/header.less +++ b/src/assets/less/Header/header.less @@ -12,8 +12,9 @@ justify-content: space-between; align-items: center; padding-right: 2rem; - background: rgba(10, 14, 20, 0.8); - backdrop-filter: blur(12px); + background: rgba(10, 12, 18, 0.74); + backdrop-filter: blur(16px); + border-bottom: 1px solid rgba(255, 255, 255, 0.06); @media (max-width: 768px) { padding: 0 1rem; @@ -37,11 +38,9 @@ .header-title { font-family: "Microsoft Yahei", "PingFang SC", sans-serif; font-size: 28px; - font-weight: 600; + font-weight: 700; color: #fff; - transform: skew(-8deg); - -webkit-transform: skew(-12deg); - text-shadow: 0 0 10px rgba(0, 255, 204, 0.3); + letter-spacing: 0.04em; @media (max-width: 768px) { font-size: 24px; @@ -53,7 +52,7 @@ .header-actions { display: flex; align-items: center; - gap: 20px; + gap: 14px; @media (max-width: 768px) { gap: 12px; @@ -64,60 +63,112 @@ // 【一体化】余额 + 充值按钮(核心修改) // ============================================== .balance-recharge-combo { - height: 44px; - padding: 0 20px; + height: 52px; + padding: 0 10px 0 12px; display: flex; align-items: center; - gap: 8px; + gap: 12px; font-size: 15px; font-weight: 500; color: #fff; - background: rgba(255, 142, 83, 0.1); - border: 1px solid rgba(255, 142, 83, 0.4); - border-radius: 22px; + background: linear-gradient(180deg, rgba(31, 35, 46, 0.95), rgba(18, 21, 30, 0.96)); + border: 1px solid rgba(255, 255, 255, 0.08); + border-radius: 18px; cursor: pointer; transition: all 0.3s ease; + box-shadow: 0 10px 26px rgba(0, 0, 0, 0.18); + + .balance-main { + display: flex; + align-items: center; + gap: 10px; + } + + .balance-icon-wrap { + width: 32px; + height: 32px; + border-radius: 12px; + background: linear-gradient(135deg, rgba(139, 124, 255, 0.22), rgba(246, 184, 106, 0.18)); + display: flex; + align-items: center; + justify-content: center; + flex-shrink: 0; + } - // 图标 .iconfont { font-size: 16px; - color: #ff8e53; + color: #f6b86a; + } + + .balance-copy { + display: flex; + flex-direction: column; + gap: 2px; + } + + .balance-label { + font-size: 11px; + color: rgba(255, 255, 255, 0.48); + letter-spacing: 0.08em; } - // 余额数字 .balance-text { - font-weight: 600; - color: #ff8e53; + font-weight: 700; + color: #fff; + line-height: 1.1; + } + + .combo-divider { + width: 1px; + height: 24px; + background: rgba(255, 255, 255, 0.08); } - // 充值文字 .recharge-text { - height: 100%; - width: 60px; - display: flex; - justify-content: center; - align-items: center; - border-radius: 10px; + min-width: 72px; + height: 36px; + padding: 0 14px; + display: flex; + justify-content: center; + align-items: center; + border-radius: 12px; font-size: 13px; - color: #ff8e53; + color: #fff; font-weight: 600; + background: linear-gradient(135deg, #6e5cff, #8b7cff); + box-shadow: 0 10px 24px rgba(110, 92, 255, 0.3); } &:hover { - background: rgba(255, 142, 83, 0.15); - box-shadow: 0 4px 12px rgba(255, 142, 83, 0.2); - - + transform: translateY(-1px); + border-color: rgba(139, 124, 255, 0.26); + box-shadow: 0 14px 30px rgba(0, 0, 0, 0.24); } @media (max-width: 768px) { - height: 36px; - padding: 0 14px; + height: 42px; + padding: 0 8px 0 10px; font-size: 13px; gap: 6px; + .balance-icon-wrap { + width: 28px; + height: 28px; + border-radius: 10px; + } + + .balance-label { + display: none; + } + + .combo-divider { + height: 18px; + } + .recharge-text { - padding: 1px 6px; + min-width: 60px; + height: 30px; + padding: 0 10px; font-size: 12px; } } @@ -128,21 +179,21 @@ min-width: 120px; height: 48px; font-size: 16px; - background-image: linear-gradient(270deg, #00f2fe 11.11%, #4facfe); - border-radius: 24px; + background-image: linear-gradient(135deg, #6e5cff, #8b7cff); + border-radius: 16px; display: flex; justify-content: center; align-items: center; font-weight: 600; - color: #0a1428; + color: #fff; cursor: pointer; transition: all 0.3s ease; - box-shadow: 0 4px 12px rgba(0, 242, 254, 0.3); + box-shadow: 0 12px 28px rgba(110, 92, 255, 0.3); &:hover { - background-image: linear-gradient(270deg, #4facfe 11.11%, #00f2fe); + background-image: linear-gradient(135deg, #7d6dff, #978bff); transform: translateY(-2px); - box-shadow: 0 6px 20px rgba(0, 242, 254, 0.4); + box-shadow: 0 16px 36px rgba(110, 92, 255, 0.34); } @media (max-width: 768px) { @@ -158,35 +209,48 @@ display: inline-block; } -// 下拉菜单打开时,箭头保持指向上 .user-profile.dropdown-open .user-trigger .dropdown-icon { transform: rotate(180deg); - color: #00ffcc; + color: #8b7cff; } -// 用户触发区域 .user-trigger { display: flex; align-items: center; - gap: 8px; - padding: 0 20px; - height: 44px; - background: rgba(255, 255, 255, 0.1); - border-radius: 22px; + gap: 10px; + padding: 0 16px 0 12px; + height: 52px; + background: rgba(255, 255, 255, 0.04); + border-radius: 18px; color: #fff; cursor: pointer; transition: all 0.3s ease; - border: 1px solid transparent; + border: 1px solid rgba(255, 255, 255, 0.08); + box-shadow: 0 10px 26px rgba(0, 0, 0, 0.14); &:hover { - background: rgba(255, 255, 255, 0.15); - border-color: rgba(0, 255, 204, 0.3); - box-shadow: 0 0 15px rgba(0, 255, 204, 0.2); + background: rgba(255, 255, 255, 0.07); + border-color: rgba(139, 124, 255, 0.2); + transform: translateY(-1px); + } + + .user-avatar { + width: 30px; + height: 30px; + border-radius: 11px; + display: flex; + align-items: center; + justify-content: center; + font-size: 13px; + font-weight: 700; + color: #fff; + background: linear-gradient(135deg, rgba(139, 124, 255, 0.9), rgba(246, 184, 106, 0.72)); + flex-shrink: 0; } .user-name { font-size: 15px; - font-weight: 500; + font-weight: 600; max-width: 120px; overflow: hidden; text-overflow: ellipsis; @@ -197,17 +261,19 @@ width: 16px; height: 16px; transition: transform 0.3s ease; - color: rgba(255, 255, 255, 0.8); - } - - &:hover .dropdown-icon { - transform: rotate(180deg); - color: #00ffcc; + color: rgba(255, 255, 255, 0.56); } @media (max-width: 768px) { height: 36px; - padding: 0 14px; + padding: 0 12px; + + .user-avatar { + width: 24px; + height: 24px; + border-radius: 8px; + font-size: 11px; + } .user-name { max-width: 80px; @@ -223,11 +289,11 @@ right: 0; margin-top: 8px; width: 220px; - background: rgba(10, 14, 20, 0.95); - backdrop-filter: blur(12px); - border-radius: 12px; - border: 1px solid rgba(255, 255, 255, 0.1); - box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3); + background: rgba(16, 19, 28, 0.98); + backdrop-filter: blur(14px); + border-radius: 16px; + border: 1px solid rgba(255, 255, 255, 0.08); + box-shadow: 0 18px 40px rgba(0, 0, 0, 0.3); overflow: hidden; z-index: 1000; @@ -240,7 +306,7 @@ height: 0; border-left: 8px solid transparent; border-right: 8px solid transparent; - border-bottom: 8px solid rgba(10, 14, 20, 0.95); + border-bottom: 8px solid rgba(16, 19, 28, 0.98); } } @@ -254,7 +320,7 @@ cursor: pointer; &:hover { - background: rgba(0, 255, 204, 0.1); + background: rgba(255, 255, 255, 0.05); } &.user-id { @@ -266,7 +332,7 @@ } .item-value { - color: #00ffcc; + color: #8b7cff; font-family: monospace; font-size: 13px; } @@ -295,7 +361,7 @@ // 下拉菜单分隔线 .dropdown-divider { height: 1px; - background: rgba(255, 255, 255, 0.1); + background: rgba(255, 255, 255, 0.06); margin: 4px 0; } diff --git a/src/assets/less/Recharge/Recharge.less b/src/assets/less/Recharge/Recharge.less new file mode 100644 index 0000000..f3c7243 --- /dev/null +++ b/src/assets/less/Recharge/Recharge.less @@ -0,0 +1,547 @@ +@primary: #8b7cff; +@primary-dark: #6e5cff; +@accent: #f6b86a; +@bg-dark: rgba(10, 12, 18, 0.94); +@glass-bg: linear-gradient(180deg, rgba(24, 28, 39, 0.96), rgba(15, 18, 27, 0.98)); +@panel-bg: rgba(255, 255, 255, 0.04); +@panel-hover: rgba(255, 255, 255, 0.08); +@border-color: rgba(255, 255, 255, 0.08); +@text-light: #f7f8fb; +@text-secondary: rgba(255, 255, 255, 0.64); +@text-muted: rgba(255, 255, 255, 0.44); + +// 通用动画 +.fade-enter-active, +.fade-leave-active { + transition: opacity 0.3s ease; +} +.fade-enter-from, +.fade-leave-to { + opacity: 0; +} + +// 主弹窗遮罩层 +.recharge-modal-mask { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: + radial-gradient(circle at top, rgba(139, 124, 255, 0.2), transparent 35%), + rgba(0, 0, 0, 0.68); + backdrop-filter: blur(14px); + display: flex; + align-items: center; + justify-content: center; + z-index: 1000; + transition: all 0.3s; +} + +// 主弹窗容器 +.recharge-container { + width: 520px; + max-width: 90vw; + background: @glass-bg; + backdrop-filter: blur(20px); + border-radius: 28px; + padding: 30px 30px 24px; + transition: transform 0.2s ease; + border: 1px solid rgba(255, 255, 255, 0.08); + box-shadow: 0 24px 70px rgba(0, 0, 0, 0.45); +} + +.modal-header { + display: flex; + justify-content: space-between; + align-items: flex-start; + margin-bottom: 28px; + + .header-copy { + display: flex; + flex-direction: column; + gap: 10px; + } + + h2 { + font-size: 28px; + font-weight: 700; + color: @text-light; + margin: 0; + letter-spacing: 0.02em; + } + + .header-desc { + margin: 0; + max-width: 360px; + font-size: 14px; + line-height: 1.65; + color: @text-secondary; + } + + .close-btn { + background: rgba(255, 255, 255, 0.04); + border: 1px solid @border-color; + font-size: 18px; + cursor: pointer; + color: @text-secondary; + width: 36px; + height: 36px; + border-radius: 12px; + display: flex; + align-items: center; + justify-content: center; + transition: all 0.2s; + + &:hover { + background: rgba(255, 255, 255, 0.1); + color: #fff; + transform: translateY(-1px); + } + } +} + +.provider-section { + margin-bottom: 24px; + + .section-title { + font-size: 13px; + letter-spacing: 0.08em; + color: @text-secondary; + margin-bottom: 16px; + font-weight: 500; + } +} + +.provider-grid { + display: grid; + grid-template-columns: 1fr; + gap: 12px; +} + +.provider-btn { + background: @panel-bg; + border: 1px solid @border-color; + border-radius: 18px; + padding: 16px 18px; + font-size: 16px; + font-weight: 600; + color: @text-light; + cursor: pointer; + transition: all 0.25s ease; + backdrop-filter: blur(8px); + display: flex; + align-items: center; + justify-content: flex-start; + gap: 12px; + + .provider-name { + font-size: 16px; + } + + .provider-tag { + margin-left: auto; + padding: 4px 10px; + border-radius: 999px; + background: rgba(246, 184, 106, 0.14); + color: @accent; + font-size: 12px; + font-weight: 600; + } + + &:hover { + transform: translateY(-2px); + border-color: rgba(139, 124, 255, 0.4); + box-shadow: 0 12px 30px rgba(0, 0, 0, 0.2); + background: @panel-hover; + } + + &.active { + background: linear-gradient(135deg, rgba(139, 124, 255, 0.18), rgba(246, 184, 106, 0.08)); + border-color: rgba(139, 124, 255, 0.45); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.05); + color: #fff; + } + + .iconfont { + font-size: 22px; + color: #165dff; + } +} + +.amount-section { + margin-bottom: 32px; + + .section-title { + font-size: 13px; + letter-spacing: 0.08em; + color: @text-secondary; + margin-bottom: 16px; + font-weight: 500; + } +} + +.amount-grid { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 12px; + margin-bottom: 24px; + + @media (min-width: 480px) { + grid-template-columns: repeat(5, 1fr); + } +} + +.amount-btn { + min-height: 76px; + background: @panel-bg; + border: 1px solid @border-color; + border-radius: 18px; + padding: 12px 0; + font-size: 22px; + font-weight: 600; + color: @text-light; + cursor: pointer; + transition: all 0.25s ease; + backdrop-filter: blur(8px); + display: flex; + align-items: center; + justify-content: center; + gap: 4px; + + .currency { + font-size: 15px; + font-weight: 400; + color: @text-secondary; + } + + &:hover { + transform: translateY(-2px); + border-color: rgba(139, 124, 255, 0.4); + box-shadow: 0 12px 28px rgba(0, 0, 0, 0.18); + background: @panel-hover; + } + + &.active { + background: linear-gradient(180deg, rgba(139, 124, 255, 0.24), rgba(139, 124, 255, 0.12)); + border-color: rgba(139, 124, 255, 0.48); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.08); + color: #fff; + } +} + +.custom-btn { + font-size: 16px; + flex-direction: column; + gap: 6px; + + .currency { + font-size: 18px; + color: @accent; + } +} + +.selected-info { + display: grid; + grid-template-columns: repeat(2, minmax(0, 1fr)); + gap: 12px; + padding-top: 2px; + + .selected-info__item { + display: flex; + flex-direction: column; + gap: 6px; + padding: 16px 18px; + border-radius: 18px; + background: rgba(255, 255, 255, 0.04); + border: 1px solid @border-color; + } + + .selected-info__item--highlight { + background: linear-gradient(135deg, rgba(139, 124, 255, 0.16), rgba(246, 184, 106, 0.08)); + } + + .selected-info__label { + font-size: 12px; + letter-spacing: 0.06em; + color: @text-muted; + } + + .selected-info__value { + font-size: 18px; + font-weight: 600; + color: @text-light; + } + + .selected-amount { + font-size: 28px; + font-weight: 700; + color: #fff; + } +} + +.confirm-btn { + width: 100%; + background: linear-gradient(135deg, @primary-dark, @primary); + border: none; + border-radius: 18px; + padding: 16px 0; + font-size: 18px; + font-weight: 600; + color: #fff; + cursor: pointer; + display: flex; + align-items: center; + justify-content: center; + gap: 12px; + transition: all 0.3s; + box-shadow: 0 16px 36px rgba(110, 92, 255, 0.32); + letter-spacing: 0.06em; + + .btn-icon { + width: 20px; + height: 20px; + transition: transform 0.2s; + + &.loading { + animation: spin 1s linear infinite; + } + } + + &:hover:not(:disabled) { + transform: translateY(-1px); + box-shadow: 0 20px 42px rgba(110, 92, 255, 0.38); + filter: brightness(1.06); + + .btn-icon:not(.loading) { + transform: translateX(4px); + } + } + + &:active:not(:disabled) { + transform: scale(0.98); + } + + &:disabled { + opacity: 0.7; + cursor: not-allowed; + transform: none !important; + box-shadow: none !important; + } + +@keyframes spin { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } +} +} + +.recharge-tips { + display: flex; + justify-content: space-between; + gap: 12px; + margin-top: 14px; + font-size: 12px; + color: @text-muted; + + span:last-child { + text-align: right; + } +} + +.custom-modal-mask { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: rgba(0, 0, 0, 0.76); + backdrop-filter: blur(16px); + display: flex; + align-items: center; + justify-content: center; + z-index: 1100; +} + +.custom-dialog { + width: 100%; + max-width: 420px; + background: linear-gradient(180deg, rgba(23, 26, 37, 0.98), rgba(15, 18, 27, 0.99)); + backdrop-filter: blur(18px); + border-radius: 24px; + border: 1px solid @border-color; + box-shadow: 0 24px 60px rgba(0, 0, 0, 0.45); + overflow: hidden; + animation: slideUp 0.25s ease; + + .dialog-header { + display: flex; + justify-content: space-between; + align-items: center; + padding: 20px 30px; + border-bottom: 1px solid rgba(255, 255, 255, 0.06); + + h3 { + font-size: 22px; + font-weight: 600; + color: @text-light; + margin: 0; + } + + .close-btn { + width: 34px; + height: 34px; + border-radius: 10px; + border: 1px solid @border-color; + background: rgba(255, 255, 255, 0.04); + font-size: 18px; + cursor: pointer; + color: @text-secondary; + transition: all 0.2s; + + &:hover { + color: #fff; + background: rgba(255, 255, 255, 0.1); + } + } + } + + .dialog-body { + padding:20px 30px; + + .input-group { + display: flex; + align-items: center; + background: rgba(255, 255, 255, 0.04); + border-radius: 18px; + border: 1px solid @border-color; + transition: all 0.2s; + + &:focus-within { + border-color: rgba(139, 124, 255, 0.46); + box-shadow: 0 0 0 4px rgba(139, 124, 255, 0.12); + } + + .input-currency { + font-size: 28px; + font-weight: 600; + padding: 0 16px; + color: @accent; + } + + .custom-input { + flex: 1; + background: transparent; + border: none; + padding: 16px 16px 16px 0; + font-size: 26px; + font-weight: 600; + color: @text-light; + outline: none; + + &::placeholder { + color: rgba(255, 255, 255, 0.28); + font-size: 20px; + font-weight: 400; + } + + &::-webkit-outer-spin-button, + &::-webkit-inner-spin-button { + -webkit-appearance: none; + margin: 0; + } + -moz-appearance: textfield; + } + } + + .error-msg { + color: #ff6b6b; + font-size: 13px; + margin-top: 12px; + padding-left: 4px; + } + } + + .dialog-footer { + display: flex; + gap: 12px; + padding: 12px 24px 28px; + + .dialog-btn { + flex: 1; + padding: 13px 0; + border-radius: 16px; + font-size: 16px; + font-weight: 600; + cursor: pointer; + transition: all 0.2s; + border: none; + background: transparent; + + &.cancel { + background: rgba(255, 255, 255, 0.05); + border: 1px solid @border-color; + color: @text-light; + + &:hover { + background: rgba(255, 255, 255, 0.1); + } + } + + &.confirm { + background: linear-gradient(135deg, @primary-dark, @primary); + color: #fff; + box-shadow: 0 12px 28px rgba(110, 92, 255, 0.28); + + &:hover { + transform: translateY(-1px); + filter: brightness(1.05); + } + } + } + } +} + +@keyframes slideUp { + from { + opacity: 0; + transform: translateY(30px); + } + to { + opacity: 1; + transform: translateY(0); + } +} + +@media (max-width: 640px) { + .recharge-container { + padding: 24px 20px 20px; + border-radius: 24px; + } + + .modal-header { + .header-desc { + max-width: none; + font-size: 13px; + } + } + + .amount-grid { + grid-template-columns: repeat(2, 1fr); + } + + .selected-info { + grid-template-columns: 1fr; + } + + .recharge-tips { + flex-direction: column; + + span:last-child { + text-align: left; + } + } +} \ No newline at end of file diff --git a/src/components/Header/Header.vue b/src/components/Header/Header.vue index a5aa9ef..27139fb 100644 --- a/src/components/Header/Header.vue +++ b/src/components/Header/Header.vue @@ -13,14 +13,23 @@ + + diff --git a/src/components/Recharge/Recharge.vue b/src/components/Recharge/Recharge.vue index db4972c..a47cd2c 100644 --- a/src/components/Recharge/Recharge.vue +++ b/src/components/Recharge/Recharge.vue @@ -3,7 +3,10 @@
@@ -20,6 +23,7 @@ > {{ provider.name }} + 推荐
@@ -49,8 +53,14 @@
- 充值金额: - ¥{{ selectedAmount }} +
+ 充值渠道 + 支付宝 +
+
+ 到账金额 + ¥{{ selectedAmount }} +
@@ -66,6 +76,11 @@ + +
+ 支付由第三方渠道完成 + 如长时间未到账,请刷新余额或联系客服 +
@@ -277,448 +292,5 @@ const closeModal = () => { \ No newline at end of file diff --git a/src/components/RightResult/RightResult.vue b/src/components/RightResult/RightResult.vue index 2071966..8e03e44 100644 --- a/src/components/RightResult/RightResult.vue +++ b/src/components/RightResult/RightResult.vue @@ -2,14 +2,12 @@
- +