<template> <div> <div class="goods-recommend">{{title ? `--${title}-- `:''}}</div> <div class="goods-list"> <div @click="handleClick(item)" class="goods-item" v-for="(item, item_index) in goodsList" :key="item_index"> <div class="goods-img"> <u-image :src="item.content.thumbnail" mode="aspectFill" height="350rpx" width="100%"> <u-loading slot="loading"></u-loading> </u-image> </div> <div class="goods-desc"> <div class="goods-title"> {{ item.content.goodsName }} </div> <div class="goods-bottom"> <div class="goods-price">¥{{ item.content.price | unitPrice }}</div> </div> </div> </div> </div> </div> </template> <script> import { getGoodsList } from "@/api/goods.js"; export default { data() { return { goodsList: [], params: { pageNumber: 1, }, }; }, props: { title: { type: String, default: "", }, pageSize: { type: null, default: 12, }, categoryId: { type: null, default: "", }, storeId: { type: null, default: "", }, }, mounted() { this.initGoods(); }, methods: { /** * 初始化商品 */ async initGoods() { let submit = JSON.parse( JSON.stringify( Object.assign(this.params, { pageSize: this.pageSize, categoryId: this.categoryId, storeId: this.storeId, }) ) ); Object.keys(submit).map((key) => { if (!submit[key] || submit[key].length == 0) { delete submit[key]; } }); let goodsList = await getGoodsList(submit); this.goodsList.push(...goodsList.data.result.content); }, handleClick(item) { uni.navigateTo({ url: `/pages/product/goods?id=${item.content.id}&goodsId=${item.content.goodsId}`, }); }, }, }; </script> <style scoped lang="scss"> /**商品代码 */ $w_94: 94%; .goods-recommend { background: #f7f7f7; height: 100rpx; line-height: 100rpx; text-align: center; font-size: 30rpx; font-weight: bold; } .goods-list { display: flex; flex-wrap: wrap; background: #f7f7f7; } .goods-item { width: 50%; margin-bottom: 10px; border-radius: 0.4em; overflow: hidden; } .goods-img { position: relative; margin: 0 auto; width: $w_94; height: 350rpx; border-top-left-radius: 20rpx; border-top-right-radius: 20rpx; overflow: hidden; > img { width: 100%; height: 100%; } } .goods-desc { border-bottom-left-radius: 20rpx; border-bottom-right-radius: 20rpx; width: $w_94; background: #fff; padding: 8rpx 0 8rpx 8rpx; margin: 0 auto; > .goods-title { font-size: 12px; height: 70rpx; display: -webkit-box; font-weight: 500; -webkit-box-orient: vertical; -webkit-line-clamp: 2; overflow: hidden; } > .goods-bottom { display: flex; font-weight: bold; > .goods-price { line-height: 2; color: $main-color; } } } </style>