权限相关调整
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
};
|
||||
}
|
||||
@@ -7,7 +7,7 @@
|
||||
:request-api="onboardingTaskApi.templatePage"
|
||||
>
|
||||
<template #tableHeader>
|
||||
<el-button type="primary" icon="Plus" @click="openTemplateCreate">
|
||||
<el-button v-auth="'onboardingContractAdd'" type="primary" icon="Plus" @click="openTemplateCreate">
|
||||
新增签署材料模板
|
||||
</el-button>
|
||||
</template>
|
||||
@@ -50,11 +50,27 @@
|
||||
版本与配置
|
||||
</el-button>
|
||||
|
||||
<el-button link type="primary" icon="Edit" @click="openTemplateEdit(scope.row)">
|
||||
<el-button
|
||||
v-auth="'onboardingContractEdit'"
|
||||
link
|
||||
type="primary"
|
||||
icon="Edit"
|
||||
:disabled="!canManage(scope.row)"
|
||||
:title="disabledReason(scope.row)"
|
||||
@click="openTemplateEdit(scope.row)"
|
||||
>
|
||||
编辑
|
||||
</el-button>
|
||||
|
||||
<el-button link type="danger" icon="Delete" @click="removeTemplate(scope.row)">
|
||||
<el-button
|
||||
v-auth="'onboardingContractDelete'"
|
||||
link
|
||||
type="danger"
|
||||
icon="Delete"
|
||||
:disabled="!canManage(scope.row)"
|
||||
:title="disabledReason(scope.row)"
|
||||
@click="removeTemplate(scope.row)"
|
||||
>
|
||||
删除
|
||||
</el-button>
|
||||
</template>
|
||||
@@ -184,7 +200,14 @@
|
||||
<el-tab-pane label="版本与DOCX模板" name="versions">
|
||||
<div class="tab-pane-content">
|
||||
<div class="pane-action-bar">
|
||||
<el-button type="primary" icon="Upload" @click="openVersionCreate">
|
||||
<el-button
|
||||
v-auth="'onboardingContractVersionAdd'"
|
||||
type="primary"
|
||||
icon="Upload"
|
||||
:disabled="!canManage(selectedTemplate)"
|
||||
:title="disabledReason(selectedTemplate)"
|
||||
@click="openVersionCreate"
|
||||
>
|
||||
上传新版本 DOCX
|
||||
</el-button>
|
||||
<span class="pane-tip-text">
|
||||
@@ -233,29 +256,38 @@
|
||||
</el-button>
|
||||
|
||||
<el-button
|
||||
v-auth="'onboardingContractVersionStatus'"
|
||||
v-if="scope.row.versionStatus !== 'enabled'"
|
||||
link
|
||||
type="success"
|
||||
icon="Check"
|
||||
:disabled="!canManage(selectedTemplate)"
|
||||
:title="disabledReason(selectedTemplate)"
|
||||
@click="changeVersionStatus(scope.row, 'enabled')"
|
||||
>
|
||||
启用
|
||||
</el-button>
|
||||
|
||||
<el-button
|
||||
v-auth="'onboardingContractVersionStatus'"
|
||||
v-else
|
||||
link
|
||||
type="warning"
|
||||
icon="Close"
|
||||
:disabled="!canManage(selectedTemplate)"
|
||||
:title="disabledReason(selectedTemplate)"
|
||||
@click="changeVersionStatus(scope.row, 'disabled')"
|
||||
>
|
||||
停用
|
||||
</el-button>
|
||||
|
||||
<el-button
|
||||
v-auth="'onboardingContractVersionDelete'"
|
||||
link
|
||||
type="danger"
|
||||
icon="Delete"
|
||||
:disabled="!canManage(selectedTemplate)"
|
||||
:title="disabledReason(selectedTemplate)"
|
||||
@click="removeVersion(scope.row)"
|
||||
>
|
||||
删除
|
||||
@@ -405,7 +437,15 @@
|
||||
|
||||
<el-table-column label="操作" width="120" align="center" fixed="right">
|
||||
<template #default="scope">
|
||||
<el-button link type="primary" icon="Edit" @click="openVariableEdit(scope.row)">
|
||||
<el-button
|
||||
v-auth="'onboardingContractVariableEdit'"
|
||||
link
|
||||
type="primary"
|
||||
icon="Edit"
|
||||
:disabled="!canManage(selectedTemplate)"
|
||||
:title="disabledReason(selectedTemplate)"
|
||||
@click="openVariableEdit(scope.row)"
|
||||
>
|
||||
检查调整
|
||||
</el-button>
|
||||
</template>
|
||||
@@ -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<ProTableInstance>();
|
||||
const selectedTemplate = ref<OnboardingContractTemplate>();
|
||||
|
||||
@@ -2,19 +2,30 @@
|
||||
<div class="table-box">
|
||||
<ProTable ref="proTable" title="员工档案" :columns="columns" :request-api="onboardingTaskApi.employeePage">
|
||||
<template #tableHeader>
|
||||
<el-button type="primary" plain icon="Download" :loading="exporting" @click="exportEmployees">
|
||||
<el-button v-auth="'onboardingEmployeeExport'" type="primary" plain icon="Download" :loading="exporting" @click="exportEmployees">
|
||||
导出当前筛选结果
|
||||
</el-button>
|
||||
</template>
|
||||
|
||||
<template #operation="scope">
|
||||
<el-button link type="primary" icon="UserFilled" @click="showDetail(scope.row)">查看档案</el-button>
|
||||
<el-button link type="primary" icon="Edit" @click="openHrEdit(scope.row)">编辑人事信息</el-button>
|
||||
<el-button
|
||||
v-auth="'onboardingEmployeeHrEdit'"
|
||||
link
|
||||
type="primary"
|
||||
icon="Edit"
|
||||
:disabled="!canManage(scope.row)"
|
||||
:title="disabledReason(scope.row)"
|
||||
@click="openHrEdit(scope.row)"
|
||||
>编辑人事信息</el-button>
|
||||
<el-button
|
||||
v-auth="'onboardingEmployeeRegularize'"
|
||||
v-if="canRegularize(scope.row)"
|
||||
link
|
||||
type="success"
|
||||
icon="CircleCheck"
|
||||
:disabled="!canManage(scope.row)"
|
||||
:title="disabledReason(scope.row)"
|
||||
@click="openRegularization(scope.row)"
|
||||
>
|
||||
办理转正
|
||||
@@ -372,19 +383,33 @@
|
||||
</el-tabs>
|
||||
</div>
|
||||
<template #footer>
|
||||
<el-button v-if="detail?.employee" type="primary" plain @click="openHrEdit(detail.employee)">编辑人事信息</el-button>
|
||||
<el-button
|
||||
v-auth="'onboardingEmployeeHrEdit'"
|
||||
v-if="detail?.employee"
|
||||
type="primary"
|
||||
plain
|
||||
:disabled="!canManage(detail.employee)"
|
||||
:title="disabledReason(detail.employee)"
|
||||
@click="openHrEdit(detail.employee)"
|
||||
>编辑人事信息</el-button>
|
||||
<el-button
|
||||
v-auth="'onboardingEmployeeRegularize'"
|
||||
v-if="detail?.employee && canRegularize(detail.employee)"
|
||||
type="success"
|
||||
plain
|
||||
:disabled="!canManage(detail.employee)"
|
||||
:title="disabledReason(detail.employee)"
|
||||
@click="openRegularization(detail.employee)"
|
||||
>
|
||||
办理转正
|
||||
</el-button>
|
||||
<el-button
|
||||
v-auth="'onboardingEmployeeRegularizationRevoke'"
|
||||
v-if="detail?.employee?.regularizationStatus === 'regular'"
|
||||
type="danger"
|
||||
plain
|
||||
:disabled="!canManage(detail.employee)"
|
||||
:title="disabledReason(detail.employee)"
|
||||
@click="revokeRegularization(detail.employee)"
|
||||
>
|
||||
撤销转正
|
||||
@@ -510,6 +535,9 @@ import {
|
||||
} from "@/api/modules/biz/onboarding";
|
||||
import type { ColumnProps, ProTableInstance } from "@/components/ProTable/interface";
|
||||
import { getMessageBoxPromptResult, isMessageBoxConfirmed } from "@/utils/messageBox";
|
||||
import { useOnboardingPermission } from "@/utils/onboardingPermission";
|
||||
|
||||
const { canManage, disabledReason } = useOnboardingPermission("onboardingEmployeeManageAll");
|
||||
|
||||
const proTable = ref<ProTableInstance>();
|
||||
const detailVisible = ref(false);
|
||||
|
||||
@@ -57,7 +57,7 @@
|
||||
<el-button type="primary" icon="Search" @click="loadTemplates">查询</el-button>
|
||||
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
|
||||
<div class="toolbar-spacer" />
|
||||
<el-button type="primary" icon="Plus" @click="openCreate">新增入职模板</el-button>
|
||||
<el-button v-auth="'onboardingEntryConfigAdd'" type="primary" icon="Plus" @click="openCreate">新增入职模板</el-button>
|
||||
</div>
|
||||
|
||||
<el-alert title="入职模板统一管理公司、岗位、签署材料文件与员工上传材料;员工入职档案自动采用标准《入职登记表》。" type="info" :closable="false" show-icon
|
||||
@@ -90,8 +90,22 @@
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="150" fixed="right">
|
||||
<template #default="scope">
|
||||
<el-button link type="primary" @click="openEdit(scope.row)">编辑</el-button>
|
||||
<el-button link type="danger" @click="removeTemplate(scope.row)">删除</el-button>
|
||||
<el-button
|
||||
v-auth="'onboardingEntryConfigEdit'"
|
||||
link
|
||||
type="primary"
|
||||
:disabled="!canManage(scope.row)"
|
||||
:title="disabledReason(scope.row)"
|
||||
@click="openEdit(scope.row)"
|
||||
>编辑</el-button>
|
||||
<el-button
|
||||
v-auth="'onboardingEntryConfigDelete'"
|
||||
link
|
||||
type="danger"
|
||||
:disabled="!canManage(scope.row)"
|
||||
:title="disabledReason(scope.row)"
|
||||
@click="removeTemplate(scope.row)"
|
||||
>删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
@@ -293,6 +307,9 @@ import {
|
||||
onboardingTaskApi
|
||||
} from "@/api/modules/biz/onboarding";
|
||||
import { isMessageBoxConfirmed } from "@/utils/messageBox";
|
||||
import { useOnboardingPermission } from "@/utils/onboardingPermission";
|
||||
|
||||
const { canManage, disabledReason } = useOnboardingPermission("onboardingEntryConfigManageAll");
|
||||
|
||||
const loading = ref(false);
|
||||
const saving = ref(false);
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
<el-button type="primary" icon="Search" @click="loadData">查询</el-button>
|
||||
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
|
||||
<div class="spacer"></div>
|
||||
<el-button type="primary" icon="Plus" @click="openCreate">新增自定义变量</el-button>
|
||||
<el-button v-auth="'onboardingEntryConfigAdd'" type="primary" icon="Plus" @click="openCreate">新增自定义变量</el-button>
|
||||
</div>
|
||||
|
||||
<el-alert
|
||||
@@ -80,12 +80,23 @@
|
||||
<el-table-column label="操作" width="160" align="center" fixed="right">
|
||||
<template #default="{ row }">
|
||||
<div style="display: flex; align-items: center; justify-content: center; gap: 8px; white-space: nowrap;">
|
||||
<el-button link type="primary" icon="Edit" @click="openEdit(row)">编辑</el-button>
|
||||
<el-button
|
||||
v-auth="'onboardingEntryConfigEdit'"
|
||||
link
|
||||
type="primary"
|
||||
icon="Edit"
|
||||
:disabled="!canManage(row)"
|
||||
:title="disabledReason(row)"
|
||||
@click="openEdit(row)"
|
||||
>编辑</el-button>
|
||||
<el-button
|
||||
v-auth="'onboardingEntryConfigDelete'"
|
||||
v-if="!row.isBuiltIn"
|
||||
link
|
||||
type="danger"
|
||||
icon="Delete"
|
||||
:disabled="!canManage(row)"
|
||||
:title="disabledReason(row)"
|
||||
@click="remove(row)"
|
||||
>
|
||||
删除
|
||||
@@ -171,6 +182,9 @@ import { ref, reactive, onMounted } from "vue";
|
||||
import { ElMessage, ElMessageBox, FormInstance, FormRules } from "element-plus";
|
||||
import { onboardingTaskApi } from "@/api/modules/biz/onboarding";
|
||||
import { isMessageBoxConfirmed } from "@/utils/messageBox";
|
||||
import { useOnboardingPermission } from "@/utils/onboardingPermission";
|
||||
|
||||
const { canManage, disabledReason } = useOnboardingPermission("onboardingEntryConfigManageAll");
|
||||
|
||||
const loading = ref(false);
|
||||
const saving = ref(false);
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
<el-tab-pane label="上传资料类型" name="materials">
|
||||
<div class="tab-card-wrapper material-tab-wrapper">
|
||||
<div class="toolbar">
|
||||
<el-button type="primary" icon="Plus" @click="openMaterialCreate">
|
||||
<el-button v-auth="'onboardingEntryConfigAdd'" type="primary" icon="Plus" @click="openMaterialCreate">
|
||||
新增资料类型
|
||||
</el-button>
|
||||
</div>
|
||||
@@ -35,11 +35,27 @@
|
||||
|
||||
<el-table-column label="操作" width="150" fixed="right" align="center">
|
||||
<template #default="scope">
|
||||
<el-button link type="primary" icon="Edit" @click="openMaterialEdit(scope.row)">
|
||||
<el-button
|
||||
v-auth="'onboardingEntryConfigEdit'"
|
||||
link
|
||||
type="primary"
|
||||
icon="Edit"
|
||||
:disabled="!canManage(scope.row)"
|
||||
:title="disabledReason(scope.row)"
|
||||
@click="openMaterialEdit(scope.row)"
|
||||
>
|
||||
编辑
|
||||
</el-button>
|
||||
|
||||
<el-button link type="danger" icon="Delete" @click="removeMaterial(scope.row)">
|
||||
<el-button
|
||||
v-auth="'onboardingEntryConfigDelete'"
|
||||
link
|
||||
type="danger"
|
||||
icon="Delete"
|
||||
:disabled="!canManage(scope.row)"
|
||||
:title="disabledReason(scope.row)"
|
||||
@click="removeMaterial(scope.row)"
|
||||
>
|
||||
删除
|
||||
</el-button>
|
||||
</template>
|
||||
@@ -104,6 +120,9 @@ import {
|
||||
import { isMessageBoxConfirmed } from "@/utils/messageBox";
|
||||
import OnboardingTemplatePanel from "./components/OnboardingTemplatePanel.vue";
|
||||
import VariableDefinitionPanel from "./components/VariableDefinitionPanel.vue";
|
||||
import { useOnboardingPermission } from "@/utils/onboardingPermission";
|
||||
|
||||
const { canManage, disabledReason } = useOnboardingPermission("onboardingEntryConfigManageAll");
|
||||
|
||||
const activeTab = ref("variables");
|
||||
const materialTypes = ref<OnboardingMaterialType[]>([]);
|
||||
@@ -225,4 +244,4 @@ onMounted(() => {
|
||||
.toolbar {
|
||||
margin-bottom: 12px;
|
||||
}
|
||||
</style>
|
||||
</style>
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
:search-col="5"
|
||||
>
|
||||
<template #tableHeader>
|
||||
<el-button type="primary" icon="Plus" @click="openCompanyCreate">
|
||||
<el-button v-auth="'onboardingSetupAdd'" type="primary" icon="Plus" @click="openCompanyCreate">
|
||||
新增入职公司
|
||||
</el-button>
|
||||
</template>
|
||||
@@ -33,11 +33,27 @@
|
||||
</template>
|
||||
|
||||
<template #operation="scope">
|
||||
<el-button link type="primary" icon="Edit" @click="openCompanyEdit(scope.row)">
|
||||
<el-button
|
||||
v-auth="'onboardingSetupEdit'"
|
||||
link
|
||||
type="primary"
|
||||
icon="Edit"
|
||||
:disabled="!canManage(scope.row)"
|
||||
:title="disabledReason(scope.row)"
|
||||
@click="openCompanyEdit(scope.row)"
|
||||
>
|
||||
编辑
|
||||
</el-button>
|
||||
|
||||
<el-button link type="danger" icon="Delete" @click="removeCompany(scope.row)">
|
||||
<el-button
|
||||
v-auth="'onboardingSetupDelete'"
|
||||
link
|
||||
type="danger"
|
||||
icon="Delete"
|
||||
:disabled="!canManage(scope.row)"
|
||||
:title="disabledReason(scope.row)"
|
||||
@click="removeCompany(scope.row)"
|
||||
>
|
||||
删除
|
||||
</el-button>
|
||||
</template>
|
||||
@@ -56,7 +72,7 @@
|
||||
:search-col="5"
|
||||
>
|
||||
<template #tableHeader>
|
||||
<el-button type="primary" icon="Plus" @click="openDepartmentCreate">
|
||||
<el-button v-auth="'onboardingSetupAdd'" type="primary" icon="Plus" @click="openDepartmentCreate">
|
||||
新增入职部门
|
||||
</el-button>
|
||||
</template>
|
||||
@@ -74,11 +90,27 @@
|
||||
</template>
|
||||
|
||||
<template #operation="scope">
|
||||
<el-button link type="primary" icon="Edit" @click="openDepartmentEdit(scope.row)">
|
||||
<el-button
|
||||
v-auth="'onboardingSetupEdit'"
|
||||
link
|
||||
type="primary"
|
||||
icon="Edit"
|
||||
:disabled="!canManage(scope.row)"
|
||||
:title="disabledReason(scope.row)"
|
||||
@click="openDepartmentEdit(scope.row)"
|
||||
>
|
||||
编辑
|
||||
</el-button>
|
||||
|
||||
<el-button link type="danger" icon="Delete" @click="removeDepartment(scope.row)">
|
||||
<el-button
|
||||
v-auth="'onboardingSetupDelete'"
|
||||
link
|
||||
type="danger"
|
||||
icon="Delete"
|
||||
:disabled="!canManage(scope.row)"
|
||||
:title="disabledReason(scope.row)"
|
||||
@click="removeDepartment(scope.row)"
|
||||
>
|
||||
删除
|
||||
</el-button>
|
||||
</template>
|
||||
@@ -97,7 +129,7 @@
|
||||
:search-col="5"
|
||||
>
|
||||
<template #tableHeader>
|
||||
<el-button type="primary" icon="Plus" @click="openPositionCreate">
|
||||
<el-button v-auth="'onboardingSetupAdd'" type="primary" icon="Plus" @click="openPositionCreate">
|
||||
新增入职岗位
|
||||
</el-button>
|
||||
</template>
|
||||
@@ -122,11 +154,27 @@
|
||||
</template>
|
||||
|
||||
<template #operation="scope">
|
||||
<el-button link type="primary" icon="Edit" @click="openPositionEdit(scope.row)">
|
||||
<el-button
|
||||
v-auth="'onboardingSetupEdit'"
|
||||
link
|
||||
type="primary"
|
||||
icon="Edit"
|
||||
:disabled="!canManage(scope.row)"
|
||||
:title="disabledReason(scope.row)"
|
||||
@click="openPositionEdit(scope.row)"
|
||||
>
|
||||
编辑
|
||||
</el-button>
|
||||
|
||||
<el-button link type="danger" icon="Delete" @click="removePosition(scope.row)">
|
||||
<el-button
|
||||
v-auth="'onboardingSetupDelete'"
|
||||
link
|
||||
type="danger"
|
||||
icon="Delete"
|
||||
:disabled="!canManage(scope.row)"
|
||||
:title="disabledReason(scope.row)"
|
||||
@click="removePosition(scope.row)"
|
||||
>
|
||||
删除
|
||||
</el-button>
|
||||
</template>
|
||||
@@ -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");
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
>
|
||||
<template #tableHeader>
|
||||
<div class="task-table-toolbar">
|
||||
<el-button type="primary" icon="Plus" @click="openCreate">
|
||||
<el-button v-auth="'onboardingTaskCreate'" type="primary" icon="Plus" @click="openCreate">
|
||||
发起入职任务
|
||||
</el-button>
|
||||
<div class="task-metric-filters">
|
||||
@@ -63,59 +63,77 @@
|
||||
</el-button>
|
||||
|
||||
<el-button
|
||||
v-auth="'onboardingTaskVariableEdit'"
|
||||
v-if="['pending_fill', 'rejected'].includes(scope.row.taskStatus)"
|
||||
link
|
||||
type="primary"
|
||||
icon="Setting"
|
||||
:disabled="!canManage(scope.row)"
|
||||
:title="disabledReason(scope.row)"
|
||||
@click="openContractVariables(scope.row)"
|
||||
>
|
||||
签署材料参数
|
||||
</el-button>
|
||||
|
||||
<el-button
|
||||
v-auth="'onboardingTaskCopy'"
|
||||
link
|
||||
type="success"
|
||||
icon="CopyDocument"
|
||||
:disabled="!canManage(scope.row)"
|
||||
:title="disabledReason(scope.row)"
|
||||
@click="openCopyTask(scope.row)"
|
||||
>
|
||||
复制任务
|
||||
</el-button>
|
||||
|
||||
<el-button
|
||||
v-auth="'onboardingTaskLink'"
|
||||
v-if="['pending_fill', 'rejected'].includes(scope.row.taskStatus)"
|
||||
link
|
||||
type="warning"
|
||||
icon="CopyDocument"
|
||||
:disabled="!canManage(scope.row)"
|
||||
:title="disabledReason(scope.row)"
|
||||
@click="copyOrShareTaskLink(scope.row)"
|
||||
>
|
||||
复制链接
|
||||
</el-button>
|
||||
|
||||
<el-button
|
||||
v-auth="'onboardingTaskAudit'"
|
||||
v-if="scope.row.taskStatus === 'reviewing'"
|
||||
link
|
||||
type="success"
|
||||
icon="Check"
|
||||
:disabled="!canManage(scope.row)"
|
||||
:title="disabledReason(scope.row)"
|
||||
@click="approve(scope.row)"
|
||||
>
|
||||
通过
|
||||
</el-button>
|
||||
|
||||
<el-button
|
||||
v-auth="'onboardingTaskAudit'"
|
||||
v-if="scope.row.taskStatus === 'reviewing'"
|
||||
link
|
||||
type="danger"
|
||||
icon="Close"
|
||||
:disabled="!canManage(scope.row)"
|
||||
:title="disabledReason(scope.row)"
|
||||
@click="reject(scope.row)"
|
||||
>
|
||||
退回
|
||||
</el-button>
|
||||
|
||||
<el-button
|
||||
v-auth="'onboardingTaskArchive'"
|
||||
v-if="scope.row.taskStatus === 'approved'"
|
||||
link
|
||||
type="info"
|
||||
icon="FolderChecked"
|
||||
:disabled="!canManage(scope.row)"
|
||||
:title="disabledReason(scope.row)"
|
||||
@click="archive(scope.row)"
|
||||
>
|
||||
归档
|
||||
@@ -132,20 +150,26 @@
|
||||
</el-button>
|
||||
|
||||
<el-button
|
||||
v-auth="'onboardingTaskRevoke'"
|
||||
v-if="['pending_fill', 'reviewing', 'rejected'].includes(scope.row.taskStatus)"
|
||||
link
|
||||
type="danger"
|
||||
icon="Delete"
|
||||
:disabled="!canManage(scope.row)"
|
||||
:title="disabledReason(scope.row)"
|
||||
@click="revoke(scope.row)"
|
||||
>
|
||||
撤销
|
||||
</el-button>
|
||||
|
||||
<el-button
|
||||
v-auth="'onboardingTaskDelete'"
|
||||
v-if="scope.row.taskStatus === 'revoked'"
|
||||
link
|
||||
type="danger"
|
||||
icon="Delete"
|
||||
:disabled="!canManage(scope.row)"
|
||||
:title="disabledReason(scope.row)"
|
||||
@click="removeTask(scope.row)"
|
||||
>
|
||||
删除
|
||||
@@ -813,19 +837,23 @@
|
||||
|
||||
<div v-if="detail.task.taskStatus === 'reviewing'" class="review-btn-group">
|
||||
<el-button
|
||||
v-auth="'onboardingTaskMaterialReview'"
|
||||
size="small"
|
||||
type="success"
|
||||
plain
|
||||
:disabled="item.reviewStatus === 'passed'"
|
||||
:disabled="item.reviewStatus === 'passed' || !canManage(detail.task)"
|
||||
:title="disabledReason(detail.task)"
|
||||
@click="reviewMaterial(item.id, 'passed')"
|
||||
>
|
||||
合格
|
||||
</el-button>
|
||||
<el-button
|
||||
v-auth="'onboardingTaskMaterialReview'"
|
||||
size="small"
|
||||
type="danger"
|
||||
plain
|
||||
:disabled="item.reviewStatus === 'need_supplement'"
|
||||
:disabled="item.reviewStatus === 'need_supplement' || !canManage(detail.task)"
|
||||
:title="disabledReason(detail.task)"
|
||||
@click="reviewMaterial(item.id, 'need_supplement')"
|
||||
>
|
||||
需补充
|
||||
@@ -854,11 +882,14 @@
|
||||
</div>
|
||||
<div class="contract-right">
|
||||
<el-button
|
||||
v-auth="'onboardingTaskContractGenerate'"
|
||||
v-if="!item.generatedDocxFileId"
|
||||
type="primary"
|
||||
plain
|
||||
size="small"
|
||||
icon="DocumentChecked"
|
||||
:disabled="!canManage(detail.task)"
|
||||
:title="disabledReason(detail.task)"
|
||||
@click="generate(item.id)"
|
||||
>
|
||||
生成DOCX签署材料
|
||||
@@ -911,25 +942,34 @@
|
||||
<div v-if="detail" class="drawer-footer-actions">
|
||||
<div class="drawer-footer-right">
|
||||
<el-button
|
||||
v-auth="'onboardingTaskAudit'"
|
||||
v-if="detail.task.taskStatus === 'reviewing'"
|
||||
type="danger"
|
||||
icon="Close"
|
||||
:disabled="!canManage(detail.task)"
|
||||
:title="disabledReason(detail.task)"
|
||||
@click="reject(detail.task)"
|
||||
>
|
||||
退回修改
|
||||
</el-button>
|
||||
<el-button
|
||||
v-auth="'onboardingTaskAudit'"
|
||||
v-if="detail.task.taskStatus === 'reviewing'"
|
||||
type="success"
|
||||
icon="Check"
|
||||
:disabled="!canManage(detail.task)"
|
||||
:title="disabledReason(detail.task)"
|
||||
@click="approve(detail.task)"
|
||||
>
|
||||
审核通过并建档
|
||||
</el-button>
|
||||
<el-button
|
||||
v-auth="'onboardingTaskArchive'"
|
||||
v-if="detail.task.taskStatus === 'approved'"
|
||||
type="info"
|
||||
icon="FolderChecked"
|
||||
:disabled="!canManage(detail.task)"
|
||||
:title="disabledReason(detail.task)"
|
||||
@click="archive(detail.task)"
|
||||
>
|
||||
归档该任务
|
||||
@@ -943,9 +983,12 @@
|
||||
电子签约
|
||||
</el-button>
|
||||
<el-button
|
||||
v-auth="'onboardingTaskDelete'"
|
||||
v-if="detail.task.taskStatus === 'revoked'"
|
||||
type="danger"
|
||||
icon="Delete"
|
||||
:disabled="!canManage(detail.task)"
|
||||
:title="disabledReason(detail.task)"
|
||||
@click="removeTask(detail.task)"
|
||||
>
|
||||
删除该任务
|
||||
@@ -1014,9 +1057,12 @@
|
||||
</div>
|
||||
|
||||
<el-button
|
||||
v-auth="'onboardingTaskVariableEdit'"
|
||||
type="primary"
|
||||
size="small"
|
||||
icon="Check"
|
||||
:disabled="!canManage(contractVariableTask)"
|
||||
:title="disabledReason(contractVariableTask)"
|
||||
@click="saveContractVariables(group)"
|
||||
>
|
||||
保存《{{ group.contractName }}》参数
|
||||
@@ -1096,7 +1142,15 @@
|
||||
<template #footer>
|
||||
<div class="dialog-footer-flex">
|
||||
<el-button @click="contractVariablesVisible = false">关闭</el-button>
|
||||
<el-button type="primary" icon="Check" :loading="savingAllVars" @click="saveAllContractVariables">
|
||||
<el-button
|
||||
v-auth="'onboardingTaskVariableEdit'"
|
||||
type="primary"
|
||||
icon="Check"
|
||||
:loading="savingAllVars"
|
||||
:disabled="!canManage(contractVariableTask)"
|
||||
:title="disabledReason(contractVariableTask)"
|
||||
@click="saveAllContractVariables"
|
||||
>
|
||||
一键保存全部签署材料参数
|
||||
</el-button>
|
||||
</div>
|
||||
@@ -1277,7 +1331,14 @@
|
||||
: '链接尚未生成或已过期,点击下方按钮自动刷新' }}
|
||||
</div>
|
||||
</div>
|
||||
<el-button type="primary" plain @click="copyElectronicSignLink">
|
||||
<el-button
|
||||
v-auth="'onboardingTaskElectronicSign'"
|
||||
type="primary"
|
||||
plain
|
||||
:disabled="!canManage(electronicSignTask)"
|
||||
:title="disabledReason(electronicSignTask)"
|
||||
@click="copyElectronicSignLink"
|
||||
>
|
||||
获取并复制链接
|
||||
</el-button>
|
||||
</div>
|
||||
@@ -1329,10 +1390,12 @@
|
||||
<div class="electronic-sign-footer">
|
||||
<div>
|
||||
<el-button
|
||||
v-auth="'onboardingTaskElectronicSign'"
|
||||
v-if="electronicSignDetail?.hasProcess && canInvalidElectronicSign"
|
||||
type="danger"
|
||||
plain
|
||||
:disabled="electronicSignLoading"
|
||||
:disabled="electronicSignLoading || !canManage(electronicSignTask)"
|
||||
:title="disabledReason(electronicSignTask)"
|
||||
@click="invalidElectronicSign"
|
||||
>
|
||||
作废流程
|
||||
@@ -1341,27 +1404,34 @@
|
||||
<div>
|
||||
<el-button @click="electronicSignVisible = false">关闭</el-button>
|
||||
<el-button
|
||||
v-auth="'onboardingTaskElectronicSign'"
|
||||
v-if="electronicSignDetail?.hasProcess && electronicSignDetail.signStatus === 'pending_employee_sign'"
|
||||
:disabled="electronicSignLoading"
|
||||
:disabled="electronicSignLoading || !canManage(electronicSignTask)"
|
||||
:title="disabledReason(electronicSignTask)"
|
||||
@click="noticeElectronicSign"
|
||||
>
|
||||
催签
|
||||
</el-button>
|
||||
<el-button
|
||||
v-auth="'onboardingTaskElectronicSign'"
|
||||
v-if="electronicSignDetail?.hasProcess && electronicSignDetail.providerContractId"
|
||||
:loading="electronicSignLoading"
|
||||
:disabled="!canManage(electronicSignTask)"
|
||||
:title="disabledReason(electronicSignTask)"
|
||||
@click="syncElectronicSign"
|
||||
>
|
||||
同步状态
|
||||
</el-button>
|
||||
<el-button
|
||||
v-auth="'onboardingTaskElectronicSign'"
|
||||
v-if="
|
||||
electronicSignDetail?.hasProcess
|
||||
&& electronicSignDetail.signStatus === 'pending_company_seal'
|
||||
"
|
||||
type="primary"
|
||||
:loading="electronicSignLoading"
|
||||
:disabled="!allEmployeeSignedDocumentsPreviewed"
|
||||
:disabled="!allEmployeeSignedDocumentsPreviewed || !canManage(electronicSignTask)"
|
||||
:title="disabledReason(electronicSignTask)"
|
||||
@click="confirmCompanySeal"
|
||||
>
|
||||
确认企业盖章
|
||||
@@ -1374,20 +1444,24 @@
|
||||
下载完整归档
|
||||
</el-button>
|
||||
<el-button
|
||||
v-auth="'onboardingTaskElectronicSign'"
|
||||
v-if="electronicSignDetail?.canReinitiate"
|
||||
type="warning"
|
||||
plain
|
||||
:loading="electronicSignLoading"
|
||||
:disabled="!electronicSignDetail.documents.length"
|
||||
:disabled="!electronicSignDetail.documents.length || !canManage(electronicSignTask)"
|
||||
:title="disabledReason(electronicSignTask)"
|
||||
@click="reinitiateElectronicSign"
|
||||
>
|
||||
重新发起签约
|
||||
</el-button>
|
||||
<el-button
|
||||
v-auth="'onboardingTaskElectronicSign'"
|
||||
v-if="electronicSignDetail?.canInitiate"
|
||||
type="primary"
|
||||
:loading="electronicSignLoading"
|
||||
:disabled="!electronicSignDetail.documents.length"
|
||||
:disabled="!electronicSignDetail.documents.length || !canManage(electronicSignTask)"
|
||||
:title="disabledReason(electronicSignTask)"
|
||||
@click="initiateElectronicSign"
|
||||
>
|
||||
{{ electronicSignDetail.hasProcess ? '继续/重试发起' : '确认发起电子签' }}
|
||||
@@ -1434,6 +1508,9 @@ import {
|
||||
} from "@/api/modules/biz/onboarding";
|
||||
import type { ColumnProps, ProTableInstance } from "@/components/ProTable/interface";
|
||||
import { getMessageBoxPromptResult, isMessageBoxConfirmed } from "@/utils/messageBox";
|
||||
import { useOnboardingPermission } from "@/utils/onboardingPermission";
|
||||
|
||||
const { canManage, disabledReason } = useOnboardingPermission("onboardingTaskManageAll");
|
||||
|
||||
const proTable = ref<ProTableInstance>();
|
||||
|
||||
|
||||
@@ -68,6 +68,11 @@ function onOpen(props: FormProps.Base<Button.ButtonInfo>) {
|
||||
if (props.record.id) {
|
||||
//如果传了id,就去请求api获取record
|
||||
buttonApi.detail({ id: props.record.id }).then(res => {
|
||||
if (!res.data) {
|
||||
ElMessage.error("按钮详情不存在或按钮ID无效,请刷新列表后重试");
|
||||
onClose();
|
||||
return;
|
||||
}
|
||||
buttonProps.record = res.data;
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user