wupengfei
2025-11-12 2d186e743eb24fd44fba02e2146e55273a66f153
feat: 1.3.0.2
8个文件已修改
1个文件已添加
413 ■■■■ 已修改文件
src/services/api/typings.d.ts 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/EmploymentManage/CheckReceiveTaskDetail.vue 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/EmploymentManage/EmploymentManageArrange.vue 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/EmploymentManage/EmploymentSignList.vue 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/EmploymentManage/TaskManageList.vue 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/EmploymentManage/components/CheckManageDialog.vue 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/FlexJobManage/FlexJobManage.vue 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/FlexJobManage/components/AddInternalStaffDialog.vue 222 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/FlexJobManage/components/StaffInfoDialog.vue 55 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/services/api/typings.d.ts
@@ -3901,6 +3901,7 @@
  }
  interface GetArrangeTaskUsersQueryResult {
    objectData?: GetArrangeTaskUsersQueryResultObjectData;
    pageModel?: PagedListQueryResultPageModel;
    /** 数据 */
    data?: GetArrangeTaskUsersQueryResultItem[];
@@ -3938,6 +3939,11 @@
    /** 工作经验 */
    workExperience?: string;
    arrangeStatus?: EnumTaskUserArrangeStatus;
  }
  interface GetArrangeTaskUsersQueryResultObjectData {
    /** 是否内部任务 */
    isInternal?: boolean;
  }
  interface GetBankOcrCommand {
@@ -4053,6 +4059,8 @@
  interface GetCheckReceiveTaskQueryResultObjectData {
    /** 供应商Id */
    supplierEnterpriseId?: string;
    /** 是否内部任务 */
    isInternal?: boolean;
    /** 需求人数 */
    needPeopleNumber?: number;
    /** 任务名称 */
@@ -4324,6 +4332,8 @@
    addressName?: string;
    /** 验收方式 */
    checkReceiveMethods?: EnumTaskCheckReceiveMethod[];
    /** 是否内部任务 */
    isInternal?: boolean;
  }
  interface GetCodeUrlQueryResult {
@@ -7060,6 +7070,8 @@
    id?: string;
    /** 供应商Id */
    supplierEnterpriseId?: string;
    /** 是否内部任务 */
    isInternal?: boolean;
    /** 供应商 */
    supplierEnterpriseName?: string;
    /** 供应商账号 */
@@ -7170,6 +7182,7 @@
  }
  interface GetTaskUsersQueryResult {
    objectData?: GetTaskUsersQueryResultObjectData;
    pageModel?: PagedListQueryResultPageModel;
    /** 数据 */
    data?: GetTaskUsersQueryResultItem[];
@@ -7211,6 +7224,11 @@
    hireStatus?: EnumTaskUserHireStatus;
  }
  interface GetTaskUsersQueryResultObjectData {
    /** 是否内部任务 */
    isInternal?: boolean;
  }
  interface GetThreeResourceLogsQuery {
    /** 创建时间-起始 */
    createdTimeBegin?: string;
src/views/EmploymentManage/CheckReceiveTaskDetail.vue
@@ -59,13 +59,11 @@
  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';
@@ -105,6 +103,8 @@
const BaseState = {
  loading: true,
  checkReceiveMethods: [] as any as EnumTaskCheckReceiveMethod[],
  isInternal: false,
};
const state = reactive({ ...BaseState });
@@ -141,6 +141,7 @@
        showLoading: !state.loading,
      });
      state.checkReceiveMethods = res.objectData?.checkReceiveMethods;
      state.isInternal = res.objectData?.isInternal;
      return res;
    } catch (error) {}
  },
