menu.vue 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. <template>
  2. <view class="menu-content">
  3. <uv-vtabs :chain="chain" :list="list" :height="height">
  4. <template v-for="(item,index) in list">
  5. <uv-vtabs-item :index="index" :key="index">
  6. <view class="menu-box">
  7. <view class="menu-title">{{item.name}}</view>
  8. <view class="menu-list">
  9. <view class="menu-item" @click="toCategory(item)">
  10. <image class="item-menu-image" :src="shopImage(item.icon)" mode="scaleToFill"></image>
  11. <view class="item-menu-name">{{item.name}}</view>
  12. </view>
  13. <view class="menu-item" v-for="(item1, index1) in item.children" :key="index1"
  14. @click="toCategory(item1)">
  15. <image class="item-menu-image" :src="shopImage(item1.icon)" mode=""></image>
  16. <view class="item-menu-name">{{item1.name}}</view>
  17. </view>
  18. </view>
  19. </view>
  20. </uv-vtabs-item>
  21. </template>
  22. </uv-vtabs>
  23. </view>
  24. </template>
  25. <script>
  26. import {
  27. getCategoryList
  28. } from '@/request/api/shop.js'
  29. export default {
  30. data() {
  31. return {
  32. list: [],
  33. chain: true
  34. }
  35. },
  36. computed: {
  37. height() {
  38. return uni.getWindowInfo().windowHeight - uni.upx2px(100);
  39. }
  40. },
  41. onLoad() {
  42. this.init();
  43. },
  44. methods: {
  45. async init() {
  46. uni.showLoading();
  47. let categoryData = await getCategoryList();
  48. if (categoryData.state) {
  49. this.list = categoryData.data;
  50. uni.hideLoading();
  51. }
  52. },
  53. toCategory(item) {
  54. this.$navigateTo('/subPages/shopPage/menuShop/menuShop?idCategory=' + item.id);
  55. }
  56. }
  57. }
  58. </script>
  59. <style scoped lang="scss">
  60. .menu-content {
  61. padding-top: 30rpx;
  62. }
  63. .menu-box {
  64. padding: 20rpx;
  65. .menu-title {
  66. font-size: 36rpx;
  67. font-weight: bold;
  68. padding-bottom: 20rpx;
  69. }
  70. }
  71. .item-menu-image {
  72. width: 120rpx;
  73. height: 120rpx;
  74. }
  75. .item-menu-name {
  76. font-weight: normal;
  77. font-size: 24rpx;
  78. }
  79. .menu-list {
  80. display: flex;
  81. flex-wrap: wrap;
  82. .menu-item {
  83. width: 33.33%;
  84. text-align: center;
  85. }
  86. }
  87. </style>