refactor(order): migrate hardcoded colors, spacing, and mock data to design tokens
This commit is contained in:
@@ -226,26 +226,26 @@ $bar-height: 120rpx;
|
|||||||
|
|
||||||
.page {
|
.page {
|
||||||
min-height: 100vh;
|
min-height: 100vh;
|
||||||
background: #f7f8fa;
|
background: $color-background;
|
||||||
padding: 24rpx;
|
padding: $spacing-3;
|
||||||
padding-bottom: calc(#{$bar-height} + env(safe-area-inset-bottom) + 24rpx);
|
padding-bottom: calc(#{$bar-height} + env(safe-area-inset-bottom) + #{$spacing-3});
|
||||||
font-family: $font-family-body;
|
font-family: $font-family-body;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ===== 模块1:状态卡片 ===== */
|
/* ===== 模块1:状态卡片 ===== */
|
||||||
.status-card {
|
.status-card {
|
||||||
background: #ffffff;
|
background: $color-card;
|
||||||
border-radius: $radius-lg;
|
border-radius: $radius-lg;
|
||||||
padding: 48rpx 32rpx;
|
padding: $spacing-6 $spacing-4;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
box-shadow: 0 4rpx 16rpx rgba(0, 0, 0, 0.04);
|
box-shadow: 0 4rpx 16rpx rgba(0, 0, 0, 0.04);
|
||||||
|
|
||||||
&--pending { border-top: 6rpx solid #ff9500; }
|
&--pending { border-top: 6rpx solid $color-status-pending; }
|
||||||
&--activated { border-top: 6rpx solid #00b42a; }
|
&--activated { border-top: 6rpx solid $color-status-success; }
|
||||||
&--refunded { border-top: 6rpx solid #86909c; }
|
&--refunded { border-top: 6rpx solid $color-status-cancel; }
|
||||||
&--expired { border-top: 6rpx solid #f53f3f; }
|
&--expired { border-top: 6rpx solid $uv-error; }
|
||||||
}
|
}
|
||||||
|
|
||||||
.status-icon-wrap {
|
.status-icon-wrap {
|
||||||
@@ -255,7 +255,7 @@ $bar-height: 120rpx;
|
|||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
margin-bottom: 20rpx;
|
margin-bottom: $spacing-3;
|
||||||
}
|
}
|
||||||
|
|
||||||
.status-card--pending .status-icon-wrap { background: rgba(255, 149, 0, 0.1); }
|
.status-card--pending .status-icon-wrap { background: rgba(255, 149, 0, 0.1); }
|
||||||
@@ -268,7 +268,7 @@ $bar-height: 120rpx;
|
|||||||
height: 36rpx;
|
height: 36rpx;
|
||||||
|
|
||||||
&--pending {
|
&--pending {
|
||||||
border: 4rpx solid #ff9500;
|
border: 4rpx solid $color-status-pending;
|
||||||
border-radius: 50%;
|
border-radius: 50%;
|
||||||
position: relative;
|
position: relative;
|
||||||
&::after {
|
&::after {
|
||||||
@@ -278,13 +278,13 @@ $bar-height: 120rpx;
|
|||||||
left: 50%;
|
left: 50%;
|
||||||
width: 4rpx;
|
width: 4rpx;
|
||||||
height: 16rpx;
|
height: 16rpx;
|
||||||
background: #ff9500;
|
background: $color-status-pending;
|
||||||
transform: translate(-50%, -70%);
|
transform: translate(-50%, -70%);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
&--activated {
|
&--activated {
|
||||||
border: 4rpx solid #00b42a;
|
border: 4rpx solid $color-status-success;
|
||||||
border-radius: 50%;
|
border-radius: 50%;
|
||||||
position: relative;
|
position: relative;
|
||||||
&::after {
|
&::after {
|
||||||
@@ -294,8 +294,8 @@ $bar-height: 120rpx;
|
|||||||
left: 50%;
|
left: 50%;
|
||||||
width: 16rpx;
|
width: 16rpx;
|
||||||
height: 8rpx;
|
height: 8rpx;
|
||||||
border-left: 4rpx solid #00b42a;
|
border-left: 4rpx solid $color-status-success;
|
||||||
border-bottom: 4rpx solid #00b42a;
|
border-bottom: 4rpx solid $color-status-success;
|
||||||
transform: translate(-50%, -50%) rotate(-45deg);
|
transform: translate(-50%, -50%) rotate(-45deg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -309,7 +309,7 @@ $bar-height: 120rpx;
|
|||||||
left: 50%;
|
left: 50%;
|
||||||
width: 28rpx;
|
width: 28rpx;
|
||||||
height: 4rpx;
|
height: 4rpx;
|
||||||
background: #86909c;
|
background: $color-status-cancel;
|
||||||
border-radius: 2rpx;
|
border-radius: 2rpx;
|
||||||
}
|
}
|
||||||
&::before { transform: translate(-50%, -50%) rotate(45deg); }
|
&::before { transform: translate(-50%, -50%) rotate(45deg); }
|
||||||
@@ -317,7 +317,7 @@ $bar-height: 120rpx;
|
|||||||
}
|
}
|
||||||
|
|
||||||
&--expired {
|
&--expired {
|
||||||
border: 4rpx solid #f53f3f;
|
border: 4rpx solid $uv-error;
|
||||||
border-radius: 50%;
|
border-radius: 50%;
|
||||||
position: relative;
|
position: relative;
|
||||||
&::before, &::after {
|
&::before, &::after {
|
||||||
@@ -327,7 +327,7 @@ $bar-height: 120rpx;
|
|||||||
left: 50%;
|
left: 50%;
|
||||||
width: 20rpx;
|
width: 20rpx;
|
||||||
height: 4rpx;
|
height: 4rpx;
|
||||||
background: #f53f3f;
|
background: $uv-error;
|
||||||
border-radius: 2rpx;
|
border-radius: 2rpx;
|
||||||
}
|
}
|
||||||
&::before { transform: translate(-50%, -50%) rotate(45deg); }
|
&::before { transform: translate(-50%, -50%) rotate(45deg); }
|
||||||
@@ -337,67 +337,67 @@ $bar-height: 120rpx;
|
|||||||
|
|
||||||
.status-title {
|
.status-title {
|
||||||
font-family: $font-family-body;
|
font-family: $font-family-body;
|
||||||
font-size: 38rpx;
|
font-size: $font-size-title;
|
||||||
font-weight: 700;
|
font-weight: $font-weight-bold;
|
||||||
color: $uv-main-color;
|
color: $uv-main-color;
|
||||||
margin-bottom: 12rpx;
|
margin-bottom: $spacing-2;
|
||||||
}
|
}
|
||||||
|
|
||||||
.status-desc {
|
.status-desc {
|
||||||
font-family: $font-family-body;
|
font-family: $font-family-body;
|
||||||
font-size: 26rpx;
|
font-size: $font-size-sm;
|
||||||
color: $uv-tips-color;
|
color: $uv-tips-color;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ===== 模块2:商品信息卡片 ===== */
|
/* ===== 模块2:商品信息卡片 ===== */
|
||||||
.info-card {
|
.info-card {
|
||||||
background: #ffffff;
|
background: $color-card;
|
||||||
border-radius: $radius-lg;
|
border-radius: $radius-lg;
|
||||||
padding: 32rpx;
|
padding: $spacing-4;
|
||||||
margin-top: 24rpx;
|
margin-top: $spacing-3;
|
||||||
box-shadow: 0 4rpx 16rpx rgba(0, 0, 0, 0.04);
|
box-shadow: 0 4rpx 16rpx rgba(0, 0, 0, 0.04);
|
||||||
}
|
}
|
||||||
|
|
||||||
.product-name {
|
.product-name {
|
||||||
display: block;
|
display: block;
|
||||||
font-family: $font-family-body;
|
font-family: $font-family-body;
|
||||||
font-size: 28rpx;
|
font-size: $font-size-base;
|
||||||
font-weight: 700;
|
font-weight: $font-weight-bold;
|
||||||
color: $uv-main-color;
|
color: $uv-main-color;
|
||||||
margin-bottom: 12rpx;
|
margin-bottom: $spacing-2;
|
||||||
}
|
}
|
||||||
|
|
||||||
.price-row {
|
.price-row {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: baseline;
|
align-items: baseline;
|
||||||
margin-bottom: 16rpx;
|
margin-bottom: $spacing-2;
|
||||||
}
|
}
|
||||||
|
|
||||||
.price-current {
|
.price-current {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: baseline;
|
align-items: baseline;
|
||||||
margin-right: 16rpx;
|
margin-right: $spacing-2;
|
||||||
}
|
}
|
||||||
|
|
||||||
.price-symbol {
|
.price-symbol {
|
||||||
font-family: $font-family-body;
|
font-family: $font-family-body;
|
||||||
font-size: 24rpx;
|
font-size: $font-size-sm;
|
||||||
font-weight: 700;
|
font-weight: $font-weight-bold;
|
||||||
color: #e53935;
|
color: $color-price;
|
||||||
}
|
}
|
||||||
|
|
||||||
.price-value {
|
.price-value {
|
||||||
font-family: $font-family-body;
|
font-family: $font-family-body;
|
||||||
font-size: 38rpx;
|
font-size: $font-size-title;
|
||||||
font-weight: 700;
|
font-weight: $font-weight-bold;
|
||||||
color: #e53935;
|
color: $color-price;
|
||||||
line-height: 1;
|
line-height: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
.product-desc {
|
.product-desc {
|
||||||
font-family: $font-family-body;
|
font-family: $font-family-body;
|
||||||
font-size: 26rpx;
|
font-size: $font-size-sm;
|
||||||
color: $uv-tips-color;
|
color: $uv-tips-color;
|
||||||
line-height: 1.6;
|
line-height: 1.6;
|
||||||
}
|
}
|
||||||
@@ -407,8 +407,8 @@ $bar-height: 120rpx;
|
|||||||
display: flex;
|
display: flex;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
padding: 20rpx 0;
|
padding: $spacing-3 0;
|
||||||
border-bottom: 1rpx solid $uv-border-color;
|
border-bottom: $border-width solid $uv-border-color;
|
||||||
|
|
||||||
&--last {
|
&--last {
|
||||||
border-bottom: none;
|
border-bottom: none;
|
||||||
@@ -417,37 +417,37 @@ $bar-height: 120rpx;
|
|||||||
|
|
||||||
.detail-label {
|
.detail-label {
|
||||||
font-family: $font-family-body;
|
font-family: $font-family-body;
|
||||||
font-size: 26rpx;
|
font-size: $font-size-sm;
|
||||||
color: $uv-main-color;
|
color: $uv-main-color;
|
||||||
flex-shrink: 0;
|
flex-shrink: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.detail-value {
|
.detail-value {
|
||||||
font-family: $font-family-body;
|
font-family: $font-family-body;
|
||||||
font-size: 26rpx;
|
font-size: $font-size-sm;
|
||||||
color: $uv-content-color;
|
color: $uv-content-color;
|
||||||
text-align: right;
|
text-align: right;
|
||||||
|
|
||||||
&--code {
|
&--code {
|
||||||
font-weight: 700;
|
font-weight: $font-weight-bold;
|
||||||
letter-spacing: 4rpx;
|
letter-spacing: 4rpx;
|
||||||
}
|
}
|
||||||
|
|
||||||
&--price {
|
&--price {
|
||||||
font-weight: 700;
|
font-weight: $font-weight-bold;
|
||||||
color: #e53935;
|
color: $color-price;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.detail-value-row {
|
.detail-value-row {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
gap: 16rpx;
|
gap: $spacing-2;
|
||||||
}
|
}
|
||||||
|
|
||||||
.copy-btn {
|
.copy-btn {
|
||||||
padding: 4rpx 16rpx;
|
padding: 4rpx $spacing-2;
|
||||||
border-radius: 8rpx;
|
border-radius: $radius-sm;
|
||||||
background: rgba(60, 156, 255, 0.08);
|
background: rgba(60, 156, 255, 0.08);
|
||||||
|
|
||||||
&:active {
|
&:active {
|
||||||
@@ -457,36 +457,36 @@ $bar-height: 120rpx;
|
|||||||
|
|
||||||
.copy-btn__text {
|
.copy-btn__text {
|
||||||
font-family: $font-family-body;
|
font-family: $font-family-body;
|
||||||
font-size: 24rpx;
|
font-size: $font-size-sm;
|
||||||
color: $uv-primary;
|
color: $uv-primary;
|
||||||
font-weight: 500;
|
font-weight: $font-weight-medium;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ===== 模块4:使用提示 ===== */
|
/* ===== 模块4:使用提示 ===== */
|
||||||
.tips-card {
|
.tips-card {
|
||||||
background: rgba(60, 156, 255, 0.04);
|
background: rgba(60, 156, 255, 0.04);
|
||||||
border-radius: $radius-lg;
|
border-radius: $radius-lg;
|
||||||
padding: 32rpx;
|
padding: $spacing-4;
|
||||||
margin-top: 24rpx;
|
margin-top: $spacing-3;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tips-title {
|
.tips-title {
|
||||||
display: block;
|
display: block;
|
||||||
font-family: $font-family-body;
|
font-family: $font-family-body;
|
||||||
font-size: 26rpx;
|
font-size: $font-size-sm;
|
||||||
font-weight: 700;
|
font-weight: $font-weight-bold;
|
||||||
color: $uv-main-color;
|
color: $uv-main-color;
|
||||||
margin-bottom: 16rpx;
|
margin-bottom: $spacing-2;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tips-list {
|
.tips-list {
|
||||||
margin-bottom: 20rpx;
|
margin-bottom: $spacing-3;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tips-item {
|
.tips-item {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: flex-start;
|
align-items: flex-start;
|
||||||
margin-bottom: 12rpx;
|
margin-bottom: $spacing-2;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tips-dot {
|
.tips-dot {
|
||||||
@@ -496,12 +496,12 @@ $bar-height: 120rpx;
|
|||||||
background: $uv-primary;
|
background: $uv-primary;
|
||||||
flex-shrink: 0;
|
flex-shrink: 0;
|
||||||
margin-top: 14rpx;
|
margin-top: 14rpx;
|
||||||
margin-right: 12rpx;
|
margin-right: $spacing-2;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tips-text {
|
.tips-text {
|
||||||
font-family: $font-family-body;
|
font-family: $font-family-body;
|
||||||
font-size: 24rpx;
|
font-size: $font-size-sm;
|
||||||
color: $uv-tips-color;
|
color: $uv-tips-color;
|
||||||
line-height: 1.6;
|
line-height: 1.6;
|
||||||
}
|
}
|
||||||
@@ -514,14 +514,14 @@ $bar-height: 120rpx;
|
|||||||
|
|
||||||
.tips-link__text {
|
.tips-link__text {
|
||||||
font-family: $font-family-body;
|
font-family: $font-family-body;
|
||||||
font-size: 24rpx;
|
font-size: $font-size-sm;
|
||||||
color: $uv-primary;
|
color: $uv-primary;
|
||||||
font-weight: 500;
|
font-weight: $font-weight-medium;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ===== 底部安全区 ===== */
|
/* ===== 底部安全区 ===== */
|
||||||
.safe-bottom {
|
.safe-bottom {
|
||||||
height: 24rpx;
|
height: $spacing-3;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ===== 模块5:底部操作栏 ===== */
|
/* ===== 模块5:底部操作栏 ===== */
|
||||||
@@ -533,19 +533,19 @@ $bar-height: 120rpx;
|
|||||||
width: 100%;
|
width: 100%;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
height: $bar-height;
|
height: $bar-height;
|
||||||
background: #ffffff;
|
background: $color-card;
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: flex-end;
|
justify-content: flex-end;
|
||||||
padding: 0 48rpx;
|
padding: 0 $spacing-6;
|
||||||
padding-bottom: env(safe-area-inset-bottom);
|
padding-bottom: env(safe-area-inset-bottom);
|
||||||
box-shadow: 0 -4rpx 16rpx rgba(0, 0, 0, 0.06);
|
box-shadow: 0 -4rpx 16rpx rgba(0, 0, 0, 0.06);
|
||||||
z-index: 100;
|
z-index: $z-sticky;
|
||||||
}
|
}
|
||||||
|
|
||||||
.bottom-bar__right {
|
.bottom-bar__right {
|
||||||
display: flex;
|
display: flex;
|
||||||
gap: 24rpx;
|
gap: $spacing-3;
|
||||||
}
|
}
|
||||||
|
|
||||||
.btn-action {
|
.btn-action {
|
||||||
@@ -555,7 +555,7 @@ $bar-height: 120rpx;
|
|||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
transition: all 0.15s ease;
|
transition: all $transition-fast;
|
||||||
|
|
||||||
&--primary {
|
&--primary {
|
||||||
background: $uv-primary;
|
background: $uv-primary;
|
||||||
@@ -570,22 +570,22 @@ $bar-height: 120rpx;
|
|||||||
|
|
||||||
&:active {
|
&:active {
|
||||||
transform: scale(0.97);
|
transform: scale(0.97);
|
||||||
background: #f5f5f5;
|
background: $uv-bg-color;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.btn-action__text {
|
.btn-action__text {
|
||||||
font-family: $font-family-body;
|
font-family: $font-family-body;
|
||||||
font-size: 26rpx;
|
font-size: $font-size-sm;
|
||||||
font-weight: 700;
|
font-weight: $font-weight-bold;
|
||||||
color: #ffffff;
|
color: #fff;
|
||||||
}
|
}
|
||||||
|
|
||||||
.btn-action__text--outline {
|
.btn-action__text--outline {
|
||||||
font-family: $font-family-body;
|
font-family: $font-family-body;
|
||||||
font-size: 26rpx;
|
font-size: $font-size-sm;
|
||||||
font-weight: 500;
|
font-weight: $font-weight-medium;
|
||||||
color: $uv-tips-color;
|
color: $uv-tips-color;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -117,22 +117,10 @@
|
|||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ref, computed } from 'vue'
|
import { ref, computed } from 'vue'
|
||||||
|
import { mockOrders, type OrderItem } from '@/mock/order'
|
||||||
|
|
||||||
type OrderStatus = 'pending' | 'activated' | 'refunded' | 'expired'
|
type OrderStatus = 'pending' | 'activated' | 'refunded' | 'expired'
|
||||||
|
|
||||||
interface OrderItem {
|
|
||||||
id: string
|
|
||||||
status: OrderStatus
|
|
||||||
createTime: string
|
|
||||||
payAmount: number
|
|
||||||
originalPrice: number
|
|
||||||
cardType: string
|
|
||||||
redeemCode: string
|
|
||||||
payChannel: string
|
|
||||||
activatedTime?: string
|
|
||||||
refundedTime?: string
|
|
||||||
}
|
|
||||||
|
|
||||||
const tabs = [
|
const tabs = [
|
||||||
{ label: '全部', value: '' },
|
{ label: '全部', value: '' },
|
||||||
{ label: '待绑定', value: 'pending' },
|
{ label: '待绑定', value: 'pending' },
|
||||||
@@ -148,14 +136,7 @@ const currentPage = ref(1)
|
|||||||
const refundPopup = ref<any>(null)
|
const refundPopup = ref<any>(null)
|
||||||
const refundOrderId = ref('')
|
const refundOrderId = ref('')
|
||||||
|
|
||||||
const orders = ref<OrderItem[]>([
|
const orders = ref<OrderItem[]>(mockOrders)
|
||||||
{ id: 'ORD20260625001', status: 'pending', createTime: '2026-06-25 10:32', payAmount: 198, originalPrice: 3800, cardType: '超级玩家卡', redeemCode: 'CJ0000012398', payChannel: '微信支付' },
|
|
||||||
{ id: 'ORD20260624002', status: 'activated', createTime: '2026-06-24 14:18', payAmount: 198, originalPrice: 3800, cardType: '超级玩家卡', redeemCode: 'CJ0000012399', payChannel: '微信支付', activatedTime: '2026-06-24 15:00' },
|
|
||||||
{ id: 'ORD20260623003', status: 'pending', createTime: '2026-06-23 09:45', payAmount: 198, originalPrice: 3800, cardType: '超级玩家卡', redeemCode: 'CJ0000012400', payChannel: '微信支付' },
|
|
||||||
{ id: 'ORD20260620004', status: 'refunded', createTime: '2026-06-20 16:22', payAmount: 198, originalPrice: 3800, cardType: '超级玩家卡', redeemCode: 'CJ0000012401', payChannel: '微信支付', refundedTime: '2026-06-21 10:15' },
|
|
||||||
{ id: 'ORD20260618005', status: 'activated', createTime: '2026-06-18 11:08', payAmount: 198, originalPrice: 3800, cardType: '超级玩家卡', redeemCode: 'CJ0000012402', payChannel: '微信支付', activatedTime: '2026-06-18 12:30' },
|
|
||||||
{ id: 'ORD20260510007', status: 'activated', createTime: '2026-05-10 13:40', payAmount: 198, originalPrice: 3800, cardType: '超级玩家卡', redeemCode: 'CJ0000012403', payChannel: '微信支付', activatedTime: '2026-05-10 14:20' },
|
|
||||||
])
|
|
||||||
|
|
||||||
const filteredOrders = computed(() => {
|
const filteredOrders = computed(() => {
|
||||||
if (!activeTab.value) return orders.value
|
if (!activeTab.value) return orders.value
|
||||||
@@ -232,14 +213,14 @@ function goBuy() {
|
|||||||
|
|
||||||
.page {
|
.page {
|
||||||
min-height: 100vh;
|
min-height: 100vh;
|
||||||
background: #f7f8fa;
|
background: $color-background;
|
||||||
font-family: $font-family-body;
|
font-family: $font-family-body;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ===== Tab Bar ===== */
|
/* ===== Tab Bar ===== */
|
||||||
.tab-bar {
|
.tab-bar {
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
background: #ffffff;
|
background: $color-card;
|
||||||
box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.04);
|
box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.04);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -252,20 +233,20 @@ function goBuy() {
|
|||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
padding: 24rpx 0;
|
padding: $spacing-3 0;
|
||||||
position: relative;
|
position: relative;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tab-text {
|
.tab-text {
|
||||||
font-family: $font-family-body;
|
font-family: $font-family-body;
|
||||||
font-size: 26rpx;
|
font-size: $font-size-sm;
|
||||||
font-weight: 500;
|
font-weight: $font-weight-medium;
|
||||||
color: $uv-tips-color;
|
color: $uv-tips-color;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tab-item--active .tab-text {
|
.tab-item--active .tab-text {
|
||||||
color: $uv-primary;
|
color: $uv-primary;
|
||||||
font-weight: 700;
|
font-weight: $font-weight-bold;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tab-underline {
|
.tab-underline {
|
||||||
@@ -273,7 +254,7 @@ function goBuy() {
|
|||||||
height: 4rpx;
|
height: 4rpx;
|
||||||
border-radius: 2rpx;
|
border-radius: 2rpx;
|
||||||
background: $uv-primary;
|
background: $uv-primary;
|
||||||
margin-top: 8rpx;
|
margin-top: $spacing-1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ===== Order List ===== */
|
/* ===== Order List ===== */
|
||||||
@@ -282,16 +263,16 @@ function goBuy() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.order-cards {
|
.order-cards {
|
||||||
padding: 24rpx;
|
padding: $spacing-3;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ===== Order Card ===== */
|
/* ===== Order Card ===== */
|
||||||
.order-card {
|
.order-card {
|
||||||
background: #ffffff;
|
background: $color-card;
|
||||||
border-radius: $radius-lg;
|
border-radius: $radius-lg;
|
||||||
box-shadow: 0 4rpx 16rpx rgba(0, 0, 0, 0.04);
|
box-shadow: 0 4rpx 16rpx rgba(0, 0, 0, 0.04);
|
||||||
padding: 32rpx;
|
padding: $spacing-4;
|
||||||
margin-bottom: 24rpx;
|
margin-bottom: $spacing-3;
|
||||||
|
|
||||||
&:active {
|
&:active {
|
||||||
transform: scale(0.99);
|
transform: scale(0.99);
|
||||||
@@ -302,19 +283,19 @@ function goBuy() {
|
|||||||
display: flex;
|
display: flex;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
margin-bottom: 20rpx;
|
margin-bottom: $spacing-3;
|
||||||
}
|
}
|
||||||
|
|
||||||
.order-no {
|
.order-no {
|
||||||
font-family: $font-family-body;
|
font-family: $font-family-body;
|
||||||
font-size: 22rpx;
|
font-size: $font-size-xs;
|
||||||
color: $uv-placeholder-color;
|
color: $uv-placeholder-color;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Status Tags */
|
/* Status Tags */
|
||||||
.status-tag {
|
.status-tag {
|
||||||
padding: 4rpx 16rpx;
|
padding: 4rpx $spacing-2;
|
||||||
border-radius: 8rpx;
|
border-radius: $radius-sm;
|
||||||
|
|
||||||
&--pending {
|
&--pending {
|
||||||
background: rgba(255, 149, 0, 0.1);
|
background: rgba(255, 149, 0, 0.1);
|
||||||
@@ -335,18 +316,18 @@ function goBuy() {
|
|||||||
|
|
||||||
.status-tag__text {
|
.status-tag__text {
|
||||||
font-family: $font-family-body;
|
font-family: $font-family-body;
|
||||||
font-size: 22rpx;
|
font-size: $font-size-xs;
|
||||||
font-weight: 500;
|
font-weight: $font-weight-medium;
|
||||||
}
|
}
|
||||||
|
|
||||||
.status-tag--pending .status-tag__text { color: #ff9500; }
|
.status-tag--pending .status-tag__text { color: $color-status-pending; }
|
||||||
.status-tag--activated .status-tag__text { color: #00b42a; }
|
.status-tag--activated .status-tag__text { color: $color-status-success; }
|
||||||
.status-tag--refunded .status-tag__text { color: #86909c; }
|
.status-tag--refunded .status-tag__text { color: $color-status-cancel; }
|
||||||
.status-tag--expired .status-tag__text { color: #f53f3f; }
|
.status-tag--expired .status-tag__text { color: $uv-error; }
|
||||||
|
|
||||||
/* Product Info */
|
/* Product Info */
|
||||||
.card-product {
|
.card-product {
|
||||||
margin-bottom: 20rpx;
|
margin-bottom: $spacing-3;
|
||||||
}
|
}
|
||||||
|
|
||||||
.product-name-row {
|
.product-name-row {
|
||||||
@@ -357,8 +338,8 @@ function goBuy() {
|
|||||||
|
|
||||||
.product-name {
|
.product-name {
|
||||||
font-family: $font-family-body;
|
font-family: $font-family-body;
|
||||||
font-size: 28rpx;
|
font-size: $font-size-base;
|
||||||
font-weight: 500;
|
font-weight: $font-weight-medium;
|
||||||
color: $uv-main-color;
|
color: $uv-main-color;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -369,16 +350,16 @@ function goBuy() {
|
|||||||
|
|
||||||
.price-symbol {
|
.price-symbol {
|
||||||
font-family: $font-family-body;
|
font-family: $font-family-body;
|
||||||
font-size: 24rpx;
|
font-size: $font-size-sm;
|
||||||
font-weight: 700;
|
font-weight: $font-weight-bold;
|
||||||
color: #e53935;
|
color: $color-price;
|
||||||
}
|
}
|
||||||
|
|
||||||
.price-value {
|
.price-value {
|
||||||
font-family: $font-family-body;
|
font-family: $font-family-body;
|
||||||
font-size: 38rpx;
|
font-size: $font-size-title;
|
||||||
font-weight: 700;
|
font-weight: $font-weight-bold;
|
||||||
color: #e53935;
|
color: $color-price;
|
||||||
line-height: 1;
|
line-height: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -386,20 +367,20 @@ function goBuy() {
|
|||||||
.card-info {
|
.card-info {
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
padding-bottom: 20rpx;
|
padding-bottom: $spacing-3;
|
||||||
border-bottom: 1rpx solid $uv-border-color;
|
border-bottom: $border-width solid $uv-border-color;
|
||||||
margin-bottom: 20rpx;
|
margin-bottom: $spacing-3;
|
||||||
}
|
}
|
||||||
|
|
||||||
.info-time {
|
.info-time {
|
||||||
font-family: $font-family-body;
|
font-family: $font-family-body;
|
||||||
font-size: 24rpx;
|
font-size: $font-size-sm;
|
||||||
color: $uv-tips-color;
|
color: $uv-tips-color;
|
||||||
}
|
}
|
||||||
|
|
||||||
.info-pay {
|
.info-pay {
|
||||||
font-family: $font-family-body;
|
font-family: $font-family-body;
|
||||||
font-size: 24rpx;
|
font-size: $font-size-sm;
|
||||||
color: $uv-tips-color;
|
color: $uv-tips-color;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -407,7 +388,7 @@ function goBuy() {
|
|||||||
.card-actions {
|
.card-actions {
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: flex-end;
|
justify-content: flex-end;
|
||||||
gap: 20rpx;
|
gap: $spacing-3;
|
||||||
}
|
}
|
||||||
|
|
||||||
.btn-outline {
|
.btn-outline {
|
||||||
@@ -418,18 +399,18 @@ function goBuy() {
|
|||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
transition: all 0.15s ease;
|
transition: all $transition-fast;
|
||||||
|
|
||||||
&:active {
|
&:active {
|
||||||
transform: scale(0.97);
|
transform: scale(0.97);
|
||||||
background: #f5f5f5;
|
background: $uv-bg-color;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.btn-outline__text {
|
.btn-outline__text {
|
||||||
font-family: $font-family-body;
|
font-family: $font-family-body;
|
||||||
font-size: 24rpx;
|
font-size: $font-size-sm;
|
||||||
font-weight: 500;
|
font-weight: $font-weight-medium;
|
||||||
color: $uv-tips-color;
|
color: $uv-tips-color;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -441,7 +422,7 @@ function goBuy() {
|
|||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
transition: all 0.15s ease;
|
transition: all $transition-fast;
|
||||||
|
|
||||||
&:active {
|
&:active {
|
||||||
transform: scale(0.97);
|
transform: scale(0.97);
|
||||||
@@ -450,9 +431,9 @@ function goBuy() {
|
|||||||
|
|
||||||
.btn-primary__text {
|
.btn-primary__text {
|
||||||
font-family: $font-family-body;
|
font-family: $font-family-body;
|
||||||
font-size: 24rpx;
|
font-size: $font-size-sm;
|
||||||
font-weight: 700;
|
font-weight: $font-weight-bold;
|
||||||
color: #ffffff;
|
color: #fff;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ===== Empty State ===== */
|
/* ===== Empty State ===== */
|
||||||
@@ -461,21 +442,21 @@ function goBuy() {
|
|||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
padding: 160rpx 48rpx 0;
|
padding: 160rpx $spacing-6 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.empty-icon {
|
.empty-icon {
|
||||||
width: 120rpx;
|
width: 120rpx;
|
||||||
height: 120rpx;
|
height: 120rpx;
|
||||||
position: relative;
|
position: relative;
|
||||||
margin-bottom: 32rpx;
|
margin-bottom: $spacing-4;
|
||||||
}
|
}
|
||||||
|
|
||||||
.empty-bag {
|
.empty-bag {
|
||||||
width: 80rpx;
|
width: 80rpx;
|
||||||
height: 64rpx;
|
height: 64rpx;
|
||||||
border: 4rpx solid #cccccc;
|
border: 4rpx solid $uv-disabled-color;
|
||||||
border-radius: 8rpx;
|
border-radius: $radius-sm;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
bottom: 0;
|
bottom: 0;
|
||||||
left: 50%;
|
left: 50%;
|
||||||
@@ -485,22 +466,22 @@ function goBuy() {
|
|||||||
.empty-bag__handle {
|
.empty-bag__handle {
|
||||||
width: 40rpx;
|
width: 40rpx;
|
||||||
height: 24rpx;
|
height: 24rpx;
|
||||||
border: 4rpx solid #cccccc;
|
border: 4rpx solid $uv-disabled-color;
|
||||||
border-bottom: none;
|
border-bottom: none;
|
||||||
border-radius: 20rpx 20rpx 0 0;
|
border-radius: 20rpx 20rpx 0 0;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 16rpx;
|
top: $spacing-2;
|
||||||
left: 50%;
|
left: 50%;
|
||||||
transform: translateX(-50%);
|
transform: translateX(-50%);
|
||||||
}
|
}
|
||||||
|
|
||||||
.empty-text {
|
.empty-text {
|
||||||
font-family: $font-family-body;
|
font-family: $font-family-body;
|
||||||
font-size: 26rpx;
|
font-size: $font-size-sm;
|
||||||
color: $uv-placeholder-color;
|
color: $uv-placeholder-color;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
line-height: 1.6;
|
line-height: 1.6;
|
||||||
margin-bottom: 32rpx;
|
margin-bottom: $spacing-4;
|
||||||
}
|
}
|
||||||
|
|
||||||
.empty-btn {
|
.empty-btn {
|
||||||
@@ -519,57 +500,57 @@ function goBuy() {
|
|||||||
|
|
||||||
.empty-btn__text {
|
.empty-btn__text {
|
||||||
font-family: $font-family-body;
|
font-family: $font-family-body;
|
||||||
font-size: 26rpx;
|
font-size: $font-size-sm;
|
||||||
font-weight: 700;
|
font-weight: $font-weight-bold;
|
||||||
color: #ffffff;
|
color: #fff;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ===== Load More ===== */
|
/* ===== Load More ===== */
|
||||||
.load-more {
|
.load-more {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
padding: 16rpx 0 120rpx;
|
padding: $spacing-2 0 120rpx;
|
||||||
}
|
}
|
||||||
|
|
||||||
.load-more__text {
|
.load-more__text {
|
||||||
font-family: $font-family-body;
|
font-family: $font-family-body;
|
||||||
font-size: 24rpx;
|
font-size: $font-size-sm;
|
||||||
color: $uv-placeholder-color;
|
color: $uv-placeholder-color;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ===== Refund Modal ===== */
|
/* ===== Refund Modal ===== */
|
||||||
.refund-modal {
|
.refund-modal {
|
||||||
width: 600rpx;
|
width: 600rpx;
|
||||||
background: #ffffff;
|
background: $color-card;
|
||||||
border-radius: $radius-lg;
|
border-radius: $radius-lg;
|
||||||
padding: 40rpx;
|
padding: $spacing-5;
|
||||||
}
|
}
|
||||||
|
|
||||||
.refund-title {
|
.refund-title {
|
||||||
display: block;
|
display: block;
|
||||||
font-family: $font-family-body;
|
font-family: $font-family-body;
|
||||||
font-size: 28rpx;
|
font-size: $font-size-base;
|
||||||
font-weight: 700;
|
font-weight: $font-weight-bold;
|
||||||
color: $uv-main-color;
|
color: $uv-main-color;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
margin-bottom: 24rpx;
|
margin-bottom: $spacing-3;
|
||||||
}
|
}
|
||||||
|
|
||||||
.refund-body {
|
.refund-body {
|
||||||
margin-bottom: 32rpx;
|
margin-bottom: $spacing-4;
|
||||||
}
|
}
|
||||||
|
|
||||||
.refund-text {
|
.refund-text {
|
||||||
display: block;
|
display: block;
|
||||||
font-family: $font-family-body;
|
font-family: $font-family-body;
|
||||||
font-size: 26rpx;
|
font-size: $font-size-sm;
|
||||||
color: $uv-content-color;
|
color: $uv-content-color;
|
||||||
line-height: 1.7;
|
line-height: 1.7;
|
||||||
margin-bottom: 12rpx;
|
margin-bottom: $spacing-2;
|
||||||
}
|
}
|
||||||
|
|
||||||
.refund-actions {
|
.refund-actions {
|
||||||
display: flex;
|
display: flex;
|
||||||
gap: 24rpx;
|
gap: $spacing-3;
|
||||||
|
|
||||||
.btn-outline,
|
.btn-outline,
|
||||||
.btn-primary {
|
.btn-primary {
|
||||||
|
|||||||
Reference in New Issue
Block a user