diff --git a/src/api/modules/biz/onboarding.ts b/src/api/modules/biz/onboarding.ts index f480231..9c9e40e 100644 --- a/src/api/modules/biz/onboarding.ts +++ b/src/api/modules/biz/onboarding.ts @@ -59,6 +59,7 @@ async function requestContractPreview( export interface OnboardingTask { id: number; + createUserId?: number | string; taskNo: string; companyId: number; companyName?: string; @@ -190,6 +191,7 @@ export interface OnboardingPositionOption { } export interface OnboardingCompany extends OnboardingCompanyOption { + createUserId?: number | string; companyCode: string; legalName: string; unifiedSocialCreditCode?: string; @@ -203,6 +205,7 @@ export interface OnboardingCompany extends OnboardingCompanyOption { } export interface OnboardingDepartment extends OnboardingDepartmentOption { + createUserId?: number | string; companyId: number; companyName?: string; departmentCode: string; @@ -213,6 +216,7 @@ export interface OnboardingDepartment extends OnboardingDepartmentOption { } export interface OnboardingPosition extends OnboardingPositionOption { + createUserId?: number | string; companyId: number; companyName?: string; departmentId?: number; @@ -226,6 +230,7 @@ export interface OnboardingPosition extends OnboardingPositionOption { export interface OnboardingContractTemplate { id: number; + createUserId?: number | string; companyId?: number; companyName?: string; departmentId?: number; @@ -287,6 +292,7 @@ export interface OnboardingTaskContractVariableGroup { export interface OnboardingEmployee { id: number; + createUserId?: number | string; employeeNo?: string; employeeName: string; companyId: number; @@ -309,6 +315,7 @@ export interface OnboardingEmployee { export interface OnboardingFormField { id: number; + createUserId?: number | string; fieldCode: string; fieldName: string; dataType: string; @@ -320,6 +327,7 @@ export interface OnboardingFormField { export interface OnboardingMaterialType { id: number; + createUserId?: number | string; materialCode: string; materialName: string; allowedExtensions?: string; @@ -350,6 +358,7 @@ export interface OnboardingTemplateMaterialConfig { export interface OnboardingTemplate { id: number; + createUserId?: number | string; templateCode: string; templateName: string; companyId: number; diff --git a/src/directives/modules/auth.ts b/src/directives/modules/auth.ts index 796003d..eed72bc 100644 --- a/src/directives/modules/auth.ts +++ b/src/directives/modules/auth.ts @@ -13,6 +13,7 @@ * @see https://gitee.com/dotnetmoyu/SimpleAdmin */ import { useAuthStore } from "@/stores/modules/auth"; +import { useUserStore } from "@/stores/modules/user"; import type { Directive, DirectiveBinding } from "vue"; /** @@ -32,6 +33,8 @@ const auth: Directive = { const { value, arg } = binding; // 获取authStore const authStore = useAuthStore(); + const userStore = useUserStore(); + if ((userStore.userInfoGet?.roleCodeList || []).includes("superAdmin")) return; // 获取用户权限按钮列表 const currentPageRoles = authStore.authButtonListGet ?? []; // 如果传入的值是数组,并且数组的长度大于0 diff --git a/src/utils/onboardingPermission.ts b/src/utils/onboardingPermission.ts new file mode 100644 index 0000000..71c821e --- /dev/null +++ b/src/utils/onboardingPermission.ts @@ -0,0 +1,45 @@ +import { computed } from "vue"; +import { useAuthStore } from "@/stores/modules/auth"; +import { useUserStore } from "@/stores/modules/user"; + +export interface OnboardingOwnedRecord { + createUserId?: number | string | null; +} + +/** + * 入职业务页面统一权限判断:按钮权限控制功能入口,创建人/管理全部权限控制数据操作范围。 + */ +export function useOnboardingPermission(manageAllCode: string) { + const authStore = useAuthStore(); + const userStore = useUserStore(); + + const isSuperAdmin = computed(() => + (userStore.userInfoGet?.roleCodeList || []).includes("superAdmin") + ); + const canManageAll = computed( + () => + isSuperAdmin.value || + authStore.authButtonListGet.includes(manageAllCode) + ); + + const hasAction = (code: string) => + isSuperAdmin.value || authStore.authButtonListGet.includes(code); + + const canManage = (record?: OnboardingOwnedRecord | null) => { + if (canManageAll.value) return true; + if (record?.createUserId == null || userStore.userInfoGet?.id == null) + return false; + return String(record.createUserId) === String(userStore.userInfoGet.id); + }; + + const disabledReason = (record?: OnboardingOwnedRecord | null) => + canManage(record) ? "" : "只能操作本人创建的数据"; + + return { + isSuperAdmin, + canManageAll, + hasAction, + canManage, + disabledReason + }; +} diff --git a/src/views/biz/onboarding/contract/index.vue b/src/views/biz/onboarding/contract/index.vue index 5b5fb6a..6043290 100644 --- a/src/views/biz/onboarding/contract/index.vue +++ b/src/views/biz/onboarding/contract/index.vue @@ -7,7 +7,7 @@ :request-api="onboardingTaskApi.templatePage" > @@ -50,11 +50,27 @@ 版本与配置 - + 编辑 - + 删除 @@ -184,7 +200,14 @@
- + 上传新版本 DOCX @@ -233,29 +256,38 @@ 启用 停用 删除 @@ -405,7 +437,15 @@ @@ -501,6 +541,9 @@ import { } from "@/api/modules/biz/onboarding"; import type { ColumnProps, ProTableInstance } from "@/components/ProTable/interface"; import { isMessageBoxConfirmed } from "@/utils/messageBox"; +import { useOnboardingPermission } from "@/utils/onboardingPermission"; + +const { canManage, disabledReason } = useOnboardingPermission("onboardingContractManageAll"); const templateTable = ref(); const selectedTemplate = ref(); diff --git a/src/views/biz/onboarding/employee/index.vue b/src/views/biz/onboarding/employee/index.vue index c3850ad..1dd8c8f 100644 --- a/src/views/biz/onboarding/employee/index.vue +++ b/src/views/biz/onboarding/employee/index.vue @@ -2,19 +2,30 @@
@@ -377,6 +425,9 @@ import { } from "@/api/modules/biz/onboarding"; import type { ColumnProps, ProTableInstance, EnumProps } from "@/components/ProTable/interface"; import { isMessageBoxConfirmed } from "@/utils/messageBox"; +import { useOnboardingPermission } from "@/utils/onboardingPermission"; + +const { canManage, disabledReason } = useOnboardingPermission("onboardingSetupManageAll"); const activeTab = ref("company"); diff --git a/src/views/biz/onboarding/task/index.vue b/src/views/biz/onboarding/task/index.vue index 507fba5..d483950 100644 --- a/src/views/biz/onboarding/task/index.vue +++ b/src/views/biz/onboarding/task/index.vue @@ -10,7 +10,7 @@ >