Skip to content

Commit 11b3de0

Browse files
committed
feat:【PAY 支付】提现示例,拆分 create 和 transfer 两个状态,更符合实际场景
1 parent 15f5963 commit 11b3de0

File tree

5 files changed

+98
-43
lines changed

5 files changed

+98
-43
lines changed

src/api/pay/demo/transfer/index.ts

Lines changed: 0 additions & 25 deletions
This file was deleted.

src/api/pay/demo/withdraw/index.ts

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import request from '@/config/axios'
2+
3+
export interface PayDemoWithdrawVO {
4+
id?: number
5+
subject: string
6+
price: number
7+
userName: string
8+
userAccount: string
9+
type: number
10+
status?: number
11+
payTransferId?: number
12+
transferChannelCode?: string
13+
transferTime?: Date
14+
transferErrorMsg?: string
15+
}
16+
17+
// 查询示例提现单列表
18+
export const getDemoWithdrawPage = (params: PageParam) => {
19+
return request.get({ url: '/pay/demo-withdraw/page', params })
20+
}
21+
22+
// 创建示例提现单
23+
export const createDemoWithdraw = (data: PayDemoWithdrawVO) => {
24+
return request.post({ url: '/pay/demo-withdraw/create', data })
25+
}
26+
27+
// 发起提现单转账
28+
export const transferDemoWithdraw = (id: number) => {
29+
return request.post({ url: '/pay/demo-withdraw/transfer', params: { id } })
30+
}

src/api/pay/transfer/index.ts

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import request from '@/config/axios'
22

