FEATURE: 网站的基本前端服务 #2

Merged
remilia merged 41 commits from dev into master 2025-09-06 16:11:23 +08:00
5 changed files with 69 additions and 340 deletions
Showing only changes of commit 3be665449c - Show all commits

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,6 +1,10 @@
<template> <template>
<div class="page-container"> <div class="page-container">
<support-tabs model-value="documents"/> <div v-if="pending">
<el-skeleton :rows="5" animated />
</div>
<div v-else>
<support-tabs model-value="documents" />
<div class="page-header"> <div class="page-header">
<h1 class="page-title">{{ $t('navigation.documents') }}</h1> <h1 class="page-title">{{ $t('navigation.documents') }}</h1>
<el-breadcrumb class="breadcrumb" separator="/"> <el-breadcrumb class="breadcrumb" separator="/">
@ -15,11 +19,39 @@
</el-breadcrumb-item> </el-breadcrumb-item>
</el-breadcrumb> </el-breadcrumb>
</div> </div>
<div class="page-content">
<document-list :documents="documents" />
</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,5 +1,9 @@
<template> <template>
<div class="page-container"> <div class="page-container">
<div v-if="pending" class="flex justify-center items-center h-64">
<el-spinner />
</div>
<div v-else>
<support-tabs model-value="faq" /> <support-tabs model-value="faq" />
<div class="page-header"> <div class="page-header">
<h1 class="page-title">{{ $t('navigation.faq') }}</h1> <h1 class="page-title">{{ $t('navigation.faq') }}</h1>
@ -15,12 +19,37 @@
</el-breadcrumb-item> </el-breadcrumb-item>
</el-breadcrumb> </el-breadcrumb>
</div> </div>
<div class="page-content">
<question-list :questions="questions" />
</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>