From d0d7ca8e69a49b95da6339e6c0abf585e9dea1fc Mon Sep 17 00:00:00 2001 From: fuenmao <980740792@qq.com> Date: Thu, 27 Aug 2026 16:27:17 +0800 Subject: [PATCH] 3333 --- src/api/modules/biz/onboarding.ts | 1 + src/components/ProTable/index.vue | 15 +++ src/utils/errorHandler.ts | 10 +- src/views/biz/onboarding/employee/index.vue | 41 ++++++- .../components/VariableDefinitionPanel.vue | 2 + src/views/biz/onboarding/task/index.vue | 17 ++- .../limit/role/components/grantPermission.vue | 112 ++++++++++++------ 7 files changed, 150 insertions(+), 48 deletions(-) diff --git a/src/api/modules/biz/onboarding.ts b/src/api/modules/biz/onboarding.ts index fad8baf..a231eb1 100644 --- a/src/api/modules/biz/onboarding.ts +++ b/src/api/modules/biz/onboarding.ts @@ -126,6 +126,7 @@ export interface OnboardingTaskContractVariableItem { variableName: string; variableType: string; dataType: string; + sortCode: number; variableValue?: string | number; required: boolean; hrEditable: boolean; diff --git a/src/components/ProTable/index.vue b/src/components/ProTable/index.vue index 8e6613d..5771d5e 100644 --- a/src/components/ProTable/index.vue +++ b/src/components/ProTable/index.vue @@ -173,6 +173,21 @@ const processTableData = computed(() => { // 监听页面 initParam 改化,重新获取表格数据 watch(() => props.initParam, getTableList, { deep: true }); +// 监听 props.data 变化,动态更新分页 total,并在超出页码时自动修正 +watch( + () => props.data, + newData => { + if (newData) { + pageable.value.total = newData.length; + const maxPage = Math.ceil(newData.length / pageable.value.pageSize) || 1; + if (pageable.value.pageNum > maxPage) { + pageable.value.pageNum = 1; + } + } + }, + { deep: true, immediate: true } +); + // 接收 columns 并设置为响应式 const tableColumns = reactive(props.columns); diff --git a/src/utils/errorHandler.ts b/src/utils/errorHandler.ts index 45409e6..8cfe7ec 100644 --- a/src/utils/errorHandler.ts +++ b/src/utils/errorHandler.ts @@ -18,8 +18,10 @@ import { ElNotification } from "element-plus"; * @description 全局代码错误捕捉 * */ const errorHandler = (error: any) => { - // 过滤 HTTP 请求错误 - if (error.status || error.status == 0) return false; + // 过滤 HTTP 请求错误与接口业务返回错误(这类错误已在 Axios 拦截器中统一通过 ElMessage 弹出提示,无需重复告警) + if (!error || error.status !== undefined || error.code !== undefined || error.isAxiosError || error.config) { + return false; + } let errorMap: { [key: string]: string } = { InternalError: "Javascript引擎内部错误", ReferenceError: "未找到对象", @@ -29,10 +31,10 @@ const errorHandler = (error: any) => { EvalError: "错误的使用了Eval", URIError: "URI错误" }; - let errorName = errorMap[error.name] || "未知错误"; + let errorName = errorMap[error?.name] || "未知错误"; ElNotification({ title: errorName, - message: error, + message: error?.message || String(error), type: "error", duration: 3000 }); diff --git a/src/views/biz/onboarding/employee/index.vue b/src/views/biz/onboarding/employee/index.vue index 0fef9ce..e9ee2b9 100644 --- a/src/views/biz/onboarding/employee/index.vue +++ b/src/views/biz/onboarding/employee/index.vue @@ -112,7 +112,7 @@ plain size="small" icon="Download" - @click="download(contract.generatedDocxFileId)" + @click="download(contract.generatedDocxFileId, `${detail?.employee?.employeeName || '员工'}_${contract.contractName || '入职合同'}.docx`)" > 下载合同 DOCX @@ -159,6 +159,7 @@ diff --git a/src/views/biz/onboarding/entry-config/components/VariableDefinitionPanel.vue b/src/views/biz/onboarding/entry-config/components/VariableDefinitionPanel.vue index 1b195b1..70a545c 100644 --- a/src/views/biz/onboarding/entry-config/components/VariableDefinitionPanel.vue +++ b/src/views/biz/onboarding/entry-config/components/VariableDefinitionPanel.vue @@ -51,6 +51,8 @@ + +