From 4be53daa8eda7c2577a101f28c97f8068b71175c Mon Sep 17 00:00:00 2001
From: wupengfei <834520024@qq.com>
Date: 星期三, 12 十一月 2025 14:57:20 +0800
Subject: [PATCH] feat: 1.3.0.2

---
 src/views/FlexJobManage/FlexJobManage.vue |  241 +++++++++++++++++++++++++----------------------
 1 files changed, 128 insertions(+), 113 deletions(-)

diff --git a/src/views/FlexJobManage/FlexJobManage.vue b/src/views/FlexJobManage/FlexJobManage.vue
index 75e4801..b626354 100644
--- a/src/views/FlexJobManage/FlexJobManage.vue
+++ b/src/views/FlexJobManage/FlexJobManage.vue
@@ -103,18 +103,32 @@
         <template #btn>
           <el-button
             v-if="checkSubModuleItemShow('pageButton', 'importBtn')"
-            @click="handleDownloadTemplate()"
+            @click="handleDownloadFlexJobTemplate()"
             type="primary"
             link
             >妯℃澘涓嬭浇</el-button
           >
-          <el-button
+          <BlFileUpload
             v-if="checkSubModuleItemShow('pageButton', 'importBtn')"
-            @click="handleBatchImportAdd()"
-            type="primary"
-            >鎵归噺瀵煎叆</el-button
+            v-model:file-url="state.flexjobUrl"
+            ref="uploadRef"
+            :showTip="false"
+            :show-file-list="false"
+            class="pro-table-operation-btn upload-style-btn"
+            :on-success="(event) => handleUploadSuccess(event)"
+            :limitFileSize="null"
+            :limit="1"
+            accept="xlsx,xls"
           >
+            <el-button text type="primary" class="pro-table-operation-btn">鎵归噺瀵煎叆</el-button>
+          </BlFileUpload>
           <el-button
+            v-if="checkSubModuleItemShow('pageButton', 'addBtn')"
+            @click="handleStaffInfoAdd()"
+            type="primary"
+            >鏂板缓</el-button
+          >
+          <!-- <el-button
             v-if="checkSubModuleItemShow('pageButton', 'batchUnSignBtn')"
             @click="handleBatchUnSign()"
             type="primary"
@@ -137,7 +151,7 @@
             @click="handleEnterpriseBatchSign()"
             type="primary"
             >鎵归噺浼佷笟绛剧害</el-button
-          >
+          > -->
         </template>
       </ProTableQueryFilterBar>
       <ProTableV2
@@ -179,6 +193,7 @@
   useFormDialog,
   UploadUserFile,
   XLSXUtils,
+  BlFileUpload,
 } from '@bole-core/components';
 import { EnumTaskUserHireStatusText, EnumTaskUserSignContractStatusText } from '@/constants';
 import { Message } from '@bole-core/core';
@@ -191,6 +206,7 @@
 import * as enterpriseEmployeeServices from '@/services/api/enterpriseEmployee';
 import { ModelValueType } from 'element-plus';
 import _ from 'lodash';
+import { getEnterpriseEmployeesHooks } from './hooks';
 
 defineOptions({
   name: 'FlexJobManageList',
@@ -208,42 +224,42 @@
         handleStaffDetailEdit({ id: role.id, tabType: 'info' }),
     },
   },
