feat: 接入用户与文档权限管理
This commit is contained in:
+49
-6
@@ -13,7 +13,11 @@ const props = defineProps<{
|
||||
loading: boolean
|
||||
saving: boolean
|
||||
error: boolean
|
||||
errorMessage?: string
|
||||
catalogError?: string
|
||||
catalogLoading?: boolean
|
||||
previewUserId: string
|
||||
canEdit?: boolean
|
||||
}>()
|
||||
|
||||
const emit = defineEmits<{
|
||||
@@ -107,7 +111,7 @@ watch(
|
||||
<template>
|
||||
<section class="permission-panel">
|
||||
<div class="panel-toolbar">
|
||||
<label class="template-select">
|
||||
<label v-if="templates.length" class="template-select">
|
||||
<span>选择模板</span>
|
||||
<select :value="selectedTemplateId" @change="handleTemplateChange">
|
||||
<option value="" disabled>请选择模板</option>
|
||||
@@ -116,6 +120,7 @@ watch(
|
||||
</option>
|
||||
</select>
|
||||
</label>
|
||||
<span v-else class="template-empty-label">当前院区暂无可配置模板</span>
|
||||
<span v-if="selectedTemplate" class="template-meta">
|
||||
{{ selectedTemplate.code || selectedTemplate.id }} · {{ selectedTemplate.category }}
|
||||
</span>
|
||||
@@ -130,10 +135,19 @@ watch(
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<div v-if="!selectedTemplateId" class="empty-state">暂无模板,请先选择一个模板。</div>
|
||||
<div v-if="catalogError" class="error-state">
|
||||
<span>{{ catalogError }}</span>
|
||||
<button type="button" class="retry-button" @click="emit('retry')">重新加载</button>
|
||||
</div>
|
||||
<div v-else-if="catalogLoading" class="loading-state">正在加载模板目录…</div>
|
||||
<div v-else-if="!templates.length" class="empty-state">
|
||||
暂无模板例外
|
||||
<small>当前院区还没有可配置的文档模板。</small>
|
||||
</div>
|
||||
<div v-else-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>
|
||||
<span>{{ errorMessage || '模板权限加载失败,请稍后重试' }}</span>
|
||||
<button type="button" class="retry-button" @click="emit('retry')">重新加载</button>
|
||||
</div>
|
||||
<template v-else>
|
||||
@@ -179,8 +193,14 @@ watch(
|
||||
<button
|
||||
type="button"
|
||||
class="delete-button"
|
||||
:disabled="permission.inherited || saving"
|
||||
:title="permission.inherited ? '继承权限不可直接删除' : '删除权限'"
|
||||
:disabled="permission.inherited || saving || props.canEdit === false"
|
||||
:title="
|
||||
permission.inherited
|
||||
? '继承权限不可直接删除'
|
||||
: props.canEdit === false
|
||||
? '当前账号无直接权限修改权限'
|
||||
: '删除权限'
|
||||
"
|
||||
@click="deletePermission(permission.id)"
|
||||
>
|
||||
删除
|
||||
@@ -193,7 +213,7 @@ watch(
|
||||
<p v-else class="empty-state compact">当前模板暂无直接权限配置。</p>
|
||||
</div>
|
||||
|
||||
<form class="add-form" @submit.prevent="submit">
|
||||
<form v-if="props.canEdit !== false" class="add-form" @submit.prevent="submit">
|
||||
<div class="list-heading">
|
||||
<span>新增权限</span>
|
||||
<span>服务端会再次校验授权范围</span>
|
||||
@@ -237,6 +257,7 @@ watch(
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
<p v-else class="readonly-tip">当前账号仅可查看模板例外,新增和删除操作已禁用。</p>
|
||||
</template>
|
||||
</section>
|
||||
</template>
|
||||
@@ -299,6 +320,12 @@ select:disabled {
|
||||
font-size: 11.5px;
|
||||
}
|
||||
|
||||
.template-empty-label {
|
||||
padding-bottom: 8px;
|
||||
color: var(--mut);
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.list-heading {
|
||||
display: flex;
|
||||
gap: 12px;
|
||||
@@ -406,6 +433,13 @@ td {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.empty-state small {
|
||||
display: block;
|
||||
margin-top: 5px;
|
||||
color: var(--mut);
|
||||
font-size: 11px;
|
||||
}
|
||||
|
||||
.error-state {
|
||||
display: flex;
|
||||
gap: 10px;
|
||||
@@ -435,6 +469,15 @@ td {
|
||||
background: #f8fbfc;
|
||||
}
|
||||
|
||||
.readonly-tip {
|
||||
padding: 10px 12px;
|
||||
margin: 0;
|
||||
color: var(--mut);
|
||||
font-size: 11.5px;
|
||||
background: #f8fbfc;
|
||||
border-radius: 6px;
|
||||
}
|
||||
|
||||
@media (max-width: 960px) {
|
||||
.form-grid {
|
||||
grid-template-columns: repeat(2, minmax(0, 1fr));
|
||||
|
||||
Reference in New Issue
Block a user