feat: 增加工作流和知识库三级权限

- 抽取统一资源访问骨架与部门可见范围判断

- 接入工作流和知识库的 READ/MANAGE 权限校验

- 增加可见范围配置与只读态前端交互
This commit is contained in:
2026-03-29 17:25:55 +08:00
parent f49d94e2fe
commit 22ceabff96
58 changed files with 3053 additions and 85 deletions

View File

@@ -5,7 +5,15 @@ import { computed, onMounted, ref } from 'vue';
import { EasyFlowFormModal } from '@easyflow/common-ui';
import { ElForm, ElFormItem, ElInput, ElMessage, ElUpload } from 'element-plus';
import {
ElForm,
ElFormItem,
ElInput,
ElMessage,
ElOption,
ElSelect,
ElUpload,
} from 'element-plus';
import { api } from '#/api/request';
import DictSelect from '#/components/dict/DictSelect.vue';
@@ -28,7 +36,7 @@ const isImport = ref(false);
const jsonFile = ref<any>(null);
const uploadFileList = ref<any[]>([]);
const uploadRef = ref<UploadInstance>();
const entity = ref<any>({
const createDefaultEntity = () => ({
alias: '',
deptId: '',
title: '',
@@ -36,8 +44,24 @@ const entity = ref<any>({
icon: '',
content: '',
englishName: '',
visibilityScope: 'PRIVATE',
});
const entity = ref<any>(createDefaultEntity());
const btnLoading = ref(false);
const visibilityScopeOptions = computed(() => [
{
label: $t('aiWorkflow.visibilityScopePrivate'),
value: 'PRIVATE',
},
{
label: $t('aiWorkflow.visibilityScopeDept'),
value: 'DEPT',
},
{
label: $t('aiWorkflow.visibilityScopePublic'),
value: 'PUBLIC',
},
]);
const jsonFileModel = computed({
get: () => (uploadFileList.value.length > 0 ? uploadFileList.value[0] : null),
set: (value: any) => {
@@ -57,10 +81,11 @@ const rules = computed(() => ({
// functions
function openDialog(row: any, importMode = false) {
isImport.value = importMode;
if (row.id) {
isAdd.value = false;
}
entity.value = row;
isAdd.value = !row?.id;
entity.value = {
...createDefaultEntity(),
...(row || {}),
};
dialogVisible.value = true;
}
@@ -137,7 +162,7 @@ function closeDialog() {
jsonFile.value = null;
isAdd.value = true;
isImport.value = false;
entity.value = {};
entity.value = createDefaultEntity();
dialogVisible.value = false;
}
</script>
@@ -198,6 +223,19 @@ function closeDialog() {
dict-code="aiWorkFlowCategory"
/>
</ElFormItem>
<ElFormItem
prop="visibilityScope"
:label="$t('aiWorkflow.visibilityScope')"
>
<ElSelect v-model="entity.visibilityScope" class="w-full">
<ElOption
v-for="item in visibilityScopeOptions"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</ElSelect>
</ElFormItem>
<ElFormItem prop="alias" :label="$t('aiWorkflow.alias')">
<ElInput v-model.trim="entity.alias" />
</ElFormItem>