import type { Achievement } from "./types" import { mockResponse, type PaginatedResponse, type PaginationParams } from "./client" // 模拟成就数据 const mockAchievements: Achievement[] = [ { id: "1", name: "初次见面", description: "第一次与洛天依对话", icon: "message-circle", category: "互动", requirement: "与洛天依进行第一次对话", rewardType: "经验值", rewardAmount: 100, rewardIcon: "zap", isHidden: false, unlockRate: 98.5, createdAt: "2023-01-01", updatedAt: "2023-01-01", }, { id: "2", name: "亲密无间", description: "与洛天依好感度达到80", icon: "heart", category: "好感度", requirement: "将洛天依的好感度提升至80", rewardType: "虚拟币", rewardAmount: 500, rewardIcon: "coins", isHidden: false, unlockRate: 45.2, createdAt: "2023-01-02", updatedAt: "2023-01-02", }, { id: "3", name: "形影不离", description: "与洛天依好感度达到100", icon: "heart-handshake", category: "好感度", requirement: "将洛天依的好感度提升至100", rewardType: "称号", rewardAmount: 1, rewardIcon: "badge", isHidden: false, unlockRate: 12.8, createdAt: "2023-01-03", updatedAt: "2023-01-03", }, { id: "4", name: "热情如火", description: "与洛天依单日互动达到50次", icon: "flame", category: "互动", requirement: "在一天内与洛天依互动50次", rewardType: "好感度", rewardAmount: 20, rewardIcon: "heart", isHidden: false, unlockRate: 23.7, createdAt: "2023-01-04", updatedAt: "2023-01-04", }, { id: "5", name: "坚持不懈", description: "连续7天与洛天依互动", icon: "calendar-check", category: "互动", requirement: "连续7天每天至少与洛天依互动1次", rewardType: "道具", rewardAmount: 1, rewardIcon: "gift", isHidden: false, unlockRate: 34.1, createdAt: "2023-01-05", updatedAt: "2023-01-05", }, { id: "6", name: "时尚达人", description: "收集10套服装", icon: "shirt", category: "收集", requirement: "收集10套不同的服装", rewardType: "服装", rewardAmount: 1, rewardIcon: "shirt", isHidden: false, unlockRate: 56.3, createdAt: "2023-01-06", updatedAt: "2023-01-06", }, { id: "7", name: "音乐鉴赏家", description: "收听20首不同的歌曲", icon: "music", category: "收集", requirement: "收听20首不同的歌曲", rewardType: "虚拟币", rewardAmount: 300, rewardIcon: "coins", isHidden: false, unlockRate: 42.9, createdAt: "2023-01-07", updatedAt: "2023-01-07", }, { id: "8", name: "舞动青春", description: "观看10支不同的舞蹈", icon: "footprints", category: "收集", requirement: "观看10支不同的舞蹈表演", rewardType: "经验值", rewardAmount: 200, rewardIcon: "zap", isHidden: false, unlockRate: 38.5, createdAt: "2023-01-08", updatedAt: "2023-01-08", }, { id: "9", name: "美食家", description: "收集15种不同的食物", icon: "utensils", category: "收集", requirement: "收集15种不同的食物", rewardType: "道具", rewardAmount: 1, rewardIcon: "gift", isHidden: false, unlockRate: 27.4, createdAt: "2023-01-09", updatedAt: "2023-01-09", }, { id: "10", name: "隐藏的秘密", description: "发现洛天依的秘密", icon: "sparkles", category: "隐藏", requirement: "???", rewardType: "称号", rewardAmount: 1, rewardIcon: "badge", isHidden: true, unlockRate: 5.2, createdAt: "2023-01-10", updatedAt: "2023-01-10", }, ] // 获取成就列表 export const getAchievements = async (params?: PaginationParams): Promise> => { let filteredAchievements = [...mockAchievements] // 搜索过滤 if (params?.search) { const search = params.search.toLowerCase() filteredAchievements = filteredAchievements.filter( (achievement) => achievement.name.toLowerCase().includes(search) || achievement.description.toLowerCase().includes(search) || achievement.category.toLowerCase().includes(search), ) } // 排序 if (params?.sortBy) { filteredAchievements.sort((a: any, b: any) => { const aValue = a[params.sortBy!] const bValue = b[params.sortBy!] if (typeof aValue === "string" && typeof bValue === "string") { return params.sortOrder === "desc" ? bValue.localeCompare(aValue) : aValue.localeCompare(bValue) } return params.sortOrder === "desc" ? bValue - aValue : aValue - bValue }) } // 分页 const page = params?.page || 1 const pageSize = params?.pageSize || 10 const startIndex = (page - 1) * pageSize const paginatedAchievements = filteredAchievements.slice(startIndex, startIndex + pageSize) return mockResponse({ items: paginatedAchievements, total: filteredAchievements.length, page, pageSize, totalPages: Math.ceil(filteredAchievements.length / pageSize), }) } // 获取单个成就 export const getAchievement = async (id: string): Promise => { const achievement = mockAchievements.find((achievement) => achievement.id === id) if (!achievement) { return mockResponse({} as Achievement, "成就不存在") } return mockResponse(achievement) } // 创建成就 export const createAchievement = async (achievementData: Partial): Promise => { const newAchievement: Achievement = { id: String(mockAchievements.length + 1), name: achievementData.name || "", description: achievementData.description || "", icon: achievementData.icon || "award", category: achievementData.category || "特殊", requirement: achievementData.requirement || "", rewardType: achievementData.rewardType || "经验值", rewardAmount: achievementData.rewardAmount || 0, rewardIcon: achievementData.rewardIcon, isHidden: achievementData.isHidden || false, unlockRate: 0, createdAt: new Date().toISOString().split("T")[0], updatedAt: new Date().toISOString().split("T")[0], } mockAchievements.push(newAchievement) return mockResponse(newAchievement) } // 更新成就 export const updateAchievement = async (id: string, achievementData: Partial): Promise => { const achievementIndex = mockAchievements.findIndex((achievement) => achievement.id === id) if (achievementIndex === -1) { return mockResponse({} as Achievement, "成就不存在") } const updatedAchievement = { ...mockAchievements[achievementIndex], ...achievementData, updatedAt: new Date().toISOString().split("T")[0], } mockAchievements[achievementIndex] = updatedAchievement return mockResponse(updatedAchievement) } // 删除成就 export const deleteAchievement = async (id: string): Promise => { const achievementIndex = mockAchievements.findIndex((achievement) => achievement.id === id) if (achievementIndex === -1) { return mockResponse(false, "成就不存在") } mockAchievements.splice(achievementIndex, 1) return mockResponse(true) }