190 lines
5.4 KiB
TypeScript
190 lines
5.4 KiB
TypeScript
import type { Outfit } from "./types"
|
|
import { mockResponse, type PaginatedResponse, type PaginationParams } from "./client"
|
|
|
|
// 模拟服装数据
|
|
const mockOutfits: Outfit[] = [
|
|
{
|
|
id: "OUT001",
|
|
name: "星空礼裙",
|
|
designer: "星辰设计工作室",
|
|
description: "以星空为灵感设计的华丽礼裙,适合正式场合穿着。",
|
|
releaseDate: "2023-08-15",
|
|
status: "已发布",
|
|
type: "礼服",
|
|
rarity: "传说",
|
|
image: "/placeholder.svg?height=300&width=300",
|
|
},
|
|
{
|
|
id: "OUT002",
|
|
name: "音符连衣裙",
|
|
designer: "音乐之声工作室",
|
|
description: "装饰有音符图案的连衣裙,轻盈飘逸,适合日常穿着。",
|
|
releaseDate: "2023-09-20",
|
|
status: "已发布",
|
|
type: "连衣裙",
|
|
rarity: "稀有",
|
|
image: "/placeholder.svg?height=300&width=300",
|
|
},
|
|
{
|
|
id: "OUT003",
|
|
name: "未来科技套装",
|
|
designer: "未来主义设计团队",
|
|
description: "融合未来科技元素的套装,包含上衣、裤子和配饰。",
|
|
releaseDate: "2023-10-30",
|
|
status: "已发布",
|
|
type: "套装",
|
|
rarity: "史诗",
|
|
image: "/placeholder.svg?height=300&width=300",
|
|
},
|
|
{
|
|
id: "OUT004",
|
|
name: "传统汉服",
|
|
designer: "古风设计工作室",
|
|
description: "传统风格的汉服,展现中国古典美学。",
|
|
releaseDate: "2023-12-05",
|
|
status: "已发布",
|
|
type: "汉服",
|
|
rarity: "稀有",
|
|
image: "/placeholder.svg?height=300&width=300",
|
|
},
|
|
{
|
|
id: "OUT005",
|
|
name: "春节限定旗袍",
|
|
designer: "洛天依官方设计团队",
|
|
description: "春节限定款旗袍,融合传统与现代元素。",
|
|
releaseDate: "",
|
|
status: "未发布",
|
|
type: "旗袍",
|
|
rarity: "传说",
|
|
image: "/placeholder.svg?height=300&width=300",
|
|
},
|
|
]
|
|
|
|
// 获取服装列表
|
|
export const getOutfits = async (params?: PaginationParams): Promise<PaginatedResponse<Outfit>> => {
|
|
let filteredOutfits = [...mockOutfits]
|
|
|
|
// 搜索过滤
|
|
if (params?.search) {
|
|
const search = params.search.toLowerCase()
|
|
filteredOutfits = filteredOutfits.filter(
|
|
(outfit) =>
|
|
outfit.name.toLowerCase().includes(search) ||
|
|
outfit.id.toLowerCase().includes(search) ||
|
|
outfit.designer.toLowerCase().includes(search) ||
|
|
outfit.type.toLowerCase().includes(search),
|
|
)
|
|
}
|
|
|
|
// 排序
|
|
if (params?.sortBy) {
|
|
filteredOutfits.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 paginatedOutfits = filteredOutfits.slice(startIndex, startIndex + pageSize)
|
|
|
|
return mockResponse({
|
|
items: paginatedOutfits,
|
|
total: filteredOutfits.length,
|
|
page,
|
|
pageSize,
|
|
totalPages: Math.ceil(filteredOutfits.length / pageSize),
|
|
})
|
|
}
|
|
|
|
// 获取单个服装
|
|
export const getOutfit = async (id: string): Promise<Outfit> => {
|
|
const outfit = mockOutfits.find((outfit) => outfit.id === id)
|
|
|
|
if (!outfit) {
|
|
return mockResponse({} as Outfit, "服装不存在")
|
|
}
|
|
|
|
return mockResponse(outfit)
|
|
}
|
|
|
|
// 创建服装
|
|
export const createOutfit = async (outfitData: Partial<Outfit>): Promise<Outfit> => {
|
|
// 生成新的服装ID
|
|
const outfitId = "OUT" + String(mockOutfits.length + 1).padStart(3, "0")
|
|
|
|
const newOutfit: Outfit = {
|
|
id: outfitId,
|
|
name: outfitData.name || "",
|
|
designer: outfitData.designer || "",
|
|
description: outfitData.description || "",
|
|
releaseDate: outfitData.releaseDate || "",
|
|
status: outfitData.status || "未发布",
|
|
type: outfitData.type || "",
|
|
rarity: outfitData.rarity || "",
|
|
image: outfitData.image || "/placeholder.svg?height=300&width=300",
|
|
}
|
|
|
|
mockOutfits.push(newOutfit)
|
|
|
|
return mockResponse(newOutfit)
|
|
}
|
|
|
|
// 更新服装
|
|
export const updateOutfit = async (id: string, outfitData: Partial<Outfit>): Promise<Outfit> => {
|
|
const outfitIndex = mockOutfits.findIndex((outfit) => outfit.id === id)
|
|
|
|
if (outfitIndex === -1) {
|
|
return mockResponse({} as Outfit, "服装不存在")
|
|
}
|
|
|
|
const updatedOutfit = {
|
|
...mockOutfits[outfitIndex],
|
|
...outfitData,
|
|
}
|
|
|
|
mockOutfits[outfitIndex] = updatedOutfit
|
|
|
|
return mockResponse(updatedOutfit)
|
|
}
|
|
|
|
// 删除服装
|
|
export const deleteOutfit = async (id: string): Promise<boolean> => {
|
|
const outfitIndex = mockOutfits.findIndex((outfit) => outfit.id === id)
|
|
|
|
if (outfitIndex === -1) {
|
|
return mockResponse(false, "服装不存在")
|
|
}
|
|
|
|
// 已发布的服装不能删除
|
|
if (mockOutfits[outfitIndex].status === "已发布") {
|
|
return mockResponse(false, "已发布的服装不能删除")
|
|
}
|
|
|
|
mockOutfits.splice(outfitIndex, 1)
|
|
|
|
return mockResponse(true)
|
|
}
|
|
|
|
// 发布服装
|
|
export const publishOutfit = async (id: string): Promise<Outfit> => {
|
|
const outfitIndex = mockOutfits.findIndex((outfit) => outfit.id === id)
|
|
|
|
if (outfitIndex === -1) {
|
|
return mockResponse({} as Outfit, "服装不存在")
|
|
}
|
|
|
|
mockOutfits[outfitIndex].status = "已发布"
|
|
mockOutfits[outfitIndex].releaseDate = new Date().toISOString().split("T")[0]
|
|
|
|
return mockResponse(mockOutfits[outfitIndex])
|
|
}
|