feat(address): 修复默认地址唯一性并新增用户浏览记录功能
- 后端新增 clearDefault 方法,保存默认地址前清除其他默认状态,避免多默认地址 - 前端地址编辑页保存成功后若为默认,调用 setDefaultAddress 触发后端清理逻辑 - useAddress hook 加入 ensureSingleDefault,前端保证地址数据中只有一个默认地址 - 新增 shop_goods_browse 表及相关实体、Mapper、服务和控制器,实现用户商品浏览记录功能 - 商品详情页接入浏览记录上报,支持登录用户浏览记录服务端同步 - 浏览历史页支持登录用户服务端分页查询,未登录用户使用本地存储兜底 - 浏览历史页支持浏览记录单条删除、清空、上拉加载和下拉刷新功能 - 调整用户中心入口,恢复浏览历史菜单项显示 - 文档和内存文件更新,包括数据库建表 SQL、接口定义和项目编译说明
This commit is contained in:
52
src/api/shop/shopGoodsBrowse/index.ts
Normal file
52
src/api/shop/shopGoodsBrowse/index.ts
Normal file
@@ -0,0 +1,52 @@
|
||||
import request from '@/utils/request';
|
||||
import type { ApiResult, PageResult } from '@/api';
|
||||
import type { ShopGoodsBrowse, ShopGoodsBrowseParam } from './model';
|
||||
|
||||
/**
|
||||
* 上报浏览记录(异步静默,不抛错影响主流程)
|
||||
*/
|
||||
export async function reportBrowse(data: Partial<ShopGoodsBrowse>): Promise<void> {
|
||||
try {
|
||||
await request.post<ApiResult<unknown>>('/shop/shop-goods-browse', data);
|
||||
} catch {
|
||||
/* 静默失败:浏览记录上报不影响用户体验 */
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 分页查询我的浏览记录
|
||||
*/
|
||||
export async function pageBrowseHistory(params: ShopGoodsBrowseParam) {
|
||||
const res = await request.get<ApiResult<PageResult<ShopGoodsBrowse>>>(
|
||||
'/shop/shop-goods-browse/page',
|
||||
params
|
||||
);
|
||||
if (res.code === 0) {
|
||||
return res.data;
|
||||
}
|
||||
return Promise.reject(new Error(res.message));
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除单条浏览记录
|
||||
*/
|
||||
export async function deleteBrowseRecord(id: number) {
|
||||
const res = await request.del<ApiResult<unknown>>(
|
||||
`/shop/shop-goods-browse/${id}`
|
||||
);
|
||||
if (res.code === 0) {
|
||||
return res.message;
|
||||
}
|
||||
return Promise.reject(new Error(res.message));
|
||||
}
|
||||
|
||||
/**
|
||||
* 清空我的浏览记录
|
||||
*/
|
||||
export async function clearBrowseHistory() {
|
||||
const res = await request.del<ApiResult<unknown>>('/shop/shop-goods-browse');
|
||||
if (res.code === 0) {
|
||||
return res.message;
|
||||
}
|
||||
return Promise.reject(new Error(res.message));
|
||||
}
|
||||
Reference in New Issue
Block a user