@@ -166,6 +167,7 @@
  handleEdit({
    id: row.id,
    checkReceiveMethods: state.checkReceiveMethods,
    isInternal: state.isInternal,
    isDetail,
  });
}
@@ -174,6 +176,7 @@
  defaultFormParams: {
    id: '',
    checkReceiveMethods: [] as any as EnumTaskCheckReceiveMethod[],
    isInternal: false,
    isDetail: false,
  },
});
src/views/EmploymentManage/EmploymentManageArrange.vue
@@ -69,7 +69,7 @@
    },
    extraProps: {
      hide: (row: API.GetArrangeTaskUsersQueryResultItem) =>
        row.arrangeStatus === EnumTaskUserArrangeStatus.Complete,
        row.arrangeStatus === EnumTaskUserArrangeStatus.Complete || !state.isInternal,
    },
  },
};
@@ -84,6 +84,7 @@
const BaseState = {
  loading: true,
  isInternal: false,
};
const state = reactive({ ...BaseState });
@@ -117,6 +118,9 @@
      let res = await taskUserServices.getArrangeTaskUsers(params, {
        showLoading: !state.loading,
      });
      if (res) {
        state.isInternal = res.objectData?.isInternal;
      }
      return res;
    } catch (error) {
      console.log('error: ', error);
src/views/EmploymentManage/EmploymentSignList.vue
@@ -67,7 +67,7 @@
    },
    extraProps: {
      hide: (row: API.GetTaskUsersQueryResultItem) =>
        row.hireStatus === EnumTaskUserHireStatus.Pass,
        row.hireStatus === EnumTaskUserHireStatus.Pass || !state.isInternal,
    },
  },
  refuseBtn: {
@@ -76,7 +76,7 @@
    },
    extraProps: {
      hide: (row: API.GetTaskUsersQueryResultItem) =>
        row.hireStatus !== EnumTaskUserHireStatus.Wait,
        row.hireStatus !== EnumTaskUserHireStatus.Wait || !state.isInternal,
    },
  },
};
@@ -90,6 +90,8 @@
const id = route.params.id as string;
const BaseState = {
  loading: true,
  isInternal: false,
};
const state = reactive({ ...BaseState });
@@ -122,6 +124,9 @@
      let res = await taskUserServices.getTaskUsers(params, {
        showLoading: !state.loading,
      });
      if (res) {
        state.isInternal = res.objectData?.isInternal;
      }
      return res;
    } catch (error) {
      console.log('error: ', error);
src/views/EmploymentManage/TaskManageList.vue
@@ -53,9 +53,10 @@
      </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>
@@ -94,7 +95,8 @@
      onClick: (role) => goAddOrEdit(role),
    },
    extraProps: {
      hide: (row: API.GetTaskInfosQueryResultItem) => row.status === EnumTaskStatus.Complete,
      hide: (row: API.GetTaskInfosQueryResultItem) =>
        row.status === EnumTaskStatus.Complete || !row.isInternal,
    },
  },
  detailBtn: {
@@ -109,7 +111,7 @@
    },
    extraProps: {
      hide: (row: API.GetTaskInfosQueryResultItem) =>
        row.releaseStatus === EnumTaskReleaseStatus.InProcess,
        row.releaseStatus === EnumTaskReleaseStatus.InProcess || !row.isInternal,
    },
  },
  unPublishBtn: {
@@ -119,7 +121,7 @@
    },
    extraProps: {
      hide: (row: API.GetTaskInfosQueryResultItem) =>
        row.releaseStatus === EnumTaskReleaseStatus.Stopped,
        row.releaseStatus === EnumTaskReleaseStatus.Stopped || !row.isInternal,
    },
  },
  arrangeBtn: {
@@ -128,7 +130,7 @@
    },
    extraProps: {
      hide: (row: API.GetTaskInfosQueryResultItem) =>
        row.releaseStatus === EnumTaskReleaseStatus.Stopped,
        row.releaseStatus === EnumTaskReleaseStatus.Stopped || !row.isInternal,
    },
  },
};
src/views/EmploymentManage/components/CheckManageDialog.vue
@@ -39,6 +39,7 @@
type Form = {
  id: string;
  checkReceiveMethods: EnumTaskCheckReceiveMethod[];
  isInternal: boolean;
  isDetail: boolean;
};
@@ -157,7 +158,9 @@
        !(
          row.checkReceiveStatus === EnumTaskUserSubmitCheckReceiveStatus.WaitSubmit ||
          row.checkReceiveStatus === EnumTaskUserSubmitCheckReceiveStatus.WaitCheckReceive
        ) || form.value.isDetail,
        ) ||
        form.value.isDetail ||
        !form.value.isInternal,
    },
  },
  {
@@ -173,7 +176,9 @@
        !(
          row.checkReceiveStatus === EnumTaskUserSubmitCheckReceiveStatus.WaitSubmit ||
          row.checkReceiveStatus === EnumTaskUserSubmitCheckReceiveStatus.WaitCheckReceive
        ) || form.value.isDetail,
        ) ||
        form.value.isDetail ||
        !form.value.isInternal,
    },
  },
  {
src/views/FlexJobManage/FlexJobManage.vue
@@ -124,7 +124,7 @@
          </BlFileUpload>
          <el-button
            v-if="checkSubModuleItemShow('pageButton', 'addBtn')"
            @click="handleStaffInfoAdd()"
            @click="handleInternalStaffAdd()"
            type="primary"
            >新建</el-button
          >
@@ -174,6 +174,7 @@
    />
    <SendShotMessageDialog v-bind="dialogShotMessageProps" />
    <SignDialog v-bind="dialogSignProps" />
    <AddInternalStaffDialog v-bind="dialogAddInternalStaffProps" />
  </LoadingLayout>
</template>
@@ -202,6 +203,7 @@
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';
@@ -304,7 +306,7 @@
  handleAdd: handleStaffInfoAdd,
  editForm: staffInfoEditForm,
} = useFormDialog({
  onConfirm: addEnterpriseEmployee,
  onConfirm: editEnterpriseEmployee,
  defaultFormParams: {
    id: '',
    name: '',
@@ -318,7 +320,6 @@
    regiterTime: '',
    userRealTime: '',
    userSignContractTime: '',
    contractTime: [] as unknown as ModelValueType,
    isDetail: false,
  },
});
@@ -342,31 +343,7 @@
      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) {}
}
@@ -676,4 +653,48 @@
    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>
src/views/FlexJobManage/components/AddInternalStaffDialog.vue
New file
@@ -0,0 +1,222 @@
<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>
src/views/FlexJobManage/components/StaffInfoDialog.vue
@@ -15,13 +15,8 @@
          </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">
@@ -38,18 +33,8 @@
          </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">
@@ -64,7 +49,11 @@
            ></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="性别:"
@@ -79,7 +68,16 @@
            ></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="年龄:"
@@ -92,8 +90,12 @@
              :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>
@@ -127,7 +129,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>
@@ -136,7 +138,7 @@
</template>
<script setup lang="ts">
import { FormInstance, ModelValueType } from 'element-plus';
import { FormInstance } from 'element-plus';
import {
  ProDialog,
  ProForm,
@@ -149,7 +151,6 @@
  ProFormRadio,
  ProFormUpload,
  ProFormInputNumber,
  ProFormDatePicker,
} from '@bole-core/components';
import { calculateAge, deepClone, format } from '@/utils';
import { EnumUserGender, EnumUserGenderTextForPerson } from '@/constants';
@@ -174,8 +175,6 @@
  userRealTime: string;
  userSignContractTime: string;
  isDetail: boolean;
  contractTime: ModelValueType;
};
const visible = defineModel({ type: Boolean });