敢为人鲜小程序前端代码仓库
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.

152 lines
4.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. <!-- test按钮 -->
  8. <button @click="test1">通知所有人取餐</button>
  9. <button @click="test1">通知所有人完成订单</button>
  10. <!-- 成员列表 -->
  11. <view class="member-list">
  12. <!-- 使用封装的成员项组件 -->
  13. <member-food-item
  14. v-for="(member, index) in members"
  15. :key="index"
  16. :member="member"
  17. :status="status"
  18. :default-expanded="index === defaultExpandedIndex"
  19. @toggle="handleMemberToggle"
  20. @sendNotice="handleSend(member)"
  21. @completeOrder="handleComplete(member)"
  22. />
  23. </view>
  24. <!-- 空数据提示 -->
  25. <uv-empty v-if="members.length === 0" text="暂无成员" mode="list" style="padding-top: 200rpx;" />
  26. </view>
  27. </view>
  28. </template>
  29. <script>
  30. import navbar from '@/components/base/navbar.vue'
  31. import MemberFoodItem from '../components/order/MemberFoodItem.vue'
  32. // 创造了一个新的status 用来代表当前列表应该的状态
  33. // 0 待出餐 1 送餐中 2 待取餐 3 已完成
  34. export default {
  35. components: {
  36. navbar,
  37. MemberFoodItem
  38. },
  39. data() {
  40. return {
  41. mealId: null,
  42. mealInfo: null,
  43. defaultExpandedIndex: -1, // 默认不展开任何成员
  44. members: [],
  45. status: ''
  46. }
  47. },
  48. onLoad(options) {
  49. if (options.id) {
  50. this.mealId = options.id
  51. this.status = options.status
  52. uni.showLoading({
  53. title: '加载中'
  54. })
  55. // 得到当前订单的成员与其餐点信息
  56. // this.getMealInfo(options.status)
  57. this.$api('queryLeaderOrderListById', {
  58. teambuyOrderLeaderId: this.mealId
  59. }, res => {
  60. uni.hideLoading()
  61. if (res.code === 200 ){
  62. this.members = res.result.orderMemberList
  63. }
  64. })
  65. }
  66. // console.log(options.status);
  67. // this.members = mockFoodMember
  68. },
  69. methods: {
  70. // 通知所有人取餐
  71. test1 () {
  72. this.$api('informOrderAll', { leaderOrderId: this.mealId }, res => {
  73. if (res.code === 200) {
  74. this.$utils.showToast('通知成功')
  75. }
  76. })
  77. },
  78. // 通知所有人完成订单
  79. test2 () {
  80. this.$api('finishOrderAll', { leaderOrderId: this.mealId }, res => {
  81. if (res.code === 200) {
  82. this.$utils.showToast('通知成功')
  83. }
  84. })
  85. },
  86. // 处理成员项展开/收起事件
  87. handleMemberToggle(data) {
  88. console.log(`成员 ${data.member.name} ${data.expanded ? '展开' : '收起'} 了餐点列表`);
  89. // 可以在这里添加其他逻辑,如记录统计数据等
  90. },
  91. // 通知取餐
  92. handleSend(member) {
  93. uni.showLoading({
  94. title: '通知中'
  95. })
  96. this.$api('informOrderOne', { memberOrderId: member.id }, res => {
  97. uni.hideLoading()
  98. if (res.code === 200) {
  99. // this.$utils.showToast('通知成功')
  100. uni.showToast({
  101. title: '通知成功',
  102. icon: 'success'
  103. })
  104. setTimeout(() => {
  105. uni.navigateBack()
  106. }, 500)
  107. }
  108. })
  109. },
  110. // 完成取餐
  111. handleComplete(member) {
  112. uni.showLoading({
  113. title: '完成取餐中'
  114. })
  115. this.$api('finishOrderOne', { memberOrderId: member.id }, res => {
  116. uni.hideLoading()
  117. if (res.code === 200) {
  118. // this.$utils.showToast('完成取餐')
  119. uni.showToast({
  120. title: '完成取餐',
  121. icon: 'success'
  122. })
  123. setTimeout(() => {
  124. uni.navigateBack()
  125. }, 500)
  126. }
  127. })
  128. }
  129. }
  130. }
  131. </script>
  132. <style lang="scss" scoped>
  133. .page {
  134. background-color: #f5f5f5;
  135. min-height: 100vh;
  136. }
  137. .container {
  138. padding: 20rpx;
  139. }
  140. .member-list {
  141. // 成员列表样式被移到组件中
  142. }
  143. </style>