From 22a6de40ac6693463cdbbe9ed1e3ef05fc301afc Mon Sep 17 00:00:00 2001
From: wupengfei <834520024@qq.com>
Date: 星期二, 23 九月 2025 14:50:34 +0800
Subject: [PATCH] feat: 绑定银行卡
---
apps/cMiniApp/src/subpackages/wallet/bindBankCard/InnerPage.vue | 56 ++++++++
apps/cMiniApp/src/subpackages/wallet/unboundBankCard/InnerPage.vue | 93 +++++++--------
packages/utils/common.ts | 5
packages/services/apiV2/enterpriseWallet.ts | 12 ++
apps/cMiniApp/src/hooks/user.ts | 11 +
apps/cMiniApp/src/subpackages/wallet/incomeDetail/InnerPage.vue | 34 +++--
packages/services/apiV2/typings.d.ts | 65 +++++++++-
apps/cMiniApp/src/subpackages/wallet/mineWallet/InnerPage.vue | 13 +
packages/utils/validator.ts | 7 +
packages/constants/apiEnum.ts | 12 ++
apps/cMiniApp/src/pages/mine/index.vue | 2
packages/services/apiV2/user.ts | 32 +++++
12 files changed, 256 insertions(+), 86 deletions(-)
diff --git a/apps/cMiniApp/src/hooks/user.ts b/apps/cMiniApp/src/hooks/user.ts
index 980d82f..d6a9ac3 100644
--- a/apps/cMiniApp/src/hooks/user.ts
+++ b/apps/cMiniApp/src/hooks/user.ts
@@ -1,7 +1,11 @@
import { useUserStore } from '@/stores/modules/user';
import Taro from '@tarojs/taro';
import { object2query, LocationUtils } from '@12333/utils';
-import { ParkOrHRStatus, UserCertificationFrontStatus } from '@12333/constants';
+import {
+ EnumUserBankCardAccess,
+ ParkOrHRStatus,
+ UserCertificationFrontStatus,
+} from '@12333/constants';
import { useQuery, useQueryClient } from '@tanstack/vue-query';
import { MaybeRef } from 'vue';
import { useRefeshDidShow } from '@12333/hooks/infiniteLoading';
@@ -21,6 +25,10 @@
return userDetail.value?.isReal;
});
+ const isBindBank = computed(() => {
+ return userDetail.value?.bankCardAAccesses?.find(() => EnumUserBankCardAccess.Bank);
+ });
+
return {
user: userInfo,
userDetail: userDetail,
@@ -28,6 +36,7 @@
isCertified,
locationCity,
userId,
+ isBindBank,
};
}
diff --git a/apps/cMiniApp/src/pages/mine/index.vue b/apps/cMiniApp/src/pages/mine/index.vue
index 5c2b0e4..9609903 100644
--- a/apps/cMiniApp/src/pages/mine/index.vue
+++ b/apps/cMiniApp/src/pages/mine/index.vue
@@ -58,7 +58,7 @@
<ContentScrollView v-if="isLogin" class="mine-content-scroll-view">
<List class="mine-list-wrapper mine-balance">
<div class="mine-balance-title">鎴戠殑浣欓</div>
- <div class="mine-balance-money">锟{ toThousand(userDetail?.balance) }}</div>
+ <div class="mine-balance-money">锟{ toThousand(userDetail?.balance ?? 0) }}</div>
<div class="mine-balance-btn" @click="goMineWallet">
杩涘叆鎴戠殑閽卞寘
<img :src="IconArrow" class="mine-balance-btn-icon" />
diff --git a/apps/cMiniApp/src/subpackages/wallet/bindBankCard/InnerPage.vue b/apps/cMiniApp/src/subpackages/wallet/bindBankCard/InnerPage.vue
index 0ac88a1..d68026e 100644
--- a/apps/cMiniApp/src/subpackages/wallet/bindBankCard/InnerPage.vue
+++ b/apps/cMiniApp/src/subpackages/wallet/bindBankCard/InnerPage.vue
@@ -3,8 +3,10 @@
<div class="bind-bank-card-wrapper">
<div class="bg-left-top"></div>
<div class="bind-bank-card-content">
- <div class="bank-card-name">{{ '鎷涘晢閾惰' }}</div>
- <div class="bank-card-number">{{ '**** **** **** 1234' }}</div>
+ <div class="bank-card-name">{{ detail?.bank ?? '' }}</div>
+ <div class="bank-card-number">
+ <div class="bank-card-number-text">{{ showBankCodeForEnd4(detail?.code ?? '') }}</div>
+ </div>
<div class="bank-card-type">{{ '鍌ㄨ搫鍗�' }}</div>
</div>
<div class="bg-right-bottom"></div>
@@ -18,15 +20,59 @@
<script setup lang="ts">
import { useUserStore } from '@/stores/modules/user';
+import { useQuery } from '@tanstack/vue-query';
+import { Message, showBankCodeForEnd4 } from '@12333/utils';
+import * as userServices from '@12333/services/apiV2/user';
import Taro from '@tarojs/taro';
+import { EnumUserBankCardAccess } from '@12333/constants';
defineOptions({
name: 'InnerPage',
});
-const userStore = useUserStore();
+const {} = useUser();
+const switchTab = useSwitchTab();
+function goUserCenter() {
+ switchTab({
+ url: RouterPath.mine,
+ });
+}
-function handleUnbind() {}
+const {
+ isLoading,
+ isError,
+ data: detail,
+ refetch,
+} = useQuery({
+ queryKey: ['userServices/getPersonalUserBankCard'],
+ queryFn: async () => {
+ return await userServices.getPersonalUserBankCard(
+ { access: EnumUserBankCardAccess.Bank },
+ {
+ showLoading: false,
+ }
+ );
+ },
+ placeholderData: () => ({} as API.GetPersonalUserBankCardQueryResult),
+ onSuccess(data) {},
+});
+
+async function handleUnbind() {
+ try {
+ await Message.confirm({ message: '纭畾瑕佽В缁戦摱琛屽崱鍚楋紵' });
+ let params: API.DeletePersonalUserBankCardCommand = {
+ access: EnumUserBankCardAccess.Bank,
+ };
+ let res = await userServices.deletePersonalUserBankCard(params);
+ if (res) {
+ Message.success('瑙g粦鎴愬姛', {
+ onClosed() {
+ goUserCenter();
+ },
+ });
+ }
+ } catch (error) {}
+}
</script>
<style lang="scss">
@@ -34,7 +80,7 @@
.bindBankCard-page-wrapper {
.bind-bank-card-wrapper {
- margin: 20px auto 0;
+ margin: 0 auto;
width: 660px;
height: 360px;
padding: 60px 72px;
diff --git a/apps/cMiniApp/src/subpackages/wallet/incomeDetail/InnerPage.vue b/apps/cMiniApp/src/subpackages/wallet/incomeDetail/InnerPage.vue
index 68bd0c0..e6666dc 100644
--- a/apps/cMiniApp/src/subpackages/wallet/incomeDetail/InnerPage.vue
+++ b/apps/cMiniApp/src/subpackages/wallet/incomeDetail/InnerPage.vue
@@ -1,5 +1,5 @@
<template>
- <ProTabs
+ <!-- <ProTabs
v-model="queryState.type"
name="home-tab"
:showPaneContent="false"
@@ -11,7 +11,7 @@
<ProTabPane :title="`鍏ㄩ儴`" :pane-key="0"></ProTabPane>
<ProTabPane :title="`鏀跺叆`" :pane-key="EnumUserWalletTransactionType.Income"></ProTabPane>
<ProTabPane :title="`鎻愮幇`" :pane-key="EnumUserWalletTransactionType.Withdraw"></ProTabPane>
- </ProTabs>
+ </ProTabs> -->
<List>
<IncomeDetailListItem :item="`鏀跺叆锛氾骏${toThousand(sumIncome)} `">
<template #title>
@@ -87,10 +87,11 @@
page: pageParam,
orderInput: [{ property: 'id', order: EnumPagedListOrder.Desc }],
},
+ type: EnumUserWalletTransactionType.Income,
};
- if (Number(queryState.type)) {
- params.type = queryState.type;
- }
+ // if (Number(queryState.type)) {
+ // params.type = queryState.type;
+ // }
if (queryState.month) {
params.createdTimeStart = dayjs(queryState.month).startOf('month').format('YYYY-MM-DD');
params.createdTimeEnd = dayjs(queryState.month).endOf('month').format('YYYY-MM-DD');
@@ -105,16 +106,19 @@
);
function goIncomeDetailInfo(row: API.GetPersonalUserTransactionsQueryResultItem) {
- if (row.type === EnumUserWalletTransactionType.Income) {
- Taro.navigateTo({
- url: `${RouterPath.incomeDetailInfo}?id=${row.id}`,
- });
- }
- if (row.type === EnumUserWalletTransactionType.Withdraw) {
- Taro.navigateTo({
- url: `${RouterPath.withdrawDetailInfo}?id=${row.id}`,
- });
- }
+ Taro.navigateTo({
+ url: `${RouterPath.incomeDetailInfo}?id=${row.id}`,
+ });
+ // if (row.type === EnumUserWalletTransactionType.Income) {
+ // Taro.navigateTo({
+ // url: `${RouterPath.incomeDetailInfo}?id=${row.id}`,
+ // });
+ // }
+ // if (row.type === EnumUserWalletTransactionType.Withdraw) {
+ // Taro.navigateTo({
+ // url: `${RouterPath.withdrawDetailInfo}?id=${row.id}`,
+ // });
+ // }
}
</script>
diff --git a/apps/cMiniApp/src/subpackages/wallet/mineWallet/InnerPage.vue b/apps/cMiniApp/src/subpackages/wallet/mineWallet/InnerPage.vue
index b8a68cf..2e85da4 100644
--- a/apps/cMiniApp/src/subpackages/wallet/mineWallet/InnerPage.vue
+++ b/apps/cMiniApp/src/subpackages/wallet/mineWallet/InnerPage.vue
@@ -1,14 +1,14 @@
<template>
- <div class="mine-wallet-balance">
+ <!-- <div class="mine-wallet-balance">
<WithdrawMoneyCard :money="userDetail.balance" title="璐︽埛浣欓(鍏�)"></WithdrawMoneyCard>
<nut-button type="primary" class="mine-wallet-balance-btn" @click="goWithdraw">鎻愮幇</nut-button>
- </div>
+ </div> -->
<List>
<ListItem title="鏀跺叆鏄庣粏" @click="goIncomeDetail"> </ListItem>
<ListItem title="閾惰鍗�" @click="goBankBind">
<template #extra>
<div class="bind-bank-card">
- {{ isBinding ? '宸茬粦瀹�' : '鏈粦瀹氥�佺珛鍗崇粦瀹�' }}
+ {{ isBindBank ? '宸茬粦瀹�' : '鏈粦瀹氥�佺珛鍗崇粦瀹�' }}
</div>
</template>
</ListItem>
@@ -17,6 +17,7 @@
<script setup lang="ts">
import { List, ListItem, WithdrawMoneyCard } from '@12333/components';
+import { EnumUserBankCardAccess } from '@12333/constants';
import Taro from '@tarojs/taro';
defineOptions({
@@ -25,7 +26,9 @@
const { userDetail } = useUser();
-const isBinding = ref(false);
+const isBindBank = computed(() =>
+ userDetail.value?.bankCardAAccesses?.find(() => EnumUserBankCardAccess.Bank)
+);
function goIncomeDetail() {
Taro.navigateTo({
@@ -44,7 +47,7 @@
const goBankBind = useAccessReal(
() => {
Taro.navigateTo({
- url: `${isBinding.value ? RouterPath.bindBankCard : RouterPath.unboundBankCard}`,
+ url: `${isBindBank.value ? RouterPath.bindBankCard : RouterPath.unboundBankCard}`,
});
},
{ message: '瀹屾垚瀹炲悕璁よ瘉鍚庢墠鍙繘琛岄摱琛屽崱缁戝畾' }
diff --git a/apps/cMiniApp/src/subpackages/wallet/unboundBankCard/InnerPage.vue b/apps/cMiniApp/src/subpackages/wallet/unboundBankCard/InnerPage.vue
index f458fa7..b1be1c9 100644
--- a/apps/cMiniApp/src/subpackages/wallet/unboundBankCard/InnerPage.vue
+++ b/apps/cMiniApp/src/subpackages/wallet/unboundBankCard/InnerPage.vue
@@ -2,22 +2,22 @@
<ContentScrollView :paddingH="false">
<nut-form :model-value="form" ref="formRef" :rules="rules">
<nut-form-item label="鎸佸崱浜�:" class="bole-form-item" prop="name">
- <nut-input v-model.trim="form.name" placeholder="璇疯緭鍏ユ寔鍗′汉" />
+ <nut-input v-model.trim="form.name" placeholder="璇疯緭鍏ユ寔鍗′汉" readonly />
</nut-form-item>
- <nut-form-item label="韬唤璇佸彿:" class="bole-form-item" prop="name">
- <nut-input v-model.trim="form.name" placeholder="璇疯緭鍏ヨ韩浠借瘉鍙�" />
+ <nut-form-item label="韬唤璇佸彿:" class="bole-form-item" prop="identity">
+ <nut-input v-model.trim="form.identity" placeholder="璇疯緭鍏ヨ韩浠借瘉鍙�" readonly />
</nut-form-item>
- <nut-form-item label="閾惰鍗″彿:" class="bole-form-item" prop="name">
- <nut-input v-model.trim="form.name" placeholder="璇疯緭鍏ラ摱琛屽崱鍙�" />
+ <nut-form-item label="閾惰鍗″彿:" class="bole-form-item" prop="code">
+ <nut-input v-model.trim="form.code" placeholder="璇疯緭鍏ラ摱琛屽崱鍙�" />
</nut-form-item>
- <nut-form-item label="寮�鎴疯:" class="bole-form-item" prop="name">
- <nut-input v-model.trim="form.name" placeholder="璇疯緭鍏ュ紑鎴疯" />
+ <nut-form-item label="寮�鎴疯:" class="bole-form-item" prop="bank">
+ <nut-input v-model.trim="form.bank" placeholder="璇疯緭鍏ュ紑鎴疯" />
</nut-form-item>
<nut-form-item label="鎵嬫満鍙�:" class="bole-form-item" prop="phoneNumber" required>
<nut-input
v-model.trim="form.phoneNumber"
class="nut-input-text bole-input-text"
- placeholder="璇峰~鍐欑粡鍔炰汉鐨勬墜鏈哄彿鐮�"
+ placeholder="璇峰~鍐欓摱琛岄鐣欐墜鏈哄彿"
type="text"
>
<template #right>
@@ -29,9 +29,9 @@
</template>
</nut-input>
</nut-form-item>
- <nut-form-item label="鐭俊楠岃瘉鐮�:" class="bole-form-item" prop="verificationCode" required>
+ <nut-form-item label="鐭俊楠岃瘉鐮�:" class="bole-form-item" prop="verifyCode" required>
<nut-input
- v-model.trim="form.verificationCode"
+ v-model.trim="form.verifyCode"
class="nut-input-text bole-input-text"
placeholder="璇疯緭鍏ラ獙璇佺爜"
type="number"
@@ -47,55 +47,45 @@
<script setup lang="ts">
import { FormRules } from '@nutui/nutui-taro/dist/types/__VUE/form/types';
import { ProFormCaptcha } from 'senin-mini/components';
-import { Message } from '@12333/utils';
-import { VerificationCodeBusinessType } from '@12333/constants';
-import * as commonServices from '@12333/services/api/Common';
+import { FormValidator, Message } from '@12333/utils';
+import * as userServices from '@12333/services/apiV2/user';
import Taro from '@tarojs/taro';
-import { useQuery, useQueryClient } from '@tanstack/vue-query';
+import { useQueryClient } from '@tanstack/vue-query';
+import { EnumUserBankCardAccess } from '@12333/constants';
-const userResumeServices = {};
+const { userDetail } = useUser();
const queryClient = useQueryClient();
defineOptions({
name: 'InnerPage',
});
const form = reactive({
- name: '',
+ name: userDetail.value?.name ?? '',
+ identity: userDetail.value?.identity ?? '',
phoneNumber: '',
- verificationCode: '',
-});
-
-const {
- isLoading,
- isError,
- data: detail,
- refetch,
-} = useQuery({
- queryKey: ['userResumeServices/getUserResumeBaseInfo'],
- queryFn: async () => {
- return await userResumeServices.getUserResumeBaseInfo({
- showLoading: false,
- });
- },
- placeholderData: () => ({} as API.UserResumeBaseInfoOutput),
- onSuccess(data) {
- form.name = data.name;
- form.phoneNumber = data.phoneNumber;
- },
+ code: '',
+ bank: '',
+ bankBranch: '',
+ verifyCode: '',
});
const rules = reactive<FormRules>({
- name: [{ required: true, message: '璇疯緭鍏ユ寔鍗′汉' }],
- phoneNumber: [{ required: true, message: '璇疯緭鍏ユ墜鏈哄彿' }],
+ code: [
+ { required: true, message: '璇疯緭鍏ラ摱琛屽崱鍙�' },
+ { message: '璇疯緭鍏ユ纭殑閾惰鍗″彿', validator: FormValidator.validatorBankCard },
+ ],
+ bank: [{ required: true, message: '璇疯緭鍏ュ紑鎴疯' }],
+ phoneNumber: [
+ { required: true, message: '璇峰~鍐欐墜鏈哄彿鐮�' },
+ { message: '璇疯緭鍏ユ纭殑鎵嬫満鍙风爜', validator: FormValidator.validatorPhoneNumber },
+ ],
+ verifyCode: [{ required: true, message: '璇疯緭鍏ラ獙璇佺爜' }],
});
async function onGetCaptcha(phoneNumber: string) {
- await commonServices.sendPhoneCertificationVerificationCode(
+ await userServices.sendSavePersonalUserBankCardVerifyCode(
{
- name: form.name,
- identity: form.name,
- mobile: form.phoneNumber,
- businessType: VerificationCodeBusinessType.UserCertificationPhoneCertification,
+ phoneNumber: form.phoneNumber,
},
{ showLoading: false }
);
@@ -113,20 +103,21 @@
async function confirm() {
try {
- let params: API.SaveUserResumeBaseInfoInput = {
- name: form.name,
+ let params: API.SavePersonalUserBankCardCommand = {
+ code: form.code,
+ bank: form.bank,
phoneNumber: form.phoneNumber,
+ verifyCode: form.verifyCode,
+ access: EnumUserBankCardAccess.Bank,
};
- let res = await userResumeServices.saveUserResumeBaseInfo(params);
+ let res = await userServices.savePersonalUserBankCard(params);
if (res) {
- Message.success('淇濆瓨鎴愬姛', {
+ Message.success('缁戝畾鎴愬姛', {
onClosed() {
Taro.navigateTo({
- url: `${RouterPath.mineCurriculumVitae}`,
+ url: `${RouterPath.bindBankCard}`,
});
- queryClient.invalidateQueries([
- 'taskCheckReceiveServices/getCheckReceiveTaskUserSubmits',
- ]);
+ queryClient.invalidateQueries(['authServices/getPersonalLoginInfo']);
},
});
}
diff --git a/packages/constants/apiEnum.ts b/packages/constants/apiEnum.ts
index df166c7..448f703 100644
--- a/packages/constants/apiEnum.ts
+++ b/packages/constants/apiEnum.ts
@@ -107,6 +107,8 @@
export enum EnumEnterpriseWalletAccess {
/**鏀粯瀹� */
Alipay = 10,
+ /**骞冲畨閾惰 */
+ PingAnPay = 20,
}
/** 浼佷笟閽卞寘浠h繘浠跺崟闄勪欢绫诲瀷 */
@@ -473,6 +475,16 @@
Fail = 40,
}
+/** 鐢ㄦ埛閾惰鍗¢�氶亾 */
+export enum EnumUserBankCardAccess {
+ /**閾惰鍗� */
+ Bank = 1,
+ /**鏀粯瀹� */
+ AliPay = 10,
+ /**寰俊 */
+ WeChatPay = 20,
+}
+
/** 鐢ㄦ埛鎬у埆 */
export enum EnumUserGender {
/**鐢� */
diff --git a/packages/services/apiV2/enterpriseWallet.ts b/packages/services/apiV2/enterpriseWallet.ts
index f47a980..a71c0c5 100644
--- a/packages/services/apiV2/enterpriseWallet.ts
+++ b/packages/services/apiV2/enterpriseWallet.ts
@@ -310,3 +310,15 @@
}
);
}
+
+/** 娴嬭瘯闃块噷鏀粯 POST /api/user/enterpriseWallet/testAliPay */
+export async function testAliPay(body: API.TestAliPayCommand, options?: API.RequestConfig) {
+ return request<string>('/api/user/enterpriseWallet/testAliPay', {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json-patch+json',
+ },
+ data: body,
+ ...(options || {}),
+ });
+}
diff --git a/packages/services/apiV2/typings.d.ts b/packages/services/apiV2/typings.d.ts
index 46326ce..bc18054 100644
--- a/packages/services/apiV2/typings.d.ts
+++ b/packages/services/apiV2/typings.d.ts
@@ -156,8 +156,8 @@
}
interface APIgetPersonalUserBankCardParams {
- /** 鏌ヨ涓汉鐢ㄦ埛閾惰鍗′俊鎭� */
- request?: GetPersonalUserBankCardQuery;
+ /** 閫氶亾 */
+ access?: EnumUserBankCardAccess;
}
interface APIgetPersonalUserElectronSignParams {
@@ -209,6 +209,8 @@
interface APIgetSettlementTaskUsersParams {
/** 缁撶畻璁㈠崟Id */
id?: string;
+ /** 浠诲姟Id */
+ taskInfoId?: string;
}
interface APIgetTaskEnterpriseParams {
@@ -408,6 +410,10 @@
interface DeleteMenuCommand {
ids: string[];
+ }
+
+ interface DeletePersonalUserBankCardCommand {
+ access?: EnumUserBankCardAccess;
}
interface DeleteRoleCommand {
@@ -616,6 +622,8 @@
enum EnumEnterpriseWalletAccess {
/**鏀粯瀹� */
Alipay = 10,
+ /**骞冲畨閾惰 */
+ PingAnPay = 20,
}
enum EnumEnterpriseWalletExpandindirectOrderFileType {
@@ -949,6 +957,15 @@
Success = 30,
/**楠屾敹鏈�氳繃 */
Fail = 40,
+ }
+
+ enum EnumUserBankCardAccess {
+ /**閾惰鍗� */
+ Bank = 1,
+ /**鏀粯瀹� */
+ AliPay = 10,
+ /**寰俊 */
+ WeChatPay = 20,
}
enum EnumUserGender {
@@ -3451,6 +3468,10 @@
/** 鍗忚澶辨晥鏃堕棿 */
invalidTime?: string;
signStatus?: EnumEnterpriseWalletSignStatus;
+ /** 鎵�灞為摱琛� */
+ bank?: string;
+ /** 鎵�灞炴敮琛� */
+ bankBranch?: string;
/** 鏀粯瀹濆鍚� */
name?: string;
/** 鏀粯瀹濈櫥褰曡处鍙� */
@@ -3467,6 +3488,8 @@
/** 闄勪欢 */
files?: GetEnterpriseWalletExpandindirectOrderQueryResultFile[];
expandindirectOrderStatus?: EnumEnterpriseWalletExpandindirectOrderStatus;
+ /** 浣欓 */
+ balance?: number;
}
interface GetEnterpriseWalletTransactionQueryResult {
@@ -3870,6 +3893,8 @@
avatar?: string;
/** 濮撳悕 */
name?: string;
+ /** 韬唤璇佸彿 */
+ identity?: string;
/** 鎵嬫満鍙� */
contactPhoneNumber?: string;
/** 鏄惁瀹炲悕 */
@@ -3886,12 +3911,12 @@
hireRefuseTaskCount?: number;
/** 浣欓 */
balance?: number;
+ /** 宸茬粦瀹氱殑閾惰鍗¢�氶亾 */
+ bankCardAAccesses?: EnumUserBankCardAccess[];
}
- type GetPersonalUserBankCardQuery = Record<string, any>;
-
interface GetPersonalUserBankCardQueryResult {
- access?: EnumEnterpriseWalletAccess;
+ access?: EnumUserBankCardAccess;
/** 閾惰鍗″彿 */
code?: string;
/** 鎵�灞為摱琛� */
@@ -4497,6 +4522,12 @@
settlementStatus?: EnumTaskSettlementStatus;
/** 缁撶畻鏃堕棿 */
settlementTime?: string;
+ /** 缁撶畻娴佹按鍙� */
+ orderCode?: string;
+ /** 鍒涘缓鏃堕棿 */
+ createdTime?: string;
+ /** 鐢靛瓙鏀舵嵁涓嬭浇閾炬帴 */
+ ereceiptDownloadOssUrl?: string;
}
interface GetTaskEnterpriseQueryResult {
@@ -4701,6 +4732,7 @@
/** 鎺ㄨ崘鏃堕棿 */
recommendTime?: string;
hireStatus?: EnumTaskUserHireStatus;
+ settlementStatus?: EnumTaskSettlementStatus;
/** 鍙戝竷鏃堕棿 */
createdTime?: string;
}
@@ -5163,6 +5195,14 @@
/** 浼佷笟Id */
enterpriseId?: string;
access?: EnumEnterpriseWalletAccess;
+ /** 鎵�灞為摱琛� */
+ bank?: string;
+ /** 鎵�灞炴敮琛� */
+ bankBranch?: string;
+ /** 濮撳悕 */
+ name?: string;
+ /** 璐﹀彿 */
+ identity?: string;
}
interface OpenEnterpriseWalletCommandResult {
@@ -5578,7 +5618,7 @@
}
interface SavePersonalUserBankCardCommand {
- access?: EnumEnterpriseWalletAccess;
+ access?: EnumUserBankCardAccess;
/** 閾惰鍗″彿 */
code?: string;
/** 鎵�灞為摱琛� */
@@ -5587,6 +5627,8 @@
bankBranch?: string;
/** 閾惰棰勭暀鎵嬫満鍙� */
phoneNumber?: string;
+ /** 楠岃瘉鐮� */
+ verifyCode?: string;
}
interface SaveRoleCommand {
@@ -5759,6 +5801,11 @@
identity: string;
}
+ interface SendSavePersonalUserBankCardVerifyCodeCommand {
+ /** 鎵嬫満鍙风爜 */
+ phoneNumber: string;
+ }
+
interface SetDictionaryDataIsDisabledCommand {
ids?: string[];
/** 鏄惁宸茬鐢� */
@@ -5879,6 +5926,7 @@
interface SureTaskSettlementCommand {
/** 浠诲姟Id */
taskInfoId?: string;
+ settlementAccess?: EnumEnterpriseWalletAccess;
}
type SyncDatabaseCommand = Record<string, any>;
@@ -6006,6 +6054,11 @@
remark?: string;
}
+ interface TestAliPayCommand {
+ code?: string;
+ freezeNo?: string;
+ }
+
interface UpdatePhoneNumberVerifyCodeCommand {
/** 鎵嬫満鍙风爜 */
phoneNumber: string;
diff --git a/packages/services/apiV2/user.ts b/packages/services/apiV2/user.ts
index d06c228..10561c9 100644
--- a/packages/services/apiV2/user.ts
+++ b/packages/services/apiV2/user.ts
@@ -2,6 +2,21 @@
// @ts-ignore
import { request } from '@/utils/request';
+/** 鍒犻櫎鐢ㄦ埛閾惰鍗′俊鎭� DELETE /api/user/user/deletePersonalUserBankCard */
+export async function deletePersonalUserBankCard(
+ body: API.DeletePersonalUserBankCardCommand,
+ options?: API.RequestConfig
+) {
+ return request<number>('/api/user/user/deletePersonalUserBankCard', {
+ method: 'DELETE',
+ headers: {
+ 'Content-Type': 'application/json-patch+json',
+ },
+ data: body,
+ ...(options || {}),
+ });
+}
+
/** 鏌ヨ杩愯惀绔敤鎴峰垎椤靛垪琛ㄦ暟鎹� POST /api/user/user/getOperationUserInfos */
export async function getOperationUserInfos(
body: API.GetOperationUserInfosQuery,
@@ -30,8 +45,6 @@
method: 'GET',
params: {
...params,
- request: undefined,
- ...params['request'],
},
...(options || {}),
});
@@ -154,6 +167,21 @@
});
}
+/** 鍙戦�佺粦瀹氶摱琛屽崱鐭俊 POST /api/user/user/sendSavePersonalUserBankCardVerifyCode */
+export async function sendSavePersonalUserBankCardVerifyCode(
+ body: API.SendSavePersonalUserBankCardVerifyCodeCommand,
+ options?: API.RequestConfig
+) {
+ return request<string>('/api/user/user/sendSavePersonalUserBankCardVerifyCode', {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json-patch+json',
+ },
+ data: body,
+ ...(options || {}),
+ });
+}
+
/** 璁剧疆鐢ㄦ埛淇℃伅瑙掕壊 PUT /api/user/user/setUserInfoRoles */
export async function setUserInfoRoles(
body: API.SetUserInfoRolesCommand,
diff --git a/packages/utils/common.ts b/packages/utils/common.ts
index a420b99..a02170f 100644
--- a/packages/utils/common.ts
+++ b/packages/utils/common.ts
@@ -136,6 +136,11 @@
return realIDNumber.replace(/^(\d+)(.{6})$/, '$1******');
};
+export const showBankCodeForEnd4 = (bankCode: string) => {
+ if (!bankCode) return '';
+ return '*'.repeat(Math.max(0, bankCode.length - 4)) + bankCode.slice(-4);
+};
+
export const hiddenPhone = (phone: string) => {
if (!phone) return '';
return phone.replace(/(\d{3})\d{4}(\d{4})/, '$1****$2');
diff --git a/packages/utils/validator.ts b/packages/utils/validator.ts
index f4ba102..4e7864e 100644
--- a/packages/utils/validator.ts
+++ b/packages/utils/validator.ts
@@ -98,6 +98,13 @@
}
return Promise.reject(ruleCfg.message);
}
+ static validatorBankCard(value: string, ruleCfg: FormItemRuleWithoutValidator) {
+ if (!ruleCfg.required && !value) return Promise.resolve(true);
+ if (BoleRegExp.RegBankCard.test(value)) {
+ return Promise.resolve(true);
+ }
+ return Promise.reject(ruleCfg.message);
+ }
}
export class BoleRegExp {
--
Gitblit v1.9.1