优化单页pagetype的路由,与普通pagetype路由前缀保持一致

This commit is contained in:
jingrow 2025-10-10 01:29:25 +08:00
parent 199f4006a6
commit ed8bd80a3d
3 changed files with 22 additions and 19 deletions

View File

@ -29,7 +29,6 @@ import { NMenu } from 'naive-ui'
import { t } from '../../shared/i18n'
import { useMenuStore } from '../../shared/stores/menu'
import { pageTypeToSlug } from '../../shared/utils/slug'
import { getPageTypeRouteName } from '../../shared/utils/pagetype'
import DynamicIcon from '../../components/DynamicIcon.vue'
interface Props {
@ -70,22 +69,16 @@ const menuOptions = computed(() => {
}))
})
const handleMenuSelect = async (key: string) => {
const handleMenuSelect = (key: string) => {
// id
const menuItem = menuStore.visibleItems.find(item => item.id === key)
if (!menuItem) return
//
if (menuItem.type === 'pagetype' && menuItem.pagetype) {
// issingle
//
const slug = pageTypeToSlug(menuItem.pagetype)
const routeName = await getPageTypeRouteName(menuItem.pagetype)
if (routeName === 'SinglePageDetail') {
router.push({ name: 'SinglePageDetail', params: { entity: slug } })
} else {
router.push({ name: 'PageTypeList', params: { entity: slug } })
}
router.push({ name: 'PageTypeList', params: { entity: slug } })
} else if (menuItem.type === 'route' && menuItem.routeName) {
// 使routeName
router.push({ name: menuItem.routeName })

View File

@ -78,12 +78,6 @@ const router = createRouter({
name: 'PageTypeDetail',
component: () => import('../../views/pagetype/GenericDetailPage.vue')
},
// 单页 pagetype 详情
{
path: 'single/:entity',
name: 'SinglePageDetail',
component: () => import('../../views/pagetype/SinglePageDetail.vue')
},
// 保持向后兼容
{
path: 'page/:entity',

View File

@ -1,5 +1,7 @@
<template>
<div class="page">
<!-- 如果是单页模式直接显示单页详情组件 -->
<SinglePageDetail v-if="isSinglePage" />
<div v-else class="page">
<!-- 头部 AI 智能体列表一致的结构 -->
<div class="page-header">
<div class="header-left">
@ -170,6 +172,8 @@ import axios from 'axios'
import { t } from '../../shared/i18n'
import { get_session_api_headers } from '../../shared/api/auth'
import { usePageTypeSlug } from '../../shared/utils/slug'
import { isSinglePageType } from '../../shared/utils/pagetype'
import SinglePageDetail from './SinglePageDetail.vue'
const route = useRoute()
const router = useRouter()
@ -178,6 +182,9 @@ const message = useMessage()
// 使URL slug
const { originalSlug, entity } = usePageTypeSlug(route)
const title = computed(() => entity.value)
//
const isSinglePage = ref(false)
const searchQuery = ref('')
const loading = ref(false)
const rows = ref<any[]>([])
@ -222,6 +229,9 @@ async function loadMeta() {
const url = `/api/data/PageType/${encodeURIComponent(entity.value)}`
const res = await axios.get(url, { headers: get_session_api_headers(), withCredentials: true })
metaFields.value = res.data?.data?.fields || []
//
isSinglePage.value = await isSinglePageType(entity.value)
} finally {
loading.value = false
}
@ -266,7 +276,10 @@ async function loadData() {
onMounted(async () => {
await loadMeta()
await loadData()
//
if (!isSinglePage.value) {
await loadData()
}
})
//
@ -283,7 +296,10 @@ watch(() => route.params.entity, async (newEntity, oldEntity) => {
selectedKeys.value = []
//
await loadMeta()
await loadData()
//
if (!isSinglePage.value) {
await loadData()
}
}
}, { immediate: false })