feat(权限): 新增 v-permission 按钮级权限指令并移除前端权限别名
This commit is contained in:
@@ -46,6 +46,7 @@ import {
|
||||
readBackendStatus,
|
||||
saveDocumentLibrary,
|
||||
} from './mock'
|
||||
import { DOC_TEMPLATE_PERMISSIONS, workflowPermission } from './permissions'
|
||||
import type {
|
||||
DepartmentTab,
|
||||
DocumentBackendStatus,
|
||||
@@ -72,42 +73,24 @@ const appStore = useAppStore()
|
||||
const loginStore = useLoginStore()
|
||||
|
||||
const useMockLibrary = mockFlags.documents
|
||||
const canCreateTemplate = computed(
|
||||
() =>
|
||||
!loginStore.isReadOnly &&
|
||||
(useMockLibrary ||
|
||||
loginStore.hasWritePermission(['sign:template:create', 'sign:template:version:create'])),
|
||||
)
|
||||
const canEditTemplate = computed(
|
||||
() =>
|
||||
!loginStore.isReadOnly &&
|
||||
(useMockLibrary ||
|
||||
loginStore.hasWritePermission(['sign:template:update', 'sign:template:version:create'])),
|
||||
)
|
||||
const canArchiveTemplate = computed(
|
||||
() =>
|
||||
!loginStore.isReadOnly &&
|
||||
(useMockLibrary || loginStore.hasWritePermission('sign:template:archive')),
|
||||
)
|
||||
const canInitiateSigning = computed(
|
||||
() =>
|
||||
!loginStore.isReadOnly && (useMockLibrary || loginStore.hasWritePermission('sign:task:create')),
|
||||
)
|
||||
|
||||
const workflowPermissions: Record<TemplateVersionAction, string> = {
|
||||
'submit-review': 'sign:template:review:submit',
|
||||
reject: 'sign:template:review:reject',
|
||||
approve: 'sign:template:review:approve',
|
||||
publish: 'sign:template:publish',
|
||||
disable: 'sign:template:disable',
|
||||
archive: 'sign:template:archive',
|
||||
/**
|
||||
* 页面操作的服务端校验兜底。
|
||||
*
|
||||
* 按钮是否显示由模板上的 v-permission 决定,这里必须用同一套权限码再判一次:
|
||||
* 快捷键、回车提交和程序化调用不会经过按钮,只靠隐藏按钮挡不住。
|
||||
*/
|
||||
function canWriteDocument(permission: string) {
|
||||
return !loginStore.isReadOnly && (useMockLibrary || loginStore.hasWritePermission(permission))
|
||||
}
|
||||
|
||||
const canCreateTemplate = computed(() => canWriteDocument(DOC_TEMPLATE_PERMISSIONS.create))
|
||||
const canEditTemplate = computed(() => canWriteDocument(DOC_TEMPLATE_PERMISSIONS.edit))
|
||||
const canArchiveTemplate = computed(() => canWriteDocument(DOC_TEMPLATE_PERMISSIONS.stop))
|
||||
const canInitiateSigning = computed(() => canWriteDocument(DOC_TEMPLATE_PERMISSIONS.initiate))
|
||||
|
||||
function canRunTemplateWorkflow(action: TemplateVersionAction) {
|
||||
return (
|
||||
!loginStore.isReadOnly &&
|
||||
(useMockLibrary || loginStore.hasWritePermission(workflowPermissions[action]))
|
||||
)
|
||||
return canWriteDocument(workflowPermission(action))
|
||||
}
|
||||
/** 真实模式下的加载状态:区分"正在加载"与"确实没有模板" */
|
||||
const libraryLoading = ref(false)
|
||||
@@ -959,8 +942,7 @@ onMounted(() => {
|
||||
v-model="filters.keyword"
|
||||
:total="filteredTemplates.length"
|
||||
:show-reset="useMockLibrary"
|
||||
:can-create="canCreateTemplate"
|
||||
:can-export="useMockLibrary"
|
||||
:show-export="useMockLibrary"
|
||||
@add="showAddMessage"
|
||||
@export="showExportMessage"
|
||||
@reset="resetMockData"
|
||||
@@ -985,10 +967,6 @@ onMounted(() => {
|
||||
v-for="template in filteredTemplates"
|
||||
:key="template.id"
|
||||
:template="template"
|
||||
:can-edit="canEditTemplate"
|
||||
:can-initiate="canInitiateSigning"
|
||||
:can-workflow="canRunTemplateWorkflow"
|
||||
:can-remove="canArchiveTemplate"
|
||||
:is-mock="useMockLibrary"
|
||||
@preview="handlePreview"
|
||||
@edit="showEditMessage"
|
||||
|
||||
Reference in New Issue
Block a user