diff --git a/db/repo/resource_repository.go b/db/repo/resource_repository.go index 111ec54..1045c62 100644 --- a/db/repo/resource_repository.go +++ b/db/repo/resource_repository.go @@ -239,9 +239,28 @@ func (r *ResourceRepositoryImpl) SearchWithFilters(params map[string]interface{} Where("resource_tags.tag_id = ?", tagEntity.ID) } } + case "pan_id": // 添加pan_id参数支持 + if panID, ok := value.(uint); ok { + db = db.Where("pan_id = ?", panID) + } + case "is_valid": + if isValid, ok := value.(bool); ok { + db = db.Where("is_valid = ?", isValid) + } + case "is_public": + if isPublic, ok := value.(bool); ok { + db = db.Where("is_public = ?", isPublic) + } } } - db = db.Where("is_valid = true and is_public = true") + + // 如果没有明确指定is_valid和is_public,则默认只显示有效的公开资源 + if _, hasIsValid := params["is_valid"]; !hasIsValid { + db = db.Where("is_valid = ?", true) + } + if _, hasIsPublic := params["is_public"]; !hasIsPublic { + db = db.Where("is_public = ?", true) + } // 获取总数 if err := db.Count(&total).Error; err != nil { diff --git a/web/pages/index.vue b/web/pages/index.vue index d7b8b81..fc5f9de 100644 --- a/web/pages/index.vue +++ b/web/pages/index.vue @@ -58,29 +58,31 @@
- +
- - +
@@ -163,61 +165,9 @@ - -
- -
+ - -
- - - - - - - ... - - - - -
@@ -275,17 +225,9 @@ const route = useRoute() const router = useRouter() // 响应式数据 -const initSerch = route.query.search || '' -const oldQuery = ref(initSerch) -const searchQuery = ref(oldQuery) -const currentPage = ref(parseInt(route.query.page as string) || 1) -const pageSize = ref(200) -const selectedPlatform = ref(route.query.platform as string || '') const showLinkModal = ref(false) const selectedResource = ref(null) const authInitialized = ref(true) // 在app.vue中已经初始化,这里直接设为true -const isLoadingMore = ref(false) -const hasMoreData = ref(true) const pageLoading = ref(false) // 用户状态管理 @@ -293,12 +235,12 @@ const userStore = useUserStore() // 使用 useAsyncData 获取资源数据 const { data: resourcesData, pending, refresh } = await useAsyncData( - () => `resources-${currentPage.value}-${searchQuery.value}-${selectedPlatform.value}`, + () => `resources-1-${route.query.search || ''}-${route.query.platform || ''}`, () => resourceApi.getResources({ - page: currentPage.value, - page_size: pageSize.value, - search: searchQuery.value, - pan_id: selectedPlatform.value + page: 1, + page_size: 200, + search: route.query.search as string || '', + pan_id: route.query.platform as string || '' }) ) @@ -318,69 +260,24 @@ const platforms = computed(() => (platformsData.value as any) || []) const systemConfig = computed(() => (systemConfigData.value as any).data || { site_title: '老九网盘资源数据库' }) const safeLoading = computed(() => pending.value) -// 计算属性 -const totalPages = computed(() => { - const total = (resourcesData.value as any)?.total || 0 - return Math.ceil(total / pageSize.value) -}) + +// 从路由参数获取当前状态 +const searchQuery = ref(route.query.search as string || '') +const selectedPlatform = computed(() => route.query.platform as string || '') + +const handleSearch = () => { + const params = new URLSearchParams() + if (searchQuery.value) params.set('search', searchQuery.value) + if (selectedPlatform.value) params.set('platform', selectedPlatform.value) + window.location.href = `/?${params.toString()}` +} // 初始化认证状态 onMounted(() => { animateCounters() }) -// 搜索处理 -const handleSearch = async (e?: any) => { - if (e && e.target && typeof e.target.value === 'string') { - searchQuery.value = e.target.value - } - if (oldQuery.value === searchQuery.value) { - return - } - oldQuery.value = searchQuery.value - currentPage.value = 1 - - // 更新URL参数 - const query = { ...route.query } - if ((searchQuery.value as string).trim()) { - query.search = (searchQuery.value as string).trim() - } else { - delete query.search - } - if (selectedPlatform.value) { - query.platform = selectedPlatform.value - } else { - delete query.platform - } - delete query.page // 重置页码 - - // 更新URL(不刷新页面) - await router.push({ query }) - - // 刷新数据 - await refresh() -} -// 平台筛选 -const filterByPlatform = async (platformId: string) => { - selectedPlatform.value = platformId - currentPage.value = 1 - - // 更新URL参数 - const query = { ...route.query } - if (platformId) { - query.platform = platformId - } else { - delete query.platform - } - delete query.page // 重置页码 - - // 更新URL(不刷新页面) - await router.push({ query }) - - // 刷新数据 - await refresh() -} // 获取平台名称 const getPlatformIcon = (panId: string) => { @@ -498,53 +395,11 @@ const animateCounters = () => { }) } -// 页面跳转 -const goToPage = async (page: number) => { - currentPage.value = page - - // 更新URL参数 - const query = { ...route.query } - query.page = page.toString() - await router.push({ query }) - - // 刷新数据 - await refresh() - - // 滚动到顶部(只在客户端执行) - if (process.client) { - window.scrollTo({ - top: 0, - behavior: 'smooth' - }) - } -} -const loadMore = async () => { - if (isLoadingMore.value || !hasMoreData.value) return - - isLoadingMore.value = true - try { - currentPage.value++ - - // 使用 refresh 获取更多数据 - await refresh() - - // 检查是否还有更多数据 - const currentTotal = (resourcesData.value as any)?.data?.total || 0 - const currentLoaded = safeResources.value.length - - if (currentLoaded >= currentTotal) { - hasMoreData.value = false - } - } catch (error) { - console.error('加载更多失败:', error) - currentPage.value-- // 回退页码 - } finally { - isLoadingMore.value = false - } -} + +