From 3b25efcc7e2dee75bb86d8582a9f357c603002e3 Mon Sep 17 00:00:00 2001 From: xingyu4j Date: Tue, 27 May 2025 14:20:07 +0800 Subject: [PATCH] feat: pay demo --- apps/web-antd/src/api/pay/app/index.ts | 13 +- apps/web-antd/src/api/pay/demo/index.ts | 38 ----- apps/web-antd/src/api/pay/demo/order/index.ts | 47 ++++++ .../src/api/pay/demo/transfer/index.ts | 29 ---- .../src/api/pay/demo/withdraw/index.ts | 40 +++++ .../web-antd/src/views/pay/demo/order/data.ts | 104 ++++++++++++ .../src/views/pay/demo/order/index.vue | 150 +++++++++++++++--- .../src/views/pay/demo/order/modules/form.vue | 55 +++++++ .../src/views/pay/demo/transfer/index.vue | 28 ---- .../src/views/pay/demo/withdraw/data.ts | 135 ++++++++++++++++ .../src/views/pay/demo/withdraw/index.vue | 145 +++++++++++++++++ .../views/pay/demo/withdraw/modules/form.vue | 55 +++++++ 12 files changed, 722 insertions(+), 117 deletions(-) delete mode 100644 apps/web-antd/src/api/pay/demo/index.ts create mode 100644 apps/web-antd/src/api/pay/demo/order/index.ts delete mode 100644 apps/web-antd/src/api/pay/demo/transfer/index.ts create mode 100644 apps/web-antd/src/api/pay/demo/withdraw/index.ts create mode 100644 apps/web-antd/src/views/pay/demo/order/data.ts create mode 100644 apps/web-antd/src/views/pay/demo/order/modules/form.vue delete mode 100644 apps/web-antd/src/views/pay/demo/transfer/index.vue create mode 100644 apps/web-antd/src/views/pay/demo/withdraw/data.ts create mode 100644 apps/web-antd/src/views/pay/demo/withdraw/index.vue create mode 100644 apps/web-antd/src/views/pay/demo/withdraw/modules/form.vue diff --git a/apps/web-antd/src/api/pay/app/index.ts b/apps/web-antd/src/api/pay/app/index.ts index 1eae34420..2b09c57d2 100644 --- a/apps/web-antd/src/api/pay/app/index.ts +++ b/apps/web-antd/src/api/pay/app/index.ts @@ -23,10 +23,21 @@ export namespace PayAppApi { id: number; status: number; } + + export interface AppPageReqVO extends PageParam { + name?: string; + status?: number; + remark?: string; + payNotifyUrl?: string; + refundNotifyUrl?: string; + transferNotifyUrl?: string; + merchantName?: string; + createTime?: Date[]; + } } /** 查询支付应用列表 */ -export function getAppPage(params: PageParam) { +export function getAppPage(params: PayAppApi.AppPageReqVO) { return requestClient.get>('/pay/app/page', { params, }); diff --git a/apps/web-antd/src/api/pay/demo/index.ts b/apps/web-antd/src/api/pay/demo/index.ts deleted file mode 100644 index a0f3c6886..000000000 --- a/apps/web-antd/src/api/pay/demo/index.ts +++ /dev/null @@ -1,38 +0,0 @@ -import type { PageParam, PageResult } from '@vben/request'; - -import { requestClient } from '#/api/request'; - -export namespace PayDemoApi { - /** 示例订单信息 */ - export interface DemoOrder { - spuId: number; - createTime: Date; - } -} - -/** 创建示例订单 */ -export function createDemoOrder(data: PayDemoApi.DemoOrder) { - return requestClient.post('/pay/demo-order/create', data); -} - -/** 获得示例订单 */ -export function getDemoOrder(id: number) { - return requestClient.get( - `/pay/demo-order/get?id=${id}`, - ); -} - -/** 获得示例订单分页 */ -export function getDemoOrderPage(params: PageParam) { - return requestClient.get>( - '/pay/demo-order/page', - { - params, - }, - ); -} - -/** 退款示例订单 */ -export function refundDemoOrder(id: number) { - return requestClient.put(`/pay/demo-order/refund?id=${id}`); -} diff --git a/apps/web-antd/src/api/pay/demo/order/index.ts b/apps/web-antd/src/api/pay/demo/order/index.ts new file mode 100644 index 000000000..262351059 --- /dev/null +++ b/apps/web-antd/src/api/pay/demo/order/index.ts @@ -0,0 +1,47 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace DemoOrderApi { + /** 示例订单信息 */ + export interface Order { + id?: number; + userId?: number; + spuName?: string; + price?: number; + payStatus?: boolean; + payOrderId?: number; + payTime?: Date; + payChannelCode?: string; + payRefundId?: number; + refundPrice?: number; + refundTime?: Date; + spuId?: number; + createTime?: Date; + } + + export interface OrderPageReqVO extends PageParam { + spuId?: number; + createTime?: Date[]; + } +} + +/** 创建示例订单 */ +export function createDemoOrder(data: DemoOrderApi.Order) { + return requestClient.post('/pay/demo-order/create', data); +} + +/** 获得示例订单分页 */ +export function getDemoOrderPage(params: DemoOrderApi.OrderPageReqVO) { + return requestClient.get>( + '/pay/demo-order/page', + { + params, + }, + ); +} + +/** 退款示例订单 */ +export function refundDemoOrder(id: number) { + return requestClient.put(`/pay/demo-order/refund?id=${id}`); +} diff --git a/apps/web-antd/src/api/pay/demo/transfer/index.ts b/apps/web-antd/src/api/pay/demo/transfer/index.ts deleted file mode 100644 index e06dbec8b..000000000 --- a/apps/web-antd/src/api/pay/demo/transfer/index.ts +++ /dev/null @@ -1,29 +0,0 @@ -import type { PageParam, PageResult } from '@vben/request'; - -import { requestClient } from '#/api/request'; - -export namespace PayDemoTransferApi { - /** 示例转账单信息 */ - export interface DemoTransfer { - price: number; - type: number; - userName: string; - alipayLogonId: string; - openid: string; - } -} - -/** 创建示例转账单 */ -export function createDemoTransfer(data: PayDemoTransferApi.DemoTransfer) { - return requestClient.post('/pay/demo-transfer/create', data); -} - -/** 获得示例转账单分页 */ -export function getDemoTransferPage(params: PageParam) { - return requestClient.get>( - '/pay/demo-transfer/page', - { - params, - }, - ); -} diff --git a/apps/web-antd/src/api/pay/demo/withdraw/index.ts b/apps/web-antd/src/api/pay/demo/withdraw/index.ts new file mode 100644 index 000000000..3711ff9e3 --- /dev/null +++ b/apps/web-antd/src/api/pay/demo/withdraw/index.ts @@ -0,0 +1,40 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace DemoWithdrawApi { + /** 示例提现单信息 */ + export interface Withdraw { + id?: number; + subject: string; + price: number; + userName: string; + userAccount: string; + type: number; + status?: number; + payTransferId?: number; + transferChannelCode?: string; + transferTime?: Date; + transferErrorMsg?: string; + } +} + +/** 查询示例提现单列表 */ +export function getDemoWithdrawPage(params: PageParam) { + return requestClient.get>( + '/pay/demo-withdraw/page', + { + params, + }, + ); +} + +/** 创建示例提现单 */ +export function createDemoWithdraw(data: DemoWithdrawApi.Withdraw) { + return requestClient.post('/pay/demo-withdraw/create', data); +} + +/** 发起提现单转账 */ +export function transferDemoWithdraw(id: number) { + return requestClient.post(`/pay/demo-withdraw/transfer?id=${id}`); +} diff --git a/apps/web-antd/src/views/pay/demo/order/data.ts b/apps/web-antd/src/views/pay/demo/order/data.ts new file mode 100644 index 000000000..2683b905a --- /dev/null +++ b/apps/web-antd/src/views/pay/demo/order/data.ts @@ -0,0 +1,104 @@ +import type { VbenFormSchema } from '#/adapter/form'; +import type { VxeTableGridOptions } from '#/adapter/vxe-table'; + +import { DICT_TYPE } from '#/utils'; + +/** 新增/修改的表单 */ +export function useFormSchema(): VbenFormSchema[] { + return [ + { + component: 'Input', + fieldName: 'id', + dependencies: { + triggerFields: [''], + show: () => false, + }, + }, + { + component: 'Select', + fieldName: 'spuId', + label: '商品', + rules: 'required', + componentProps: { + options: [ + { label: '华为手机 --- 1.00元', value: 1, price: 1 }, + { label: '小米电视 --- 10.00元', value: 2, price: 10 }, + { label: '苹果手表 --- 100.00元', value: 3, price: 100 }, + { label: '华硕笔记本 --- 1000.00元', value: 4, price: 1000 }, + { label: '蔚来汽车 --- 200000.00元', value: 5, price: 200_000 }, + ], + }, + }, + ]; +} + +/** 列表的字段 */ +export function useGridColumns(): VxeTableGridOptions['columns'] { + return [ + { + field: 'id', + title: '订单编号', + minWidth: 200, + }, + { + field: 'userId', + title: '用户编号', + minWidth: 200, + }, + { + field: 'spuName', + title: '商品名字', + minWidth: 200, + }, + { + field: 'price', + title: '支付价格', + minWidth: 120, + formatter: 'formatNumber', + }, + { + field: 'refundPrice', + title: '退款金额', + minWidth: 120, + formatter: 'formatNumber', + }, + { + field: 'createTime', + title: '创建时间', + minWidth: 180, + formatter: 'formatDateTime', + }, + { + field: 'payOrderId', + title: '支付单号', + minWidth: 200, + }, + { + field: 'payStatus', + title: '是否支付', + minWidth: 100, + cellRender: { + name: 'CellDict', + props: { type: DICT_TYPE.INFRA_BOOLEAN_STRING }, + }, + }, + { + field: 'payTime', + title: '支付时间', + minWidth: 180, + formatter: 'formatDateTime', + }, + { + field: 'refundTime', + title: '退款时间', + minWidth: 180, + slots: { default: 'refundTime' }, + }, + { + title: '操作', + width: 200, + fixed: 'right', + slots: { default: 'actions' }, + }, + ]; +} diff --git a/apps/web-antd/src/views/pay/demo/order/index.vue b/apps/web-antd/src/views/pay/demo/order/index.vue index aa40025f6..dba47228d 100644 --- a/apps/web-antd/src/views/pay/demo/order/index.vue +++ b/apps/web-antd/src/views/pay/demo/order/index.vue @@ -1,13 +1,97 @@ diff --git a/apps/web-antd/src/views/pay/demo/order/modules/form.vue b/apps/web-antd/src/views/pay/demo/order/modules/form.vue new file mode 100644 index 000000000..672dca433 --- /dev/null +++ b/apps/web-antd/src/views/pay/demo/order/modules/form.vue @@ -0,0 +1,55 @@ + + + diff --git a/apps/web-antd/src/views/pay/demo/transfer/index.vue b/apps/web-antd/src/views/pay/demo/transfer/index.vue deleted file mode 100644 index 3a7e0556b..000000000 --- a/apps/web-antd/src/views/pay/demo/transfer/index.vue +++ /dev/null @@ -1,28 +0,0 @@ - - - diff --git a/apps/web-antd/src/views/pay/demo/withdraw/data.ts b/apps/web-antd/src/views/pay/demo/withdraw/data.ts new file mode 100644 index 000000000..ccfa1af1b --- /dev/null +++ b/apps/web-antd/src/views/pay/demo/withdraw/data.ts @@ -0,0 +1,135 @@ +import type { VbenFormSchema } from '#/adapter/form'; +import type { VxeTableGridOptions } from '#/adapter/vxe-table'; + +import { DICT_TYPE } from '#/utils'; + +/** 新增/修改的表单 */ +export function useFormSchema(): VbenFormSchema[] { + return [ + { + component: 'Input', + fieldName: 'id', + dependencies: { + triggerFields: [''], + show: () => false, + }, + }, + { + component: 'Input', + fieldName: 'subject', + label: '提现标题', + rules: 'required', + }, + { + component: 'InputNumber', + fieldName: 'price', + label: '提现金额', + rules: 'required', + componentProps: { + min: 1, + precision: 2, + step: 0.01, + }, + }, + { + component: 'Select', + fieldName: 'type', + label: '提现类型', + rules: 'required', + componentProps: { + options: [ + { label: '支付宝', value: 1 }, + { label: '微信余额', value: 2 }, + { label: '钱包余额', value: 3 }, + ], + }, + }, + { + component: 'Input', + fieldName: 'userName', + label: '收款人姓名', + rules: 'required', + }, + { + component: 'Input', + fieldName: 'userAccount', + label: '收款人账号', + rules: 'required', + }, + ]; +} + +/** 列表的字段 */ +export function useGridColumns(): VxeTableGridOptions['columns'] { + return [ + { + field: 'id', + title: '提现单编号', + minWidth: 100, + }, + { + field: 'subject', + title: '提现标题', + minWidth: 120, + }, + { + field: 'type', + title: '提现类型', + minWidth: 90, + slots: { default: 'type' }, + }, + { + field: 'price', + title: '提现金额', + minWidth: 120, + formatter: 'formatNumber', + }, + { + field: 'userName', + title: '收款人姓名', + minWidth: 150, + }, + { + field: 'userAccount', + title: '收款人账号', + minWidth: 250, + }, + { + field: 'status', + title: '提现状态', + minWidth: 100, + slots: { default: 'status' }, + }, + { + field: 'payTransferId', + title: '转账单号', + minWidth: 120, + }, + { + field: 'transferChannelCode', + title: '转账渠道', + minWidth: 180, + cellRender: { + name: 'CellDict', + props: { type: DICT_TYPE.PAY_CHANNEL_CODE }, + }, + }, + { + field: 'transferTime', + title: '转账时间', + minWidth: 180, + formatter: 'formatDateTime', + }, + { + field: 'transferErrorMsg', + title: '转账失败原因', + minWidth: 200, + }, + { + title: '操作', + width: 130, + fixed: 'right', + slots: { default: 'actions' }, + }, + ]; +} diff --git a/apps/web-antd/src/views/pay/demo/withdraw/index.vue b/apps/web-antd/src/views/pay/demo/withdraw/index.vue new file mode 100644 index 000000000..1c981aa43 --- /dev/null +++ b/apps/web-antd/src/views/pay/demo/withdraw/index.vue @@ -0,0 +1,145 @@ + + + diff --git a/apps/web-antd/src/views/pay/demo/withdraw/modules/form.vue b/apps/web-antd/src/views/pay/demo/withdraw/modules/form.vue new file mode 100644 index 000000000..d2038a3bf --- /dev/null +++ b/apps/web-antd/src/views/pay/demo/withdraw/modules/form.vue @@ -0,0 +1,55 @@ + + +