feat(address): 修复默认地址唯一性并新增用户浏览记录功能

- 后端新增 clearDefault 方法,保存默认地址前清除其他默认状态,避免多默认地址
- 前端地址编辑页保存成功后若为默认,调用 setDefaultAddress 触发后端清理逻辑
- useAddress hook 加入 ensureSingleDefault,前端保证地址数据中只有一个默认地址
- 新增 shop_goods_browse 表及相关实体、Mapper、服务和控制器,实现用户商品浏览记录功能
- 商品详情页接入浏览记录上报,支持登录用户浏览记录服务端同步
- 浏览历史页支持登录用户服务端分页查询,未登录用户使用本地存储兜底
- 浏览历史页支持浏览记录单条删除、清空、上拉加载和下拉刷新功能
- 调整用户中心入口,恢复浏览历史菜单项显示
- 文档和内存文件更新,包括数据库建表 SQL、接口定义和项目编译说明
This commit is contained in:
2026-07-15 12:52:25 +08:00
parent 3955e64844
commit 3f1931e420
9 changed files with 349 additions and 32 deletions

View File

@@ -4,6 +4,8 @@
- 项目名xinlong-shop-taroTaro 微信小程序商城)
- 技术栈Taro + React + TypeScript + Tailwind CSS
- 后端 API 前缀:`/shop/``/api/`
- **后端项目路径:`/Users/gxwebsoft/JAVA/guilixu-java`**(⚠️ 不要找 paopao-java 或 websopy-java那是旧的
- **后端 Maven 编译命令**`cd /Users/gxwebsoft/JAVA/guilixu-java && "/Applications/IntelliJ IDEA Ultimate.app/Contents/plugins/maven/lib/maven3/bin/mvn" compile`guilixu 的 mvnw 损坏,用 IntelliJ 自带的 mvn
- 门店店员身份判断:通过 `getMyClerk()` API (`/shop/shop-store-user/my`) 返回值判断
- VIP/分销商申请记录表:`ShopDealerApply`,状态码 10待审核/20通过/30驳回
@@ -66,3 +68,16 @@
- `merchantRemarks` — 商户备注:门店修改金额时填写的原因记录
- `comments` — 系统/其他备注:保留给系统内部使用
- `ShopOrder``OrderCreateRequest` 接口均已包含 `buyerRemarks``merchantRemarks` 字段
## 用户浏览记录功能2026-07-15
- 存储模式:**去重累加**(同一用户+商品只留一条visit_count 累加5分钟内去重
- 数据库表:`shop_goods_browse`字段id/user_id/goods_id/tenant_id/merchant_id/visit_count/last_visit_time/browse_source/create_time/update_time
- 唯一索引:`uk_user_goods (user_id, goods_id)`;查询索引:`idx_user_time``idx_goods_time`
- 后端 API 路径:`/api/shop/shop-goods-browse`POST 上报 / GET page 我的足迹 / DELETE {id} 删单条 / DELETE 清空 / GET admin/page 后台查询)
- 前端 API`src/api/shop/shopGoodsBrowse/index.ts`reportBrowse 静默上报 / pageBrowseHistory / deleteBrowseRecord / clearBrowseHistory
- 商品详情页 `product-detail.tsx``addToHistory()` 已接入:已登录时异步调 reportBrowse未登录仅本地 browse_history
- 浏览历史页 `src/pages/user/history-list/index.tsx` 已改为服务端分页(登录),未登录回退本地存储
- 后端文件:`ShopGoodsBrowse.java`(entity) / `ShopGoodsBrowseParam.java` / `ShopGoodsBrowseMapper.java`+XML / `ShopGoodsBrowseService.java`+Impl / `ShopGoodsBrowseController.java`
- 建表 SQL`/Users/gxwebsoft/JAVA/guilixu-java/sql/shop_goods_browse.sql`
- 后台管理前端:`/Users/gxwebsoft/VUE/guilixu-admin`Vue3 + Ant Design Vue + Vite非 RuoYi
- 注意:`BaseController.success()``success(IPage<T>)` 重载,泛型方法返回类型用 `ApiResult<?>` 而非 `ApiResult<PageResult<T>>`(否则 fail() 分支类型不兼容)