diff --git a/apps/admin-web/src/pages/RedeemDebugPage.tsx b/apps/admin-web/src/pages/RedeemDebugPage.tsx
index 5ca1924..bdad447 100644
--- a/apps/admin-web/src/pages/RedeemDebugPage.tsx
+++ b/apps/admin-web/src/pages/RedeemDebugPage.tsx
@@ -1,6 +1,6 @@
import { useState } from 'react';
import {
- Alert, Button, Card, Col, Form, Input, InputNumber, Row, Space, Tabs, Typography, message,
+ Button, Card, Col, Form, Input, InputNumber, Row, Space, Tabs, Typography, message,
} from 'antd';
import { request } from '../lib/api';
@@ -56,13 +56,6 @@ export default function RedeemDebugPage() {
return (
核销调试
-
-
+
+
@@ -90,8 +87,9 @@ export default function RedeemDebugPage() {
type="primary"
loading={loading}
onClick={() => {
- const values = createForm.getFieldsValue();
- void invoke('/admin/redeem/debug/create-token', values, setCreateResult, '核销码已生成');
+ void createForm.validateFields().then((values) => {
+ void invoke('/admin/redeem/debug/create-token', values, setCreateResult, '核销码已生成');
+ });
}}
>
生成核销码
diff --git a/apps/h5-user/src/pages/MinePage.tsx b/apps/h5-user/src/pages/MinePage.tsx
index bd7a777..3dbe594 100644
--- a/apps/h5-user/src/pages/MinePage.tsx
+++ b/apps/h5-user/src/pages/MinePage.tsx
@@ -102,14 +102,6 @@ export default function MinePage() {
{hasWechat ? '微信会员' : '好客会员'}
-
diff --git a/server/dukang-api/src/modules/ops/admin-redeem-debug.service.ts b/server/dukang-api/src/modules/ops/admin-redeem-debug.service.ts
index 1a50396..b91a2ea 100644
--- a/server/dukang-api/src/modules/ops/admin-redeem-debug.service.ts
+++ b/server/dukang-api/src/modules/ops/admin-redeem-debug.service.ts
@@ -13,17 +13,46 @@ export class AdminRedeemDebugService {
private readonly redeemService: RedeemService,
) {}
- private parseId(value: string, label: string): bigint {
- const normalized = value?.trim();
+ private parseStoreId(value: string): bigint {
+ const normalized = String(value ?? '').trim();
if (!normalized || !/^\d+$/.test(normalized)) {
- throw new BadRequestException(`${label}格式无效`);
+ throw new BadRequestException('门店 ID 格式无效');
}
return BigInt(normalized);
}
+ private async resolveUserId(identifier: string): Promise {
+ const normalized = String(identifier ?? '').trim();
+ if (!normalized) {
+ throw new BadRequestException('请填写用户 ID、用户编号或手机号');
+ }
+
+ if (/^\d+$/.test(normalized)) {
+ const byId = await this.prisma.user.findUnique({
+ where: { id: BigInt(normalized) },
+ select: { id: true },
+ });
+ if (byId) return byId.id;
+
+ const byPhone = await this.prisma.user.findFirst({
+ where: { phone: normalized },
+ select: { id: true },
+ });
+ if (byPhone) return byPhone.id;
+ } else {
+ const byNo = await this.prisma.user.findFirst({
+ where: { userNo: normalized },
+ select: { id: true },
+ });
+ if (byNo) return byNo.id;
+ }
+
+ throw new NotFoundException('用户不存在,请检查 ID、用户编号或手机号');
+ }
+
private async resolveStoreAccountId(storeId: string): Promise {
const account = await this.prisma.storeAccount.findFirst({
- where: { storeId: this.parseId(storeId, '门店 ID'), status: 'ACTIVE' },
+ where: { storeId: this.parseStoreId(storeId), status: 'ACTIVE' },
orderBy: { id: 'asc' },
select: { id: true, store: { select: { name: true } } },
});
@@ -34,10 +63,11 @@ export class AdminRedeemDebugService {
}
async createToken(dto: AdminRedeemDebugCreateTokenDto) {
- return this.redeemService.createToken(this.parseId(dto.userId, '用户 ID'), {
+ const userId = await this.resolveUserId(dto.userId);
+ return this.redeemService.createToken(userId, {
amount: dto.amount,
- couponId: dto.couponId,
- storeId: dto.storeId,
+ couponId: dto.couponId?.trim() || undefined,
+ storeId: dto.storeId?.trim() || undefined,
});
}