<template>
<view class="box">
<view class="box-box" v-if="list.length > 0">
<view class="content-box" v-for="(item, index) in list" :key="index" @click.stop="handleContent(item)">
<image class="tip" :src="item.tip" mode="aspectFit"></image>
<image v-if="item.processed" class="processed" :src="item.processed" mode="aspectFit">
</image>
<view class="list">
<view class="image-box">
<image class="image" :src="item.image" mode="aspectFit"></image>
</view>
<view class="content">
<view class="title">{{ item.title }}</view>
<view class="note">
<view class="date">
<view v-if="item.dateTop">{{ item.dateTop }}</view>
<view v-else style="opacity: 0;">2022-07-24</view>
<view>{{ item.dateLabel || date }}:{{ item.date }}</view>
</view>
<view style="height: 100%;" v-if="item.button">
<view class="button" @click.stop="handleClick(item)">{{ button }}</view>
</view>
</view>
</view>
</view>
</view>
</view>
<view v-else class="nomessage">
暂无内容
</view>
</view>
</template>
<script>
/**
* tip: 左侧上方图片
* processed:右侧下方图片
* image:左侧中间图片
* title:标题
* dateTop: 上方时间
* dateBottom: 下方时间
* button:右侧下方按钮
*/
export default {
name: 'list',
props: {
list: {
type: Array,
default: () => []
},
button: {
type: String,
default: '处理'
},
date: {
type: String,
default: '申请时间'
}
},
data () {
return {}
},
methods: {
handleContent (item) {
this.$emit('itemClick', item)
},
handleClick (item) {
console.log('222')
this.$emit('click', item)
}
},
}
</script>
<style lang="scss" scope>
.box {
height: calc(100vh - 450rpx);
overflow: hidden;
.box-box {
height: 100%;
overflow: auto;
}
}
.content-box {
position: relative;
border-bottom: 1rpx solid rgba(204, 204, 204, 0.5);
.tip {
position: absolute;
width: 18%;
height: 40rpx;
top: -2rpx;
left: 15rpx;
}
.processed {
position: absolute;
width: 100rpx;
height: 100rpx;
right: 10rpx;
bottom: 10rpx;
}
}
.list {
display: flex;
padding: 20rpx 10rpx 10rpx;
.image-box {
width: 20%;
display: flex;
justify-content: center;
align-items: center;
.image {
width: 50%;
height: 50%;
}
}
.content {
width: 80%;
.title {
color: #333333;
font-size: 32rpx;
line-height: 1.5;
margin-bottom: 10rpx;
font-weight: 600;
display: -webkit-box;
overflow: hidden;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
}
.note {
display: flex;
justify-content: space-between;
.date {
color: #999;
font-size: 22rpx;
line-height: 1.5;
}
.button {
background: #3766ff;
color: #fff;
padding: 10rpx 30rpx;
border-radius: 40rpx;
font-size: 20rpx;
}
}
}
}
.nomessage {
text-align: center;
color: #ccc;
font-size: 30rpx;
margin-top: 10%;
line-height: 90rpx;
}
</style>
使用
<template>
<view class="page">
<list :list="list" @click="handleClick" />
</view>
</template>
<script>
import list from './list.vue'
export default {
components: {
list
},
data () {
return {
list: [
{
tip: '/static/images/rw_label2.png',
image: '/static/images/rw_icon2.png',
title: '接待审批单-郑榕(计划财务科)',
dateTop: '',
date: 2022/7/24,
button: true,
dateLabel: '入库日期'
}
]
}
},
mounted () {
},
methods: {
handleClick () {}
},
}
</script>
<style lang="scss" scope>
</style>
效果图
文章评论