<template>
|
|
<view class="page">
|
|
<!-- 导航栏 -->
|
|
<navbar :title="'团餐' + (mealInfo ? mealInfo.id : '')" leftClick @leftClick="$utils.navigateBack"
|
|
bgColor="#019245" color="#fff" />
|
|
|
|
<view class="container">
|
|
<!-- 修改后 -->
|
|
<view class="top-btn-group" v-if="status == '2'">
|
|
<button class="top-action-btn" @click="test1">通知所有人取餐</button>
|
|
<button class="top-action-btn" @click="test2">通知所有人完成订单</button>
|
|
</view>
|
|
<!-- 成员列表 -->
|
|
<view class="member-list">
|
|
<!-- 使用封装的成员项组件 -->
|
|
<member-food-item v-for="(member, index) in members" :key="index" :member="member" :status="status"
|
|
:default-expanded="index === defaultExpandedIndex" @toggle="handleMemberToggle"
|
|
@sendNotice="handleSend(member)" @completeOrder="handleComplete(member)" />
|
|
</view>
|
|
|
|
<!-- 空数据提示 -->
|
|
<uv-empty v-if="members.length === 0" text="暂无成员" mode="list" style="padding-top: 200rpx;" />
|
|
</view>
|
|
</view>
|
|
</template>
|
|
|
|
<script>
|
|
import navbar from '@/components/base/navbar.vue'
|
|
import MemberFoodItem from '../components/order/MemberFoodItem.vue'
|
|
// 创造了一个新的status 用来代表当前列表应该的状态
|
|
// 0 待出餐 1 送餐中 2 待取餐 3 已完成
|
|
export default {
|
|
components: {
|
|
navbar,
|
|
MemberFoodItem
|
|
},
|
|
data() {
|
|
return {
|
|
mealId: null,
|
|
mealInfo: null,
|
|
defaultExpandedIndex: -1, // 默认不展开任何成员
|
|
members: [],
|
|
status: ''
|
|
}
|
|
},
|
|
onLoad(options) {
|
|
if (options.id) {
|
|
this.mealId = options.id
|
|
this.status = options.status
|
|
uni.showLoading({
|
|
title: '加载中'
|
|
})
|
|
// 得到当前订单的成员与其餐点信息
|
|
// this.getMealInfo(options.status)
|
|
this.$api('queryLeaderOrderListById', {
|
|
teambuyOrderLeaderId: this.mealId
|
|
}, res => {
|
|
uni.hideLoading()
|
|
if (res.code === 200 ){
|
|
this.members = res.result.orderMemberList
|
|
}
|
|
})
|
|
|
|
}
|
|
// console.log(options.status);
|
|
|
|
// this.members = mockFoodMember
|
|
},
|
|
methods: {
|
|
// 通知所有人取餐
|
|
test1 () {
|
|
this.$api('informOrderAll', { leaderOrderId: this.mealId }, res => {
|
|
if (res.code === 200) {
|
|
uni.showToast({
|
|
title: '通知成功',
|
|
icon: 'success'
|
|
})
|
|
setTimeout(() => {
|
|
this.$utils.navigateBack()
|
|
}, 500)
|
|
}
|
|
})
|
|
},
|
|
// 通知所有人完成订单
|
|
test2 () {
|
|
this.$api('finishOrderAll', { leaderOrderId: this.mealId }, res => {
|
|
if (res.code === 200) {
|
|
uni.showToast({
|
|
title: '通知成功',
|
|
icon: 'success'
|
|
})
|
|
setTimeout(() => {
|
|
this.$utils.navigateBack()
|
|
}, 500)
|
|
}
|
|
})
|
|
},
|
|
|
|
// 处理成员项展开/收起事件
|
|
handleMemberToggle(data) {
|
|
console.log(`成员 ${data.member.name} ${data.expanded ? '展开' : '收起'} 了餐点列表`);
|
|
// 可以在这里添加其他逻辑,如记录统计数据等
|
|
},
|
|
|
|
// 通知取餐
|
|
handleSend(member) {
|
|
uni.showLoading({
|
|
title: '通知中'
|
|
})
|
|
this.$api('informOrderOne', { memberOrderId: member.id }, res => {
|
|
uni.hideLoading()
|
|
if (res.code === 200) {
|
|
// this.$utils.showToast('通知成功')
|
|
uni.showToast({
|
|
title: '通知成功',
|
|
icon: 'success'
|
|
})
|
|
setTimeout(() => {
|
|
uni.navigateBack()
|
|
}, 500)
|
|
}
|
|
})
|
|
},
|
|
// 完成取餐
|
|
handleComplete(member) {
|
|
uni.showLoading({
|
|
title: '完成取餐中'
|
|
})
|
|
this.$api('finishOrderOne', { memberOrderId: member.id }, res => {
|
|
uni.hideLoading()
|
|
if (res.code === 200) {
|
|
// this.$utils.showToast('完成取餐')
|
|
uni.showToast({
|
|
title: '完成取餐',
|
|
icon: 'success'
|
|
})
|
|
setTimeout(() => {
|
|
uni.navigateBack()
|
|
}, 500)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style lang="scss" scoped>
|
|
.page {
|
|
background-color: #f5f5f5;
|
|
min-height: 100vh;
|
|
}
|
|
|
|
.container {
|
|
padding: 20rpx;
|
|
}
|
|
|
|
.member-list {
|
|
// 成员列表样式被移到组件中
|
|
}
|
|
|
|
.top-btn-group {
|
|
display: flex;
|
|
flex-direction: row;
|
|
justify-content: space-between;
|
|
gap: 24rpx;
|
|
margin-bottom: 32rpx;
|
|
margin-top: 16rpx;
|
|
padding: 0 20rpx;
|
|
}
|
|
|
|
.top-action-btn {
|
|
flex: 1;
|
|
background: linear-gradient(90deg, #01c97b 0%, #019245 100%);
|
|
color: #fff;
|
|
font-size: 32rpx;
|
|
font-weight: bold;
|
|
border: none;
|
|
border-radius: 16rpx;
|
|
box-shadow: 0 4rpx 12rpx rgba(1, 146, 69, 0.08);
|
|
padding: 24rpx 0;
|
|
margin: 0;
|
|
transition: background 0.2s;
|
|
letter-spacing: 2rpx;
|
|
outline: none;
|
|
}
|
|
|
|
.top-action-btn:active {
|
|
background: linear-gradient(90deg, #019245 0%, #01c97b 100%);
|
|
opacity: 0.85;
|
|
}
|
|
</style>
|