| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- import { hc } from 'hono/client';
- import type { HomeRoutes } from '@/server/api';
- import { axiosFetch } from './utils';
- export const homeClient = hc<HomeRoutes>('/api/v1', {
- fetch: axiosFetch,
- }).api.v1.home;
- // 类型定义
- export type HomeData = {
- banners: PolicyNews[];
- recommendedJobs: Job[];
- hotKnowledge: SilverKnowledge[];
- timeBankActivities: TimeBankActivity[];
- userStats: UserStats;
- };
- // 导出类型以便前端使用
- export type { PolicyNews } from '@/server/modules/silver-users/policy-news.entity';
- export type { Job } from '@/server/modules/silver-jobs/job.entity';
- export type { SilverKnowledge } from '@/server/modules/silver-users/silver-knowledge.entity';
- export type { SilverTimeBank } from '@/server/modules/silver-users/silver-time-bank.entity';
- interface PolicyNews {
- id: number;
- newsTitle: string;
- newsContent: string;
- images: string | null;
- summary: string | null;
- category: string | null;
- viewCount: number;
- createdAt: Date;
- }
- interface Job {
- id: number;
- title: string;
- description: string;
- salaryRange: string | null;
- location: string | null;
- company: {
- id: number;
- name: string;
- logo: string | null;
- } | null;
- createdAt: Date;
- }
- interface SilverKnowledge {
- id: number;
- title: string;
- content: string;
- coverImage: string | null;
- viewCount: number;
- category: {
- id: number;
- name: string;
- } | null;
- createdAt: Date;
- }
- interface TimeBankActivity {
- id: number;
- workType: number;
- organization: string;
- workHours: number;
- earnedPoints: number;
- workDate: Date;
- }
- interface UserStats {
- pointBalance: number;
- timeBankHours: number;
- publishedCount: number;
- favoriteCount: number;
- }
- // API方法
- export const homeApi = {
- /**
- * 获取首页数据
- */
- async getHomeData(limit?: number) {
- const response = await homeClient.$get({
- query: limit ? { limit } : undefined
- });
-
- if (response.status !== 200) {
- throw new Error('获取首页数据失败');
- }
-
- return response.json();
- },
- /**
- * 搜索功能
- */
- async search(keyword: string, type: 'jobs' | 'knowledge' | 'companies' | 'all' = 'all', limit: number = 10) {
- const response = await homeClient.search.$get({
- query: {
- keyword,
- type,
- limit
- }
- });
-
- if (response.status !== 200) {
- throw new Error('搜索失败');
- }
-
- return response.json();
- }
- };
|