3+
// TODO @芋艿:调整字段
34
export interface TransferVO {
45
appId: number
56
channelCode: string
@@ -12,11 +13,6 @@ export interface TransferVO {
1213
openid: string
1314
}
1415

15-
// 新增转账单
16-
export const createTransfer = async (data: TransferVO) => {
17-
return await request.post({ url: `/pay/transfer/create`, data })
18-
}
19-
2016
// 查询转账单列表
2117
export const getTransferPage = async (params: PageParam) => {
2218
return await request.get({ url: `/pay/transfer/page`, params })

src/views/pay/demo/withdraw/DemoWithdrawForm.vue

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,26 +13,26 @@
1313
<el-form-item label="提现类型" prop="type">
1414
<el-radio-group v-model="formData.type">
1515
<el-radio :value="1">支付宝</el-radio>
16-
<el-radio :value="2">微信支付</el-radio>
16+
<el-radio :value="2">微信余额</el-radio>
1717
<el-radio :value="3">钱包</el-radio>
1818
</el-radio-group>
1919
</el-form-item>
2020
<el-form-item label="提现金额" prop="price">
2121
<el-input-number
2222
v-model="formData.price"
23-
:min="0"
23+
:min="0.01"
2424
:precision="2"
2525
:step="0.01"
2626
placeholder="请输入提现金额"
2727
style="width: 200px"
2828
/>
2929
</el-form-item>
30+
<el-form-item label="收款人账号" prop="userAccount">
31+
<el-input v-model="formData.userAccount" :placeholder="getAccountPlaceholder()" />
32+
</el-form-item>
3033
<el-form-item label="收款人姓名" prop="userName">
3134
<el-input v-model="formData.userName" placeholder="请输入收款人姓名" />
3235
</el-form-item>
33-
<el-form-item label="收款人账号" prop="userAccount">
34-
<el-input v-model="formData.userAccount" placeholder="请输入收款人账号" />
35-
</el-form-item>
3636
</el-form>
3737
<template #footer>
3838
<el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button>
@@ -41,8 +41,7 @@
4141
</Dialog>
4242
</template>
4343
<script setup lang="ts">
44-
import * as DemoWithdrawApi from '@/api/pay/demo/withdraw'
45-
import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
44+
import * as DemoWithdrawApi from '@/api/pay/demo/withdraw/index'
4645
import { yuanToFen } from '@/utils'
4746
const { t } = useI18n() // 国际化
4847
const message = useMessage() // 消息弹窗
@@ -62,8 +61,7 @@ const formRules = reactive({
6261
subject: [{ required: true, message: '提现标题不能为空', trigger: 'blur' }],
6362
price: [{ required: true, message: '提现金额不能为空', trigger: 'blur' }],
6463
type: [{ required: true, message: '提现类型不能为空', trigger: 'change' }],
65-
userName: [{ required: true, message: '收款人姓名不能为空', trigger: 'blur' }],
66-
userAccount: [{ required: true, message: '收款人账号不能为空', trigger: 'blur' }]
64+
userAccount: [{ required: true, message: '收款人账号不能为空', trigger: 'blur' }],
6765
})
6866
const formRef = ref() // 表单 Ref
6967
@@ -116,4 +114,16 @@ const resetForm = () => {
116114
}
117115
formRef.value?.resetFields()
118116
}
117+
118+
/** 根据提现类型获取账号输入框的占位符文本 */
119+
const getAccountPlaceholder = () => {
120+
if (formData.value.type === 1) {
121+
return '请输入支付宝账号'
122+
} else if (formData.value.type === 2) {
123+
return '请输入微信 openid'
124+
} else if (formData.value.type === 3) {
125+
return '请输入钱包编号'
126+
}
127+
return '请输入收款人账号'
128+
}
119129
</script>

src/views/pay/demo/withdraw/index.vue

Lines changed: 48 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,33 @@
2121
<!-- 列表 -->
2222
<ContentWrap>
2323
<el-table v-loading="loading" :data="list" :show-overflow-tooltip="true">
24+
<el-table-column label="操作" align="center" width="100">
25+
<template #default="scope">
26+
<el-button
27+
v-if="scope.row.status === 0"
28+
type="primary"
29+
link
30+
@click="handleTransfer(scope.row.id)"
31+
>
32+
发起转账
33+
</el-button>
34+
<el-button
35+
v-if="scope.row.status === 20"
36+
type="warning"
37+
link
38+
@click="handleTransfer(scope.row.id)"
39+
>
40+
重新转账
41+
</el-button>
42+
</template>
43+
</el-table-column>
2444
<el-table-column label="提现单编号" align="center" prop="id" width="100" />
2545
<el-table-column label="提现标题" align="center" prop="subject" min-width="120" />
2646
<el-table-column label="提现类型" align="center" prop="type" min-width="90">
2747
<template #default="scope">
2848
<el-tag v-if="scope.row.type === 1">支付宝</el-tag>
29-
<el-tag v-else-if="scope.row.type === 2">微信支付</el-tag>
30-
<el-tag v-else-if="scope.row.type === 3">钱包</el-tag>
49+
<el-tag v-else-if="scope.row.type === 2">微信余额</el-tag>
50+
<el-tag v-else-if="scope.row.type === 3">钱包余额</el-tag>
3151
</template>
3252
</el-table-column>
3353
<el-table-column label="提现金额" align="center" prop="price" width="120">
@@ -45,7 +65,7 @@
4565
</template>
4666
</el-table-column>
4767
<el-table-column label="转账单号" align="center" prop="payTransferId" min-width="120" />
48-
<el-table-column label="支付渠道" align="center" prop="transferChannelCode" min-width="180">
68+
<el-table-column label="转账渠道" align="center" prop="transferChannelCode" min-width="180">
4969
<template #default="scope">
5070
<dict-tag :type="DICT_TYPE.PAY_CHANNEL_CODE" :value="scope.row.transferChannelCode" />
5171
</template>
@@ -57,6 +77,12 @@
5777
:formatter="dateFormatter"
5878
width="180px"
5979
/>
80+
<el-table-column
81+
label="转账失败原因"
82+
align="center"
83+
prop="transferErrorMsg"
84+
min-width="200"
85+
/>
6086
</el-table>
6187
<!-- 分页 -->
6288
<Pagination
@@ -73,10 +99,12 @@
7399

74100
<script setup lang="ts">
75101
import { dateFormatter } from '@/utils/formatTime'
76-
import * as DemoWithdrawApi from '@/api/pay/demo/withdraw'
102+
import * as DemoWithdrawApi from '@/api/pay/demo/withdraw/index'
77103
import DemoWithdrawForm from './DemoWithdrawForm.vue'
78104
import { DICT_TYPE } from '@/utils/dict'
105+
import { useMessage } from '@/hooks/web/useMessage'
79106
107+
const message = useMessage()
80108
const loading = ref(true) // 列表的加载中
81109
const total = ref(0) // 列表的总页数
82110
const list = ref([]) // 列表的数据
@@ -116,6 +144,22 @@ const openForm = (type: string) => {
116144
demoFormRef.value.open(type)
117145
}
118146
147+
/** 处理转账操作 */
148+
const handleTransfer = async (id: number) => {
149+
try {
150+
// 转账操作的二次确认
151+
await message.confirm('确认要执行转账操作吗?')
152+
// 发起转账
153+
loading.value = true
154+
const payTransferId = await DemoWithdrawApi.transferDemoWithdraw(id)
155+
message.success('转账提交成功,转账单号:' + payTransferId)
156+
// 刷新列表
157+
await getList()
158+
} finally {
159+
loading.value = false
160+
}
161+
}
162+
119163
/** 初始化 **/
120164
onMounted(() => {
121165
getList()

0 commit comments

Comments
 (0)