爱简收旧衣按件回收前端代码仓库
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

264 lines
6.0 KiB

<template>
<view class="container">
<!-- 顶部导航 -->
<view class="nav-bar">
<view class="back" @tap="goBack">
<uni-icons type="left" size="20"></uni-icons>
</view>
<text class="title">查看品牌</text>
</view>
<!-- 品牌标题 -->
<view class="brand-title">
<text>品牌羽绒服</text>
</view>
<!-- 品牌列表 -->
<view class="brand-grid">
<view
class="brand-item"
v-for="(item, index) in brandItems"
:key="index"
:class="{ active: item.selected }"
@tap="selectItem(index)"
>
<image :src="item.image" mode="aspectFit"></image>
<text class="name">{{ item.name }}</text>
<text class="price">¥ {{ item.price }} /件</text>
</view>
</view>
<!-- 底部按钮 -->
<view class="bottom-bar">
<button class="submit-btn" @tap="goToPickup">去预约上门取件</button>
</view>
</view>
</template>
<script>
import pullRefreshMixin from '@/pages/mixins/pullRefreshMixin.js'
export default {
mixins: [pullRefreshMixin],
data() {
return {
brandItems: [
{
name: 'MONCLER GENIUS Maya 70 By Palm A',
image: '/static/brand/moncler.png',
price: '3-10',
selected: false
},
{
name: '加拿大鹅 Wyndham系列羽绒服 冬季 男装',
image: '/static/brand/canada-goose.png',
price: '3-10',
selected: false
},
{
name: 'THE NORTH FACE 1992 Nupse 填充夹克',
image: '/static/brand/tnf-1992.png',
price: '3-10',
selected: false
},
{
name: 'THE NORTH FACE M\'S 1996 Novelty',
image: '/static/brand/tnf-1996.png',
price: '3-10',
selected: false
},
{
name: 'THE NORTH FACE 1996 系列 FW23',
image: '/static/brand/tnf-fw23.png',
price: '3-10',
selected: false
},
{
name: 'THE NORTH FACE 城市户外系列羽绒服',
image: '/static/brand/tnf-urban.png',
price: '3-10',
selected: false
},
{
name: 'THE NORTH FACE 城市户外系列羽绒服 红色',
image: '/static/brand/tnf-red.png',
price: '3-10',
selected: false
},
{
name: 'THE NORTH FACE 韩国男款 1996 Nov',
image: '/static/brand/tnf-korea.png',
price: '3-10',
selected: false
}
],
selectedFromRecycle: []
}
},
onLoad(options) {
// 接收从recycle页面传来的已选中衣物数据
if (options.selectedItems) {
try {
this.selectedFromRecycle = JSON.parse(decodeURIComponent(options.selectedItems))
// 根据recycle页面选中的衣物,设置对应品牌衣物的选中状态
this.syncSelectionWithRecycle()
} catch (e) {
console.error('解析选中衣物数据失败:', e)
}
}
},
methods: {
async onRefresh() {
// 模拟刷新数据
await new Promise(resolve => setTimeout(resolve, 1000))
uni.stopPullRefresh()
},
goBack() {
uni.navigateBack()
},
// 同步recycle页面选中的衣物到品牌页面
syncSelectionWithRecycle() {
const brandSelected = this.selectedFromRecycle.find(item => item.showBrandCheck)
if (brandSelected) {
// 如果recycle页面选中了品牌衣物,这里默认选中第一个品牌衣物
this.brandItems[0].selected = true
}
},
selectItem(index) {
this.brandItems[index].selected = !this.brandItems[index].selected
},
goToPickup() {
// 获取所有选中的品牌衣物
const selectedBrandItems = this.brandItems
.filter(item => item.selected)
.map(item => ({
name: item.name,
icon: item.image,
quantity: 1,
unitPrice: item.price.split('-')[0],
desc: '品牌羽绒服,状态良好'
}))
// 将选中的衣物信息转换为字符串
const itemsStr = encodeURIComponent(JSON.stringify([
...this.selectedFromRecycle,
...selectedBrandItems
]))
// 跳转到预约页面
uni.navigateTo({
url: `/pages/component/pickup?fromRecycle=true&items=${itemsStr}`
})
}
}
}
</script>
<style lang="scss" scoped>
.container {
min-height: 100vh;
background: #fff;
padding-bottom: calc(120rpx + env(safe-area-inset-bottom));
}
.nav-bar {
display: flex;
align-items: center;
height: 88rpx;
padding: 0 30rpx;
background: #fff;
.back {
padding: 20rpx;
margin-left: -20rpx;
}
.title {
flex: 1;
text-align: center;
font-size: 34rpx;
font-weight: 500;
}
}
.brand-title {
padding: 30rpx;
font-size: 40rpx;
font-weight: bold;
color: #333;
}
.brand-grid {
padding: 0 20rpx;
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 20rpx;
}
.brand-item {
background: #FFF9F2;
border-radius: 16rpx;
padding: 30rpx;
display: flex;
flex-direction: column;
align-items: center;
transition: all 0.3s;
&.active {
background: #FFE4CC;
}
image {
width: 240rpx;
height: 240rpx;
margin-bottom: 20rpx;
}
.name {
font-size: 28rpx;
color: #333;
text-align: center;
margin-bottom: 10rpx;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
overflow: hidden;
}
.price {
font-size: 26rpx;
color: #FF9500;
}
}
.bottom-bar {
position: fixed;
bottom: 0;
left: 0;
right: 0;
padding: 20rpx 30rpx calc(20rpx + env(safe-area-inset-bottom));
background: #fff;
box-shadow: 0 -2rpx 10rpx rgba(0, 0, 0, 0.05);
.submit-btn {
width: 100%;
height: 80rpx;
background: #FFB74D;
color: #fff;
font-size: 28rpx;
border-radius: 40rpx;
display: flex;
align-items: center;
justify-content: center;
border: none;
&::after {
border: none;
}
&:active {
opacity: 0.9;
}
}
}
</style>