| | |
| | | } |
| | | |
| | | interface GetArrangeTaskUsersQueryResult { |
| | | objectData?: GetArrangeTaskUsersQueryResultObjectData; |
| | | pageModel?: PagedListQueryResultPageModel; |
| | | /** 数据 */ |
| | | data?: GetArrangeTaskUsersQueryResultItem[]; |
| | |
| | | /** 工作经验 */ |
| | | workExperience?: string; |
| | | arrangeStatus?: EnumTaskUserArrangeStatus; |
| | | } |
| | | |
| | | interface GetArrangeTaskUsersQueryResultObjectData { |
| | | /** 是否内部任务 */ |
| | | isInternal?: boolean; |
| | | } |
| | | |
| | | interface GetBankOcrCommand { |
| | |
| | | interface GetCheckReceiveTaskQueryResultObjectData { |
| | | /** 供应商Id */ |
| | | supplierEnterpriseId?: string; |
| | | /** 是否内部任务 */ |
| | | isInternal?: boolean; |
| | | /** 需求人数 */ |
| | | needPeopleNumber?: number; |
| | | /** 任务名称 */ |
| | |
| | | addressName?: string; |
| | | /** 验收方式 */ |
| | | checkReceiveMethods?: EnumTaskCheckReceiveMethod[]; |
| | | /** 是否内部任务 */ |
| | | isInternal?: boolean; |
| | | } |
| | | |
| | | interface GetCodeUrlQueryResult { |
| | |
| | | id?: string; |
| | | /** 供应商Id */ |
| | | supplierEnterpriseId?: string; |
| | | /** 是否内部任务 */ |
| | | isInternal?: boolean; |
| | | /** 供应商 */ |
| | | supplierEnterpriseName?: string; |
| | | /** 供应商账号 */ |
| | |
| | | } |
| | | |
| | | interface GetTaskUsersQueryResult { |
| | | objectData?: GetTaskUsersQueryResultObjectData; |
| | | pageModel?: PagedListQueryResultPageModel; |
| | | /** 数据 */ |
| | | data?: GetTaskUsersQueryResultItem[]; |
| | |
| | | hireStatus?: EnumTaskUserHireStatus; |
| | | } |
| | | |
| | | interface GetTaskUsersQueryResultObjectData { |
| | | /** 是否内部任务 */ |
| | | isInternal?: boolean; |
| | | } |
| | | |
| | | interface GetThreeResourceLogsQuery { |
| | | /** 创建时间-起始 */ |
| | | createdTimeBegin?: string; |
| | |
| | | ProFormCol, |
| | | ProFormColItem, |
| | | ProFormItemV2, |
| | | ProTableQueryFilterBar, |
| | | } from '@bole-core/components'; |
| | | import * as taskCheckReceiveServices from '@/services/api/taskCheckReceive'; |
| | | import * as taskServices from '@/services/api/task'; |
| | | import { useQuery } from '@tanstack/vue-query'; |
| | | import { OrderUtils } from '@/utils'; |
| | | import { EnumBillingMethodUnitText, EnumBillingMethod, EnumBillingMethodText } from '@/constants'; |
| | | import dayjs from 'dayjs'; |
| | | import CheckManageDialog from './components/CheckManageDialog.vue'; |
| | | import ManualCheckManageDialog from './components/ManualCheckManageDialog.vue'; |
| | |
| | | const BaseState = { |
| | | loading: true, |
| | | checkReceiveMethods: [] as any as EnumTaskCheckReceiveMethod[], |
| | | |
| | | isInternal: false, |
| | | }; |
| | | |
| | | const state = reactive({ ...BaseState }); |
| | |
| | | showLoading: !state.loading, |
| | | }); |
| | | state.checkReceiveMethods = res.objectData?.checkReceiveMethods; |
| | | state.isInternal = res.objectData?.isInternal; |
| | | return res; |
| | | } catch (error) {} |
| | | }, |
| | |
| | | handleEdit({ |
| | | id: row.id, |
| | | checkReceiveMethods: state.checkReceiveMethods, |
| | | isInternal: state.isInternal, |
| | | isDetail, |
| | | }); |
| | | } |
| | |
| | | defaultFormParams: { |
| | | id: '', |
| | | checkReceiveMethods: [] as any as EnumTaskCheckReceiveMethod[], |
| | | isInternal: false, |
| | | isDetail: false, |
| | | }, |
| | | }); |
| | |
| | | }, |
| | | extraProps: { |
| | | hide: (row: API.GetArrangeTaskUsersQueryResultItem) => |
| | | row.arrangeStatus === EnumTaskUserArrangeStatus.Complete, |
| | | row.arrangeStatus === EnumTaskUserArrangeStatus.Complete || !state.isInternal, |
| | | }, |
| | | }, |
| | | }; |
| | |
| | | |
| | | const BaseState = { |
| | | loading: true, |
| | | isInternal: false, |
| | | }; |
| | | |
| | | const state = reactive({ ...BaseState }); |
| | |
| | | let res = await taskUserServices.getArrangeTaskUsers(params, { |
| | | showLoading: !state.loading, |
| | | }); |
| | | if (res) { |
| | | state.isInternal = res.objectData?.isInternal; |
| | | } |
| | | return res; |
| | | } catch (error) { |
| | | console.log('error: ', error); |
| | |
| | | }, |
| | | extraProps: { |
| | | hide: (row: API.GetTaskUsersQueryResultItem) => |
| | | row.hireStatus === EnumTaskUserHireStatus.Pass, |
| | | row.hireStatus === EnumTaskUserHireStatus.Pass || !state.isInternal, |
| | | }, |
| | | }, |
| | | refuseBtn: { |
| | |
| | | }, |
| | | extraProps: { |
| | | hide: (row: API.GetTaskUsersQueryResultItem) => |
| | | row.hireStatus !== EnumTaskUserHireStatus.Wait, |
| | | row.hireStatus !== EnumTaskUserHireStatus.Wait || !state.isInternal, |
| | | }, |
| | | }, |
| | | }; |
| | |
| | | const id = route.params.id as string; |
| | | const BaseState = { |
| | | loading: true, |
| | | |
| | | isInternal: false, |
| | | }; |
| | | |
| | | const state = reactive({ ...BaseState }); |
| | |
| | | let res = await taskUserServices.getTaskUsers(params, { |
| | | showLoading: !state.loading, |
| | | }); |
| | | if (res) { |
| | | state.isInternal = res.objectData?.isInternal; |
| | | } |
| | | return res; |
| | | } catch (error) { |
| | | console.log('error: ', error); |
| | |
| | | </ProTableQueryFilterBar> |
| | | <ProTableV2 v-bind="proTableProps" :columns="column" :operationBtns="operationBtns"> |
| | | <template #userCount="{ row }"> |
| | | <el-button link type="primary" @click="goSignList(row)">{{ |
| | | <el-button v-if="row.isInternal" link type="primary" @click="goSignList(row)">{{ |
| | | row.userCount || 0 |
| | | }}</el-button> |
| | | <span v-else>{{ row.userCount || 0 }}</span> |
| | | </template> |
| | | </ProTableV2> |
| | | </AppContainer> |
| | |
| | | onClick: (role) => goAddOrEdit(role), |
| | | }, |
| | | extraProps: { |
| | | hide: (row: API.GetTaskInfosQueryResultItem) => row.status === EnumTaskStatus.Complete, |
| | | hide: (row: API.GetTaskInfosQueryResultItem) => |
| | | row.status === EnumTaskStatus.Complete || !row.isInternal, |
| | | }, |
| | | }, |
| | | detailBtn: { |
| | |
| | | }, |
| | | extraProps: { |
| | | hide: (row: API.GetTaskInfosQueryResultItem) => |
| | | row.releaseStatus === EnumTaskReleaseStatus.InProcess, |
| | | row.releaseStatus === EnumTaskReleaseStatus.InProcess || !row.isInternal, |
| | | }, |
| | | }, |
| | | unPublishBtn: { |
| | |
| | | }, |
| | | extraProps: { |
| | | hide: (row: API.GetTaskInfosQueryResultItem) => |
| | | row.releaseStatus === EnumTaskReleaseStatus.Stopped, |
| | | row.releaseStatus === EnumTaskReleaseStatus.Stopped || !row.isInternal, |
| | | }, |
| | | }, |
| | | arrangeBtn: { |
| | |
| | | }, |
| | | extraProps: { |
| | | hide: (row: API.GetTaskInfosQueryResultItem) => |
| | | row.releaseStatus === EnumTaskReleaseStatus.Stopped, |
| | | row.releaseStatus === EnumTaskReleaseStatus.Stopped || !row.isInternal, |
| | | }, |
| | | }, |
| | | }; |
| | |
| | | type Form = { |
| | | id: string; |
| | | checkReceiveMethods: EnumTaskCheckReceiveMethod[]; |
| | | isInternal: boolean; |
| | | isDetail: boolean; |
| | | }; |
| | | |
| | |
| | | !( |
| | | row.checkReceiveStatus === EnumTaskUserSubmitCheckReceiveStatus.WaitSubmit || |
| | | row.checkReceiveStatus === EnumTaskUserSubmitCheckReceiveStatus.WaitCheckReceive |
| | | ) || form.value.isDetail, |
| | | ) || |
| | | form.value.isDetail || |
| | | !form.value.isInternal, |
| | | }, |
| | | }, |
| | | { |
| | |
| | | !( |
| | | row.checkReceiveStatus === EnumTaskUserSubmitCheckReceiveStatus.WaitSubmit || |
| | | row.checkReceiveStatus === EnumTaskUserSubmitCheckReceiveStatus.WaitCheckReceive |
| | | ) || form.value.isDetail, |
| | | ) || |
| | | form.value.isDetail || |
| | | !form.value.isInternal, |
| | | }, |
| | | }, |
| | | { |
| | |
| | | </BlFileUpload> |
| | | <el-button |
| | | v-if="checkSubModuleItemShow('pageButton', 'addBtn')" |
| | | @click="handleStaffInfoAdd()" |
| | | @click="handleInternalStaffAdd()" |
| | | type="primary" |
| | | >新建</el-button |
| | | > |
| | |
| | | /> |
| | | <SendShotMessageDialog v-bind="dialogShotMessageProps" /> |
| | | <SignDialog v-bind="dialogSignProps" /> |
| | | <AddInternalStaffDialog v-bind="dialogAddInternalStaffProps" /> |
| | | </LoadingLayout> |
| | | </template> |
| | | |
| | |
| | | import BatchImportDialog from './components/BatchImportDialog.vue'; |
| | | import SendShotMessageDialog from './components/SendShotMessageDialog.vue'; |
| | | import StaffDetailInfoDialog from './components/StaffDetailInfoDialog.vue'; |
| | | import AddInternalStaffDialog from './components/AddInternalStaffDialog.vue'; |
| | | import SignDialog from './components/SignDialog.vue'; |
| | | import * as enterpriseEmployeeServices from '@/services/api/enterpriseEmployee'; |
| | | import { ModelValueType } from 'element-plus'; |
| | |
| | | handleAdd: handleStaffInfoAdd, |
| | | editForm: staffInfoEditForm, |
| | | } = useFormDialog({ |
| | | onConfirm: addEnterpriseEmployee, |
| | | onConfirm: editEnterpriseEmployee, |
| | | defaultFormParams: { |
| | | id: '', |
| | | name: '', |
| | |
| | | regiterTime: '', |
| | | userRealTime: '', |
| | | userSignContractTime: '', |
| | | contractTime: [] as unknown as ModelValueType, |
| | | isDetail: false, |
| | | }, |
| | | }); |
| | |
| | | userRealTime: row.userRealTime ?? '', |
| | | userSignContractTime: row.userSignContractTime ?? '', |
| | | isDetail: isDetail, |
| | | |
| | | contractTime: [row.contractBegin, row.contractEnd], |
| | | }); |
| | | } catch (error) {} |
| | | } |
| | | |
| | | async function addEnterpriseEmployee() { |
| | | try { |
| | | let params: API.AddEnterpriseEmployeeCommand = { |
| | | 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 ?? '', |
| | | contractUrl: staffInfoEditForm.contractUrl[0]?.path ?? '', |
| | | contractBegin: format(staffInfoEditForm.contractTime[0], 'YYYY-MM-DD 00:00:00'), |
| | | contractEnd: format(staffInfoEditForm.contractTime[1], 'YYYY-MM-DD 23:59:59'), |
| | | }; |
| | | let res = await enterpriseEmployeeServices.addEnterpriseEmployee(params); |
| | | if (res) { |
| | | Message.successMessage('操作成功'); |
| | | getList(paginationState.pageIndex); |
| | | } |
| | | } catch (error) {} |
| | | } |
| | | |
| | |
| | | state.flexjobUrl = [] as UploadUserFile[]; |
| | | } |
| | | } |
| | | |
| | | const { |
| | | dialogProps: dialogAddInternalStaffProps, |
| | | handleAdd: handleInternalStaffAdd, |
| | | editForm: internalStaffEditForm, |
| | | } = useFormDialog({ |
| | | onConfirm: addEnterpriseEmployee, |
| | | defaultFormParams: { |
| | | name: '', |
| | | identity: '', |
| | | contactPhoneNumber: '', |
| | | gender: EnumUserGender.Male, |
| | | age: null as any as number, |
| | | identityImg: [] as UploadUserFile[], |
| | | identityBackImg: [] as UploadUserFile[], |
| | | contractUrl: [] as UploadUserFile[], |
| | | regiterTime: '', |
| | | userRealTime: '', |
| | | userSignContractTime: '', |
| | | contractTime: [] as unknown as ModelValueType, |
| | | }, |
| | | }); |
| | | |
| | | async function addEnterpriseEmployee() { |
| | | try { |
| | | let params: API.AddEnterpriseEmployeeCommand = { |
| | | name: internalStaffEditForm.name, |
| | | identity: internalStaffEditForm.identity, |
| | | contactPhoneNumber: internalStaffEditForm.contactPhoneNumber, |
| | | gender: internalStaffEditForm.gender, |
| | | age: internalStaffEditForm.age, |
| | | identityImg: internalStaffEditForm.identityImg[0]?.path ?? '', |
| | | identityBackImg: internalStaffEditForm.identityBackImg[0]?.path ?? '', |
| | | contractUrl: internalStaffEditForm.contractUrl[0]?.path ?? '', |
| | | contractBegin: format(internalStaffEditForm.contractTime[0], 'YYYY-MM-DD 00:00:00'), |
| | | contractEnd: format(internalStaffEditForm.contractTime[1], 'YYYY-MM-DD 23:59:59'), |
| | | }; |
| | | let res = await enterpriseEmployeeServices.addEnterpriseEmployee(params); |
| | | if (res) { |
| | | Message.successMessage('操作成功'); |
| | | getList(paginationState.pageIndex); |
| | | } |
| | | } catch (error) {} |
| | | } |
| | | </script> |
| New file |
| | |
| | | <template> |
| | | <ProDialog |
| | | title="新建灵工" |
| | | v-model="visible" |
| | | @close="onDialogClose" |
| | | destroy-on-close |
| | | draggable |
| | | :width="900" |
| | | > |
| | | <ProForm :model="form" ref="dialogForm" label-width="120px"> |
| | | <ProFormCol> |
| | | <ProFormColItem :span="12"> |
| | | <ProFormItemV2 label="姓名:" prop="name" :check-rules="[{ message: '请输入姓名' }]"> |
| | | <ProFormText placeholder="请输入姓名" v-model.trim="form.name"></ProFormText> |
| | | </ProFormItemV2> |
| | | </ProFormColItem> |
| | | <ProFormColItem :span="12"> |
| | | <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"> |
| | | <ProFormItemV2 |
| | | label="身份证号:" |
| | | prop="identity" |
| | | :check-rules="[{ message: '请输入身份证号', type: 'idCard' }]" |
| | | > |
| | | <ProFormText |
| | | placeholder="请输入身份证号" |
| | | v-model.trim="form.identity" |
| | | @blur="handleCalculateAge" |
| | | ></ProFormText> |
| | | </ProFormItemV2> |
| | | </ProFormColItem> |
| | | <ProFormColItem :span="12"> |
| | | <ProFormItemV2 |
| | | label="协议时间:" |
| | | prop="contractTime" |
| | | :check-rules="[{ message: '请选择协议时间', type: 'array' }]" |
| | | > |
| | | <ProFormDatePicker |
| | | v-model="form.contractTime" |
| | | type="daterange" |
| | | range-separator="至" |
| | | start-placeholder="起始日期" |
| | | end-placeholder="终止日期" |
| | | ></ProFormDatePicker> |
| | | </ProFormItemV2> |
| | | </ProFormColItem> |
| | | <ProFormColItem :span="12"> |
| | | <ProFormItemV2 |
| | | label="手机号:" |
| | | prop="contactPhoneNumber" |
| | | :check-rules="[{ message: '请输入手机号', type: 'phone' }]" |
| | | > |
| | | <ProFormText |
| | | placeholder="请输入手机号" |
| | | v-model.trim="form.contactPhoneNumber" |
| | | ></ProFormText> |
| | | </ProFormItemV2> |
| | | </ProFormColItem> |
| | | <ProFormColItem :span="12"> </ProFormColItem> |
| | | <ProFormColItem :span="12"> |
| | | <ProFormItemV2 |
| | | label="性别:" |
| | | prop="gender" |
| | | required |
| | | :check-rules="[{ message: '请选择性别' }]" |
| | | > |
| | | <ProFormRadio |
| | | v-model="form.gender" |
| | | :value-enum="EnumUserGenderTextForPerson" |
| | | :buttonStyle="false" |
| | | ></ProFormRadio> |
| | | </ProFormItemV2> |
| | | </ProFormColItem> |
| | | <ProFormColItem :span="12"> </ProFormColItem> |
| | | <ProFormColItem :span="12"> |
| | | <ProFormItemV2 |
| | | label="年龄:" |
| | | prop="age" |
| | | :check-rules="[{ message: '请输入年龄', type: 'number' }]" |
| | | > |
| | | <ProFormInputNumber |
| | | v-model="form.age" |
| | | :controls="false" |
| | | :min="0" |
| | | :max="9999" |
| | | placeholder="请输入年龄" |
| | | unit="岁" |
| | | /> |
| | | </ProFormItemV2> |
| | | </ProFormColItem> |
| | | </ProFormCol> |
| | | <ProFormItemV2 |
| | | label="身份证正面:" |
| | | prop="identityImg" |
| | | :check-rules="[{ message: '请上传身份证正面', type: 'upload' }]" |
| | | > |
| | | <ProFormImageUpload |
| | | v-model:file-url="form.identityImg" |
| | | :limitFileSize="10" |
| | | :showTip="false" |
| | | > |
| | | </ProFormImageUpload> |
| | | </ProFormItemV2> |
| | | <ProFormItemV2 |
| | | label="身份证反面:" |
| | | prop="identityBackImg" |
| | | :check-rules="[{ message: '请上传身份证反面', type: 'upload' }]" |
| | | > |
| | | <ProFormImageUpload |
| | | v-model:file-url="form.identityBackImg" |
| | | :limitFileSize="10" |
| | | :showTip="false" |
| | | > |
| | | </ProFormImageUpload> |
| | | </ProFormItemV2> |
| | | </ProForm> |
| | | <template #footer> |
| | | <span class="dialog-footer"> |
| | | <el-button type="primary" @click="handleConfirm">提交</el-button> |
| | | <el-button @click="emit('onCancel')">取消</el-button> |
| | | </span> |
| | | </template> |
| | | </ProDialog> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import { FormInstance, ModelValueType } from 'element-plus'; |
| | | import { |
| | | ProDialog, |
| | | ProForm, |
| | | ProFormItemV2, |
| | | ProFormText, |
| | | UploadUserFile, |
| | | ProFormCol, |
| | | ProFormColItem, |
| | | ProFormImageUpload, |
| | | ProFormRadio, |
| | | ProFormUpload, |
| | | ProFormInputNumber, |
| | | ProFormDatePicker, |
| | | } from '@bole-core/components'; |
| | | import { calculateAge, deepClone, format } from '@/utils'; |
| | | import { EnumUserGender, EnumUserGenderTextForPerson } from '@/constants'; |
| | | import { BoleRegExp } from '@bole-core/core'; |
| | | |
| | | defineOptions({ |
| | | name: 'AddInternalStaffDialog', |
| | | }); |
| | | |
| | | type Form = { |
| | | title?: string; |
| | | name: string; |
| | | identity: string; |
| | | contactPhoneNumber: string; |
| | | gender: EnumUserGender; |
| | | age: number; |
| | | identityImg: UploadUserFile[]; |
| | | identityBackImg: UploadUserFile[]; |
| | | contractUrl: UploadUserFile[]; |
| | | regiterTime: string; |
| | | userRealTime: string; |
| | | userSignContractTime: string; |
| | | |
| | | contractTime: ModelValueType; |
| | | }; |
| | | |
| | | const visible = defineModel({ type: Boolean }); |
| | | |
| | | const form = defineModel<Form>('form'); |
| | | let defaultForm: Form = null; |
| | | |
| | | watch( |
| | | visible, |
| | | (visible) => { |
| | | if (visible) { |
| | | defaultForm = deepClone(unref(form)); |
| | | } |
| | | }, |
| | | { |
| | | immediate: true, |
| | | } |
| | | ); |
| | | |
| | | const emit = defineEmits<{ |
| | | (e: 'onConfirm'): void; |
| | | (e: 'onCancel'): void; |
| | | }>(); |
| | | |
| | | const dialogForm = ref<FormInstance>(); |
| | | |
| | | function onDialogClose() { |
| | | if (!dialogForm.value) return; |
| | | dialogForm.value.resetFields(); |
| | | } |
| | | |
| | | function handleConfirm() { |
| | | if (!dialogForm.value) return; |
| | | dialogForm.value.validate((valid) => { |
| | | if (valid) { |
| | | emit('onConfirm'); |
| | | } else { |
| | | return; |
| | | } |
| | | }); |
| | | } |
| | | |
| | | function handleReset() { |
| | | form.value = { ...defaultForm }; |
| | | } |
| | | |
| | | function handleCalculateAge() { |
| | | form.value.age = calculateAge(form.value.identity); |
| | | } |
| | | </script> |
| | |
| | | </ProFormItemV2> |
| | | </ProFormColItem> |
| | | <ProFormColItem :span="12"> |
| | | <ProFormItemV2 label="服务协议:" prop="contractUrl"> |
| | | <ProFormUpload |
| | | v-model:file-url="form.contractUrl" |
| | | :limit="1" |
| | | :limitFileSize="10" |
| | | accept="jpg/jpeg,png,pdf" |
| | | ></ProFormUpload> |
| | | <ProFormItemV2 v-if="form.isDetail" label="报名时间:" prop="regiterTime"> |
| | | <div>{{ format(form.regiterTime, 'YYYY-MM-DD HH:mm') }}</div> |
| | | </ProFormItemV2> |
| | | </ProFormColItem> |
| | | <ProFormColItem :span="12"> |
| | |
| | | </ProFormItemV2> |
| | | </ProFormColItem> |
| | | <ProFormColItem :span="12"> |
| | | <ProFormItemV2 |
| | | label="协议时间:" |
| | | prop="contractTime" |
| | | :check-rules="[{ message: '请选择协议时间', type: 'array' }]" |
| | | > |
| | | <ProFormDatePicker |
| | | v-model="form.contractTime" |
| | | type="daterange" |
| | | range-separator="至" |
| | | start-placeholder="起始日期" |
| | | end-placeholder="终止日期" |
| | | ></ProFormDatePicker> |
| | | <ProFormItemV2 v-if="form.isDetail" label="实名时间:" prop="userRealTime"> |
| | | <div>{{ format(form.userRealTime, 'YYYY-MM-DD HH:mm') }}</div> |
| | | </ProFormItemV2> |
| | | </ProFormColItem> |
| | | <ProFormColItem :span="12"> |
| | |
| | | ></ProFormText> |
| | | </ProFormItemV2> |
| | | </ProFormColItem> |
| | | <ProFormColItem :span="12"> </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"> |
| | | <ProFormItemV2 |
| | | label="性别:" |
| | |
| | | ></ProFormRadio> |
| | | </ProFormItemV2> |
| | | </ProFormColItem> |
| | | <ProFormColItem :span="12"> </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"> |
| | | <ProFormItemV2 |
| | | label="年龄:" |
| | |
| | | :min="0" |
| | | :max="9999" |
| | | placeholder="请输入年龄" |
| | | unit="岁" |
| | | /> |
| | | > |
| | | <template #readContent> |
| | | <span v-if="form.age">{{ form.age }}岁</span> |
| | | <span v-else></span> |
| | | </template> |
| | | </ProFormInputNumber> |
| | | </ProFormItemV2> |
| | | </ProFormColItem> |
| | | </ProFormCol> |
| | |
| | | <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> |
| | |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import { FormInstance, ModelValueType } from 'element-plus'; |
| | | import { FormInstance } from 'element-plus'; |
| | | import { |
| | | ProDialog, |
| | | ProForm, |
| | |
| | | ProFormRadio, |
| | | ProFormUpload, |
| | | ProFormInputNumber, |
| | | ProFormDatePicker, |
| | | } from '@bole-core/components'; |
| | | import { calculateAge, deepClone, format } from '@/utils'; |
| | | import { EnumUserGender, EnumUserGenderTextForPerson } from '@/constants'; |
| | |
| | | userRealTime: string; |
| | | userSignContractTime: string; |
| | | isDetail: boolean; |
| | | |
| | | contractTime: ModelValueType; |
| | | }; |
| | | |
| | | const visible = defineModel({ type: Boolean }); |