From 8550c7090368487be0a9f13ff5ff955b1ae9d028 Mon Sep 17 00:00:00 2001
From: zhengyiming <540361168@qq.com>
Date: 星期二, 11 十一月 2025 16:45:11 +0800
Subject: [PATCH] Merge branch 'dev-1.3.0.2' of http://120.26.58.240:8888/r/flexJobUndertake into dev-1.3.0.2
---
src/views/EmploymentManage/EmploymentSignList.vue | 52 +-
src/views/FlexJobManage/FlexJobManage.vue | 31 +
src/views/FlexJobManage/constants/columns.ts | 96 +++++
src/views/FlexJobManage/FlexJobContractManage.vue | 618 ++++++++++++++++++++++++++++++++++++++
src/views/FlexJobManage/components/StaffInfoDialog.vue | 51 +-
src/views/EmploymentManage/TaskManageList.vue | 110 +++---
6 files changed, 838 insertions(+), 120 deletions(-)
diff --git a/src/views/EmploymentManage/EmploymentSignList.vue b/src/views/EmploymentManage/EmploymentSignList.vue
index 985ca43..cbd0382 100644
--- a/src/views/EmploymentManage/EmploymentSignList.vue
+++ b/src/views/EmploymentManage/EmploymentSignList.vue
@@ -71,32 +71,32 @@
onClick: (role) => openDialog(role),
},
},
- // {
- // data: {
- // enCode: 'recruitBtn',
- // name: '褰曠敤',
- // },
- // emits: {
- // onClick: (role) => setTaskUserHire(role, EnumTaskUserHireStatus.Pass),
- // },
- // extraProps: {
- // hide: (row: API.GetTaskUsersQueryResultItem) =>
- // row.hireStatus === EnumTaskUserHireStatus.Pass,
- // },
- // },
- // {
- // data: {
- // enCode: 'refuseBtn',
- // name: '璋㈢粷',
- // },
- // emits: {
- // onClick: (role) => setTaskUserHire(role, EnumTaskUserHireStatus.Refuse),
- // },
- // extraProps: {
- // hide: (row: API.GetTaskUsersQueryResultItem) =>
- // row.hireStatus !== EnumTaskUserHireStatus.Wait,
- // },
- // },
+ {
+ data: {
+ enCode: 'recruitBtn',
+ name: '褰曠敤',
+ },
+ emits: {
+ onClick: (role) => setTaskUserHire(role, EnumTaskUserHireStatus.Pass),
+ },
+ extraProps: {
+ hide: (row: API.GetTaskUsersQueryResultItem) =>
+ row.hireStatus === EnumTaskUserHireStatus.Pass,
+ },
+ },
+ {
+ data: {
+ enCode: 'refuseBtn',
+ name: '璋㈢粷',
+ },
+ emits: {
+ onClick: (role) => setTaskUserHire(role, EnumTaskUserHireStatus.Refuse),
+ },
+ extraProps: {
+ hide: (row: API.GetTaskUsersQueryResultItem) =>
+ row.hireStatus !== EnumTaskUserHireStatus.Wait,
+ },
+ },
]);
const router = useRouter();
diff --git a/src/views/EmploymentManage/TaskManageList.vue b/src/views/EmploymentManage/TaskManageList.vue
index e3a9b20..929134e 100644
--- a/src/views/EmploymentManage/TaskManageList.vue
+++ b/src/views/EmploymentManage/TaskManageList.vue
@@ -36,14 +36,14 @@
<SearchInput
v-model="extraParamState.keywords"
style="width: 260px"
- placeholder="浠诲姟鍚嶇О"
+ placeholder="浠诲姟鍚嶇О/瀹㈡埛"
@on-click-search="getList"
>
</SearchInput>
</QueryFilterItem>
</template>
<template #btn>
- <!-- <el-button @click="goAddOrEdit()" type="primary">鍙戝竷</el-button> -->
+ <el-button @click="goAddOrEdit()" type="primary">鍙戝竷</el-button>
</template>
</ProTableQueryFilterBar>
<ProTableV2
@@ -124,18 +124,18 @@
};
const operationBtns = defineOperationBtns([
- // {
- // data: {
- // enCode: 'editBtn',
- // name: '缂栬緫',
- // },
- // emits: {
- // onClick: (role) => goAddOrEdit(role),
- // },
- // extraProps: {
- // hide: (row: API.GetTaskInfosQueryResultItem) => row.status === EnumTaskStatus.Complete,
- // },
- // },
+ {
+ data: {
+ enCode: 'editBtn',
+ name: '缂栬緫',
+ },
+ emits: {
+ onClick: (role) => goAddOrEdit(role),
+ },
+ extraProps: {
+ hide: (row: API.GetTaskInfosQueryResultItem) => row.status === EnumTaskStatus.Complete,
+ },
+ },
{
data: {
enCode: 'detailBtn',
@@ -145,47 +145,47 @@
onClick: (row: API.GetTaskInfosQueryResultItem) => goDetail(row),
},
},
- // {
- // data: {
- // enCode: 'publishBtn',
- // name: '鍙戝竷',
- // },
- // emits: {
- // onClick: (row: API.GetTaskInfosQueryResultItem) =>
- // setTaskInfoReleaseStatus(row, EnumTaskReleaseStatus.InProcess),
- // },
- // extraProps: {
- // hide: (row: API.GetTaskInfosQueryResultItem) =>
- // row.releaseStatus === EnumTaskReleaseStatus.InProcess,
- // },
- // },
- // {
- // data: {
- // enCode: 'unPublishBtn',
- // name: '鍋滄鍙戝竷',
- // },
- // emits: {
- // onClick: (row: API.GetTaskInfosQueryResultItem) =>
- // setTaskInfoReleaseStatus(row, EnumTaskReleaseStatus.Stopped),
- // },
- // extraProps: {
- // hide: (row: API.GetTaskInfosQueryResultItem) =>
- // row.releaseStatus === EnumTaskReleaseStatus.Stopped,
- // },
- // },
- // {
- // data: {
- // enCode: 'arrangeBtn',
- // name: '瀹夋帓',
- // },
- // emits: {
- // onClick: (row: API.GetTaskInfosQueryResultItem) => handleArrange(row),
- // },
- // extraProps: {
- // hide: (row: API.GetTaskInfosQueryResultItem) =>
- // row.releaseStatus === EnumTaskReleaseStatus.Stopped,
- // },
- // },
+ {
+ data: {
+ enCode: 'publishBtn',
+ name: '鍙戝竷',
+ },
+ emits: {
+ onClick: (row: API.GetTaskInfosQueryResultItem) =>
+ setTaskInfoReleaseStatus(row, EnumTaskReleaseStatus.InProcess),
+ },
+ extraProps: {
+ hide: (row: API.GetTaskInfosQueryResultItem) =>
+ row.releaseStatus === EnumTaskReleaseStatus.InProcess,
+ },
+ },
+ {
+ data: {
+ enCode: 'unPublishBtn',
+ name: '鍋滄鍙戝竷',
+ },
+ emits: {
+ onClick: (row: API.GetTaskInfosQueryResultItem) =>
+ setTaskInfoReleaseStatus(row, EnumTaskReleaseStatus.Stopped),
+ },
+ extraProps: {
+ hide: (row: API.GetTaskInfosQueryResultItem) =>
+ row.releaseStatus === EnumTaskReleaseStatus.Stopped,
+ },
+ },
+ {
+ data: {
+ enCode: 'arrangeBtn',
+ name: '瀹夋帓',
+ },
+ emits: {
+ onClick: (row: API.GetTaskInfosQueryResultItem) => handleArrange(row),
+ },
+ extraProps: {
+ hide: (row: API.GetTaskInfosQueryResultItem) =>
+ row.releaseStatus === EnumTaskReleaseStatus.Stopped,
+ },
+ },
]);
const router = useRouter();
diff --git a/src/views/FlexJobManage/FlexJobContractManage.vue b/src/views/FlexJobManage/FlexJobContractManage.vue
new file mode 100644
index 0000000..f12bbf1
--- /dev/null
+++ b/src/views/FlexJobManage/FlexJobContractManage.vue
@@ -0,0 +1,618 @@
+<template>
+ <LoadingLayout :loading="state.loading">
+ <AppContainer>
+ <ProTableQueryFilterBar @on-reset="reset">
+ <template #query>
+ <QueryFilterItem tip-content="鐏靛伐绛剧害鐘舵��">
+ <FieldSelect
+ v-model="extraParamState.userSignContractStatus"
+ :value-enum="EnumTaskUserSignContractStatusText"
+ placeholder="璇烽�夋嫨鐏靛伐绛剧害鐘舵��"
+ clearable
+ @change="getList()"
+ />
+ </QueryFilterItem>
+ <QueryFilterItem tip-content="浼佷笟绛剧害鐘舵��">
+ <FieldSelect
+ v-model="extraParamState.enterpriseSignContractStatus"
+ :value-enum="EnumTaskUserSignContractStatusText"
+ placeholder="璇烽�夋嫨浼佷笟绛剧害鐘舵��"
+ clearable
+ @change="getList()"
+ />
+ </QueryFilterItem>
+ <QueryFilterItem>
+ <FieldDatePicker
+ v-model="extraParamState.signContractTime"
+ type="daterange"
+ range-separator="~"
+ start-placeholder="璧峰鏃ユ湡"
+ end-placeholder="鎴鏃ユ湡"
+ clearable
+ @change="getList()"
+ tooltipContent="鐏靛伐绛剧害鏃堕棿"
+ ></FieldDatePicker>
+ </QueryFilterItem>
+ <QueryFilterItem>
+ <FieldDatePicker
+ v-model="extraParamState.signContractTime"
+ type="daterange"
+ range-separator="~"
+ start-placeholder="璧峰鏃ユ湡"
+ end-placeholder="鎴鏃ユ湡"
+ clearable
+ @change="getList()"
+ tooltipContent="浼佷笟绛剧害鏃堕棿"
+ ></FieldDatePicker>
+ </QueryFilterItem>
+ <QueryFilterItem>
+ <SearchInput
+ v-model="extraParamState.searchWord"
+ style="width: 300px"
+ placeholder="濮撳悕/鎵嬫満/韬唤璇佸彿"
+ @on-click-search="getList"
+ @keyup.enter="getList()"
+ >
+ </SearchInput>
+ </QueryFilterItem>
+ </template>
+ <template #btn>
+ <!-- <el-button @click="handleDownloadTemplate()" type="primary" link>妯℃澘涓嬭浇</el-button> -->
+ <!-- <el-button @click="handleBatchImportAdd()" type="primary">鎵归噺瀵煎叆</el-button> -->
+ <!-- <el-button @click="handleStaffInfoAdd()" type="primary">鏂板缓</el-button> -->
+ <el-button @click="handleBatchUnSign()" type="primary">鎵归噺瑙g害</el-button>
+ <el-button @click="handleSendShotMessage()" type="primary">鐭俊鍙戦��</el-button>
+ <el-button @click="handleBatchSign()" type="primary">鎵归噺绛剧害</el-button>
+ <!-- <el-button @click="handleEnterpriseBatchSign()" type="primary">鎵归噺浼佷笟绛剧害</el-button> -->
+ </template>
+ </ProTableQueryFilterBar>
+ <ProTableV2
+ v-bind="proTableProps"
+ :columns="FlexJobContractManageColumns"
+ :operationBtns="operationBtns"
+ show-column-check
+ ref="proTable"
+ :table-props="{
+ rowKey: 'id',
+ }"
+ >
+ </ProTableV2>
+ </AppContainer>
+ <StaffInfoDialog v-bind="dialogStaffInfoProps" />
+ <StaffDetailInfoDialog v-bind="dialogStaffDetailProps" />
+ <BatchImportDialog
+ v-bind="dialogBatchImportProps"
+ @onDownloadTemplate="handleDownloadTemplate"
+ />
+ <SendShotMessageDialog v-bind="dialogShotMessageProps" />
+ <SignDialog v-bind="dialogSignProps" />
+ </LoadingLayout>
+</template>
+
+<script setup lang="ts">
+import {
+ ProTableQueryFilterBar,
+ OperationBtnType,
+ ProTableV2,
+ SearchInput,
+ LoadingLayout,
+ AppContainer,
+ QueryFilterItem,
+ useTable,
+ FieldDatePicker,
+ FieldRadio,
+ FieldSelect,
+ defineOperationBtns,
+ useFormDialog,
+ UploadUserFile,
+ XLSXUtils,
+} from '@bole-core/components';
+import { FlexJobContractManageColumns } from './constants';
+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 StaffDetailInfoDialog from './components/StaffDetailInfoDialog.vue';
+import SignDialog from './components/SignDialog.vue';
+import * as enterpriseEmployeeServices from '@/services/api/enterpriseEmployee';
+import { ModelValueType } from 'element-plus';
+import _ from 'lodash';
+
+defineOptions({
+ name: 'FlexJobContractManage',
+});
+
+const operationBtns = defineOperationBtns([
+ // {
+ // data: {
+ // enCode: 'editBtn',
+ // name: '缂栬緫',
+ // },
+ // emits: {
+ // onClick: (role) => openDialog(role),
+ // },
+ // },
+ {
+ data: {
+ enCode: 'detailBtn',
+ name: '璇︽儏',
+ },
+ emits: {
+ onClick: (role: API.GetEnterpriseEmployeesQueryResultItem) =>
+ handleStaffDetailEdit({ id: role.id, tabType: 'info' }),
+ },
+ },
+ {
+ data: {
+ enCode: 'enterpriseSignBtn',
+ name: '浼佷笟绛剧害',
+ },
+ emits: {
+ onClick: (role) => handleEnterpriseSign(role),
+ },
+ extraProps: {
+ hide: (row: API.GetEnterpriseEmployeesQueryResultItem) =>
+ !(
+ row.userSignContractStatus === EnumTaskUserSignContractStatus.Pass &&
+ row.enterpriseSignContractStatus === EnumTaskUserSignContractStatus.Wait
+ ),
+ },
+ },
+ {
+ data: {
+ enCode: 'inviteSignBtn',
+ name: '閭�璇风绾�',
+ },
+ emits: {
+ onClick: (role) => handleInviteSign(role),
+ },
+ extraProps: {
+ hide: (row: API.GetEnterpriseEmployeesQueryResultItem) =>
+ !(
+ row.userSignContractStatus !== EnumTaskUserSignContractStatus.Pass &&
+ row.hireStatus === EnumTaskUserHireStatus.Pass
+ ),
+ },
+ },
+ {
+ data: {
+ enCode: 'unSignBtn',
+ name: '瑙g害',
+ },
+ emits: {
+ onClick: (role) => handleUnSign(role),
+ },
+ extraProps: {
+ hide: (row: API.GetEnterpriseEmployeesQueryResultItem) =>
+ !(
+ row.userSignContractStatus === EnumTaskUserSignContractStatus.Pass &&
+ row.enterpriseSignContractStatus === EnumTaskUserSignContractStatus.Pass
+ ),
+ },
+ },
+ // {
+ // data: {
+ // enCode: 'delBtn',
+ // name: '鍒犻櫎',
+ // },
+ // props: { type: 'danger' },
+ // emits: {
+ // onClick: (role) => handleDelete(role),
+ // },
+ // },
+]);
+
+const router = useRouter();
+
+const BaseState = {
+ loading: true,
+};
+
+const state = reactive({ ...BaseState });
+
+onMounted(async () => {
+ await getList();
+ 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 proTable = ref<InstanceType<typeof ProTableV2>>();
+
+function getSelectionRows() {
+ if (proTableProps.value.tableData.length) {
+ const res = proTable.value.innerTableRef.getSelectionRows();
+ if (res.length > 0) {
+ return res;
+ } else {
+ Message.errorMessage('鏈�夋嫨鏁版嵁');
+ }
+ } else {
+ Message.errorMessage('鏆傛棤鏁版嵁');
+ }
+}
+
+const {
+ dialogProps: dialogStaffInfoProps,
+ handleEdit: handleStaffInfoEdit,
+ handleAdd: handleStaffInfoAdd,
+ editForm: staffInfoEditForm,
+} = useFormDialog({
+ onConfirm: handleAddOrEdit,
+ defaultFormParams: {
+ id: '',
+ name: '',
+ identity: '',
+ contactPhoneNumber: '',
+ gender: EnumUserGender.Male,
+ age: null as any as number,
+ identityImg: [] as UploadUserFile[],
+ identityBackImg: [] as UploadUserFile[],
+ contractUrl: [] as UploadUserFile[],
+ regiterTime: '',
+ userRealTime: '',
+ userSignContractTime: '',
+ isDetail: false,
+ },
+});
+
+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() {
+ 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,
+ handleAdd: handleBatchImportAdd,
+ editForm: batchImportForm,
+} = useFormDialog({
+ onConfirm: handleBatchImport,
+ defaultFormParams: {
+ url: [] as UploadUserFile[],
+ },
+});
+
+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: '',
+ contractTemplateId: '',
+ },
+});
+
+async function handleSendShotMessage() {
+ try {
+ const selectionRows = getSelectionRows();
+ if (selectionRows) {
+ if (
+ selectionRows.some((x) => x.userSignContractStatus === EnumTaskUserSignContractStatus.Pass)
+ ) {
+ await Message.tipMessage('鍕鹃�変汉鍛樹腑鍖呭惈宸茬绾﹀畬鎴愪汉鍛橈紝纭瑕佺户缁彂閫佺煭淇¢�氱煡鍚楋紵');
+ }
+ handleShotMessageAdd({
+ ids: selectionRows.map((x) => x.id),
+ name: '浜哄憳绛剧害閫氶亾鐭俊',
+ });
+ }
+ } catch (error) {}
+}
+
+async function sendMessageForSign() {
+ try {
+ let params: API.SendInviteElectronSignSmsCommand = {
+ ids: editShotMessageForm.ids,
+ contractTemplateId: editShotMessageForm.contractTemplateId,
+ };
+ let res = await enterpriseEmployeeServices.sendInviteElectronSignSms(params);
+ if (res) {
+ Message.successMessage('鐭俊宸插彂閫�');
+ }
+ } catch (error) {}
+}
+
+function handleDownloadTemplate() {
+ downloadFileByUrl(ImportEnterpriseEmployeesTempPath, '鎵归噺瀵煎叆妯℃澘');
+}
+
+const {
+ dialogProps: dialogSignProps,
+ handleAdd: handleSignAdd,
+ handleEdit: handleSignEdit,
+ editForm: signEditForm,
+} = useFormDialog({
+ onConfirm: signContract,
+ defaultFormParams: {
+ ids: [] as string[],
+ contractTemplateId: '',
+ },
+});
+
+function handleInviteSign(row: API.GetEnterpriseEmployeesQueryResultItem) {
+ if (row) {
+ handleSignEdit({
+ ids: [row.id],
+ contractTemplateId: '',
+ });
+ }
+}
+function handleBatchSign() {
+ const selectionRows = getSelectionRows();
+ if (selectionRows) {
+ const hasSigned = selectionRows?.some(
+ (x) =>
+ x.userSignContractStatus === EnumTaskUserSignContractStatus.Pass ||
+ x.enterpriseSignContractStatus === EnumTaskUserSignContractStatus.Pass ||
+ x.hireStatus === EnumTaskUserHireStatus.Wait
+ );
+ if (hasSigned) {
+ Message.warnMessage('鍕鹃�変汉鍛樹腑鍖呭惈宸茬绾﹀畬鎴愭垨鏈綍鐢ㄤ汉鍛�');
+ return;
+ }
+ handleSignAdd({
+ ids: selectionRows.map((x) => x.id),
+ contractTemplateId: '',
+ });
+ }
+}
+
+const handleEnterpriseBatchSign = _.debounce(
+ () => {
+ const selectionRows = getSelectionRows();
+ if (selectionRows) {
+ const hasSigned = selectionRows?.some(
+ (x) =>
+ !(
+ x.userSignContractStatus === EnumTaskUserSignContractStatus.Pass &&
+ x.enterpriseSignContractStatus === EnumTaskUserSignContractStatus.Wait
+ )
+ );
+ if (hasSigned) {
+ Message.warnMessage('鍕鹃�変汉鍛樹腑鍖呭惈宸蹭紒涓氱绾︺�佹湭褰曠敤浜哄憳鎴栨湭绛剧害瀹屾垚浜哄憳');
+ return;
+ }
+ const ids = selectionRows.map((x) => x.id);
+ handleBatchEnterpriseSign(ids);
+ }
+ },
+ 1000,
+ { leading: true, trailing: false }
+);
+
+async function handleBatchEnterpriseSign(ids: string[]) {
+ try {
+ state.loading = true;
+ let res = await enterpriseEmployeeServices.batchEnterpriseSignContract({ ids: ids });
+ if (res) {
+ Message.successMessage('鎿嶄綔鎴愬姛');
+ getList(paginationState.pageIndex);
+ if (res?.errors?.length > 0) {
+ Message.tipMessage('瀛樺湪绛剧害澶辫触鐨勭伒宸ヤ俊鎭暟鎹紝鏄惁瀵煎嚭锛�').then(() => {
+ XLSXUtils.exportToXLSX({
+ workbookDataList: res.errors,
+ fileName: '绛剧害澶辫触鐏靛伐淇℃伅',
+ workbookHeaderMap: {
+ name: '濮撳悕',
+ contactPhoneNumber: '鎵嬫満鍙�',
+ identity: '韬唤璇佸彿',
+ errorMessages: '閿欒淇℃伅',
+ },
+ });
+ });
+ }
+ }
+ } catch (error) {
+ } finally {
+ state.loading = false;
+ }
+}
+
+async function signContract() {
+ try {
+ let params: API.InviteElectronSignCommand = {
+ ids: signEditForm.ids,
+ contractTemplateId: signEditForm.contractTemplateId,
+ };
+ let res = await enterpriseEmployeeServices.inviteElectronSign(params);
+ if (res) {
+ Message.successMessage('鎿嶄綔鎴愬姛');
+ getList(paginationState.pageIndex);
+ }
+ } catch (error) {}
+}
+
+async function handleEnterpriseSign(row: API.GetEnterpriseEmployeesQueryResultItem) {
+ try {
+ let res = await enterpriseEmployeeServices.enterpriseUserElectronSign({ id: row.id });
+ if (res) {
+ window.open(res?.signContractLongUrl, '_blank');
+ }
+ } catch (error) {}
+}
+
+function handleUnSign(row: API.GetEnterpriseEmployeesQueryResultItem) {
+ stopElectronSign([row.id]);
+}
+
+function handleBatchUnSign() {
+ try {
+ const selectionRows = getSelectionRows();
+ if (selectionRows) {
+ const hasUnSigned = selectionRows?.some(
+ (x) => x.enterpriseSignContractStatus !== EnumTaskUserSignContractStatus.Pass
+ );
+ if (hasUnSigned) {
+ Message.warnMessage('鍕鹃�夋暟鎹腑鍖呭惈浼佷笟鏈绾︽垨宸茶В绾︽暟鎹�');
+ return;
+ }
+ stopElectronSign(selectionRows.map((x) => x.id));
+ }
+ } catch (error) {}
+}
+
+async function stopElectronSign(ids: string[]) {
+ try {
+ await Message.tipMessage('纭畾瑙g害鐢ㄦ埛锛�');
+ let res = await enterpriseEmployeeServices.stopElectronSign({ ids: ids });
+ if (res) {
+ Message.successMessage('鎿嶄綔鎴愬姛');
+ getList(paginationState.pageIndex);
+ }
+ } catch (error) {}
+}
+
+const {
+ dialogProps: dialogStaffDetailProps,
+ handleEdit: handleStaffDetailEdit,
+ editForm: staffDetailEditForm,
+} = useFormDialog({
+ defaultFormParams: {
+ id: '',
+ tabType: 'info',
+ },
+});
+
+async function handleDelete(row: API.GetEnterpriseEmployeesQueryResultItem) {
+ try {
+ await Message.deleteMessage();
+ } catch (error) {}
+}
+</script>
diff --git a/src/views/FlexJobManage/FlexJobManage.vue b/src/views/FlexJobManage/FlexJobManage.vue
index 67a3486..75e4801 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()"
>
@@ -329,6 +351,7 @@
const {
dialogProps: dialogStaffInfoProps,
handleEdit: handleStaffInfoEdit,
+ handleAdd: handleStaffInfoAdd,
editForm: staffInfoEditForm,
} = useFormDialog({
onConfirm: handleAddOrEdit,
diff --git a/src/views/FlexJobManage/components/StaffInfoDialog.vue b/src/views/FlexJobManage/components/StaffInfoDialog.vue
index 0dd52d5..c9024f8 100644
--- a/src/views/FlexJobManage/components/StaffInfoDialog.vue
+++ b/src/views/FlexJobManage/components/StaffInfoDialog.vue
@@ -15,8 +15,13 @@
</ProFormItemV2>
</ProFormColItem>
<ProFormColItem :span="12">
- <ProFormItemV2 v-if="form.isDetail" label="鎶ュ悕鏃堕棿锛�" prop="regiterTime">
- <div>{{ format(form.regiterTime, 'YYYY-MM-DD HH:mm') }}</div>
+ <ProFormItemV2 label="鏈嶅姟鍗忚锛�" prop="contractUrl">
+ <ProFormUpload
+ v-model:file-url="form.contractUrl"
+ :limit="1"
+ :limitFileSize="10"
+ accept="jpg/jpeg,png,pdf"
+ ></ProFormUpload>
</ProFormItemV2>
</ProFormColItem>
<ProFormColItem :span="12">
@@ -33,8 +38,18 @@
</ProFormItemV2>
</ProFormColItem>
<ProFormColItem :span="12">
- <ProFormItemV2 v-if="form.isDetail" label="瀹炲悕鏃堕棿锛�" prop="userRealTime">
- <div>{{ format(form.userRealTime, 'YYYY-MM-DD HH:mm') }}</div>
+ <ProFormItemV2
+ label="鍗忚鏃堕棿:"
+ prop="regiterTime"
+ :check-rules="[{ message: '璇烽�夋嫨鍗忚鏃堕棿', type: 'array' }]"
+ >
+ <ProFormDatePicker
+ v-model="form.regiterTime"
+ type="daterange"
+ range-separator="鑷�"
+ start-placeholder="璧峰鏃ユ湡"
+ end-placeholder="缁堟鏃ユ湡"
+ ></ProFormDatePicker>
</ProFormItemV2>
</ProFormColItem>
<ProFormColItem :span="12">
@@ -49,11 +64,7 @@
></ProFormText>
</ProFormItemV2>
</ProFormColItem>
- <ProFormColItem :span="12">
- <ProFormItemV2 v-if="form.isDetail" label="绛剧害鏃堕棿锛�" prop="userSignContractTime">
- <div>{{ format(form.userSignContractTime, 'YYYY-MM-DD HH:mm') }}</div>
- </ProFormItemV2>
- </ProFormColItem>
+ <ProFormColItem :span="12"> </ProFormColItem>
<ProFormColItem :span="12">
<ProFormItemV2
label="鎬у埆锛�"
@@ -68,16 +79,7 @@
></ProFormRadio>
</ProFormItemV2>
</ProFormColItem>
- <ProFormColItem :span="12">
- <ProFormItemV2 v-if="form.isDetail" label="鐢靛瓙鍚堝悓锛�" prop="contractUrl">
- <ProFormUpload
- v-model:file-url="form.contractUrl"
- :limit="1"
- :limitFileSize="10"
- accept="jpg/jpeg,png,pdf"
- ></ProFormUpload>
- </ProFormItemV2>
- </ProFormColItem>
+ <ProFormColItem :span="12"> </ProFormColItem>
<ProFormColItem :span="12">
<ProFormItemV2
label="骞撮緞锛�"
@@ -90,12 +92,8 @@
:min="0"
:max="9999"
placeholder="璇疯緭鍏ュ勾榫�"
- >
- <template #readContent>
- <span v-if="form.age">{{ form.age }}宀�</span>
- <span v-else></span>
- </template>
- </ProFormInputNumber>
+ unit="宀�"
+ />
</ProFormItemV2>
</ProFormColItem>
</ProFormCol>
@@ -129,7 +127,7 @@
<el-button v-if="form.isDetail" @click="emit('onCancel')">鍏抽棴</el-button>
<template v-else>
<el-button type="primary" @click="handleConfirm">鎻愪氦</el-button>
- <el-button @click="handleReset">閲嶇疆</el-button>
+ <!-- <el-button @click="handleReset">閲嶇疆</el-button> -->
<el-button @click="emit('onCancel')">鍙栨秷</el-button>
</template>
</span>
@@ -151,6 +149,7 @@
ProFormRadio,
ProFormUpload,
ProFormInputNumber,
+ ProFormDatePicker,
} from '@bole-core/components';
import { calculateAge, deepClone, format } from '@/utils';
import { EnumUserGender, EnumUserGenderTextForPerson } from '@/constants';
diff --git a/src/views/FlexJobManage/constants/columns.ts b/src/views/FlexJobManage/constants/columns.ts
index 888e286..2076546 100644
--- a/src/views/FlexJobManage/constants/columns.ts
+++ b/src/views/FlexJobManage/constants/columns.ts
@@ -26,11 +26,11 @@
enCode: 'contactPhoneNumber',
name: '鎵嬫満鍙�',
},
- {
- id: '8',
- enCode: 'hireStatus',
- name: '褰曠敤鐘舵��',
- },
+ // {
+ // id: '8',
+ // enCode: 'hireStatus',
+ // name: '褰曠敤鐘舵��',
+ // },
{
id: '9',
enCode: 'userIsReal',
@@ -41,15 +41,93 @@
enCode: 'userSignContractStatus',
name: '鐏靛伐绛剧害鐘舵��',
},
+ // {
+ // id: '11',
+ // enCode: 'hireTime',
+ // name: '褰曠敤鏃堕棿',
+ // },
+ // {
+ // id: '12',
+ // enCode: 'userRealTime',
+ // name: '瀹炲悕鏃堕棿',
+ // },
+ // {
+ // id: '13',
+ // enCode: 'userSignContractTime',
+ // name: '绛剧害鏃堕棿',
+ // },
+ {
+ id: '14',
+ enCode: 'enterpriseSignContractStatus',
+ name: '浼佷笟绛剧害鐘舵��',
+ },
+ // {
+ // id: '15',
+ // enCode: 'enterpriseSignContractTime',
+ // name: '浼佷笟绛剧害鏃堕棿',
+ // },
+ {
+ id: '16',
+ enCode: 'a',
+ name: '鍗忚璧峰',
+ },
+ {
+ id: '17',
+ enCode: 'a',
+ name: '鍗忚缁堟',
+ },
+ {
+ id: '18',
+ enCode: 'a',
+ name: '鐏靛伐鏉ユ簮',
+ },
+]);
+
+export const FlexJobContractManageColumns = defineColumns([
+ {
+ id: '1',
+ enCode: 'name',
+ name: '濮撳悕',
+ },
+ {
+ id: '2',
+ enCode: 'identity',
+ name: '韬唤璇佸彿',
+ },
+ {
+ id: '3',
+ enCode: 'gender',
+ name: '鎬у埆',
+ },
+ {
+ id: '5',
+ enCode: 'age',
+ name: '骞撮緞',
+ },
+ {
+ id: '6',
+ enCode: 'contactPhoneNumber',
+ name: '鎵嬫満鍙�',
+ },
+ {
+ id: '9',
+ enCode: 'userIsReal',
+ name: '瀹炲悕鐘舵��',
+ },
+ {
+ id: '10',
+ enCode: 'userRealTime',
+ name: '瀹炲悕鏃堕棿',
+ },
{
id: '11',
- enCode: 'hireTime',
- name: '褰曠敤鏃堕棿',
+ enCode: 'a',
+ name: '鐏靛伐鏉ユ簮',
},
{
id: '12',
- enCode: 'userRealTime',
- name: '瀹炲悕鏃堕棿',
+ enCode: 'userSignContractStatus',
+ name: '鐏靛伐绛剧害鐘舵��',
},
{
id: '13',
--
Gitblit v1.9.1