From 9ca235907fb827e21fc5abdc68a014c9bfe27fcf Mon Sep 17 00:00:00 2001 From: YoVinchen Date: Thu, 5 Mar 2026 20:31:29 +0800 Subject: [PATCH] =?UTF-8?q?Vue3=20=E5=89=8D=E7=AB=AF=E8=A1=A5=E5=85=85?= =?UTF-8?q?=EF=BC=9A=E7=A7=92=E6=9D=80=E5=92=8C=E5=95=86=E5=93=81=20API=20?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B=E5=AE=9A=E4=B9=89=E5=8F=8A=E9=A6=96=E9=A1=B5?= =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 添加 flashsale/product API 接口模块 - 添加 flashsale/product TypeScript 类型定义 - 更新首页组件 --- flash-sale-frontend/src/api/flashsale.ts | 34 +++++++++++++++ flash-sale-frontend/src/api/product.ts | 44 ++++++++++++++++++++ flash-sale-frontend/src/pages/home/index.vue | 11 ++--- flash-sale-frontend/src/types/flashsale.ts | 29 +++++++++++++ flash-sale-frontend/src/types/product.ts | 37 ++++++++++++++++ 5 files changed, 150 insertions(+), 5 deletions(-) create mode 100644 flash-sale-frontend/src/api/flashsale.ts create mode 100644 flash-sale-frontend/src/api/product.ts create mode 100644 flash-sale-frontend/src/types/flashsale.ts create mode 100644 flash-sale-frontend/src/types/product.ts diff --git a/flash-sale-frontend/src/api/flashsale.ts b/flash-sale-frontend/src/api/flashsale.ts new file mode 100644 index 0000000..113c31b --- /dev/null +++ b/flash-sale-frontend/src/api/flashsale.ts @@ -0,0 +1,34 @@ +import request from './request' +import type { FlashSale, FlashSaleParams } from '@/types/flashsale' + +export const flashSaleApi = { + // 获取秒杀活动列表 + getList(params?: FlashSaleParams) { + return request.get('/api/flashsales', { params }) + }, + + // 获取秒杀活动详情 + getDetail(id: number) { + return request.get(`/api/flashsales/${id}`) + }, + + // 参与秒杀 + participate(flashSaleId: number, quantity: number = 1) { + return request.post('/api/flashsales/participate', { + flashSaleId, + quantity + }) + }, + + // 获取正在进行的秒杀活动 + getActive() { + return request.get('/api/flashsales/active') + }, + + // 获取即将开始的秒杀活动 + getUpcoming() { + return request.get('/api/flashsales/upcoming') + } +} + +export default flashSaleApi \ No newline at end of file diff --git a/flash-sale-frontend/src/api/product.ts b/flash-sale-frontend/src/api/product.ts new file mode 100644 index 0000000..d44e753 --- /dev/null +++ b/flash-sale-frontend/src/api/product.ts @@ -0,0 +1,44 @@ +import request from './request' +import type { Product, ProductParams } from '@/types/product' + +export const productApi = { + // 获取商品列表 + getList(params?: ProductParams) { + return request.get('/api/products', { params }) + }, + + // 获取商品详情 + getDetail(id: number) { + return request.get(`/api/products/${id}`) + }, + + // 获取热门商品 + getHot(limit: number = 8) { + return request.get('/api/products/hot', { + params: { limit } + }) + }, + + // 获取推荐商品 + getRecommended(limit: number = 8) { + return request.get('/api/products/recommended', { + params: { limit } + }) + }, + + // 搜索商品 + search(keyword: string) { + return request.get('/api/products/search', { + params: { keyword } + }) + }, + + // 按分类获取商品 + getByCategory(categoryId: number) { + return request.get('/api/products/category', { + params: { categoryId } + }) + } +} + +export default productApi \ No newline at end of file diff --git a/flash-sale-frontend/src/pages/home/index.vue b/flash-sale-frontend/src/pages/home/index.vue index 7823ad1..f8f0441 100644 --- a/flash-sale-frontend/src/pages/home/index.vue +++ b/flash-sale-frontend/src/pages/home/index.vue @@ -117,7 +117,7 @@

五种数据类型应用,毫秒级响应

- +

接口限流

多种限流策略,防止恶意刷单

@@ -133,11 +133,12 @@ import { useRouter } from 'vue-router' import { ElMessage } from 'element-plus' import FlashSaleCard from '@/components/business/FlashSaleCard.vue' import ProductCard from '@/components/business/ProductCard.vue' -import { flashsaleApi } from '@/api/modules/flashsale' -import { productApi } from '@/api/modules/product' +import flashsaleApi from '@/api/flashsale' +import productApi from '@/api/product' import { useCartStore } from '@/stores/cart' import { useUserStore } from '@/stores/user' -import type { FlashSale, Product } from '@/types/api' +import type { FlashSale } from '@/types/flashsale' +import type { Product } from '@/types/product' const router = useRouter() const cartStore = useCartStore() @@ -170,7 +171,7 @@ const banners = [ buttonText: '查看商品', link: '/products', bgColor: 'linear-gradient(135deg, #4facfe 0%, #00f2fe 100%)', - icon: 'Speedometer' + icon: 'Odometer' } ] diff --git a/flash-sale-frontend/src/types/flashsale.ts b/flash-sale-frontend/src/types/flashsale.ts new file mode 100644 index 0000000..0742c0f --- /dev/null +++ b/flash-sale-frontend/src/types/flashsale.ts @@ -0,0 +1,29 @@ +export interface FlashSale { + id: number + productId: number + productName: string + productImage: string + originalPrice: number + flashPrice: number + flashStock: number + soldCount: number + startTime: string + endTime: string + status: number // 0-未开始 1-进行中 2-已结束 + description?: string + createdAt: string + updatedAt: string +} + +export interface FlashSaleParams { + status?: number + keyword?: string + sort?: string + page?: number + size?: number +} + +export interface FlashSaleParticipation { + flashSaleId: number + quantity: number +} \ No newline at end of file diff --git a/flash-sale-frontend/src/types/product.ts b/flash-sale-frontend/src/types/product.ts new file mode 100644 index 0000000..8e6318d --- /dev/null +++ b/flash-sale-frontend/src/types/product.ts @@ -0,0 +1,37 @@ +export interface Product { + id: number + name: string + description: string + price: number + stock: number + image: string + category: string + categoryId: number + brand?: string + specifications?: Record + sales: number + rating: number + reviewCount: number + status: number // 0-下架 1-上架 + createdAt: string + updatedAt: string +} + +export interface ProductParams { + categoryId?: number + keyword?: string + minPrice?: number + maxPrice?: number + sort?: string + page?: number + size?: number +} + +export interface Category { + id: number + name: string + parentId?: number + icon?: string + sort: number + children?: Category[] +} \ No newline at end of file