101 lines
2.2 KiB
Vue
101 lines
2.2 KiB
Vue
|
|
<template>
|
|||
|
|
<view class="notice-item" @tap="handleClick">
|
|||
|
|
<view class="item-main">
|
|||
|
|
<text class="item-title line-2">{{ item.title }}</text>
|
|||
|
|
<view class="item-time">
|
|||
|
|
<text class="time-text">发布时间:{{ formattedTime }}</text>
|
|||
|
|
</view>
|
|||
|
|
</view>
|
|||
|
|
</view>
|
|||
|
|
</template>
|
|||
|
|
|
|||
|
|
<script>
|
|||
|
|
export default {
|
|||
|
|
name: "NoticeCard",
|
|||
|
|
props: {
|
|||
|
|
// 接收外部传入的公告对象数据
|
|||
|
|
item: {
|
|||
|
|
type: Object,
|
|||
|
|
default: () => ({})
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
computed: {
|
|||
|
|
// 利用计算属性自动处理时间格式化
|
|||
|
|
formattedTime() {
|
|||
|
|
const timeStr = this.item.create_time;
|
|||
|
|
if (!timeStr) return '--:--:--';
|
|||
|
|
|
|||
|
|
let formatted = timeStr;
|
|||
|
|
if (timeStr.includes('.') && !timeStr.includes('-')) {
|
|||
|
|
formatted = timeStr.replace(/\./g, '-');
|
|||
|
|
if (formatted.match(/\d{4}-\d{2}-\d{2}\d{2}:\d{2}:\d{2}/)) {
|
|||
|
|
formatted = formatted.replace(/(\d{4}-\d{2}-\d{2})(\d{2}:\d{2}:\d{2})/, '$1 $2');
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
if (formatted.includes('-') && formatted.includes(':')) {
|
|||
|
|
return formatted;
|
|||
|
|
}
|
|||
|
|
return timeStr;
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
methods: {
|
|||
|
|
handleClick() {
|
|||
|
|
// 触发组件的 click 事件,把当前项的数据抛出去
|
|||
|
|
this.$emit('click', this.item);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
};
|
|||
|
|
</script>
|
|||
|
|
|
|||
|
|
<style lang="scss" scoped>
|
|||
|
|
.notice-item {
|
|||
|
|
display: flex;
|
|||
|
|
align-items: center;
|
|||
|
|
justify-content: space-between;
|
|||
|
|
background: #ffffff;
|
|||
|
|
border-radius: 20rpx;
|
|||
|
|
padding: 30rpx;
|
|||
|
|
margin-bottom: 20rpx;
|
|||
|
|
transition: all 0.2s ease;
|
|||
|
|
|
|||
|
|
.item-main {
|
|||
|
|
flex: 1;
|
|||
|
|
min-width: 0; // 防止文字溢出
|
|||
|
|
|
|||
|
|
.item-title {
|
|||
|
|
font-size: 30rpx;
|
|||
|
|
font-weight: 500;
|
|||
|
|
color: #101010;
|
|||
|
|
line-height: 42rpx;
|
|||
|
|
margin-bottom: 16rpx;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.item-time {
|
|||
|
|
display: flex;
|
|||
|
|
align-items: center;
|
|||
|
|
|
|||
|
|
.time-icon {
|
|||
|
|
width: 24rpx;
|
|||
|
|
height: 24rpx;
|
|||
|
|
margin-right: 8rpx;
|
|||
|
|
opacity: 0.6;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.time-text {
|
|||
|
|
font-size: 22rpx;
|
|||
|
|
color: #999;
|
|||
|
|
line-height: 30rpx;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 多行省略
|
|||
|
|
.line-2 {
|
|||
|
|
display: -webkit-box;
|
|||
|
|
-webkit-box-orient: vertical;
|
|||
|
|
-webkit-line-clamp: 2;
|
|||
|
|
overflow: hidden;
|
|||
|
|
word-break: break-all;
|
|||
|
|
}
|
|||
|
|
</style>
|