From 83a5a21f956e50942541f1532f3a8dcaa5821d34 Mon Sep 17 00:00:00 2001 From: xiaojunnuo Date: Tue, 19 May 2026 23:37:03 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E5=95=86=E4=B8=9A=E7=89=88=E6=8F=90?= =?UTF-8?q?=E7=8E=B0=E5=A2=9E=E5=8A=A0=E6=94=B6=E6=AC=BE=E4=BA=8C=E7=BB=B4?= =?UTF-8?q?=E7=A0=81=E4=B8=8A=E4=BC=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/views/certd/invite/crud-logs.tsx | 29 +++++++----- .../src/views/certd/wallet/crud-withdraw.tsx | 13 ++++++ .../src/views/certd/wallet/index.vue | 33 +++++++++++++ .../views/sys/suite/invite/crud-withdraw.tsx | 46 ++++++++++++++++--- .../v10045__invite_commission.sql | 1 + .../v10045__invite_commission.sql | 1 + .../migration/v10045__invite_commission.sql | 1 + packages/ui/certd-server/src/configuration.ts | 1 + 8 files changed, 108 insertions(+), 17 deletions(-) diff --git a/packages/ui/certd-client/src/views/certd/invite/crud-logs.tsx b/packages/ui/certd-client/src/views/certd/invite/crud-logs.tsx index 1b8651b6e..812aa7236 100644 --- a/packages/ui/certd-client/src/views/certd/invite/crud-logs.tsx +++ b/packages/ui/certd-client/src/views/certd/invite/crud-logs.tsx @@ -1,4 +1,4 @@ -import { CreateCrudOptionsRet, dict, UserPageQuery, UserPageRes } from "@fast-crud/fast-crud"; +import { CreateCrudOptionsRet, UserPageQuery, UserPageRes } from "@fast-crud/fast-crud"; import * as api from "./api"; import PriceInput from "/@/views/sys/suite/product/price-input.vue"; @@ -14,14 +14,6 @@ export default function (): CreateCrudOptionsRet { toolbar: { show: false }, rowHandle: { show: false }, columns: { - type: { - title: "类型", - type: "dict-select", - dict: dict({ - data: [{ label: "佣金入账", value: "commission", color: "success" }], - }), - column: { width: 130 }, - }, amount: { title: "金额", type: "number", @@ -30,10 +22,25 @@ export default function (): CreateCrudOptionsRet { component: { name: PriceInput, vModel: "modelValue", edit: false }, }, }, - inviteeUserDisplay: { + simpleUser: { title: "被邀请用户", type: "text", - column: { width: 150 }, + column: { + width: 170, + cellRender({ row }) { + const simpleUser = row.simpleUser; + if (!simpleUser) { + return "-"; + } + return ( +
+
+ {simpleUser.username || "-"} ({simpleUser.id}) +
+
+ ); + }, + }, }, consumeAmount: { title: "消费金额", diff --git a/packages/ui/certd-client/src/views/certd/wallet/crud-withdraw.tsx b/packages/ui/certd-client/src/views/certd/wallet/crud-withdraw.tsx index 4cb440f88..553735d8c 100644 --- a/packages/ui/certd-client/src/views/certd/wallet/crud-withdraw.tsx +++ b/packages/ui/certd-client/src/views/certd/wallet/crud-withdraw.tsx @@ -48,6 +48,19 @@ export default function (): CreateCrudOptionsRet { realName: { title: "真实姓名", type: "text", column: { width: 120 } }, account: { title: "收款账号", type: "text", column: { width: 180 } }, bankName: { title: "开户银行", type: "text", column: { width: 160 } }, + qrCode: { + title: "收款二维码", + type: "text", + column: { + width: 120, + cellRender({ value }) { + if (!value) { + return "-"; + } + return ; + }, + }, + }, auditRemark: { title: "审核备注", type: "text", column: { minWidth: 180 } }, createTime: { title: "申请时间", type: "datetime", column: { width: 180 } }, }, diff --git a/packages/ui/certd-client/src/views/certd/wallet/index.vue b/packages/ui/certd-client/src/views/certd/wallet/index.vue index 11fc74744..0baef2a90 100644 --- a/packages/ui/certd-client/src/views/certd/wallet/index.vue +++ b/packages/ui/certd-client/src/views/certd/wallet/index.vue @@ -40,6 +40,7 @@ import * as api from "./api"; import createWithdrawCrudOptions from "./crud-withdraw"; import { util } from "/@/utils"; import { useFormDialog } from "/@/use/use-dialog"; +import { useUserStore } from "/@/store/user"; defineOptions({ name: "MyWallet" }); @@ -47,6 +48,7 @@ const summary = reactive({ availableAmount: 0, frozenAmount: 0, totalIncome const withdrawAmountYuan = ref(0); const loaded = ref(false); const { openFormDialog } = useFormDialog(); +const userStore = useUserStore(); const { crudBinding: withdrawCrudBinding, crudExpose: withdrawCrudExpose, crudRef: withdrawCrudRef } = useFs({ createCrudOptions: createWithdrawCrudOptions }); function amountToYuan(amount: number) { @@ -98,6 +100,37 @@ async function openWithdrawSetting() { rules: [{ required: true, message: "请输入收款账号" }], }, }, + qrCode: { + title: "收款二维码", + type: "cropper-uploader", + form: { + col: { span: 24 }, + component: { + vModel: "modelValue", + valueType: "key", + cropper: { + aspectRatio: 1, + autoCropArea: 1, + viewMode: 0, + }, + onReady: null, + uploader: { + type: "form", + action: "/basic/file/upload?token=" + userStore.getToken, + name: "file", + headers: { + Authorization: "Bearer " + userStore.getToken, + }, + successHandle(res: any) { + return res; + }, + }, + buildUrl(key: string) { + return `/api/basic/file/download?key=` + key; + }, + }, + }, + }, bankName: { title: "开户银行", type: "text", diff --git a/packages/ui/certd-client/src/views/sys/suite/invite/crud-withdraw.tsx b/packages/ui/certd-client/src/views/sys/suite/invite/crud-withdraw.tsx index ce2e7c5b6..5152c925e 100644 --- a/packages/ui/certd-client/src/views/sys/suite/invite/crud-withdraw.tsx +++ b/packages/ui/certd-client/src/views/sys/suite/invite/crud-withdraw.tsx @@ -1,5 +1,5 @@ import { compute, CreateCrudOptionsProps, CreateCrudOptionsRet, dict, UserPageQuery, UserPageRes } from "@fast-crud/fast-crud"; -import { Modal, notification } from "ant-design-vue"; +import { notification } from "ant-design-vue"; import * as api from "./api"; import PriceInput from "/@/views/sys/suite/product/price-input.vue"; import { useFormDialog } from "/@/use/use-dialog"; @@ -11,10 +11,29 @@ export default function ({ crudExpose }: CreateCrudOptionsProps): CreateCrudOpti return await api.GetWithdraws(query); }; + function renderWithdrawDetail(row: any) { + return ( + + {row.channel === "bank" ? "银行卡" : "支付宝"} + {row.userDisplay || row.userId} + {row.account || "-"} + {row.bankName || "-"} + + {row.qrCode ? : -} + + {row.amount / 100} 元 + + ); + } + async function approve(row: any) { - Modal.confirm({ - title: "确认提现已线下打款?", - async onOk() { + await openFormDialog({ + title: "提现审核", + wrapper: { + width: 760, + }, + body: () => renderWithdrawDetail(row), + onSubmit: async () => { await api.ApproveWithdraw(row.id); await crudExpose.doRefresh(); notification.success({ message: "已审核通过" }); @@ -24,13 +43,14 @@ export default function ({ crudExpose }: CreateCrudOptionsProps): CreateCrudOpti async function reject(row: any) { await openFormDialog({ - title: "拒绝提现申请", + title: "提现审核", wrapper: { - width: 520, + width: 760, }, initialForm: { remark: "", }, + body: () => renderWithdrawDetail(row), columns: { remark: { title: "拒绝理由", @@ -99,6 +119,7 @@ export default function ({ crudExpose }: CreateCrudOptionsProps): CreateCrudOpti component: { name: PriceInput, vModel: "modelValue", edit: false }, }, }, + userDisplay: { title: "用户名", type: "text", search: { show: true }, column: { width: 140 } }, status: { title: "状态", type: "dict-select", @@ -127,6 +148,19 @@ export default function ({ crudExpose }: CreateCrudOptionsProps): CreateCrudOpti realName: { title: "真实姓名", type: "text", search: { show: true }, column: { width: 120 } }, account: { title: "收款账号", type: "text", column: { width: 180 } }, bankName: { title: "开户银行", type: "text", column: { width: 160 } }, + qrCode: { + title: "收款二维码", + type: "text", + column: { + width: 120, + cellRender({ value }) { + if (!value) { + return "-"; + } + return ; + }, + }, + }, auditRemark: { title: "审核备注", type: "text", column: { minWidth: 180 } }, createTime: { title: "申请时间", type: "datetime", column: { width: 180 } }, }, diff --git a/packages/ui/certd-server/db/migration-mysql/v10045__invite_commission.sql b/packages/ui/certd-server/db/migration-mysql/v10045__invite_commission.sql index 4238b4611..d15b1849d 100644 --- a/packages/ui/certd-server/db/migration-mysql/v10045__invite_commission.sql +++ b/packages/ui/certd-server/db/migration-mysql/v10045__invite_commission.sql @@ -78,6 +78,7 @@ CREATE TABLE `cd_user_wallet_withdraw` `real_name` varchar(100), `account` varchar(200), `bank_name` varchar(200), + `qr_code` varchar(512), `audit_user_id` bigint, `audit_remark` varchar(2048), `audit_time` bigint, diff --git a/packages/ui/certd-server/db/migration-pg/v10045__invite_commission.sql b/packages/ui/certd-server/db/migration-pg/v10045__invite_commission.sql index 0186803ce..c46fdebf2 100644 --- a/packages/ui/certd-server/db/migration-pg/v10045__invite_commission.sql +++ b/packages/ui/certd-server/db/migration-pg/v10045__invite_commission.sql @@ -78,6 +78,7 @@ CREATE TABLE "cd_user_wallet_withdraw" "real_name" varchar(100), "account" varchar(200), "bank_name" varchar(200), + "qr_code" varchar(512), "audit_user_id" bigint, "audit_remark" varchar(2048), "audit_time" bigint, diff --git a/packages/ui/certd-server/db/migration/v10045__invite_commission.sql b/packages/ui/certd-server/db/migration/v10045__invite_commission.sql index 92cda0249..b9933a8fd 100644 --- a/packages/ui/certd-server/db/migration/v10045__invite_commission.sql +++ b/packages/ui/certd-server/db/migration/v10045__invite_commission.sql @@ -78,6 +78,7 @@ CREATE TABLE "cd_user_wallet_withdraw" "real_name" varchar(100), "account" varchar(200), "bank_name" varchar(200), + "qr_code" varchar(512), "audit_user_id" integer, "audit_remark" varchar(2048), "audit_time" integer, diff --git a/packages/ui/certd-server/src/configuration.ts b/packages/ui/certd-server/src/configuration.ts index 13ee49993..070b62ecc 100644 --- a/packages/ui/certd-server/src/configuration.ts +++ b/packages/ui/certd-server/src/configuration.ts @@ -136,5 +136,6 @@ export class MainConfiguration { logger.info('当前环境:', this.app.getEnv()); // prod // throw new Error("address family not supported") + } }