104 lines
2.9 KiB
Vue
104 lines
2.9 KiB
Vue
|
<template>
|
|||
|
<NuxtLayout
|
|||
|
name="category"
|
|||
|
:categories="categoryTree"
|
|||
|
:subCategories="subCategoryTree"
|
|||
|
:selected-category="{
|
|||
|
uid: articlePageCategoryUid,
|
|||
|
title: category.title
|
|||
|
}"
|
|||
|
:breadcrumbs="breadcrumbs"
|
|||
|
>
|
|||
|
<ArticleList :articles="articles" />
|
|||
|
<Pagination v-model="pagination" />
|
|||
|
</NuxtLayout>
|
|||
|
</template>
|
|||
|
|
|||
|
<script>
|
|||
|
import { definePageMeta } from '#imports'
|
|||
|
import { ref } from 'vue'
|
|||
|
import { useRoute } from 'vue-router'
|
|||
|
import Pagination from '@/components/common/Pagination'
|
|||
|
import CategoryUtil from '@/utils/category'
|
|||
|
import ArticleList from '@/components/cms/ArticleList'
|
|||
|
import { fetchTemplateData } from '@/api/cms/template'
|
|||
|
import { fetchArticlePage } from '@/api/cms/article'
|
|||
|
import { strictPackage } from '@/utils/util'
|
|||
|
|
|||
|
export default {
|
|||
|
components: {
|
|||
|
ArticleList,
|
|||
|
Pagination
|
|||
|
},
|
|||
|
async setup () {
|
|||
|
// 去掉默认布局
|
|||
|
definePageMeta({
|
|||
|
layout: false,
|
|||
|
})
|
|||
|
const route = useRoute()
|
|||
|
const data = strictPackage(await fetchTemplateData({
|
|||
|
path: '/category/[categoryUid]/index.vue',
|
|||
|
targetUid: route.params.categoryUid,
|
|||
|
targetType: 'CATEGORY',
|
|||
|
parameters: {
|
|||
|
categoryUid: route.params.categoryUid
|
|||
|
}
|
|||
|
}))
|
|||
|
// 获取分页所使用的栏目UID
|
|||
|
const articlePageCategoryUid = data.ARTICLE_PAGE_PARAMETERS.categoryUid
|
|||
|
const categoryUtil = new CategoryUtil(data.CATEGORIES_TREE)
|
|||
|
const category = categoryUtil.getCategory(articlePageCategoryUid)
|
|||
|
if (category == null) {
|
|||
|
throw new Error(`找不到栏目,UID: ${articlePageCategoryUid}`)
|
|||
|
}
|
|||
|
return {
|
|||
|
categoryUid: route.params.categoryUid,
|
|||
|
categoryTree: data.CATEGORIES_TREE,
|
|||
|
subCategoryTree: data.SUB_CATEGORIES_TREE,
|
|||
|
category: categoryUtil.getCategory(articlePageCategoryUid),
|
|||
|
// 查询文章分页数据的栏目ID
|
|||
|
articlePageCategoryUid,
|
|||
|
// 面包屑
|
|||
|
breadcrumbs: categoryUtil.getBreadcrumb(articlePageCategoryUid),
|
|||
|
// 文章列表数据
|
|||
|
articles: ref(data.ARTICLE_PAGE.records),
|
|||
|
// 分页数据
|
|||
|
pagination: ref({
|
|||
|
page: data.ARTICLE_PAGE.page,
|
|||
|
capacity: data.ARTICLE_PAGE.capacity,
|
|||
|
total: data.ARTICLE_PAGE.total
|
|||
|
})
|
|||
|
}
|
|||
|
},
|
|||
|
watch: {
|
|||
|
// 路由参数变化时,触发数据搜索
|
|||
|
'$route.query': function (newQuery) {
|
|||
|
this.handlePageChange(Number(newQuery.page) || 1)
|
|||
|
}
|
|||
|
},
|
|||
|
methods: {
|
|||
|
/**
|
|||
|
* 页码变更
|
|||
|
*
|
|||
|
* @param page 新页码
|
|||
|
*/
|
|||
|
handlePageChange (page) {
|
|||
|
this.pagination.page = page
|
|||
|
fetchArticlePage({
|
|||
|
page: this.pagination.page,
|
|||
|
capacity: this.pagination.capacity,
|
|||
|
model: {
|
|||
|
categoryUid: this.articlePageCategoryUid
|
|||
|
}
|
|||
|
})
|
|||
|
.then(data => {
|
|||
|
this.pagination.page = page
|
|||
|
this.pagination.total = data.total
|
|||
|
this.articles = data.records
|
|||
|
})
|
|||
|
.catch(e => console.error(e))
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
</script>
|