From c6509a3545e63bf47d7d61daf00ace4ea460cb7b Mon Sep 17 00:00:00 2001 From: fuenmao <980740792@qq.com> Date: Mon, 24 Aug 2026 16:36:28 +0800 Subject: [PATCH] =?UTF-8?q?=E5=89=8D=E7=AB=AF=E7=AC=AC=E4=B8=80=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components.d.ts | 3 + src/api/modules/biz/onboarding-public.ts | 34 + src/api/modules/biz/onboarding.ts | 521 +++++++ src/auto-import.d.ts | 2 +- src/routers/modules/staticRouter.ts | 6 + src/views/biz/onboarding/contract/index.vue | 975 ++++++++++++++ src/views/biz/onboarding/employee/index.vue | 371 +++++ .../biz/onboarding/entry-config/index.vue | 652 +++++++++ src/views/biz/onboarding/setup/index.vue | 525 ++++++++ src/views/biz/onboarding/task/index.vue | 1199 +++++++++++++++++ src/views/onboarding/fill/index.vue | 1126 ++++++++++++++++ 11 files changed, 5413 insertions(+), 1 deletion(-) create mode 100644 src/api/modules/biz/onboarding-public.ts create mode 100644 src/api/modules/biz/onboarding.ts create mode 100644 src/views/biz/onboarding/contract/index.vue create mode 100644 src/views/biz/onboarding/employee/index.vue create mode 100644 src/views/biz/onboarding/entry-config/index.vue create mode 100644 src/views/biz/onboarding/setup/index.vue create mode 100644 src/views/biz/onboarding/task/index.vue create mode 100644 src/views/onboarding/fill/index.vue diff --git a/components.d.ts b/components.d.ts index 7484766..0fa6c69 100644 --- a/components.d.ts +++ b/components.d.ts @@ -60,6 +60,7 @@ declare module 'vue' { ElRadio: typeof import('element-plus/es')['ElRadio'] ElRadioButton: typeof import('element-plus/es')['ElRadioButton'] ElRadioGroup: typeof import('element-plus/es')['ElRadioGroup'] + ElResult: typeof import('element-plus/es')['ElResult'] ElRow: typeof import('element-plus/es')['ElRow'] ElScrollbar: typeof import('element-plus/es')['ElScrollbar'] ElSelect: typeof import('element-plus/es')['ElSelect'] @@ -74,6 +75,8 @@ declare module 'vue' { ElTabPane: typeof import('element-plus/es')['ElTabPane'] ElTabs: typeof import('element-plus/es')['ElTabs'] ElTag: typeof import('element-plus/es')['ElTag'] + ElTimeline: typeof import('element-plus/es')['ElTimeline'] + ElTimelineItem: typeof import('element-plus/es')['ElTimelineItem'] ElTooltip: typeof import('element-plus/es')['ElTooltip'] ElTreeSelect: typeof import('element-plus/es')['ElTreeSelect'] ElUpload: typeof import('element-plus/es')['ElUpload'] diff --git a/src/api/modules/biz/onboarding-public.ts b/src/api/modules/biz/onboarding-public.ts new file mode 100644 index 0000000..9aca31d --- /dev/null +++ b/src/api/modules/biz/onboarding-public.ts @@ -0,0 +1,34 @@ +import { moduleRequest } from "@/api/request"; + +const http = moduleRequest("/open/onboarding/"); + +export const onboardingPublicApi = { + detail(token: string) { + return http.post("detail", { token }); + }, + + saveEmployeeInfo(params: Record) { + return http.post("save-employee-info", params); + }, + + saveDynamicValues(params: { + token: string; + values: Array<{ + fieldId: number; + fieldValue: string; + }>; + }) { + return http.post("save-dynamic-values", params); + }, + + confirmContract(params: { + token: string; + taskContractId: number; + }) { + return http.post("confirm-contract", params); + }, + + submit(token: string) { + return http.post("submit", { token }); + } +}; \ No newline at end of file diff --git a/src/api/modules/biz/onboarding.ts b/src/api/modules/biz/onboarding.ts new file mode 100644 index 0000000..c19e93f --- /dev/null +++ b/src/api/modules/biz/onboarding.ts @@ -0,0 +1,521 @@ +import { moduleRequest } from "@/api/request"; +import type { ReqId, ResPage } from "@/api/interface"; + +const taskHttp = moduleRequest("/biz/onboarding/task/"); +const auditHttp = moduleRequest("/biz/onboarding/audit/"); + +export interface OnboardingTask { + id: number; + taskNo: string; + companyId: number; + positionId: number; + taskStatus: string; + linkExpireAt?: string; + submitCount: number; + createTime: string; +} + +export interface OnboardingCompanyOption { + id: number; + companyName: string; +} + +export interface OnboardingPositionOption { + id: number; + positionName: string; +} + +export interface OnboardingCompany extends OnboardingCompanyOption { + companyCode: string; + legalName: string; + unifiedSocialCreditCode?: string; + legalRepresentative?: string; + registeredAddress?: string; + contactPhone?: string; + remark?: string; + status: string; +} + +export interface OnboardingPosition extends OnboardingPositionOption { + companyId: number; + positionCode: string; + defaultContractYears?: number; + defaultProbationMonths?: number; + remark?: string; + status: string; +} + +export interface OnboardingContractTemplate { + id: number; + templateCode: string; + templateName: string; + contractType: string; + description?: string; + status: string; +} + +export interface OnboardingContractVersion { + id: number; + templateId: number; + versionNo: string; + sourceDocxFileId: number; + effectiveDate?: string; + expiryDate?: string; + versionStatus: string; + remark?: string; +} + +export interface OnboardingTemplateVariable { + id: number; + templateVersionId: number; + variableCode: string; + variableName: string; + variableType: string; + dataType: string; + employeeField?: string; + defaultValue?: string; + required: boolean; + hrEditable: boolean; + sortCode?: number; + remark?: string; +} + +export interface OnboardingContractScope { + id: number; + companyId: number; + positionId?: number; + templateId: number; + templateVersionId: number; + required: boolean; + sortCode?: number; +} + +export interface OnboardingTaskContractVariableItem { + id: number; + variableCode: string; + variableName: string; + variableType: string; + dataType: string; + variableValue?: string; + required: boolean; + hrEditable: boolean; + editable: boolean; +} + +export interface OnboardingTaskContractVariableGroup { + taskContractId: number; + contractName: string; + contractType: string; + variables: OnboardingTaskContractVariableItem[]; +} + +export interface OnboardingEmployee { + id: number; + employeeNo?: string; + employeeName: string; + companyId: number; + positionId: number; + phone: string; + idCardNumber: string; + entryDate?: string; + createTime: string; +} + +export interface OnboardingFormField { + id: number; + fieldCode: string; + fieldName: string; + dataType: string; + optionsJson?: string; + validationRule?: string; + placeholder?: string; + status: string; +} + +export interface OnboardingMaterialType { + id: number; + materialCode: string; + materialName: string; + allowedExtensions?: string; + maxFileCount: number; + maxFileSizeMb?: number; + status: string; +} + +export interface OnboardingFormRequirement { + id: number; + companyId: number; + positionId?: number; + fieldId: number; + required: boolean; + sortCode?: number; +} + +export interface OnboardingMaterialRequirement { + id: number; + companyId: number; + positionId?: number; + materialTypeId: number; + required: boolean; + sortCode?: number; +} + +export const onboardingTaskApi = { + page(params: Record) { + return taskHttp.get>("page", params); + }, + + detail(params: ReqId) { + return taskHttp.get("detail", params); + }, + + create(params: Record) { + return taskHttp.post("create", params); + }, + + approve(params: { + taskId: number; + auditOpinion?: string; + }) { + return auditHttp.post("approve", params); + }, + + reject(params: { + taskId: number; + auditOpinion: string; + }) { + return auditHttp.post("reject", params); + }, + + generateContract(taskContractId: number) { + return moduleRequest("/biz/onboarding/contract-document/").post( + "generate", + { taskContractId } + ); + }, + + archive(params: { + taskId: number; + auditOpinion?: string; + }) { + return taskHttp.post("archive", params); + }, + + revoke(params: { + taskId: number; + auditOpinion?: string; + }) { + return taskHttp.post("revoke", params); + }, + + reviewMaterial(params: { + taskMaterialId: number; + reviewStatus: string; + reviewRemark?: string; + }) { + return moduleRequest("/biz/onboarding/material/").post( + "review", + params + ); + }, + + listCompanies() { + return moduleRequest("/biz/onboarding/company/").get< + OnboardingCompanyOption[] + >("list-enabled"); + }, + + listPositions(companyId: number) { + return moduleRequest("/biz/onboarding/position/").get< + OnboardingPositionOption[] + >("list-enabled", { companyId }); + }, + + companyPage(params: Record) { + return moduleRequest("/biz/onboarding/company/").get< + ResPage + >("page", params); + }, + + companyDetail(params: ReqId) { + return moduleRequest("/biz/onboarding/company/").get( + "detail", + params + ); + }, + + saveCompany( + params: Partial, + edit = false + ) { + return moduleRequest("/biz/onboarding/company/").post( + edit ? "edit" : "add", + params + ); + }, + + deleteCompany(ids: number[]) { + return moduleRequest("/biz/onboarding/company/").post( + "delete", + { ids } + ); + }, + + positionPage(params: Record) { + return moduleRequest("/biz/onboarding/position/").get< + ResPage + >("page", params); + }, + + positionDetail(params: ReqId) { + return moduleRequest("/biz/onboarding/position/").get( + "detail", + params + ); + }, + + savePosition( + params: Partial, + edit = false + ) { + return moduleRequest("/biz/onboarding/position/").post( + edit ? "edit" : "add", + params + ); + }, + + deletePosition(ids: number[]) { + return moduleRequest("/biz/onboarding/position/").post( + "delete", + { ids } + ); + }, + + templatePage(params: Record) { + return moduleRequest("/biz/onboarding/contract-template/").get< + ResPage + >("page", params); + }, + + templateDetail(params: ReqId) { + return moduleRequest("/biz/onboarding/contract-template/").get< + OnboardingContractTemplate + >("detail", params); + }, + + saveTemplate( + params: Partial, + edit = false + ) { + return moduleRequest("/biz/onboarding/contract-template/").post( + edit ? "edit" : "add", + params + ); + }, + + deleteTemplate(ids: number[]) { + return moduleRequest("/biz/onboarding/contract-template/").post( + "delete", + { ids } + ); + }, + + versionPage(params: { + templateId: number; + pageNum: number; + pageSize: number; + }) { + return moduleRequest("/biz/onboarding/contract-template/").get< + ResPage + >("version/page", params); + }, + + addVersion(params: Partial) { + return moduleRequest("/biz/onboarding/contract-template/").post( + "version/add", + params + ); + }, + + setVersionStatus(params: { + id: number; + versionStatus: string; + }) { + return moduleRequest("/biz/onboarding/contract-template/").post( + "version/set-status", + params + ); + }, + + variablePage(params: { + templateVersionId: number; + pageNum: number; + pageSize: number; + }) { + return moduleRequest("/biz/onboarding/contract-template/").get< + ResPage + >("variable/page", params); + }, + + saveVariable( + params: Partial, + edit = false + ) { + return moduleRequest("/biz/onboarding/contract-template/").post( + edit ? "variable/edit" : "variable/add", + params + ); + }, + + deleteVariable(ids: number[]) { + return moduleRequest("/biz/onboarding/contract-template/").post( + "variable/delete", + { ids } + ); + }, + + scopePage(params: { + templateId: number; + pageNum: number; + pageSize: number; + }) { + return moduleRequest("/biz/onboarding/contract-template/").get< + ResPage + >("scope/page", params); + }, + + addScope(params: Partial) { + return moduleRequest("/biz/onboarding/contract-template/").post( + "scope/add", + params + ); + }, + + deleteScope(ids: number[]) { + return moduleRequest("/biz/onboarding/contract-template/").post( + "scope/delete", + { ids } + ); + }, + + uploadDocx(params: FormData) { + return moduleRequest("/sys/dev/file/").post( + "uploadLocal", + params + ); + }, + + taskContractVariables(taskId: number) { + return moduleRequest("/biz/onboarding/task-contract-variable/").get< + OnboardingTaskContractVariableGroup[] + >("list", { taskId }); + }, + + saveTaskContractVariables(params: { + taskContractId: number; + values: Array<{ + id: number; + variableValue?: string; + }>; + }) { + return moduleRequest("/biz/onboarding/task-contract-variable/").post( + "save", + params + ); + }, + + employeePage(params: Record) { + return moduleRequest("/biz/onboarding/employee/").get< + ResPage + >("page", params); + }, + + employeeDetail(params: ReqId) { + return moduleRequest("/biz/onboarding/employee/").get( + "detail", + params + ); + }, + + listFormFields() { + return moduleRequest("/biz/onboarding/entry-config/").get< + OnboardingFormField[] + >("form-field/list"); + }, + + saveFormField(params: Partial) { + return moduleRequest("/biz/onboarding/entry-config/").post( + "form-field/save", + params + ); + }, + + deleteFormFields(ids: number[]) { + return moduleRequest("/biz/onboarding/entry-config/").post( + "form-field/delete", + { ids } + ); + }, + + listMaterialTypes() { + return moduleRequest("/biz/onboarding/entry-config/").get< + OnboardingMaterialType[] + >("material-type/list"); + }, + + saveMaterialType(params: Partial) { + return moduleRequest("/biz/onboarding/entry-config/").post( + "material-type/save", + params + ); + }, + + deleteMaterialTypes(ids: number[]) { + return moduleRequest("/biz/onboarding/entry-config/").post( + "material-type/delete", + { ids } + ); + }, + + listFormRequirements(companyId: number) { + return moduleRequest("/biz/onboarding/entry-config/").get< + OnboardingFormRequirement[] + >("form-requirement/list", { companyId }); + }, + + saveFormRequirement(params: Partial) { + return moduleRequest("/biz/onboarding/entry-config/").post( + "form-requirement/save", + params + ); + }, + + deleteFormRequirements(ids: number[]) { + return moduleRequest("/biz/onboarding/entry-config/").post( + "form-requirement/delete", + { ids } + ); + }, + + listMaterialRequirements(companyId: number) { + return moduleRequest("/biz/onboarding/entry-config/").get< + OnboardingMaterialRequirement[] + >("material-requirement/list", { companyId }); + }, + + saveMaterialRequirement( + params: Partial + ) { + return moduleRequest("/biz/onboarding/entry-config/").post( + "material-requirement/save", + params + ); + }, + + deleteMaterialRequirements(ids: number[]) { + return moduleRequest("/biz/onboarding/entry-config/").post( + "material-requirement/delete", + { ids } + ); + } +}; \ No newline at end of file diff --git a/src/auto-import.d.ts b/src/auto-import.d.ts index b298153..54a0d8c 100644 --- a/src/auto-import.d.ts +++ b/src/auto-import.d.ts @@ -8,7 +8,7 @@ export {} declare global { const EffectScope: typeof import('vue')['EffectScope'] const ElMessage: typeof import('element-plus/es')['ElMessage'] - const ElMessageBox: (typeof import("element-plus/es"))["ElMessageBox"] + const ElMessageBox: typeof import('element-plus/es')['ElMessageBox'] const computed: typeof import('vue')['computed'] const createApp: typeof import('vue')['createApp'] const customRef: typeof import('vue')['customRef'] diff --git a/src/routers/modules/staticRouter.ts b/src/routers/modules/staticRouter.ts index 15b8bff..4e8cc00 100644 --- a/src/routers/modules/staticRouter.ts +++ b/src/routers/modules/staticRouter.ts @@ -31,6 +31,12 @@ export const staticRouter: RouteRecordRaw[] = [ title: "登录" } }, + { + path: "/onboarding/fill", + name: "onboardingFill", + component: () => import("@/views/onboarding/fill/index.vue"), + meta: { title: "入职资料填写" } + }, { path: "/layout", name: "layout", diff --git a/src/views/biz/onboarding/contract/index.vue b/src/views/biz/onboarding/contract/index.vue new file mode 100644 index 0000000..95610ba --- /dev/null +++ b/src/views/biz/onboarding/contract/index.vue @@ -0,0 +1,975 @@ + + + + + \ No newline at end of file diff --git a/src/views/biz/onboarding/employee/index.vue b/src/views/biz/onboarding/employee/index.vue new file mode 100644 index 0000000..1c4fb0b --- /dev/null +++ b/src/views/biz/onboarding/employee/index.vue @@ -0,0 +1,371 @@ + + + + + \ No newline at end of file diff --git a/src/views/biz/onboarding/entry-config/index.vue b/src/views/biz/onboarding/entry-config/index.vue new file mode 100644 index 0000000..90c23e5 --- /dev/null +++ b/src/views/biz/onboarding/entry-config/index.vue @@ -0,0 +1,652 @@ + + + + + \ No newline at end of file diff --git a/src/views/biz/onboarding/setup/index.vue b/src/views/biz/onboarding/setup/index.vue new file mode 100644 index 0000000..ec3ea3d --- /dev/null +++ b/src/views/biz/onboarding/setup/index.vue @@ -0,0 +1,525 @@ + + + + + \ No newline at end of file diff --git a/src/views/biz/onboarding/task/index.vue b/src/views/biz/onboarding/task/index.vue new file mode 100644 index 0000000..fa0e0c3 --- /dev/null +++ b/src/views/biz/onboarding/task/index.vue @@ -0,0 +1,1199 @@ + + + + + \ No newline at end of file diff --git a/src/views/onboarding/fill/index.vue b/src/views/onboarding/fill/index.vue new file mode 100644 index 0000000..84299cf --- /dev/null +++ b/src/views/onboarding/fill/index.vue @@ -0,0 +1,1126 @@ + + + + + \ No newline at end of file