From b52bec54f02f5b894d5dde30f8f05b76c71771ba Mon Sep 17 00:00:00 2001 From: wupengfei <834520024@qq.com> Date: 星期五, 12 九月 2025 15:48:18 +0800 Subject: [PATCH] feat: 支付宝充值 --- src/views/ServiceChargeManage/ServiceChargeManage.vue | 132 ++++++++++++++++++++++++++++++++++++-------- 1 files changed, 108 insertions(+), 24 deletions(-) diff --git a/src/views/ServiceChargeManage/ServiceChargeManage.vue b/src/views/ServiceChargeManage/ServiceChargeManage.vue index f60c590..6888c19 100644 --- a/src/views/ServiceChargeManage/ServiceChargeManage.vue +++ b/src/views/ServiceChargeManage/ServiceChargeManage.vue @@ -21,7 +21,7 @@ @change="getList()" /> </QueryFilterItem> - <QueryFilterItem> + <!-- <QueryFilterItem> <FieldDatePicker v-model="extraParamState.time" type="daterange" @@ -32,7 +32,7 @@ @change="getList()" tooltipContent="鍒涘缓鏃堕棿" ></FieldDatePicker> - </QueryFilterItem> + </QueryFilterItem> --> <QueryFilterItem> <SearchInput v-model="extraParamState.keywords" @@ -47,7 +47,7 @@ <template #btn> <el-button type="primary" link @click="handleDownloadTemplate()">缁撶畻鍗曟ā鏉�</el-button> <el-button type="primary" @click="handleAdd()">涓婁紶缁撶畻鍗�</el-button> - <el-button type="primary" @click="handleDownloadTemplate()">瀵煎嚭</el-button> + <!-- <el-button type="primary" @click="handleDownloadTemplate()">瀵煎嚭</el-button> --> </template> </ProTableQueryFilterBar> <ProTableV2 @@ -57,7 +57,6 @@ > <template #operationBtn-uploadBtn="{ row }"> <BlFileUpload - v-if="row.settlementOrderStatus === EnumTaskSettlementOrderStatus.Wait" v-model:file-url="editForm.settlementUrl" ref="uploadRef" :showTip="false" @@ -73,10 +72,6 @@ </template> <template #operationBtn-reUploadBtn="{ data, row }"> <BlFileUpload - v-if=" - row.settlementOrderStatus === EnumTaskSettlementOrderStatus.Completed && - row.settlementStatus === EnumTaskSettlementStatus.Wait - " v-model:file-url="editForm.settlementUrl" ref="uploadRef" :showTip="false" @@ -94,6 +89,8 @@ </AppContainer> <UploadStatementDialog v-bind="dialogProps" /> <SettleDetailDialog v-bind="dialogSettleProps" /> + <RechargeEnterpriseWalletDialog v-bind="dialogRechargeProps" /> + <AlipayWalletRecharge v-bind="dialogAlipayWalletProps" /> </LoadingLayout> </template> @@ -120,11 +117,14 @@ EnumTaskSettlementOrderStatus, EnumTaskSettlementStatus, } from '@/constants'; -import { downloadFileByUrl } from '@/utils'; +import { downloadFileByUrl, setOssFileName } from '@/utils'; import * as taskServices from '@/services/api/task'; +import * as enterpriseWalletServices from '@/services/api/enterpriseWallet'; import { ModelValueType } from 'element-plus'; import UploadStatementDialog from './components/UploadStatementDialog.vue'; import SettleDetailDialog from './components/SettleDetailDialog.vue'; +import RechargeEnterpriseWalletDialog from './components/RechargeEnterpriseWalletDialog.vue'; +import AlipayWalletRecharge from './components/AlipayWalletRecharge.vue'; import { Message } from '@bole-core/core'; defineOptions({ @@ -134,14 +134,41 @@ const operationBtns = defineOperationBtns([ { data: { + enCode: 'uploadBtn', + name: '涓婁紶', + }, + extraProps: { + hide: (row: API.GetSettlementTasksQueryResultItem) => + row.settlementOrderStatus !== EnumTaskSettlementOrderStatus.Wait, + }, + }, + { + data: { + enCode: 'reUploadBtn', + name: '閲嶆柊涓婁紶', + }, + extraProps: { + hide: (row: API.GetSettlementTasksQueryResultItem) => + !( + row.settlementOrderStatus === EnumTaskSettlementOrderStatus.Completed && + row.settlementStatus === EnumTaskSettlementStatus.Wait + ), + }, + }, + { + data: { enCode: 'settleBtn', name: '缁撶畻', }, emits: { - onClick: (role) => openSettleDialog(role), + onClick: (role: API.GetSettlementTasksQueryResultItem) => openSettleDialog(role), }, extraProps: { - hide: () => false, + hide: (role: API.GetSettlementTasksQueryResultItem) => + !( + role.settlementOrderStatus === EnumTaskSettlementOrderStatus.Completed && + role.settlementStatus === EnumTaskSettlementStatus.Wait + ), }, }, { @@ -165,6 +192,10 @@ emits: { onClick: (role: API.GetSettlementTasksQueryResultItem) => goDetail(role.id), }, + extraProps: { + hide: (role: API.GetSettlementTasksQueryResultItem) => + role.settlementOrderStatus === EnumTaskSettlementOrderStatus.Wait, + }, }, { data: { @@ -175,12 +206,14 @@ onClick: (role) => handleExport(role), }, extraProps: { - hide: () => false, + hide: () => true, }, }, ]); const router = useRouter(); + +const { userDetail } = useUser(); const eventContext = useGlobalEventContext(); @@ -243,6 +276,10 @@ settlementAmount: { type: 'money' }, settlementTime: { type: 'date', format: 'YYYY-MM-DD HH:mm:ss' }, settlementOrderTime: { type: 'date', format: 'YYYY-MM-DD HH:mm:ss' }, + settlementOrderName: { + formatter: (row: API.GetSettlementTasksQueryResultItem) => + row.settlementOrderName && setOssFileName(row.settlementOrderName), + }, }, } ); @@ -258,7 +295,7 @@ }); async function handleAddOrEdit() { - goDetail(editForm.id, editForm.settlementUrl[0]?.url); + goDetail(editForm.id, editForm.settlementUrl[0]?.path); } const { @@ -272,7 +309,7 @@ name: '', code: '', settlementUserCount: 0, - settlementAmount: 0, + actualSettlementAmount: 0, }, }); @@ -281,10 +318,51 @@ let params: API.SureTaskSettlementCommand = { taskInfoId: settleEditForm.id, }; - let res = await taskServices.sureTaskSettlement(params); + let res = await taskServices.sureTaskSettlement(params, { + skipErrorHandler: true, + }); if (res) { Message.successMessage('鎿嶄綔鎴愬姛'); getList(paginationState.pageIndex); + } + } catch (error) { + if (error?.info?.errorCode == 's510') { + handleRechargeAdd(); + } + } +} + +const { + dialogProps: dialogRechargeProps, + handleAdd: handleRechargeAdd, + editForm: rechargeEditForm, +} = useFormDialog({ + onConfirm: rechargeEnterpriseWallet, + defaultFormParams: { + amount: null as number, + remark: '', + }, +}); + +const { dialogProps: dialogAlipayWalletProps, handleAdd: handleAlipayWalletAdd } = useFormDialog({ + onConfirm: rechargeEnterpriseWallet, + defaultFormParams: { + alipayUrl: '', + }, +}); + +async function rechargeEnterpriseWallet() { + try { + let params: API.RechargeEnterpriseWalletCommand = { + access: EnumEnterpriseWalletAccess.Alipay, + amount: rechargeEditForm.amount, + remark: rechargeEditForm.remark, + }; + let res = await enterpriseWalletServices.rechargeEnterpriseWallet(params); + if (res) { + handleAlipayWalletAdd({ + alipayUrl: res.payUrl, + }); } } catch (error) {} } @@ -294,14 +372,14 @@ id: row.id, name: row.name, code: row.code, - settlementUserCount: row.settlementUserCount, - settlementAmount: row.settlementAmount, + settlementUserCount: row.settlementUserCount ?? 0, + actualSettlementAmount: row.actualSettlementAmount ?? 0, }); } async function handleRecall(row: API.GetSettlementTasksQueryResultItem) { try { - Message.tipMessage('纭瑕佹挙鍥炲悧锛�'); + await Message.tipMessage('纭瑕佹挙鍥炲悧锛�'); let params: API.RevokeTaskSettlementOrderCommand = { taskInfoId: row.id, }; @@ -317,19 +395,22 @@ response: UploadUserFile & { file: File & { uid: number } }, row: API.GetSettlementTasksQueryResultItem ) { - if (response.url) { - goDetail(row.id, response.url); + if (response.path) { + goDetail(row.id, response.path); } } -function goDetail(id: string, url?: string) { - router.push({ +async function goDetail(id: string, url?: string) { + await router.push({ name: 'ServiceChargeDetail', - query: { + params: { id: id, + }, + query: { url: url ? url : '', }, }); + editForm.settlementUrl = [] as UploadUserFile[]; } function handleExport(val) { @@ -337,6 +418,9 @@ } function handleDownloadTemplate() { - downloadFileByUrl('', '缁撶畻鍗曟ā鏉�'); + downloadFileByUrl( + 'https://parkmanagement.oss-cn-hangzhou.aliyuncs.com/FlexJob/temp/%E7%BB%93%E7%AE%97%E5%8D%95%E6%A8%A1%E6%9D%BF.xlsx', + '缁撶畻鍗曟ā鏉�' + ); } </script> -- Gitblit v1.9.1