Commit cbc7b9dfc0e9ab56b6815f412a2f49751265a9e7
1 parent
24439b70
refactor: pay
Showing
19 changed files
with
1025 additions
and
1008 deletions
yudao-ui-admin-vue3/src/api/pay/app/index.ts
| 1 | 1 | import request from '@/config/axios' |
| 2 | -import type { AppVO } from './types' | |
| 2 | + | |
| 3 | +export interface AppVO { | |
| 4 | + id: number | |
| 5 | + name: string | |
| 6 | + status: number | |
| 7 | + remark: string | |
| 8 | + payNotifyUrl: string | |
| 9 | + refundNotifyUrl: string | |
| 10 | + merchantId: number | |
| 11 | + merchantName: string | |
| 12 | + createTime: Date | |
| 13 | +} | |
| 14 | + | |
| 15 | +export interface AppPageReqVO extends PageParam { | |
| 16 | + name?: string | |
| 17 | + status?: number | |
| 18 | + remark?: string | |
| 19 | + payNotifyUrl?: string | |
| 20 | + refundNotifyUrl?: string | |
| 21 | + merchantName?: string | |
| 22 | + createTime?: Date[] | |
| 23 | +} | |
| 24 | + | |
| 25 | +export interface AppExportReqVO { | |
| 26 | + name?: string | |
| 27 | + status?: number | |
| 28 | + remark?: string | |
| 29 | + payNotifyUrl?: string | |
| 30 | + refundNotifyUrl?: string | |
| 31 | + merchantName?: string | |
| 32 | + createTime?: Date[] | |
| 33 | +} | |
| 34 | + | |
| 35 | +export interface AppUpdateStatusReqVO { | |
| 36 | + id: number | |
| 37 | + status: number | |
| 38 | +} | |
| 3 | 39 | |
| 4 | 40 | // 查询列表支付应用 |
| 5 | -export const getAppPageApi = (params) => { | |
| 41 | +export const getAppPageApi = (params: AppPageReqVO) => { | |
| 6 | 42 | return request.get({ url: '/pay/app/page', params }) |
| 7 | 43 | } |
| 8 | 44 | |
| ... | ... | @@ -22,11 +58,7 @@ export const updateAppApi = (data: AppVO) => { |
| 22 | 58 | } |
| 23 | 59 | |
| 24 | 60 | // 支付应用信息状态修改 |
| 25 | -export const changeAppStatusApi = (id: number, status: number) => { | |
| 26 | - const data = { | |
| 27 | - id, | |
| 28 | - status | |
| 29 | - } | |
| 61 | +export const changeAppStatusApi = (data: AppUpdateStatusReqVO) => { | |
| 30 | 62 | return request.put({ url: '/pay/app/update-status', data: data }) |
| 31 | 63 | } |
| 32 | 64 | |
| ... | ... | @@ -36,7 +68,7 @@ export const deleteAppApi = (id: number) => { |
| 36 | 68 | } |
| 37 | 69 | |
| 38 | 70 | // 导出支付应用 |
| 39 | -export const exportAppApi = (params) => { | |
| 71 | +export const exportAppApi = (params: AppExportReqVO) => { | |
| 40 | 72 | return request.download({ url: '/pay/app/export-excel', params }) |
| 41 | 73 | } |
| 42 | 74 | ... | ... |
yudao-ui-admin-vue3/src/api/pay/app/types.ts deleted
yudao-ui-admin-vue3/src/api/pay/channel/index.ts
| 1 | 1 | import request from '@/config/axios' |
| 2 | -import type { ChannelVO } from './types' | |
| 2 | + | |
| 3 | +export interface ChannelVO { | |
| 4 | + id: number | |
| 5 | + code: string | |
| 6 | + config: string | |
| 7 | + status: number | |
| 8 | + remark: string | |
| 9 | + feeRate: number | |
| 10 | + merchantId: number | |
| 11 | + appId: number | |
| 12 | + createTime: Date | |
| 13 | +} | |
| 14 | + | |
| 15 | +export interface ChannelPageReqVO extends PageParam { | |
| 16 | + code?: string | |
| 17 | + status?: number | |
| 18 | + remark?: string | |
| 19 | + feeRate?: number | |
| 20 | + merchantId?: number | |
| 21 | + appId?: number | |
| 22 | + config?: string | |
| 23 | + createTime?: Date[] | |
| 24 | +} | |
| 25 | + | |
| 26 | +export interface ChannelExportReqVO { | |
| 27 | + code?: string | |
| 28 | + status?: number | |
| 29 | + remark?: string | |
| 30 | + feeRate?: number | |
| 31 | + merchantId?: number | |
| 32 | + appId?: number | |
| 33 | + config?: string | |
| 34 | + createTime?: Date[] | |
| 35 | +} | |
| 3 | 36 | |
| 4 | 37 | // 查询列表支付渠道 |
| 5 | -export const getChannelPageApi = (params) => { | |
| 38 | +export const getChannelPageApi = (params: ChannelPageReqVO) => { | |
| 6 | 39 | return request.get({ url: '/pay/channel/page', params }) |
| 7 | 40 | } |
| 8 | 41 | |
| ... | ... | @@ -32,6 +65,6 @@ export const deleteChannelApi = (id: number) => { |
| 32 | 65 | } |
| 33 | 66 | |
| 34 | 67 | // 导出支付渠道 |
| 35 | -export const exportChannelApi = (params) => { | |
| 68 | +export const exportChannelApi = (params: ChannelExportReqVO) => { | |
| 36 | 69 | return request.download({ url: '/pay/channel/export-excel', params }) |
| 37 | 70 | } | ... | ... |
yudao-ui-admin-vue3/src/api/pay/channel/types.ts deleted
yudao-ui-admin-vue3/src/api/pay/merchant/index.ts
| 1 | 1 | import request from '@/config/axios' |
| 2 | -import type { MerchantVO } from './types' | |
| 2 | + | |
| 3 | +export interface MerchantVO { | |
| 4 | + id: number | |
| 5 | + no: string | |
| 6 | + name: string | |
| 7 | + shortName: string | |
| 8 | + status: number | |
| 9 | + remark: string | |
| 10 | + createTime: Date | |
| 11 | +} | |
| 12 | + | |
| 13 | +export interface MerchantPageReqVO extends PageParam { | |
| 14 | + no?: string | |
| 15 | + name?: string | |
| 16 | + shortName?: string | |
| 17 | + status?: number | |
| 18 | + remark?: string | |
| 19 | + createTime?: Date[] | |
| 20 | +} | |
| 21 | + | |
| 22 | +export interface MerchantExportReqVO { | |
| 23 | + no?: string | |
| 24 | + name?: string | |
| 25 | + shortName?: string | |
| 26 | + status?: number | |
| 27 | + remark?: string | |
| 28 | + createTime?: Date[] | |
| 29 | +} | |
| 3 | 30 | |
| 4 | 31 | // 查询列表支付商户 |
| 5 | -export const getMerchantPageApi = (params) => { | |
| 32 | +export const getMerchantPageApi = (params: MerchantPageReqVO) => { | |
| 6 | 33 | return request.get({ url: '/pay/merchant/page', params }) |
| 7 | 34 | } |
| 8 | 35 | |
| ... | ... | @@ -37,7 +64,7 @@ export const deleteMerchantApi = (id: number) => { |
| 37 | 64 | } |
| 38 | 65 | |
| 39 | 66 | // 导出支付商户 |
| 40 | -export const exportMerchantApi = (params) => { | |
| 67 | +export const exportMerchantApi = (params: MerchantExportReqVO) => { | |
| 41 | 68 | return request.download({ url: '/pay/merchant/export-excel', params }) |
| 42 | 69 | } |
| 43 | 70 | // 支付商户状态修改 | ... | ... |
yudao-ui-admin-vue3/src/api/pay/merchant/types.ts deleted
yudao-ui-admin-vue3/src/api/pay/order/index.ts
| 1 | 1 | import request from '@/config/axios' |
| 2 | -import type { OrderVO } from './types' | |
| 2 | + | |
| 3 | +export interface OrderVO { | |
| 4 | + id: number | |
| 5 | + merchantId: number | |
| 6 | + appId: number | |
| 7 | + channelId: number | |
| 8 | + channelCode: string | |
| 9 | + merchantOrderId: string | |
| 10 | + subject: string | |
| 11 | + body: string | |
| 12 | + notifyUrl: string | |
| 13 | + notifyStatus: number | |
| 14 | + amount: number | |
| 15 | + channelFeeRate: number | |
| 16 | + channelFeeAmount: number | |
| 17 | + status: number | |
| 18 | + userIp: string | |
| 19 | + expireTime: Date | |
| 20 | + successTime: Date | |
| 21 | + notifyTime: Date | |
| 22 | + successExtensionId: number | |
| 23 | + refundStatus: number | |
| 24 | + refundTimes: number | |
| 25 | + refundAmount: number | |
| 26 | + channelUserId: string | |
| 27 | + channelOrderNo: string | |
| 28 | + createTime: Date | |
| 29 | +} | |
| 30 | + | |
| 31 | +export interface OrderPageReqVO extends PageParam { | |
| 32 | + merchantId?: number | |
| 33 | + appId?: number | |
| 34 | + channelId?: number | |
| 35 | + channelCode?: string | |
| 36 | + merchantOrderId?: string | |
| 37 | + subject?: string | |
| 38 | + body?: string | |
| 39 | + notifyUrl?: string | |
| 40 | + notifyStatus?: number | |
| 41 | + amount?: number | |
| 42 | + channelFeeRate?: number | |
| 43 | + channelFeeAmount?: number | |
| 44 | + status?: number | |
| 45 | + expireTime?: Date[] | |
| 46 | + successTime?: Date[] | |
| 47 | + notifyTime?: Date[] | |
| 48 | + successExtensionId?: number | |
| 49 | + refundStatus?: number | |
| 50 | + refundTimes?: number | |
| 51 | + channelUserId?: string | |
| 52 | + channelOrderNo?: string | |
| 53 | + createTime?: Date[] | |
| 54 | +} | |
| 55 | + | |
| 56 | +export interface OrderExportReqVO { | |
| 57 | + merchantId?: number | |
| 58 | + appId?: number | |
| 59 | + channelId?: number | |
| 60 | + channelCode?: string | |
| 61 | + merchantOrderId?: string | |
| 62 | + subject?: string | |
| 63 | + body?: string | |
| 64 | + notifyUrl?: string | |
| 65 | + notifyStatus?: number | |
| 66 | + amount?: number | |
| 67 | + channelFeeRate?: number | |
| 68 | + channelFeeAmount?: number | |
| 69 | + status?: number | |
| 70 | + expireTime?: Date[] | |
| 71 | + successTime?: Date[] | |
| 72 | + notifyTime?: Date[] | |
| 73 | + successExtensionId?: number | |
| 74 | + refundStatus?: number | |
| 75 | + refundTimes?: number | |
| 76 | + channelUserId?: string | |
| 77 | + channelOrderNo?: string | |
| 78 | + createTime?: Date[] | |
| 79 | +} | |
| 3 | 80 | |
| 4 | 81 | // 查询列表支付订单 |
| 5 | -export const getOrderPageApi = async (params) => { | |
| 82 | +export const getOrderPageApi = async (params: OrderPageReqVO) => { | |
| 6 | 83 | return await request.get({ url: '/pay/order/page', params }) |
| 7 | 84 | } |
| 8 | 85 | |
| ... | ... | @@ -27,6 +104,6 @@ export const deleteOrderApi = async (id: number) => { |
| 27 | 104 | } |
| 28 | 105 | |
| 29 | 106 | // 导出支付订单 |
| 30 | -export const exportOrderApi = async (params) => { | |
| 107 | +export const exportOrderApi = async (params: OrderExportReqVO) => { | |
| 31 | 108 | return await request.download({ url: '/pay/order/export-excel', params }) |
| 32 | 109 | } | ... | ... |
yudao-ui-admin-vue3/src/api/pay/order/types.ts deleted
| 1 | -export type OrderVO = { | |
| 2 | - id: number | |
| 3 | - merchantId: number | |
| 4 | - appId: number | |
| 5 | - channelId: number | |
| 6 | - channelCode: string | |
| 7 | - merchantOrderId: string | |
| 8 | - subject: string | |
| 9 | - body: string | |
| 10 | - notifyUrl: string | |
| 11 | - notifyStatus: number | |
| 12 | - amount: number | |
| 13 | - channelFeeRate: number | |
| 14 | - channelFeeAmount: number | |
| 15 | - status: number | |
| 16 | - userIp: string | |
| 17 | - expireTime: string | |
| 18 | - successTime: string | |
| 19 | - notifyTime: string | |
| 20 | - successExtensionId: number | |
| 21 | - refundStatus: number | |
| 22 | - refundTimes: number | |
| 23 | - refundAmount: number | |
| 24 | - channelUserId: string | |
| 25 | - channelOrderNo: string | |
| 26 | -} |
yudao-ui-admin-vue3/src/api/pay/refund/index.ts
| 1 | 1 | import request from '@/config/axios' |
| 2 | -import type { RefundVO } from './types' | |
| 2 | + | |
| 3 | +export interface RefundVO { | |
| 4 | + id: number | |
| 5 | + merchantId: number | |
| 6 | + appId: number | |
| 7 | + channelId: number | |
| 8 | + channelCode: string | |
| 9 | + orderId: string | |
| 10 | + tradeNo: string | |
| 11 | + merchantOrderId: string | |
| 12 | + merchantRefundNo: string | |
| 13 | + notifyUrl: string | |
| 14 | + notifyStatus: number | |
| 15 | + status: number | |
| 16 | + type: number | |
| 17 | + payAmount: number | |
| 18 | + refundAmount: number | |
| 19 | + reason: string | |
| 20 | + userIp: string | |
| 21 | + channelOrderNo: string | |
| 22 | + channelRefundNo: string | |
| 23 | + channelErrorCode: string | |
| 24 | + channelErrorMsg: string | |
| 25 | + channelExtras: string | |
| 26 | + expireTime: Date | |
| 27 | + successTime: Date | |
| 28 | + notifyTime: Date | |
| 29 | + createTime: Date | |
| 30 | +} | |
| 31 | + | |
| 32 | +export interface RefundPageReqVO extends PageParam { | |
| 33 | + merchantId?: number | |
| 34 | + appId?: number | |
| 35 | + channelId?: number | |
| 36 | + channelCode?: string | |
| 37 | + orderId?: string | |
| 38 | + tradeNo?: string | |
| 39 | + merchantOrderId?: string | |
| 40 | + merchantRefundNo?: string | |
| 41 | + notifyUrl?: string | |
| 42 | + notifyStatus?: number | |
| 43 | + status?: number | |
| 44 | + type?: number | |
| 45 | + payAmount?: number | |
| 46 | + refundAmount?: number | |
| 47 | + reason?: string | |
| 48 | + userIp?: string | |
| 49 | + channelOrderNo?: string | |
| 50 | + channelRefundNo?: string | |
| 51 | + channelErrorCode?: string | |
| 52 | + channelErrorMsg?: string | |
| 53 | + channelExtras?: string | |
| 54 | + expireTime?: Date[] | |
| 55 | + successTime?: Date[] | |
| 56 | + notifyTime?: Date[] | |
| 57 | + createTime?: Date[] | |
| 58 | +} | |
| 59 | + | |
| 60 | +export interface PayRefundExportReqVO { | |
| 61 | + merchantId?: number | |
| 62 | + appId?: number | |
| 63 | + channelId?: number | |
| 64 | + channelCode?: string | |
| 65 | + orderId?: string | |
| 66 | + tradeNo?: string | |
| 67 | + merchantOrderId?: string | |
| 68 | + merchantRefundNo?: string | |
| 69 | + notifyUrl?: string | |
| 70 | + notifyStatus?: number | |
| 71 | + status?: number | |
| 72 | + type?: number | |
| 73 | + payAmount?: number | |
| 74 | + refundAmount?: number | |
| 75 | + reason?: string | |
| 76 | + userIp?: string | |
| 77 | + channelOrderNo?: string | |
| 78 | + channelRefundNo?: string | |
| 79 | + channelErrorCode?: string | |
| 80 | + channelErrorMsg?: string | |
| 81 | + channelExtras?: string | |
| 82 | + expireTime?: Date[] | |
| 83 | + successTime?: Date[] | |
| 84 | + notifyTime?: Date[] | |
| 85 | + createTime?: Date[] | |
| 86 | +} | |
| 3 | 87 | |
| 4 | 88 | // 查询列表退款订单 |
| 5 | -export const getRefundPageApi = (params) => { | |
| 89 | +export const getRefundPageApi = (params: RefundPageReqVO) => { | |
| 6 | 90 | return request.get({ url: '/pay/refund/page', params }) |
| 7 | 91 | } |
| 8 | 92 | |
| ... | ... | @@ -27,6 +111,6 @@ export const deleteRefundApi = (id: number) => { |
| 27 | 111 | } |
| 28 | 112 | |
| 29 | 113 | // 导出退款订单 |
| 30 | -export const exportRefundApi = (params) => { | |
| 114 | +export const exportRefundApi = (params: PayRefundExportReqVO) => { | |
| 31 | 115 | return request.download({ url: '/pay/refund/export-excel', params }) |
| 32 | 116 | } | ... | ... |
yudao-ui-admin-vue3/src/api/pay/refund/types.ts deleted
| 1 | -export type RefundVO = { | |
| 2 | - id: number | |
| 3 | - merchantId: number | |
| 4 | - appId: number | |
| 5 | - channelId: number | |
| 6 | - channelCode: string | |
| 7 | - merchantOrderId: string | |
| 8 | - subject: string | |
| 9 | - body: string | |
| 10 | - notifyUrl: string | |
| 11 | - notifyStatus: number | |
| 12 | - amount: number | |
| 13 | - channelFeeRate: number | |
| 14 | - channelFeeAmount: number | |
| 15 | - status: number | |
| 16 | - userIp: string | |
| 17 | - expireTime: string | |
| 18 | - successTime: string | |
| 19 | - notifyTime: string | |
| 20 | - successExtensionId: number | |
| 21 | - refundStatus: number | |
| 22 | - refundTimes: number | |
| 23 | - refundAmount: number | |
| 24 | - channelUserId: string | |
| 25 | - channelOrderNo: string | |
| 26 | -} |
yudao-ui-admin-vue3/src/hooks/web/useVxeCrudSchemas.ts
| ... | ... | @@ -121,18 +121,8 @@ const filterSearchSchema = (crudSchema: VxeCrudSchema): VxeFormItemProps[] => { |
| 121 | 121 | if (schemaItem?.isSearch || schemaItem.search?.show) { |
| 122 | 122 | let itemRenderName = schemaItem?.search?.itemRender?.name || '$input' |
| 123 | 123 | const options: any[] = [] |
| 124 | - let itemRender: FormItemRenderOptions | |
| 125 | - if (schemaItem.search?.itemRender) { | |
| 126 | - itemRender = schemaItem.search.itemRender | |
| 127 | - } else { | |
| 128 | - itemRender = { | |
| 129 | - name: itemRenderName, | |
| 130 | - props: | |
| 131 | - itemRenderName == '$input' | |
| 132 | - ? { placeholder: t('common.inputText') } | |
| 133 | - : { placeholder: t('common.selectText') } | |
| 134 | - } | |
| 135 | - } | |
| 124 | + let itemRender: FormItemRenderOptions = {} | |
| 125 | + | |
| 136 | 126 | if (schemaItem.dictType) { |
| 137 | 127 | const allOptions = { label: '全部', value: '' } |
| 138 | 128 | options.push(allOptions) |
| ... | ... | @@ -146,8 +136,19 @@ const filterSearchSchema = (crudSchema: VxeCrudSchema): VxeFormItemProps[] => { |
| 146 | 136 | options: options, |
| 147 | 137 | props: { placeholder: t('common.selectText') } |
| 148 | 138 | } |
| 139 | + } else { | |
| 140 | + if (schemaItem.search?.itemRender) { | |
| 141 | + itemRender = schemaItem.search.itemRender | |
| 142 | + } else { | |
| 143 | + itemRender = { | |
| 144 | + name: itemRenderName, | |
| 145 | + props: | |
| 146 | + itemRenderName == '$input' | |
| 147 | + ? { placeholder: t('common.inputText') } | |
| 148 | + : { placeholder: t('common.selectText') } | |
| 149 | + } | |
| 150 | + } | |
| 149 | 151 | } |
| 150 | - | |
| 151 | 152 | const searchSchemaItem = { |
| 152 | 153 | // 默认为 input |
| 153 | 154 | folding: searchSchema.length > spanLength - 1, |
| ... | ... | @@ -156,7 +157,6 @@ const filterSearchSchema = (crudSchema: VxeCrudSchema): VxeFormItemProps[] => { |
| 156 | 157 | title: schemaItem.search?.title || schemaItem.title, |
| 157 | 158 | span: span |
| 158 | 159 | } |
| 159 | - | |
| 160 | 160 | searchSchema.push(searchSchemaItem) |
| 161 | 161 | } |
| 162 | 162 | }) | ... | ... |
yudao-ui-admin-vue3/src/views/pay/app/app.data.ts
| 1 | 1 | import { reactive } from 'vue' |
| 2 | 2 | import { useI18n } from '@/hooks/web/useI18n' |
| 3 | 3 | import { required } from '@/utils/formRules' |
| 4 | -import { CrudSchema, useCrudSchemas } from '@/hooks/web/useCrudSchemas' | |
| 5 | 4 | import { DICT_TYPE } from '@/utils/dict' |
| 5 | +import { VxeCrudSchema, useVxeCrudSchemas } from '@/hooks/web/useVxeCrudSchemas' | |
| 6 | 6 | const { t } = useI18n() // 国际化 |
| 7 | 7 | |
| 8 | 8 | // 表单校验 |
| ... | ... | @@ -15,67 +15,61 @@ export const rules = reactive({ |
| 15 | 15 | }) |
| 16 | 16 | |
| 17 | 17 | // CrudSchema |
| 18 | -const crudSchemas = reactive<CrudSchema[]>([ | |
| 19 | - { | |
| 20 | - label: t('common.index'), | |
| 21 | - field: 'id', | |
| 22 | - type: 'index', | |
| 23 | - form: { | |
| 24 | - show: false | |
| 18 | +const crudSchemas = reactive<VxeCrudSchema>({ | |
| 19 | + primaryKey: 'id', | |
| 20 | + primaryType: 'seq', | |
| 21 | + primaryTitle: '编号', | |
| 22 | + action: true, | |
| 23 | + columns: [ | |
| 24 | + { | |
| 25 | + title: '应用名', | |
| 26 | + field: 'name', | |
| 27 | + isSearch: true | |
| 25 | 28 | }, |
| 26 | - detail: { | |
| 27 | - show: false | |
| 28 | - } | |
| 29 | - }, | |
| 30 | - { | |
| 31 | - label: '应用名', | |
| 32 | - field: 'name', | |
| 33 | - search: { | |
| 34 | - show: true | |
| 35 | - } | |
| 36 | - }, | |
| 37 | - { | |
| 38 | - label: '商户名称', | |
| 39 | - field: 'payMerchant', | |
| 40 | - search: { | |
| 41 | - show: true | |
| 42 | - } | |
| 43 | - }, | |
| 44 | - { | |
| 45 | - label: t('common.status'), | |
| 46 | - field: 'status', | |
| 47 | - dictType: DICT_TYPE.COMMON_STATUS, | |
| 48 | - dictClass: 'number', | |
| 49 | - search: { | |
| 50 | - show: true | |
| 51 | - } | |
| 52 | - }, | |
| 53 | - { | |
| 54 | - label: t('common.createTime'), | |
| 55 | - field: 'createTime', | |
| 56 | - form: { | |
| 57 | - show: false | |
| 29 | + { | |
| 30 | + title: '商户名称', | |
| 31 | + field: 'payMerchant', | |
| 32 | + isSearch: true | |
| 58 | 33 | }, |
| 59 | - search: { | |
| 60 | - show: true, | |
| 61 | - component: 'DatePicker', | |
| 62 | - componentProps: { | |
| 63 | - type: 'datetimerange', | |
| 64 | - valueFormat: 'YYYY-MM-DD HH:mm:ss', | |
| 65 | - defaultTime: [new Date(2000, 1, 1, 0, 0, 0), new Date(2000, 2, 1, 23, 59, 59)] | |
| 66 | - } | |
| 67 | - } | |
| 68 | - }, | |
| 69 | - { | |
| 70 | - label: t('table.action'), | |
| 71 | - field: 'action', | |
| 72 | - width: '240px', | |
| 73 | - form: { | |
| 74 | - show: false | |
| 34 | + { | |
| 35 | + title: t('common.status'), | |
| 36 | + field: 'status', | |
| 37 | + dictType: DICT_TYPE.COMMON_STATUS, | |
| 38 | + dictClass: 'number', | |
| 39 | + isSearch: true | |
| 75 | 40 | }, |
| 76 | - detail: { | |
| 77 | - show: false | |
| 41 | + { | |
| 42 | + title: '支付结果的回调地址', | |
| 43 | + field: 'payNotifyUrl', | |
| 44 | + isSearch: true | |
| 45 | + }, | |
| 46 | + { | |
| 47 | + title: '退款结果的回调地址', | |
| 48 | + field: 'refundNotifyUrl', | |
| 49 | + isSearch: true | |
| 50 | + }, | |
| 51 | + { | |
| 52 | + title: '商户名称', | |
| 53 | + field: 'merchantName', | |
| 54 | + isSearch: true | |
| 55 | + }, | |
| 56 | + { | |
| 57 | + title: '备注', | |
| 58 | + field: 'remark', | |
| 59 | + isTable: false, | |
| 60 | + isSearch: true | |
| 61 | + }, | |
| 62 | + { | |
| 63 | + title: t('common.createTime'), | |
| 64 | + field: 'createTime', | |
| 65 | + isForm: false, | |
| 66 | + search: { | |
| 67 | + show: true, | |
| 68 | + itemRender: { | |
| 69 | + name: 'XDataTimePicker' | |
| 70 | + } | |
| 71 | + } | |
| 78 | 72 | } |
| 79 | - } | |
| 80 | -]) | |
| 81 | -export const { allSchemas } = useCrudSchemas(crudSchemas) | |
| 73 | + ] | |
| 74 | +}) | |
| 75 | +export const { allSchemas } = useVxeCrudSchemas(crudSchemas) | ... | ... |
yudao-ui-admin-vue3/src/views/pay/app/index.vue
| 1 | +<template> | |
| 2 | + <ContentWrap> | |
| 3 | + <!-- 列表 --> | |
| 4 | + <vxe-grid ref="xGrid" v-bind="gridOptions" class="xtable-scrollbar"> | |
| 5 | + <template #toolbar_buttons> | |
| 6 | + <!-- 操作:新增 --> | |
| 7 | + <XButton | |
| 8 | + type="primary" | |
| 9 | + preIcon="ep:zoom-in" | |
| 10 | + :title="t('action.add')" | |
| 11 | + v-hasPermi="['pay:app:create']" | |
| 12 | + @click="handleCreate()" | |
| 13 | + /> | |
| 14 | + <!-- 操作:导出 --> | |
| 15 | + <XButton | |
| 16 | + type="warning" | |
| 17 | + preIcon="ep:download" | |
| 18 | + :title="t('action.export')" | |
| 19 | + v-hasPermi="['pay:app:export']" | |
| 20 | + @click="handleExport()" | |
| 21 | + /> | |
| 22 | + </template> | |
| 23 | + <template #actionbtns_default="{ row }"> | |
| 24 | + <!-- 操作:修改 --> | |
| 25 | + <XTextButton | |
| 26 | + preIcon="ep:edit" | |
| 27 | + :title="t('action.edit')" | |
| 28 | + v-hasPermi="['pay:app:update']" | |
| 29 | + @click="handleUpdate(row.id)" | |
| 30 | + /> | |
| 31 | + <!-- 操作:详情 --> | |
| 32 | + <XTextButton | |
| 33 | + preIcon="ep:view" | |
| 34 | + :title="t('action.detail')" | |
| 35 | + v-hasPermi="['pay:app:query']" | |
| 36 | + @click="handleDetail(row.id)" | |
| 37 | + /> | |
| 38 | + <!-- 操作:删除 --> | |
| 39 | + <XTextButton | |
| 40 | + preIcon="ep:delete" | |
| 41 | + :title="t('action.del')" | |
| 42 | + v-hasPermi="['pay:app:delete']" | |
| 43 | + @click="handleDelete(row.id)" | |
| 44 | + /> | |
| 45 | + </template> | |
| 46 | + </vxe-grid> | |
| 47 | + </ContentWrap> | |
| 48 | + | |
| 49 | + <XModal v-model="dialogVisible" :title="dialogTitle"> | |
| 50 | + <!-- 对话框(添加 / 修改) --> | |
| 51 | + <Form | |
| 52 | + v-if="['create', 'update'].includes(actionType)" | |
| 53 | + :schema="allSchemas.formSchema" | |
| 54 | + :rules="rules" | |
| 55 | + ref="formRef" | |
| 56 | + /> | |
| 57 | + <!-- 对话框(详情) --> | |
| 58 | + <Descriptions | |
| 59 | + v-if="actionType === 'detail'" | |
| 60 | + :schema="allSchemas.detailSchema" | |
| 61 | + :data="detailData" | |
| 62 | + /> | |
| 63 | + <!-- 操作按钮 --> | |
| 64 | + <template #footer> | |
| 65 | + <!-- 按钮:保存 --> | |
| 66 | + <XButton | |
| 67 | + v-if="['create', 'update'].includes(actionType)" | |
| 68 | + type="primary" | |
| 69 | + :title="t('action.save')" | |
| 70 | + :loading="actionLoading" | |
| 71 | + @click="submitForm()" | |
| 72 | + /> | |
| 73 | + <!-- 按钮:关闭 --> | |
| 74 | + <XButton :loading="actionLoading" :title="t('dialog.close')" @click="dialogVisible = false" /> | |
| 75 | + </template> | |
| 76 | + </XModal> | |
| 77 | +</template> | |
| 1 | 78 | <script setup lang="ts" name="App"> |
| 2 | 79 | import { ref, unref } from 'vue' |
| 3 | -import dayjs from 'dayjs' | |
| 4 | -import { ElMessage } from 'element-plus' | |
| 5 | -import { DICT_TYPE } from '@/utils/dict' | |
| 6 | -import { useTable } from '@/hooks/web/useTable' | |
| 7 | 80 | import { useI18n } from '@/hooks/web/useI18n' |
| 81 | +import { useMessage } from '@/hooks/web/useMessage' | |
| 82 | +import { useVxeGrid } from '@/hooks/web/useVxeGrid' | |
| 83 | +import { VxeGridInstance } from 'vxe-table' | |
| 8 | 84 | import { FormExpose } from '@/components/Form' |
| 9 | -import type { AppVO } from '@/api/pay/app/types' | |
| 10 | 85 | import { rules, allSchemas } from './app.data' |
| 11 | 86 | import * as AppApi from '@/api/pay/app' |
| 87 | + | |
| 12 | 88 | const { t } = useI18n() // 国际化 |
| 89 | +const message = useMessage() // 消息弹窗 | |
| 13 | 90 | |
| 14 | -// ========== 列表相关 ========== | |
| 15 | -const { register, tableObject, methods } = useTable<AppVO>({ | |
| 91 | +// 列表相关的变量 | |
| 92 | +const xGrid = ref<VxeGridInstance>() // 列表 Grid Ref | |
| 93 | +const { gridOptions, getList, deleteData, exportList } = useVxeGrid<AppApi.AppVO>({ | |
| 94 | + allSchemas: allSchemas, | |
| 16 | 95 | getListApi: AppApi.getAppPageApi, |
| 17 | - delListApi: AppApi.deleteAppApi, | |
| 96 | + deleteApi: AppApi.deleteAppApi, | |
| 18 | 97 | exportListApi: AppApi.exportAppApi |
| 19 | 98 | }) |
| 20 | -const { getList, setSearchParams, delList, exportList } = methods | |
| 21 | 99 | |
| 22 | 100 | // ========== CRUD 相关 ========== |
| 23 | 101 | const actionLoading = ref(false) // 遮罩层 |
| ... | ... | @@ -25,6 +103,7 @@ const actionType = ref('') // 操作按钮的类型 |
| 25 | 103 | const dialogVisible = ref(false) // 是否显示弹出层 |
| 26 | 104 | const dialogTitle = ref('edit') // 弹出层标题 |
| 27 | 105 | const formRef = ref<FormExpose>() // 表单 Ref |
| 106 | +const detailData = ref() // 详情 Ref | |
| 28 | 107 | |
| 29 | 108 | // 设置标题 |
| 30 | 109 | const setDialogTile = (type: string) => { |
| ... | ... | @@ -38,14 +117,31 @@ const handleCreate = () => { |
| 38 | 117 | setDialogTile('create') |
| 39 | 118 | } |
| 40 | 119 | |
| 120 | +// 导出操作 | |
| 121 | +const handleExport = async () => { | |
| 122 | + await exportList(xGrid, '应用信息.xls') | |
| 123 | +} | |
| 124 | + | |
| 41 | 125 | // 修改操作 |
| 42 | -const handleUpdate = async (row: AppVO) => { | |
| 126 | +const handleUpdate = async (rowId: number) => { | |
| 43 | 127 | setDialogTile('update') |
| 44 | 128 | // 设置数据 |
| 45 | - const res = await AppApi.getAppApi(row.id) | |
| 129 | + const res = await AppApi.getAppApi(rowId) | |
| 46 | 130 | unref(formRef)?.setValues(res) |
| 47 | 131 | } |
| 48 | 132 | |
| 133 | +// 详情操作 | |
| 134 | +const handleDetail = async (rowId: number) => { | |
| 135 | + setDialogTile('detail') | |
| 136 | + const res = await AppApi.getAppApi(rowId) | |
| 137 | + detailData.value = res | |
| 138 | +} | |
| 139 | + | |
| 140 | +// 删除操作 | |
| 141 | +const handleDelete = async (rowId: number) => { | |
| 142 | + await deleteData(xGrid, rowId) | |
| 143 | +} | |
| 144 | + | |
| 49 | 145 | // 提交按钮 |
| 50 | 146 | const submitForm = async () => { |
| 51 | 147 | const elForm = unref(formRef)?.getElFormRef() |
| ... | ... | @@ -55,132 +151,21 @@ const submitForm = async () => { |
| 55 | 151 | actionLoading.value = true |
| 56 | 152 | // 提交请求 |
| 57 | 153 | try { |
| 58 | - const data = unref(formRef)?.formModel as AppVO | |
| 154 | + const data = unref(formRef)?.formModel as AppApi.AppVO | |
| 59 | 155 | if (actionType.value === 'create') { |
| 60 | 156 | await AppApi.createAppApi(data) |
| 61 | - ElMessage.success(t('common.createSuccess')) | |
| 157 | + message.success(t('common.createSuccess')) | |
| 62 | 158 | } else { |
| 63 | 159 | await AppApi.updateAppApi(data) |
| 64 | - ElMessage.success(t('common.updateSuccess')) | |
| 160 | + message.success(t('common.updateSuccess')) | |
| 65 | 161 | } |
| 66 | - // 操作成功,重新加载列表 | |
| 67 | 162 | dialogVisible.value = false |
| 68 | - await getList() | |
| 69 | 163 | } finally { |
| 70 | 164 | actionLoading.value = false |
| 165 | + // 刷新列表 | |
| 166 | + await getList(xGrid) | |
| 71 | 167 | } |
| 72 | 168 | } |
| 73 | 169 | }) |
| 74 | 170 | } |
| 75 | - | |
| 76 | -// ========== 详情相关 ========== | |
| 77 | -const detailRef = ref() // 详情 Ref | |
| 78 | - | |
| 79 | -// 详情操作 | |
| 80 | -const handleDetail = async (row: AppVO) => { | |
| 81 | - // 设置数据 | |
| 82 | - detailRef.value = row | |
| 83 | - setDialogTile('detail') | |
| 84 | -} | |
| 85 | - | |
| 86 | -// ========== 初始化 ========== | |
| 87 | -getList() | |
| 88 | 171 | </script> |
| 89 | - | |
| 90 | -<template> | |
| 91 | - <!-- 搜索工作区 --> | |
| 92 | - <ContentWrap> | |
| 93 | - <Search :schema="allSchemas.searchSchema" @search="setSearchParams" @reset="setSearchParams" /> | |
| 94 | - </ContentWrap> | |
| 95 | - <ContentWrap> | |
| 96 | - <!-- 操作工具栏 --> | |
| 97 | - <div class="mb-10px"> | |
| 98 | - <el-button type="primary" v-hasPermi="['system:post:create']" @click="handleCreate"> | |
| 99 | - <Icon icon="ep:zoom-in" class="mr-5px" /> {{ t('action.add') }} | |
| 100 | - </el-button> | |
| 101 | - <el-button | |
| 102 | - type="warning" | |
| 103 | - v-hasPermi="['system:post:export']" | |
| 104 | - :loading="tableObject.exportLoading" | |
| 105 | - @click="exportList('应用数据.xls')" | |
| 106 | - > | |
| 107 | - <Icon icon="ep:download" class="mr-5px" /> {{ t('action.export') }} | |
| 108 | - </el-button> | |
| 109 | - </div> | |
| 110 | - <!-- 列表 --> | |
| 111 | - <Table | |
| 112 | - :columns="allSchemas.tableColumns" | |
| 113 | - :selection="false" | |
| 114 | - :data="tableObject.tableList" | |
| 115 | - :loading="tableObject.loading" | |
| 116 | - :pagination="{ | |
| 117 | - total: tableObject.total | |
| 118 | - }" | |
| 119 | - v-model:pageSize="tableObject.pageSize" | |
| 120 | - v-model:currentPage="tableObject.currentPage" | |
| 121 | - @register="register" | |
| 122 | - > | |
| 123 | - <template #status="{ row }"> | |
| 124 | - <DictTag :type="DICT_TYPE.COMMON_STATUS" :value="row.status" /> | |
| 125 | - </template> | |
| 126 | - <template #createTime="{ row }"> | |
| 127 | - <span>{{ dayjs(row.createTime).format('YYYY-MM-DD HH:mm:ss') }}</span> | |
| 128 | - </template> | |
| 129 | - <template #action="{ row }"> | |
| 130 | - <el-button | |
| 131 | - link | |
| 132 | - type="primary" | |
| 133 | - v-hasPermi="['system:post:update']" | |
| 134 | - @click="handleUpdate(row)" | |
| 135 | - > | |
| 136 | - <Icon icon="ep:edit" class="mr-1px" /> {{ t('action.edit') }} | |
| 137 | - </el-button> | |
| 138 | - <el-button | |
| 139 | - link | |
| 140 | - type="primary" | |
| 141 | - v-hasPermi="['system:post:update']" | |
| 142 | - @click="handleDetail(row)" | |
| 143 | - > | |
| 144 | - <Icon icon="ep:view" class="mr-1px" /> {{ t('action.detail') }} | |
| 145 | - </el-button> | |
| 146 | - <el-button | |
| 147 | - link | |
| 148 | - type="primary" | |
| 149 | - v-hasPermi="['system:post:delete']" | |
| 150 | - @click="delList(row.id, false)" | |
| 151 | - > | |
| 152 | - <Icon icon="ep:delete" class="mr-1px" /> {{ t('action.del') }} | |
| 153 | - </el-button> | |
| 154 | - </template> | |
| 155 | - </Table> | |
| 156 | - </ContentWrap> | |
| 157 | - | |
| 158 | - <XModal v-model="dialogVisible" :title="dialogTitle"> | |
| 159 | - <!-- 对话框(添加 / 修改) --> | |
| 160 | - <Form | |
| 161 | - v-if="['create', 'update'].includes(actionType)" | |
| 162 | - :schema="allSchemas.formSchema" | |
| 163 | - :rules="rules" | |
| 164 | - ref="formRef" | |
| 165 | - /> | |
| 166 | - <!-- 对话框(详情) --> | |
| 167 | - <Descriptions | |
| 168 | - v-if="actionType === 'detail'" | |
| 169 | - :schema="allSchemas.detailSchema" | |
| 170 | - :data="detailRef" | |
| 171 | - /> | |
| 172 | - <!-- 操作按钮 --> | |
| 173 | - <template #footer> | |
| 174 | - <!-- 按钮:保存 --> | |
| 175 | - <XButton | |
| 176 | - v-if="['create', 'update'].includes(actionType)" | |
| 177 | - type="primary" | |
| 178 | - :title="t('action.save')" | |
| 179 | - :loading="actionLoading" | |
| 180 | - @click="submitForm()" | |
| 181 | - /> | |
| 182 | - <!-- 按钮:关闭 --> | |
| 183 | - <XButton :loading="actionLoading" :title="t('dialog.close')" @click="dialogVisible = false" /> | |
| 184 | - </template> | |
| 185 | - </XModal> | |
| 186 | -</template> | ... | ... |
yudao-ui-admin-vue3/src/views/pay/merchant/index.vue
| 1 | +<template> | |
| 2 | + <ContentWrap> | |
| 3 | + <!-- 列表 --> | |
| 4 | + <vxe-grid ref="xGrid" v-bind="gridOptions" class="xtable-scrollbar"> | |
| 5 | + <template #toolbar_buttons> | |
| 6 | + <!-- 操作:新增 --> | |
| 7 | + <XButton | |
| 8 | + type="primary" | |
| 9 | + preIcon="ep:zoom-in" | |
| 10 | + :title="t('action.add')" | |
| 11 | + v-hasPermi="['pay:merchant:create']" | |
| 12 | + @click="handleCreate()" | |
| 13 | + /> | |
| 14 | + <!-- 操作:导出 --> | |
| 15 | + <XButton | |
| 16 | + type="warning" | |
| 17 | + preIcon="ep:download" | |
| 18 | + :title="t('action.export')" | |
| 19 | + v-hasPermi="['pay:merchant:export']" | |
| 20 | + @click="handleExport()" | |
| 21 | + /> | |
| 22 | + </template> | |
| 23 | + <template #actionbtns_default="{ row }"> | |
| 24 | + <!-- 操作:修改 --> | |
| 25 | + <XTextButton | |
| 26 | + preIcon="ep:edit" | |
| 27 | + :title="t('action.edit')" | |
| 28 | + v-hasPermi="['pay:merchant:update']" | |
| 29 | + @click="handleUpdate(row.id)" | |
| 30 | + /> | |
| 31 | + <!-- 操作:详情 --> | |
| 32 | + <XTextButton | |
| 33 | + preIcon="ep:view" | |
| 34 | + :title="t('action.detail')" | |
| 35 | + v-hasPermi="['pay:merchant:query']" | |
| 36 | + @click="handleDetail(row.id)" | |
| 37 | + /> | |
| 38 | + <!-- 操作:删除 --> | |
| 39 | + <XTextButton | |
| 40 | + preIcon="ep:delete" | |
| 41 | + :title="t('action.del')" | |
| 42 | + v-hasPermi="['pay:merchant:delete']" | |
| 43 | + @click="handleDelete(row.id)" | |
| 44 | + /> | |
| 45 | + </template> | |
| 46 | + </vxe-grid> | |
| 47 | + </ContentWrap> | |
| 48 | + <XModal v-model="dialogVisible" :title="dialogTitle"> | |
| 49 | + <!-- 对话框(添加 / 修改) --> | |
| 50 | + <Form | |
| 51 | + v-if="['create', 'update'].includes(actionType)" | |
| 52 | + :schema="allSchemas.formSchema" | |
| 53 | + :rules="rules" | |
| 54 | + ref="formRef" | |
| 55 | + /> | |
| 56 | + <!-- 对话框(详情) --> | |
| 57 | + <Descriptions | |
| 58 | + v-if="actionType === 'detail'" | |
| 59 | + :schema="allSchemas.detailSchema" | |
| 60 | + :data="detailData" | |
| 61 | + /> | |
| 62 | + <!-- 操作按钮 --> | |
| 63 | + <template #footer> | |
| 64 | + <!-- 按钮:保存 --> | |
| 65 | + <XButton | |
| 66 | + v-if="['create', 'update'].includes(actionType)" | |
| 67 | + type="primary" | |
| 68 | + :title="t('action.save')" | |
| 69 | + :loading="actionLoading" | |
| 70 | + @click="submitForm()" | |
| 71 | + /> | |
| 72 | + <!-- 按钮:关闭 --> | |
| 73 | + <XButton :loading="actionLoading" :title="t('dialog.close')" @click="dialogVisible = false" /> | |
| 74 | + </template> | |
| 75 | + </XModal> | |
| 76 | +</template> | |
| 1 | 77 | <script setup lang="ts" name="Merchant"> |
| 2 | 78 | import { ref, unref } from 'vue' |
| 3 | -import dayjs from 'dayjs' | |
| 4 | -import { ElMessage } from 'element-plus' | |
| 5 | -import { DICT_TYPE } from '@/utils/dict' | |
| 6 | -import { useTable } from '@/hooks/web/useTable' | |
| 7 | 79 | import { useI18n } from '@/hooks/web/useI18n' |
| 80 | +import { useMessage } from '@/hooks/web/useMessage' | |
| 81 | +import { useVxeGrid } from '@/hooks/web/useVxeGrid' | |
| 82 | +import { VxeGridInstance } from 'vxe-table' | |
| 8 | 83 | import { FormExpose } from '@/components/Form' |
| 9 | -import type { MerchantVO } from '@/api/pay/merchant/types' | |
| 10 | 84 | import { rules, allSchemas } from './merchant.data' |
| 11 | 85 | import * as MerchantApi from '@/api/pay/merchant' |
| 12 | -const { t } = useI18n() // 国际化 | |
| 13 | 86 | |
| 14 | -// ========== 列表相关 ========== | |
| 15 | -const { register, tableObject, methods } = useTable<MerchantVO>({ | |
| 87 | +const { t } = useI18n() // 国际化 | |
| 88 | +const message = useMessage() // 消息弹窗 | |
| 89 | +// 列表相关的变量 | |
| 90 | +const xGrid = ref<VxeGridInstance>() // 列表 Grid Ref | |
| 91 | +const { gridOptions, getList, deleteData, exportList } = useVxeGrid<MerchantApi.MerchantVO>({ | |
| 92 | + allSchemas: allSchemas, | |
| 16 | 93 | getListApi: MerchantApi.getMerchantPageApi, |
| 17 | - delListApi: MerchantApi.deleteMerchantApi, | |
| 94 | + deleteApi: MerchantApi.deleteMerchantApi, | |
| 18 | 95 | exportListApi: MerchantApi.exportMerchantApi |
| 19 | 96 | }) |
| 20 | -const { getList, setSearchParams, delList, exportList } = methods | |
| 21 | 97 | |
| 22 | 98 | // ========== CRUD 相关 ========== |
| 23 | 99 | const actionLoading = ref(false) // 遮罩层 |
| ... | ... | @@ -25,6 +101,7 @@ const actionType = ref('') // 操作按钮的类型 |
| 25 | 101 | const dialogVisible = ref(false) // 是否显示弹出层 |
| 26 | 102 | const dialogTitle = ref('edit') // 弹出层标题 |
| 27 | 103 | const formRef = ref<FormExpose>() // 表单 Ref |
| 104 | +const detailData = ref() // 详情 Ref | |
| 28 | 105 | |
| 29 | 106 | // 设置标题 |
| 30 | 107 | const setDialogTile = (type: string) => { |
| ... | ... | @@ -38,14 +115,31 @@ const handleCreate = () => { |
| 38 | 115 | setDialogTile('create') |
| 39 | 116 | } |
| 40 | 117 | |
| 118 | +// 导出操作 | |
| 119 | +const handleExport = async () => { | |
| 120 | + await exportList(xGrid, '商户列表.xls') | |
| 121 | +} | |
| 122 | + | |
| 41 | 123 | // 修改操作 |
| 42 | -const handleUpdate = async (row: MerchantVO) => { | |
| 124 | +const handleUpdate = async (rowId: number) => { | |
| 43 | 125 | setDialogTile('update') |
| 44 | 126 | // 设置数据 |
| 45 | - const res = await MerchantApi.getMerchantApi(row.id) | |
| 127 | + const res = await MerchantApi.getMerchantApi(rowId) | |
| 46 | 128 | unref(formRef)?.setValues(res) |
| 47 | 129 | } |
| 48 | 130 | |
| 131 | +// 详情操作 | |
| 132 | +const handleDetail = async (rowId: number) => { | |
| 133 | + setDialogTile('detail') | |
| 134 | + const res = await MerchantApi.getMerchantApi(rowId) | |
| 135 | + detailData.value = res | |
| 136 | +} | |
| 137 | + | |
| 138 | +// 删除操作 | |
| 139 | +const handleDelete = async (rowId: number) => { | |
| 140 | + await deleteData(xGrid, rowId) | |
| 141 | +} | |
| 142 | + | |
| 49 | 143 | // 提交按钮 |
| 50 | 144 | const submitForm = async () => { |
| 51 | 145 | const elForm = unref(formRef)?.getElFormRef() |
| ... | ... | @@ -55,132 +149,21 @@ const submitForm = async () => { |
| 55 | 149 | actionLoading.value = true |
| 56 | 150 | // 提交请求 |
| 57 | 151 | try { |
| 58 | - const data = unref(formRef)?.formModel as MerchantVO | |
| 152 | + const data = unref(formRef)?.formModel as MerchantApi.MerchantVO | |
| 59 | 153 | if (actionType.value === 'create') { |
| 60 | 154 | await MerchantApi.createMerchantApi(data) |
| 61 | - ElMessage.success(t('common.createSuccess')) | |
| 155 | + message.success(t('common.createSuccess')) | |
| 62 | 156 | } else { |
| 63 | 157 | await MerchantApi.updateMerchantApi(data) |
| 64 | - ElMessage.success(t('common.updateSuccess')) | |
| 158 | + message.success(t('common.updateSuccess')) | |
| 65 | 159 | } |
| 66 | - // 操作成功,重新加载列表 | |
| 67 | 160 | dialogVisible.value = false |
| 68 | - await getList() | |
| 69 | 161 | } finally { |
| 70 | 162 | actionLoading.value = false |
| 163 | + // 刷新列表 | |
| 164 | + await getList(xGrid) | |
| 71 | 165 | } |
| 72 | 166 | } |
| 73 | 167 | }) |
| 74 | 168 | } |
| 75 | - | |
| 76 | -// ========== 详情相关 ========== | |
| 77 | -const detailRef = ref() // 详情 Ref | |
| 78 | - | |
| 79 | -// 详情操作 | |
| 80 | -const handleDetail = async (row: MerchantVO) => { | |
| 81 | - // 设置数据 | |
| 82 | - detailRef.value = row | |
| 83 | - setDialogTile('detail') | |
| 84 | -} | |
| 85 | - | |
| 86 | -// ========== 初始化 ========== | |
| 87 | -getList() | |
| 88 | 169 | </script> |
| 89 | - | |
| 90 | -<template> | |
| 91 | - <!-- 搜索工作区 --> | |
| 92 | - <ContentWrap> | |
| 93 | - <Search :schema="allSchemas.searchSchema" @search="setSearchParams" @reset="setSearchParams" /> | |
| 94 | - </ContentWrap> | |
| 95 | - <ContentWrap> | |
| 96 | - <!-- 操作工具栏 --> | |
| 97 | - <div class="mb-10px"> | |
| 98 | - <el-button type="primary" v-hasPermi="['system:post:create']" @click="handleCreate"> | |
| 99 | - <Icon icon="ep:zoom-in" class="mr-5px" /> {{ t('action.add') }} | |
| 100 | - </el-button> | |
| 101 | - <el-button | |
| 102 | - type="warning" | |
| 103 | - v-hasPermi="['system:post:export']" | |
| 104 | - :loading="tableObject.exportLoading" | |
| 105 | - @click="exportList('商户数据.xls')" | |
| 106 | - > | |
| 107 | - <Icon icon="ep:download" class="mr-5px" /> {{ t('action.export') }} | |
| 108 | - </el-button> | |
| 109 | - </div> | |
| 110 | - <!-- 列表 --> | |
| 111 | - <Table | |
| 112 | - :columns="allSchemas.tableColumns" | |
| 113 | - :selection="false" | |
| 114 | - :data="tableObject.tableList" | |
| 115 | - :loading="tableObject.loading" | |
| 116 | - :pagination="{ | |
| 117 | - total: tableObject.total | |
| 118 | - }" | |
| 119 | - v-model:pageSize="tableObject.pageSize" | |
| 120 | - v-model:currentPage="tableObject.currentPage" | |
| 121 | - @register="register" | |
| 122 | - > | |
| 123 | - <template #status="{ row }"> | |
| 124 | - <DictTag :type="DICT_TYPE.COMMON_STATUS" :value="row.status" /> | |
| 125 | - </template> | |
| 126 | - <template #createTime="{ row }"> | |
| 127 | - <span>{{ dayjs(row.createTime).format('YYYY-MM-DD HH:mm:ss') }}</span> | |
| 128 | - </template> | |
| 129 | - <template #action="{ row }"> | |
| 130 | - <el-button | |
| 131 | - link | |
| 132 | - type="primary" | |
| 133 | - v-hasPermi="['system:post:update']" | |
| 134 | - @click="handleUpdate(row)" | |
| 135 | - > | |
| 136 | - <Icon icon="ep:edit" class="mr-1px" /> {{ t('action.edit') }} | |
| 137 | - </el-button> | |
| 138 | - <el-button | |
| 139 | - link | |
| 140 | - type="primary" | |
| 141 | - v-hasPermi="['system:post:update']" | |
| 142 | - @click="handleDetail(row)" | |
| 143 | - > | |
| 144 | - <Icon icon="ep:view" class="mr-1px" /> {{ t('action.detail') }} | |
| 145 | - </el-button> | |
| 146 | - <el-button | |
| 147 | - link | |
| 148 | - type="primary" | |
| 149 | - v-hasPermi="['system:post:delete']" | |
| 150 | - @click="delList(row.id, false)" | |
| 151 | - > | |
| 152 | - <Icon icon="ep:delete" class="mr-1px" /> {{ t('action.del') }} | |
| 153 | - </el-button> | |
| 154 | - </template> | |
| 155 | - </Table> | |
| 156 | - </ContentWrap> | |
| 157 | - | |
| 158 | - <XModal v-model="dialogVisible" :title="dialogTitle"> | |
| 159 | - <!-- 对话框(添加 / 修改) --> | |
| 160 | - <Form | |
| 161 | - v-if="['create', 'update'].includes(actionType)" | |
| 162 | - :schema="allSchemas.formSchema" | |
| 163 | - :rules="rules" | |
| 164 | - ref="formRef" | |
| 165 | - /> | |
| 166 | - <!-- 对话框(详情) --> | |
| 167 | - <Descriptions | |
| 168 | - v-if="actionType === 'detail'" | |
| 169 | - :schema="allSchemas.detailSchema" | |
| 170 | - :data="detailRef" | |
| 171 | - /> | |
| 172 | - <!-- 操作按钮 --> | |
| 173 | - <template #footer> | |
| 174 | - <!-- 按钮:保存 --> | |
| 175 | - <XButton | |
| 176 | - v-if="['create', 'update'].includes(actionType)" | |
| 177 | - type="primary" | |
| 178 | - :title="t('action.save')" | |
| 179 | - :loading="actionLoading" | |
| 180 | - @click="submitForm()" | |
| 181 | - /> | |
| 182 | - <!-- 按钮:关闭 --> | |
| 183 | - <XButton :loading="actionLoading" :title="t('dialog.close')" @click="dialogVisible = false" /> | |
| 184 | - </template> | |
| 185 | - </XModal> | |
| 186 | -</template> | ... | ... |
yudao-ui-admin-vue3/src/views/pay/merchant/merchant.data.ts
| 1 | 1 | import { reactive } from 'vue' |
| 2 | 2 | import { useI18n } from '@/hooks/web/useI18n' |
| 3 | 3 | import { required } from '@/utils/formRules' |
| 4 | -import { CrudSchema, useCrudSchemas } from '@/hooks/web/useCrudSchemas' | |
| 5 | 4 | import { DICT_TYPE } from '@/utils/dict' |
| 5 | +import { VxeCrudSchema, useVxeCrudSchemas } from '@/hooks/web/useVxeCrudSchemas' | |
| 6 | 6 | const { t } = useI18n() // 国际化 |
| 7 | 7 | |
| 8 | 8 | // 表单校验 |
| ... | ... | @@ -14,91 +14,61 @@ export const rules = reactive({ |
| 14 | 14 | }) |
| 15 | 15 | |
| 16 | 16 | // CrudSchema |
| 17 | -const crudSchemas = reactive<CrudSchema[]>([ | |
| 18 | - { | |
| 19 | - label: t('common.index'), | |
| 20 | - field: 'id', | |
| 21 | - type: 'index', | |
| 22 | - form: { | |
| 23 | - show: false | |
| 17 | +const crudSchemas = reactive<VxeCrudSchema>({ | |
| 18 | + primaryKey: 'id', | |
| 19 | + primaryType: 'seq', | |
| 20 | + primaryTitle: '商户编号', | |
| 21 | + action: true, | |
| 22 | + columns: [ | |
| 23 | + { | |
| 24 | + title: '商户号', | |
| 25 | + field: 'no', | |
| 26 | + isSearch: true | |
| 24 | 27 | }, |
| 25 | - detail: { | |
| 26 | - show: false | |
| 27 | - } | |
| 28 | - }, | |
| 29 | - { | |
| 30 | - label: '商户号', | |
| 31 | - field: 'no', | |
| 32 | - search: { | |
| 33 | - show: true | |
| 34 | - } | |
| 35 | - }, | |
| 36 | - { | |
| 37 | - label: '商户全称', | |
| 38 | - field: 'code', | |
| 39 | - search: { | |
| 40 | - show: true | |
| 41 | - } | |
| 42 | - }, | |
| 43 | - { | |
| 44 | - label: '商户简称', | |
| 45 | - field: 'shortName', | |
| 46 | - search: { | |
| 47 | - show: true | |
| 48 | - } | |
| 49 | - }, | |
| 50 | - { | |
| 51 | - label: t('common.status'), | |
| 52 | - field: 'status', | |
| 53 | - dictType: DICT_TYPE.COMMON_STATUS, | |
| 54 | - dictClass: 'number', | |
| 55 | - search: { | |
| 56 | - show: true | |
| 57 | - } | |
| 58 | - }, | |
| 59 | - { | |
| 60 | - label: t('form.remark'), | |
| 61 | - field: 'remark', | |
| 62 | - form: { | |
| 63 | - component: 'Input', | |
| 64 | - componentProps: { | |
| 65 | - type: 'textarea', | |
| 66 | - rows: 4 | |
| 67 | - }, | |
| 68 | - colProps: { | |
| 69 | - span: 24 | |
| 70 | - } | |
| 28 | + { | |
| 29 | + title: '商户全称', | |
| 30 | + field: 'code', | |
| 31 | + isSearch: true | |
| 71 | 32 | }, |
| 72 | - table: { | |
| 73 | - show: false | |
| 74 | - } | |
| 75 | - }, | |
| 76 | - { | |
| 77 | - label: t('common.createTime'), | |
| 78 | - field: 'createTime', | |
| 79 | - form: { | |
| 80 | - show: false | |
| 33 | + { | |
| 34 | + title: '商户简称', | |
| 35 | + field: 'shortName', | |
| 36 | + isSearch: true | |
| 37 | + }, | |
| 38 | + { | |
| 39 | + title: t('common.status'), | |
| 40 | + field: 'status', | |
| 41 | + dictType: DICT_TYPE.COMMON_STATUS, | |
| 42 | + dictClass: 'number', | |
| 43 | + isSearch: true | |
| 81 | 44 | }, |
| 82 | - search: { | |
| 83 | - show: true, | |
| 84 | - component: 'DatePicker', | |
| 85 | - componentProps: { | |
| 86 | - type: 'datetimerange', | |
| 87 | - valueFormat: 'YYYY-MM-DD HH:mm:ss', | |
| 88 | - defaultTime: [new Date(2000, 1, 1, 0, 0, 0), new Date(2000, 2, 1, 23, 59, 59)] | |
| 45 | + { | |
| 46 | + title: t('form.remark'), | |
| 47 | + field: 'remark', | |
| 48 | + isTable: false, | |
| 49 | + form: { | |
| 50 | + component: 'Input', | |
| 51 | + componentProps: { | |
| 52 | + type: 'textarea', | |
| 53 | + rows: 4 | |
| 54 | + }, | |
| 55 | + colProps: { | |
| 56 | + span: 24 | |
| 57 | + } | |
| 89 | 58 | } |
| 90 | - } | |
| 91 | - }, | |
| 92 | - { | |
| 93 | - label: t('table.action'), | |
| 94 | - field: 'action', | |
| 95 | - width: '240px', | |
| 96 | - form: { | |
| 97 | - show: false | |
| 98 | 59 | }, |
| 99 | - detail: { | |
| 100 | - show: false | |
| 60 | + { | |
| 61 | + title: t('common.createTime'), | |
| 62 | + field: 'createTime', | |
| 63 | + formatter: 'formatDate', | |
| 64 | + isForm: false, | |
| 65 | + search: { | |
| 66 | + show: true, | |
| 67 | + itemRender: { | |
| 68 | + name: 'XDataTimePicker' | |
| 69 | + } | |
| 70 | + } | |
| 101 | 71 | } |
| 102 | - } | |
| 103 | -]) | |
| 104 | -export const { allSchemas } = useCrudSchemas(crudSchemas) | |
| 72 | + ] | |
| 73 | +}) | |
| 74 | +export const { allSchemas } = useVxeCrudSchemas(crudSchemas) | ... | ... |
yudao-ui-admin-vue3/src/views/pay/order/index.vue
| 1 | +<template> | |
| 2 | + <ContentWrap> | |
| 3 | + <!-- 列表 --> | |
| 4 | + <vxe-grid ref="xGrid" v-bind="gridOptions" class="xtable-scrollbar"> | |
| 5 | + <template #toolbar_buttons> | |
| 6 | + <!-- 操作:新增 --> | |
| 7 | + <XButton | |
| 8 | + type="primary" | |
| 9 | + preIcon="ep:zoom-in" | |
| 10 | + :title="t('action.add')" | |
| 11 | + v-hasPermi="['pay:order:create']" | |
| 12 | + @click="handleCreate()" | |
| 13 | + /> | |
| 14 | + <!-- 操作:导出 --> | |
| 15 | + <XButton | |
| 16 | + type="warning" | |
| 17 | + preIcon="ep:download" | |
| 18 | + :title="t('action.export')" | |
| 19 | + v-hasPermi="['pay:order:export']" | |
| 20 | + @click="handleExport()" | |
| 21 | + /> | |
| 22 | + </template> | |
| 23 | + <template #actionbtns_default="{ row }"> | |
| 24 | + <!-- 操作:详情 --> | |
| 25 | + <XTextButton | |
| 26 | + preIcon="ep:view" | |
| 27 | + :title="t('action.detail')" | |
| 28 | + v-hasPermi="['pay:order:query']" | |
| 29 | + @click="handleDetail(row.id)" | |
| 30 | + /> | |
| 31 | + </template> | |
| 32 | + </vxe-grid> | |
| 33 | + </ContentWrap> | |
| 34 | + <XModal v-model="dialogVisible" :title="dialogTitle"> | |
| 35 | + <!-- 对话框(详情) --> | |
| 36 | + <Descriptions :schema="allSchemas.detailSchema" :data="detailData" /> | |
| 37 | + <!-- 操作按钮 --> | |
| 38 | + <template #footer> | |
| 39 | + <!-- 按钮:关闭 --> | |
| 40 | + <XButton :loading="actionLoading" :title="t('dialog.close')" @click="dialogVisible = false" /> | |
| 41 | + </template> | |
| 42 | + </XModal> | |
| 43 | +</template> | |
| 1 | 44 | <script setup lang="ts" name="Order"> |
| 2 | -import { ref, unref } from 'vue' | |
| 3 | -import { ElMessage } from 'element-plus' | |
| 4 | -import { DICT_TYPE } from '@/utils/dict' | |
| 5 | -import { useTable } from '@/hooks/web/useTable' | |
| 45 | +import { ref } from 'vue' | |
| 6 | 46 | import { useI18n } from '@/hooks/web/useI18n' |
| 7 | -import { FormExpose } from '@/components/Form' | |
| 8 | -import type { OrderVO } from '@/api/pay/order/types' | |
| 9 | -import { rules, allSchemas } from './order.data' | |
| 47 | +import { useVxeGrid } from '@/hooks/web/useVxeGrid' | |
| 48 | +import { VxeGridInstance } from 'vxe-table' | |
| 49 | +import { allSchemas } from './order.data' | |
| 10 | 50 | import * as OrderApi from '@/api/pay/order' |
| 51 | + | |
| 11 | 52 | const { t } = useI18n() // 国际化 |
| 12 | -// ========== 列表相关 ========== | |
| 13 | -const { register, tableObject, methods } = useTable<OrderVO>({ | |
| 53 | +// 列表相关的变量 | |
| 54 | +const xGrid = ref<VxeGridInstance>() // 列表 Grid Ref | |
| 55 | +const { gridOptions, exportList } = useVxeGrid<OrderApi.OrderVO>({ | |
| 56 | + allSchemas: allSchemas, | |
| 14 | 57 | getListApi: OrderApi.getOrderPageApi, |
| 15 | - delListApi: OrderApi.deleteOrderApi, | |
| 16 | 58 | exportListApi: OrderApi.exportOrderApi |
| 17 | 59 | }) |
| 18 | -const { getList, setSearchParams, delList, exportList } = methods | |
| 19 | 60 | // ========== CRUD 相关 ========== |
| 20 | 61 | const actionLoading = ref(false) // 遮罩层 |
| 21 | 62 | const actionType = ref('') // 操作按钮的类型 |
| 22 | 63 | const dialogVisible = ref(false) // 是否显示弹出层 |
| 23 | 64 | const dialogTitle = ref('edit') // 弹出层标题 |
| 24 | -const formRef = ref<FormExpose>() // 表单 Ref | |
| 25 | - | |
| 65 | +const detailData = ref() // 详情 Ref | |
| 26 | 66 | // 设置标题 |
| 27 | 67 | const setDialogTile = (type: string) => { |
| 28 | 68 | dialogTitle.value = t('action.' + type) |
| ... | ... | @@ -34,137 +74,15 @@ const setDialogTile = (type: string) => { |
| 34 | 74 | const handleCreate = () => { |
| 35 | 75 | setDialogTile('create') |
| 36 | 76 | } |
| 37 | - | |
| 38 | -// 修改操作 | |
| 39 | -const handleUpdate = async (row: OrderVO) => { | |
| 40 | - setDialogTile('update') | |
| 41 | - // 设置数据 | |
| 42 | - const res = await OrderApi.getOrderApi(row.id) | |
| 43 | - unref(formRef)?.setValues(res) | |
| 44 | -} | |
| 45 | - | |
| 46 | -// 提交按钮 | |
| 47 | -const submitForm = async () => { | |
| 48 | - const elForm = unref(formRef)?.getElFormRef() | |
| 49 | - if (!elForm) return | |
| 50 | - elForm.validate(async (valid) => { | |
| 51 | - if (valid) { | |
| 52 | - actionLoading.value = true | |
| 53 | - // 提交请求 | |
| 54 | - try { | |
| 55 | - const data = unref(formRef)?.formModel as OrderVO | |
| 56 | - if (actionType.value === 'create') { | |
| 57 | - await OrderApi.createOrderApi(data) | |
| 58 | - ElMessage.success(t('common.createSuccess')) | |
| 59 | - } else { | |
| 60 | - await OrderApi.updateOrderApi(data) | |
| 61 | - ElMessage.success(t('common.updateSuccess')) | |
| 62 | - } | |
| 63 | - // 操作成功,重新加载列表 | |
| 64 | - dialogVisible.value = false | |
| 65 | - await getList() | |
| 66 | - } finally { | |
| 67 | - actionLoading.value = false | |
| 68 | - } | |
| 69 | - } | |
| 70 | - }) | |
| 77 | +// 导出操作 | |
| 78 | +const handleExport = async () => { | |
| 79 | + await exportList(xGrid, '订单数据.xls') | |
| 71 | 80 | } |
| 72 | 81 | |
| 73 | -// ========== 详情相关 ========== | |
| 74 | -const detailRef = ref() // 详情 Ref | |
| 75 | - | |
| 76 | 82 | // 详情操作 |
| 77 | -const handleDetail = async (row: OrderVO) => { | |
| 83 | +const handleDetail = async (rowId: number) => { | |
| 78 | 84 | setDialogTile('detail') |
| 79 | - // 设置数据 | |
| 80 | - const res = await OrderApi.getOrderApi(row.id as number) | |
| 81 | - detailRef.value = res | |
| 85 | + const res = await OrderApi.getOrderApi(rowId) | |
| 86 | + detailData.value = res | |
| 82 | 87 | } |
| 83 | - | |
| 84 | -// ========== 初始化 ========== | |
| 85 | -getList() | |
| 86 | 88 | </script> |
| 87 | -<template> | |
| 88 | - <!-- 搜索工作区 --> | |
| 89 | - <ContentWrap> | |
| 90 | - <Search :schema="allSchemas.searchSchema" @search="setSearchParams" @reset="setSearchParams" /> | |
| 91 | - </ContentWrap> | |
| 92 | - <ContentWrap> | |
| 93 | - <!-- 操作工具栏 --> | |
| 94 | - <div class="mb-10px"> | |
| 95 | - <el-button type="primary" v-hasPermi="['pay:order:create']" @click="handleCreate"> | |
| 96 | - <Icon icon="ep:zoom-in" class="mr-5px" /> {{ t('action.add') }} | |
| 97 | - </el-button> | |
| 98 | - <el-button | |
| 99 | - type="warning" | |
| 100 | - v-hasPermi="['pay:order:export']" | |
| 101 | - :loading="tableObject.exportLoading" | |
| 102 | - @click="exportList('订单数据.xls')" | |
| 103 | - > | |
| 104 | - <Icon icon="ep:download" class="mr-5px" /> {{ t('action.export') }} | |
| 105 | - </el-button> | |
| 106 | - </div> | |
| 107 | - <!-- 列表 --> | |
| 108 | - <Table | |
| 109 | - :columns="allSchemas.tableColumns" | |
| 110 | - :selection="false" | |
| 111 | - :data="tableObject.tableList" | |
| 112 | - :loading="tableObject.loading" | |
| 113 | - :pagination="{ | |
| 114 | - total: tableObject.total | |
| 115 | - }" | |
| 116 | - v-model:pageSize="tableObject.pageSize" | |
| 117 | - v-model:currentPage="tableObject.currentPage" | |
| 118 | - @register="register" | |
| 119 | - > | |
| 120 | - <template #status="{ row }"> | |
| 121 | - <DictTag :type="DICT_TYPE.COMMON_STATUS" :value="row.status" /> | |
| 122 | - </template> | |
| 123 | - <template #action="{ row }"> | |
| 124 | - <el-button link type="primary" v-hasPermi="['pay:order:update']" @click="handleUpdate(row)"> | |
| 125 | - <Icon icon="ep:edit" class="mr-1px" /> {{ t('action.edit') }} | |
| 126 | - </el-button> | |
| 127 | - <el-button link type="primary" v-hasPermi="['pay:order:update']" @click="handleDetail(row)"> | |
| 128 | - <Icon icon="ep:view" class="mr-1px" /> {{ t('action.detail') }} | |
| 129 | - </el-button> | |
| 130 | - <el-button | |
| 131 | - link | |
| 132 | - type="primary" | |
| 133 | - v-hasPermi="['pay:order:delete']" | |
| 134 | - @click="delList(row.id, false)" | |
| 135 | - > | |
| 136 | - <Icon icon="ep:delete" class="mr-1px" /> {{ t('action.del') }} | |
| 137 | - </el-button> | |
| 138 | - </template> | |
| 139 | - </Table> | |
| 140 | - </ContentWrap> | |
| 141 | - | |
| 142 | - <XModal v-model="dialogVisible" :title="dialogTitle"> | |
| 143 | - <!-- 对话框(添加 / 修改) --> | |
| 144 | - <Form | |
| 145 | - v-if="['create', 'update'].includes(actionType)" | |
| 146 | - :schema="allSchemas.formSchema" | |
| 147 | - :rules="rules" | |
| 148 | - ref="formRef" | |
| 149 | - /> | |
| 150 | - <!-- 对话框(详情) --> | |
| 151 | - <Descriptions | |
| 152 | - v-if="actionType === 'detail'" | |
| 153 | - :schema="allSchemas.detailSchema" | |
| 154 | - :data="detailRef" | |
| 155 | - /> | |
| 156 | - <!-- 操作按钮 --> | |
| 157 | - <template #footer> | |
| 158 | - <!-- 按钮:保存 --> | |
| 159 | - <XButton | |
| 160 | - v-if="['create', 'update'].includes(actionType)" | |
| 161 | - type="primary" | |
| 162 | - :title="t('action.save')" | |
| 163 | - :loading="actionLoading" | |
| 164 | - @click="submitForm()" | |
| 165 | - /> | |
| 166 | - <!-- 按钮:关闭 --> | |
| 167 | - <XButton :loading="actionLoading" :title="t('dialog.close')" @click="dialogVisible = false" /> | |
| 168 | - </template> | |
| 169 | - </XModal> | |
| 170 | -</template> | ... | ... |
yudao-ui-admin-vue3/src/views/pay/order/order.data.ts
| 1 | 1 | import { reactive } from 'vue' |
| 2 | 2 | import { useI18n } from '@/hooks/web/useI18n' |
| 3 | 3 | import { required } from '@/utils/formRules' |
| 4 | -import { CrudSchema, useCrudSchemas } from '@/hooks/web/useCrudSchemas' | |
| 5 | 4 | import { DICT_TYPE } from '@/utils/dict' |
| 5 | +import { VxeCrudSchema, useVxeCrudSchemas } from '@/hooks/web/useVxeCrudSchemas' | |
| 6 | 6 | const { t } = useI18n() // 国际化 |
| 7 | 7 | |
| 8 | 8 | // 表单校验 |
| ... | ... | @@ -23,166 +23,134 @@ export const rules = reactive({ |
| 23 | 23 | refundAmount: [required] |
| 24 | 24 | }) |
| 25 | 25 | // CrudSchema |
| 26 | -const crudSchemas = reactive<CrudSchema[]>([ | |
| 27 | - { | |
| 28 | - label: t('common.index'), | |
| 29 | - field: 'id', | |
| 30 | - type: 'index', | |
| 31 | - form: { | |
| 32 | - show: false | |
| 33 | - }, | |
| 34 | - detail: { | |
| 35 | - show: false | |
| 36 | - } | |
| 37 | - }, | |
| 38 | - { | |
| 39 | - label: '商户编号', | |
| 40 | - field: 'merchantId', | |
| 41 | - search: { | |
| 42 | - show: true | |
| 43 | - } | |
| 44 | - }, | |
| 45 | - { | |
| 46 | - label: '应用编号', | |
| 47 | - field: 'appId', | |
| 48 | - search: { | |
| 49 | - show: true | |
| 50 | - } | |
| 51 | - }, | |
| 52 | - { | |
| 53 | - label: '渠道编号', | |
| 54 | - field: 'channelId' | |
| 55 | - }, | |
| 56 | - { | |
| 57 | - label: '渠道编码', | |
| 58 | - field: 'channelCode', | |
| 59 | - search: { | |
| 60 | - show: true | |
| 61 | - } | |
| 62 | - }, | |
| 63 | - { | |
| 64 | - label: '渠道订单号', | |
| 65 | - field: 'merchantOrderId', | |
| 66 | - search: { | |
| 67 | - show: true | |
| 68 | - } | |
| 69 | - }, | |
| 70 | - { | |
| 71 | - label: '商品标题', | |
| 72 | - field: 'subject' | |
| 73 | - }, | |
| 74 | - { | |
| 75 | - label: '商品描述', | |
| 76 | - field: 'body' | |
| 77 | - }, | |
| 78 | - { | |
| 79 | - label: '异步通知地址', | |
| 80 | - field: 'notifyUrl' | |
| 81 | - }, | |
| 82 | - { | |
| 83 | - label: '回调商户状态', | |
| 84 | - field: 'notifyStatus', | |
| 85 | - dictType: DICT_TYPE.PAY_ORDER_NOTIFY_STATUS, | |
| 86 | - dictClass: 'number' | |
| 87 | - }, | |
| 88 | - { | |
| 89 | - label: '支付金额', | |
| 90 | - field: 'amount', | |
| 91 | - search: { | |
| 92 | - show: true | |
| 93 | - } | |
| 94 | - }, | |
| 95 | - { | |
| 96 | - label: '渠道手续费', | |
| 97 | - field: 'channelFeeRate', | |
| 98 | - search: { | |
| 99 | - show: true | |
| 100 | - } | |
| 101 | - }, | |
| 102 | - { | |
| 103 | - label: '渠道手续金额', | |
| 104 | - field: 'channelFeeAmount', | |
| 105 | - search: { | |
| 106 | - show: true | |
| 107 | - } | |
| 108 | - }, | |
| 109 | - { | |
| 110 | - label: '支付状态', | |
| 111 | - field: 'status', | |
| 112 | - dictType: DICT_TYPE.PAY_ORDER_STATUS, | |
| 113 | - dictClass: 'number', | |
| 114 | - search: { | |
| 115 | - show: true | |
| 116 | - } | |
| 117 | - }, | |
| 118 | - { | |
| 119 | - label: '用户 IP', | |
| 120 | - field: 'userIp' | |
| 121 | - }, | |
| 122 | - { | |
| 123 | - label: '订单失效时间', | |
| 124 | - field: 'expireTime' | |
| 125 | - }, | |
| 126 | - { | |
| 127 | - label: '订单支付成功时间', | |
| 128 | - field: 'successTime' | |
| 129 | - }, | |
| 130 | - { | |
| 131 | - label: '订单支付通知时间', | |
| 132 | - field: 'notifyTime' | |
| 133 | - }, | |
| 134 | - { | |
| 135 | - label: '支付成功的订单拓展单编号', | |
| 136 | - field: 'successExtensionId' | |
| 137 | - }, | |
| 138 | - { | |
| 139 | - label: '退款状态', | |
| 140 | - field: 'refundStatus', | |
| 141 | - dictType: DICT_TYPE.PAY_ORDER_REFUND_STATUS, | |
| 142 | - dictClass: 'number', | |
| 143 | - search: { | |
| 144 | - show: true | |
| 145 | - } | |
| 146 | - }, | |
| 147 | - { | |
| 148 | - label: '退款次数', | |
| 149 | - field: 'refundTimes' | |
| 150 | - }, | |
| 151 | - { | |
| 152 | - label: '退款总金额', | |
| 153 | - field: 'refundAmount' | |
| 154 | - }, | |
| 155 | - { | |
| 156 | - label: '渠道用户编号', | |
| 157 | - field: 'channelUserId' | |
| 158 | - }, | |
| 159 | - { | |
| 160 | - label: '渠道订单号', | |
| 161 | - field: 'channelOrderNo' | |
| 162 | - }, | |
| 163 | - { | |
| 164 | - label: t('common.createTime'), | |
| 165 | - field: 'createTime', | |
| 166 | - form: { | |
| 167 | - show: false | |
| 168 | - }, | |
| 169 | - search: { | |
| 170 | - show: true, | |
| 171 | - component: 'DatePicker', | |
| 172 | - componentProps: { | |
| 173 | - type: 'datetimerange', | |
| 174 | - valueFormat: 'YYYY-MM-DD HH:mm:ss', | |
| 175 | - defaultTime: [new Date(2000, 1, 1, 0, 0, 0), new Date(2000, 2, 1, 23, 59, 59)] | |
| 26 | +const crudSchemas = reactive<VxeCrudSchema>({ | |
| 27 | + primaryKey: 'id', | |
| 28 | + primaryType: 'seq', | |
| 29 | + primaryTitle: '岗位编号', | |
| 30 | + action: true, | |
| 31 | + columns: [ | |
| 32 | + { | |
| 33 | + title: '商户编号', | |
| 34 | + field: 'merchantId', | |
| 35 | + isSearch: true | |
| 36 | + }, | |
| 37 | + { | |
| 38 | + title: '应用编号', | |
| 39 | + field: 'appId', | |
| 40 | + isSearch: true | |
| 41 | + }, | |
| 42 | + { | |
| 43 | + title: '渠道编号', | |
| 44 | + field: 'channelId' | |
| 45 | + }, | |
| 46 | + { | |
| 47 | + title: '渠道编码', | |
| 48 | + field: 'channelCode', | |
| 49 | + isSearch: true | |
| 50 | + }, | |
| 51 | + { | |
| 52 | + title: '渠道订单号', | |
| 53 | + field: 'merchantOrderId', | |
| 54 | + isSearch: true | |
| 55 | + }, | |
| 56 | + { | |
| 57 | + title: '商品标题', | |
| 58 | + field: 'subject' | |
| 59 | + }, | |
| 60 | + { | |
| 61 | + title: '商品描述', | |
| 62 | + field: 'body' | |
| 63 | + }, | |
| 64 | + { | |
| 65 | + title: '异步通知地址', | |
| 66 | + field: 'notifyUrl' | |
| 67 | + }, | |
| 68 | + { | |
| 69 | + title: '回调状态', | |
| 70 | + field: 'notifyStatus', | |
| 71 | + dictType: DICT_TYPE.PAY_ORDER_NOTIFY_STATUS, | |
| 72 | + dictClass: 'number' | |
| 73 | + }, | |
| 74 | + { | |
| 75 | + title: '支付金额', | |
| 76 | + field: 'amount', | |
| 77 | + isSearch: true | |
| 78 | + }, | |
| 79 | + { | |
| 80 | + title: '渠道手续费', | |
| 81 | + field: 'channelFeeRate', | |
| 82 | + isSearch: true | |
| 83 | + }, | |
| 84 | + { | |
| 85 | + title: '渠道手续金额', | |
| 86 | + field: 'channelFeeAmount', | |
| 87 | + isSearch: true | |
| 88 | + }, | |
| 89 | + { | |
| 90 | + title: '支付状态', | |
| 91 | + field: 'status', | |
| 92 | + dictType: DICT_TYPE.PAY_ORDER_STATUS, | |
| 93 | + dictClass: 'number', | |
| 94 | + isSearch: true | |
| 95 | + }, | |
| 96 | + { | |
| 97 | + title: '用户 IP', | |
| 98 | + field: 'userIp' | |
| 99 | + }, | |
| 100 | + { | |
| 101 | + title: '订单失效时间', | |
| 102 | + field: 'expireTime', | |
| 103 | + formatter: 'formatDate' | |
| 104 | + }, | |
| 105 | + { | |
| 106 | + title: '支付时间', | |
| 107 | + field: 'successTime', | |
| 108 | + formatter: 'formatDate' | |
| 109 | + }, | |
| 110 | + { | |
| 111 | + title: '支付通知时间', | |
| 112 | + field: 'notifyTime', | |
| 113 | + formatter: 'formatDate' | |
| 114 | + }, | |
| 115 | + { | |
| 116 | + title: '拓展编号', | |
| 117 | + field: 'successExtensionId' | |
| 118 | + }, | |
| 119 | + { | |
| 120 | + title: '退款状态', | |
| 121 | + field: 'refundStatus', | |
| 122 | + dictType: DICT_TYPE.PAY_ORDER_REFUND_STATUS, | |
| 123 | + dictClass: 'number', | |
| 124 | + isSearch: true | |
| 125 | + }, | |
| 126 | + { | |
| 127 | + title: '退款次数', | |
| 128 | + field: 'refundTimes' | |
| 129 | + }, | |
| 130 | + { | |
| 131 | + title: '退款总金额', | |
| 132 | + field: 'refundAmount' | |
| 133 | + }, | |
| 134 | + { | |
| 135 | + title: '渠道用户编号', | |
| 136 | + field: 'channelUserId' | |
| 137 | + }, | |
| 138 | + { | |
| 139 | + title: '渠道订单号', | |
| 140 | + field: 'channelOrderNo' | |
| 141 | + }, | |
| 142 | + { | |
| 143 | + title: t('common.createTime'), | |
| 144 | + field: 'createTime', | |
| 145 | + formatter: 'formatDate', | |
| 146 | + isForm: false, | |
| 147 | + search: { | |
| 148 | + show: true, | |
| 149 | + itemRender: { | |
| 150 | + name: 'XDataTimePicker' | |
| 151 | + } | |
| 176 | 152 | } |
| 177 | 153 | } |
| 178 | - }, | |
| 179 | - { | |
| 180 | - label: t('table.action'), | |
| 181 | - field: 'action', | |
| 182 | - width: '270px', | |
| 183 | - form: { | |
| 184 | - show: false | |
| 185 | - } | |
| 186 | - } | |
| 187 | -]) | |
| 188 | -export const { allSchemas } = useCrudSchemas(crudSchemas) | |
| 154 | + ] | |
| 155 | +}) | |
| 156 | +export const { allSchemas } = useVxeCrudSchemas(crudSchemas) | ... | ... |
yudao-ui-admin-vue3/src/views/pay/refund/index.vue
| 1 | +<template> | |
| 2 | + <ContentWrap> | |
| 3 | + <!-- 列表 --> | |
| 4 | + <vxe-grid ref="xGrid" v-bind="gridOptions" class="xtable-scrollbar"> | |
| 5 | + <template #toolbar_buttons> | |
| 6 | + <!-- 操作:导出 --> | |
| 7 | + <XButton | |
| 8 | + type="warning" | |
| 9 | + preIcon="ep:download" | |
| 10 | + :title="t('action.export')" | |
| 11 | + v-hasPermi="['pay:refund:export']" | |
| 12 | + @click="handleExport()" | |
| 13 | + /> | |
| 14 | + </template> | |
| 15 | + <template #actionbtns_default="{ row }"> | |
| 16 | + <!-- 操作:详情 --> | |
| 17 | + <XTextButton | |
| 18 | + preIcon="ep:view" | |
| 19 | + :title="t('action.detail')" | |
| 20 | + v-hasPermi="['pay:refund:query']" | |
| 21 | + @click="handleDetail(row.id)" | |
| 22 | + /> | |
| 23 | + </template> | |
| 24 | + </vxe-grid> | |
| 25 | + </ContentWrap> | |
| 26 | + | |
| 27 | + <XModal v-model="dialogVisible" :title="t('action.detail')"> | |
| 28 | + <!-- 对话框(详情) --> | |
| 29 | + <Descriptions :schema="allSchemas.detailSchema" :data="detailData" /> | |
| 30 | + <!-- 操作按钮 --> | |
| 31 | + <template #footer> | |
| 32 | + <el-button @click="dialogVisible = false">{{ t('dialog.close') }}</el-button> | |
| 33 | + </template> | |
| 34 | + </XModal> | |
| 35 | +</template> | |
| 1 | 36 | <script setup lang="ts" name="Refund"> |
| 2 | 37 | import { ref } from 'vue' |
| 3 | -import dayjs from 'dayjs' | |
| 4 | -import { DICT_TYPE } from '@/utils/dict' | |
| 5 | -import { useTable } from '@/hooks/web/useTable' | |
| 6 | 38 | import { useI18n } from '@/hooks/web/useI18n' |
| 7 | -import type { RefundVO } from '@/api/pay/refund/types' | |
| 39 | +import { useVxeGrid } from '@/hooks/web/useVxeGrid' | |
| 40 | +import { VxeGridInstance } from 'vxe-table' | |
| 8 | 41 | import { allSchemas } from './refund.data' |
| 9 | 42 | import * as RefundApi from '@/api/pay/refund' |
| 43 | + | |
| 10 | 44 | const { t } = useI18n() // 国际化 |
| 11 | 45 | |
| 12 | -// ========== 列表相关 ========== | |
| 13 | -const { register, tableObject, methods } = useTable<RefundVO>({ | |
| 46 | +// 列表相关的变量 | |
| 47 | +const xGrid = ref<VxeGridInstance>() // 列表 Grid Ref | |
| 48 | +const { gridOptions, exportList } = useVxeGrid<RefundApi.RefundVO>({ | |
| 49 | + allSchemas: allSchemas, | |
| 14 | 50 | getListApi: RefundApi.getRefundPageApi, |
| 15 | - delListApi: RefundApi.deleteRefundApi, | |
| 16 | 51 | exportListApi: RefundApi.exportRefundApi |
| 17 | 52 | }) |
| 18 | -const { getList, setSearchParams, delList, exportList } = methods | |
| 53 | + | |
| 54 | +// 导出操作 | |
| 55 | +const handleExport = async () => { | |
| 56 | + await exportList(xGrid, '退款订单.xls') | |
| 57 | +} | |
| 19 | 58 | |
| 20 | 59 | // ========== CRUD 相关 ========== |
| 21 | 60 | const dialogVisible = ref(false) // 是否显示弹出层 |
| 22 | -const dialogTitle = ref('edit') // 弹出层标题 | |
| 23 | - | |
| 24 | -// ========== 详情相关 ========== | |
| 25 | -const detailRef = ref() // 详情 Ref | |
| 61 | +const detailData = ref() // 详情 Ref | |
| 26 | 62 | |
| 27 | 63 | // 详情操作 |
| 28 | -const handleDetail = async (row: RefundVO) => { | |
| 64 | +const handleDetail = async (rowId: number) => { | |
| 29 | 65 | // 设置数据 |
| 30 | - detailRef.value = RefundApi.getRefundApi(row.id) | |
| 31 | - dialogTitle.value = t('action.detail') | |
| 66 | + detailData.value = RefundApi.getRefundApi(rowId) | |
| 32 | 67 | dialogVisible.value = true |
| 33 | 68 | } |
| 34 | - | |
| 35 | -// ========== 初始化 ========== | |
| 36 | -getList() | |
| 37 | 69 | </script> |
| 38 | - | |
| 39 | -<template> | |
| 40 | - <!-- 搜索工作区 --> | |
| 41 | - <ContentWrap> | |
| 42 | - <Search :schema="allSchemas.searchSchema" @search="setSearchParams" @reset="setSearchParams" /> | |
| 43 | - </ContentWrap> | |
| 44 | - <ContentWrap> | |
| 45 | - <!-- 操作工具栏 --> | |
| 46 | - <div class="mb-10px"> | |
| 47 | - <el-button | |
| 48 | - type="warning" | |
| 49 | - v-hasPermi="['system:post:export']" | |
| 50 | - :loading="tableObject.exportLoading" | |
| 51 | - @click="exportList('退款订单.xls')" | |
| 52 | - > | |
| 53 | - <Icon icon="ep:download" class="mr-5px" /> {{ t('action.export') }} | |
| 54 | - </el-button> | |
| 55 | - </div> | |
| 56 | - <!-- 列表 --> | |
| 57 | - <Table | |
| 58 | - :columns="allSchemas.tableColumns" | |
| 59 | - :selection="false" | |
| 60 | - :data="tableObject.tableList" | |
| 61 | - :loading="tableObject.loading" | |
| 62 | - :pagination="{ | |
| 63 | - total: tableObject.total | |
| 64 | - }" | |
| 65 | - v-model:pageSize="tableObject.pageSize" | |
| 66 | - v-model:currentPage="tableObject.currentPage" | |
| 67 | - @register="register" | |
| 68 | - > | |
| 69 | - <template #status="{ row }"> | |
| 70 | - <DictTag :type="DICT_TYPE.COMMON_STATUS" :value="row.status" /> | |
| 71 | - </template> | |
| 72 | - <template #createTime="{ row }"> | |
| 73 | - <span>{{ dayjs(row.createTime).format('YYYY-MM-DD HH:mm:ss') }}</span> | |
| 74 | - </template> | |
| 75 | - <template #action="{ row }"> | |
| 76 | - <el-button | |
| 77 | - link | |
| 78 | - type="primary" | |
| 79 | - v-hasPermi="['system:post:update']" | |
| 80 | - @click="handleDetail(row)" | |
| 81 | - > | |
| 82 | - <Icon icon="ep:view" class="mr-1px" /> {{ t('action.detail') }} | |
| 83 | - </el-button> | |
| 84 | - <el-button | |
| 85 | - link | |
| 86 | - type="primary" | |
| 87 | - v-hasPermi="['system:post:delete']" | |
| 88 | - @click="delList(row.id, false)" | |
| 89 | - > | |
| 90 | - <Icon icon="ep:delete" class="mr-1px" /> {{ t('action.del') }} | |
| 91 | - </el-button> | |
| 92 | - </template> | |
| 93 | - </Table> | |
| 94 | - </ContentWrap> | |
| 95 | - | |
| 96 | - <XModal v-model="dialogVisible" :title="dialogTitle"> | |
| 97 | - <!-- 对话框(详情) --> | |
| 98 | - <Descriptions :schema="allSchemas.detailSchema" :data="detailRef" /> | |
| 99 | - <!-- 操作按钮 --> | |
| 100 | - <template #footer> | |
| 101 | - <el-button @click="dialogVisible = false">{{ t('dialog.close') }}</el-button> | |
| 102 | - </template> | |
| 103 | - </XModal> | |
| 104 | -</template> | ... | ... |
yudao-ui-admin-vue3/src/views/pay/refund/refund.data.ts
| 1 | 1 | import { reactive } from 'vue' |
| 2 | 2 | import { useI18n } from '@/hooks/web/useI18n' |
| 3 | -import { CrudSchema, useCrudSchemas } from '@/hooks/web/useCrudSchemas' | |
| 4 | 3 | import { DICT_TYPE } from '@/utils/dict' |
| 4 | +import { VxeCrudSchema, useVxeCrudSchemas } from '@/hooks/web/useVxeCrudSchemas' | |
| 5 | 5 | const { t } = useI18n() // 国际化 |
| 6 | 6 | |
| 7 | 7 | // CrudSchema |
| 8 | -const crudSchemas = reactive<CrudSchema[]>([ | |
| 9 | - { | |
| 10 | - label: t('common.index'), | |
| 11 | - field: 'id', | |
| 12 | - type: 'index', | |
| 13 | - form: { | |
| 14 | - show: false | |
| 15 | - }, | |
| 16 | - detail: { | |
| 17 | - show: false | |
| 18 | - } | |
| 19 | - }, | |
| 20 | - { | |
| 21 | - label: '应用编号', | |
| 22 | - field: 'appId', | |
| 23 | - search: { | |
| 24 | - show: true | |
| 25 | - } | |
| 26 | - }, | |
| 27 | - { | |
| 28 | - label: '商户名称', | |
| 29 | - field: 'merchantName' | |
| 30 | - }, | |
| 31 | - { | |
| 32 | - label: '应用名称', | |
| 33 | - field: 'appName' | |
| 34 | - }, | |
| 35 | - { | |
| 36 | - label: '商品名称', | |
| 37 | - field: 'subject' | |
| 38 | - }, | |
| 39 | - { | |
| 40 | - label: '商户退款单号', | |
| 41 | - field: 'merchantRefundNo' | |
| 42 | - }, | |
| 43 | - { | |
| 44 | - label: '商户订单号', | |
| 45 | - field: 'merchantOrderId' | |
| 46 | - }, | |
| 47 | - { | |
| 48 | - label: '交易订单号', | |
| 49 | - field: 'tradeNo' | |
| 50 | - }, | |
| 51 | - { | |
| 52 | - label: '支付金额', | |
| 53 | - field: 'payAmount' | |
| 54 | - }, | |
| 55 | - { | |
| 56 | - label: '退款金额', | |
| 57 | - field: 'refundAmount' | |
| 58 | - }, | |
| 59 | - { | |
| 60 | - label: '渠道编码', | |
| 61 | - field: 'channelCode', | |
| 62 | - search: { | |
| 63 | - show: true | |
| 64 | - } | |
| 65 | - }, | |
| 66 | - { | |
| 67 | - label: '退款类型', | |
| 68 | - field: 'type', | |
| 69 | - dictType: DICT_TYPE.PAY_REFUND_ORDER_TYPE, | |
| 70 | - dictClass: 'number', | |
| 71 | - search: { | |
| 72 | - show: true | |
| 73 | - } | |
| 74 | - }, | |
| 75 | - { | |
| 76 | - label: t('common.status'), | |
| 77 | - field: 'status', | |
| 78 | - dictType: DICT_TYPE.PAY_REFUND_ORDER_STATUS, | |
| 79 | - dictClass: 'number', | |
| 80 | - search: { | |
| 81 | - show: true | |
| 82 | - } | |
| 83 | - }, | |
| 84 | - { | |
| 85 | - label: t('common.createTime'), | |
| 86 | - field: 'createTime', | |
| 87 | - form: { | |
| 88 | - show: false | |
| 89 | - }, | |
| 90 | - search: { | |
| 91 | - show: true, | |
| 92 | - component: 'DatePicker', | |
| 93 | - componentProps: { | |
| 94 | - type: 'datetimerange', | |
| 95 | - valueFormat: 'YYYY-MM-DD HH:mm:ss', | |
| 96 | - defaultTime: [new Date(2000, 1, 1, 0, 0, 0), new Date(2000, 2, 1, 23, 59, 59)] | |
| 8 | +const crudSchemas = reactive<VxeCrudSchema>({ | |
| 9 | + primaryKey: 'id', | |
| 10 | + primaryType: 'seq', | |
| 11 | + primaryTitle: '序号', | |
| 12 | + action: true, | |
| 13 | + columns: [ | |
| 14 | + { | |
| 15 | + title: '商户编号', | |
| 16 | + field: 'merchantId', | |
| 17 | + isSearch: true | |
| 18 | + }, | |
| 19 | + { | |
| 20 | + title: '应用编号', | |
| 21 | + field: 'appId', | |
| 22 | + isSearch: true | |
| 23 | + }, | |
| 24 | + { | |
| 25 | + title: '渠道编号', | |
| 26 | + field: 'channelId', | |
| 27 | + isSearch: true | |
| 28 | + }, | |
| 29 | + { | |
| 30 | + title: '渠道编码', | |
| 31 | + field: 'channelCode', | |
| 32 | + dictType: DICT_TYPE.PAY_CHANNEL_CODE_TYPE, | |
| 33 | + dictClass: 'number', | |
| 34 | + isSearch: true | |
| 35 | + }, | |
| 36 | + { | |
| 37 | + title: '支付订单编号', | |
| 38 | + field: 'orderId', | |
| 39 | + isSearch: true | |
| 40 | + }, | |
| 41 | + { | |
| 42 | + title: '交易订单号', | |
| 43 | + field: 'tradeNo', | |
| 44 | + isSearch: true | |
| 45 | + }, | |
| 46 | + { | |
| 47 | + title: '商户订单号', | |
| 48 | + field: 'merchantOrderId', | |
| 49 | + isSearch: true | |
| 50 | + }, | |
| 51 | + { | |
| 52 | + title: '商户退款单号', | |
| 53 | + field: 'merchantRefundNo', | |
| 54 | + isSearch: true | |
| 55 | + }, | |
| 56 | + { | |
| 57 | + title: '回调地址', | |
| 58 | + field: 'notifyUrl', | |
| 59 | + isSearch: true | |
| 60 | + }, | |
| 61 | + { | |
| 62 | + title: '回调状态', | |
| 63 | + field: 'notifyStatus', | |
| 64 | + dictType: DICT_TYPE.PAY_ORDER_NOTIFY_STATUS, | |
| 65 | + dictClass: 'number', | |
| 66 | + isSearch: true | |
| 67 | + }, | |
| 68 | + { | |
| 69 | + title: '退款类型', | |
| 70 | + field: 'type', | |
| 71 | + dictType: DICT_TYPE.PAY_REFUND_ORDER_TYPE, | |
| 72 | + dictClass: 'number', | |
| 73 | + isSearch: true | |
| 74 | + }, | |
| 75 | + { | |
| 76 | + title: t('common.status'), | |
| 77 | + field: 'status', | |
| 78 | + dictType: DICT_TYPE.PAY_REFUND_ORDER_STATUS, | |
| 79 | + dictClass: 'number', | |
| 80 | + isSearch: true | |
| 81 | + }, | |
| 82 | + { | |
| 83 | + title: '支付金额', | |
| 84 | + field: 'payAmount', | |
| 85 | + formatter: 'formatAmount', | |
| 86 | + isSearch: true | |
| 87 | + }, | |
| 88 | + { | |
| 89 | + title: '退款金额', | |
| 90 | + field: 'refundAmount', | |
| 91 | + formatter: 'formatAmount', | |
| 92 | + isSearch: true | |
| 93 | + }, | |
| 94 | + { | |
| 95 | + title: '退款原因', | |
| 96 | + field: 'reason', | |
| 97 | + isSearch: true | |
| 98 | + }, | |
| 99 | + { | |
| 100 | + title: '用户IP', | |
| 101 | + field: 'userIp', | |
| 102 | + isSearch: true | |
| 103 | + }, | |
| 104 | + { | |
| 105 | + title: '渠道订单号', | |
| 106 | + field: 'channelOrderNo', | |
| 107 | + isSearch: true | |
| 108 | + }, | |
| 109 | + { | |
| 110 | + title: '渠道退款单号', | |
| 111 | + field: 'channelRefundNo', | |
| 112 | + isSearch: true | |
| 113 | + }, | |
| 114 | + { | |
| 115 | + title: '渠道调用报错时', | |
| 116 | + field: 'channelErrorCode' | |
| 117 | + }, | |
| 118 | + { | |
| 119 | + title: '渠道调用报错时', | |
| 120 | + field: 'channelErrorMsg' | |
| 121 | + }, | |
| 122 | + { | |
| 123 | + title: '支付渠道的额外参数', | |
| 124 | + field: 'channelExtras' | |
| 125 | + }, | |
| 126 | + { | |
| 127 | + title: '退款失效时间', | |
| 128 | + field: 'expireTime', | |
| 129 | + formatter: 'formatDate', | |
| 130 | + isForm: false, | |
| 131 | + search: { | |
| 132 | + show: true, | |
| 133 | + itemRender: { | |
| 134 | + name: 'XDataTimePicker' | |
| 135 | + } | |
| 136 | + } | |
| 137 | + }, | |
| 138 | + { | |
| 139 | + title: '退款成功时间', | |
| 140 | + field: 'successTime', | |
| 141 | + formatter: 'formatDate', | |
| 142 | + isForm: false, | |
| 143 | + search: { | |
| 144 | + show: true, | |
| 145 | + itemRender: { | |
| 146 | + name: 'XDataTimePicker' | |
| 147 | + } | |
| 148 | + } | |
| 149 | + }, | |
| 150 | + { | |
| 151 | + title: '退款通知时间', | |
| 152 | + field: 'notifyTime', | |
| 153 | + formatter: 'formatDate', | |
| 154 | + isForm: false, | |
| 155 | + search: { | |
| 156 | + show: true, | |
| 157 | + itemRender: { | |
| 158 | + name: 'XDataTimePicker' | |
| 159 | + } | |
| 160 | + } | |
| 161 | + }, | |
| 162 | + { | |
| 163 | + title: t('common.createTime'), | |
| 164 | + field: 'createTime', | |
| 165 | + formatter: 'formatDate', | |
| 166 | + isForm: false, | |
| 167 | + search: { | |
| 168 | + show: true, | |
| 169 | + itemRender: { | |
| 170 | + name: 'XDataTimePicker' | |
| 171 | + } | |
| 97 | 172 | } |
| 98 | 173 | } |
| 99 | - }, | |
| 100 | - { | |
| 101 | - label: t('table.action'), | |
| 102 | - field: 'action', | |
| 103 | - width: '240px', | |
| 104 | - form: { | |
| 105 | - show: false | |
| 106 | - }, | |
| 107 | - detail: { | |
| 108 | - show: false | |
| 109 | - } | |
| 110 | - } | |
| 111 | -]) | |
| 112 | -export const { allSchemas } = useCrudSchemas(crudSchemas) | |
| 174 | + ] | |
| 175 | +}) | |
| 176 | +export const { allSchemas } = useVxeCrudSchemas(crudSchemas) | ... | ... |