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,14 +85,29 @@
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) {}
+ },
+
// 鐧诲嚭 娓呯┖缂撳瓨
logout(redirectPath = '/') {
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({
@@ -208,6 +210,8 @@
const router = useRouter();
+const { userDetail } = useUser();
+
const eventContext = useGlobalEventContext();
eventContext.addEvent('sureTaskSettlementOrder', () => {
@@ -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.10.0