From 0ca66ba6d5f5d5502211b9d9c7bff036ebd3f1aa Mon Sep 17 00:00:00 2001
From: zhengyiming <540361168@qq.com>
Date: 星期四, 14 八月 2025 16:38:32 +0800
Subject: [PATCH] fix: 验收管理

---
 src/views/FlexJobManage/FlexJobManage.vue |  265 +++++++++++++++++++++++++++++++++++++---------------
 1 files changed, 186 insertions(+), 79 deletions(-)

diff --git a/src/views/FlexJobManage/FlexJobManage.vue b/src/views/FlexJobManage/FlexJobManage.vue
index 79429e4..02de3db 100644
--- a/src/views/FlexJobManage/FlexJobManage.vue
+++ b/src/views/FlexJobManage/FlexJobManage.vue
@@ -5,11 +5,8 @@
         <template #query>
           <QueryFilterItem tip-content="褰曠敤鐘舵��">
             <FieldRadio
-              v-model="extraParamState.flexEnterpriseSettingStatus"
-              :value-enum="[
-                { label: '宸插綍鐢�', value: 1 },
-                { label: '鏈綍鐢�', value: 0 },
-              ]"
+              v-model="extraParamState.hireStatus"
+              :value-enum="EnumTaskUserHireStatusText"
               buttonStyle
               showAllBtn
               @change="getList()"
@@ -17,43 +14,38 @@
           </QueryFilterItem>
           <QueryFilterItem tip-content="瀹炲悕鐘舵��">
             <FieldRadio
-              v-model="extraParamState.flexEnterpriseSettingStatus"
+              v-model="extraParamState.isReal"
               :value-enum="[
-                { label: '宸插疄鍚�', value: 1 },
-                { label: '鏈疄鍚�', value: 0 },
+                { label: '宸插疄鍚�', value: true },
+                { label: '鏈疄鍚�', value: false },
               ]"
               buttonStyle
               showAllBtn
+              :all-btn-value="null"
               @change="getList()"
             />
           </QueryFilterItem>
           <QueryFilterItem tip-content="鐏靛伐绛剧害鐘舵��">
             <FieldSelect
-              v-model="extraParamState.flexEnterpriseSettingStatus"
-              :value-enum="[
-                { label: '宸插疄鍚�', value: 1 },
-                { label: '鏈疄鍚�', value: 0 },
-              ]"
-              buttonStyle
-              showAllBtn
+              v-model="extraParamState.userSignContractStatus"
+              :value-enum="EnumTaskUserSignContractStatusText"
+              placeholder="璇烽�夋嫨鐏靛伐绛剧害鐘舵��"
+              clearable
               @change="getList()"
             />
           </QueryFilterItem>
           <QueryFilterItem tip-content="浼佷笟绛剧害鐘舵��">
             <FieldSelect
-              v-model="extraParamState.flexEnterpriseSettingStatus"
-              :value-enum="[
-                { label: '宸插疄鍚�', value: 1 },
-                { label: '鏈疄鍚�', value: 0 },
-              ]"
-              buttonStyle
-              showAllBtn
+              v-model="extraParamState.enterpriseSignContractStatus"
+              :value-enum="EnumTaskUserSignContractStatusText"
+              placeholder="璇烽�夋嫨浼佷笟绛剧害鐘舵��"
+              clearable
               @change="getList()"
             />
           </QueryFilterItem>
           <QueryFilterItem>
             <FieldDatePicker
-              v-model="extraParamState.flexEnterpriseSettingStatus"
+              v-model="extraParamState.createdTime"
               type="daterange"
               range-separator="~"
               start-placeholder="璧峰鏃ユ湡"
@@ -65,7 +57,7 @@
           </QueryFilterItem>
           <QueryFilterItem>
             <FieldDatePicker
-              v-model="extraParamState.flexEnterpriseSettingStatus"
+              v-model="extraParamState.signContractTime"
               type="daterange"
               range-separator="~"
               start-placeholder="璧峰鏃ユ湡"
@@ -100,6 +92,9 @@
         :operationBtns="operationBtns"
         show-column-check
         ref="proTable"
+        :table-props="{
+          rowKey: 'id',
+        }"
       >
       </ProTableV2>
     </AppContainer>
@@ -108,6 +103,7 @@
       v-bind="dialogBatchImportProps"
       @onDownloadTemplate="handleDownloadTemplate"
     />
+    <SendShotMessageDialog v-bind="dialogShotMessageProps" />
   </LoadingLayout>
 </template>
 
@@ -127,14 +123,17 @@
   defineOperationBtns,
   useFormDialog,
   UploadUserFile,
+  XLSXUtils,
 } from '@bole-core/components';
-import * as flexEnterpriseServices from '@/services/api/FlexEnterprise';
 import { FlexJobManageColumns } from './constants';
