| @ -1,297 +1,353 @@ | |||
| <template> | |||
| <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 | |||
| 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> | |||
| </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"> | |||
| 去结算 | |||
| </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 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> | |||
| <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', | |||
| 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> | |||
| <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%; | |||
| } | |||
| } | |||
| .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; | |||
| 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; | |||
| 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; | |||
| } | |||
| 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 | |||
| } | |||
| ] | |||
| } | |||