From b331f884097a2dc5086c8cf043c8c8f52e7640fe Mon Sep 17 00:00:00 2001 From: wupengfei <834520024@qq.com> Date: 星期五, 12 九月 2025 17:34:39 +0800 Subject: [PATCH] Merge branch 'master' into dev-v1.1 --- src/utils/storage/auth.ts | 13 +++ src/views/ServiceChargeManage/components/RechargeEnterpriseWalletDialog.vue | 120 ++++++++++++++++++++++++++++++ .eslintrc-auto-import.json | 1 src/hooks/useUser.ts | 3 src/store/modules/user.ts | 26 ++++++ src/views/ServiceChargeManage/ServiceChargeManage.vue | 26 ++++++ auto-imports.d.ts | 2 src/views/EmploymentManage/CheckReceiveTaskDetail.vue | 2 src/views/EmploymentManage/components/AddOrEditEmploymentView.vue | 4 src/views/ServiceChargeManage/components/AlipayWalletRecharge.vue | 24 ++++++ src/constants/index.ts | 1 src/constants/enterpriseWallet.ts | 5 + 12 files changed, 221 insertions(+), 6 deletions(-) diff --git a/.eslintrc-auto-import.json b/.eslintrc-auto-import.json index 0d2cd9f..58af739 100644 --- a/.eslintrc-auto-import.json +++ b/.eslintrc-auto-import.json @@ -31,6 +31,7 @@ "EnumEnterpriseCostType": true, "EnumEnterpriseRealMethod": true, "EnumEnterpriseWalletAccess": true, + "EnumEnterpriseWalletAccessText": true, "EnumEnterpriseWalletExpandindirectOrderFileType": true, "EnumEnterpriseWalletExpandindirectOrderScene": true, "EnumEnterpriseWalletExpandindirectOrderStatus": true, diff --git a/auto-imports.d.ts b/auto-imports.d.ts index 3eab8bc..cc0b93a 100644 --- a/auto-imports.d.ts +++ b/auto-imports.d.ts @@ -35,6 +35,7 @@ const EnumEnterpriseCostType: typeof import('./src/constants/apiEnum')['EnumEnterpriseCostType'] const EnumEnterpriseRealMethod: typeof import('./src/constants/apiEnum')['EnumEnterpriseRealMethod'] const EnumEnterpriseWalletAccess: typeof import('./src/constants/apiEnum')['EnumEnterpriseWalletAccess'] + const EnumEnterpriseWalletAccessText: typeof import('./src/constants/enterpriseWallet')['EnumEnterpriseWalletAccessText'] const EnumEnterpriseWalletExpandindirectOrderFileType: typeof import('./src/constants/apiEnum')['EnumEnterpriseWalletExpandindirectOrderFileType'] const EnumEnterpriseWalletExpandindirectOrderScene: typeof import('./src/constants/apiEnum')['EnumEnterpriseWalletExpandindirectOrderScene'] const EnumEnterpriseWalletExpandindirectOrderStatus: typeof import('./src/constants/apiEnum')['EnumEnterpriseWalletExpandindirectOrderStatus'] @@ -303,6 +304,7 @@ readonly EnumEnterpriseCostType: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumEnterpriseCostType']> readonly EnumEnterpriseRealMethod: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumEnterpriseRealMethod']> readonly EnumEnterpriseWalletAccess: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumEnterpriseWalletAccess']> + readonly EnumEnterpriseWalletAccessText: UnwrapRef<typeof import('./src/constants/enterpriseWallet')['EnumEnterpriseWalletAccessText']> readonly EnumEnterpriseWalletExpandindirectOrderFileType: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumEnterpriseWalletExpandindirectOrderFileType']> readonly EnumEnterpriseWalletExpandindirectOrderScene: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumEnterpriseWalletExpandindirectOrderScene']> readonly EnumEnterpriseWalletExpandindirectOrderStatus: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumEnterpriseWalletExpandindirectOrderStatus']> diff --git a/src/constants/enterpriseWallet.ts b/src/constants/enterpriseWallet.ts new file mode 100644 index 0000000..525dcbb --- /dev/null +++ b/src/constants/enterpriseWallet.ts @@ -0,0 +1,5 @@ +import { EnumEnterpriseWalletAccess } from './apiEnum'; + +export const EnumEnterpriseWalletAccessText = { + [EnumEnterpriseWalletAccess.Alipay]: '鏀粯瀹�', +}; diff --git a/src/constants/index.ts b/src/constants/index.ts index 47c6248..f466a6b 100644 --- a/src/constants/index.ts +++ b/src/constants/index.ts @@ -13,3 +13,4 @@ export * from './task'; export * from './enterpriseEmployee'; export * from './electronSign'; +export * from './enterpriseWallet'; diff --git a/src/hooks/useUser.ts b/src/hooks/useUser.ts index 49688e7..5587aef 100644 --- a/src/hooks/useUser.ts +++ b/src/hooks/useUser.ts @@ -5,10 +5,11 @@ export function useUser() { const userStore = useUserStore(); - const { userId, userInfo } = storeToRefs(userStore); + const { userId, userInfo, userDetail } = storeToRefs(userStore); return { user: userInfo, userId: userId, + userDetail: userDetail, }; } diff --git a/src/store/modules/user.ts b/src/store/modules/user.ts index 6315021..271d314 100644 --- a/src/store/modules/user.ts +++ b/src/store/modules/user.ts @@ -8,6 +8,9 @@ setUserInfo, getUserInfo, md5Encrypt, + getUserDetail, + setUserDetail, + removeUserDetail, } from '@/utils'; import { resetRouter, router } from '@/router'; import { useTagsViewStoreHook } from './tagsView'; @@ -20,15 +23,18 @@ export interface UserState { token: string; userInfo: API.LoginCommandCallback; + userDetail?: Nullable<API.GetEnterpriseLoginInfoQueryResult>; } function getDefaultState() { const accessToken = getToken(); const userInfo = getUserInfo(); + const userDetail = getUserDetail(); return { token: accessToken, userInfo: userInfo || {}, + userDetail: userDetail, } as UserState; } @@ -57,6 +63,11 @@ setUserInfo(userInfo); }, + setUserDetail(detail: API.GetEnterpriseLoginInfoQueryResult) { + this.userDetail = detail; + setUserDetail(detail); + }, + // 鐢ㄦ埛鐧诲叆 async loginByUsername(params: API.PasswordLoginCommand) { let res = await authServices.passwordLogin( @@ -74,7 +85,21 @@ if (res) { this.setToken(res.accessToken); this.setUserInfo(res); + this.getCurrentUserInfo(); } + }, + + async getCurrentUserInfo() { + try { + let res = await authServices.getEnterpriseLoginInfo({}, { showLoading: false }); + if (res) { + // res.frontStatus = getUserCertificationFrontStatusAdapter( + // res.userCertificationStatus, + // res.userCertificationAuditStatus + // ); + this.setUserDetail(res); + } + } catch (error) {} }, // 鐧诲嚭 娓呯┖缂撳瓨 @@ -82,6 +107,7 @@ return new Promise(async (resolve) => { removeToken(); removeUserInfo(); + removeUserDetail(); this.resetState(); resetRouter(); myClient.removeQueries(); diff --git a/src/utils/storage/auth.ts b/src/utils/storage/auth.ts index 2ba1a31..7dac977 100644 --- a/src/utils/storage/auth.ts +++ b/src/utils/storage/auth.ts @@ -4,6 +4,7 @@ TOKEN_KEY: 'TOKEN__', REFRESH_TOKEN_KEY: 'REFRESH__TOKEN__', USER_INFO_KEY: 'USER__INFO__', + USER_DETAIL_KEY: 'USER_DETAIL_KEY', }; export function getToken() { @@ -41,3 +42,15 @@ export function removeUserInfo() { return storageLocal.removeItem(StorageKey.USER_INFO_KEY); } + +export function getUserDetail() { + return storageLocal.getItem<API.GetEnterpriseLoginInfoQueryResult>(StorageKey.USER_DETAIL_KEY); +} + +export function setUserDetail(userDetail: API.GetEnterpriseLoginInfoQueryResult) { + return storageLocal.setItem(StorageKey.USER_DETAIL_KEY, userDetail); +} + +export function removeUserDetail() { + return storageLocal.removeItem(StorageKey.USER_DETAIL_KEY); +} diff --git a/src/views/EmploymentManage/CheckReceiveTaskDetail.vue b/src/views/EmploymentManage/CheckReceiveTaskDetail.vue index a84d677..a16ce8b 100644 --- a/src/views/EmploymentManage/CheckReceiveTaskDetail.vue +++ b/src/views/EmploymentManage/CheckReceiveTaskDetail.vue @@ -88,7 +88,7 @@ }, extraProps: { hide: (row: API.GetCheckReceiveTaskQueryResultItem) => - row.checkReceiveStatus !== EnumTaskCheckReceiveStatus.WaitCheckReceive, + row.checkReceiveStatus === EnumTaskCheckReceiveStatus.Completed, }, }, { diff --git a/src/views/EmploymentManage/components/AddOrEditEmploymentView.vue b/src/views/EmploymentManage/components/AddOrEditEmploymentView.vue index f251903..c46c0de 100644 --- a/src/views/EmploymentManage/components/AddOrEditEmploymentView.vue +++ b/src/views/EmploymentManage/components/AddOrEditEmploymentView.vue @@ -297,9 +297,9 @@ const form = reactive({ name: '', - billingMethod: EnumBillingMethod.Month, + billingMethod: EnumBillingMethod.Day, serviceFee: null, - settlementCycle: EnumSettlementCycle.Month, + settlementCycle: EnumSettlementCycle.Day, benefits: [] as string[], ageMinLimit: null, ageMaxLimit: null, diff --git a/src/views/ServiceChargeManage/ServiceChargeManage.vue b/src/views/ServiceChargeManage/ServiceChargeManage.vue index e72ac87..b697403 100644 --- a/src/views/ServiceChargeManage/ServiceChargeManage.vue +++ b/src/views/ServiceChargeManage/ServiceChargeManage.vue @@ -89,6 +89,7 @@ </AppContainer> <UploadStatementDialog v-bind="dialogProps" /> <SettleDetailDialog v-bind="dialogSettleProps" /> + <RechargeEnterpriseWalletDialog v-bind="dialogRechargeProps" /> </LoadingLayout> </template> @@ -120,6 +121,7 @@ import { ModelValueType } from 'element-plus'; import UploadStatementDialog from './components/UploadStatementDialog.vue'; import SettleDetailDialog from './components/SettleDetailDialog.vue'; +import RechargeEnterpriseWalletDialog from './components/RechargeEnterpriseWalletDialog.vue'; import { Message } from '@bole-core/core'; defineOptions({ @@ -207,6 +209,8 @@ ]); const router = useRouter(); + +const { userDetail } = useUser(); const eventContext = useGlobalEventContext(); @@ -311,14 +315,32 @@ 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) {} + } catch (error) { + if (error?.info?.errorCode == 's510') { + handleRechargeAdd(); + } + } } +const { + dialogProps: dialogRechargeProps, + handleAdd: handleRechargeAdd, + editForm: rechargeEditForm, +} = useFormDialog({ + defaultFormParams: { + access: EnumEnterpriseWalletAccess.Alipay, + amount: null as number, + remark: '', + }, +}); + function openSettleDialog(row: API.GetSettlementTasksQueryResultItem) { handleSettleEdit({ id: row.id, diff --git a/src/views/ServiceChargeManage/components/AlipayWalletRecharge.vue b/src/views/ServiceChargeManage/components/AlipayWalletRecharge.vue new file mode 100644 index 0000000..66a0078 --- /dev/null +++ b/src/views/ServiceChargeManage/components/AlipayWalletRecharge.vue @@ -0,0 +1,24 @@ +<template> + <ProDialog title="鏀粯瀹濆厖鍊�" v-model="visible" destroy-on-close draggable> + <iframe v-if="form.alipayUrl" width="100%" height="600px" :src="form.alipayUrl"></iframe> + </ProDialog> +</template> + +<script setup lang="ts"> +import { ProDialog } from '@bole-core/components'; + +defineOptions({ + name: 'AlipayWalletRecharge', +}); + +type Form = { + alipayUrl: string; +}; + +const form = defineModel<Form>('form'); +const visible = defineModel({ type: Boolean }); +</script> + +<style lang="scss" scoped> +@use '@/style/common.scss' as *; +</style> diff --git a/src/views/ServiceChargeManage/components/RechargeEnterpriseWalletDialog.vue b/src/views/ServiceChargeManage/components/RechargeEnterpriseWalletDialog.vue new file mode 100644 index 0000000..278fb14 --- /dev/null +++ b/src/views/ServiceChargeManage/components/RechargeEnterpriseWalletDialog.vue @@ -0,0 +1,120 @@ +<template> + <ProDialog + title="閽卞寘鍏呭��" + v-model="visible" + @close="onDialogClose" + destroy-on-close + draggable + :width="700" + > + <ProForm :model="form" ref="dialogForm" label-width="120px"> + <ProFormItemV2 label="閽卞寘閫氶亾:" prop="access" :check-rules="[{ message: '璇烽�夋嫨閽卞寘閫氶亾' }]"> + <ProFormSelect + v-model="form.access" + :valueEnum="EnumEnterpriseWalletAccessText" + placeholder="璇烽�夋嫨閽卞寘閫氶亾" + > + </ProFormSelect> + </ProFormItemV2> + <ProFormItemV2 + label="鍏呭�奸噾棰濓細" + prop="amount" + :check-rules="[{ message: '璇疯緭鍏ュ厖鍊奸噾棰�' }]" + > + <ProFormInputNumber + placeholder="璇疯緭鍏ュ厖鍊奸噾棰�" + v-model.trim="form.amount" + :controls="false" + :min="0" + ></ProFormInputNumber> + </ProFormItemV2> + <ProFormItemV2 label="澶囨敞" prop="remark"> + <ProFormTextArea placeholder="璇疯緭鍏ュ娉�" v-model="form.remark"></ProFormTextArea> + </ProFormItemV2> + </ProForm> + <template #footer> + <span class="dialog-footer"> + <el-button @click="emit('onCancel')">鍙栨秷</el-button> + <el-button type="primary" @click="handleConfirm">纭</el-button> + </span> + </template> + </ProDialog> + <AlipayWalletRecharge v-bind="dialogAlipayWalletProps" /> +</template> + +<script setup lang="ts"> +import { FormInstance } from 'element-plus'; +import { + ProDialog, + ProForm, + ProFormInputNumber, + ProFormItemV2, + ProFormTextArea, + useFormDialog, + ProFormSelect, +} from '@bole-core/components'; +import * as enterpriseWalletServices from '@/services/api/enterpriseWallet'; +import AlipayWalletRecharge from './AlipayWalletRecharge.vue'; +import { EnumEnterpriseWalletAccessText } from '@/constants'; + +defineOptions({ + name: 'RechargeEnterpriseWalletDialog', +}); + +type Form = { + title?: string; + amount: number; + remark: string; + access: EnumEnterpriseWalletAccess; +}; + +const visible = defineModel({ type: Boolean }); + +const form = defineModel<Form>('form'); + +const emit = defineEmits<{ + (e: 'onConfirm'): void; + (e: 'onCancel'): void; +}>(); + +const dialogForm = ref<FormInstance>(); + +const { dialogProps: dialogAlipayWalletProps, handleAdd: handleAlipayWalletAdd } = useFormDialog({ + defaultFormParams: { + alipayUrl: '', + }, +}); + +async function rechargeEnterpriseWallet() { + try { + let params: API.RechargeEnterpriseWalletCommand = { + access: form.value.access, + amount: form.value.amount, + remark: form.value.remark, + }; + let res = await enterpriseWalletServices.rechargeEnterpriseWallet(params); + if (res) { + handleAlipayWalletAdd({ + alipayUrl: res.payUrl, + }); + } + } catch (error) {} +} + +function onDialogClose() { + if (!dialogForm.value) return; + dialogForm.value.resetFields(); +} + +function handleConfirm() { + if (!dialogForm.value) return; + dialogForm.value.validate((valid) => { + if (valid) { + rechargeEnterpriseWallet(); + emit('onConfirm'); + } else { + return; + } + }); +} +</script> -- Gitblit v1.9.1