@@ -128,7 +134,7 @@ onBeforeUnmount(() => fileReader?.abort())
:on-change="selectImage"
>
-
+
diff --git a/ui/src/views/VIEW_README.md b/ui/src/views/VIEW_README.md
index 7007c1eb400..0c4669e9c99 100644
--- a/ui/src/views/VIEW_README.md
+++ b/ui/src/views/VIEW_README.md
@@ -419,7 +419,9 @@ Dialog。新增或重命名文件时,应同步更新所有导入和页面功
## 备注要求
门户设置的 `components/ButtonEditPortal.vue`、`ButtonPortalAuthSetting.vue` 和
-`ButtonPortalCorsSetting.vue` 分别封装对应按钮、浮层及表单状态。认证组件使用 `MkDrawer`,
+`ButtonPortalCorsSetting.vue` 分别封装对应按钮、浮层及表单状态,通过 `disabled` 接收页面统一的
+编辑限制。页面使用 `perm.system.portal.edit()` 判断门户编辑权限,无权限时禁用配置、复制按钮、
+访问开关及浮层表单和按钮,保存入口同步校验权限。认证组件使用 `MkDrawer`,
打开时与系统 `LoginSetting` 共用 `AuthSettingApi.getLoginSetting()`,通过返回的 `login_methods`
生成登录方式选项,复用登录方式标签,初始保留账号登录。提供默认登录方式及验证码与账号锁定设置;默认方式
仅可选已勾选项,取消勾选当前默认项时回退到首个可选项。认证组件暴露 `open()` 供首次开启认证
diff --git a/ui/src/views/system/chat-management/portal-setting/PortalSettingView.vue b/ui/src/views/system/chat-management/portal-setting/PortalSettingView.vue
index 2db449aa1a2..791241acae9 100644
--- a/ui/src/views/system/chat-management/portal-setting/PortalSettingView.vue
+++ b/ui/src/views/system/chat-management/portal-setting/PortalSettingView.vue
@@ -6,6 +6,7 @@ import LogoIcon from '@/components/mk-logo/LogoIcon.vue'
import { copyText } from '@/utils/clipboard'
import { resetUrl } from '@/utils/icon'
import { MsgSuccess } from '@/utils/message'
+import { perm } from '@/permission'
import PortalPreview from './components/PortalPreview.vue'
import ButtonEditPortal from './components/ButtonEditPortal.vue'
import ButtonPortalAuthSetting from './components/ButtonPortalAuthSetting.vue'
@@ -49,6 +50,8 @@ function loadPortalSetting() {
/* 保存门户配置:接口返回完整配置,成功后整体回填作为页面唯一数据来源 */
function savePortalSetting(payload: PortalSettingPayload | FormData): Promise {
+ if (!canEditPortal.value || saving.value) return Promise.resolve()
+
saving.value = true
return PortalApi.putPortalSetting(payload)
.then((setting) => {
@@ -61,7 +64,7 @@ function savePortalSetting(payload: PortalSettingPayload | FormData): Promise portalSetting.name)
const previewLogo = computed(() => resetUrl(portalSetting.logo))
onMounted(() => loadPortalSetting())
+
+// 权限 控制
+const canEditPortal = computed(() => perm.system.portal.edit())
@@ -111,7 +119,7 @@ onMounted(() => loadPortalSetting())
{{ previewName }}
-
+