<template>
|
|
<view class="member-wrapper">
|
|
<!-- 成员基本信息 -->
|
|
<view class="member-item">
|
|
<view class="member-avatar">
|
|
<image :src="member.avatar" mode="aspectFill" />
|
|
</view>
|
|
<view class="member-info">
|
|
<text class="member-name">{{ member.name }}</text>
|
|
</view>
|
|
<view class="check-food-btn" @click="toggleExpand">
|
|
<text>{{ isExpanded ? '收起餐点' : '查看餐点' }}</text>
|
|
<uv-icon :name="isExpanded ? 'arrow-up' : 'arrow-down'" color="#019245" size="30rpx"></uv-icon>
|
|
</view>
|
|
</view>
|
|
|
|
<!-- 餐点列表展开区域 - 使用v-if替代uv-transition -->
|
|
<view class="food-detail" v-if="isExpanded">
|
|
<view class="fold-handle" @click="toggleExpand">
|
|
<uv-icon name="arrow-up" color="#999" size="24rpx"></uv-icon>
|
|
<text class="fold-text">点击收起</text>
|
|
</view>
|
|
<view class="food-list">
|
|
<view class="food-item" v-for="(food, index) in member.food" :key="index">
|
|
<view class="food-left">
|
|
<image class="food-image" :src="food.image" mode="aspectFill"></image>
|
|
<view class="food-info">
|
|
<text class="food-name">{{ food.name }}</text>
|
|
<view class="food-sold">
|
|
<uv-icon name="checkmark-circle" color="#ccc" size="24rpx"></uv-icon>
|
|
<text>已售出 {{ food.sold }}单</text>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
<view class="food-right">
|
|
<text class="food-price">¥{{ food.price.toFixed(2) }}</text>
|
|
<text class="food-quantity">×{{ food.quantity }}</text>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</template>
|
|
|
|
<script>
|
|
export default {
|
|
name: 'MemberFoodItem',
|
|
props: {
|
|
// 成员信息,包含头像、姓名和餐点列表
|
|
member: {
|
|
type: Object,
|
|
required: true
|
|
},
|
|
// 是否默认展开
|
|
defaultExpanded: {
|
|
type: Boolean,
|
|
default: false
|
|
}
|
|
},
|
|
data() {
|
|
return {
|
|
isExpanded: false
|
|
}
|
|
},
|
|
created() {
|
|
// 初始化展开状态
|
|
this.isExpanded = this.defaultExpanded;
|
|
},
|
|
methods: {
|
|
// 切换展开/收起状态
|
|
toggleExpand() {
|
|
this.isExpanded = !this.isExpanded;
|
|
// 触发事件,通知父组件状态变化
|
|
this.$emit('toggle', {
|
|
member: this.member,
|
|
expanded: this.isExpanded
|
|
});
|
|
}
|
|
}
|
|
}
|
|
</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-food-btn {
|
|
border: 2rpx solid $uni-color;
|
|
border-radius: 30rpx;
|
|
display: flex;
|
|
align-items: center;
|
|
color: $uni-color;
|
|
font-size: 28rpx;
|
|
padding: 10rpx 20rpx;
|
|
gap: 10rpx;
|
|
transition: all 0.3s;
|
|
|
|
&:active {
|
|
opacity: 0.8;
|
|
transform: scale(0.98);
|
|
}
|
|
}
|
|
}
|
|
|
|
.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: #999;
|
|
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: 100rpx;
|
|
height: 100rpx;
|
|
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: #999;
|
|
|
|
text {
|
|
margin-left: 4rpx;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
.food-right {
|
|
text-align: right;
|
|
|
|
.food-price {
|
|
font-size: 28rpx;
|
|
color: #f00;
|
|
display: block;
|
|
margin-bottom: 10rpx;
|
|
}
|
|
|
|
.food-quantity {
|
|
font-size: 24rpx;
|
|
color: #333;
|
|
display: block;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
</style>
|