From 717f5388cf9c802ed76e87758c49fe78ad9ae5f8 Mon Sep 17 00:00:00 2001 From: wupengfei <834520024@qq.com> Date: 星期三, 30 七月 2025 16:05:31 +0800 Subject: [PATCH] feat: 页面 --- src/views/EmploymentManage/EmploymentSignList.vue | 66 +++++- src/views/EmploymentManage/constants/columns.ts | 49 +++++ src/hooks/useEvent.ts | 4 src/views/EmploymentManage/components/CheckManageDialog.vue | 123 +++++++++++++ src/views/EmploymentManage/TaskManage.vue | 7 src/views/EmploymentManage/components/AddOrEditEmploymentView.vue | 4 src/router/index.ts | 26 ++ src/views/EmploymentManage/CheckManage.vue | 166 ++++++++++++++++++ src/views/EmploymentManage/EmploymentManageArrange.vue | 80 -------- 9 files changed, 417 insertions(+), 108 deletions(-) diff --git a/src/hooks/useEvent.ts b/src/hooks/useEvent.ts index 85b58e5..c8f5a0f 100644 --- a/src/hooks/useEvent.ts +++ b/src/hooks/useEvent.ts @@ -3,8 +3,8 @@ export type GlobalEvent = { 'home:add': any; - 'employment:add': any; - 'employment:edit': any; + 'taskManage:add': any; + 'taskManage:edit': any; }; export type GlobalEventListener<T extends keyof GlobalEvent> = (payload: GlobalEvent[T]) => any; diff --git a/src/router/index.ts b/src/router/index.ts index 6a84aa0..a3b5f8b 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -137,14 +137,14 @@ }, children: [ { - path: '/EmploymentManageList', - name: 'EmploymentManageList', + path: '/TaskManage', + name: 'TaskManage', hidden: false, alwaysShow: true, - component: () => import('@/views/EmploymentManage/EmploymentManage.vue'), + component: () => import('@/views/EmploymentManage/TaskManage.vue'), meta: { rank: 10021, - title: '鐢ㄤ汉绠$悊', + title: '浠诲姟绠$悊', // rootMenu: true, icon: 'home', }, @@ -191,8 +191,8 @@ { path: '/EmploymentManageArrange', name: 'EmploymentManageArrange', - hidden: false, - alwaysShow: true, + hidden: true, + alwaysShow: false, component: () => import('@/views/EmploymentManage/EmploymentManageArrange.vue'), meta: { rank: 10025, @@ -201,6 +201,20 @@ icon: 'home', }, }, + + { + path: '/CheckManage', + name: 'CheckManage', + hidden: false, + alwaysShow: true, + component: () => import('@/views/EmploymentManage/CheckManage.vue'), + meta: { + rank: 10030, + title: '楠屾敹绠$悊', + // rootMenu: true, + icon: 'home', + }, + }, ], }, { diff --git a/src/views/EmploymentManage/CheckManage.vue b/src/views/EmploymentManage/CheckManage.vue new file mode 100644 index 0000000..0fc0ccd --- /dev/null +++ b/src/views/EmploymentManage/CheckManage.vue @@ -0,0 +1,166 @@ +<template> + <LoadingLayout :loading="state.loading"> + <AppContainer> + <ProTableQueryFilterBar @on-reset="reset"> + <template #query> + <QueryFilterItem tip-content="楠屾敹鐘舵��"> + <FieldRadio + v-model="extraParamState.flexEnterpriseSettingStatus" + :value-enum="[ + { label: '宸插畨鎺�', value: 1 }, + { label: '寰呭畨鎺�', value: 0 }, + ]" + buttonStyle + showAllBtn + @change="getList()" + /> + </QueryFilterItem> + <QueryFilterItem> + <FieldDatePicker + v-model="extraParamState.flexEnterpriseSettingStatus" + 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> + </ProTableQueryFilterBar> + <ProTableV2 + v-bind="proTableProps" + :columns="CheckManageColumns" + :operationBtns="operationBtns" + > + </ProTableV2> + </AppContainer> + <CheckManageDialog v-bind="dialogProps" @check="handleCheck" /> + </LoadingLayout> +</template> + +<script setup lang="ts"> +import { + ProTableQueryFilterBar, + ProTableV2, + SearchInput, + LoadingLayout, + AppContainer, + QueryFilterItem, + useTable, + FieldDatePicker, + FieldRadio, + defineOperationBtns, + useFormDialog, +} from '@bole-core/components'; +import * as flexEnterpriseServices from '@/services/api/FlexEnterprise'; +import { CheckManageColumns } from './constants'; +import { FlexEnterpriseSettingStatus, Gender } from '@/constants'; +import { OrderInputType } from '@bole-core/core'; +import CheckManageDialog from './components/CheckManageDialog.vue'; + +defineOptions({ + name: 'CheckManage', +}); + +const operationBtns = defineOperationBtns([ + { + data: { + enCode: 'checkBtn', + name: '楠屾敹', + }, + emits: { + onClick: (role) => openDialog(role, 'check'), + }, + }, + { + data: { + enCode: 'detailBtn', + name: '璇︽儏', + }, + emits: { + onClick: (role) => openDialog(role, 'detail'), + }, + }, +]); + +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.GetFlexEnterpriseInput = { + pageModel: { + rows: pageSize, + page: pageIndex, + orderInput: extraParamState.orderInput, + }, + flexEnterpriseSettingStatus: extraParamState.flexEnterpriseSettingStatus, + searchWord: extraParamState.searchWord, + }; + + let res = await flexEnterpriseServices.getFlexEnterpriseList(params, { + showLoading: !state.loading, + }); + return res; + } catch (error) { + console.log('error: ', error); + } + }, + { + defaultExtraParams: { + searchWord: '', + orderInput: [{ property: 'id', order: OrderInputType.Desc }], + flexEnterpriseSettingStatus: '' as any as FlexEnterpriseSettingStatus, + }, + queryKey: ['flexEnterpriseServices/getFlexEnterpriseList'], + columnsRenderProps: {}, + } +); + +const { dialogProps, handleEdit, editForm } = useFormDialog({ + defaultFormParams: { + id: '', + type: '', + }, +}); + +function openDialog(row, type: string) { + handleEdit({ + id: row.id, + type: type, + }); +} + +function handleCheck(val) { + console.log('val: ', val); +} +</script> diff --git a/src/views/EmploymentManage/EmploymentManageArrange.vue b/src/views/EmploymentManage/EmploymentManageArrange.vue index 69b9636..8a404c1 100644 --- a/src/views/EmploymentManage/EmploymentManageArrange.vue +++ b/src/views/EmploymentManage/EmploymentManageArrange.vue @@ -50,9 +50,6 @@ </SearchInput> </QueryFilterItem> </template> - <template #btn> - <el-button @click="goAddOrEdit()" type="primary">鍙戝竷</el-button> - </template> </ProTableQueryFilterBar> <ProTableV2 v-bind="proTableProps" @@ -80,7 +77,6 @@ import * as flexEnterpriseServices from '@/services/api/FlexEnterprise'; import { EmploymentArrangeColumns } from './constants'; import { OrderInputType, Message } from '@bole-core/core'; -import { useGlobalEventContext } from '@/hooks'; import { FlexEnterpriseSettingStatus } from '@/constants'; defineOptions({ @@ -90,52 +86,9 @@ const operationBtns = defineOperationBtns([ { data: { - enCode: 'editBtn', - name: '缂栬緫', - }, - emits: { - onClick: (role) => goAddOrEdit(role), - }, - }, - { - data: { - enCode: 'detailBtn', - name: '璇︽儏', - }, - emits: { - onClick: (role) => goDetail(role), - }, - }, - { - data: { - enCode: 'publishBtn', - name: '鍙戝竷', - }, - emits: { - onClick: (role) => handlePublish(role), - }, - extraProps: { - hide: (row) => false, - }, - }, - { - data: { - enCode: 'unPublishBtn', - name: '鍋滄鍙戝竷', - }, - emits: { - onClick: (role) => handleUnPublish(role), - }, - extraProps: { - hide: (row) => false, - }, - }, - { - data: { enCode: 'arrangeBtn', name: '瀹夋帓', }, - props: { type: 'danger' }, emits: { onClick: (role) => handleArrange(role), }, @@ -149,16 +102,6 @@ }; const state = reactive({ ...BaseState }); - -const eventContext = useGlobalEventContext(); - -eventContext.addEvent('employment:add', () => { - getList(); -}); - -eventContext.addEvent('employment:edit', () => { - getList(paginationState.pageIndex); -}); onMounted(async () => { await getList(); @@ -203,32 +146,9 @@ } ); -function handlePublish(row) { - console.log(row); -} -function handleUnPublish(row) { - console.log(row); -} - function handleArrange(row) { router.push({ name: 'EmploymentManageArrange', - params: { - id: row?.id ?? '', - }, - }); -} -function goAddOrEdit(row?) { - router.push({ - name: 'AddOrEditEmployment', - params: { - id: row?.id ?? '', - }, - }); -} -function goDetail(row) { - router.push({ - name: 'EmploymentManageDetail', params: { id: row?.id ?? '', }, diff --git a/src/views/EmploymentManage/EmploymentSignList.vue b/src/views/EmploymentManage/EmploymentSignList.vue index 79703e5..d93f2a5 100644 --- a/src/views/EmploymentManage/EmploymentSignList.vue +++ b/src/views/EmploymentManage/EmploymentSignList.vue @@ -19,7 +19,7 @@ <SearchInput v-model="extraParamState.searchWord" style="width: 250px" - placeholder="浠诲姟鍚嶇О" + placeholder="濮撳悕/韬唤璇佸彿/鐢佃瘽" @on-click-search="getList" @keyup.enter="getList()" > @@ -34,6 +34,7 @@ > </ProTableV2> </AppContainer> + <StaffInfoDialog v-bind="dialogStaffInfoProps" /> </LoadingLayout> </template> @@ -46,16 +47,17 @@ AppContainer, QueryFilterItem, useTable, - FieldDatePicker, FieldRadio, defineOperationBtns, + useFormDialog, + UploadUserFile, } from '@bole-core/components'; import * as flexEnterpriseServices from '@/services/api/FlexEnterprise'; import { EmploymentSignColumns } from './constants/columns'; import { OrderInputType, Message } from '@bole-core/core'; -import { useGlobalEventContext } from '@/hooks'; -import { FlexEnterpriseSettingStatus } from '@/constants'; +import { FlexEnterpriseSettingStatus, Gender } from '@/constants'; import StaffInfoDialog from '@/views/FlexJobManage/components/StaffInfoDialog.vue'; +import { convertApi2FormUrlOnlyOne } from '@/utils'; defineOptions({ name: 'EmploymentSignList', @@ -105,16 +107,6 @@ const state = reactive({ ...BaseState }); -const eventContext = useGlobalEventContext(); - -eventContext.addEvent('employment:add', () => { - getList(); -}); - -eventContext.addEvent('employment:edit', () => { - getList(paginationState.pageIndex); -}); - onMounted(async () => { await getList(); state.loading = false; @@ -158,6 +150,52 @@ } ); +const { + dialogProps: dialogStaffInfoProps, + handleEdit: handleStaffInfoEdit, + editForm: staffInfoEditForm, +} = useFormDialog({ + defaultFormParams: { + id: '', + name: '', + idNumber: '', + phoneNumber: '', + genderType: Gender.Male, + age: 0, + companyId: '', + customerId: '', + idFrontUrl: [] as UploadUserFile[], + idBackUrl: [] as UploadUserFile[], + contractUrl: [] as UploadUserFile[], + regiterTime: '', + realVerifyTime: '', + signTime: '', + isDetail: false, + }, +}); + +function openDialog(row) { + 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: true, + }); +} + function handleRecruit(row) {} function handleRefuse(row) {} </script> diff --git a/src/views/EmploymentManage/EmploymentManage.vue b/src/views/EmploymentManage/TaskManage.vue similarity index 97% rename from src/views/EmploymentManage/EmploymentManage.vue rename to src/views/EmploymentManage/TaskManage.vue index e663bc0..651f804 100644 --- a/src/views/EmploymentManage/EmploymentManage.vue +++ b/src/views/EmploymentManage/TaskManage.vue @@ -87,7 +87,7 @@ import { useGlobalEventContext } from '@/hooks'; defineOptions({ - name: 'EmploymentManageList', + name: 'TaskManage', }); const operationBtns = defineOperationBtns([ @@ -138,7 +138,6 @@ enCode: 'arrangeBtn', name: '瀹夋帓', }, - props: { type: 'danger' }, emits: { onClick: (role) => handleArrange(role), }, @@ -155,11 +154,11 @@ const eventContext = useGlobalEventContext(); -eventContext.addEvent('employment:add', () => { +eventContext.addEvent('taskManage:add', () => { getList(); }); -eventContext.addEvent('employment:edit', () => { +eventContext.addEvent('taskManage:edit', () => { getList(paginationState.pageIndex); }); diff --git a/src/views/EmploymentManage/components/AddOrEditEmploymentView.vue b/src/views/EmploymentManage/components/AddOrEditEmploymentView.vue index df33a45..d922bfe 100644 --- a/src/views/EmploymentManage/components/AddOrEditEmploymentView.vue +++ b/src/views/EmploymentManage/components/AddOrEditEmploymentView.vue @@ -170,7 +170,7 @@ function handleBack() { closeViewPush(route, { - name: 'EmploymentManageList', + name: 'TaskManage', }); } const productFormRef = ref<FormInstance>(); @@ -190,7 +190,7 @@ let res; if (res) { Message.successMessage('鎿嶄綔鎴愬姛'); - eventContext.emit(isEdit ? 'employment:edit' : 'employment:add'); + eventContext.emit(isEdit ? 'taskManage:edit' : 'taskManage:add'); handleBack(); } } catch (error) {} diff --git a/src/views/EmploymentManage/components/CheckManageDialog.vue b/src/views/EmploymentManage/components/CheckManageDialog.vue new file mode 100644 index 0000000..1fa427a --- /dev/null +++ b/src/views/EmploymentManage/components/CheckManageDialog.vue @@ -0,0 +1,123 @@ +<template> + <ProDialog :title="title" v-model="visible" destroy-on-close draggable> + <ProDialogTableWrapper :height="400"> + <ProTableV2 v-bind="proTableProps" :columns="columns" :operationBtns="operationBtns"> + </ProTableV2> + </ProDialogTableWrapper> + <template #footer> + <span class="dialog-footer"> + <el-button v-if="form.type === 'detail'" @click="emit('onCancel')" type="primary" + >纭畾</el-button + > + <template v-if="form.type === 'check'"> + <el-button @click="emit('check', false)">楠屾敹鏈�氳繃</el-button> + <el-button type="primary" @click="emit('check', true)">楠屾敹閫氳繃</el-button> + </template> + </span> + </template> + </ProDialog> +</template> + +<script setup lang="ts"> +import { + ProDialog, + ProTableV2, + ProDialogTableWrapper, + defineColumns, + defineOperationBtns, + useTable, +} from '@bole-core/components'; +import { OrderInputType } from '@bole-core/core'; +import * as flexEnterpriseServices from '@/services/api/FlexEnterprise'; + +defineOptions({ + name: 'EnterpriseConsumptionDetailDialog', +}); + +type Form = { + id: string; + type: string; +}; + +const visible = defineModel({ type: Boolean }); +const form = defineModel<Form>('form'); +const title = computed(() => (form.value.type === 'check' ? '楠屾敹' : '璇︽儏')); +const emit = defineEmits<{ + (e: 'onCancel'): void; + (e: 'check', value: boolean): void; +}>(); + +const columns = defineColumns([ + { + id: '1', + enCode: 'creationTime', + name: '鎻愪氦鏃堕棿', + }, + { + id: '2', + enCode: 'type', + name: '楠屾敹鐓х墖', + }, +]); + +const operationBtns = defineOperationBtns([ + { + data: { + enCode: 'downloadBtn', + name: '涓嬭浇', + }, + emits: { + onClick: (role) => handleDownload(role), + }, + }, +]); + +watch( + () => visible.value, + (val) => { + if (val) { + getList(); + } + }, + { + immediate: true, + } +); + +const { + getDataSource: getList, + proTableProps, + paginationState, + extraParamState, + reset, +} = useTable( + async ({ pageIndex, pageSize }, extraParamState) => { + try { + let params: API.GetFlexEnterpriseInput = { + pageModel: { + rows: pageSize, + page: pageIndex, + orderInput: extraParamState.orderInput, + }, + }; + let res = await flexEnterpriseServices.getFlexEnterpriseList(params); + return res; + } catch (error) { + console.log('error: ', error); + } + }, + { + defaultExtraParams: { + orderInput: [{ property: 'id', order: OrderInputType.Desc }], + }, + queryKey: ['flexEnterpriseServices/getFlexEnterpriseList'], + columnsRenderProps: {}, + } +); + +function handleDownload(row) {} +</script> + +<style lang="scss" scoped> +@use '@/style/common.scss' as *; +</style> diff --git a/src/views/EmploymentManage/constants/columns.ts b/src/views/EmploymentManage/constants/columns.ts index 0b3bfac..43abea2 100644 --- a/src/views/EmploymentManage/constants/columns.ts +++ b/src/views/EmploymentManage/constants/columns.ts @@ -152,3 +152,52 @@ width: 140, }, ]); + +export const CheckManageColumns = defineColumns([ + { + id: '1', + enCode: 'name', + name: '濮撳悕', + width: 180, + }, + { + id: '2', + enCode: 'name', + name: '韬唤璇佸彿', + width: 180, + }, + { + id: '3', + enCode: 'name', + name: '鎬у埆', + }, + { + id: '4', + enCode: 'name', + name: '骞撮緞', + }, + { + id: '5', + enCode: 'name', + name: '鎵嬫満鍙�', + width: 140, + }, + { + id: '6', + enCode: 'name', + name: '鎵�灞炲鎴�', + width: 140, + }, + { + id: '7', + enCode: 'name', + name: '鎻愪氦鏃堕棿', + width: 140, + }, + { + id: '8', + enCode: 'name', + name: '楠屾敹鐘舵��', + width: 140, + }, +]); -- Gitblit v1.9.1