<template>
|
<div class="waterfall" v-loading="props.loading">
|
<template v-for="item in props.list" :key="item.articleId">
|
<div class="waterfall-item" v-if="item.content && item.content.newsItem">
|
<WxNews :articles="item.content.newsItem" />
|
<!-- 操作按钮 -->
|
<el-row>
|
<el-button
|
type="success"
|
circle
|
@click="emit('publish', item)"
|
v-hasPermi="['mp:free-publish:submit']"
|
>
|
<Icon icon="fa:upload" />
|
</el-button>
|
<el-button
|
type="primary"
|
circle
|
@click="emit('update', item)"
|
v-hasPermi="['mp:draft:update']"
|
>
|
<Icon icon="ep:edit" />
|
</el-button>
|
<el-button
|
type="danger"
|
circle
|
@click="emit('delete', item)"
|
v-hasPermi="['mp:draft:delete']"
|
>
|
<Icon icon="ep:delete" />
|
</el-button>
|
</el-row>
|
</div>
|
</template>
|
</div>
|
</template>
|
|
<script lang="ts" setup>
|
import WxNews from '@/views/mp/components/wx-news'
|
|
import { Article } from './types'
|
|
const props = defineProps<{
|
list: Article[]
|
loading: boolean
|
}>()
|
|
const emit = defineEmits<{
|
(e: 'publish', v: Article)
|
(e: 'update', v: Article)
|
(e: 'delete', v: Article)
|
}>()
|
</script>
|
|
<style lang="scss" scoped>
|
.waterfall {
|
width: 100%;
|
column-gap: 10px;
|
column-count: 5;
|
margin: 0 auto;
|
|
.waterfall-item {
|
padding: 10px;
|
margin-bottom: 10px;
|
break-inside: avoid;
|
border: 1px solid #eaeaea;
|
}
|
}
|
|
@media (width >= 992px) and (width <= 1300px) {
|
.waterfall {
|
column-count: 3;
|
}
|
}
|
|
@media (width >= 768px) and (width <= 991px) {
|
.waterfall {
|
column-count: 2;
|
}
|
}
|
|
@media (width <= 767px) {
|
.waterfall {
|
column-count: 1;
|
}
|
}
|
</style>
|