6 changed files with 192 additions and 11 deletions
-
119src/components/XtxGuess.vue
-
38src/pages/index/index.vue
-
14src/services/home.ts
-
1src/types/component.d.ts
-
13src/types/global.d.ts
-
18src/types/home.d.ts
@ -0,0 +1,119 @@ |
|||||
|
<template> |
||||
|
<!-- 猜你喜欢 --> |
||||
|
<view class="caption"> |
||||
|
<text class="text">猜你喜欢</text> |
||||
|
</view> |
||||
|
<view class="guess"> |
||||
|
<navigator |
||||
|
class="guess-item" |
||||
|
v-for="item in guessList" |
||||
|
:key="item.id" |
||||
|
:url="`/pages/goods/goods?id=${item.id}`" |
||||
|
> |
||||
|
<image class="image" mode="aspectFill" :src="item.picture"></image> |
||||
|
<view class="name"> {{ item.name }} </view> |
||||
|
<view class="price"> |
||||
|
<text class="small">¥</text> |
||||
|
<text>{{ item.price }}</text> |
||||
|
</view> |
||||
|
</navigator> |
||||
|
</view> |
||||
|
<view class="loading-text"> 正在加载... </view> |
||||
|
</template> |
||||
|
|
||||
|
<script setup lang="ts"> |
||||
|
import type { GuessItem } from '@/types/home' |
||||
|
import { getHomeGoodsGuessLikeAPI } from '@/services/home' |
||||
|
import { onMounted, ref } from 'vue' |
||||
|
// 猜你喜欢的列表 |
||||
|
const guessList = ref<GuessItem[]>([]) |
||||
|
|
||||
|
// 获取猜你喜欢数据 |
||||
|
const getHomeGoodsGuessLikeData = async () => { |
||||
|
const res = await getHomeGoodsGuessLikeAPI() |
||||
|
guessList.value = res.result.items |
||||
|
} |
||||
|
|
||||
|
// 组件挂载完毕 |
||||
|
onMounted(() => { |
||||
|
getHomeGoodsGuessLikeData() |
||||
|
}) |
||||
|
</script> |
||||
|
|
||||
|
<style lang="scss"> |
||||
|
:host { |
||||
|
display: block; |
||||
|
} |
||||
|
/* 分类标题 */ |
||||
|
.caption { |
||||
|
display: flex; |
||||
|
justify-content: center; |
||||
|
line-height: 1; |
||||
|
padding: 36rpx 0 40rpx; |
||||
|
font-size: 32rpx; |
||||
|
color: #262626; |
||||
|
.text { |
||||
|
display: flex; |
||||
|
justify-content: center; |
||||
|
align-items: center; |
||||
|
padding: 0 28rpx 0 30rpx; |
||||
|
|
||||
|
&::before, |
||||
|
&::after { |
||||
|
content: ''; |
||||
|
width: 20rpx; |
||||
|
height: 20rpx; |
||||
|
background-image: url(@/static/images/bubble.png); |
||||
|
background-size: contain; |
||||
|
margin: 0 10rpx; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
/* 猜你喜欢 */ |
||||
|
.guess { |
||||
|
display: flex; |
||||
|
flex-wrap: wrap; |
||||
|
justify-content: space-between; |
||||
|
padding: 0 20rpx; |
||||
|
.guess-item { |
||||
|
width: 345rpx; |
||||
|
padding: 24rpx 20rpx 20rpx; |
||||
|
margin-bottom: 20rpx; |
||||
|
border-radius: 10rpx; |
||||
|
overflow: hidden; |
||||
|
background-color: #fff; |
||||
|
} |
||||
|
.image { |
||||
|
width: 304rpx; |
||||
|
height: 304rpx; |
||||
|
} |
||||
|
.name { |
||||
|
height: 75rpx; |
||||
|
margin: 10rpx 0; |
||||
|
font-size: 26rpx; |
||||
|
color: #262626; |
||||
|
overflow: hidden; |
||||
|
text-overflow: ellipsis; |
||||
|
display: -webkit-box; |
||||
|
-webkit-line-clamp: 2; |
||||
|
-webkit-box-orient: vertical; |
||||
|
} |
||||
|
.price { |
||||
|
line-height: 1; |
||||
|
padding-top: 4rpx; |
||||
|
color: #cf4444; |
||||
|
font-size: 26rpx; |
||||
|
} |
||||
|
.small { |
||||
|
font-size: 80%; |
||||
|
} |
||||
|
} |
||||
|
// 加载提示文字 |
||||
|
.loading-text { |
||||
|
text-align: center; |
||||
|
font-size: 28rpx; |
||||
|
color: #666; |
||||
|
padding: 20rpx 0; |
||||
|
} |
||||
|
</style> |
@ -0,0 +1,13 @@ |
|||||
|
/** 通用分页结果类型 */ |
||||
|
export type PageResult<T> = { |
||||
|
/** 列表数据 */ |
||||
|
items: T[] |
||||
|
/** 总条数 */ |
||||
|
counts: number |
||||
|
/** 当前页数 */ |
||||
|
page: number |
||||
|
/** 总页数 */ |
||||
|
pages: number |
||||
|
/** 每页条数 */ |
||||
|
pageSize: number |
||||
|
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue