feat: 增添新页面 & 修改样式

- 增添服务支持-常见问题 & 服务支持-文档资料
- 调整QuestionList样式
This commit is contained in:
2025-09-04 14:56:46 +08:00
parent ea409d49b0
commit 3be665449c
3 changed files with 122 additions and 38 deletions

View File

@ -2,11 +2,8 @@
<div class="question-list"> <div class="question-list">
<el-collapse class="question-collapse" accordion> <el-collapse class="question-collapse" accordion>
<el-collapse-item <el-collapse-item
v-for="(question, index) in questions" v-for="(question, index) in questions" :key="index" :title="question.title"
:key="index" :name="String(index)">
:title="question.title"
:name="String(index)"
>
<markdown-renderer :content="question.content || ''" /> <markdown-renderer :content="question.content || ''" />
</el-collapse-item> </el-collapse-item>
</el-collapse> </el-collapse>
@ -31,14 +28,33 @@ defineProps({
border: none; border: none;
} }
.question-collapse :deep(.el-collapse-item) {
margin-bottom: 1rem;
border-radius: 8px;
}
.question-collapse :deep(.el-collapse-item__header) { .question-collapse :deep(.el-collapse-item__header) {
font-size: 1rem; font-size: 1rem;
padding: 1rem; padding: 1rem;
border-radius: 8px;
background-color: #f5f7fa;
transition: all 0.3s ease;
&.is-active {
background-color: #e1e6eb;
color: var(--el-color-primary);
}
} }
.question-collapse :deep(.el-collapse-item) { .question-collapse :deep(.el-collapse-item__wrap) {
margin-bottom: 1rem; border: none;
border: 1px solid var(--el-border-color-light);
box-shadow: 2px 2px 8px rgba(0, 0, 0, 0.1);
} }
.question-collapse :deep(.el-collapse-item__content) {
padding: 1rem;
font-size: 0.9rem;
}
</style> </style>

View File

@ -1,25 +1,57 @@
<template> <template>
<div class="page-container"> <div class="page-container">
<support-tabs model-value="documents"/> <div v-if="pending">
<div class="page-header"> <el-skeleton :rows="5" animated />
<h1 class="page-title">{{ $t('navigation.documents') }}</h1> </div>
<el-breadcrumb class="breadcrumb" separator="/"> <div v-else>
<el-breadcrumb-item class="text-md opacity-50"> <support-tabs model-value="documents" />
<NuxtLink :to="$localePath('/')">{{ $t('navigation.home') }}</NuxtLink> <div class="page-header">
</el-breadcrumb-item> <h1 class="page-title">{{ $t('navigation.documents') }}</h1>
<el-breadcrumb-item class="text-md opacity-50"> <el-breadcrumb class="breadcrumb" separator="/">
<NuxtLink :to="$localePath('/support')">{{ $t('navigation.support') }}</NuxtLink> <el-breadcrumb-item class="text-md opacity-50">
</el-breadcrumb-item> <NuxtLink :to="$localePath('/')">{{ $t('navigation.home') }}</NuxtLink>
<el-breadcrumb-item class="text-md opacity-50"> </el-breadcrumb-item>
<NuxtLink :to="$localePath('/support/documents')">{{ $t('navigation.documents') }}</NuxtLink> <el-breadcrumb-item class="text-md opacity-50">
</el-breadcrumb-item> <NuxtLink :to="$localePath('/support')">{{ $t('navigation.support') }}</NuxtLink>
</el-breadcrumb> </el-breadcrumb-item>
<el-breadcrumb-item class="text-md opacity-50">
<NuxtLink :to="$localePath('/support/documents')">{{ $t('navigation.documents') }}</NuxtLink>
</el-breadcrumb-item>
</el-breadcrumb>
</div>
<div class="page-content">
<document-list :documents="documents" />
</div>
</div> </div>
</div> </div>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
const { find } = useStrapi()
const { getStrapiLocale } = useLocalizations()
const strapiLocale = getStrapiLocale()
const pending = ref(true)
const documents = ref<StrapiMedia[]>([])
onMounted(async () => {
try {
const response = await find<ProductionDocument>('production-documents', {
locale: strapiLocale,
populate: 'document',
})
if(response.data) {
documents.value = response.data.map(item => ({
...item.document,
})) || []
}
} catch (error) {
console.error('Error fetching documents:', error)
} finally {
pending.value = false
}
})
</script> </script>
<style scoped> <style scoped>
@ -38,4 +70,8 @@
.breadcrumb { .breadcrumb {
margin-left: auto; margin-left: auto;
} }
.page-content {
padding: 1rem 2rem 2rem;
}
</style> </style>

View File

@ -1,26 +1,55 @@
<template> <template>
<div class="page-container"> <div class="page-container">
<support-tabs model-value="faq" /> <div v-if="pending" class="flex justify-center items-center h-64">
<div class="page-header"> <el-spinner />
<h1 class="page-title">{{ $t('navigation.faq') }}</h1> </div>
<el-breadcrumb class="breadcrumb" separator="/"> <div v-else>
<el-breadcrumb-item class="text-md opacity-50"> <support-tabs model-value="faq" />
<NuxtLink :to="$localePath('/')">{{ $t('navigation.home') }}</NuxtLink> <div class="page-header">
</el-breadcrumb-item> <h1 class="page-title">{{ $t('navigation.faq') }}</h1>
<el-breadcrumb-item class="text-md opacity-50"> <el-breadcrumb class="breadcrumb" separator="/">
<NuxtLink :to="$localePath('/support')">{{ $t('navigation.support') }}</NuxtLink> <el-breadcrumb-item class="text-md opacity-50">
</el-breadcrumb-item> <NuxtLink :to="$localePath('/')">{{ $t('navigation.home') }}</NuxtLink>
<el-breadcrumb-item class="text-md opacity-50"> </el-breadcrumb-item>
<NuxtLink :to="$localePath('/support/faq')">{{ $t('navigation.faq') }}</NuxtLink> <el-breadcrumb-item class="text-md opacity-50">
</el-breadcrumb-item> <NuxtLink :to="$localePath('/support')">{{ $t('navigation.support') }}</NuxtLink>
</el-breadcrumb> </el-breadcrumb-item>
<el-breadcrumb-item class="text-md opacity-50">
<NuxtLink :to="$localePath('/support/faq')">{{ $t('navigation.faq') }}</NuxtLink>
</el-breadcrumb-item>
</el-breadcrumb>
</div>
<div class="page-content">
<question-list :questions="questions" />
</div>
</div> </div>
</div> </div>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
const { find } = useStrapi();
const { getStrapiLocale } = useLocalizations();
const strapiLocale = getStrapiLocale();
const questions = ref<Question[]>([]);
const pending = ref(true);
onMounted(async () => {
try {
const faqData = await find<Question>('questions', {
locale: strapiLocale,
});
if (faqData) {
questions.value = faqData.data || [];
}
} catch (error) {
console.error('Failed to fetch FAQ data:', error);
} finally {
pending.value = false;
}
})
</script> </script>
<style scoped> <style scoped>
@ -40,4 +69,7 @@
margin-left: auto; margin-left: auto;
} }
.page-content {
padding: 1rem 2rem 2rem;
}
</style> </style>