feat(shopOrder): 新增确认线下收款上传支付凭证功能

- 重构确认线下收款为独立组件 OfflinePaymentModal.vue
- 新增支付凭证字段 paymentVoucher,支持图片上传与预览
- 上传限制为 jpg/png 格式,单张图片最大 10MB
- API confirmOfflinePayment 新增 paymentVoucher 参数
- 页面移除原 Modal.confirm 逻辑,改为调用新组件弹窗
- 修复 buyerRemarks 和 merchantRemarks 类型错误
- 后端 shop_order 表待新增 payment_voucher 字段和接口支持
- 同步更新相关接口模型与视图交互逻辑

feat(shopGoodsBrowse): 新增用户商品浏览记录管理功能

- 新增 ShopGoodsBrowse 接口模型及分页查询、删除接口
- 前端新增浏览记录管理页面,实现列表展示和删除
- 支持基于用户ID、商品ID、浏览来源和日期范围搜索
- 列表显示商品图片、名称、价格、浏览次数及时间等信息
- 添加图片预览和操作确认弹窗,保障操作体验和安全
This commit is contained in:
2026-07-15 13:30:14 +08:00
parent 9e65007e65
commit a59d428e78
9 changed files with 636 additions and 31 deletions

View File

@@ -0,0 +1,30 @@
import request from '@/utils/request';
import type { ApiResult, PageResult } from '@/api';
import type { ShopGoodsBrowse, ShopGoodsBrowseParam } from './model';
/**
* 后台管理:分页查询浏览记录
*/
export async function pageShopGoodsBrowse(params: ShopGoodsBrowseParam) {
const res = await request.get<ApiResult<PageResult<ShopGoodsBrowse>>>(
'/shop/shop-goods-browse/admin/page',
{ params }
);
if (res.data.code === 0) {
return res.data.data;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 后台管理:删除单条浏览记录
*/
export async function removeShopGoodsBrowse(id?: number) {
const res = await request.delete<ApiResult<unknown>>(
'/shop/shop-goods-browse/admin/' + id
);
if (res.data.code === 0) {
return res.data.message;
}
return Promise.reject(new Error(res.data.message));
}

View File

@@ -0,0 +1,42 @@
import type { PageParam } from '@/api';
/**
* 用户商品浏览记录
*/
export interface ShopGoodsBrowse {
id?: number;
userId?: number;
goodsId?: number;
tenantId?: number;
merchantId?: number;
/** 浏览次数 */
visitCount?: number;
/** 最后浏览时间 */
lastVisitTime?: string;
/** 浏览来源 */
browseSource?: string;
createTime?: string;
updateTime?: string;
/** 商品名称(关联查询) */
goodsName?: string;
/** 商品封面图(关联查询) */
goodsImage?: string;
/** 商品价格(关联查询) */
price?: string;
/** 市场价(关联查询) */
salePrice?: string;
}
/**
* 浏览记录查询参数
*/
export interface ShopGoodsBrowseParam extends PageParam {
id?: number;
userId?: number;
goodsId?: number;
merchantId?: number;
tenantId?: number;
browseSource?: string;
startTime?: string;
endTime?: string;
}

View File

@@ -154,12 +154,19 @@ export async function refundShopOrder(data: ShopOrder) {
/**
* 确认线下付款收款
* 商家确认已收到线下转账(微信转账/银行汇款等),确认后订单进入待发货状态
* @param id 订单ID
* @param remarks 备注(可选)
* @param paymentVoucher 支付凭证图片地址(可选)
*/
export async function confirmOfflinePayment(id: number, remarks?: string) {
export async function confirmOfflinePayment(
id: number,
remarks?: string,
paymentVoucher?: string
) {
const res = await request.put<ApiResult<unknown>>(
MODULES_API_URL + '/shop/shop-order/confirm-offline-payment/' + id,
null,
{ params: { remarks } }
{ params: { remarks, paymentVoucher } }
);
if (res.data.code === 0) {
return res.data.message;

View File

@@ -129,6 +129,8 @@ export interface ShopOrder {
invoiceNo?: string;
// 支付时间
payTime?: string;
// 线下收款支付凭证(图片地址,确认线下收款时上传)
paymentVoucher?: string;
// 退款时间
refundTime?: string;
// 申请退款时间
@@ -142,9 +144,9 @@ export interface ShopOrder {
// 系统版本号 0当前版本 value=其他版本
version?: number;
// 买家备注
buyerRemarks: undefined;
buyerRemarks?: string;
// 商家备注
merchantRemarks: undefined;
merchantRemarks?: string;
// 用户id
userId?: number;
// 备注