feat: v3.4.12 ticket iteration

Refund rollback, winery T+3, multi withdraw, mini-user store detail, dev plan batch edit and WeCom dispatch, support ticket edit/attachments/batch status, package imageUrl.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-08-04 23:53:31 +08:00
parent 71f508e02b
commit 4372018c09
34 changed files with 1032 additions and 86 deletions
@@ -4,6 +4,7 @@ import {
Get,
NotFoundException,
Param,
Patch,
Post,
Query,
UseGuards,
@@ -22,6 +23,8 @@ import {
RejectSupportTicketDto,
SupportTicketListQueryDto,
SupportTicketRemarkDto,
UpdateSupportTicketDto,
BatchUpdateSupportTicketStatusDto,
} from '../common/dto/support-ticket.dto';
import {
BatchReviewConfirmDto,
@@ -83,11 +86,39 @@ export class AdminSupportTicketsController {
return this.service.batchReviewConfirm(account, body.items);
}
@Post('batch-update-status')
@UseGuards(SuperAdminGuard)
async batchUpdateStatus(
@CurrentUser() user: AuthUser,
@Body() body: BatchUpdateSupportTicketStatusDto,
) {
const account = await this.resolveHqAccount(user);
const profile = await this.prisma.hqAccount.findUnique({
where: { id: user.actorId },
select: { adminRole: true },
});
return this.service.batchUpdateStatus(
body.ticketIds.map(BigInt),
body.status as never,
{
isSuperAdmin: profile?.adminRole === 'SUPER_ADMIN',
rejectReason: body.rejectReason,
note: body.note,
reviewer: account,
},
);
}
@Get(':id')
detail(@Param('id') id: string) {
return this.service.detail(BigInt(id));
}
@Patch(':id')
async update(@Param('id') id: string, @Body() body: UpdateSupportTicketDto) {
return this.service.update(BigInt(id), body);
}
@Post(':id/review')
@UseGuards(SuperAdminGuard)
@HqOperation({