From d708a10095c6f052b9483de430ce0b17ec45fd7f Mon Sep 17 00:00:00 2001 From: jacy-dukang Date: Mon, 6 Jul 2026 22:22:21 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A0=B8=E9=94=80=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/admin-web/src/pages/RedeemDebugPage.tsx | 22 +++++----- apps/h5-user/src/pages/MinePage.tsx | 8 ---- .../modules/ops/admin-redeem-debug.service.ts | 44 ++++++++++++++++--- 3 files changed, 47 insertions(+), 27 deletions(-) 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, }); }