-  enterpriseSignBtn: {
-    emits: {
-      onClick: (role) => handleEnterpriseSign(role),
-    },
-    extraProps: {
-      hide: (row: API.GetEnterpriseEmployeesQueryResultItem) =>
-        !(
-          row.userSignContractStatus === EnumTaskUserSignContractStatus.Pass &&
-          row.enterpriseSignContractStatus === EnumTaskUserSignContractStatus.Wait
-        ),
-    },
-  },
-  inviteSignBtn: {
-    emits: {
-      onClick: (role) => handleInviteSign(role),
-    },
-    extraProps: {
-      hide: (row: API.GetEnterpriseEmployeesQueryResultItem) =>
-        !(
-          row.userSignContractStatus !== EnumTaskUserSignContractStatus.Pass &&
-          row.hireStatus === EnumTaskUserHireStatus.Pass
-        ),
-    },
-  },
-  unSignBtn: {
-    emits: {
-      onClick: (role) => handleUnSign(role),
-    },
-    extraProps: {
-      hide: (row: API.GetEnterpriseEmployeesQueryResultItem) =>
-        !(
-          row.userSignContractStatus === EnumTaskUserSignContractStatus.Pass &&
-          row.enterpriseSignContractStatus === EnumTaskUserSignContractStatus.Pass
-        ),
-    },
-  },
+  // enterpriseSignBtn: {
+  //   emits: {
+  //     onClick: (role) => handleEnterpriseSign(role),
+  //   },
+  //   extraProps: {
+  //     hide: (row: API.GetEnterpriseEmployeesQueryResultItem) =>
+  //       !(
+  //         row.userSignContractStatus === EnumTaskUserSignContractStatus.Pass &&
+  //         row.enterpriseSignContractStatus === EnumTaskUserSignContractStatus.Wait
+  //       ),
+  //   },
+  // },
+  // inviteSignBtn: {
+  //   emits: {
+  //     onClick: (role) => handleInviteSign(role),
+  //   },
+  //   extraProps: {
+  //     hide: (row: API.GetEnterpriseEmployeesQueryResultItem) =>
+  //       !(
+  //         row.userSignContractStatus !== EnumTaskUserSignContractStatus.Pass &&
+  //         row.hireStatus === EnumTaskUserHireStatus.Pass
+  //       ),
+  //   },
+  // },
+  // unSignBtn: {
+  //   emits: {
+  //     onClick: (role) => handleUnSign(role),
+  //   },
+  //   extraProps: {
+  //     hide: (row: API.GetEnterpriseEmployeesQueryResultItem) =>
+  //       !(
+  //         row.userSignContractStatus === EnumTaskUserSignContractStatus.Pass &&
+  //         row.enterpriseSignContractStatus === EnumTaskUserSignContractStatus.Pass
+  //       ),
+  //   },
+  // },
 };
 
 const { checkSubModuleItemShow, column, operationBtns } = useAccess({
@@ -254,6 +270,7 @@
 
 const BaseState = {
   loading: true,
+  flexjobUrl: [] as UploadUserFile[],
 };
 
 const state = reactive({ ...BaseState });
@@ -263,75 +280,8 @@
   state.loading = false;
 });
 
-const {
-  getDataSource: getList,
-  proTableProps,
-  paginationState,
-  extraParamState,
-  reset,
-} = useTable(
-  async ({ pageIndex, pageSize }, extraParamState) => {
-    try {
-      let params: API.GetEnterpriseEmployeesQuery = {
-        pageModel: {
-          rows: pageSize,
-          page: pageIndex,
-          orderInput: extraParamState.orderInput,
-        },
-        keywords: extraParamState.searchWord,
-        createdTimeStart: format(extraParamState.createdTime?.[0] ?? '', 'YYYY-MM-DD 00:00:00'),
-        createdTimeEnd: format(extraParamState.createdTime?.[1] ?? '', 'YYYY-MM-DD 23:59:59'),
-        signContractTimeStart: format(
-          extraParamState.signContractTime?.[0] ?? '',
-          'YYYY-MM-DD 00:00:00'
-        ),
-        signContractTimeEnd: format(
-          extraParamState.signContractTime?.[1] ?? '',
-          'YYYY-MM-DD 23:59:59'
-        ),
-        hireStatus: extraParamState.hireStatus,
-        isReal: extraParamState.isReal,
-        userSignContractStatus: extraParamState.userSignContractStatus,
-        enterpriseSignContractStatus: extraParamState.enterpriseSignContractStatus,
-      };
-
-      let res = await enterpriseEmployeeServices.getEnterpriseEmployees(params, {
-        showLoading: !state.loading,
-      });
-      return res;
-    } catch (error) {
-      console.log('error: ', error);
-    }
-  },
-  {
-    defaultExtraParams: {
-      searchWord: '',
-      orderInput: [{ property: 'createdTime', order: EnumPagedListOrder.Desc }],
-      createdTime: [] as unknown as ModelValueType,
-      signContractTime: [] as unknown as ModelValueType,
-      hireStatus: '' as any as EnumTaskUserHireStatus,
-      isReal: null as any as boolean,
-      userSignContractStatus: '' as any as EnumTaskUserSignContractStatus,
-      enterpriseSignContractStatus: '' as any as EnumTaskUserSignContractStatus,
-    },
-    queryKey: ['enterpriseEmployeeServices/getEnterpriseEmployees'],
-    columnsRenderProps: {
-      gender: { type: 'enum', valueEnum: EnumUserGenderTextForPerson },
-      hireStatus: { type: 'enum', valueEnum: EnumTaskUserHireStatusText },
-      userIsReal: {
-        formatter: (row: API.GetEnterpriseEmployeesQueryResultItem) => {
-          return row.userIsReal ? '宸插疄鍚�' : '鏈疄鍚�';
-        },
-      },
-      userSignContractStatus: { type: 'enum', valueEnum: EnumTaskUserSignContractStatusText },
-      hireTime: { type: 'date' },
-      userRealTime: { type: 'date' },
-      userSignContractTime: { type: 'date' },
-      enterpriseSignContractStatus: { type: 'enum', valueEnum: EnumTaskUserSignContractStatusText },
-      enterpriseSignContractTime: { type: 'date' },
-    },
-  }
-);
+const { getList, proTableProps, paginationState, extraParamState, reset } =
+  getEnterpriseEmployeesHooks();
 
 const proTable = ref<InstanceType<typeof ProTableV2>>();
 
