fix(ui): 下单页背景/卡片/文字跟随全局主题(修复暖色主题下仍是深色底)
- create.vue 原先把整套深色配色写死,仅局部有 .theme-warm 覆盖 → 暖色主题下页面底色/卡片仍是深色 - 统一改用全局主题变量:容器 var(--bg-primary)、卡片 var(--bg-surface)、次级面 var(--bg-surface-elevated)、文字 --text-primary/secondary/muted、描边 --border-subtle、品牌 --color-brand(-gradient)、底部支付栏 --bg-surface-glass - 替换 15 处深色时代的中性半透明白(rgba(255,255,255,0.03~0.1))为对应主题变量,暖色下不再白上白 - 主按钮渐变改用 var(--color-brand-gradient),暖色下自动变为橙色渐变 - theme-consistency.spec.ts 增加下单页断言(99 套件/682 用例全绿)
这个提交包含在:
@@ -475,7 +475,7 @@ const selectBalancePay = () => {
|
||||
content: `当前钱包余额为 ¥${userBalance.value},实付需 ¥${finalTotal.value}。您可以前往「我的」-「我的钱包」充值后再使用余额支付,或切换为微信直接支付。`,
|
||||
confirmText: '去充值',
|
||||
cancelText: '微信支付',
|
||||
confirmColor: '#6366F1',
|
||||
confirmColor: 'var(--color-brand)',
|
||||
success: (res) => {
|
||||
if (res.confirm) {
|
||||
uni.switchTab({ url: '/pages/user/index' });
|
||||
@@ -611,16 +611,16 @@ const handlePay = async () => {
|
||||
<style lang="scss">
|
||||
.create-order-container {
|
||||
min-height: 100vh;
|
||||
background-color: #0A0F1D;
|
||||
background-color: var(--bg-primary);
|
||||
padding: 24rpx 32rpx calc(160rpx + env(safe-area-inset-bottom));
|
||||
}
|
||||
|
||||
.order-card {
|
||||
background-color: #151D30;
|
||||
background-color: var(--bg-surface);
|
||||
border-radius: 24rpx;
|
||||
padding: 28rpx;
|
||||
margin-bottom: 24rpx;
|
||||
border: 1px solid rgba(255, 255, 255, 0.06);
|
||||
border: 1px solid var(--border-subtle);
|
||||
|
||||
.expert-profile {
|
||||
display: flex;
|
||||
@@ -645,12 +645,12 @@ const handlePay = async () => {
|
||||
.expert-name {
|
||||
font-size: 28rpx;
|
||||
font-weight: 700;
|
||||
color: #F8FAFC;
|
||||
color: var(--text-primary);
|
||||
}
|
||||
.game-tag {
|
||||
font-size: 20rpx;
|
||||
background: rgba(99, 102, 241, 0.2);
|
||||
color: #818CF8;
|
||||
color: var(--color-brand-light);
|
||||
padding: 2rpx 10rpx;
|
||||
border-radius: 6rpx;
|
||||
}
|
||||
@@ -658,7 +658,7 @@ const handlePay = async () => {
|
||||
|
||||
.service-title {
|
||||
font-size: 24rpx;
|
||||
color: #94A3B8;
|
||||
color: var(--text-secondary);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -683,12 +683,12 @@ const handlePay = async () => {
|
||||
|
||||
.label-main {
|
||||
font-size: 28rpx;
|
||||
color: #F8FAFC;
|
||||
color: var(--text-primary);
|
||||
font-weight: 600;
|
||||
}
|
||||
.label-sub {
|
||||
font-size: 20rpx;
|
||||
color: #64748B;
|
||||
color: var(--text-muted);
|
||||
margin-top: 4rpx;
|
||||
}
|
||||
}
|
||||
@@ -696,7 +696,7 @@ const handlePay = async () => {
|
||||
.stepper-box {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
background: rgba(255, 255, 255, 0.04);
|
||||
background: var(--bg-surface-elevated);
|
||||
border-radius: 16rpx;
|
||||
padding: 6rpx;
|
||||
|
||||
@@ -705,7 +705,7 @@ const handlePay = async () => {
|
||||
height: 72rpx;
|
||||
line-height: 68rpx;
|
||||
padding: 0;
|
||||
background: #1E2942;
|
||||
background: var(--bg-surface-elevated);
|
||||
color: #FFF;
|
||||
font-size: 32rpx;
|
||||
border-radius: 14rpx;
|
||||
@@ -720,7 +720,7 @@ const handlePay = async () => {
|
||||
|
||||
.step-val {
|
||||
font-size: 30rpx;
|
||||
color: #F8FAFC;
|
||||
color: var(--text-primary);
|
||||
font-weight: 600;
|
||||
margin: 0 24rpx;
|
||||
font-variant-numeric: tabular-nums;
|
||||
@@ -731,7 +731,7 @@ const handlePay = async () => {
|
||||
.section-title {
|
||||
font-size: 26rpx;
|
||||
font-weight: 600;
|
||||
color: #F8FAFC;
|
||||
color: var(--text-primary);
|
||||
margin-bottom: 18rpx;
|
||||
}
|
||||
|
||||
@@ -741,18 +741,18 @@ const handlePay = async () => {
|
||||
|
||||
.time-tab {
|
||||
flex: 1;
|
||||
background: rgba(255, 255, 255, 0.03);
|
||||
border: 1px solid rgba(255, 255, 255, 0.08);
|
||||
background: var(--bg-surface-elevated);
|
||||
border: 1px solid var(--border-subtle);
|
||||
border-radius: 16rpx;
|
||||
padding: 20rpx;
|
||||
text-align: center;
|
||||
|
||||
&.active {
|
||||
background: rgba(99, 102, 241, 0.15);
|
||||
border-color: #6366F1;
|
||||
border-color: var(--color-brand);
|
||||
|
||||
.tab-t {
|
||||
color: #818CF8;
|
||||
color: var(--color-brand-light);
|
||||
font-weight: 700;
|
||||
}
|
||||
}
|
||||
@@ -770,13 +770,13 @@ const handlePay = async () => {
|
||||
}
|
||||
.tab-t {
|
||||
font-size: 26rpx;
|
||||
color: #CBD5E1;
|
||||
color: var(--text-secondary);
|
||||
}
|
||||
}
|
||||
|
||||
.tab-d {
|
||||
font-size: 20rpx;
|
||||
color: #64748B;
|
||||
color: var(--text-muted);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -786,11 +786,11 @@ const handlePay = async () => {
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
padding-bottom: 20rpx;
|
||||
border-bottom: 1px solid rgba(255, 255, 255, 0.05);
|
||||
border-bottom: 1px solid var(--border-subtle);
|
||||
|
||||
.cell-label {
|
||||
font-size: 26rpx;
|
||||
color: #CBD5E1;
|
||||
color: var(--text-secondary);
|
||||
}
|
||||
|
||||
.cell-right {
|
||||
@@ -805,7 +805,7 @@ const handlePay = async () => {
|
||||
}
|
||||
.arrow {
|
||||
font-size: 24rpx;
|
||||
color: #64748B;
|
||||
color: var(--text-muted);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -817,17 +817,17 @@ const handlePay = async () => {
|
||||
|
||||
.cell-label {
|
||||
font-size: 24rpx;
|
||||
color: #64748B;
|
||||
color: var(--text-muted);
|
||||
width: 220rpx;
|
||||
}
|
||||
|
||||
.remark-input {
|
||||
flex: 1;
|
||||
font-size: 24rpx;
|
||||
color: #F8FAFC;
|
||||
color: var(--text-primary);
|
||||
}
|
||||
.ph {
|
||||
color: #475569;
|
||||
color: var(--text-muted);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -835,11 +835,11 @@ const handlePay = async () => {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding: 20rpx 0;
|
||||
border-top: 1px solid rgba(255, 255, 255, 0.05);
|
||||
border-top: 1px solid var(--border-subtle);
|
||||
|
||||
.cell-label {
|
||||
font-size: 24rpx;
|
||||
color: #64748B;
|
||||
color: var(--text-muted);
|
||||
width: 220rpx;
|
||||
}
|
||||
|
||||
@@ -849,9 +849,9 @@ const handlePay = async () => {
|
||||
|
||||
.expense-pill {
|
||||
font-size: 22rpx;
|
||||
color: #94A3B8;
|
||||
background: rgba(255, 255, 255, 0.05);
|
||||
border: 1px solid rgba(255, 255, 255, 0.1);
|
||||
color: var(--text-secondary);
|
||||
background: var(--bg-surface-elevated);
|
||||
border: 1px solid var(--border-subtle);
|
||||
padding: 6rpx 16rpx;
|
||||
border-radius: 12rpx;
|
||||
|
||||
@@ -895,10 +895,10 @@ const handlePay = async () => {
|
||||
margin-bottom: 12rpx;
|
||||
|
||||
.fee-k {
|
||||
color: #94A3B8;
|
||||
color: var(--text-secondary);
|
||||
}
|
||||
.fee-v {
|
||||
color: #E2E8F0;
|
||||
color: var(--text-primary);
|
||||
font-weight: 500;
|
||||
|
||||
&.green {
|
||||
@@ -934,20 +934,20 @@ const handlePay = async () => {
|
||||
}
|
||||
|
||||
.muted {
|
||||
color: #64748B;
|
||||
color: var(--text-muted);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&.total-row {
|
||||
border-top: 1px solid rgba(255, 255, 255, 0.06);
|
||||
border-top: 1px solid var(--border-subtle);
|
||||
padding-top: 16rpx;
|
||||
margin-top: 16rpx;
|
||||
margin-bottom: 0;
|
||||
|
||||
.fee-k {
|
||||
font-size: 26rpx;
|
||||
color: #F8FAFC;
|
||||
color: var(--text-primary);
|
||||
font-weight: 600;
|
||||
}
|
||||
.pay-val {
|
||||
@@ -967,9 +967,9 @@ const handlePay = async () => {
|
||||
height: calc(120rpx + env(safe-area-inset-bottom));
|
||||
padding: 0 32rpx env(safe-area-inset-bottom);
|
||||
box-sizing: border-box;
|
||||
background-color: rgba(21, 29, 48, 0.95);
|
||||
background-color: var(--bg-surface-glass, rgba(21, 29, 48, 0.95));
|
||||
backdrop-filter: blur(12px);
|
||||
border-top: 1px solid rgba(255, 255, 255, 0.08);
|
||||
border-top: 1px solid var(--border-subtle);
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
@@ -983,7 +983,7 @@ const handlePay = async () => {
|
||||
|
||||
.amount-label {
|
||||
font-size: 24rpx;
|
||||
color: #94A3B8;
|
||||
color: var(--text-secondary);
|
||||
}
|
||||
.amount-num {
|
||||
font-size: 40rpx;
|
||||
@@ -1006,7 +1006,7 @@ const handlePay = async () => {
|
||||
margin: 0;
|
||||
|
||||
&.btn-balance {
|
||||
background: linear-gradient(135deg, #6366F1 0%, #4F46E5 100%);
|
||||
background: var(--color-brand-gradient, linear-gradient(135deg, #6366F1 0%, #8B5CF6 100%));
|
||||
box-shadow: 0 4rpx 20rpx rgba(99, 102, 241, 0.35);
|
||||
}
|
||||
}
|
||||
@@ -1024,8 +1024,8 @@ const handlePay = async () => {
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
padding: 20rpx 24rpx;
|
||||
background: rgba(255, 255, 255, 0.03);
|
||||
border: 1px solid rgba(255, 255, 255, 0.08);
|
||||
background: var(--bg-surface-elevated);
|
||||
border: 1px solid var(--border-subtle);
|
||||
border-radius: 16rpx;
|
||||
transition: all 0.2s ease;
|
||||
|
||||
@@ -1054,7 +1054,7 @@ const handlePay = async () => {
|
||||
.method-title {
|
||||
font-size: 28rpx;
|
||||
font-weight: 600;
|
||||
color: #F8FAFC;
|
||||
color: var(--text-primary);
|
||||
}
|
||||
|
||||
.balance-tag {
|
||||
@@ -1073,7 +1073,7 @@ const handlePay = async () => {
|
||||
|
||||
.method-desc {
|
||||
font-size: 22rpx;
|
||||
color: #64748B;
|
||||
color: var(--text-muted);
|
||||
|
||||
&.warn-tip {
|
||||
color: #EF4444;
|
||||
@@ -1086,15 +1086,15 @@ const handlePay = async () => {
|
||||
width: 36rpx;
|
||||
height: 36rpx;
|
||||
border-radius: 50%;
|
||||
border: 2px solid #475569;
|
||||
border: 2px solid var(--text-muted);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
transition: all 0.2s;
|
||||
|
||||
&.checked {
|
||||
border-color: #6366F1;
|
||||
background: #6366F1;
|
||||
border-color: var(--color-brand);
|
||||
background: var(--color-brand);
|
||||
|
||||
&::after {
|
||||
content: '';
|
||||
@@ -1107,7 +1107,7 @@ const handlePay = async () => {
|
||||
}
|
||||
|
||||
&.active {
|
||||
border-color: #6366F1;
|
||||
border-color: var(--color-brand);
|
||||
background: rgba(99, 102, 241, 0.08);
|
||||
}
|
||||
|
||||
@@ -1135,11 +1135,11 @@ const handlePay = async () => {
|
||||
.coupon-modal-content {
|
||||
width: 100%;
|
||||
max-width: 600px;
|
||||
background: #151D30;
|
||||
background: var(--bg-surface);
|
||||
border-top-left-radius: 36rpx;
|
||||
border-top-right-radius: 36rpx;
|
||||
padding: 36rpx 36rpx calc(36rpx + env(safe-area-inset-bottom));
|
||||
border: 1px solid rgba(255, 255, 255, 0.1);
|
||||
border: 1px solid var(--border-subtle);
|
||||
border-bottom: none;
|
||||
box-shadow: 0 -8rpx 32rpx rgba(0, 0, 0, 0.5);
|
||||
animation: slideUp 0.25s ease-out;
|
||||
@@ -1153,7 +1153,7 @@ const handlePay = async () => {
|
||||
.modal-title {
|
||||
font-size: 32rpx;
|
||||
font-weight: 700;
|
||||
color: #F8FAFC;
|
||||
color: var(--text-primary);
|
||||
}
|
||||
|
||||
.modal-close {
|
||||
@@ -1178,8 +1178,8 @@ const handlePay = async () => {
|
||||
.coupon-card {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
background: rgba(255, 255, 255, 0.04);
|
||||
border: 1px solid rgba(255, 255, 255, 0.08);
|
||||
background: var(--bg-surface-elevated);
|
||||
border: 1px solid var(--border-subtle);
|
||||
border-radius: 20rpx;
|
||||
padding: 24rpx;
|
||||
transition: all 0.2s;
|
||||
@@ -1211,18 +1211,18 @@ const handlePay = async () => {
|
||||
.coupon-card-title {
|
||||
font-size: 28rpx;
|
||||
font-weight: 600;
|
||||
color: #F8FAFC;
|
||||
color: var(--text-primary);
|
||||
}
|
||||
.coupon-card-desc {
|
||||
font-size: 22rpx;
|
||||
color: #94A3B8;
|
||||
color: var(--text-secondary);
|
||||
}
|
||||
}
|
||||
|
||||
.coupon-right {
|
||||
.coupon-tag {
|
||||
font-size: 22rpx;
|
||||
color: #818CF8;
|
||||
color: var(--color-brand-light);
|
||||
background: rgba(99, 102, 241, 0.15);
|
||||
padding: 6rpx 16rpx;
|
||||
border-radius: 12rpx;
|
||||
|
||||
在新工单中引用
屏蔽一个用户