@ -1,297 +1,353 @@ | |||||
<template> | <template> | ||||
<view class="page"> | <view class="page"> | ||||
<navbar/> | |||||
<navbar></navbar> | |||||
<text class="control-text" @click="isManaged = !isManaged">{{ isManaged ? '退出管理' : '管理' }}</text> | |||||
<view class="user"> | |||||
<uv-checkbox-group | |||||
shape="circle" | |||||
v-model="checkboxValue"> | |||||
<uv-swipe-action> | |||||
<view | |||||
v-for="(item, index) in list" | |||||
:key="item.id"> | |||||
<view style="margin-top: 20rpx;"></view> | |||||
<uv-swipe-action-item | |||||
@click="e => deleteCart(e, item)" | |||||
:options="options"> | |||||
<view class="item"> | |||||
<view class="checkbox"> | |||||
<uv-checkbox | |||||
:name="item.id" | |||||
activeColor="#eb3300" | |||||
size="40rpx" | |||||
icon-size="35rpx" | |||||
></uv-checkbox> | |||||
</view> | |||||
<image | |||||
class="image" | |||||
:src="item.image && | |||||
item.image.split(',')[0]" | |||||
mode=""></image> | |||||
<view class="info"> | |||||
<view class="title"> | |||||
<view class=""> | |||||
{{ item.title }} | |||||
</view> | |||||
</view> | |||||
<view class="unit"> | |||||
规格:{{ item.sku }} | |||||
<!-- <uv-icon name="arrow-down"></uv-icon> --> | |||||
<view class="cart-items"> | |||||
<uv-checkbox-group shape="circle" v-model="checkboxValue" @change="toggleSelect"> | |||||
<view v-for="(item, index) in cartData.items" :key="item.id" class="cart-item"> | |||||
<view class="checkbox"> | |||||
<uv-checkbox :key="index" :name="item.id" size="40rpx" iconSize="35rpx" activeColor="#019245" /> | |||||
</view> | |||||
<view class="item-content"> | |||||
<image class="food-image" :src="item.image" mode="aspectFill" /> | |||||
<view class="food-info"> | |||||
<text class="food-name">{{ item.name }}</text> | |||||
<view class="food-sold"> | |||||
<uv-icon name="checkmark-circle" color="#ccc" size="24rpx"></uv-icon> | |||||
<text>已售出 {{ item.sold }}单</text> | |||||
</view> | |||||
<view class="food-price-row"> | |||||
<text class="food-price"> | |||||
<text style="font-size: 22rpx; margin-right: 6rpx;">¥</text> | |||||
{{ item.price.toFixed(1) }} | |||||
</text> | |||||
<view class="number-box"> | |||||
<view class="number-btn minus" @tap="decreaseQuantity(item)"> | |||||
<text>-</text> | |||||
</view> | </view> | ||||
<view | |||||
style="display: flex; | |||||
justify-content: space-between; | |||||
align-items: center;"> | |||||
<view class="price"> | |||||
¥<text>{{ item.price }}</text>元 | |||||
</view> | |||||
<view class=""> | |||||
<uv-number-box v-model="item.num" | |||||
@change="e => valChange(item, e)"></uv-number-box> | |||||
</view> | |||||
<text class="number-value">{{ item.quantity }}</text> | |||||
<view class="number-btn plus" @tap="increaseQuantity(item)"> | |||||
<text>+</text> | |||||
</view> | </view> | ||||
</view> | </view> | ||||
</view> | </view> | ||||
</uv-swipe-action-item> | |||||
</view> | |||||
</uv-swipe-action> | |||||
</uv-checkbox-group> | |||||
<uv-empty | |||||
v-if="list.length == 0" | |||||
text="空空如也" | |||||
textSize="30rpx" | |||||
iconSize="200rpx" | |||||
icon="list"></uv-empty> | |||||
<view class="action"> | |||||
<view class="icon"> | |||||
<image src="/static/image/cart/1.png" mode=""></image> | |||||
<view class="num"> | |||||
{{ checkboxValue.length }} | |||||
</view> | |||||
</view> | |||||
<view class="price"> | |||||
<view class="count"> | |||||
合计 | |||||
<view class=""> | |||||
¥<text>{{ totalPrice }}</text> | |||||
</view> | </view> | ||||
</view> | </view> | ||||
<view class="text"> | |||||
共{{ checkboxValue.length }}件,已享受更低优惠 | |||||
</view> | |||||
</view> | </view> | ||||
<view class="btn" | |||||
@click="submit"> | |||||
去结算 | |||||
</uv-checkbox-group> | |||||
<uv-empty mode="car" style="padding-top: 300rpx;" v-if="!cartData.items.length" | |||||
text="购物车空空如也~" /> | |||||
</view> | |||||
<view class="cart-footer"> | |||||
<view class="select-all"> | |||||
<uv-checkbox-group v-model="allCheckbox"> | |||||
<uv-checkbox size="40rpx" iconSize="35rpx" activeColor="#019245" shape="circle" name="all" | |||||
@change="toggleSelectAll" /> | |||||
</uv-checkbox-group> | |||||
<text>全选</text> | |||||
</view> | |||||
<view class="cart-total"> | |||||
<text v-if="!isManaged" style="font-size: 24rpx; color: #999;">已选{{ cartData.selectedCount }}个,</text> | |||||
<text v-if="!isManaged">合计</text> | |||||
<text v-if="!isManaged" class="total-price">¥{{ (cartData.totalPrice).toFixed(1) }}</text> | |||||
<view v-if="isManaged" class="checkout-btn checkbox-collect" @tap="addCollect"> | |||||
<text>添加收藏</text> | |||||
</view> | </view> | ||||
</view> | </view> | ||||
<view v-if="!isManaged" class="checkout-btn checkbox-primary" @tap="checkout"> | |||||
<text>去下单</text> | |||||
</view> | |||||
<view v-if="isManaged" class="checkout-btn checkbox-primary" @tap="deleteCart"> | |||||
<text>删除</text> | |||||
</view> | |||||
</view> | </view> | ||||
<tabber select="cart" /> | <tabber select="cart" /> | ||||
</view> | </view> | ||||
</template> | </template> | ||||
<script> | <script> | ||||
import tabber from '@/components/base/tabbar.vue' | |||||
import mixinsList from '@/mixins/list.js' | |||||
export default { | |||||
mixins : [mixinsList], | |||||
components: { | |||||
tabber, | |||||
}, | |||||
data() { | |||||
return { | |||||
value : 0, | |||||
checkboxValue : [], | |||||
options: [ | |||||
{ | |||||
text: '删除', | |||||
style: { | |||||
backgroundColor: '#f40' | |||||
} | |||||
}, | |||||
], | |||||
mixinsListApi : 'getCartPageList', | |||||
import tabber from '@/components/base/tabbar.vue' | |||||
import { mockCartData } from '@/static/js/mockCartData.js' | |||||
import navbar from '@/components/base/navbar.vue' | |||||
export default { | |||||
components: { | |||||
tabber, | |||||
navbar | |||||
}, | |||||
data() { | |||||
return { | |||||
cartData: mockCartData, | |||||
checkboxValue: [], | |||||
isManaged: false | |||||
} | |||||
}, | |||||
computed: { | |||||
allSelected() { | |||||
return this.cartData.items.every(item => this.checkboxValue.includes(item.id)) | |||||
}, | |||||
// 全选的值 | |||||
allCheckbox(){ | |||||
return this.allSelected ? ['all'] : [] | |||||
} | |||||
}, | |||||
methods: { | |||||
toggleSelect(item) { | |||||
this.updateCart(); | |||||
}, | |||||
toggleSelectAll() { | |||||
if (this.allSelected){ | |||||
this.checkboxValue = [] | |||||
}else{ | |||||
this.checkboxValue = this.cartData.items.map(item => item.id) | |||||
} | } | ||||
}, | |||||
computed: { | |||||
totalPrice(){ | |||||
if (!this.checkboxValue.length) { | |||||
return 0 | |||||
this.updateCart(); | |||||
}, | |||||
increaseQuantity(item) { | |||||
item.quantity += 1; | |||||
this.updateCart(); | |||||
}, | |||||
decreaseQuantity(item) { | |||||
if (item.quantity > 1) { | |||||
item.quantity -= 1; | |||||
this.updateCart(); | |||||
} | |||||
}, | |||||
updateCart() { | |||||
// 计算选中的商品数量 | |||||
this.cartData.selectedCount = this.checkboxValue.length; | |||||
// 计算总价 | |||||
this.cartData.totalPrice = this.cartData.items.reduce((total, item) => { | |||||
if (this.checkboxValue.includes(item.id)){ | |||||
total += item.price * item.quantity | |||||
} | } | ||||
let price = 0 | |||||
this.list.forEach(n => { | |||||
if(this.checkboxValue.includes(n.id)){ | |||||
price += n.price * n.num | |||||
} | |||||
return total | |||||
}, 0) | |||||
}, | |||||
// 结账 | |||||
checkout() { | |||||
// const selectedItems = this.cartData.items.filter(item => item.selected); | |||||
if (this.checkboxValue.length === 0) { | |||||
uni.showToast({ | |||||
title: '请选择商品', | |||||
icon: 'none' | |||||
}); | |||||
return; | |||||
} | |||||
// 跳转到创建订单页面 | |||||
uni.navigateTo({ | |||||
url: '/pages_order/order/newOrderDetail?status=pending' | |||||
}); | |||||
}, | |||||
// 添加收藏 | |||||
addCollect(){ | |||||
if (!this.checkboxValue.length) { | |||||
uni.showToast({ | |||||
title: '请选择商品', | |||||
icon: 'none' | |||||
}); | |||||
return; | |||||
} | |||||
uni.showLoading({ | |||||
title: '添加收藏中...' | |||||
}) | |||||
setTimeout(() => { | |||||
uni.hideLoading() | |||||
uni.showToast({ | |||||
title: '添加收藏成功', | |||||
}) | }) | ||||
return price | |||||
}, | |||||
// 编写收藏函数的调用 | |||||
}, 800) | |||||
}, | }, | ||||
methods: { | |||||
valChange(item, e) { | |||||
this.$api('updateCartNum', { | |||||
id: item.id, | |||||
num: e.value, | |||||
}) | |||||
}, | |||||
// 立即下单 | |||||
submit(){ | |||||
if(this.checkboxValue.length == 0){ | |||||
uni.showToast({ | |||||
title: '请选择商品', | |||||
icon: 'none', | |||||
}) | |||||
return | |||||
} | |||||
let arr = [] | |||||
this.list.forEach(n => { | |||||
if(this.checkboxValue.includes(n.id)){ | |||||
arr.push(n) | |||||
} | |||||
}) | |||||
this.$store.commit('setPayOrderProduct', arr) | |||||
// 删除购物车 | |||||
deleteCart(){ | |||||
if (!this.checkboxValue.length) { | |||||
uni.showToast({ | |||||
title: '请选择商品', | |||||
icon: 'none' | |||||
}); | |||||
this.$utils.navigateTo('/pages_order/order/createOrder') | |||||
}, | |||||
deleteCart(e, item){ | |||||
this.$api('deleteCart', { | |||||
ids : item.id | |||||
}, res => { | |||||
this.getData() | |||||
return; | |||||
} | |||||
uni.showLoading({ | |||||
title: '删除中...' | |||||
}) | |||||
setTimeout(() => { | |||||
uni.hideLoading() | |||||
uni.showToast({ | |||||
title: '删除成功', | |||||
}) | }) | ||||
}, | |||||
this.cartData.items = this.cartData.items.filter(item => !this.checkboxValue.includes(item.id)) | |||||
this.checkboxValue = [] | |||||
this.updateCart() | |||||
// 编写删除函数的调用 | |||||
}, 800) | |||||
} | } | ||||
} | |||||
} | |||||
} | |||||
</script> | </script> | ||||
<style scoped lang="scss"> | |||||
.page { | |||||
padding-bottom: 200rpx; | |||||
/deep/ .uv-swipe-action{ | |||||
<style lang="scss" scoped> | |||||
.page { | |||||
// background-color: #f5f5f5; | |||||
padding-bottom: 120rpx; | |||||
position: relative; | |||||
.cart-items { | |||||
.cart-item { | |||||
width: 100%; | width: 100%; | ||||
} | |||||
} | |||||
.user { | |||||
.item{ | |||||
background-color: #fff; | |||||
display: flex; | |||||
align-items: center; | |||||
background-color: #fff; | |||||
padding: 20rpx; | |||||
margin-bottom: 20rpx; | |||||
border-radius: 10rpx; | |||||
.checkbox { | |||||
margin-right: 20rpx; | |||||
display: flex; | |||||
align-items: center; | |||||
} | |||||
.item-content { | |||||
flex: 1; | |||||
display: flex; | |||||
.food-image { | |||||
width: 150rpx; | |||||
height: 150rpx; | |||||
margin-right: 20rpx; | |||||
} | |||||
.food-info { | |||||
flex: 1; | |||||
display: flex; | |||||
flex-direction: column; | |||||
justify-content: space-around; | |||||
.food-name { | |||||
font-size: 28rpx; | |||||
margin-bottom: 10rpx; | |||||
font-weight: 500; | |||||
} | |||||
.food-sold { | |||||
display: flex; | |||||
align-items: center; | |||||
font-size: 24rpx; | |||||
color: $uni-color-third; | |||||
margin-bottom: 10rpx; | |||||
} | |||||
.food-price-row { | |||||
display: flex; | |||||
justify-content: space-between; | |||||
align-items: center; | |||||
.food-price { | |||||
color: #ff0000; | |||||
font-size: 32rpx; | |||||
} | |||||
.number-box { | |||||
display: flex; | |||||
align-items: center; | |||||
border-radius: 28rpx; | |||||
margin-right: 20rpx; | |||||
contain: content; | |||||
border: 2rpx solid $uni-color-third; | |||||
.number-btn { | |||||
width: 50rpx; | |||||
height: 50rpx; | |||||
display: flex; | |||||
justify-content: center; | |||||
align-items: center; | |||||
} | |||||
.number-value { | |||||
width: 50rpx; | |||||
height: 50rpx; | |||||
display: flex; | |||||
justify-content: center; | |||||
align-items: center; | |||||
font-size: 28rpx; | |||||
border-left: 2rpx solid $uni-color-third; | |||||
border-right: 2rpx solid $uni-color-third; | |||||
} | |||||
} | |||||
} | |||||
} | |||||
} | |||||
} | |||||
} | |||||
.cart-footer { | |||||
position: fixed; | |||||
bottom: 120rpx; | |||||
left: 0; | |||||
width: 100%; | |||||
height: 100rpx; | |||||
background-color: #fff; | |||||
display: flex; | |||||
align-items: center; | |||||
padding: 0 20rpx; | |||||
box-shadow: 0 -2rpx 10rpx rgba(0, 0, 0, 0.05); | |||||
box-sizing: border-box; | |||||
.select-all { | |||||
display: flex; | display: flex; | ||||
padding: 30rpx; | |||||
.checkbox{ | |||||
display: flex; | |||||
justify-content: center; | |||||
align-items: center; | |||||
} | |||||
.image{ | |||||
width: 200rpx; | |||||
height: 200rpx; | |||||
border-radius: 20rpx; | |||||
align-items: center; | |||||
font-size: 28rpx; | |||||
text { | |||||
margin-left: 10rpx; | |||||
} | } | ||||
.info{ | |||||
flex: 1; | |||||
.title{ | |||||
display: flex; | |||||
padding: 10rpx 20rpx; | |||||
justify-content: space-between; | |||||
} | |||||
.unit{ | |||||
font-size: 24rpx; | |||||
padding: 10rpx 20rpx; | |||||
color: #717171; | |||||
display: flex; | |||||
align-items: center; | |||||
} | |||||
.price{ | |||||
color: $uni-color; | |||||
font-size: 28rpx; | |||||
padding: 10rpx 20rpx; | |||||
text{ | |||||
font-size: 36rpx; | |||||
font-weight: 900; | |||||
} | |||||
} | |||||
} | |||||
.cart-total { | |||||
flex: 1; | |||||
display: flex; | |||||
align-items: center; | |||||
justify-content: flex-end; | |||||
font-size: 28rpx; | |||||
margin-right: 20rpx; | |||||
// background-color: red; | |||||
.total-price { | |||||
color: #ff0000; | |||||
font-size: 32rpx; | |||||
font-weight: bold; | |||||
margin-left: 10rpx; | |||||
} | } | ||||
} | } | ||||
.action{ | |||||
width: 700rpx; | |||||
position: fixed; | |||||
bottom: 220rpx; | |||||
left: 25rpx; | |||||
background-color: #fff; | |||||
height: 100rpx; | |||||
border-radius: 50rpx; | |||||
box-shadow: 0 0 6rpx 6rpx #00000010; | |||||
.checkout-btn { | |||||
width: 200rpx; | |||||
height: 60rpx; | |||||
display: flex; | display: flex; | ||||
justify-content: center; | justify-content: center; | ||||
align-items: center; | align-items: center; | ||||
overflow: hidden; | |||||
z-index: 999; | |||||
.icon{ | |||||
position: relative; | |||||
width: 80rpx; | |||||
height: 80rpx; | |||||
margin: 0 20rpx; | |||||
image{ | |||||
width: 80rpx; | |||||
height: 80rpx; | |||||
} | |||||
.num{ | |||||
position: absolute; | |||||
right: 10rpx; | |||||
top: 0rpx; | |||||
background-color: $uni-color; | |||||
color: #fff; | |||||
font-size: 18rpx; | |||||
border-radius: 50%; | |||||
height: 30rpx; | |||||
width: 30rpx; | |||||
display: flex; | |||||
justify-content: center; | |||||
align-items: center; | |||||
} | |||||
} | |||||
.price{ | |||||
.count{ | |||||
display: flex; | |||||
font-size: 26rpx; | |||||
align-items: center; | |||||
view{ | |||||
color: $uni-color; | |||||
margin-left: 10rpx; | |||||
text{ | |||||
font-size: 32rpx; | |||||
font-weight: 900; | |||||
} | |||||
} | |||||
} | |||||
.text{ | |||||
font-size: 20rpx; | |||||
color: #717171; | |||||
} | |||||
} | |||||
.btn{ | |||||
margin-left: auto; | |||||
background-color: $uni-color; | |||||
height: 100%; | |||||
padding: 0 50rpx; | |||||
color: #fff; | |||||
display: flex; | |||||
justify-content: center; | |||||
align-items: center; | |||||
} | |||||
border-radius: 35rpx; | |||||
font-size: 28rpx; | |||||
} | |||||
.checkbox-primary{ | |||||
background-color: #019245; | |||||
color: #fff; | |||||
} | } | ||||
.checkbox-collect{ | |||||
color: $uni-color; | |||||
background-color: $uni-color-fourth; | |||||
} | |||||
} | |||||
.control-text{ | |||||
position: absolute; | |||||
right: 150rpx; | |||||
top: 60rpx; | |||||
font-size: 26rpx; | |||||
color: #fff; | |||||
z-index: 10000; | |||||
} | } | ||||
</style> | |||||
} | |||||
</style> |
@ -1,587 +0,0 @@ | |||||
<template> | |||||
<view class="page"> | |||||
<!-- 导航栏 --> | |||||
<navbar title="个人中心" | |||||
leftClick | |||||
@leftClick="$utils.navigateBack" | |||||
bgColor="#E3441A" color="#fff" /> | |||||
<!-- 头部 --> | |||||
<view class="head"> | |||||
<view class="headImage"> | |||||
<image :src="userInfo.headImage" mode="aspectFill"></image> | |||||
</view> | |||||
<view class="user-info"> | |||||
<view class="user-base-info"> | |||||
<view class="user-base-top"> | |||||
<view class="user-name">{{ userInfo.nickName}}</view> | |||||
<view class="member-level"> | |||||
<image v-if="userInfo.role == 1" :src="configList.vip_user" mode="aspectFill" class="level"> | |||||
</image> | |||||
<image v-if="userInfo.role == 2" src="@/static/image/center/gold-min.png" mode="aspectFill" | |||||
class="level"> | |||||
</image> | |||||
<image v-if="userInfo.role == 3" src="@/static/image/center/sliver-min.png" | |||||
mode="aspectFill" class="level"> | |||||
</image> | |||||
</view> | |||||
<view class="user-tag"> | |||||
{{ userRole[userInfo.isPay] }} | |||||
</view> | |||||
</view> | |||||
<view class="edit-user" | |||||
@click="$utils.navigateTo('/pages_order/mine/updateUser?back=true')"> | |||||
<image src="@/static/image/center/edit-icon.png" mode="aspectFill" class="edit-icon"></image> | |||||
<view class="edit-btn"> | |||||
修改资料 | |||||
</view> | |||||
</view> | |||||
</view> | |||||
<view class="user-phone"> | |||||
手机号:{{ userInfo.phone }} | |||||
</view> | |||||
</view> | |||||
</view> | |||||
<!-- 会员卡片 --> | |||||
<view @click="$utils.navigateTo({url : '/pages_order/mine/memberCenter' })" | |||||
v-if="userInfo.role != 0" | |||||
class="earnings"> | |||||
<view v-if="index + 1 == userInfo.role" v-for="(item,index) in vipList" :key="item.id" class="member-item"> | |||||
<image :src="item.headImage" mode="aspectFill" class="member-image"></image> | |||||
<view class="member-info"> | |||||
<view class="profile-photo"> | |||||
<image :src="userInfo.headImage" mode="aspectFill" class="pro-img"></image> | |||||
<view class="open-status"> | |||||
开通时间:{{ riceInfo.openTime }} | |||||
</view> | |||||
</view> | |||||
<view class="open"> | |||||
</view> | |||||
</view> | |||||
</view> | |||||
</view> | |||||
<!-- 佣金数据 --> | |||||
<view @click="$utils.navigateTo('/pages_order/mine/withdraw')" class="brokerage-data" | |||||
:class="{'brokerage-data-mt' : !userInfo.role}"> | |||||
<view class="brokerage"> | |||||
<image :src="configList.money_image" mode="aspectFill" class="brokerage-img"></image> | |||||
<div class="main"> | |||||
<div class="title">我的佣金</div> | |||||
<div class="money">¥{{ riceInfo.canWithdraw || 0 }}</div> | |||||
</div> | |||||
</view> | |||||
<view class="balance"> | |||||
<image :src="configList.price_image" mode="aspectFill" class="balance-img"></image> | |||||
<div class="main"> | |||||
<div class="title">我的余额</div> | |||||
<div class="money">¥{{ riceInfo.balance || 0 }}</div> | |||||
</div> | |||||
</view> | |||||
</view> | |||||
<!-- 我的服务 --> | |||||
<view class="myServer"> | |||||
<view class="server-title"> | |||||
我的服务 | |||||
</view> | |||||
<view class="box"> | |||||
<view class="boxs" @click="$utils.navigateTo('/pages/index/order?type=0')"> | |||||
<image src="@/static/image/center/1.png" mode="aspectFill" /> | |||||
<view class="title">我的订单</view> | |||||
</view> | |||||
<view class="boxs" @click="$utils.navigateTo('/pages_order/mine/partner')"> | |||||
<image src="@/static/image/center/2.png" mode="aspectFill" /> | |||||
<view class="title">我的团队</view> | |||||
</view> | |||||
<view class="boxs" @click="$utils.navigateTo('/pages_order/home/contact')"> | |||||
<image src="@/static/image/center/3.png" mode="aspectFill" /> | |||||
<view class="title">联系客服</view> | |||||
</view> | |||||
<view class="boxs" @click="$utils.navigateTo('/pages_order/mine/promotion')"> | |||||
<image src="@/static/image/center/4.png" mode="aspectFill" /> | |||||
<view class="title">邀请好友</view> | |||||
</view> | |||||
</view> | |||||
<view class="box"> | |||||
<view class="boxs" @click="$utils.navigateTo('/pages_order/mine/recruit')"> | |||||
<image src="@/static/image/center/5.png" mode="aspectFill" /> | |||||
<view class="title">合伙人招募</view> | |||||
</view> | |||||
<view class="boxs" @click="$utils.navigateTo('/pages_order/mine/memberCenter')"> | |||||
<image src="@/static/image/center/6.png" mode="aspectFill" /> | |||||
<view class="title">会员权益</view> | |||||
</view> | |||||
<view class="boxs" @click="$utils.navigateTo('/pages_order/mine/coupon')"> | |||||
<image src="@/static/image/center/7.png" mode="aspectFill" /> | |||||
<view class="title">优惠券</view> | |||||
</view> | |||||
<view class="boxs" @click="$utils.navigateTo('/pages_order/mine/help')"> | |||||
<image src="@/static/image/center/8.png" mode="aspectFill" /> | |||||
<view class="title">帮助与反馈</view> | |||||
</view> | |||||
</view> | |||||
<view class="box"> | |||||
<view class="boxs" @click="$utils.navigateTo('/pages_order/mine/address')"> | |||||
<image src="@/static/image/center/address.png" mode="aspectFill" /> | |||||
<view class="title">我的地址</view> | |||||
</view> | |||||
<view class="boxs" @click="$utils.navigateTo('/pages_order/order/giftList')"> | |||||
<image src="@/static/image/center/9.png" mode="aspectFill" /> | |||||
<view class="title">礼包列表</view> | |||||
</view> | |||||
<view class="boxs" @click="logout"> | |||||
<image src="@/static/image/center/logout.png" mode="aspectFill" /> | |||||
<view class="title">退出登录</view> | |||||
</view> | |||||
</view> | |||||
</view> | |||||
<!-- 广告 --> | |||||
<div v-if="showAdvertising" class="ad" | |||||
@click="$utils.navigateTo('/pages_order/mine/recruit')"> | |||||
<swiper class="swiper" circular :indicator-dots="indicatorDots" :autoplay="true" :interval="2000" | |||||
:duration="duration"> | |||||
<swiper-item v-for="(item, index) in adList" :key="index"> | |||||
<view class="swiper-main"> | |||||
<view @click="closeAdvertising" class="close"> | |||||
<image src="@/static/image/center/close.png" mode="aspectFill" class="close-img"></image> | |||||
</view> | |||||
<image :src="item" mode="aspectFill" class="swiper-main-img"></image> | |||||
<div class="ad-tag"> | |||||
<image src="@/static/image/center/ad-tag.png" mode="aspectFill" class="ad-tag-img"></image> | |||||
</div> | |||||
</view> | |||||
</swiper-item> | |||||
</swiper> | |||||
</div> | |||||
<customerServicePopup ref="customerServicePopup" /> | |||||
<tabber select="center" /> | |||||
</view> | |||||
</template> | |||||
<script> | |||||
import tabber from '@/components/base/tabbar.vue' | |||||
import { | |||||
mapState | |||||
} from 'vuex' | |||||
import customerServicePopup from '@/components/config/customerServicePopup.vue' | |||||
export default { | |||||
components: { | |||||
tabber, | |||||
customerServicePopup, | |||||
}, | |||||
computed: { | |||||
...mapState(['riceInfo']), | |||||
adList() { | |||||
let arr = []; | |||||
if (this.configList?.shop_get_image) { | |||||
arr = this.configList?.shop_get_image?.split(',') | |||||
} | |||||
return arr | |||||
} | |||||
}, | |||||
data() { | |||||
return { | |||||
vipType: ['普通会员', '黄金会员', '渠道商'], | |||||
vipImage: ['vip_vip', 'vip_user', 'vip_shop'], | |||||
vipList: [], | |||||
showAdvertising: true, | |||||
userRole: ['会员', '用户', '渠道'], | |||||
indicatorDots: true, | |||||
duration: 500 | |||||
} | |||||
}, | |||||
onShow() { | |||||
this.$store.commit('getUserInfo') | |||||
this.$store.commit('getRiceInfo') | |||||
this.getMemberCardData(); | |||||
}, | |||||
methods: { | |||||
clickNo() { | |||||
uni.showModal({ | |||||
title: '暂未开放', | |||||
}) | |||||
}, | |||||
logout(){ | |||||
uni.showModal({ | |||||
title: '确认退出登录吗', | |||||
success : (r) => { | |||||
if (r.confirm) { | |||||
this.$store.commit('logout', true) | |||||
} | |||||
} | |||||
}) | |||||
}, | |||||
//关闭广告 | |||||
closeAdvertising() { | |||||
this.showAdvertising = false; | |||||
}, | |||||
//获取会员卡片数据 | |||||
getMemberCardData() { | |||||
this.$api('getRiceVipList', res => { | |||||
if (res.code == 200) { | |||||
this.vipList = res.result | |||||
} | |||||
}) | |||||
} | |||||
} | |||||
} | |||||
</script> | |||||
<style scoped lang="scss"> | |||||
.page { | |||||
// 头部 | |||||
.head { | |||||
display: flex; | |||||
align-items: center; | |||||
padding: 60rpx 20rpx 120rpx 20rpx; | |||||
background: $uni-color; | |||||
.headImage { | |||||
width: 130rpx; | |||||
height: 130rpx; | |||||
background-image: url(/static/image/center/head-img.png); | |||||
background-repeat: no-repeat; | |||||
background-position: 50%, 50%; | |||||
background-size: 100%; | |||||
overflow: hidden; | |||||
border-radius: 50%; | |||||
margin-right: 20rpx; | |||||
image { | |||||
width: 100%; | |||||
height: 100%; | |||||
} | |||||
} | |||||
.user-info { | |||||
width: calc(100% - 130rpx); | |||||
.user-base-info { | |||||
display: flex; | |||||
flex-wrap: wrap; | |||||
justify-content: space-between; | |||||
.user-base-top { | |||||
width: 65%; | |||||
display: flex; | |||||
align-items: center; | |||||
flex-wrap: wrap; | |||||
color: white; | |||||
.user-name { | |||||
max-width: calc(100% - 240rpx); | |||||
white-space: nowrap; | |||||
text-overflow: ellipsis; | |||||
overflow: hidden; | |||||
font-size: 34rpx; | |||||
} | |||||
.member-level { | |||||
margin-left: 10rpx; | |||||
.level { | |||||
width: 120rpx; | |||||
height: 60rpx; | |||||
} | |||||
} | |||||
.user-tag { | |||||
display: flex; | |||||
align-items: center; | |||||
justify-content: center; | |||||
background: #000; | |||||
width: 100rpx; | |||||
height: 40rpx; | |||||
border-radius: 20rpx; | |||||
font-size: 24rpx; | |||||
margin-left: 10rpx; | |||||
} | |||||
} | |||||
.edit-user { | |||||
width: 35%; | |||||
display: flex; | |||||
align-items: center; | |||||
justify-content: flex-end; | |||||
.edit-icon { | |||||
width: 30rpx; | |||||
height: 30rpx; | |||||
} | |||||
.edit-btn { | |||||
color: white; | |||||
margin-left: 10rpx; | |||||
} | |||||
} | |||||
} | |||||
.user-phone { | |||||
color: white; | |||||
font-size: 24rpx; | |||||
} | |||||
} | |||||
} | |||||
// 会员卡片 | |||||
.earnings { | |||||
padding: 0rpx 20rpx; | |||||
box-sizing: border-box; | |||||
margin-top: -18%; | |||||
.member-item { | |||||
position: relative; | |||||
.member-image { | |||||
width: 100%; | |||||
height: 300rpx; | |||||
border-radius: 20rpx; | |||||
} | |||||
.member-info { | |||||
position: absolute; | |||||
bottom: 30rpx; | |||||
left: 0rpx; | |||||
display: flex; | |||||
align-items: center; | |||||
padding: 0rpx 40rpx; | |||||
box-sizing: border-box; | |||||
width: 100%; | |||||
.profile-photo { | |||||
display: flex; | |||||
justify-content: center; | |||||
align-items: center; | |||||
.pro-img { | |||||
width: 60rpx; | |||||
height: 60rpx; | |||||
border-radius: 50%; | |||||
} | |||||
.open-status { | |||||
color: #F8A95F; | |||||
border: 1px solid #F8A95F; | |||||
border-radius: 30rpx; | |||||
padding: 7rpx 20rpx; | |||||
margin-left: 10rpx; | |||||
} | |||||
} | |||||
.open { | |||||
font-size: 26rpx; | |||||
margin-left: 20rpx; | |||||
} | |||||
} | |||||
} | |||||
} | |||||
// 佣金数据 | |||||
.brokerage-data { | |||||
padding: 20rpx; | |||||
background: white; | |||||
border-radius: 20rpx; | |||||
display: flex; | |||||
flex-wrap: wrap; | |||||
box-sizing: border-box; | |||||
margin: 20rpx 20rpx 20rpx 20rpx; | |||||
.brokerage, | |||||
.balance { | |||||
display: flex; | |||||
flex-wrap: wrap; | |||||
width: 50%; | |||||
.brokerage-img, | |||||
.balance-img { | |||||
width: 50%; | |||||
height: auto; | |||||
} | |||||
.main { | |||||
display: flex; | |||||
flex-direction: column; | |||||
justify-content: space-around; | |||||
width: 50%; | |||||
box-sizing: border-box; | |||||
padding: 30rpx 0rpx; | |||||
.title { | |||||
font-size: 34rpx; | |||||
} | |||||
.money { | |||||
font-size: 40rpx; | |||||
color: $uni-color; | |||||
font-weight: bold; | |||||
} | |||||
} | |||||
} | |||||
} | |||||
.brokerage-data-mt { | |||||
margin-top: 50rpx; | |||||
} | |||||
// 我的服务 | |||||
.myServer { | |||||
margin: 0rpx 20rpx 20rpx 20rpx; | |||||
background: white; | |||||
border-radius: 20rpx; | |||||
padding: 30rpx 20rpx; | |||||
box-sizing: border-box; | |||||
box-shadow: 0 4rpx 20rpx rgba(0, 0, 0, 0.05); | |||||
.server-title { | |||||
margin-bottom: 30rpx; | |||||
font-size: 36rpx; | |||||
font-weight: 600; | |||||
color: #333; | |||||
position: relative; | |||||
padding-left: 20rpx; | |||||
&::before { | |||||
content: ''; | |||||
position: absolute; | |||||
left: 0; | |||||
top: 50%; | |||||
transform: translateY(-50%); | |||||
width: 8rpx; | |||||
height: 32rpx; | |||||
background: $uni-color; | |||||
border-radius: 4rpx; | |||||
} | |||||
} | |||||
.box { | |||||
display: flex; | |||||
width: 100%; | |||||
margin-bottom: 30rpx; | |||||
gap: 20rpx; | |||||
.boxs { | |||||
width: 23%; | |||||
display: flex; | |||||
flex-direction: column; | |||||
justify-content: center; | |||||
align-items: center; | |||||
padding: 20rpx 0; | |||||
border-radius: 16rpx; | |||||
transition: all 0.3s ease; | |||||
position: relative; | |||||
overflow: hidden; | |||||
&::after { | |||||
content: ''; | |||||
position: absolute; | |||||
top: 0; | |||||
left: 0; | |||||
width: 100%; | |||||
height: 100%; | |||||
background: rgba(227, 68, 26, 0.05); | |||||
opacity: 0; | |||||
transition: opacity 0.3s ease; | |||||
z-index: 1; | |||||
} | |||||
&:active { | |||||
transform: scale(0.95); | |||||
&::after { | |||||
opacity: 1; | |||||
} | |||||
} | |||||
image { | |||||
width: 70rpx; | |||||
height: 70rpx; | |||||
display: block; | |||||
margin: 0rpx auto 16rpx auto; | |||||
position: relative; | |||||
z-index: 2; | |||||
transition: transform 0.3s ease; | |||||
} | |||||
.title { | |||||
font-size: 26rpx; | |||||
color: #333; | |||||
position: relative; | |||||
z-index: 2; | |||||
transition: color 0.3s ease; | |||||
} | |||||
&:active { | |||||
image { | |||||
transform: translateY(-4rpx); | |||||
} | |||||
.title { | |||||
color: $uni-color; | |||||
} | |||||
} | |||||
} | |||||
&:last-child { | |||||
margin-bottom: 0rpx; | |||||
} | |||||
} | |||||
} | |||||
// 广告 | |||||
.ad { | |||||
margin: 0rpx 20rpx; | |||||
.swiper { | |||||
.swiper-main { | |||||
position: relative; | |||||
.close { | |||||
position: absolute; | |||||
top: 20rpx; | |||||
right: 20rpx; | |||||
.close-img { | |||||
width: 40rpx; | |||||
height: 40rpx; | |||||
} | |||||
} | |||||
.swiper-main-img { | |||||
width: 100%; | |||||
height: 200rpx; | |||||
border-radius: 20rpx; | |||||
} | |||||
.ad-tag { | |||||
position: absolute; | |||||
left: 20rpx; | |||||
bottom: 20rpx; | |||||
.ad-tag-img { | |||||
width: 120rpx; | |||||
height: auto; | |||||
} | |||||
} | |||||
} | |||||
} | |||||
} | |||||
} | |||||
</style> |
@ -0,0 +1,294 @@ | |||||
<template> | |||||
<view class="page"> | |||||
<navbar /> | |||||
<view class="user"> | |||||
<uv-checkbox-group shape="circle" v-model="checkboxValue"> | |||||
<uv-swipe-action> | |||||
<view v-for="(item, index) in list" :key="item.id"> | |||||
<view style="margin-top: 20rpx;"></view> | |||||
<uv-swipe-action-item @click="e => deleteCart(e, item)" :options="options"> | |||||
<view class="item"> | |||||
<view class="checkbox"> | |||||
<uv-checkbox :name="item.id" activeColor="#eb3300" size="40rpx" | |||||
icon-size="35rpx"></uv-checkbox> | |||||
</view> | |||||
<image class="image" :src="item.image && | |||||
item.image.split(',')[0]" mode=""></image> | |||||
<view class="info"> | |||||
<view class="title"> | |||||
<view class=""> | |||||
{{ item.title }} | |||||
</view> | |||||
</view> | |||||
<view class="unit"> | |||||
规格:{{ item.sku }} | |||||
<!-- <uv-icon name="arrow-down"></uv-icon> --> | |||||
</view> | |||||
<view style="display: flex; | |||||
justify-content: space-between; | |||||
align-items: center;"> | |||||
<view class="price"> | |||||
¥<text>{{ item.price }}</text>元 | |||||
</view> | |||||
<view class=""> | |||||
<uv-number-box v-model="item.num" | |||||
@change="e => valChange(item, e)"></uv-number-box> | |||||
</view> | |||||
</view> | |||||
</view> | |||||
</view> | |||||
</uv-swipe-action-item> | |||||
</view> | |||||
</uv-swipe-action> | |||||
</uv-checkbox-group> | |||||
<uv-empty v-if="list.length == 0" text="空空如也" textSize="30rpx" iconSize="200rpx" icon="list"></uv-empty> | |||||
<view class="action"> | |||||
<view class="icon"> | |||||
<image src="/static/image/cart/1.png" mode=""></image> | |||||
<view class="num"> | |||||
{{ checkboxValue.length }} | |||||
</view> | |||||
</view> | |||||
<view class="price"> | |||||
<view class="count"> | |||||
合计 | |||||
<view class=""> | |||||
¥<text>{{ totalPrice }}</text> | |||||
</view> | |||||
</view> | |||||
<view class="text"> | |||||
共{{ checkboxValue.length }}件,已享受更低优惠 | |||||
</view> | |||||
</view> | |||||
<view class="btn" @click="submit"> | |||||
去结算 | |||||
</view> | |||||
</view> | |||||
</view> | |||||
<tabber select="cart" /> | |||||
</view> | |||||
</template> | |||||
<script> | |||||
import tabber from '@/components/base/tabbar.vue' | |||||
import mixinsList from '@/mixins/list.js' | |||||
export default { | |||||
mixins: [mixinsList], | |||||
components: { | |||||
tabber, | |||||
}, | |||||
data() { | |||||
return { | |||||
value: 0, | |||||
checkboxValue: [], | |||||
options: [ | |||||
{ | |||||
text: '删除', | |||||
style: { | |||||
backgroundColor: '#f40' | |||||
} | |||||
}, | |||||
], | |||||
mixinsListApi: 'getCartPageList', | |||||
} | |||||
}, | |||||
computed: { | |||||
totalPrice() { | |||||
if (!this.checkboxValue.length) { | |||||
return 0 | |||||
} | |||||
let price = 0 | |||||
this.list.forEach(n => { | |||||
if (this.checkboxValue.includes(n.id)) { | |||||
price += n.price * n.num | |||||
} | |||||
}) | |||||
return price | |||||
}, | |||||
}, | |||||
methods: { | |||||
valChange(item, e) { | |||||
this.$api('updateCartNum', { | |||||
id: item.id, | |||||
num: e.value, | |||||
}) | |||||
}, | |||||
// 立即下单 | |||||
submit() { | |||||
if (this.checkboxValue.length == 0) { | |||||
uni.showToast({ | |||||
title: '请选择商品', | |||||
icon: 'none', | |||||
}) | |||||
return | |||||
} | |||||
let arr = [] | |||||
this.list.forEach(n => { | |||||
if (this.checkboxValue.includes(n.id)) { | |||||
arr.push(n) | |||||
} | |||||
}) | |||||
this.$store.commit('setPayOrderProduct', arr) | |||||
this.$utils.navigateTo('/pages_order/order/createOrder') | |||||
}, | |||||
deleteCart(e, item) { | |||||
this.$api('deleteCart', { | |||||
ids: item.id | |||||
}, res => { | |||||
this.getData() | |||||
}) | |||||
}, | |||||
} | |||||
} | |||||
</script> | |||||
<style scoped lang="scss"> | |||||
.page { | |||||
padding-bottom: 200rpx; | |||||
/deep/ .uv-swipe-action { | |||||
width: 100%; | |||||
} | |||||
} | |||||
.user { | |||||
.item { | |||||
background-color: #fff; | |||||
display: flex; | |||||
padding: 30rpx; | |||||
.checkbox { | |||||
display: flex; | |||||
justify-content: center; | |||||
align-items: center; | |||||
} | |||||
.image { | |||||
width: 200rpx; | |||||
height: 200rpx; | |||||
border-radius: 20rpx; | |||||
} | |||||
.info { | |||||
flex: 1; | |||||
.title { | |||||
display: flex; | |||||
padding: 10rpx 20rpx; | |||||
justify-content: space-between; | |||||
} | |||||
.unit { | |||||
font-size: 24rpx; | |||||
padding: 10rpx 20rpx; | |||||
color: #717171; | |||||
display: flex; | |||||
align-items: center; | |||||
} | |||||
.price { | |||||
color: $uni-color; | |||||
font-size: 28rpx; | |||||
padding: 10rpx 20rpx; | |||||
text { | |||||
font-size: 36rpx; | |||||
font-weight: 900; | |||||
} | |||||
} | |||||
} | |||||
} | |||||
.action { | |||||
width: 700rpx; | |||||
position: fixed; | |||||
bottom: 220rpx; | |||||
left: 25rpx; | |||||
background-color: #fff; | |||||
height: 100rpx; | |||||
border-radius: 50rpx; | |||||
box-shadow: 0 0 6rpx 6rpx #00000010; | |||||
display: flex; | |||||
justify-content: center; | |||||
align-items: center; | |||||
overflow: hidden; | |||||
z-index: 999; | |||||
.icon { | |||||
position: relative; | |||||
width: 80rpx; | |||||
height: 80rpx; | |||||
margin: 0 20rpx; | |||||
image { | |||||
width: 80rpx; | |||||
height: 80rpx; | |||||
} | |||||
.num { | |||||
position: absolute; | |||||
right: 10rpx; | |||||
top: 0rpx; | |||||
background-color: $uni-color; | |||||
color: #fff; | |||||
font-size: 18rpx; | |||||
border-radius: 50%; | |||||
height: 30rpx; | |||||
width: 30rpx; | |||||
display: flex; | |||||
justify-content: center; | |||||
align-items: center; | |||||
} | |||||
} | |||||
.price { | |||||
.count { | |||||
display: flex; | |||||
font-size: 26rpx; | |||||
align-items: center; | |||||
view { | |||||
color: $uni-color; | |||||
margin-left: 10rpx; | |||||
text { | |||||
font-size: 32rpx; | |||||
font-weight: 900; | |||||
} | |||||
} | |||||
} | |||||
.text { | |||||
font-size: 20rpx; | |||||
color: #717171; | |||||
} | |||||
} | |||||
.btn { | |||||
margin-left: auto; | |||||
background-color: $uni-color; | |||||
height: 100%; | |||||
padding: 0 50rpx; | |||||
color: #fff; | |||||
display: flex; | |||||
justify-content: center; | |||||
align-items: center; | |||||
} | |||||
} | |||||
} | |||||
</style> |
@ -0,0 +1,582 @@ | |||||
<template> | |||||
<view class="page"> | |||||
<!-- 导航栏 --> | |||||
<navbar title="个人中心" leftClick @leftClick="$utils.navigateBack" bgColor="#E3441A" color="#fff" /> | |||||
<!-- 头部 --> | |||||
<view class="head"> | |||||
<view class="headImage"> | |||||
<image :src="userInfo.headImage" mode="aspectFill"></image> | |||||
</view> | |||||
<view class="user-info"> | |||||
<view class="user-base-info"> | |||||
<view class="user-base-top"> | |||||
<view class="user-name">{{ userInfo.nickName }}</view> | |||||
<view class="member-level"> | |||||
<image v-if="userInfo.role == 1" :src="configList.vip_user" mode="aspectFill" class="level"> | |||||
</image> | |||||
<image v-if="userInfo.role == 2" src="@/static/image/center/gold-min.png" mode="aspectFill" | |||||
class="level"> | |||||
</image> | |||||
<image v-if="userInfo.role == 3" src="@/static/image/center/sliver-min.png" | |||||
mode="aspectFill" class="level"> | |||||
</image> | |||||
</view> | |||||
<view class="user-tag"> | |||||
{{ userRole[userInfo.isPay] }} | |||||
</view> | |||||
</view> | |||||
<view class="edit-user" @click="$utils.navigateTo('/pages_order/mine/updateUser?back=true')"> | |||||
<image src="@/static/image/center/edit-icon.png" mode="aspectFill" class="edit-icon"></image> | |||||
<view class="edit-btn"> | |||||
修改资料 | |||||
</view> | |||||
</view> | |||||
</view> | |||||
<view class="user-phone"> | |||||
手机号:{{ userInfo.phone }} | |||||
</view> | |||||
</view> | |||||
</view> | |||||
<!-- 会员卡片 --> | |||||
<view @click="$utils.navigateTo({ url: '/pages_order/mine/memberCenter' })" v-if="userInfo.role != 0" | |||||
class="earnings"> | |||||
<view v-if="index + 1 == userInfo.role" v-for="(item, index) in vipList" :key="item.id" class="member-item"> | |||||
<image :src="item.headImage" mode="aspectFill" class="member-image"></image> | |||||
<view class="member-info"> | |||||
<view class="profile-photo"> | |||||
<image :src="userInfo.headImage" mode="aspectFill" class="pro-img"></image> | |||||
<view class="open-status"> | |||||
开通时间:{{ riceInfo.openTime }} | |||||
</view> | |||||
</view> | |||||
<view class="open"> | |||||
</view> | |||||
</view> | |||||
</view> | |||||
</view> | |||||
<!-- 佣金数据 --> | |||||
<view @click="$utils.navigateTo('/pages_order/mine/withdraw')" class="brokerage-data" | |||||
:class="{ 'brokerage-data-mt': !userInfo.role }"> | |||||
<view class="brokerage"> | |||||
<image :src="configList.money_image" mode="aspectFill" class="brokerage-img"></image> | |||||
<div class="main"> | |||||
<div class="title">我的佣金</div> | |||||
<div class="money">¥{{ riceInfo.canWithdraw || 0 }}</div> | |||||
</div> | |||||
</view> | |||||
<view class="balance"> | |||||
<image :src="configList.price_image" mode="aspectFill" class="balance-img"></image> | |||||
<div class="main"> | |||||
<div class="title">我的余额</div> | |||||
<div class="money">¥{{ riceInfo.balance || 0 }}</div> | |||||
</div> | |||||
</view> | |||||
</view> | |||||
<!-- 我的服务 --> | |||||
<view class="myServer"> | |||||
<view class="server-title"> | |||||
我的服务 | |||||
</view> | |||||
<view class="box"> | |||||
<view class="boxs" @click="$utils.navigateTo('/pages/index/order?type=0')"> | |||||
<image src="@/static/image/center/1.png" mode="aspectFill" /> | |||||
<view class="title">我的订单</view> | |||||
</view> | |||||
<view class="boxs" @click="$utils.navigateTo('/pages_order/mine/partner')"> | |||||
<image src="@/static/image/center/2.png" mode="aspectFill" /> | |||||
<view class="title">我的团队</view> | |||||
</view> | |||||
<view class="boxs" @click="$utils.navigateTo('/pages_order/home/contact')"> | |||||
<image src="@/static/image/center/3.png" mode="aspectFill" /> | |||||
<view class="title">联系客服</view> | |||||
</view> | |||||
<view class="boxs" @click="$utils.navigateTo('/pages_order/mine/promotion')"> | |||||
<image src="@/static/image/center/4.png" mode="aspectFill" /> | |||||
<view class="title">邀请好友</view> | |||||
</view> | |||||
</view> | |||||
<view class="box"> | |||||
<view class="boxs" @click="$utils.navigateTo('/pages_order/mine/recruit')"> | |||||
<image src="@/static/image/center/5.png" mode="aspectFill" /> | |||||
<view class="title">合伙人招募</view> | |||||
</view> | |||||
<view class="boxs" @click="$utils.navigateTo('/pages_order/mine/memberCenter')"> | |||||
<image src="@/static/image/center/6.png" mode="aspectFill" /> | |||||
<view class="title">会员权益</view> | |||||
</view> | |||||
<view class="boxs" @click="$utils.navigateTo('/pages_order/mine/coupon')"> | |||||
<image src="@/static/image/center/7.png" mode="aspectFill" /> | |||||
<view class="title">优惠券</view> | |||||
</view> | |||||
<view class="boxs" @click="$utils.navigateTo('/pages_order/mine/help')"> | |||||
<image src="@/static/image/center/8.png" mode="aspectFill" /> | |||||
<view class="title">帮助与反馈</view> | |||||
</view> | |||||
</view> | |||||
<view class="box"> | |||||
<view class="boxs" @click="$utils.navigateTo('/pages_order/mine/address')"> | |||||
<image src="@/static/image/center/address.png" mode="aspectFill" /> | |||||
<view class="title">我的地址</view> | |||||
</view> | |||||
<view class="boxs" @click="$utils.navigateTo('/pages_order/order/giftList')"> | |||||
<image src="@/static/image/center/9.png" mode="aspectFill" /> | |||||
<view class="title">礼包列表</view> | |||||
</view> | |||||
<view class="boxs" @click="logout"> | |||||
<image src="@/static/image/center/logout.png" mode="aspectFill" /> | |||||
<view class="title">退出登录</view> | |||||
</view> | |||||
</view> | |||||
</view> | |||||
<!-- 广告 --> | |||||
<div v-if="showAdvertising" class="ad" @click="$utils.navigateTo('/pages_order/mine/recruit')"> | |||||
<swiper class="swiper" circular :indicator-dots="indicatorDots" :autoplay="true" :interval="2000" | |||||
:duration="duration"> | |||||
<swiper-item v-for="(item, index) in adList" :key="index"> | |||||
<view class="swiper-main"> | |||||
<view @click="closeAdvertising" class="close"> | |||||
<image src="@/static/image/center/close.png" mode="aspectFill" class="close-img"></image> | |||||
</view> | |||||
<image :src="item" mode="aspectFill" class="swiper-main-img"></image> | |||||
<div class="ad-tag"> | |||||
<image src="@/static/image/center/ad-tag.png" mode="aspectFill" class="ad-tag-img"></image> | |||||
</div> | |||||
</view> | |||||
</swiper-item> | |||||
</swiper> | |||||
</div> | |||||
<customerServicePopup ref="customerServicePopup" /> | |||||
<tabber select="center" /> | |||||
</view> | |||||
</template> | |||||
<script> | |||||
import tabber from '@/components/base/tabbar.vue' | |||||
import { | |||||
mapState | |||||
} from 'vuex' | |||||
import customerServicePopup from '@/components/config/customerServicePopup.vue' | |||||
export default { | |||||
components: { | |||||
tabber, | |||||
customerServicePopup, | |||||
}, | |||||
computed: { | |||||
...mapState(['riceInfo']), | |||||
adList() { | |||||
let arr = []; | |||||
if (this.configList?.shop_get_image) { | |||||
arr = this.configList?.shop_get_image?.split(',') | |||||
} | |||||
return arr | |||||
} | |||||
}, | |||||
data() { | |||||
return { | |||||
vipType: ['普通会员', '黄金会员', '渠道商'], | |||||
vipImage: ['vip_vip', 'vip_user', 'vip_shop'], | |||||
vipList: [], | |||||
showAdvertising: true, | |||||
userRole: ['会员', '用户', '渠道'], | |||||
indicatorDots: true, | |||||
duration: 500 | |||||
} | |||||
}, | |||||
onShow() { | |||||
this.$store.commit('getUserInfo') | |||||
this.$store.commit('getRiceInfo') | |||||
this.getMemberCardData(); | |||||
}, | |||||
methods: { | |||||
clickNo() { | |||||
uni.showModal({ | |||||
title: '暂未开放', | |||||
}) | |||||
}, | |||||
logout() { | |||||
uni.showModal({ | |||||
title: '确认退出登录吗', | |||||
success: (r) => { | |||||
if (r.confirm) { | |||||
this.$store.commit('logout', true) | |||||
} | |||||
} | |||||
}) | |||||
}, | |||||
//关闭广告 | |||||
closeAdvertising() { | |||||
this.showAdvertising = false; | |||||
}, | |||||
//获取会员卡片数据 | |||||
getMemberCardData() { | |||||
this.$api('getRiceVipList', res => { | |||||
if (res.code == 200) { | |||||
this.vipList = res.result | |||||
} | |||||
}) | |||||
} | |||||
} | |||||
} | |||||
</script> | |||||
<style scoped lang="scss"> | |||||
.page { | |||||
// 头部 | |||||
.head { | |||||
display: flex; | |||||
align-items: center; | |||||
padding: 60rpx 20rpx 120rpx 20rpx; | |||||
background: $uni-color; | |||||
.headImage { | |||||
width: 130rpx; | |||||
height: 130rpx; | |||||
background-image: url(/static/image/center/head-img.png); | |||||
background-repeat: no-repeat; | |||||
background-position: 50%, 50%; | |||||
background-size: 100%; | |||||
overflow: hidden; | |||||
border-radius: 50%; | |||||
margin-right: 20rpx; | |||||
image { | |||||
width: 100%; | |||||
height: 100%; | |||||
} | |||||
} | |||||
.user-info { | |||||
width: calc(100% - 130rpx); | |||||
.user-base-info { | |||||
display: flex; | |||||
flex-wrap: wrap; | |||||
justify-content: space-between; | |||||
.user-base-top { | |||||
width: 65%; | |||||
display: flex; | |||||
align-items: center; | |||||
flex-wrap: wrap; | |||||
color: white; | |||||
.user-name { | |||||
max-width: calc(100% - 240rpx); | |||||
white-space: nowrap; | |||||
text-overflow: ellipsis; | |||||
overflow: hidden; | |||||
font-size: 34rpx; | |||||
} | |||||
.member-level { | |||||
margin-left: 10rpx; | |||||
.level { | |||||
width: 120rpx; | |||||
height: 60rpx; | |||||
} | |||||
} | |||||
.user-tag { | |||||
display: flex; | |||||
align-items: center; | |||||
justify-content: center; | |||||
background: #000; | |||||
width: 100rpx; | |||||
height: 40rpx; | |||||
border-radius: 20rpx; | |||||
font-size: 24rpx; | |||||
margin-left: 10rpx; | |||||
} | |||||
} | |||||
.edit-user { | |||||
width: 35%; | |||||
display: flex; | |||||
align-items: center; | |||||
justify-content: flex-end; | |||||
.edit-icon { | |||||
width: 30rpx; | |||||
height: 30rpx; | |||||
} | |||||
.edit-btn { | |||||
color: white; | |||||
margin-left: 10rpx; | |||||
} | |||||
} | |||||
} | |||||
.user-phone { | |||||
color: white; | |||||
font-size: 24rpx; | |||||
} | |||||
} | |||||
} | |||||
// 会员卡片 | |||||
.earnings { | |||||
padding: 0rpx 20rpx; | |||||
box-sizing: border-box; | |||||
margin-top: -18%; | |||||
.member-item { | |||||
position: relative; | |||||
.member-image { | |||||
width: 100%; | |||||
height: 300rpx; | |||||
border-radius: 20rpx; | |||||
} | |||||
.member-info { | |||||
position: absolute; | |||||
bottom: 30rpx; | |||||
left: 0rpx; | |||||
display: flex; | |||||
align-items: center; | |||||
padding: 0rpx 40rpx; | |||||
box-sizing: border-box; | |||||
width: 100%; | |||||
.profile-photo { | |||||
display: flex; | |||||
justify-content: center; | |||||
align-items: center; | |||||
.pro-img { | |||||
width: 60rpx; | |||||
height: 60rpx; | |||||
border-radius: 50%; | |||||
} | |||||
.open-status { | |||||
color: #F8A95F; | |||||
border: 1px solid #F8A95F; | |||||
border-radius: 30rpx; | |||||
padding: 7rpx 20rpx; | |||||
margin-left: 10rpx; | |||||
} | |||||
} | |||||
.open { | |||||
font-size: 26rpx; | |||||
margin-left: 20rpx; | |||||
} | |||||
} | |||||
} | |||||
} | |||||
// 佣金数据 | |||||
.brokerage-data { | |||||
padding: 20rpx; | |||||
background: white; | |||||
border-radius: 20rpx; | |||||
display: flex; | |||||
flex-wrap: wrap; | |||||
box-sizing: border-box; | |||||
margin: 20rpx 20rpx 20rpx 20rpx; | |||||
.brokerage, | |||||
.balance { | |||||
display: flex; | |||||
flex-wrap: wrap; | |||||
width: 50%; | |||||
.brokerage-img, | |||||
.balance-img { | |||||
width: 50%; | |||||
height: auto; | |||||
} | |||||
.main { | |||||
display: flex; | |||||
flex-direction: column; | |||||
justify-content: space-around; | |||||
width: 50%; | |||||
box-sizing: border-box; | |||||
padding: 30rpx 0rpx; | |||||
.title { | |||||
font-size: 34rpx; | |||||
} | |||||
.money { | |||||
font-size: 40rpx; | |||||
color: $uni-color; | |||||
font-weight: bold; | |||||
} | |||||
} | |||||
} | |||||
} | |||||
.brokerage-data-mt { | |||||
margin-top: 50rpx; | |||||
} | |||||
// 我的服务 | |||||
.myServer { | |||||
margin: 0rpx 20rpx 20rpx 20rpx; | |||||
background: white; | |||||
border-radius: 20rpx; | |||||
padding: 30rpx 20rpx; | |||||
box-sizing: border-box; | |||||
box-shadow: 0 4rpx 20rpx rgba(0, 0, 0, 0.05); | |||||
.server-title { | |||||
margin-bottom: 30rpx; | |||||
font-size: 36rpx; | |||||
font-weight: 600; | |||||
color: #333; | |||||
position: relative; | |||||
padding-left: 20rpx; | |||||
&::before { | |||||
content: ''; | |||||
position: absolute; | |||||
left: 0; | |||||
top: 50%; | |||||
transform: translateY(-50%); | |||||
width: 8rpx; | |||||
height: 32rpx; | |||||
background: $uni-color; | |||||
border-radius: 4rpx; | |||||
} | |||||
} | |||||
.box { | |||||
display: flex; | |||||
width: 100%; | |||||
margin-bottom: 30rpx; | |||||
gap: 20rpx; | |||||
.boxs { | |||||
width: 23%; | |||||
display: flex; | |||||
flex-direction: column; | |||||
justify-content: center; | |||||
align-items: center; | |||||
padding: 20rpx 0; | |||||
border-radius: 16rpx; | |||||
transition: all 0.3s ease; | |||||
position: relative; | |||||
overflow: hidden; | |||||
&::after { | |||||
content: ''; | |||||
position: absolute; | |||||
top: 0; | |||||
left: 0; | |||||
width: 100%; | |||||
height: 100%; | |||||
background: rgba(227, 68, 26, 0.05); | |||||
opacity: 0; | |||||
transition: opacity 0.3s ease; | |||||
z-index: 1; | |||||
} | |||||
&:active { | |||||
transform: scale(0.95); | |||||
&::after { | |||||
opacity: 1; | |||||
} | |||||
} | |||||
image { | |||||
width: 70rpx; | |||||
height: 70rpx; | |||||
display: block; | |||||
margin: 0rpx auto 16rpx auto; | |||||
position: relative; | |||||
z-index: 2; | |||||
transition: transform 0.3s ease; | |||||
} | |||||
.title { | |||||
font-size: 26rpx; | |||||
color: #333; | |||||
position: relative; | |||||
z-index: 2; | |||||
transition: color 0.3s ease; | |||||
} | |||||
&:active { | |||||
image { | |||||
transform: translateY(-4rpx); | |||||
} | |||||
.title { | |||||
color: $uni-color; | |||||
} | |||||
} | |||||
} | |||||
&:last-child { | |||||
margin-bottom: 0rpx; | |||||
} | |||||
} | |||||
} | |||||
// 广告 | |||||
.ad { | |||||
margin: 0rpx 20rpx; | |||||
.swiper { | |||||
.swiper-main { | |||||
position: relative; | |||||
.close { | |||||
position: absolute; | |||||
top: 20rpx; | |||||
right: 20rpx; | |||||
.close-img { | |||||
width: 40rpx; | |||||
height: 40rpx; | |||||
} | |||||
} | |||||
.swiper-main-img { | |||||
width: 100%; | |||||
height: 200rpx; | |||||
border-radius: 20rpx; | |||||
} | |||||
.ad-tag { | |||||
position: absolute; | |||||
left: 20rpx; | |||||
bottom: 20rpx; | |||||
.ad-tag-img { | |||||
width: 120rpx; | |||||
height: auto; | |||||
} | |||||
} | |||||
} | |||||
} | |||||
} | |||||
} | |||||
</style> |
@ -0,0 +1,38 @@ | |||||
export const mockCartData = { | |||||
totalPrice: 0.0, | |||||
selectedCount: 0, | |||||
items: [ | |||||
{ | |||||
id: 1, | |||||
name: '豆角炒鸡蛋', | |||||
price: 9.9, | |||||
image: '/static/image/红烧肉.png', | |||||
quantity: 1, | |||||
sold: 235 | |||||
}, | |||||
{ | |||||
id: 2, | |||||
name: '豆角炒鸡蛋', | |||||
price: 9.9, | |||||
image: '/static/image/红烧肉.png', | |||||
quantity: 1, | |||||
sold: 235 | |||||
}, | |||||
{ | |||||
id: 3, | |||||
name: '豆角炒鸡蛋', | |||||
price: 9.9, | |||||
image: '/static/image/红烧肉.png', | |||||
quantity: 1, | |||||
sold: 235 | |||||
}, | |||||
{ | |||||
id: 4, | |||||
name: '豆角炒鸡蛋', | |||||
price: 9.9, | |||||
image: '/static/image/红烧肉.png', | |||||
quantity: 1, | |||||
sold: 235 | |||||
} | |||||
] | |||||
} |