uniapp/components/theme-item/theme-item.vue
2024-09-21 23:48:04 +08:00

108 lines
3.1 KiB
Vue
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<!-- 主题项目容器 -->
<view class="themeItem">
<!-- 如果不是更多显示分类项 -->
<navigator :url="'/pages/classlist/classlist?id='+item._id+'&name='+item.name" class="box" v-if="!isMore">
<!-- 显示分类的图片 -->
<image class="pic" :src="item.picurl" mode="aspectFill"></image>
<!-- 遮罩层显示分类名称 -->
<view class="mask">{{item.name}}</view>
<!-- 更新时间标签使用工具函数计算时间差 -->
<view class="tab">{{getTimeDifference(item.updateTime)}}前更新</view>
</navigator>
<!-- 如果是更多跳转到分类页 -->
<navigator url="/pages/classify/classify" open-type="reLaunch" class="box more" v-if="isMore">
<!-- 显示更多图片 -->
<image class="pic" src="../../common/images/more.jpg" mode="aspectFill"></image>
<!-- 遮罩层显示更多图标和文字 -->
<view class="mask">
<uni-icons type="more-filled" size="34" color="#fff"></uni-icons>
<view class="text">更多</view>
</view>
</navigator>
</view>
</template>
<script setup>
// 引入时间处理工具函数
import {getTimeDifference} from '@/utils/common.js'
// 接收外部传入的属性
defineProps({
// 是否是“更多”项,默认为 false
isMore:{
type:Boolean,
default:false
},
// 分类项的数据对象,默认提供一个测试数据
item:{
type:Object,
default(){
return {
name:"默认名称", // 默认分类名称
picurl:"../../common/images/classify1.jpg", // 默认图片路径
updateTime:Date.now()-1000*60*60*5 // 默认更新时间为5小时前
}
}
}
})
</script>
<style lang="scss" scoped>
.themeItem{
.box{
height: 340rpx; /* 盒子的高度 */
border-radius: 10rpx; /* 圆角 */
overflow:hidden; /* 超出部分隐藏 */
position: relative; /* 使内部元素使用绝对定位 */
.pic{
width: 100%; /* 图片宽度全屏 */
height: 100%; /* 图片高度全屏 */
}
.mask{
width: 100%;
height: 70rpx; /* 遮罩层的高度 */
position: absolute;
bottom:0;
left:0;
background: rgba(0,0,0,0.2); /* 黑色半透明背景 */
color:#fff; /* 字体颜色白色 */
display: flex;
align-items: center; /* 垂直居中 */
justify-content: center; /* 水平居中 */
backdrop-filter: blur(20rpx); /* 背景模糊效果 */
font-weight: 600; /* 字体加粗 */
font-size: 30rpx; /* 字体大小 */
}
.tab{
position: absolute;
left:0;
top:0;
background: rgba(250,129,90,0.7); /* 更新时间标签的背景色 */
backdrop-filter: blur(20rpx); /* 背景模糊效果 */
color:#fff; /* 字体颜色白色 */
font-size: 22rpx; /* 字体大小 */
padding:6rpx 14rpx; /* 内边距 */
border-radius: 0 0 20rpx 0; /* 左上角圆角 */
transform: scale(0.8); /* 缩放比例 */
transform-origin: left top; /* 缩放原点为左上角 */
}
}
.box.more{
.mask{
width: 100%;
height: 100%; /* 如果是“更多”项,遮罩层覆盖整个容器 */
flex-direction: column; /* 垂直排列图标和文字 */
}
.text{
font-size: 28rpx; /* “更多”文字的字体大小 */
}
}
}
</style>