From a686faf1c2132f55e40119df28ce9f6e46206b74 Mon Sep 17 00:00:00 2001
From: wupengfei <834520024@qq.com>
Date: 星期四, 11 九月 2025 17:40:38 +0800
Subject: [PATCH] feat: 页面
---
src/views/ServiceChargeManage/ServiceChargeDetail.vue | 64 ++--
src/constants/task.ts | 19 +
.eslintrc-auto-import.json | 3
src/views/ServiceChargeManage/ServiceChargeManage.vue | 72 +++--
src/views/FlexJobManage/FlexJobManage.vue | 16 +
src/views/FlexJobManage/components/StaffDetailInfoView.vue | 112 ++++++++++
src/views/FlexJobManage/components/SignDetailView.vue | 127 +++++++++++
src/views/FlexJobManage/components/StaffResumeView.vue | 124 +++++++++++
src/views/EmploymentManage/components/CheckManageDialog.vue | 2
src/views/FlexJobManage/components/StaffDetailInfoDialog.vue | 61 +++++
auto-imports.d.ts | 6
src/views/EmploymentManage/components/AddOrEditEmploymentView.vue | 35 +++
src/views/ServiceChargeManage/components/UploadStatementDialog.vue | 18
13 files changed, 586 insertions(+), 73 deletions(-)
diff --git a/.eslintrc-auto-import.json b/.eslintrc-auto-import.json
index 4d85d94..0d2cd9f 100644
--- a/.eslintrc-auto-import.json
+++ b/.eslintrc-auto-import.json
@@ -42,7 +42,9 @@
"EnumPagedListOrder": true,
"EnumPayAccess": true,
"EnumPersonalFreeTime": true,
+ "EnumPersonalFreeTimeText": true,
"EnumPersonalJobSeekingStatus": true,
+ "EnumPersonalJobSeekingStatusText": true,
"EnumPersonalRealMethod": true,
"EnumPersonalUserRealStatus": true,
"EnumRealAccess": true,
@@ -52,6 +54,7 @@
"EnumRoleWebApiDataPowerText": true,
"EnumRoleWebApiDataPowerTextForFilter": true,
"EnumSettlementCycle": true,
+ "EnumSettlementCycleDateText": true,
"EnumSettlementCycleText": true,
"EnumSmsAccess": true,
"EnumTaskCheckReceiveStatus": true,
diff --git a/auto-imports.d.ts b/auto-imports.d.ts
index 4d9adb0..3eab8bc 100644
--- a/auto-imports.d.ts
+++ b/auto-imports.d.ts
@@ -47,7 +47,9 @@
const EnumPagedListOrder: typeof import('./src/constants/apiEnum')['EnumPagedListOrder']
const EnumPayAccess: typeof import('./src/constants/apiEnum')['EnumPayAccess']
const EnumPersonalFreeTime: typeof import('./src/constants/apiEnum')['EnumPersonalFreeTime']
+ const EnumPersonalFreeTimeText: typeof import('./src/constants/task')['EnumPersonalFreeTimeText']
const EnumPersonalJobSeekingStatus: typeof import('./src/constants/apiEnum')['EnumPersonalJobSeekingStatus']
+ const EnumPersonalJobSeekingStatusText: typeof import('./src/constants/task')['EnumPersonalJobSeekingStatusText']
const EnumPersonalRealMethod: typeof import('./src/constants/apiEnum')['EnumPersonalRealMethod']
const EnumPersonalUserRealStatus: typeof import('./src/constants/apiEnum')['EnumPersonalUserRealStatus']
const EnumRealAccess: typeof import('./src/constants/apiEnum')['EnumRealAccess']
@@ -57,6 +59,7 @@
const EnumRoleWebApiDataPowerText: typeof import('./src/constants/apiEnumText')['EnumRoleWebApiDataPowerText']
const EnumRoleWebApiDataPowerTextForFilter: typeof import('./src/constants/apiEnumText')['EnumRoleWebApiDataPowerTextForFilter']
const EnumSettlementCycle: typeof import('./src/constants/apiEnum')['EnumSettlementCycle']
+ const EnumSettlementCycleDateText: typeof import('./src/constants/task')['EnumSettlementCycleDateText']
const EnumSettlementCycleText: typeof import('./src/constants/task')['EnumSettlementCycleText']
const EnumSmsAccess: typeof import('./src/constants/apiEnum')['EnumSmsAccess']
const EnumSmsTemplateType: typeof import('./src/constants/apiEnum')['EnumSmsTemplateType']
@@ -311,7 +314,9 @@
readonly EnumPagedListOrder: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumPagedListOrder']>
readonly EnumPayAccess: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumPayAccess']>
readonly EnumPersonalFreeTime: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumPersonalFreeTime']>
+ readonly EnumPersonalFreeTimeText: UnwrapRef<typeof import('./src/constants/task')['EnumPersonalFreeTimeText']>
readonly EnumPersonalJobSeekingStatus: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumPersonalJobSeekingStatus']>
+ readonly EnumPersonalJobSeekingStatusText: UnwrapRef<typeof import('./src/constants/task')['EnumPersonalJobSeekingStatusText']>
readonly EnumPersonalRealMethod: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumPersonalRealMethod']>
readonly EnumPersonalUserRealStatus: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumPersonalUserRealStatus']>
readonly EnumRealAccess: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumRealAccess']>
@@ -321,6 +326,7 @@
readonly EnumRoleWebApiDataPowerText: UnwrapRef<typeof import('./src/constants/apiEnumText')['EnumRoleWebApiDataPowerText']>
readonly EnumRoleWebApiDataPowerTextForFilter: UnwrapRef<typeof import('./src/constants/apiEnumText')['EnumRoleWebApiDataPowerTextForFilter']>
readonly EnumSettlementCycle: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumSettlementCycle']>
+ readonly EnumSettlementCycleDateText: UnwrapRef<typeof import('./src/constants/task')['EnumSettlementCycleDateText']>
readonly EnumSettlementCycleText: UnwrapRef<typeof import('./src/constants/task')['EnumSettlementCycleText']>
readonly EnumSmsAccess: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumSmsAccess']>
readonly EnumTaskCheckReceiveStatus: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumTaskCheckReceiveStatus']>
diff --git a/src/constants/task.ts b/src/constants/task.ts
index 6cf4a5e..ef00be6 100644
--- a/src/constants/task.ts
+++ b/src/constants/task.ts
@@ -11,6 +11,11 @@
[EnumSettlementCycle.Day]: '鏃ョ粨',
};
+export const EnumSettlementCycleDateText = {
+ [EnumSettlementCycle.Month]: '姣忔湀',
+ [EnumSettlementCycle.Week]: '姣忓懆',
+};
+
export const EnumTaskReleaseStatusText = {
[EnumTaskReleaseStatus.InProcess]: '鍙戝竷涓�',
[EnumTaskReleaseStatus.Stopped]: '宸插仠姝�',
@@ -84,3 +89,17 @@
[EnumTaskSettlementStatus.InProcess]: '缁撶畻涓�',
[EnumTaskSettlementStatus.Completed]: '宸茬粨绠�',
};
+
+export const EnumPersonalFreeTimeText = {
+ [EnumPersonalFreeTime.NoLimit]: '涓嶉檺',
+ [EnumPersonalFreeTime.WinterSummerVacations]: '瀵掓殤鍋�',
+ [EnumPersonalFreeTime.FestivalAndHoliday]: '鑺傚亣鏃�',
+ [EnumPersonalFreeTime.Weekend]: '鍛ㄥ叚鏃�',
+ [EnumPersonalFreeTime.Weekday]: '宸ヤ綔鏃�',
+};
+
+export const EnumPersonalJobSeekingStatusText = {
+ [EnumPersonalJobSeekingStatus.Active]: '绉瀬鎵句换鍔�',
+ [EnumPersonalJobSeekingStatus.Whatever]: '闅忎究鐪嬬湅',
+ [EnumPersonalJobSeekingStatus.Not]: '鏆傛椂涓嶆壘浠诲姟',
+};
diff --git a/src/views/EmploymentManage/components/AddOrEditEmploymentView.vue b/src/views/EmploymentManage/components/AddOrEditEmploymentView.vue
index b08731a..f251903 100644
--- a/src/views/EmploymentManage/components/AddOrEditEmploymentView.vue
+++ b/src/views/EmploymentManage/components/AddOrEditEmploymentView.vue
@@ -68,6 +68,24 @@
</ProFormCol>
<ProFormCol>
<ProFormColItem :span="12">
+ <ProFormItemV2
+ label="缁撶畻鏃ユ湡:"
+ prop="settlementCycle"
+ :check-rules="[{ message: '璇烽�夋嫨缁撶畻鏃ユ湡' }]"
+ class="settlement-cycle-date-form-item"
+ >
+ {{ EnumSettlementCycleDateText[form.settlementCycle] }}
+ <ProFormSelect
+ v-model="form.settlementCycle"
+ :value-enum="[]"
+ :button-style="false"
+ ></ProFormSelect>
+ {{ '鏃ョ粨绠�' }}
+ </ProFormItemV2>
+ </ProFormColItem>
+ </ProFormCol>
+ <ProFormCol>
+ <ProFormColItem :span="12">
<ProFormItemV2 label="绂忓埄:" prop="benefits">
<el-checkbox
v-if="!isDetail"
@@ -227,6 +245,7 @@
ProFormRadio,
ProFormDatePicker,
ProFormCheckbox,
+ ProFormSelect,
} from '@bole-core/components';
import { FormInstance, ModelValueType } from 'element-plus';
import { Message } from '@bole-core/core';
@@ -238,6 +257,7 @@
EnumBillingMethodText,
EnumBillingMethodUnitText,
EnumSettlementCycleText,
+ EnumSettlementCycleDateText,
} from '@/constants';
import { format, FormValidator } from '@/utils';
import dayjs from 'dayjs';
@@ -423,5 +443,20 @@
width: auto;
}
}
+
+ .settlement-cycle-date-form-item {
+ color: inherit;
+
+ .el-form-item__content {
+ flex-wrap: nowrap;
+
+ .el-select {
+ margin: 0 20px;
+ width: auto;
+ min-width: 0;
+ flex: 1;
+ }
+ }
+ }
}
</style>
diff --git a/src/views/EmploymentManage/components/CheckManageDialog.vue b/src/views/EmploymentManage/components/CheckManageDialog.vue
index 592ff5c..6c82f86 100644
--- a/src/views/EmploymentManage/components/CheckManageDialog.vue
+++ b/src/views/EmploymentManage/components/CheckManageDialog.vue
@@ -161,7 +161,7 @@
columnsRenderProps: {
createdTime: { type: 'date' },
checkReceiveTime: { type: 'date' },
- date: { type: 'date' },
+ date: { type: 'date', format: 'YYYY-MM-DD' },
checkReceiveStatus: { type: 'enum', valueEnum: EnumTaskUserSubmitCheckReceiveStatusText },
files: {
type: 'url',
diff --git a/src/views/FlexJobManage/FlexJobManage.vue b/src/views/FlexJobManage/FlexJobManage.vue
index c12699f..ca81eac 100644
--- a/src/views/FlexJobManage/FlexJobManage.vue
+++ b/src/views/FlexJobManage/FlexJobManage.vue
@@ -99,6 +99,7 @@
</ProTableV2>
</AppContainer>
<StaffInfoDialog v-bind="dialogStaffInfoProps" />
+ <StaffDetailInfoDialog v-bind="dialogStaffDetailProps" />
<BatchImportDialog
v-bind="dialogBatchImportProps"
@onDownloadTemplate="handleDownloadTemplate"
@@ -133,6 +134,7 @@
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';
@@ -157,7 +159,8 @@
name: '璇︽儏',
},
emits: {
- onClick: (role) => openDialog(role, true),
+ onClick: (role: API.GetEnterpriseEmployeesQueryResultItem) =>
+ handleStaffDetailEdit({ id: role.id, tabType: 'info' }),
},
},
{
@@ -563,6 +566,17 @@
} catch (error) {}
}
+const {
+ dialogProps: dialogStaffDetailProps,
+ handleEdit: handleStaffDetailEdit,
+ editForm: staffDetailEditForm,
+} = useFormDialog({
+ defaultFormParams: {
+ id: '',
+ tabType: 'info',
+ },
+});
+
async function handleDelete(row: API.GetEnterpriseEmployeesQueryResultItem) {
try {
await Message.deleteMessage();
diff --git a/src/views/FlexJobManage/components/SignDetailView.vue b/src/views/FlexJobManage/components/SignDetailView.vue
new file mode 100644
index 0000000..a4d2ddd
--- /dev/null
+++ b/src/views/FlexJobManage/components/SignDetailView.vue
@@ -0,0 +1,127 @@
+<template>
+ <ProTableV2
+ v-bind="proTableProps"
+ :columns="column"
+ :show-operation-column="false"
+ :auto-height="false"
+ :table-props="{
+ height: '400px',
+ }"
+ >
+ <template #contractUrl="{ row }">
+ <PreviewBtn
+ v-if="row.userSignContractStatus === EnumTaskUserSignContractStatus.Pass && row.contractUrl"
+ :show-download-btn="false"
+ :url="setOSSLink(row.contractUrl)"
+ >
+ </PreviewBtn>
+ </template>
+ </ProTableV2>
+</template>
+
+<script setup lang="ts">
+import { useTable, ProTableV2, defineColumns } from '@bole-core/components';
+import { setOSSLink } from '@/utils';
+import {
+ EnumTaskUserSignContractStatus,
+ EnumTaskUserHireStatusText,
+ EnumTaskUserSignContractStatusText,
+} from '@/constants';
+import * as userServices from '@/services/api/user';
+
+defineOptions({
+ name: 'SignDetailView',
+});
+
+type Form = {
+ id: string;
+};
+
+const form = defineModel<Form>('form');
+
+const isLoading = ref(false);
+
+const column = defineColumns([
+ {
+ id: '1',
+ enCode: 'enterpriseName',
+ name: '鎵�灞炲鎴�',
+ },
+ {
+ id: '2',
+ enCode: 'applyTime',
+ name: '鎶ュ悕鏃堕棿',
+ },
+ {
+ id: '3',
+ enCode: 'hireStatus',
+ name: '褰曠敤鐘舵��',
+ },
+ {
+ id: '4',
+ enCode: 'hireTime',
+ name: '褰曠敤鏃堕棿',
+ },
+ {
+ id: '5',
+ enCode: 'userSignContractStatus',
+ name: '绛剧害鐘舵��',
+ },
+ {
+ id: '6',
+ enCode: 'enterpriseSignContractStatus',
+ name: '浼佷笟绛剧害鐘舵��',
+ },
+ {
+ id: '7',
+ enCode: 'enterpriseSignContractTime',
+ name: '浼佷笟绛剧害鏃堕棿',
+ },
+ {
+ id: '8',
+ enCode: 'contractUrl',
+ name: '鐢靛瓙鍚堝悓',
+ },
+]);
+
+const {
+ getDataSource: getList,
+ proTableProps,
+ paginationState,
+ extraParamState,
+} = useTable(
+ async ({ pageIndex, pageSize }, extraParamState) => {
+ try {
+ let params: API.GetPersonalUserInfoSignContractsQuery = {
+ pageModel: {
+ rows: pageSize,
+ page: pageIndex,
+ orderInput: extraParamState.orderInput,
+ },
+ id: form.value.id,
+ };
+ let res = await userServices.getPersonalUserInfoSignContracts(params);
+ return res;
+ } catch (error) {}
+ },
+ {
+ defaultExtraParams: {
+ orderInput: [{ property: 'id', order: EnumPagedListOrder.Desc }],
+ },
+ columnsRenderProps: {
+ applyTime: { type: 'date' },
+ hireTime: { type: 'date' },
+ enterpriseSignContractTime: { type: 'date' },
+ hireStatus: { type: 'enum', valueEnum: EnumTaskUserHireStatusText },
+ userSignContractStatus: { type: 'enum', valueEnum: EnumTaskUserSignContractStatusText },
+ enterpriseSignContractStatus: { type: 'enum', valueEnum: EnumTaskUserSignContractStatusText },
+ },
+ }
+);
+
+onMounted(async () => {
+ isLoading.value = true;
+ await getList();
+ isLoading.value = false;
+});
+</script>
diff --git a/src/views/FlexJobManage/components/StaffDetailInfoDialog.vue b/src/views/FlexJobManage/components/StaffDetailInfoDialog.vue
new file mode 100644
index 0000000..debbb56
--- /dev/null
+++ b/src/views/FlexJobManage/components/StaffDetailInfoDialog.vue
@@ -0,0 +1,61 @@
+<template>
+ <ProDialog
+ title="浜哄憳璇︽儏"
+ v-model="visible"
+ @close="onDialogClose"
+ destroy-on-close
+ draggable
+ :width="900"
+ >
+ <ProTabs v-model="form.tabType" hasBorder>
+ <ProTabPane lazy label="浜哄憳淇℃伅" name="info">
+ <StaffDetailInfoView :form="form" />
+ </ProTabPane>
+ <ProTabPane lazy label="浜哄憳绠�鍘�" name="resume">
+ <StaffResumeView :form="form" />
+ </ProTabPane>
+ <ProTabPane lazy label="绛剧害璇︽儏" name="sign">
+ <SignDetailView :form="form" />
+ </ProTabPane>
+ </ProTabs>
+
+ <template #footer>
+ <span class="dialog-footer">
+ <el-button @click="emit('onCancel')">鍏抽棴</el-button>
+ </span>
+ </template>
+ </ProDialog>
+</template>
+
+<script setup lang="ts">
+import { FormInstance } from 'element-plus';
+import { ProDialog, ProTabs, ProTabPane } from '@bole-core/components';
+import StaffDetailInfoView from './StaffDetailInfoView.vue';
+import StaffResumeView from './StaffResumeView.vue';
+import SignDetailView from './SignDetailView.vue';
+
+defineOptions({
+ name: 'StaffDetailInfoDialog',
+});
+
+type Form = {
+ title?: string;
+ tabType: string;
+ id: string;
+};
+
+const visible = defineModel<boolean>('modelValue');
+const form = defineModel<Form>('form');
+
+const emit = defineEmits<{
+ (e: 'onConfirm'): void;
+ (e: 'onCancel'): void;
+}>();
+
+const dialogForm = ref<FormInstance>();
+
+function onDialogClose() {
+ if (!dialogForm.value) return;
+ dialogForm.value.resetFields();
+}
+</script>
diff --git a/src/views/FlexJobManage/components/StaffDetailInfoView.vue b/src/views/FlexJobManage/components/StaffDetailInfoView.vue
new file mode 100644
index 0000000..5dbe708
--- /dev/null
+++ b/src/views/FlexJobManage/components/StaffDetailInfoView.vue
@@ -0,0 +1,112 @@
+<template>
+ <ProForm :model="detail" ref="dialogForm" label-width="120px" is-read>
+ <ProFormCol>
+ <ProFormColItem :span="12">
+ <ProFormItemV2 label="濮撳悕锛�" prop="name">
+ <ProFormText v-model.trim="detail.name"></ProFormText>
+ </ProFormItemV2>
+ </ProFormColItem>
+ <ProFormColItem :span="12">
+ <ProFormItemV2 label="瀹炲悕鏃堕棿锛�" prop="userRealTime">
+ <div>{{ format(detail.userRealTime, 'YYYY-MM-DD HH:mm') }}</div>
+ </ProFormItemV2>
+ </ProFormColItem>
+ </ProFormCol>
+ <ProFormCol>
+ <ProFormColItem :span="12">
+ <ProFormItemV2 label="韬唤璇佸彿锛�" prop="identity">
+ <ProFormText v-model.trim="detail.identity"></ProFormText>
+ </ProFormItemV2>
+ </ProFormColItem>
+ </ProFormCol>
+ <ProFormCol>
+ <ProFormColItem :span="12">
+ <ProFormItemV2 label="鎵嬫満鍙凤細" prop="contactPhoneNumber">
+ <ProFormText v-model.trim="detail.contactPhoneNumber"></ProFormText>
+ </ProFormItemV2>
+ </ProFormColItem>
+ </ProFormCol>
+ <ProFormCol>
+ <ProFormColItem :span="12">
+ <ProFormItemV2 label="鎬у埆锛�" prop="gender">
+ <ProFormRadio
+ v-model="detail.gender"
+ :value-enum="EnumUserGenderTextForPerson"
+ ></ProFormRadio>
+ </ProFormItemV2>
+ </ProFormColItem>
+ </ProFormCol>
+ <ProFormCol>
+ <ProFormColItem :span="12">
+ <ProFormItemV2 label="骞撮緞锛�" prop="age">
+ <ProFormInputNumber v-model="detail.age"> </ProFormInputNumber>
+ </ProFormItemV2>
+ </ProFormColItem>
+ </ProFormCol>
+ <ProFormItemV2 label="韬唤璇佹闈細" prop="identityImg">
+ <ProFormImageUpload v-model:file-url="detail.identityImg"> </ProFormImageUpload>
+ </ProFormItemV2>
+ <ProFormItemV2 label="韬唤璇佸弽闈細" prop="identityBackImg">
+ <ProFormImageUpload v-model:file-url="detail.identityBackImg"> </ProFormImageUpload>
+ </ProFormItemV2>
+ </ProForm>
+</template>
+
+<script setup lang="ts">
+import {
+ ProForm,
+ ProFormCol,
+ ProFormColItem,
+ ProFormItemV2,
+ ProFormText,
+ ProFormInputNumber,
+ ProFormImageUpload,
+ ProFormRadio,
+ UploadUserFile,
+} from '@bole-core/components';
+import { convertApi2FormUrlOnlyOne, format } from '@/utils';
+import { useQuery } from '@tanstack/vue-query';
+import { EnumUserGender, EnumUserGenderTextForPerson } from '@/constants';
+import * as enterpriseEmployeeServices from '@/services/api/enterpriseEmployee';
+
+defineOptions({
+ name: 'StaffDetailInfoView',
+});
+
+type Form = {
+ id: string;
+};
+
+const form = defineModel<Form>('form');
+
+const detail = reactive({
+ name: '',
+ identity: '',
+ contactPhoneNumber: '',
+ gender: EnumUserGender.Male,
+ age: 0,
+ identityImg: [] as UploadUserFile[],
+ identityBackImg: [] as UploadUserFile[],
+ userRealTime: '',
+});
+
+const { isLoading } = useQuery({
+ queryKey: ['enterpriseEmployeeServices/getEnterpriseEmployee', form.value.id],
+ queryFn: async () => {
+ return await enterpriseEmployeeServices.getEnterpriseEmployee({ id: form.value.id });
+ },
+ onSuccess(data) {
+ detail.name = data.name;
+ detail.identity = data.identity;
+ detail.contactPhoneNumber = data.contactPhoneNumber;
+ detail.gender = data.gender;
+ detail.age = data.age ?? 0;
+ detail.identityImg = data.identityImg ? convertApi2FormUrlOnlyOne(data.identityImg) : [];
+ detail.identityBackImg = data.identityBackImg
+ ? convertApi2FormUrlOnlyOne(data.identityBackImg)
+ : [];
+ detail.userRealTime = data.userRealTime ?? '';
+ },
+ enabled: computed(() => !!form.value.id),
+});
+</script>
diff --git a/src/views/FlexJobManage/components/StaffResumeView.vue b/src/views/FlexJobManage/components/StaffResumeView.vue
new file mode 100644
index 0000000..e5658c3
--- /dev/null
+++ b/src/views/FlexJobManage/components/StaffResumeView.vue
@@ -0,0 +1,124 @@
+<template>
+ <ProForm :model="detail" ref="dialogForm" label-width="120px" is-read>
+ <ProFormCol>
+ <ProFormColItem :span="12">
+ <ProFormItemV2 label="鏈熸湜宀椾綅锛�" prop="name">
+ <div>{{ detail.userExpectJobs }}</div>
+ </ProFormItemV2>
+ </ProFormColItem>
+ </ProFormCol>
+ <ProFormCol>
+ <ProFormColItem :span="12">
+ <ProFormItemV2 label="绌洪棽鏃堕棿锛�" prop="freeTime">
+ <ProFormRadio
+ v-model="detail.freeTime"
+ :value-enum="EnumPersonalFreeTimeText"
+ ></ProFormRadio>
+ </ProFormItemV2>
+ </ProFormColItem>
+ </ProFormCol>
+ <ProFormCol>
+ <ProFormColItem :span="12">
+ <ProFormItemV2 label="姹傝亴鐘舵�侊細" prop="jobSeekingStatus">
+ <ProFormRadio
+ v-model="detail.jobSeekingStatus"
+ :value-enum="EnumPersonalJobSeekingStatusText"
+ ></ProFormRadio>
+ </ProFormItemV2>
+ </ProFormColItem>
+ </ProFormCol>
+ <ProFormCol>
+ <ProFormColItem :span="12">
+ <ProFormItemV2 label="宸ヤ綔骞撮檺锛�" prop="workSeniority">
+ <ProFormText v-model="detail.workSeniority"></ProFormText>
+ </ProFormItemV2>
+ </ProFormColItem>
+ </ProFormCol>
+ <ProFormCol>
+ <ProFormColItem :span="12">
+ <ProFormItemV2 label="宸ヤ綔缁忛獙锛�" prop="workExperience">
+ <ProFormText v-model="detail.workExperience"></ProFormText>
+ </ProFormItemV2>
+ </ProFormColItem>
+ </ProFormCol>
+ <ProFormCol>
+ <ProFormColItem :span="12">
+ <ProFormItemV2 label="韬珮锛�" prop="height">
+ <ProFormInputNumber v-model="detail.height"></ProFormInputNumber>
+ </ProFormItemV2>
+ </ProFormColItem>
+ </ProFormCol>
+ <ProFormCol>
+ <ProFormColItem :span="12">
+ <ProFormItemV2 label="浣撻噸锛�" prop="weight">
+ <ProFormInputNumber v-model="detail.weight"></ProFormInputNumber>
+ </ProFormItemV2>
+ </ProFormColItem>
+ </ProFormCol>
+ <ProFormItemV2 label="涓汉鐓х墖锛�" prop="photos">
+ <ProFormImageUpload v-model:file-url="detail.photos"> </ProFormImageUpload>
+ </ProFormItemV2>
+ </ProForm>
+</template>
+
+<script setup lang="ts">
+import {
+ ProForm,
+ ProFormCol,
+ ProFormColItem,
+ ProFormItemV2,
+ ProFormText,
+ ProFormInputNumber,
+ ProFormRadio,
+ UploadUserFile,
+ ProFormImageUpload,
+} from '@bole-core/components';
+import { EnumPersonalFreeTimeText, EnumPersonalJobSeekingStatusText } from '@/constants';
+import { useQuery } from '@tanstack/vue-query';
+import * as userResumeServices from '@/services/api/userResume';
+import { convertApi2FormUrl } from '@/utils';
+
+defineOptions({
+ name: 'StaffResumeView',
+});
+
+type Form = {
+ id: string;
+};
+
+const form = defineModel<Form>('form');
+
+const detail = reactive({
+ userExpectJobs: '',
+ freeTime: '' as any as EnumPersonalFreeTime,
+ jobSeekingStatus: '' as any as EnumPersonalJobSeekingStatus,
+ workSeniority: '',
+ workExperience: '',
+ height: 0,
+ weight: 0,
+ photos: [] as UploadUserFile[],
+});
+
+const { isLoading } = useQuery({
+ queryKey: ['userResumeServices/getUserResume', form.value.id],
+ queryFn: async () => {
+ return await userResumeServices.getUserResume({ enterpriseEmployeeId: form.value.id });
+ },
+ onSuccess(data) {
+ detail.userExpectJobs =
+ data.userExpectJobs?.length > 0
+ ? data.userExpectJobs.map((x) => x.expectJobContent).join(',')
+ : '';
+ detail.freeTime = data.freeTime;
+ detail.jobSeekingStatus = data.jobSeekingStatus;
+ detail.workSeniority = data.workSeniority;
+ detail.workExperience = data.workExperience;
+ detail.height = data.height ?? 0;
+ detail.weight = data.weight ?? 0;
+ detail.photos = data.photos
+ ? data.photos.map((x) => convertApi2FormUrl(x))
+ : ([] as UploadUserFile[]);
+ },
+ enabled: computed(() => !!form.value.id),
+});
+</script>
diff --git a/src/views/ServiceChargeManage/ServiceChargeDetail.vue b/src/views/ServiceChargeManage/ServiceChargeDetail.vue
index de7d1ff..508adec 100644
--- a/src/views/ServiceChargeManage/ServiceChargeDetail.vue
+++ b/src/views/ServiceChargeManage/ServiceChargeDetail.vue
@@ -15,7 +15,7 @@
</ProFormItemV2>
</ProFormColItem>
</ProFormCol>
- <ProFormCol>
+ <!-- <ProFormCol>
<ProFormColItem :span="8">
<ProFormItemV2 label="缁撶畻鍗曞悕绉�:" prop="settlementOrderName">
<ProFormText v-model="form.settlementOrderName"> </ProFormText>
@@ -30,7 +30,7 @@
></ProFormDatePicker>
</ProFormItemV2>
</ProFormColItem>
- </ProFormCol>
+ </ProFormCol> -->
<ProFormCol>
<ProFormColItem :span="8">
<ProFormItemV2 label="缁撶畻閲戦:" prop="settlementAmount">
@@ -82,6 +82,22 @@
</SearchInput>
</QueryFilterItem>
</template>
+ <template #btn>
+ <BlFileUpload
+ v-model:file-url="form.settlementUrl"
+ ref="uploadRef"
+ :showTip="false"
+ :show-file-list="false"
+ class="pro-table-operation-btn upload-style-btn"
+ :on-success="(event) => handleUploadSuccess(event)"
+ :limitFileSize="null"
+ :limit="1"
+ accept="xlsx,xls"
+ >
+ <el-button text type="primary" class="pro-table-operation-btn">涓婁紶</el-button>
+ </BlFileUpload>
+ <el-button type="primary" link @click="handleAdd()">瀵煎嚭</el-button>
+ </template>
</ProTableQueryFilterBar>
<ProTableV2
v-bind="proTableProps"
@@ -97,11 +113,11 @@
<div class="chuck-add-or-edit-actions">
<el-button class="chuck-add-or-edit-actions" @click="handleBack">鍙栨秷</el-button>
<el-button
- v-if="!isDetail"
+ v-if="isSettlement"
class="chuck-add-or-edit-actions"
type="primary"
@click="handleSubmit"
- >纭</el-button
+ >缁撶畻</el-button
>
</div>
</ChunkCell>
@@ -113,7 +129,6 @@
import {
LoadingLayout,
AppContainer,
- AppScrollContainer,
ChunkCell,
ProForm,
ProFormItemV2,
@@ -130,6 +145,8 @@
ProTableQueryFilterBar,
useFormDialog,
XLSXUtils,
+ BlFileUpload,
+ UploadUserFile,
} from '@bole-core/components';
import { SettlementListColumns } from './constants';
import { useQuery } from '@tanstack/vue-query';
@@ -160,8 +177,9 @@
const route = useRoute();
const id = (route.params.id as string) ?? '';
const url = (route.query.url as string) ?? '';
+const settlement = (route.query.settlement as string) ?? '';
-const isDetail = computed(() => !url);
+const isSettlement = computed(() => !!url || !!settlement);
const form = reactive({
name: '',
@@ -171,6 +189,8 @@
settlementOrderName: '',
settlementOrderTime: '',
settlementTaskUsers: [] as API.GetSettlementTaskUsersQueryResultItem[],
+
+ settlementUrl: [] as UploadUserFile[],
});
const BaseState = {
@@ -179,32 +199,6 @@
const state = reactive({ ...BaseState });
-// onMounted(async () => {
-// await getList();
-// state.loading = false;
-// });
-
-// const { isLoading } = useQuery({
-// queryKey: ['taskServices/getSettlementTask', id],
-// queryFn: async () => {
-// return await taskServices.getSettlementTask(
-// { id: id },
-// {
-// showLoading: false,
-// }
-// );
-// },
-// placeholderData: () => ({} as API.GetSettlementTaskQueryResult),
-// onSuccess(data) {
-// form.name = data.name;
-// form.settlementAmount = data.settlementAmount ?? 0;
-// form.actualSettlementAmount = data.actualSettlementAmount ?? 0;
-// form.code = data.code;
-// form.settlementOrderName = setOssFileName(data.settlementOrderName);
-// form.settlementOrderTime = data.settlementOrderTime ?? '';
-// },
-// enabled: !!id,
-// });
const { isLoading } = useQuery({
queryKey: ['taskUserServices/getSettlementTaskUsers', id, url],
queryFn: async () => {
@@ -336,6 +330,12 @@
} catch (error) {}
}
+function handleUploadSuccess(response: UploadUserFile & { file: File & { uid: number } }) {
+ if (response.path) {
+ //
+ }
+}
+
function handleBack() {
closeViewPush(route, {
name: 'ServiceChargeManageList',
diff --git a/src/views/ServiceChargeManage/ServiceChargeManage.vue b/src/views/ServiceChargeManage/ServiceChargeManage.vue
index 8cbbe76..e72ac87 100644
--- a/src/views/ServiceChargeManage/ServiceChargeManage.vue
+++ b/src/views/ServiceChargeManage/ServiceChargeManage.vue
@@ -55,7 +55,7 @@
:columns="ServiceChargeManageColumns"
:operationBtns="operationBtns"
>
- <template #operationBtn-uploadBtn="{ row }">
+ <!-- <template #operationBtn-uploadBtn="{ row }">
<BlFileUpload
v-model:file-url="editForm.settlementUrl"
ref="uploadRef"
@@ -84,7 +84,7 @@
>
<el-button text type="primary" class="pro-table-operation-btn">閲嶆柊涓婁紶</el-button>
</BlFileUpload>
- </template>
+ </template> -->
</ProTableV2>
</AppContainer>
<UploadStatementDialog v-bind="dialogProps" />
@@ -127,36 +127,36 @@
});
const operationBtns = defineOperationBtns([
- {
- data: {
- enCode: 'uploadBtn',
- name: '涓婁紶',
- },
- extraProps: {
- hide: (row: API.GetSettlementTasksQueryResultItem) =>
- row.settlementOrderStatus !== EnumTaskSettlementOrderStatus.Wait,
- },
- },
- {
- data: {
- enCode: 'reUploadBtn',
- name: '閲嶆柊涓婁紶',
- },
- extraProps: {
- hide: (row: API.GetSettlementTasksQueryResultItem) =>
- !(
- row.settlementOrderStatus === EnumTaskSettlementOrderStatus.Completed &&
- row.settlementStatus === EnumTaskSettlementStatus.Wait
- ),
- },
- },
+ // {
+ // data: {
+ // enCode: 'uploadBtn',
+ // name: '涓婁紶',
+ // },
+ // extraProps: {
+ // hide: (row: API.GetSettlementTasksQueryResultItem) =>
+ // row.settlementOrderStatus !== EnumTaskSettlementOrderStatus.Wait,
+ // },
+ // },
+ // {
+ // data: {
+ // enCode: 'reUploadBtn',
+ // name: '閲嶆柊涓婁紶',
+ // },
+ // extraProps: {
+ // hide: (row: API.GetSettlementTasksQueryResultItem) =>
+ // !(
+ // row.settlementOrderStatus === EnumTaskSettlementOrderStatus.Completed &&
+ // row.settlementStatus === EnumTaskSettlementStatus.Wait
+ // ),
+ // },
+ // },
{
data: {
enCode: 'settleBtn',
name: '缁撶畻',
},
emits: {
- onClick: (role: API.GetSettlementTasksQueryResultItem) => openSettleDialog(role),
+ onClick: (role: API.GetSettlementTasksQueryResultItem) => goDetail(role, 'settlement'),
},
extraProps: {
hide: (role: API.GetSettlementTasksQueryResultItem) =>
@@ -185,7 +185,7 @@
name: '璇︽儏',
},
emits: {
- onClick: (role: API.GetSettlementTasksQueryResultItem) => goDetail(role.id),
+ onClick: (role: API.GetSettlementTasksQueryResultItem) => goDetail(role),
},
extraProps: {
hide: (role: API.GetSettlementTasksQueryResultItem) =>
@@ -288,7 +288,7 @@
});
async function handleAddOrEdit() {
- goDetail(editForm.id, editForm.settlementUrl[0]?.path);
+ goSettlementDetail(editForm.id, editForm.settlementUrl[0]?.path);
}
const {
@@ -348,11 +348,11 @@
row: API.GetSettlementTasksQueryResultItem
) {
if (response.path) {
- goDetail(row.id, response.path);
+ goSettlementDetail(row.id, response.path);
}
}
-async function goDetail(id: string, url?: string) {
+async function goSettlementDetail(id: string, url?: string) {
await router.push({
name: 'ServiceChargeDetail',
params: {
@@ -365,6 +365,18 @@
editForm.settlementUrl = [] as UploadUserFile[];
}
+function goDetail(row: API.GetSettlementTasksQueryResultItem, settlement?: string) {
+ router.push({
+ name: 'ServiceChargeDetail',
+ params: {
+ id: row?.id ?? '',
+ },
+ query: {
+ settlement: settlement ? settlement : '',
+ },
+ });
+}
+
function handleExport(val) {
console.log('val: ', val);
}
diff --git a/src/views/ServiceChargeManage/components/UploadStatementDialog.vue b/src/views/ServiceChargeManage/components/UploadStatementDialog.vue
index 46e8393..1bba11e 100644
--- a/src/views/ServiceChargeManage/components/UploadStatementDialog.vue
+++ b/src/views/ServiceChargeManage/components/UploadStatementDialog.vue
@@ -8,24 +8,24 @@
:width="700"
>
<ProForm :model="form" ref="dialogForm" label-width="120px">
- <ProFormItemV2 label="浠诲姟鍗曞彿锛�" prop="code" :check-rules="[{ message: '璇烽�夋嫨浠诲姟鍗曞彿' }]">
+ <ProFormItemV2 label="浠诲姟鍚嶇О锛�" prop="name" :check-rules="[{ message: '璇烽�夋嫨浠诲姟鍗曞彿' }]">
<ProFormSelect
- v-model="form.code"
+ v-model="form.name"
:valueEnum="taskSelect"
- placeholder="璇烽�夋嫨浠诲姟鍗曞彿"
+ placeholder="璇烽�夋嫨浠诲姟鍚嶇О"
enum-value-key="id"
- enum-label-key="code"
+ enum-label-key="name"
filterable
clearable
@change="handleCodeChange"
>
</ProFormSelect>
</ProFormItemV2>
- <ProFormItemV2 label="浠诲姟鍚嶇О锛�" prop="name" :check-rules="[{ message: '璇疯緭鍏ヤ换鍔″悕绉�' }]">
+ <ProFormItemV2 label="浠诲姟鍗曞彿锛�" prop="code" :check-rules="[{ message: '璇疯緭鍏ヤ换鍔″崟鍙�' }]">
<ProFormText
style="width: 50%"
- placeholder="璇疯緭鍏ヤ换鍔″悕绉�"
- v-model.trim="form.name"
+ placeholder="璇疯緭鍏ヤ换鍔″崟鍙�"
+ v-model.trim="form.code"
disabled
></ProFormText>
</ProFormItemV2>
@@ -91,10 +91,10 @@
function handleCodeChange(value: string) {
if (value) {
- form.value.name = taskSelect.value?.find((item) => item.id === value)?.name ?? '';
+ form.value.code = taskSelect.value?.find((item) => item.id === value)?.code ?? '';
form.value.id = value;
} else {
- Message.errorMessage('璇烽�夋嫨浠诲姟鍗曞彿');
+ Message.errorMessage('璇烽�夋嫨浠诲姟鍚嶇О');
}
}
--
Gitblit v1.9.1