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

---
 src/views/FlexJobManage/FlexJobManage.vue |  272 +++++++++++++++++++++++++++++++-----------------------
 1 files changed, 155 insertions(+), 117 deletions(-)

diff --git a/src/views/FlexJobManage/FlexJobManage.vue b/src/views/FlexJobManage/FlexJobManage.vue
index 67a3486..da5ec98 100644
--- a/src/views/FlexJobManage/FlexJobManage.vue
+++ b/src/views/FlexJobManage/FlexJobManage.vue
@@ -3,7 +3,7 @@
     <AppContainer>
       <ProTableQueryFilterBar @on-reset="reset">
         <template #query>
-          <QueryFilterItem tip-content="褰曠敤鐘舵��">
+          <!-- <QueryFilterItem tip-content="褰曠敤鐘舵��">
             <FieldRadio
               v-model="extraParamState.hireStatus"
               :value-enum="EnumTaskUserHireStatusText"
@@ -11,7 +11,7 @@
               showAllBtn
               @change="getList()"
             />
-          </QueryFilterItem>
+          </QueryFilterItem> -->
           <QueryFilterItem tip-content="瀹炲悕鐘舵��">
             <FieldRadio
               v-model="extraParamState.isReal"
@@ -19,6 +19,16 @@
                 { label: '宸插疄鍚�', value: true },
                 { label: '鏈疄鍚�', value: false },
               ]"
+              buttonStyle
+              showAllBtn
+              :all-btn-value="null"
+              @change="getList()"
+            />
+          </QueryFilterItem>
+          <QueryFilterItem tip-content="鐏靛伐鏉ユ簮">
+            <FieldRadio
+              v-model="extraParamState.isReal"
+              :value-enum="[]"
               buttonStyle
               showAllBtn
               :all-btn-value="null"
@@ -43,7 +53,7 @@
               @change="getList()"
             />
           </QueryFilterItem>
-          <QueryFilterItem>
+          <!-- <QueryFilterItem>
             <FieldDatePicker
               v-model="extraParamState.createdTime"
               type="daterange"
@@ -66,12 +76,24 @@
               @change="getList()"
               tooltipContent="绛剧害鏃堕棿"
             ></FieldDatePicker>
+          </QueryFilterItem> -->
+          <QueryFilterItem>
+            <FieldDatePicker
+              v-model="extraParamState.createdTime"
+              type="daterange"
+              range-separator="~"
+              start-placeholder="璧峰鏃ユ湡"
+              end-placeholder="鎴鏃ユ湡"
+              clearable
+              @change="getList()"
+              tooltipContent="瀹炲悕鏃堕棿"
+            ></FieldDatePicker>
           </QueryFilterItem>
           <QueryFilterItem>
             <SearchInput
               v-model="extraParamState.searchWord"
               style="width: 300px"
-              placeholder="濮撳悕/鎵嬫満/韬唤璇佸彿/瀹㈡埛"
+              placeholder="濮撳悕/鎵嬫満/韬唤璇佸彿"
               @on-click-search="getList"
               @keyup.enter="getList()"
             >
@@ -81,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 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"
@@ -115,7 +151,7 @@
             @click="handleEnterpriseBatchSign()"
             type="primary"
             >鎵归噺浼佷笟绛剧害</el-button
-          >
+          > -->
         </template>
       </ProTableQueryFilterBar>
       <ProTableV2
@@ -157,6 +193,7 @@
   useFormDialog,
   UploadUserFile,
   XLSXUtils,
+  BlFileUpload,
 } from '@bole-core/components';
 import { EnumTaskUserHireStatusText, EnumTaskUserSignContractStatusText } from '@/constants';
 import { Message } from '@bole-core/core';
@@ -169,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',
@@ -186,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({
@@ -232,6 +270,7 @@
 
 const BaseState = {
   loading: true,
+  flexjobUrl: [] as UploadUserFile[],
 };
 
 const state = reactive({ ...BaseState });
@@ -241,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>>();
 
@@ -329,9 +301,10 @@
 const {
   dialogProps: dialogStaffInfoProps,
   handleEdit: handleStaffInfoEdit,
+  handleAdd: handleStaffInfoAdd,
   editForm: staffInfoEditForm,
 } = useFormDialog({
-  onConfirm: handleAddOrEdit,
+  onConfirm: addEnterpriseEmployee,
   defaultFormParams: {
     id: '',
     name: '',
@@ -345,6 +318,7 @@
     regiterTime: '',
     userRealTime: '',
     userSignContractTime: '',
+    contractTime: [] as unknown as ModelValueType,
     isDetail: false,
   },
 });
@@ -368,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,
@@ -474,6 +472,10 @@
 
 function handleDownloadTemplate() {
   downloadFileByUrl(ImportEnterpriseEmployeesTempPath, '鎵归噺瀵煎叆妯℃澘');
+}
+
+function handleDownloadFlexJobTemplate() {
+  downloadFileByUrl(ImportFlexJobTempPath, '鎵归噺瀵煎叆妯℃澘');
 }
 
 const {
@@ -638,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