-import { FlexEnterpriseSettingStatus, Gender } from '@/constants';
-import { OrderInputType, Message } from '@bole-core/core';
-import { convertApi2FormUrlOnlyOne, downloadFileByUrl } from '@/utils';
+import { EnumTaskUserHireStatusText, EnumTaskUserSignContractStatusText } from '@/constants';
+import { Message } from '@bole-core/core';
+import { convertApi2FormUrlOnlyOne, downloadFileByUrl, format } from '@/utils';
 import StaffInfoDialog from './components/StaffInfoDialog.vue';
 import BatchImportDialog from './components/BatchImportDialog.vue';
+import SendShotMessageDialog from './components/SendShotMessageDialog.vue';
+import * as enterpriseEmployeeServices from '@/services/api/enterpriseEmployee';
+import { ModelValueType } from 'element-plus';
 
 defineOptions({
   name: 'EnterpriseManageList',
@@ -168,7 +167,11 @@
       onClick: (role) => handleSign(role),
     },
     extraProps: {
-      hide: (row) => false,
+      hide: (row: API.GetEnterpriseEmployeesQueryResultItem) =>
+        !(
+          row.userSignContractStatus === EnumTaskUserSignContractStatus.Pass &&
+          row.enterpriseSignContractStatus === EnumTaskUserSignContractStatus.Wait
+        ),
     },
   },
   {
@@ -180,7 +183,11 @@
       onClick: (role) => handleUnSign(role),
     },
     extraProps: {
-      hide: (row) => false,
+      hide: (row: API.GetEnterpriseEmployeesQueryResultItem) =>
+        !(
+          row.userSignContractStatus === EnumTaskUserSignContractStatus.Pass &&
+          row.enterpriseSignContractStatus === EnumTaskUserSignContractStatus.Pass
+        ),
     },
   },
   {
@@ -217,17 +224,30 @@
 } = useTable(
   async ({ pageIndex, pageSize }, extraParamState) => {
     try {
-      let params: API.GetFlexEnterpriseInput = {
+      let params: API.GetEnterpriseEmployeesQuery = {
         pageModel: {
           rows: pageSize,
           page: pageIndex,
           orderInput: extraParamState.orderInput,
         },
-        flexEnterpriseSettingStatus: extraParamState.flexEnterpriseSettingStatus,
-        searchWord: extraParamState.searchWord,
+        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 flexEnterpriseServices.getFlexEnterpriseList(params, {
+      let res = await enterpriseEmployeeServices.getEnterpriseEmployees(params, {
         showLoading: !state.loading,
       });
       return res;
@@ -238,11 +258,30 @@
   {
     defaultExtraParams: {
       searchWord: '',
-      orderInput: [{ property: 'id', order: OrderInputType.Desc }],
-      flexEnterpriseSettingStatus: '' as any as FlexEnterpriseSettingStatus,
+      orderInput: [{ property: 'id', 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: ['flexEnterpriseServices/getFlexEnterpriseList'],
-    columnsRenderProps: {},
+    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' },
+    },
   }
 );
 
@@ -270,45 +309,62 @@
   defaultFormParams: {
     id: '',
     name: '',
-    idNumber: '',
-    phoneNumber: '',
-    genderType: Gender.Male,
-    age: 0,
-    companyId: '',
-    customerId: '',
-    idFrontUrl: [] as UploadUserFile[],
-    idBackUrl: [] as UploadUserFile[],
+    identity: '',
+    contactPhoneNumber: '',
+    gender: EnumUserGender.Male,
+    age: null as any as number,
+    identityImg: [] as UploadUserFile[],
+    identityBackImg: [] as UploadUserFile[],
     contractUrl: [] as UploadUserFile[],
     regiterTime: '',
-    realVerifyTime: '',
-    signTime: '',
+    userRealTime: '',
+    userSignContractTime: '',
     isDetail: false,
   },
 });
 
-function openDialog(row, isDetail = false) {
-  handleStaffInfoEdit({
-    id: row.id,
-    name: row.name,
-    idNumber: row.idNumber,
-    phoneNumber: row.phoneNumber,
-    genderType: Gender.Male,
-    age: row.age ?? 0,
-    companyId: row.companyId,
-    customerId: row.customerId,
-    idFrontUrl: convertApi2FormUrlOnlyOne(row.idFrontUrl),
-    idBackUrl: convertApi2FormUrlOnlyOne(row.idBackUrl),
-    contractUrl: convertApi2FormUrlOnlyOne(row.contractUrl, {
-      fileName: row.contractUrl ? row.contractUrl.split('/').pop() : '鍚堝悓',
-    }),
-    regiterTime: row.regiterTime,
-    realVerifyTime: row.realVerifyTime,
-    signTime: row.signTime,
-    isDetail: isDetail,
-  });
+async function openDialog(row: API.GetEnterpriseEmployeesQueryResultItem, isDetail = false) {
+  try {
+    let detail = await enterpriseEmployeeServices.getEnterpriseEmployee({ id: row.id });
+    handleStaffInfoEdit({
+      id: row.id,
+      name: row.name,
+      identity: row.identity,
+      contactPhoneNumber: row.contactPhoneNumber,
+      gender: detail.gender,
+      age: detail.age ?? null,
+      identityImg: convertApi2FormUrlOnlyOne(detail.identityImg),
+      identityBackImg: convertApi2FormUrlOnlyOne(detail.identityBackImg),
+      contractUrl: convertApi2FormUrlOnlyOne(detail.contractUrl, {
+        fileName: detail.contractUrl ? detail.contractUrl.split('/').pop() : '鍚堝悓',
+      }),
+      regiterTime: detail.applyTime ?? '',
+      userRealTime: row.userRealTime ?? '',
+      userSignContractTime: row.userSignContractTime ?? '',
+      isDetail: isDetail,
+    });
+  } catch (error) {}
 }
 
-async function handleAddOrEdit() {}
+async function handleAddOrEdit() {
+  try {
+    let params: API.EditEnterpriseEmployeeCommand = {
+      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 ?? '',
+      id: staffInfoEditForm.id,
+    };
+    let res = await enterpriseEmployeeServices.editEnterpriseEmployee(params);
+    if (res) {
+      Message.successMessage('鎿嶄綔鎴愬姛');
+      getList(paginationState.pageIndex);
+    }
+  } catch (error) {}
+}
 
 const {
   dialogProps: dialogBatchImportProps,
@@ -317,32 +373,83 @@
 } = useFormDialog({
   onConfirm: handleBatchImport,
   defaultFormParams: {
-    customerId: '',
-    contractTemplateId: '',
-    templateDataId: '',
     url: [] as UploadUserFile[],
-    userList: [],
   },
 });
 
-async function handleBatchImport() {}
+async function handleBatchImport() {
+  try {
+    let params: API.ImportEnterpriseEmployeesCommand = {
+      excelUrl: batchImportForm.url[0]?.path ?? '',
+    };
+    let res = await enterpriseEmployeeServices.importEnterpriseEmployees(params);
+    if (res.failCount > 0) {
+      await Message.tipMessage('瀛樺湪閿欒鏁版嵁锛屾槸鍚﹀鍑猴紵');
+      XLSXUtils.exportToXLSX({
+        workbookDataList: res.errors,
+        fileName: '鐏靛伐鎵归噺瀵煎叆-閿欒鏁版嵁',
+        workbookHeaderMap: {
+          name: '濮撳悕',
+          identity: '韬唤璇佸彿',
+          contactPhoneNumber: '鎵嬫満鍙�',
+          errorMessage: '澶囨敞',
+        },
+      });
+    } else {
+      Message.successMessage('瀵煎叆鎴愬姛');
+      getList();
+    }
+  } catch (error) {}
+}
+
+const {
+  dialogProps: dialogShotMessageProps,
+  handleAdd: handleShotMessageAdd,
+  editForm: editShotMessageForm,
+} = useFormDialog({
+  onConfirm: sendMessageForSign,
+  defaultFormParams: {
+    ids: [] as string[],
+    customerId: '',
+    name: '',
+  },
+});
+
+async function handleSendShotMessage() {
+  try {
+    const selectionRows = getSelectionRows();
+    if (selectionRows) {
+      if (selectionRows.some((x) => x.status === 10)) {
+        await Message.tipMessage('鍕鹃�変汉鍛樹腑鍖呭惈宸茬绾﹀畬鎴愪汉鍛橈紝纭瑕佺户缁彂閫佺煭淇¢�氱煡鍚楋紵');
+      }
+      handleShotMessageAdd({
+        ids: selectionRows.map((x) => x.id),
+        name: '浜哄憳绛剧害閫氶亾鐭俊',
+      });
+    }
+  } catch (error) {}
+}
+
+async function sendMessageForSign() {
+  try {
+  } catch (error) {}
+}
 
 function handleDownloadTemplate() {
-  downloadFileByUrl('', '鎵归噺瀵煎叆妯℃澘');
+  downloadFileByUrl(ImportEnterpriseEmployeesTempPath, '鎵归噺瀵煎叆妯℃澘');
 }
 
 function handleBatchUnSign() {}
-function handleSendShotMessage() {}
 
-function handleSign(row) {}
+function handleSign(row: API.GetEnterpriseEmployeesQueryResultItem) {}
 function handleBatchSign() {}
-async function handleUnSign(row) {
+async function handleUnSign(row: API.GetEnterpriseEmployeesQueryResultItem) {
   try {
     await Message.tipMessage('纭畾瑙g害鐢ㄦ埛锛�');
   } catch (error) {}
 }
 
-async function handleDelete(row) {
+async function handleDelete(row: API.GetEnterpriseEmployeesQueryResultItem) {
   try {
     await Message.deleteMessage();
   } catch (error) {}

--
Gitblit v1.9.1