fix: 完善文档权限接口接入
This commit is contained in:
+64
-2
@@ -12,12 +12,16 @@ const props = defineProps<{
|
||||
subjects: PermissionSubjectOption[]
|
||||
loading: boolean
|
||||
saving: boolean
|
||||
error: boolean
|
||||
previewUserId: string
|
||||
}>()
|
||||
|
||||
const emit = defineEmits<{
|
||||
'update:selectedTemplateId': [value: string]
|
||||
'update:previewUserId': [value: string]
|
||||
add: [form: TemplatePermissionForm]
|
||||
delete: [permissionId: string]
|
||||
retry: []
|
||||
}>()
|
||||
|
||||
const form = reactive<TemplatePermissionForm>({
|
||||
@@ -48,6 +52,8 @@ const availableSubjects = computed(() =>
|
||||
props.subjects.filter((subject) => subject.type === form.subjectType),
|
||||
)
|
||||
|
||||
const previewUsers = computed(() => props.subjects.filter((subject) => subject.type === 'USER'))
|
||||
|
||||
const selectedTemplate = computed(() =>
|
||||
props.templates.find((template) => template.id === props.selectedTemplateId),
|
||||
)
|
||||
@@ -56,6 +62,10 @@ function handleTemplateChange(event: Event) {
|
||||
emit('update:selectedTemplateId', (event.target as HTMLSelectElement).value)
|
||||
}
|
||||
|
||||
function handlePreviewUserChange(event: Event) {
|
||||
emit('update:previewUserId', (event.target as HTMLSelectElement).value)
|
||||
}
|
||||
|
||||
function handleSubjectTypeChange() {
|
||||
form.subjectId = availableSubjects.value[0]?.id ?? ''
|
||||
}
|
||||
@@ -105,10 +115,23 @@ watch(
|
||||
<span v-if="selectedTemplate" class="template-meta">
|
||||
{{ selectedTemplate.code || selectedTemplate.id }} · {{ selectedTemplate.category }}
|
||||
</span>
|
||||
<label class="template-select preview-select">
|
||||
<span>继承预览用户</span>
|
||||
<select :value="previewUserId" :disabled="loading" @change="handlePreviewUserChange">
|
||||
<option value="">当前登录用户</option>
|
||||
<option v-for="user in previewUsers" :key="user.id" :value="user.id">
|
||||
{{ user.label }}
|
||||
</option>
|
||||
</select>
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<div v-if="!selectedTemplateId" class="empty-state">暂无模板,请先选择一个模板。</div>
|
||||
<div v-else-if="loading" class="loading-state">正在加载模板权限…</div>
|
||||
<div v-else-if="error" class="error-state">
|
||||
<span>模板权限加载失败</span>
|
||||
<button type="button" class="retry-button" @click="emit('retry')">重新加载</button>
|
||||
</div>
|
||||
<template v-else>
|
||||
<div class="permission-list">
|
||||
<div class="list-heading">
|
||||
@@ -128,7 +151,18 @@ watch(
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr v-for="permission in permissions" :key="permission.id">
|
||||
<tr
|
||||
v-for="permission in permissions"
|
||||
:key="
|
||||
permission.id ??
|
||||
[
|
||||
permission.subjectType,
|
||||
permission.subjectId,
|
||||
permission.permissionLevel,
|
||||
permission.effect,
|
||||
].join('-')
|
||||
"
|
||||
>
|
||||
<td>
|
||||
<span class="subject-type">{{ subjectTypeLabels[permission.subjectType] }}</span>
|
||||
{{ formatSubject(permission.subjectType, permission.subjectId) }}
|
||||
@@ -232,6 +266,10 @@ watch(
|
||||
min-width: min(420px, 100%);
|
||||
}
|
||||
|
||||
.preview-select {
|
||||
min-width: min(280px, 100%);
|
||||
}
|
||||
|
||||
select {
|
||||
min-width: 0;
|
||||
padding: 7px 10px;
|
||||
@@ -356,13 +394,37 @@ td {
|
||||
}
|
||||
|
||||
.empty-state,
|
||||
.loading-state {
|
||||
.loading-state,
|
||||
.error-state {
|
||||
padding: 32px 16px;
|
||||
color: var(--mut);
|
||||
font-size: 12.5px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.error-state {
|
||||
display: flex;
|
||||
gap: 10px;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
color: var(--err);
|
||||
background: #f8fbfc;
|
||||
border-radius: 6px;
|
||||
}
|
||||
|
||||
.retry-button {
|
||||
padding: 4px 10px;
|
||||
color: var(--brand);
|
||||
font-size: 12px;
|
||||
background: #fff;
|
||||
border: 1px solid var(--brand);
|
||||
border-radius: 5px;
|
||||
}
|
||||
|
||||
.retry-button:hover {
|
||||
background: var(--brand-l);
|
||||
}
|
||||
|
||||
.empty-state.compact {
|
||||
padding: 18px 12px;
|
||||
margin: 0;
|
||||
|
||||
Reference in New Issue
Block a user