mirror of
https://github.com/lingble/chatwoot.git
synced 2025-11-02 12:08:01 +00:00
feat: Add the new design for article page (#10273)
This commit is contained in:
@@ -0,0 +1,25 @@
|
|||||||
|
<script setup>
|
||||||
|
import ArticleCard from 'dashboard/components-next/HelpCenter/ArticleCard/ArticleCard.vue';
|
||||||
|
|
||||||
|
defineProps({
|
||||||
|
articles: {
|
||||||
|
type: Array,
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<ul role="list" class="w-full h-full space-y-4">
|
||||||
|
<ArticleCard
|
||||||
|
v-for="article in articles"
|
||||||
|
:key="article.title"
|
||||||
|
:title="article.title"
|
||||||
|
:status="article.status"
|
||||||
|
:author="article.author"
|
||||||
|
:category="article.category"
|
||||||
|
:views="article.views"
|
||||||
|
:updated-at="article.updatedAt"
|
||||||
|
/>
|
||||||
|
</ul>
|
||||||
|
</template>
|
||||||
@@ -0,0 +1,72 @@
|
|||||||
|
<script setup>
|
||||||
|
import ArticlesPage from './ArticlesPage.vue';
|
||||||
|
|
||||||
|
const articles = [
|
||||||
|
{
|
||||||
|
title: "How to get an SSL certificate for your Help Center's custom domain",
|
||||||
|
status: 'draft',
|
||||||
|
updatedAt: '2 days ago',
|
||||||
|
author: 'Michael',
|
||||||
|
category: '⚡️ Marketing',
|
||||||
|
views: 3400,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'Setting up your first Help Center portal',
|
||||||
|
status: '',
|
||||||
|
updatedAt: '1 week ago',
|
||||||
|
author: 'John',
|
||||||
|
category: '🛠️ Development',
|
||||||
|
views: 400,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'Best practices for organizing your Help Center content',
|
||||||
|
status: 'archived',
|
||||||
|
updatedAt: '3 days ago',
|
||||||
|
author: 'Fernando',
|
||||||
|
category: '💰 Finance',
|
||||||
|
views: 400,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'Customizing the appearance of your Help Center',
|
||||||
|
status: '',
|
||||||
|
updatedAt: '5 days ago',
|
||||||
|
author: 'Jane',
|
||||||
|
category: '💰 Finance',
|
||||||
|
views: 400,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'Best practices for organizing your Help Center content',
|
||||||
|
status: 'archived',
|
||||||
|
updatedAt: '3 days ago',
|
||||||
|
author: 'Fernando',
|
||||||
|
category: '💰 Finance',
|
||||||
|
views: 400,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'Customizing the appearance of your Help Center',
|
||||||
|
status: '',
|
||||||
|
updatedAt: '5 days ago',
|
||||||
|
author: 'Jane',
|
||||||
|
category: '💰 Finance',
|
||||||
|
views: 400,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'Best practices for organizing your Help Center content',
|
||||||
|
status: 'archived',
|
||||||
|
updatedAt: '3 days ago',
|
||||||
|
author: 'Fernando',
|
||||||
|
category: '💰 Finance',
|
||||||
|
views: 400,
|
||||||
|
},
|
||||||
|
];
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<Story title="Pages/HelpCenter/ArticlesPage" :layout="{ type: 'single' }">
|
||||||
|
<Variant title="All Articles">
|
||||||
|
<div class="w-full min-h-screen bg-white dark:bg-slate-900">
|
||||||
|
<ArticlesPage :articles="articles" />
|
||||||
|
</div>
|
||||||
|
</Variant>
|
||||||
|
</Story>
|
||||||
|
</template>
|
||||||
@@ -0,0 +1,74 @@
|
|||||||
|
<script setup>
|
||||||
|
import HelpCenterLayout from 'dashboard/components-next/HelpCenter/HelpCenterLayout.vue';
|
||||||
|
import TabBar from 'dashboard/components-next/tabbar/TabBar.vue';
|
||||||
|
import Button from 'dashboard/components-next/button/Button.vue';
|
||||||
|
import ArticleList from 'dashboard/components-next/HelpCenter/Pages/ArticlePage/ArticleList.vue';
|
||||||
|
|
||||||
|
defineProps({
|
||||||
|
articles: {
|
||||||
|
type: Array,
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
const tabs = [
|
||||||
|
{ label: 'All articles', count: 24 },
|
||||||
|
{ label: 'Mine', count: 13 },
|
||||||
|
{ label: 'Draft', count: 5 },
|
||||||
|
{ label: 'Archived', count: 11 },
|
||||||
|
];
|
||||||
|
// TODO: remove comments
|
||||||
|
// eslint-disable-next-line no-unused-vars
|
||||||
|
const handleTabChange = tab => {
|
||||||
|
// TODO: Implement tab change logic
|
||||||
|
};
|
||||||
|
// eslint-disable-next-line no-unused-vars
|
||||||
|
const handlePageChange = page => {
|
||||||
|
// TODO: Implement page change logic
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<HelpCenterLayout
|
||||||
|
:current-page="1"
|
||||||
|
:total-items="100"
|
||||||
|
:items-per-page="10"
|
||||||
|
@update:current-page="handlePageChange"
|
||||||
|
>
|
||||||
|
<template #header-actions>
|
||||||
|
<div class="flex items-end justify-between">
|
||||||
|
<div class="flex flex-col items-start w-full gap-2 lg:flex-row">
|
||||||
|
<TabBar
|
||||||
|
:tabs="tabs"
|
||||||
|
:initial-active-tab="1"
|
||||||
|
@tab-changed="handleTabChange"
|
||||||
|
/>
|
||||||
|
<div class="flex items-start justify-between w-full gap-2">
|
||||||
|
<div class="flex items-center gap-2">
|
||||||
|
<Button
|
||||||
|
label="English"
|
||||||
|
size="sm"
|
||||||
|
icon-position="right"
|
||||||
|
icon="chevron-lucide-down"
|
||||||
|
icon-lib="lucide"
|
||||||
|
variant="secondary"
|
||||||
|
/>
|
||||||
|
<Button
|
||||||
|
label="All categories"
|
||||||
|
size="sm"
|
||||||
|
icon-position="right"
|
||||||
|
icon="chevron-lucide-down"
|
||||||
|
icon-lib="lucide"
|
||||||
|
variant="secondary"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<Button label="New article" icon="add" size="sm" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<template #content>
|
||||||
|
<ArticleList :articles="articles" />
|
||||||
|
</template>
|
||||||
|
</HelpCenterLayout>
|
||||||
|
</template>
|
||||||
Reference in New Issue
Block a user