mirror of https://github.com/halo-dev/halo
106 lines
3.5 KiB
Vue
106 lines
3.5 KiB
Vue
<script lang="ts" setup>
|
|
import { postLabels } from "@/constants/labels";
|
|
import { formatDatetime } from "@/utils/date";
|
|
import type { ListedPost } from "@halo-dev/api-client";
|
|
import { consoleApiClient } from "@halo-dev/api-client";
|
|
import {
|
|
IconExternalLinkLine,
|
|
VCard,
|
|
VEntity,
|
|
VEntityField,
|
|
VSpace,
|
|
} from "@halo-dev/components";
|
|
import { useQuery } from "@tanstack/vue-query";
|
|
import { OverlayScrollbarsComponent } from "overlayscrollbars-vue";
|
|
|
|
const { data } = useQuery<ListedPost[]>({
|
|
queryKey: ["widget-recent-posts"],
|
|
queryFn: async () => {
|
|
const { data } = await consoleApiClient.content.post.listPosts({
|
|
labelSelector: [
|
|
`${postLabels.DELETED}=false`,
|
|
`${postLabels.PUBLISHED}=true`,
|
|
],
|
|
sort: ["spec.publishTime,desc"],
|
|
page: 1,
|
|
size: 10,
|
|
});
|
|
return data.items;
|
|
},
|
|
});
|
|
</script>
|
|
<template>
|
|
<VCard
|
|
:body-class="['h-full', '!p-0', '!overflow-auto']"
|
|
class="h-full"
|
|
:title="$t('core.dashboard.widgets.presets.recent_published.title')"
|
|
>
|
|
<OverlayScrollbarsComponent
|
|
element="div"
|
|
:options="{ scrollbars: { autoHide: 'scroll' } }"
|
|
class="h-full w-full"
|
|
defer
|
|
>
|
|
<ul class="box-border h-full w-full divide-y divide-gray-100" role="list">
|
|
<li v-for="(post, index) in data" :key="index">
|
|
<VEntity>
|
|
<template #start>
|
|
<VEntityField
|
|
:title="post.post.spec.title"
|
|
:route="{
|
|
name: 'PostEditor',
|
|
query: { name: post.post.metadata.name },
|
|
}"
|
|
>
|
|
<template #description>
|
|
<VSpace>
|
|
<span class="text-xs text-gray-500">
|
|
{{
|
|
$t(
|
|
"core.dashboard.widgets.presets.recent_published.visits",
|
|
{ visits: post.stats.visit || 0 }
|
|
)
|
|
}}
|
|
</span>
|
|
<span class="text-xs text-gray-500">
|
|
{{
|
|
$t(
|
|
"core.dashboard.widgets.presets.recent_published.comments",
|
|
{ comments: post.stats.totalComment || 0 }
|
|
)
|
|
}}
|
|
</span>
|
|
<span class="truncate text-xs tabular-nums text-gray-500">
|
|
{{
|
|
$t(
|
|
"core.dashboard.widgets.presets.recent_published.publishTime",
|
|
{
|
|
publishTime: formatDatetime(
|
|
post.post.spec.publishTime
|
|
),
|
|
}
|
|
)
|
|
}}
|
|
</span>
|
|
</VSpace>
|
|
</template>
|
|
<template #extra>
|
|
<a
|
|
v-if="post.post.status?.permalink"
|
|
target="_blank"
|
|
:href="post.post.status?.permalink"
|
|
:title="post.post.status?.permalink"
|
|
class="hidden text-gray-600 transition-all hover:text-gray-900 group-hover:inline-block"
|
|
>
|
|
<IconExternalLinkLine class="h-3.5 w-3.5" />
|
|
</a>
|
|
</template>
|
|
</VEntityField>
|
|
</template>
|
|
</VEntity>
|
|
</li>
|
|
</ul>
|
|
</OverlayScrollbarsComponent>
|
|
</VCard>
|
|
</template>
|