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