Compare commits
2 Commits
f2533767d2
...
76fb3ddcb7
| Author | SHA1 | Date | |
|---|---|---|---|
| 76fb3ddcb7 | |||
| aa26731731 |
@ -47,3 +47,9 @@
|
|||||||
currentPage.value = 1; // 重置页码
|
currentPage.value = 1; // 重置页码
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
.el-tabs {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|||||||
@ -4,11 +4,17 @@
|
|||||||
<h1 class="page-title">{{ $t('navigation.downloads') }}</h1>
|
<h1 class="page-title">{{ $t('navigation.downloads') }}</h1>
|
||||||
<app-breadcrumb class="breadcrumb" :items="breadcrumbItems" />
|
<app-breadcrumb class="breadcrumb" :items="breadcrumbItems" />
|
||||||
</div>
|
</div>
|
||||||
<div v-if="!pending" class="page-content">
|
<div class="page-content">
|
||||||
|
<el-skeleton
|
||||||
|
:loading="pending"
|
||||||
|
:rows="6"
|
||||||
|
animated
|
||||||
|
:throttle="{ leading: 500, trailing: 500 }"
|
||||||
|
>
|
||||||
|
<template #default>
|
||||||
<file-card :file-id="id" :file="file" />
|
<file-card :file-id="id" :file="file" />
|
||||||
</div>
|
</template>
|
||||||
<div v-else>
|
</el-skeleton>
|
||||||
<el-skeleton :rows="6" animated />
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
@ -1,5 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<div>redirecting...</div>
|
<div class="page-container">
|
||||||
|
<h1>{{ $t('redirecting') }}</h1>
|
||||||
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
@ -10,3 +12,17 @@
|
|||||||
window.location.href = platform;
|
window.location.href = platform;
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
.page-container {
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
min-height: 80vh;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
font-size: 1.5rem;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|||||||
@ -1,6 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="page-container">
|
<div class="page-container">
|
||||||
<div v-if="!pending">
|
|
||||||
<div v-if="product">
|
<div v-if="product">
|
||||||
<!-- 面包屑导航 -->
|
<!-- 面包屑导航 -->
|
||||||
<app-breadcrumb class="breadcrumb" :items="breadcrumbItems" />
|
<app-breadcrumb class="breadcrumb" :items="breadcrumbItems" />
|
||||||
@ -19,15 +18,6 @@
|
|||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div v-else class="loading">
|
|
||||||
<el-skeleton style="--el-skeleton-circle-size: 400px">
|
|
||||||
<template #template>
|
|
||||||
<el-skeleton-item variant="circle" />
|
|
||||||
</template>
|
|
||||||
</el-skeleton>
|
|
||||||
<el-skeleton :rows="5" animated />
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
@ -37,7 +27,7 @@
|
|||||||
// 获取路由参数
|
// 获取路由参数
|
||||||
const id = route.params.slug as string;
|
const id = route.params.slug as string;
|
||||||
|
|
||||||
const { data: product, pending, error } = await useProduct(id);
|
const { data: product, error } = await useProduct(id);
|
||||||
|
|
||||||
const breadcrumbItems = computed(() => [
|
const breadcrumbItems = computed(() => [
|
||||||
{ label: $t('navigation.home'), to: localePath('/') },
|
{ label: $t('navigation.home'), to: localePath('/') },
|
||||||
|
|||||||
@ -1,11 +1,23 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="search-page">
|
<div class="search-page">
|
||||||
<search-header v-model="keyword" />
|
<search-header v-model="keyword" />
|
||||||
<div v-if="loading" class="search-state">
|
<div class="search-state">
|
||||||
<el-skeleton :rows="4" animated />
|
<el-skeleton
|
||||||
</div>
|
:loading="loading"
|
||||||
<search-tabs v-else-if="hasResults" :search-items="searchItems" />
|
animated
|
||||||
<div v-else class="search-state">
|
:throttle="{ leading: 500, trailing: 500 }"
|
||||||
|
>
|
||||||
|
<template #template>
|
||||||
|
<el-skeleton-item
|
||||||
|
v-for="i in 10"
|
||||||
|
:key="i"
|
||||||
|
variant="rect"
|
||||||
|
class="skeleton-item"
|
||||||
|
/>
|
||||||
|
</template>
|
||||||
|
<template #default>
|
||||||
|
<search-tabs v-if="hasResults" :search-items="searchItems" />
|
||||||
|
<div v-else>
|
||||||
<el-empty
|
<el-empty
|
||||||
:description="
|
:description="
|
||||||
route.query.query
|
route.query.query
|
||||||
@ -14,6 +26,9 @@
|
|||||||
"
|
"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
</template>
|
||||||
|
</el-skeleton>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@ -96,7 +111,11 @@
|
|||||||
.search-state {
|
.search-state {
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
padding: 3rem 0;
|
}
|
||||||
|
|
||||||
|
.skeleton-item {
|
||||||
|
height: 80px;
|
||||||
|
margin-bottom: 1rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
@media (max-width: 640px) {
|
@media (max-width: 640px) {
|
||||||
|
|||||||
@ -1,6 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="page-container">
|
<div class="page-container">
|
||||||
<div v-if="!pending">
|
|
||||||
<div v-if="solution">
|
<div v-if="solution">
|
||||||
<div class="page-header">
|
<div class="page-header">
|
||||||
<app-breadcrumb class="breadcrumb" :items="breadcrumbItems" />
|
<app-breadcrumb class="breadcrumb" :items="breadcrumbItems" />
|
||||||
@ -16,10 +15,6 @@
|
|||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div v-else class="loading">
|
|
||||||
<el-skeleton :rows="5" animated />
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
@ -29,7 +24,7 @@
|
|||||||
// 获取路由参数
|
// 获取路由参数
|
||||||
const id = route.params.slug as string;
|
const id = route.params.slug as string;
|
||||||
|
|
||||||
const { data: solution, pending, error } = await useSolution(id);
|
const { data: solution, error } = await useSolution(id);
|
||||||
|
|
||||||
const breadcrumbItems = computed(() => [
|
const breadcrumbItems = computed(() => [
|
||||||
{ label: $t('navigation.home'), to: localePath('/') },
|
{ label: $t('navigation.home'), to: localePath('/') },
|
||||||
|
|||||||
@ -127,5 +127,6 @@
|
|||||||
"specs": "Specifications",
|
"specs": "Specifications",
|
||||||
"faq": "FAQ",
|
"faq": "FAQ",
|
||||||
"documents": "Documents"
|
"documents": "Documents"
|
||||||
}
|
},
|
||||||
|
"redirecting": "Redirecting..."
|
||||||
}
|
}
|
||||||
|
|||||||
@ -126,5 +126,6 @@
|
|||||||
"specs": "Especificaciones",
|
"specs": "Especificaciones",
|
||||||
"faq": "FAQ",
|
"faq": "FAQ",
|
||||||
"documents": "Documentos"
|
"documents": "Documentos"
|
||||||
}
|
},
|
||||||
|
"redirecting": "Redirigiendo..."
|
||||||
}
|
}
|
||||||
|
|||||||
@ -126,5 +126,6 @@
|
|||||||
"specs": "Технические спецификации",
|
"specs": "Технические спецификации",
|
||||||
"faq": "Часто задаваемые вопросы",
|
"faq": "Часто задаваемые вопросы",
|
||||||
"documents": "Связанные документы"
|
"documents": "Связанные документы"
|
||||||
}
|
},
|
||||||
|
"redirecting": "Перенаправление..."
|
||||||
}
|
}
|
||||||
|
|||||||
@ -126,5 +126,6 @@
|
|||||||
"specs": "技术规格",
|
"specs": "技术规格",
|
||||||
"faq": "常见问题",
|
"faq": "常见问题",
|
||||||
"documents": "相关文档"
|
"documents": "相关文档"
|
||||||
}
|
},
|
||||||
|
"redirecting": "正在跳转..."
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user