feat(store): 门店套餐 v3.4.10 全端实现

新增 StorePackage 与变更审核流,覆盖总部直存、合伙/门店提审、C 端展示与套餐异议工单;同步 PRD/开发文档与 REQ 索引。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-08-03 19:30:59 +08:00
parent 7e3dc131ad
commit 3c19b7dd97
35 changed files with 2128 additions and 28 deletions
+1
View File
@@ -14,6 +14,7 @@ export * from './invoice';
export * from './user-log';
export * from './store-log';
export * from './store-package';
export * from './partner-log';
export * from './promo';
export * from './hq-permissions';
@@ -0,0 +1,60 @@
/** 门店套餐(v3.4.10 */
export interface StorePackageItemDto {
name: string;
price: string;
dishes: string;
usableTime?: string | null;
otherNotes?: string | null;
sortOrder: number;
}
export interface StorePackageViewDto extends StorePackageItemDto {
id?: string;
}
export type StorePackageChangeStatus = 'PENDING' | 'APPROVED' | 'REJECTED';
export type StorePackageSubmitterType = 'PARTNER' | 'SHOP';
export const STORE_PACKAGE_CHANGE_STATUS_LABELS: Record<StorePackageChangeStatus, string> = {
PENDING: '审核中',
APPROVED: '已通过',
REJECTED: '已驳回',
};
export const STORE_PACKAGE_MAX_COUNT = 10;
export interface StorePackagesResponse {
live: StorePackageViewDto[];
pendingRequest?: {
id: string;
status: StorePackageChangeStatus;
packages: StorePackageItemDto[];
rejectReason?: string | null;
createdAt: string;
} | null;
}
export interface StorePackageChangeRequestDto {
id: string;
storeId: string;
storeName?: string;
status: StorePackageChangeStatus;
packages: StorePackageItemDto[];
submitterType: StorePackageSubmitterType;
submitterId: string;
rejectReason?: string | null;
reviewedAt?: string | null;
createdAt: string;
}
export interface StorePackageAuditAction {
action: 'APPROVE' | 'REJECT';
rejectReason?: string;
}
export interface CreatePackageDisputeRequest {
storeId: string;
remark?: string;
redeemRecordId?: string;
}
+5 -2
View File
@@ -1,10 +1,11 @@
/** 售后工单类型(PRD 四类型 + 系统 ALERT */
/** 售后工单类型(PRD 四类型 + 系统 ALERT + 套餐异议 */
export type TicketTypeDto =
| 'REFUND'
| 'RESHIPMENT'
| 'ALERT'
| 'DAMAGE_RETURN'
| 'RETURN_REFUND';
| 'RETURN_REFUND'
| 'PACKAGE_DISPUTE';
/** 用户可发起的售后类型 */
export const AFTER_SALE_TICKET_TYPES = [
@@ -12,6 +13,7 @@ export const AFTER_SALE_TICKET_TYPES = [
'RESHIPMENT',
'DAMAGE_RETURN',
'RETURN_REFUND',
'PACKAGE_DISPUTE',
] as const;
export type AfterSaleTicketType = (typeof AFTER_SALE_TICKET_TYPES)[number];
@@ -22,6 +24,7 @@ export const TICKET_TYPE_LABELS: Record<TicketTypeDto, string> = {
ALERT: '异常',
DAMAGE_RETURN: '破损退货',
RETURN_REFUND: '退货退款',
PACKAGE_DISPUTE: '套餐异议',
};
export interface TicketDto {