feat(ticket): 添加水票功能模块

- 新增水票相关API接口,包括水票模板、用户水票、消费日志和水票释放功能
- 添加水票管理页面,实现水票的增删改查和详情展示功能
- 实现水票的分页查询和列表展示界面
- 替换原有的礼品卡功能为水票功能,在首页导航中更新路由链接
- 添加水票详情页面,支持二维码展示和兑换码复制功能
- 实现水票的状态管理和使用流程控制
This commit is contained in:
2026-02-04 10:02:26 +08:00
parent cb17e48b03
commit a3c952d092
23 changed files with 2393 additions and 5 deletions

View File

@@ -0,0 +1,105 @@
import request from '@/utils/request';
import type { ApiResult, PageResult } from '@/api';
import type { GltTicketTemplate, GltTicketTemplateParam } from './model';
/**
* 分页查询水票
*/
export async function pageGltTicketTemplate(params: GltTicketTemplateParam) {
const res = await request.get<ApiResult<PageResult<GltTicketTemplate>>>(
'/glt/glt-ticket-template/page',
{
params
}
);
if (res.code === 0) {
return res.data;
}
return Promise.reject(new Error(res.message));
}
/**
* 查询水票列表
*/
export async function listGltTicketTemplate(params?: GltTicketTemplateParam) {
const res = await request.get<ApiResult<GltTicketTemplate[]>>(
'/glt/glt-ticket-template',
{
params
}
);
if (res.code === 0 && res.data) {
return res.data;
}
return Promise.reject(new Error(res.message));
}
/**
* 添加水票
*/
export async function addGltTicketTemplate(data: GltTicketTemplate) {
const res = await request.post<ApiResult<unknown>>(
'/glt/glt-ticket-template',
data
);
if (res.code === 0) {
return res.message;
}
return Promise.reject(new Error(res.message));
}
/**
* 修改水票
*/
export async function updateGltTicketTemplate(data: GltTicketTemplate) {
const res = await request.put<ApiResult<unknown>>(
'/glt/glt-ticket-template',
data
);
if (res.code === 0) {
return res.message;
}
return Promise.reject(new Error(res.message));
}
/**
* 删除水票
*/
export async function removeGltTicketTemplate(id?: number) {
const res = await request.del<ApiResult<unknown>>(
'/glt/glt-ticket-template/' + id
);
if (res.code === 0) {
return res.message;
}
return Promise.reject(new Error(res.message));
}
/**
* 批量删除水票
*/
export async function removeBatchGltTicketTemplate(data: (number | undefined)[]) {
const res = await request.del<ApiResult<unknown>>(
'/glt/glt-ticket-template/batch',
{
data
}
);
if (res.code === 0) {
return res.message;
}
return Promise.reject(new Error(res.message));
}
/**
* 根据id查询水票
*/
export async function getGltTicketTemplate(id: number) {
const res = await request.get<ApiResult<GltTicketTemplate>>(
'/glt/glt-ticket-template/' + id
);
if (res.code === 0 && res.data) {
return res.data;
}
return Promise.reject(new Error(res.message));
}

View File

@@ -0,0 +1,55 @@
import type { PageParam } from '@/api';
/**
* 水票
*/
export interface GltTicketTemplate {
//
id?: number;
// 关联商品ID
goodsId?: number;
// 名称
name?: string;
// 启用
enabled?: boolean;
// 单位名称
unitName?: string;
// 最小购买数量
minBuyQty?: number;
// 起始发送数量
startSendQty?: number;
// 买赠买1送4 => gift_multiplier=4
giftMultiplier?: number;
// 是否把购买量也计入套票总量(默认仅计入赠送量)
includeBuyQty?: boolean;
// 每期释放数量默认每月释放10
monthlyReleaseQty?: number;
// 总共释放多少期(若配置>0则按期数平均分摊
releasePeriods?: number;
// 首期释放时机0=支付成功当刻1=下个月同日
firstReleaseMode?: number;
// 用户ID
userId?: number;
// 排序(数字越小越靠前)
sortNumber?: number;
// 备注
comments?: string;
// 状态, 0正常, 1冻结
status?: number;
// 是否删除, 0否, 1是
deleted?: number;
// 租户id
tenantId?: number;
// 创建时间
createTime?: string;
// 修改时间
updateTime?: string;
}
/**
* 水票搜索条件
*/
export interface GltTicketTemplateParam extends PageParam {
id?: number;
keywords?: string;
}