代码优化 — 智慧饭堂小程序订餐详情页

修改之前数据结构格式处理:
image.png
修改之前数据结构格式显示:
image.png
修改之前页面显示处理:
image.png

修改之后数据结构格式处理:
image.png

修改之后数据结构格式显示:
image.png

修改之后页面显示处理:
image.png
修改之后页面代码:

  1. <template>
  2. <view class="pi-pd-top-16">
  3. <view v-for="dateMeal in menuListDto" :key="dateMeal.date" class="pi-mg-bottom-16">
  4. <pi-card padding="24rpx 24rpx 0">
  5. <template slot="body">
  6. <view
  7. class="date pi-h-56 pi-bg-primary pi-radius-8 pi-flex-row-center pi-white pi-mg-bottom-32 pi-mg-top-18"
  8. style="width: 160rpx;"
  9. >
  10. {{ $dayjs(dateMeal.date).format('MM.DD') }}
  11. <text class="pi-mg-left-8">{{ $dayjs(dateMeal.date).format('ddd') }}</text>
  12. </view>
  13. <view v-for="meal in dateMeal.meal" :key="meal.id" class="pi-flex">
  14. <view
  15. v-for="mealTime in dateMeal.mealTime"
  16. :key="mealTime.key"
  17. class="meal-time pi-flex"
  18. :class="[mealTime.key === meal.mealTime ? 'pi-mg-right-24' : '']"
  19. >
  20. <template v-if="mealTime.key === meal.mealTime">
  21. <view
  22. class="pi-w-12 pi-h-12 pi-radius-round pi-mg-right-16 pi-mg-top-8"
  23. :style="[{ background: mealTime.color }]"
  24. />
  25. {{ mealTime.name }}
  26. </template>
  27. </view>
  28. <view class="menu-package pi-flex-sub">
  29. <view class="pi-fz-28 pi-fw-600 pi-mg-bottom-16 pi-flex-sub">
  30. {{ meal.id ? meal.menuName : '此餐不选' }}
  31. </view>
  32. <view class="pi-light-gray pi-fz-24 pi-mg-bottom-32" style="line-height: 1.5;">
  33. <view style="line-height: 1.3;">
  34. {{ meal.id ? meal.packageName : '' }}
  35. </view>
  36. </view>
  37. </view>
  38. <view class="price pi-text-right" style="width: 104rpx;">
  39. {{ (meal.id ? meal.price : 0) | moneyFormat }}
  40. </view>
  41. </view>
  42. </template>
  43. </pi-card>
  44. </view>
  45. </view>
  46. </template>
  47. <script>
  48. const TAG_NAME = 'PackageDetail'
  49. import groupBy from 'lodash/groupBy'
  50. export default {
  51. name: TAG_NAME,
  52. props: {
  53. daysInfo: {
  54. default() {
  55. return []
  56. }
  57. }
  58. },
  59. computed: {
  60. menuListDto() {
  61. const groupByDate = groupBy(this.daysInfo, meal => meal.date)
  62. const menuListDto = Object.keys(groupByDate)
  63. .map(date => ({
  64. date,
  65. menuList: groupBy(groupByDate[date], meal => meal.mealTime)
  66. }))
  67. .map(date => ({
  68. ...date,
  69. meal: Object.values(date.menuList).flat(),
  70. mealTime: Object.keys(date.menuList).map(mealTime => this.$consts.MEAL_TIMES[mealTime])
  71. }))
  72. return menuListDto
  73. }
  74. }
  75. }
  76. </script>

总结:
1、需要先分析好页面需要呈现的数据结构格式,然后按照格式对已有数据进行组装,最终将组合好的格式
在页面进行显示
2、将页面多余的代码删除
3、style样式绑定使用数组形式,兼容微信小程序
4、需要加强熟悉页面的作用和页面布局和数据处理