GoodsRecommend.vue 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. <template>
  2. <div class="goods-recommend" v-loading="loading">
  3. <h4>商品精选</h4>
  4. <ul v-if="list.length">
  5. <li v-for="(item, index) in list" :key="index" @click="$util.pushToTab({ path: '/sku/' + item.sku_id })">
  6. <div class="img-wrap"><img :src="$img(item['sku_image'], { size: 'mid' })" @error="imageError(index)" /></div>
  7. <div class="price">¥{{ item.discount_price }}</div>
  8. <p class="sku-name">{{ item.goods_name }}</p>
  9. <div class="info-wrap"></div>
  10. </li>
  11. </ul>
  12. </div>
  13. </template>
  14. <script>
  15. import { mapGetters } from 'vuex';
  16. import { goodsRecommend } from '../api/goods/goods';
  17. export default {
  18. name: 'goods_recommend',
  19. props: {
  20. page: {
  21. type: [Number, String],
  22. default: 1
  23. },
  24. pageSize: {
  25. type: [Number, String],
  26. default: 5
  27. }
  28. },
  29. data: () => {
  30. return {
  31. loading: true,
  32. list: []
  33. };
  34. },
  35. created() {
  36. this.getGoodsRecommend();
  37. },
  38. computed: {
  39. ...mapGetters(['defaultGoodsImage'])
  40. },
  41. methods: {
  42. getGoodsRecommend() {
  43. goodsRecommend({
  44. page: this.page,
  45. page_size: this.pageSize
  46. })
  47. .then(res => {
  48. if (res.code == 0) this.list = res.data.list;
  49. this.loading = false;
  50. })
  51. .catch(res => {
  52. this.loading = false;
  53. });
  54. },
  55. imageError(index) {
  56. this.list[index].sku_image = this.defaultGoodsImage;
  57. }
  58. }
  59. };
  60. </script>
  61. <style lang="scss" scoped>
  62. .goods-recommend {
  63. border: 1px solid #eeeeee;
  64. h4 {
  65. margin: 10px;
  66. }
  67. ul {
  68. li {
  69. padding: 10px;
  70. cursor: pointer;
  71. .price {
  72. color: $base-color;
  73. font-size: 16px;
  74. }
  75. .sku-name {
  76. font-size: $ns-font-size-sm;
  77. overflow: hidden;
  78. text-overflow: ellipsis;
  79. display: -webkit-box;
  80. -webkit-line-clamp: 2;
  81. -webkit-box-orient: vertical;
  82. }
  83. &:hover {
  84. color: $base-color;
  85. }
  86. }
  87. }
  88. }
  89. </style>