feat: 技术支持工单/企微权限/开发版本管理/消息推送等迭代

This commit is contained in:
2026-08-04 21:32:13 +08:00
parent c8ea5a3119
commit 9d96c73246
1341 changed files with 0 additions and 195605 deletions
@@ -1,130 +0,0 @@
import {
IsArray,
IsIn,
IsNotEmpty,
IsNumber,
IsOptional,
IsString,
Min,
} from 'class-validator';
import { Type } from 'class-transformer';
export class XiaofeixiaEstimateFreightDto {
@Type(() => Number)
@IsNumber()
@Min(0.01)
weight: number;
}
export class XiaofeixiaCheckCoverageDto {
@IsString()
@IsNotEmpty()
toAddress: string;
}
export class XiaofeixiaShipmentQueryDto {
@IsOptional()
@IsString()
trackingNumber?: string;
@IsOptional()
@IsString()
outNumber?: string;
}
export class XiaofeixiaBatchShipmentQueryDto {
@IsOptional()
@IsArray()
@IsString({ each: true })
trackingNumbers?: string[];
@IsOptional()
@IsArray()
@IsString({ each: true })
outNumbers?: string[];
}
export class XiaofeixiaCreateShipmentDto {
@IsString()
@IsNotEmpty()
outNumber: string;
@IsOptional()
@IsString()
customerId?: string;
@IsString()
@IsNotEmpty()
fromName: string;
@IsString()
@IsNotEmpty()
fromMobile: string;
@IsString()
@IsNotEmpty()
fromAddress: string;
@IsString()
@IsNotEmpty()
fromAddressDetail: string;
@IsOptional()
@IsNumber()
fromLng?: number;
@IsOptional()
@IsNumber()
fromLat?: number;
@IsString()
@IsNotEmpty()
toName: string;
@IsString()
@IsNotEmpty()
toMobile: string;
@IsString()
@IsNotEmpty()
toAddress: string;
@IsString()
@IsNotEmpty()
toAddressDetail: string;
@IsOptional()
@IsNumber()
toLng?: number;
@IsOptional()
@IsNumber()
toLat?: number;
@IsOptional()
@IsString()
goodsName?: string;
@IsOptional()
@IsNumber()
goodsNum?: number;
@IsOptional()
@IsNumber()
weight?: number;
@IsOptional()
@IsNumber()
insuredSumPrice?: number;
@IsOptional()
@IsNumber()
collectionPrice?: number;
@IsIn(['1', '2'])
payMode: string;
@IsOptional()
@IsString()
remark?: string;
}
File diff suppressed because it is too large Load Diff
@@ -1,526 +0,0 @@
import { Type } from 'class-transformer';
import { IsIn, IsInt, IsOptional, IsString, Max, Min } from 'class-validator';
export class PaginationQueryDto {
@IsOptional()
@Type(() => Number)
@IsInt()
@Min(1)
page?: number = 1;
@IsOptional()
@Type(() => Number)
@IsInt()
@Min(1)
@Max(100)
pageSize?: number = 20;
}
export class AdminUsersQueryDto extends PaginationQueryDto {
@IsOptional()
@IsString()
phone?: string;
@IsOptional()
@IsString()
userNo?: string;
@IsOptional()
@IsString()
deviceKey?: string;
@IsOptional()
@IsIn(['0', '1'])
phoneVerified?: string;
@IsOptional()
@Type(() => Number)
@IsIn([0, 1])
status?: number;
}
export class AdminOrdersQueryDto extends PaginationQueryDto {
@IsOptional()
@IsString()
orderNo?: string;
@IsOptional()
@IsString()
status?: string;
@IsOptional()
@IsIn(['NORMAL', 'PROXY'])
orderType?: string;
@IsOptional()
@IsString()
userId?: string;
@IsOptional()
@IsString()
cityId?: string;
@IsOptional()
@IsString()
receiverPhone?: string;
/** 仅看大单拦截待总部确认:true / 1 */
@IsOptional()
fulfillmentHold?: string | boolean;
@IsOptional()
@IsString()
createdFrom?: string;
@IsOptional()
@IsString()
createdTo?: string;
}
/** 概览页用户/订单 ECharts 聚合筛选 */
export class AdminDashboardAnalyticsQueryDto {
/** YYYY-MM-DD,默认近 30 天 */
@IsOptional()
@IsString()
dateFrom?: string;
@IsOptional()
@IsString()
dateTo?: string;
/** 开城城市 id`none` = 用户未选城 */
@IsOptional()
@IsString()
cityId?: string;
/** 推广码 id`none` = 无归因 / 订单无推广码 */
@IsOptional()
@IsString()
promoCodeId?: string;
/** 城市合伙人(主账号)id */
@IsOptional()
@IsString()
partnerAccountId?: string;
}
export class AdminStoresQueryDto extends PaginationQueryDto {
@IsOptional()
@IsString()
name?: string;
@IsOptional()
@IsString()
status?: string;
@IsOptional()
@IsString()
cityId?: string;
@IsOptional()
@IsString()
partnerId?: string;
@IsOptional()
@IsString()
phone?: string;
@IsOptional()
@IsString()
auditStatus?: string;
}
export class AdminStoreAccountsQueryDto extends PaginationQueryDto {
@IsOptional()
@IsString()
phone?: string;
@IsOptional()
@IsString()
storeId?: string;
@IsOptional()
@IsString()
status?: string;
}
export class AdminPartnersQueryDto extends PaginationQueryDto {
@IsOptional()
@IsString()
companyName?: string;
@IsOptional()
@IsString()
contactPhone?: string;
@IsOptional()
@IsString()
phone?: string;
@IsOptional()
@IsString()
cityId?: string;
@IsOptional()
@IsString()
partnerId?: string;
}
export class AdminCityWarehousesQueryDto extends PaginationQueryDto {
@IsOptional()
@IsString()
cityId?: string;
@IsOptional()
@IsString()
name?: string;
@IsOptional()
@IsString()
managerType?: string;
@IsOptional()
@IsString()
status?: string;
}
export class AdminPartnerAccountsQueryDto extends PaginationQueryDto {
@IsOptional()
@IsString()
phone?: string;
@IsOptional()
@IsString()
partnerId?: string;
@IsOptional()
@IsString()
status?: string;
@IsOptional()
@IsString()
isPrimary?: string;
}
export class AdminBenefitCouponsQueryDto extends PaginationQueryDto {
@IsOptional()
@IsString()
couponNo?: string;
@IsOptional()
@IsString()
userId?: string;
@IsOptional()
@IsString()
status?: string;
}
export class AdminBenefitLedgersQueryDto extends PaginationQueryDto {
@IsOptional()
@IsString()
userId?: string;
@IsOptional()
@IsString()
couponId?: string;
@IsOptional()
@IsString()
type?: string;
}
export class AdminRedeemRecordsQueryDto extends PaginationQueryDto {
@IsOptional()
@IsString()
redeemNo?: string;
@IsOptional()
@IsString()
storeId?: string;
@IsOptional()
@IsString()
userId?: string;
/** SCAN | PHONE */
@IsOptional()
@IsString()
channel?: string;
}
export class AdminStoreRatingsQueryDto extends PaginationQueryDto {
@IsOptional()
@IsString()
storeId?: string;
@IsOptional()
@IsString()
redeemNo?: string;
}
export class AdminDeliveriesQueryDto extends PaginationQueryDto {
@IsOptional()
@IsString()
provider?: string;
@IsOptional()
@IsString()
trackingNo?: string;
@IsOptional()
@IsString()
orderNo?: string;
}
export class AdminHqAccountsQueryDto extends PaginationQueryDto {
@IsOptional()
@IsString()
phone?: string;
@IsOptional()
@IsString()
adminRole?: string;
@IsOptional()
@IsString()
status?: string;
}
export class AdminCitiesQueryDto extends PaginationQueryDto {
@IsOptional()
@IsString()
name?: string;
@IsOptional()
@IsString()
code?: string;
@IsOptional()
@IsString()
status?: string;
@IsOptional()
@IsString()
partnerId?: string;
}
export class AdminProductsQueryDto extends PaginationQueryDto {
@IsOptional()
@IsString()
name?: string;
@IsOptional()
@IsString()
status?: string;
@IsOptional()
@IsString()
aromaType?: string;
}
export class AdminProductDetailTemplatesQueryDto extends PaginationQueryDto {
@IsOptional()
@IsString()
name?: string;
@IsOptional()
@IsString()
code?: string;
@IsOptional()
@IsString()
status?: string;
@IsOptional()
@IsString()
aromaType?: string;
}
export class AdminUserLogsQueryDto extends PaginationQueryDto {
@IsOptional()
@IsString()
userId?: string;
@IsOptional()
@IsString()
phone?: string;
@IsOptional()
@IsString()
userNo?: string;
@IsOptional()
@IsString()
category?: string;
@IsOptional()
@IsString()
eventName?: string;
@IsOptional()
@IsString()
from?: string;
@IsOptional()
@IsString()
to?: string;
}
export class AdminStoreLogsQueryDto extends PaginationQueryDto {
@IsOptional()
@IsString()
storeId?: string;
@IsOptional()
@IsString()
storeAccountId?: string;
@IsOptional()
@IsString()
phone?: string;
@IsOptional()
@IsString()
storeName?: string;
@IsOptional()
@IsString()
category?: string;
@IsOptional()
@IsString()
eventName?: string;
@IsOptional()
@IsString()
from?: string;
@IsOptional()
@IsString()
to?: string;
}
export class AdminPartnerLogsQueryDto extends PaginationQueryDto {
@IsOptional()
@IsString()
partnerId?: string;
@IsOptional()
@IsString()
partnerAccountId?: string;
@IsOptional()
@IsString()
phone?: string;
@IsOptional()
@IsString()
companyName?: string;
@IsOptional()
@IsString()
category?: string;
@IsOptional()
@IsString()
eventName?: string;
@IsOptional()
@IsString()
from?: string;
@IsOptional()
@IsString()
to?: string;
}
export class AdminHqLogsQueryDto extends PaginationQueryDto {
@IsOptional()
@IsString()
hqAccountId?: string;
@IsOptional()
@IsString()
action?: string;
@IsOptional()
@IsString()
refType?: string;
@IsOptional()
@IsString()
from?: string;
@IsOptional()
@IsString()
to?: string;
}
export class AdminOssLogsQueryDto extends PaginationQueryDto {
@IsOptional()
@IsString()
scene?: string;
@IsOptional()
@IsIn(['SUCCESS', 'FAILED', 'PENDING'])
status?: string;
@IsOptional()
@IsString()
bizType?: string;
@IsOptional()
@IsString()
clientApp?: string;
@IsOptional()
@IsString()
refType?: string;
@IsOptional()
@IsString()
refId?: string;
}
export class AdminStoreMediaQueryDto extends PaginationQueryDto {
@IsOptional()
@IsString()
storeId?: string;
@IsOptional()
@IsString()
mediaType?: string;
}
export class AdminPromoCodesQueryDto extends PaginationQueryDto {
@IsOptional()
@IsString()
name?: string;
@IsOptional()
@IsString()
code?: string;
@IsOptional()
@IsIn(['ACTIVE', 'DISABLED'])
status?: string;
}
export class AdminWechatBindingsQueryDto extends PaginationQueryDto {
@IsOptional()
@IsIn(['USER', 'STORE', 'PARTNER', 'HQ'])
actorType?: string;
@IsOptional()
@IsString()
phone?: string;
@IsOptional()
@IsString()
unionId?: string;
@IsOptional()
@IsString()
openId?: string;
}
@@ -1,26 +0,0 @@
import { IsIn, IsOptional, IsString, MaxLength } from 'class-validator';
import { PaginationQueryDto } from './admin-query.dto';
export class AdminRedeemPendingQueryDto extends PaginationQueryDto {
@IsOptional()
@IsIn(['PENDING', 'COMPLETED', 'REJECTED'])
status?: 'PENDING' | 'COMPLETED' | 'REJECTED';
@IsOptional()
@IsString()
storeId?: string;
@IsOptional()
@IsString()
pendingNo?: string;
@IsOptional()
@IsString()
redeemToken?: string;
}
export class AdminRedeemPendingRejectDto {
@IsString()
@MaxLength(256)
reason: string;
}
@@ -1,93 +0,0 @@
import { Type } from 'class-transformer';
import {
IsBoolean,
IsIn,
IsInt,
IsNotEmpty,
IsOptional,
IsString,
Matches,
MaxLength,
Min,
ValidateIf,
} from 'class-validator';
export class HqProxyOrderPreviewDto {
@IsString()
@IsNotEmpty()
productId: string;
@Type(() => Number)
@IsInt()
@Min(1)
quantity: number;
@IsOptional()
@IsIn(['ADDRESS', 'ON_SITE_PICKUP'])
deliveryMode?: 'ADDRESS' | 'ON_SITE_PICKUP';
@IsOptional()
@IsString()
receiverCity?: string;
@IsOptional()
@IsString()
receiverDistrict?: string;
}
export class HqProxyOrderCreateDto {
@IsString()
@Matches(/^1\d{10}$/, { message: '请输入有效手机号' })
phone: string;
@IsIn(['ADDRESS', 'ON_SITE_PICKUP'])
deliveryMode: 'ADDRESS' | 'ON_SITE_PICKUP';
@ValidateIf((o: HqProxyOrderCreateDto) => o.deliveryMode === 'ADDRESS')
@IsBoolean()
autoReceive?: boolean;
@IsOptional()
@IsString()
@MaxLength(32)
receiverName?: string;
@ValidateIf((o: HqProxyOrderCreateDto) => o.deliveryMode === 'ADDRESS')
@IsString()
@MaxLength(32)
province?: string;
@ValidateIf((o: HqProxyOrderCreateDto) => o.deliveryMode === 'ADDRESS')
@IsString()
@MaxLength(32)
city?: string;
@ValidateIf((o: HqProxyOrderCreateDto) => o.deliveryMode === 'ADDRESS')
@IsString()
@MaxLength(32)
district?: string;
@ValidateIf((o: HqProxyOrderCreateDto) => o.deliveryMode === 'ADDRESS')
@IsString()
@MaxLength(256)
addressDetail?: string;
@IsString()
@IsNotEmpty()
productId: string;
@Type(() => Number)
@IsInt()
@Min(1)
quantity: number;
@IsOptional()
@IsString()
promoCodeId?: string;
}
export class HqProxyOrderPayDto {
@IsOptional()
@IsIn(['NATIVE', 'JSAPI'])
payMethod?: 'NATIVE' | 'JSAPI';
}