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