@@ -354,7 +304,7 @@
   handleAdd: handleStaffInfoAdd,
   editForm: staffInfoEditForm,
 } = useFormDialog({
-  onConfirm: handleAddOrEdit,
+  onConfirm: addEnterpriseEmployee,
   defaultFormParams: {
     id: '',
     name: '',
@@ -368,6 +318,7 @@
     regiterTime: '',
     userRealTime: '',
     userSignContractTime: '',
+    contractTime: [] as unknown as ModelValueType,
     isDetail: false,
   },
 });
@@ -391,11 +342,35 @@
       userRealTime: row.userRealTime ?? '',
       userSignContractTime: row.userSignContractTime ?? '',
       isDetail: isDetail,
+
+      contractTime: [row.contractBegin, row.contractEnd],
     });
   } catch (error) {}
 }
 
-async function handleAddOrEdit() {
+async function addEnterpriseEmployee() {
+  try {
+    let params: API.AddEnterpriseEmployeeCommand = {
+      name: staffInfoEditForm.name,
+      identity: staffInfoEditForm.identity,
+      contactPhoneNumber: staffInfoEditForm.contactPhoneNumber,
+      gender: staffInfoEditForm.gender,
+      age: staffInfoEditForm.age,
+      identityImg: staffInfoEditForm.identityImg[0]?.path ?? '',
+      identityBackImg: staffInfoEditForm.identityBackImg[0]?.path ?? '',
+      contractUrl: staffInfoEditForm.contractUrl[0]?.path ?? '',
+      contractBegin: format(staffInfoEditForm.contractTime[0], 'YYYY-MM-DD 00:00:00'),
+      contractEnd: format(staffInfoEditForm.contractTime[1], 'YYYY-MM-DD 23:59:59'),
+    };
+    let res = await enterpriseEmployeeServices.addEnterpriseEmployee(params);
+    if (res) {
+      Message.successMessage('鎿嶄綔鎴愬姛');
+      getList(paginationState.pageIndex);
+    }
+  } catch (error) {}
+}
+
+async function editEnterpriseEmployee() {
   try {
     let params: API.EditEnterpriseEmployeeCommand = {
       name: staffInfoEditForm.name,
@@ -497,6 +472,10 @@
 
 function handleDownloadTemplate() {
   downloadFileByUrl(ImportEnterpriseEmployeesTempPath, '鎵归噺瀵煎叆妯℃澘');
+}
+
+function handleDownloadFlexJobTemplate() {
+  downloadFileByUrl(ImportFlexJobTempPath, '鎵归噺瀵煎叆妯℃澘');
 }
 
 const {
@@ -661,4 +640,40 @@
     await Message.deleteMessage();
   } catch (error) {}
 }
+
+function handleUploadSuccess(response: UploadUserFile & { file: File & { uid: number } }) {
+  if (response.path) {
+    importEnterpriseEmployees(response.path);
+  }
+}
+
+async function importEnterpriseEmployees(excelUrl: string) {
+  try {
+    let params: API.ImportEnterpriseEmployeesCommand = {
+      excelUrl: excelUrl,
+    };
+    let res = await enterpriseEmployeeServices.importEnterpriseEmployees(params);
+    if (res.failCount > 0) {
+      await Message.tipMessage('瀛樺湪閿欒鏁版嵁锛屾槸鍚﹀鍑猴紵');
+      XLSXUtils.exportToXLSX({
+        workbookDataList: res.errors,
+        fileName: '鐏靛伐鎵归噺瀵煎叆-閿欒鏁版嵁',
+        workbookHeaderMap: {
+          name: '濮撳悕',
+          contactPhoneNumber: '鎵嬫満鍙�',
+          identity: '韬唤璇佸彿',
+          contractBegin: '鍗忚璧峰鏃堕棿',
+          contractEnd: '鍗忚缁堟鏃堕棿',
+          errorMessage: '閿欒淇℃伅',
+        },
+      });
+    } else {
+      Message.successMessage('瀵煎叆鎴愬姛');
+      getList();
+    }
+  } catch (error) {
+  } finally {
+    state.flexjobUrl = [] as UploadUserFile[];
+  }
+}
 </script>

--
Gitblit v1.9.1