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