ct/app/pages/article/[id].vue
2025-10-13 09:07:28 +08:00

107 lines
2.2 KiB
Vue

<script lang="ts" setup>
// 设置页面布局
definePageMeta({
layout: 'no-navigation'
})
// 获取路由参数
const route = useRoute()
const articleId = route.params.id as string
// 文章数据
const articleData = ref({
title: '',
publishDate: '',
category: '',
content: '',
prevArticle: {
title: '',
url: '#'
},
nextArticle: {
title: '',
url: '#'
}
})
// 加载状态
const loading = ref(true)
const error = ref('')
// API基础地址
const API_BASE_URL = 'http://192.168.2.77:4101'
// 获取文章详情
const fetchArticle = async (id: string) => {
try {
loading.value = true
error.value = ''
const response = await fetch(`${API_BASE_URL}/app/owArticle/get/${id}`)
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`)
}
const res = await response.json()
const data = res.data
console.log('api请求数据', data)
// 分类映射配置
const categoryMapping: Record<string, string> = {
'solution': '解决方案',
'developKnowledge': '开发知识',
'industryTrend': '行业动态',
'aboutUs': '关于我们'
}
data.code = categoryMapping[data.code] || '暂无分类'
// 更新文章数据
articleData.value = {
title: data.title || '暂无标题',
publishDate: data.createTime || '暂无日期',
category: data.code || '暂无分类',
content: data.content || '暂无内容',
prevArticle: data.prevArticle || {
title: '暂无上一篇',
url: '#'
},
nextArticle: data.nextArticle || {
title: '暂无下一篇',
url: '#'
}
}
} catch (err) {
console.error('获取文章失败:', err)
error.value = '获取文章失败,请稍后重试'
} finally {
loading.value = false
}
}
// 组件挂载时获取文章详情
onMounted(() => {
if (articleId) {
fetchArticle(articleId)
}
})
// 监听路由变化
watch(() => route.params.id, (newId) => {
if (newId) {
fetchArticle(newId as string)
}
})
</script>
<template>
<view>
<NewsNew :article-data="articleData" :error="error" :loading="loading"/>
</view>
</template>
<style scoped>
</style>