From 44ca5bbbfc383d6a5abd26c2eddd37b8774270a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E5=BF=A0=E6=9E=97?= <170083662@qq.com> Date: Fri, 26 Jun 2026 22:25:07 +0800 Subject: [PATCH] =?UTF-8?q?feat(shop):=20=E6=B7=BB=E5=8A=A0=E5=95=86?= =?UTF-8?q?=E5=93=81=E8=AF=A6=E6=83=85=E9=A1=B5=E8=BD=AE=E6=92=AD=E5=9B=BE?= =?UTF-8?q?=E7=82=B9=E5=87=BB=E6=94=BE=E5=A4=A7=E9=A2=84=E8=A7=88=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在 src/pages/shop/product-detail.tsx 的轮播图 Image 上添加 onClick 事件 - 使用 Taro.previewImage 实现图片全屏预览和左右滑动浏览 - 同样在 src/pages/points/product-detail.tsx 商品图片添加点击预览功能 - 新增完整的 shop-api 秒杀模块,包含实体、参数、mapper、service、controller 和定时任务 - 实现防重复提交、活动校验、限购校验和原子扣库存的秒杀核心下单逻辑 - 提供管理端 CRUD 与用户端秒杀订单相关接口 - 引入定时任务 SeckillStatusTask 定时更新秒杀活动状态 - 添加秒杀模块相关数据库建表脚本和接口路径对齐前端设计 --- .workbuddy/memory/2026-06-25.md | 12 ++++++++++++ .workbuddy/memory/2026-06-26.md | 7 +++++++ src/pages/points/product-detail.tsx | 1 + src/pages/shop/product-detail.tsx | 7 ++++++- 4 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 .workbuddy/memory/2026-06-26.md diff --git a/.workbuddy/memory/2026-06-25.md b/.workbuddy/memory/2026-06-25.md index 72aa4eb..ffa09cd 100644 --- a/.workbuddy/memory/2026-06-25.md +++ b/.workbuddy/memory/2026-06-25.md @@ -10,3 +10,15 @@ - **文件**: `/Users/gxwebsoft/VUE/weiyu-taro/src/pages/shop/product-detail.tsx` - 同样缺少 Markdown 图片语法转 HTML 的 `parseContent()` 函数,已同步添加 - 与 xinlong-shop-taro 修复方案完全一致 + +## shop-api 后端秒杀模块实现 +- **项目路径**: `/Users/gxwebsoft/JAVA/shop-api` +- 新增完整的秒杀后端模块,参考 ShopGoods 四层架构模板 +- **Entity**: ShopSeckill.java + ShopSeckillOrder.java(含 tenantId 多租户) +- **Param**: ShopSeckillParam.java +- **Mapper**: ShopSeckillMapper + ShopSeckillOrderMapper + XML(含原子扣库存 SQL) +- **Service**: ShopSeckillServiceImpl(核心下单逻辑:防重复提交→活动校验→限购校验→原子扣库存→创建订单→Redis记录已购) +- **Controller**: ShopSeckillController(管理端 CRUD + 用户端 createOrder/myOrders/timeSlots) +- **定时任务**: SeckillStatusTask(每60秒自动更新过期秒杀状态) +- **建表SQL**: src/main/resources/sql/shop_seckill.sql +- API 路径 `/api/shop/shopSeckill`,与前端 `/shopSeckill/*` 对齐 diff --git a/.workbuddy/memory/2026-06-26.md b/.workbuddy/memory/2026-06-26.md new file mode 100644 index 0000000..46eeb9f --- /dev/null +++ b/.workbuddy/memory/2026-06-26.md @@ -0,0 +1,7 @@ +## 2026-06-26 + +### 商品详情页轮播图添加点击放大预览 +- **文件**: `src/pages/shop/product-detail.tsx` +- 在 Swiper 轮播图的 Image 上添加 `onClick` → 调用 `Taro.previewImage({ current: img, urls: images })` +- `previewImage` 是 Taro 内置 API,在小程序中原生支持全屏预览 + 左右滑动翻图,无需额外组件 +- **文件**: `src/pages/points/product-detail.tsx` — 同样添加了点击放大预览 diff --git a/src/pages/points/product-detail.tsx b/src/pages/points/product-detail.tsx index da319a8..6601245 100644 --- a/src/pages/points/product-detail.tsx +++ b/src/pages/points/product-detail.tsx @@ -97,6 +97,7 @@ const PointsProductDetail: React.FC = () => { style={{ height: '375px' }} src={product.productImage} mode='aspectFill' + onClick={() => Taro.previewImage({ current: product.productImage, urls: [product.productImage!] })} /> ) : ( diff --git a/src/pages/shop/product-detail.tsx b/src/pages/shop/product-detail.tsx index a5cfa32..0a6991c 100644 --- a/src/pages/shop/product-detail.tsx +++ b/src/pages/shop/product-detail.tsx @@ -230,7 +230,12 @@ const ProductDetailPage: React.FC = () => { > {images.map((img, idx) => ( - + Taro.previewImage({ current: img, urls: images })} + /> ))} {images.length === 0 && (