敢为人鲜小程序前端代码仓库
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

190 lines
5.8 KiB

  1. <template>
  2. <view class="page">
  3. <!-- 导航栏 -->
  4. <navbar :title="'团餐' + (mealInfo ? mealInfo.id : '')" leftClick @leftClick="$utils.navigateBack"
  5. bgColor="#019245" color="#fff" />
  6. <view class="container">
  7. <!-- 修改后 -->
  8. <view class="top-btn-group" v-if="status == '2'">
  9. <button class="top-action-btn" @click="test1">通知所有人取餐</button>
  10. <button class="top-action-btn" @click="test2">通知所有人完成订单</button>
  11. </view>
  12. <!-- 成员列表 -->
  13. <view class="member-list">
  14. <!-- 使用封装的成员项组件 -->
  15. <member-food-item v-for="(member, index) in members" :key="index" :member="member" :status="status"
  16. :default-expanded="index === defaultExpandedIndex" @toggle="handleMemberToggle"
  17. @sendNotice="handleSend(member)" @completeOrder="handleComplete(member)" />
  18. </view>
  19. <!-- 空数据提示 -->
  20. <uv-empty v-if="members.length === 0" text="暂无成员" mode="list" style="padding-top: 200rpx;" />
  21. </view>
  22. </view>
  23. </template>
  24. <script>
  25. import navbar from '@/components/base/navbar.vue'
  26. import MemberFoodItem from '../components/order/MemberFoodItem.vue'
  27. // 创造了一个新的status 用来代表当前列表应该的状态
  28. // 0 待出餐 1 送餐中 2 待取餐 3 已完成
  29. export default {
  30. components: {
  31. navbar,
  32. MemberFoodItem
  33. },
  34. data() {
  35. return {
  36. mealId: null,
  37. mealInfo: null,
  38. defaultExpandedIndex: -1, // 默认不展开任何成员
  39. members: [],
  40. status: ''
  41. }
  42. },
  43. onLoad(options) {
  44. if (options.id) {
  45. this.mealId = options.id
  46. this.status = options.status
  47. uni.showLoading({
  48. title: '加载中'
  49. })
  50. // 得到当前订单的成员与其餐点信息
  51. // this.getMealInfo(options.status)
  52. this.$api('queryLeaderOrderListById', {
  53. teambuyOrderLeaderId: this.mealId
  54. }, res => {
  55. uni.hideLoading()
  56. if (res.code === 200 ){
  57. this.members = res.result.orderMemberList
  58. }
  59. })
  60. }
  61. // console.log(options.status);
  62. // this.members = mockFoodMember
  63. },
  64. methods: {
  65. // 通知所有人取餐
  66. test1 () {
  67. this.$api('informOrderAll', { leaderOrderId: this.mealId }, res => {
  68. if (res.code === 200) {
  69. uni.showToast({
  70. title: '通知成功',
  71. icon: 'success'
  72. })
  73. setTimeout(() => {
  74. this.$utils.navigateBack()
  75. }, 500)
  76. }
  77. })
  78. },
  79. // 通知所有人完成订单
  80. test2 () {
  81. this.$api('finishOrderAll', { leaderOrderId: this.mealId }, res => {
  82. if (res.code === 200) {
  83. uni.showToast({
  84. title: '通知成功',
  85. icon: 'success'
  86. })
  87. setTimeout(() => {
  88. this.$utils.navigateBack()
  89. }, 500)
  90. }
  91. })
  92. },
  93. // 处理成员项展开/收起事件
  94. handleMemberToggle(data) {
  95. console.log(`成员 ${data.member.name} ${data.expanded ? '展开' : '收起'} 了餐点列表`);
  96. // 可以在这里添加其他逻辑,如记录统计数据等
  97. },
  98. // 通知取餐
  99. handleSend(member) {
  100. uni.showLoading({
  101. title: '通知中'
  102. })
  103. this.$api('informOrderOne', { memberOrderId: member.id }, res => {
  104. uni.hideLoading()
  105. if (res.code === 200) {
  106. // this.$utils.showToast('通知成功')
  107. uni.showToast({
  108. title: '通知成功',
  109. icon: 'success'
  110. })
  111. setTimeout(() => {
  112. uni.navigateBack()
  113. }, 500)
  114. }
  115. })
  116. },
  117. // 完成取餐
  118. handleComplete(member) {
  119. uni.showLoading({
  120. title: '完成取餐中'
  121. })
  122. this.$api('finishOrderOne', { memberOrderId: member.id }, res => {
  123. uni.hideLoading()
  124. if (res.code === 200) {
  125. // this.$utils.showToast('完成取餐')
  126. uni.showToast({
  127. title: '完成取餐',
  128. icon: 'success'
  129. })
  130. setTimeout(() => {
  131. uni.navigateBack()
  132. }, 500)
  133. }
  134. })
  135. }
  136. }
  137. }
  138. </script>
  139. <style lang="scss" scoped>
  140. .page {
  141. background-color: #f5f5f5;
  142. min-height: 100vh;
  143. }
  144. .container {
  145. padding: 20rpx;
  146. }
  147. .member-list {
  148. // 成员列表样式被移到组件中
  149. }
  150. .top-btn-group {
  151. display: flex;
  152. flex-direction: row;
  153. justify-content: space-between;
  154. gap: 24rpx;
  155. margin-bottom: 32rpx;
  156. margin-top: 16rpx;
  157. padding: 0 20rpx;
  158. }
  159. .top-action-btn {
  160. flex: 1;
  161. background: linear-gradient(90deg, #01c97b 0%, #019245 100%);
  162. color: #fff;
  163. font-size: 32rpx;
  164. font-weight: bold;
  165. border: none;
  166. border-radius: 16rpx;
  167. box-shadow: 0 4rpx 12rpx rgba(1, 146, 69, 0.08);
  168. padding: 24rpx 0;
  169. margin: 0;
  170. transition: background 0.2s;
  171. letter-spacing: 2rpx;
  172. outline: none;
  173. }
  174. .top-action-btn:active {
  175. background: linear-gradient(90deg, #019245 0%, #01c97b 100%);
  176. opacity: 0.85;
  177. }
  178. </style>