1 changed files with 319 additions and 0 deletions
@ -0,0 +1,319 @@ |
|||
<template> |
|||
<view class="viewport"> |
|||
<!-- tabs --> |
|||
<view class="tabs"> |
|||
<text |
|||
class="item" |
|||
v-for="(item, index) in orderTabs" |
|||
:key="item.title" |
|||
@tap="activeIndex = index" |
|||
> |
|||
{{ item.title }} |
|||
</text> |
|||
<!-- 游标 --> |
|||
<view class="cursor" :style="{ left: activeIndex * 20 + '%' }"></view> |
|||
</view> |
|||
<!-- 滑动容器 --> |
|||
<swiper class="swiper" :current="activeIndex" @change="activeIndex = $event.detail.current"> |
|||
<!-- 滑动项 --> |
|||
<swiper-item v-for="item in orderTabs" :key="item.title"> |
|||
<!-- 订单列表 --> |
|||
<scroll-view scroll-y class="orders"> |
|||
<view class="card" v-for="item in 2" :key="item"> |
|||
<!-- 订单信息 --> |
|||
<view class="status"> |
|||
<text class="date">2023-04-14 13:14:20</text> |
|||
<!-- 订单状态文字 --> |
|||
<text>待付款</text> |
|||
<!-- 待评价/已完成/已取消 状态: 展示删除订单 --> |
|||
<text class="icon-delete"></text> |
|||
</view> |
|||
<!-- 商品信息,点击商品跳转到订单详情,不是商品详情 --> |
|||
<navigator |
|||
v-for="sku in 2" |
|||
:key="sku" |
|||
class="goods" |
|||
:url="`/pagesOrder/detail/detail?id=1`" |
|||
hover-class="none" |
|||
> |
|||
<view class="cover"> |
|||
<image |
|||
mode="aspectFit" |
|||
src="https://yanxuan-item.nosdn.127.net/c07edde1047fa1bd0b795bed136c2bb2.jpg" |
|||
></image> |
|||
</view> |
|||
<view class="meta"> |
|||
<view class="name ellipsis">ins风小碎花泡泡袖衬110-160cm</view> |
|||
<view class="type">藏青小花 130</view> |
|||
</view> |
|||
</navigator> |
|||
<!-- 支付信息 --> |
|||
<view class="payment"> |
|||
<text class="quantity">共5件商品</text> |
|||
<text>实付</text> |
|||
<text class="amount"> <text class="symbol">¥</text>99</text> |
|||
</view> |
|||
<!-- 订单操作按钮 --> |
|||
<view class="action"> |
|||
<!-- 待付款状态:显示去支付按钮 --> |
|||
<template v-if="true"> |
|||
<view class="button primary">去支付</view> |
|||
</template> |
|||
<template v-else> |
|||
<navigator |
|||
class="button secondary" |
|||
:url="`/pagesOrder/create/create?orderId=id`" |
|||
hover-class="none" |
|||
> |
|||
再次购买 |
|||
</navigator> |
|||
<!-- 待收货状态: 展示确认收货 --> |
|||
<view v-if="false" class="button primary">确认收货</view> |
|||
</template> |
|||
</view> |
|||
</view> |
|||
<!-- 底部提示文字 --> |
|||
<view class="loading-text" :style="{ paddingBottom: safeAreaInsets?.bottom + 'px' }"> |
|||
{{ true ? '没有更多数据~' : '正在加载...' }} |
|||
</view> |
|||
</scroll-view> |
|||
</swiper-item> |
|||
</swiper> |
|||
</view> |
|||
</template> |
|||
|
|||
<script setup lang="ts"> |
|||
import { ref } from 'vue' |
|||
|
|||
// 获取屏幕边界到安全区域距离 |
|||
const { safeAreaInsets } = uni.getSystemInfoSync() |
|||
// tabs 数据 |
|||
const orderTabs = ref([ |
|||
{ orderState: 0, title: '全部' }, |
|||
{ orderState: 1, title: '待付款' }, |
|||
{ orderState: 2, title: '待发货' }, |
|||
{ orderState: 3, title: '待收货' }, |
|||
{ orderState: 4, title: '待评价' }, |
|||
]) |
|||
|
|||
// 获取页面参数 |
|||
const query = defineProps<{ |
|||
type: string |
|||
}>() |
|||
|
|||
// 高亮下标 |
|||
const activeIndex = ref(orderTabs.value.findIndex((v) => v.orderState === Number(query.type))) |
|||
</script> |
|||
|
|||
<style lang="scss"> |
|||
page { |
|||
height: 100%; |
|||
overflow: hidden; |
|||
} |
|||
|
|||
.viewport { |
|||
height: 100%; |
|||
display: flex; |
|||
flex-direction: column; |
|||
background-color: #fff; |
|||
} |
|||
|
|||
// tabs |
|||
.tabs { |
|||
display: flex; |
|||
justify-content: space-around; |
|||
line-height: 60rpx; |
|||
margin: 0 10rpx; |
|||
background-color: #fff; |
|||
box-shadow: 0 4rpx 6rpx rgba(240, 240, 240, 0.6); |
|||
position: relative; |
|||
z-index: 9; |
|||
|
|||
.item { |
|||
flex: 1; |
|||
text-align: center; |
|||
padding: 20rpx; |
|||
font-size: 28rpx; |
|||
color: #262626; |
|||
} |
|||
|
|||
.cursor { |
|||
position: absolute; |
|||
left: 0; |
|||
bottom: 0; |
|||
width: 20%; |
|||
height: 6rpx; |
|||
padding: 0 50rpx; |
|||
background-color: #27ba9b; |
|||
/* 过渡效果 */ |
|||
transition: all 0.4s; |
|||
} |
|||
} |
|||
|
|||
// swiper |
|||
.swiper { |
|||
background-color: #f7f7f8; |
|||
} |
|||
|
|||
// 订单列表 |
|||
.orders { |
|||
.card { |
|||
min-height: 100rpx; |
|||
padding: 20rpx; |
|||
margin: 20rpx 20rpx 0; |
|||
border-radius: 10rpx; |
|||
background-color: #fff; |
|||
|
|||
&:last-child { |
|||
padding-bottom: 40rpx; |
|||
} |
|||
} |
|||
|
|||
.status { |
|||
display: flex; |
|||
align-items: center; |
|||
justify-content: space-between; |
|||
font-size: 28rpx; |
|||
color: #999; |
|||
margin-bottom: 15rpx; |
|||
|
|||
.date { |
|||
color: #666; |
|||
flex: 1; |
|||
} |
|||
|
|||
.primary { |
|||
color: #ff9240; |
|||
} |
|||
|
|||
.icon-delete { |
|||
line-height: 1; |
|||
margin-left: 10rpx; |
|||
padding-left: 10rpx; |
|||
border-left: 1rpx solid #e3e3e3; |
|||
} |
|||
} |
|||
|
|||
.goods { |
|||
display: flex; |
|||
margin-bottom: 20rpx; |
|||
|
|||
.cover { |
|||
width: 170rpx; |
|||
height: 170rpx; |
|||
margin-right: 20rpx; |
|||
border-radius: 10rpx; |
|||
overflow: hidden; |
|||
position: relative; |
|||
} |
|||
|
|||
.quantity { |
|||
position: absolute; |
|||
bottom: 0; |
|||
right: 0; |
|||
line-height: 1; |
|||
padding: 6rpx 4rpx 6rpx 8rpx; |
|||
font-size: 24rpx; |
|||
color: #fff; |
|||
border-radius: 10rpx 0 0 0; |
|||
background-color: rgba(0, 0, 0, 0.6); |
|||
} |
|||
|
|||
.meta { |
|||
flex: 1; |
|||
display: flex; |
|||
flex-direction: column; |
|||
justify-content: center; |
|||
} |
|||
|
|||
.name { |
|||
height: 80rpx; |
|||
font-size: 26rpx; |
|||
color: #444; |
|||
} |
|||
|
|||
.type { |
|||
line-height: 1.8; |
|||
padding: 0 15rpx; |
|||
margin-top: 10rpx; |
|||
font-size: 24rpx; |
|||
align-self: flex-start; |
|||
border-radius: 4rpx; |
|||
color: #888; |
|||
background-color: #f7f7f8; |
|||
} |
|||
|
|||
.more { |
|||
flex: 1; |
|||
display: flex; |
|||
align-items: center; |
|||
justify-content: center; |
|||
font-size: 22rpx; |
|||
color: #333; |
|||
} |
|||
} |
|||
|
|||
.payment { |
|||
display: flex; |
|||
justify-content: flex-end; |
|||
align-items: center; |
|||
line-height: 1; |
|||
padding: 20rpx 0; |
|||
text-align: right; |
|||
color: #999; |
|||
font-size: 28rpx; |
|||
border-bottom: 1rpx solid #eee; |
|||
|
|||
.quantity { |
|||
font-size: 24rpx; |
|||
margin-right: 16rpx; |
|||
} |
|||
|
|||
.amount { |
|||
color: #444; |
|||
margin-left: 6rpx; |
|||
} |
|||
|
|||
.symbol { |
|||
font-size: 20rpx; |
|||
} |
|||
} |
|||
|
|||
.action { |
|||
display: flex; |
|||
justify-content: flex-end; |
|||
align-items: center; |
|||
padding-top: 20rpx; |
|||
|
|||
.button { |
|||
width: 180rpx; |
|||
height: 60rpx; |
|||
display: flex; |
|||
justify-content: center; |
|||
align-items: center; |
|||
margin-left: 20rpx; |
|||
border-radius: 60rpx; |
|||
border: 1rpx solid #ccc; |
|||
font-size: 26rpx; |
|||
color: #444; |
|||
} |
|||
|
|||
.secondary { |
|||
color: #27ba9b; |
|||
border-color: #27ba9b; |
|||
} |
|||
|
|||
.primary { |
|||
color: #fff; |
|||
background-color: #27ba9b; |
|||
} |
|||
} |
|||
|
|||
.loading-text { |
|||
text-align: center; |
|||
font-size: 28rpx; |
|||
color: #666; |
|||
padding: 20rpx 0; |
|||
} |
|||
} |
|||
</style> |
Write
Preview
Loading…
Cancel
Save
Reference in new issue