fix(admin): remove manual reasons and repair code creation
Independent Staging Quality Gate / validate (push) Has been cancelled
Independent Staging Quality Gate / publish (push) Has been cancelled

This commit is contained in:
Jesse_Chen
2026-08-16 16:49:05 +08:00
parent 9df43e8112
commit c712787ec2
24 changed files with 180 additions and 206 deletions
@@ -22,7 +22,7 @@ import {
import dayjs from "dayjs";
import { useState } from "react";
import { ReasonActionModal } from "@/components/admin/reason-action-modal";
import { ConfirmActionModal } from "@/components/admin/confirm-action-modal";
import {
formatAdminDate,
ResourceTable,
@@ -84,7 +84,7 @@ export default function CodesPage() {
identity?.permissions.includes("billing.adjustments.write"),
);
async function submitCreate(reason: string) {
async function submitCreate() {
if (!pendingCreate) return;
const result = await createCodes({
resource: "codes",
@@ -93,7 +93,6 @@ export default function CodesPage() {
count: pendingCreate.count,
expiresAt: pendingCreate.expiresAt?.toISOString() ?? null,
note: pendingCreate.note?.trim() || null,
reason,
},
successNotification: false,
});
@@ -103,7 +102,7 @@ export default function CodesPage() {
createForm.resetFields();
}
async function submitEdit(reason: string) {
async function submitEdit() {
if (!editRecord || !pendingEdit) return;
await updateCode({
resource: "codes",
@@ -111,20 +110,18 @@ export default function CodesPage() {
values: {
note: pendingEdit.note?.trim() || null,
expiresAt: pendingEdit.expiresAt?.toISOString() ?? null,
reason,
},
});
setPendingEdit(null);
setEditRecord(null);
}
async function revoke(record: CodeRecord, reason: string) {
async function revoke(record: CodeRecord) {
setRevoking(true);
try {
await adminRequestJson(`/api/admin/codes/${record.id}`, {
method: "DELETE",
headers: { "x-request-id": crypto.randomUUID() },
body: JSON.stringify({ reason }),
});
await invalidate({ resource: "codes", invalidates: ["list"] });
message.success("兑换码已撤销");
@@ -316,30 +313,30 @@ export default function CodesPage() {
</Button>
</Form>
</Modal>
<ReasonActionModal
<ConfirmActionModal
open={Boolean(pendingCreate)}
title="生成兑换码"
okText="确认生成"
confirmLoading={createMutation.isPending}
onCancel={() => setPendingCreate(null)}
onSubmit={submitCreate}
onConfirm={submitCreate}
/>
<ReasonActionModal
<ConfirmActionModal
open={Boolean(pendingEdit)}
title="编辑未兑换码"
okText="确认保存"
confirmLoading={updateMutation.isPending}
onCancel={() => setPendingEdit(null)}
onSubmit={submitEdit}
onConfirm={submitEdit}
/>
<ReasonActionModal
<ConfirmActionModal
open={Boolean(revokeRecord)}
title="撤销兑换码"
okText="确认撤销"
danger
confirmLoading={revoking}
onCancel={() => setRevokeRecord(null)}
onSubmit={(reason) => revoke(revokeRecord!, reason)}
onConfirm={() => revoke(revokeRecord!)}
/>
</>
);