diff --git a/apps/web-antd/src/views/pay/order/data.ts b/apps/web-antd/src/views/pay/order/data.ts index 5f69fc3b3..b3455ee8a 100644 --- a/apps/web-antd/src/views/pay/order/data.ts +++ b/apps/web-antd/src/views/pay/order/data.ts @@ -1,6 +1,14 @@ import type { VbenFormSchema } from '#/adapter/form'; import type { VxeTableGridOptions } from '#/adapter/vxe-table'; +import type { DescriptionItemSchema } from '#/components/description'; +import { h } from 'vue'; + +import { floatToFixed2, formatDateTime } from '@vben/utils'; + +import { Tag } from 'ant-design-vue'; + +import { DictTag } from '#/components/dict-tag'; import { DICT_TYPE, getDictOptions } from '#/utils'; /** 列表的搜索表单 */ @@ -134,3 +142,113 @@ export function useGridColumns(): VxeTableGridOptions['columns'] { }, ]; } + +/** 详情的字段 */ +export function useDetailSchema(): DescriptionItemSchema[] { + return [ + { + field: 'merchantOrderId', + label: '商户单号', + }, + { + field: 'no', + label: '支付单号', + }, + { + field: 'appId', + label: '应用编号', + }, + { + field: 'appName', + label: '应用名称', + }, + { + field: 'status', + label: '支付状态', + content: (data) => + h(DictTag, { + type: DICT_TYPE.PAY_ORDER_STATUS, + value: data?.status, + }), + }, + { + field: 'price', + label: '支付金额', + content: (data) => `¥${floatToFixed2(data?.price)}`, + }, + { + field: 'channelFeePrice', + label: '手续费', + content: (data) => `¥${floatToFixed2(data?.channelFeePrice)}`, + }, + { + field: 'channelFeeRate', + label: '手续费比例', + content: (data) => `${floatToFixed2(data?.channelFeeRate)}%`, + }, + { + field: 'successTime', + label: '支付时间', + content: (data) => formatDateTime(data?.successTime) as string, + }, + { + field: 'expireTime', + label: '失效时间', + content: (data) => formatDateTime(data?.expireTime) as string, + }, + { + field: 'createTime', + label: '创建时间', + content: (data) => formatDateTime(data?.createTime) as string, + }, + { + field: 'updateTime', + label: '更新时间', + content: (data) => formatDateTime(data?.updateTime) as string, + }, + { + field: 'subject', + label: '商品标题', + }, + { + field: 'body', + label: '商品描述', + }, + { + field: 'channelCode', + label: '支付渠道', + content: (data) => + h(DictTag, { + type: DICT_TYPE.PAY_CHANNEL_CODE, + value: data?.channelCode, + }), + }, + { + field: 'userIp', + label: '支付 IP', + }, + { + field: 'channelOrderNo', + label: '渠道单号', + content: (data) => + h(Tag, { color: 'green' }, () => data?.channelOrderNo || ''), + }, + { + field: 'channelUserId', + label: '渠道用户', + }, + { + field: 'refundPrice', + label: '退款金额', + content: (data) => `¥${floatToFixed2(data?.refundPrice)}`, + }, + { + field: 'notifyUrl', + label: '通知 URL', + }, + { + field: 'channelNotifyData', + label: '支付通道异步回调内容', + }, + ]; +} diff --git a/apps/web-antd/src/views/pay/order/modules/detail.vue b/apps/web-antd/src/views/pay/order/modules/detail.vue index a7b604fe0..3ae087426 100644 --- a/apps/web-antd/src/views/pay/order/modules/detail.vue +++ b/apps/web-antd/src/views/pay/order/modules/detail.vue @@ -4,16 +4,23 @@ import type { PayOrderApi } from '#/api/pay/order'; import { ref } from 'vue'; import { useVbenModal } from '@vben/common-ui'; -import { floatToFixed2, formatDateTime } from '@vben/utils'; - -import { Descriptions, Divider, Tag } from 'ant-design-vue'; import { getOrder } from '#/api/pay/order'; -import { DictTag } from '#/components/dict-tag'; -import { DICT_TYPE } from '#/utils'; +import { useDescription } from '#/components/description'; + +import { useDetailSchema } from '../data'; const detailData = ref(); +const [Description] = useDescription({ + componentProps: { + bordered: false, + column: 2, + class: 'mx-4', + }, + schema: useDetailSchema(), +}); + const [Modal, modalApi] = useVbenModal({ onOpenChange: async (isOpen) => { if (!isOpen) { @@ -41,92 +48,6 @@ const [Modal, modalApi] = useVbenModal({ :show-cancel-button="false" :show-confirm-button="false" > - - - {{ detailData?.merchantOrderId }} - - - {{ detailData?.no }} - - - {{ detailData?.appId }} - - - {{ detailData?.appName }} - - - - - - - ¥{{ floatToFixed2(detailData?.price) }} - - - - - ¥{{ floatToFixed2(detailData?.channelFeePrice) }} - - - - {{ floatToFixed2(detailData?.channelFeeRate) }}% - - - {{ formatDateTime(detailData?.successTime) }} - - - {{ formatDateTime(detailData?.expireTime) }} - - - {{ formatDateTime(detailData?.createTime) }} - - - {{ formatDateTime(detailData?.updateTime) }} - - - - - - {{ detailData?.subject }} - - - {{ detailData?.body }} - - - - - - {{ detailData?.userIp }} - - - - {{ detailData?.channelOrderNo }} - - - - {{ detailData?.channelUserId }} - - - - ¥{{ floatToFixed2(detailData?.refundPrice) }} - - - - {{ detailData?.notifyUrl }} - - - - - - {{ detailData?.channelNotifyData }} - - +