<template>
|
|
<view class="member-wrapper">
|
|
<!-- 成员基本信息 -->
|
|
<view class="member-item">
|
|
<view class="member-avatar">
|
|
<image :src="member.hanHaiMember.headImage" mode="aspectFill" />
|
|
</view>
|
|
<view class="member-info">
|
|
<text class="member-name">{{ member.hanHaiMember.nickName }}</text>
|
|
</view>
|
|
<view class="check-food-btn check-btn" @click="toggleExpand">
|
|
<text>{{ isExpanded ? '收起餐点' : '查看餐点' }}</text>
|
|
<uv-icon :name="isExpanded ? 'arrow-up' : 'arrow-down'" color="#019245" size="30rpx"></uv-icon>
|
|
</view>
|
|
<view v-if="status === '1'" class="check-notice-btn check-btn" @click="sendNotice">
|
|
<text>通知取餐</text>
|
|
</view>
|
|
<view v-if="status === '2'" class="check-notice-btn check-btn" @click="completeOrder">
|
|
<text>完成取餐</text>
|
|
</view>
|
|
</view>
|
|
|
|
<!-- 餐点列表展开区域 - 使用v-if替代uv-transition -->
|
|
<view class="food-detail" v-if="isExpanded">
|
|
<view class="food-list">
|
|
<view class="food-item" v-for="(food, index) in member.goodsList" :key="index">
|
|
<view class="food-left">
|
|
<image class="food-image" :src="food.goods.image" mode="aspectFill" />
|
|
<view class="food-info">
|
|
<text class="food-name">{{ food.goods.title }}</text>
|
|
<view class="food-sold">
|
|
<uv-icon name="checkmark-circle" color="#ccc" size="24rpx"></uv-icon>
|
|
<text>已售出 {{ food.goods.sales }}单</text>
|
|
</view>
|
|
<text class="food-price"> <text style="font-size: 20rpx; margin-right: 5rpx;">¥</text> {{ food.goods.price.toFixed(2) }}</text>
|
|
</view>
|
|
</view>
|
|
<view class="food-right">
|
|
<text class="food-quantity">×{{ food.num }}</text>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</template>
|
|
|
|
<script>
|
|
export default {
|
|
name: 'MemberFoodItem',
|
|
props: {
|
|
// 成员信息,包含头像、姓名和餐点列表
|
|
member: {
|
|
type: Object,
|
|
required: true
|
|
},
|
|
// 是否默认展开
|
|
defaultExpanded: {
|
|
type: Boolean,
|
|
default: false
|
|
},
|
|
// 从父页面获取的订单状态
|
|
status: {
|
|
type: String,
|
|
default: '0'
|
|
}
|
|
},
|
|
data() {
|
|
return {
|
|
isExpanded: false
|
|
}
|
|
},
|
|
created() {
|
|
// 初始化展开状态
|
|
this.isExpanded = this.defaultExpanded;
|
|
},
|
|
methods: {
|
|
// 切换展开/收起状态
|
|
toggleExpand() {
|
|
this.isExpanded = !this.isExpanded;
|
|
// 触发事件,通知父组件状态变化
|
|
this.$emit('toggle', {
|
|
member: this.member,
|
|
expanded: this.isExpanded
|
|
});
|
|
},
|
|
sendNotice() {
|
|
this.$emit('sendNotice')
|
|
// 模拟通知体验
|
|
// setTimeout(() => {
|
|
// uni.showLoading({
|
|
// title: '通知中...',
|
|
// icon: 'loading',
|
|
// duration: 2000
|
|
// })
|
|
// setTimeout(() => {
|
|
// uni.hideLoading()
|
|
// uni.showToast({
|
|
// title: '通知成功',
|
|
// icon: 'success',
|
|
// duration: 2000
|
|
// })
|
|
// }, 1200)
|
|
// }, 200)
|
|
// 这里存放通知函数的逻辑....
|
|
},
|
|
completeOrder() {
|
|
this.$emit('completeOrder')
|
|
// 模拟体验
|
|
// setTimeout(() => {
|
|
// uni.showLoading({
|
|
// title: '请稍等...',
|
|
// icon: 'loading',
|
|
// duration: 2000
|
|
// })
|
|
// setTimeout(() => {
|
|
// uni.hideLoading()
|
|
// uni.showToast({
|
|
// title: '已完成',
|
|
// icon: 'success',
|
|
// duration: 2000
|
|
// })
|
|
// }, 1200)
|
|
// }, 200)
|
|
// 这里执行函数逻辑
|
|
}
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style lang="scss" scoped>
|
|
.member-wrapper {
|
|
margin-bottom: 20rpx;
|
|
border-radius: 10rpx;
|
|
overflow: hidden;
|
|
|
|
.member-item {
|
|
display: flex;
|
|
align-items: center;
|
|
background-color: #fff;
|
|
padding: 30rpx 20rpx;
|
|
|
|
.member-avatar {
|
|
width: 70rpx;
|
|
height: 70rpx;
|
|
margin-right: 20rpx;
|
|
|
|
image {
|
|
width: 100%;
|
|
height: 100%;
|
|
border-radius: 10rpx;
|
|
}
|
|
}
|
|
|
|
.member-info {
|
|
flex: 1;
|
|
|
|
.member-name {
|
|
font-size: 30rpx;
|
|
font-weight: 500;
|
|
}
|
|
}
|
|
|
|
.check-btn{
|
|
border-radius: 30rpx;
|
|
display: flex;
|
|
align-items: center;
|
|
font-size: 26rpx;
|
|
gap: 10rpx;
|
|
transition: all 0.3s;
|
|
|
|
&:active {
|
|
opacity: 0.8;
|
|
transform: scale(0.98);
|
|
}
|
|
}
|
|
.check-food-btn {
|
|
border: 2rpx solid $uni-color;
|
|
color: $uni-color;
|
|
padding: 10rpx 20rpx;
|
|
}
|
|
.check-notice-btn{
|
|
padding: 10rpx 40rpx;
|
|
background-color: $uni-color;
|
|
color: #fff;
|
|
margin-left: 20rpx;
|
|
}
|
|
|
|
}
|
|
|
|
.food-detail {
|
|
background-color: #fff;
|
|
padding: 20rpx;
|
|
box-shadow: inset 0 4rpx 8rpx rgba(0, 0, 0, 0.05);
|
|
|
|
.fold-handle {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
padding: 10rpx 0;
|
|
margin-bottom: 10rpx;
|
|
border-bottom: 1px dashed #eeeeee;
|
|
|
|
.fold-text {
|
|
font-size: 24rpx;
|
|
color: $uni-color-third;
|
|
margin-left: 10rpx;
|
|
}
|
|
|
|
&:active {
|
|
opacity: 0.8;
|
|
}
|
|
}
|
|
|
|
.food-list {
|
|
.food-item {
|
|
display: flex;
|
|
justify-content: space-between;
|
|
align-items: center;
|
|
padding: 15rpx 0;
|
|
border-bottom: 1px solid #f5f5f5;
|
|
|
|
&:last-child {
|
|
border-bottom: none;
|
|
}
|
|
|
|
.food-left {
|
|
display: flex;
|
|
align-items: center;
|
|
|
|
.food-image {
|
|
width: 120rpx;
|
|
height: 120rpx;
|
|
// border-radius: 8rpx;
|
|
margin-right: 15rpx;
|
|
}
|
|
|
|
.food-info {
|
|
.food-name {
|
|
font-size: 28rpx;
|
|
color: #333;
|
|
margin-bottom: 10rpx;
|
|
display: block;
|
|
}
|
|
|
|
.food-sold {
|
|
display: flex;
|
|
align-items: center;
|
|
font-size: 24rpx;
|
|
color: $uni-color-third;
|
|
|
|
text {
|
|
margin-left: 4rpx;
|
|
}
|
|
}
|
|
.food-price {
|
|
font-size: 28rpx;
|
|
color: $uni-color-second;
|
|
display: block;
|
|
margin-bottom: 10rpx;
|
|
}
|
|
}
|
|
}
|
|
|
|
.food-right {
|
|
text-align: right;
|
|
|
|
|
|
.food-quantity {
|
|
font-size: 24rpx;
|
|
color: #333;
|
|
display: block;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
</style>
|