+
@@ -43,20 +41,7 @@ function navigateToDetailMenu(detailMenuItem: LayoutMenuItem) {
-
-
-
-
-
- {{ detailMenuItem.label }}
-
-
-
-
+
diff --git a/ui/src/layout/sidebar/ResourceDetailMenu.vue b/ui/src/layout/sidebar/ResourceDetailMenu.vue
new file mode 100644
index 00000000000..a2c6e420530
--- /dev/null
+++ b/ui/src/layout/sidebar/ResourceDetailMenu.vue
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+
diff --git a/ui/src/router/ROUTE_README.md b/ui/src/router/ROUTE_README.md
index b47f83083b9..0c4bb2537da 100644
--- a/ui/src/router/ROUTE_README.md
+++ b/ui/src/router/ROUTE_README.md
@@ -59,7 +59,7 @@ System 根地址为 `/admin/system`,默认进入首页 `/admin/system/home`。
对话端管理根地址为 `/admin/system/chat-management`(`system-chat-management`),默认进入
`users`(`system-chat-users`)。子路由还包括 `groups`
(`system-chat-groups`)、`authentication`(`system-chat-authentication`)
-和 `portal-access`(`system-portal-access`),页面组件统一位于 `views/system/chat-management/`。
+和 `portal-setting`(`system-portal-setting`),页面组件统一位于 `views/system/chat-management/`。
门户访问设置渲染 `views/system/chat-management/portal-setting/PortalSettingView.vue`,提供门户访问
配置和右侧界面预览。
@@ -113,18 +113,19 @@ Chat 使用独立入口 `src/chat.ts` 和独立 Router,不要把 Chat 路由
路由扩展字段定义在 `admin/types.ts`:
-| 字段 | 类型 | 说明 |
-| ------------------ | ----------------------------------------------------- | ------------------------------------------------------ |
-| `scope` | `'workspace' \| 'system'` | 标记生成哪一套框架导航,只配置在布局根路由上 |
-| `resourceScope` | `'workspace' \| 'system-resource' \| 'system-shared'` | 标记页面使用的资源范围,由对应资源父路由配置并向下继承 |
-| `activeIcon` | `string` | 菜单激活状态的 iconfont Symbol ID |
-| `activeMenu` | `string` | 进入子页面时需要保持激活的侧栏菜单路径 |
-| `detailActiveMenu` | `string` | 更深层详情页面需要保持激活的二级菜单路由名称 |
-| `title` | `string` | 页面标题,同时作为导航名称 |
-| `icon` | `string` | iconfont Symbol ID,子目录通常可以不配置 |
-| `order` | `number` | 同级导航排序,数字越小越靠前 |
-| `hidden` | `boolean` | 设置为 `true` 时不显示在导航中 |
-| `resource` | `ResourceAuthorizationType` | 系统资源授权页面当前管理的后端资源类型 |
+| 字段 | 类型 | 说明 |
+| -------------------- | ----------------------------------------------------- | ------------------------------------------------------ |
+| `scope` | `'workspace' \| 'system'` | 标记生成哪一套框架导航,只配置在布局根路由上 |
+| `resourceScope` | `'workspace' \| 'system-resource' \| 'system-shared'` | 标记页面使用的资源范围,由对应资源父路由配置并向下继承 |
+| `activeIcon` | `string` | 菜单激活状态的 iconfont Symbol ID |
+| `activeMenu` | `string` | 进入子页面时需要保持激活的侧栏菜单路径 |
+| `resourceDetailRoot` | `boolean` | 标记资源详情导航根,仅在详情容器路由自身配置 |
+| `detailActiveMenu` | `string` | 更深层详情页面需要保持激活的二级菜单路由名称 |
+| `title` | `string` | 页面标题,同时作为导航名称 |
+| `icon` | `string` | iconfont Symbol ID,子目录通常可以不配置 |
+| `order` | `number` | 同级导航排序,数字越小越靠前 |
+| `hidden` | `boolean` | 设置为 `true` 时不显示在导航中 |
+| `resource` | `ResourceAuthorizationType` | 系统资源授权页面当前管理的后端资源类型 |
## 导航生成
@@ -139,8 +140,8 @@ Chat 使用独立入口 `src/chat.ts` 和独立 Router,不要把 Chat 路由
`WorkspaceSidebar` 和 `SystemSidebar` 分别调用该方法,不需要在页面组件中维护菜单数组。
资源详情页面统一使用 `ResourceDetailLayout`。`admin/utils.ts` 中的
-`getMatchedChildRouteList(route)` 根据当前匹配路由找到所属详情父路由,并复用与
-`getChildRouteList(scope)` 相同的过滤、排序和菜单字段转换逻辑生成二级导航。详情子路由通过
+`getMatchedChildRouteList(route)` 从 `route.matched` 的记录自身 meta 中查找 `resourceDetailRoot: true`,定位详情父路由,并复用与
+`getChildRouteList(scope)` 相同的过滤、排序和菜单字段转换逻辑生成二级导航。详情菜单支持一级入口与二级折叠分组混排,分组直接使用路由 `children`。详情子路由通过
`title`、`icon`、`activeIcon` 和 `order` 配置二级菜单;更深层页面通过
`detailActiveMenu` 指定需要保持激活的二级菜单路由名称,不配置 `parentPath` 或 `parentName`。
`ResourceDetailLayout` 切换二级菜单时保留当前 query;详情容器返回列表时按业务来源状态透传或
@@ -323,10 +324,15 @@ System 共享资源页面:
- 每次新增、删除、移动或修改路由时,必须同步更新本文件。
工作空间知识库卡片进入 `workspace-knowledge-detail`,默认重定向到“文档”子路由。
-详情容器复用 `ResourceDetailLayout`,二级目录包含“文档”、“工作流”和“设置”;`setting`
+详情容器复用 `ResourceDetailLayout`,菜单依次为“资料库(文档、图片、标签管理)”、
+“工作流”、“检索优化(召回测试、问题、自定义分词)”、“授权与集成(对话用户、外部检索服务)”、
+“设置”。资料库分组使用空 path,保留原 `/document` 地址;图片和标签分别使用 `/image`、`/tag`。
+检索优化使用 `/retrieval/recall`、`/retrieval/question`、`/retrieval/dictionary`;
+授权与集成使用 `/integration/chat-user`、`/integration/external-retrieval`。
+分组不挂载页面组件,直接访问分组时重定向到首个子页。新增七个页面暂为占位 View。`setting`
渲染 `knowledge-detail/setting/KnowledgeSettingView.vue`,使用容器提供的知识库详情。`workflow-entry`
仅作为目录跳转入口,重定向到独立的 `workflow-knowledge` 全屏画布。画布返回知识库详情。
-文档详情继续保留原地址,并通过 `detailActiveMenu` 高亮“文档”。
+文档详情路由当前尚未启用;后续接入时通过 `detailActiveMenu` 高亮“文档”。
智能体工作流返回通过 `views/workflow/application/navigation.ts` 动态读取详情父路由的 `children`。
Workspace 父路由为 `workspace-application-detail-layout`;System 详情实现时使用
diff --git a/ui/src/router/admin/system/index.ts b/ui/src/router/admin/system/index.ts
index 2fc819c93fb..6e1dc47432b 100644
--- a/ui/src/router/admin/system/index.ts
+++ b/ui/src/router/admin/system/index.ts
@@ -252,12 +252,12 @@ export const systemRoutes: RouteRecordRaw = {
component: () => import('@/views/system/chat-management/authentication/AuthenticationView.vue'),
meta: { title: '对话用户认证', order: 30,
permission:perm.system.chatAuth.read,
- next:'system-portal-access'
+ next:'system-portal-setting'
},
},
{
- path: 'portal-access',
- name: 'system-portal-access',
+ path: 'portal-setting',
+ name: 'system-portal-setting',
component: () => import('@/views/system/chat-management/portal-setting/PortalSettingView.vue'),
meta: { title: '门户访问设置', order: 40, permission: perm.system.portal.read, next: 'system-settings' },
},
diff --git a/ui/src/router/admin/types.ts b/ui/src/router/admin/types.ts
index feffdd3e7c2..caec3b3e068 100644
--- a/ui/src/router/admin/types.ts
+++ b/ui/src/router/admin/types.ts
@@ -17,6 +17,8 @@ declare module 'vue-router' {
activeMenu?: string
/** 资源详情页需要保持激活的二级菜单路由名称。 */
detailActiveMenu?: string
+ /** 资源详情导航根,仅配置在挂载详情容器的路由上。 */
+ resourceDetailRoot?: boolean
/** iconfont Symbol ID */
icon?: string
order?: number
diff --git a/ui/src/router/admin/utils.ts b/ui/src/router/admin/utils.ts
index 1a871ee950b..da61db2e5bc 100644
--- a/ui/src/router/admin/utils.ts
+++ b/ui/src/router/admin/utils.ts
@@ -26,7 +26,7 @@ function createMenuItems(routes: readonly MenuRouteRecord[]): LayoutMenuItem[] {
activeIcon: route.meta?.activeIcon,
icon: route.meta?.icon,
route: { name: route.name! },
- permission:route.meta?.permission as LayoutMenuItem['permission'],
+ permission: route.meta?.permission as LayoutMenuItem['permission'],
children: children.length ? children : undefined,
}
})
@@ -41,13 +41,7 @@ export function getChildRouteList(scope: RouteScope): LayoutMenuItem[] {
/** 根据当前匹配路由生成所属详情父路由的二级侧栏目录。 */
export function getMatchedChildRouteList(route: RouteLocationNormalizedLoaded): LayoutMenuItem[] {
- const activeRouteName = route.meta.detailActiveMenu ?? route.name
+ const detailRoot = route.matched.find((matchedRoute) => matchedRoute.meta.resourceDetailRoot === true)
- if (!activeRouteName) return []
-
- const parentRoute = [...route.matched]
- .reverse()
- .find((matchedRoute) => matchedRoute.children.some((childRoute) => childRoute.name === activeRouteName))
-
- return createMenuItems(parentRoute?.children ?? [])
+ return createMenuItems(detailRoot?.children ?? [])
}
diff --git a/ui/src/router/admin/workspace/modules/application.ts b/ui/src/router/admin/workspace/modules/application.ts
index ae8fc556780..228ec16739c 100644
--- a/ui/src/router/admin/workspace/modules/application.ts
+++ b/ui/src/router/admin/workspace/modules/application.ts
@@ -19,7 +19,7 @@ export const applicationRoutes: RouteRecordRaw[] = [
path: ':applicationId/:type',
name: 'workspace-application-detail-layout',
component: () => import('@/views/application-detail/WorkspaceApplicationDetail.vue'),
- meta: { title: '智能体详情', hidden: true },
+ meta: { title: '智能体详情', hidden: true, resourceDetailRoot: true },
children: [
{
path: 'overview',
diff --git a/ui/src/router/admin/workspace/modules/knowledge.ts b/ui/src/router/admin/workspace/modules/knowledge.ts
index f743dc21397..587c645958c 100644
--- a/ui/src/router/admin/workspace/modules/knowledge.ts
+++ b/ui/src/router/admin/workspace/modules/knowledge.ts
@@ -18,26 +18,91 @@ export const knowledgeRoutes: RouteRecordRaw[] = [
name: 'workspace-knowledge-detail',
component: () => import('@/views/knowledge-detail/WorkspaceKnowledgeDetailView.vue'),
redirect: { name: 'workspace-knowledge-document-list' },
- meta: { title: '知识库详情', hidden: true },
+ meta: { title: '知识库详情', hidden: true, resourceDetailRoot: true },
children: [
{
- path: 'document',
- name: 'workspace-knowledge-document-list',
- component: () => import('@/views/knowledge-detail/document/DocumentListView.vue'),
- meta: { title: '文档', icon: 'icon-draft_outlined', activeIcon: 'icon-draft_outlined', order: 10 },
+ path: '',
+ name: 'workspace-knowledge-library',
+ redirect: { name: 'workspace-knowledge-document-list' },
+ meta: { title: '资料库', icon: 'icon_describe_outlined', order: 10 },
+ children: [
+ {
+ path: 'document',
+ name: 'workspace-knowledge-document-list',
+ component: () => import('@/views/knowledge-detail/document/DocumentListView.vue'),
+ meta: { title: '文档', order: 10 },
+ },
+ {
+ path: 'image',
+ name: 'workspace-knowledge-image-list',
+ component: () => import('@/views/knowledge-detail/image/ImageListView.vue'),
+ meta: { title: '图片', order: 20 },
+ },
+ {
+ path: 'tag',
+ name: 'workspace-knowledge-tag',
+ component: () => import('@/views/knowledge-detail/tag/TagManagementView.vue'),
+ meta: { title: '标签管理', order: 30 },
+ },
+ ],
},
-
{
path: 'workflow-entry',
name: 'workspace-knowledge-workflow',
redirect: (to) => ({ name: 'workflow-knowledge', params: { workspaceId: to.params.workspaceId, knowledgeId: to.params.knowledgeId } }),
- meta: { title: '工作流', icon: 'icon_ticket-flow_outlined', activeIcon: 'icon_ticket-flow_outlined', order: 20 },
+ meta: { title: '工作流', icon: 'icon_mindnote_outlined', order: 20 },
+ },
+ {
+ path: 'retrieval',
+ name: 'workspace-knowledge-retrieval',
+ redirect: { name: 'workspace-knowledge-recall-test' },
+ meta: { title: '检索优化', icon: 'icon-laser', order: 30 },
+ children: [
+ {
+ path: 'recall',
+ name: 'workspace-knowledge-recall-test',
+ component: () => import('@/views/knowledge-detail/recall-test/RecallTestView.vue'),
+ meta: { title: '召回测试', order: 10 },
+ },
+ {
+ path: 'question',
+ name: 'workspace-knowledge-question',
+ component: () => import('@/views/knowledge-detail/question/QuestionListView.vue'),
+ meta: { title: '问题', order: 20 },
+ },
+ {
+ path: 'dictionary',
+ name: 'workspace-knowledge-dictionary',
+ component: () => import('@/views/knowledge-detail/dictionary/DictionaryView.vue'),
+ meta: { title: '自定义分词', order: 30 },
+ },
+ ],
+ },
+ {
+ path: 'integration',
+ name: 'workspace-knowledge-integration',
+ redirect: { name: 'workspace-knowledge-chat-user' },
+ meta: { title: '授权与集成', icon: 'icon_admin_outlined', order: 40 },
+ children: [
+ {
+ path: 'chat-user',
+ name: 'workspace-knowledge-chat-user',
+ component: () => import('@/views/knowledge-detail/chat-user/ChatUserListView.vue'),
+ meta: { title: '对话用户', order: 10 },
+ },
+ {
+ path: 'external-retrieval',
+ name: 'workspace-knowledge-external-retrieval',
+ component: () => import('@/views/knowledge-detail/external-retrieval/ExternalRetrievalView.vue'),
+ meta: { title: '外部检索服务', order: 20 },
+ },
+ ],
},
{
path: 'setting',
name: 'workspace-knowledge-setting',
component: () => import('@/views/knowledge-detail/setting/KnowledgeSettingView.vue'),
- meta: { title: '设置', icon: 'icon_setting', activeIcon: 'icon_setting_filled', order: 30 },
+ meta: { title: '设置', icon: 'icon_setting', activeIcon: 'icon_setting_filled', order: 50 },
},
// {
// path: 'document/:documentId',
diff --git a/ui/src/styles/STYLE_README.md b/ui/src/styles/STYLE_README.md
index 350bcb23ed3..ef2ca123a86 100644
--- a/ui/src/styles/STYLE_README.md
+++ b/ui/src/styles/STYLE_README.md
@@ -507,3 +507,12 @@ npm run build-only-chat
`mk-rank` 提供 20px 圆形名次徽标,前三名叠加 `mk-rank-1`、`mk-rank-2`、
`mk-rank-3`,使用固定渐变配色。样式统一维护在 `app.scss`。
+
+## 资源详情导航
+
+`layout/sidebar/ResourceDetailMenu.vue` 统一资源详情的单层与二级菜单样式,供
+`ResourceDetailLayout` 使用。分组使用 `el-collapse / el-collapse-item`,允许同时展开多个分组;
+叶子菜单复用 `MkListItem`,二级项仅缩进内容,选中背景保持整行宽度。
+折叠标题沿用菜单行的字号、行高、圆角、内边距与悬停颜色,移除 Collapse 默认分隔线和内容留白。
+覆盖样式限定在组件 scoped 范围内,不影响 SystemSidebar 或其他 Collapse。
+分组首次默认展开,路由切换时展开当前叶子所属分组,普通渲染不重置手动收起状态。
diff --git a/ui/src/styles/element-plus.scss b/ui/src/styles/element-plus.scss
index 835426efb8d..4f8fc4a6e7e 100644
--- a/ui/src/styles/element-plus.scss
+++ b/ui/src/styles/element-plus.scss
@@ -321,6 +321,9 @@
line-height: 22px;
font-weight: 400;
}
+ &__inner:before {
+ top: 6px !important;
+ }
}
.el-checkbox-button {
@@ -1209,4 +1212,7 @@
color: var(--el-color-primary-light-5);
}
}
+ &:focus {
+ color: inherit;
+ }
}
diff --git a/ui/src/styles/tailwind.css b/ui/src/styles/tailwind.css
index 13bc2b878ff..59610aaa178 100644
--- a/ui/src/styles/tailwind.css
+++ b/ui/src/styles/tailwind.css
@@ -9,6 +9,7 @@
--color-purple: var(--mk-purple);
--color-blue: var(--mk-blue);
--color-N100: var(--mk-N100);
+ --color-N200: var(--mk-N200);
--color-N300: var(--mk-N300);
--color-N350: var(--mk-N350);
--color-N400: var(--mk-N400);
diff --git a/ui/src/views/VIEW_README.md b/ui/src/views/VIEW_README.md
index 6df932da2e8..7007c1eb400 100644
--- a/ui/src/views/VIEW_README.md
+++ b/ui/src/views/VIEW_README.md
@@ -407,7 +407,7 @@ Dialog。新增或重命名文件时,应同步更新所有导入和页面功
| `system/identity/workspaces/WorkspaceListView.vue` | 工作空间列表页面 |
| `system/chat/user-groups/GroupsListView.vue` | 对话用户组及组成员管理页面 |
| `system/chat/users/UserListView.vue` | 对话用户列表、配额及用户导入管理页面 |
-| `system/chat-management/portal-setting/PortalSettingView.vue` | 门户基本信息、访问开关、认证配置、跨域地址编辑与门户预览 |
+| `system/chat-management/portal-setting/PortalSettingView.vue` | 门户基本信息、访问开关、认证配置、跨域地址编辑与门户预览 |
| `system/settings/theme/ThemeSettingView.vue` | 系统外观设置和登录外观预览页面 |
| `system/settings/authentication/AuthenticationView.vue` | 系统登录及认证源配置页面 |
| `system/settings/email/EmailSettingsView.vue` | 系统邮件 SMTP 服务配置页面 |
@@ -625,14 +625,17 @@ Workspace 与 System 授权均使用该工作空间 ID,不读取路由工作
`KnowledgeCard` 在非批量选择模式下通过 `click` 通知列表进入知识库详情。
`knowledge-detail/WorkspaceKnowledgeDetailView.vue` 查询并展示知识库名称,复用
-`ResourceDetailLayout` 生成“文档”、“工作流”和“设置”目录,返回列表时恢复所属文件夹。
+`ResourceDetailLayout` 生成资料库、工作流、检索优化、授权与集成、设置目录,返回列表时恢复所属文件夹。
+资料库包含文档、图片、标签管理;检索优化包含召回测试、问题、自定义分词;授权与集成包含
+对话用户、外部检索服务。新增页面分别放在 `knowledge-detail/` 下的 `image/`、`tag/`、
+`recall-test/`、`question/`、`dictionary/`、`chat-user/`、`external-retrieval/`,暂只展示占位内容。
容器通过 `knowledge-detail/context.ts` 提供只读详情与替换能力;设置页复用已加载详情,保存成功后
更新容器数据,同步名称等展示。基本信息复用创建流程的 `KnowledgeBaseForm`,类型配置和校验留在
设置页中。当前设置页仅接入 Workspace 路由和 API,暂不增加前端权限判断。
更换向量模型需确认,先保存再重新向量化,整条流程禁止重复提交;向量化失败时保留原模型比较基准,
允许再次保存重试。Web、飞书设置保留未编辑的 `meta` 字段,上传限制使用详情顶层值。
`knowledge-detail/document/DocumentListView.vue` 为文档列表子页面,目前保留占位内容;
-文档详情作为同一容器的子路由。System 详情仍使用原有独立占位页面。
+文档详情路由暂未启用,System 知识库详情路由暂未注册。
`KnowledgeWorkflowView` 复用 `ButtonDefaultModelSetting`,从知识库详情读取默认模型配置,
随工作流保存提交并将配置传入画布;支持应用到所有节点,保存失败回滚至已保存配置。
diff --git a/ui/src/views/application/ApplicationView.vue b/ui/src/views/application/ApplicationView.vue
index a45a9ffa8bb..7d6f3959a75 100644
--- a/ui/src/views/application/ApplicationView.vue
+++ b/ui/src/views/application/ApplicationView.vue
@@ -244,7 +244,7 @@ function handleBatchDelete() {
+defineOptions({ name: 'ChatUserListView' })
+
+
+
+ 对话用户功能待接入
+
diff --git a/ui/src/views/knowledge-detail/dictionary/DictionaryView.vue b/ui/src/views/knowledge-detail/dictionary/DictionaryView.vue
new file mode 100644
index 00000000000..55fcf537860
--- /dev/null
+++ b/ui/src/views/knowledge-detail/dictionary/DictionaryView.vue
@@ -0,0 +1,7 @@
+
+
+
+ 自定义分词功能待接入
+
diff --git a/ui/src/views/knowledge-detail/external-retrieval/ExternalRetrievalView.vue b/ui/src/views/knowledge-detail/external-retrieval/ExternalRetrievalView.vue
new file mode 100644
index 00000000000..1f787e2b013
--- /dev/null
+++ b/ui/src/views/knowledge-detail/external-retrieval/ExternalRetrievalView.vue
@@ -0,0 +1,7 @@
+
+
+
+ 外部检索服务功能待接入
+
diff --git a/ui/src/views/knowledge-detail/image/ImageListView.vue b/ui/src/views/knowledge-detail/image/ImageListView.vue
new file mode 100644
index 00000000000..48ff3b8310c
--- /dev/null
+++ b/ui/src/views/knowledge-detail/image/ImageListView.vue
@@ -0,0 +1,7 @@
+
+
+
+ 图片功能待接入
+
diff --git a/ui/src/views/knowledge-detail/question/QuestionListView.vue b/ui/src/views/knowledge-detail/question/QuestionListView.vue
new file mode 100644
index 00000000000..4812063720d
--- /dev/null
+++ b/ui/src/views/knowledge-detail/question/QuestionListView.vue
@@ -0,0 +1,7 @@
+
+
+
+ 问题功能待接入
+
diff --git a/ui/src/views/knowledge-detail/recall-test/RecallTestView.vue b/ui/src/views/knowledge-detail/recall-test/RecallTestView.vue
new file mode 100644
index 00000000000..ea6087a3295
--- /dev/null
+++ b/ui/src/views/knowledge-detail/recall-test/RecallTestView.vue
@@ -0,0 +1,7 @@
+
+
+
+ 召回测试功能待接入
+
diff --git a/ui/src/views/knowledge-detail/tag/TagManagementView.vue b/ui/src/views/knowledge-detail/tag/TagManagementView.vue
new file mode 100644
index 00000000000..79e14c7166f
--- /dev/null
+++ b/ui/src/views/knowledge-detail/tag/TagManagementView.vue
@@ -0,0 +1,7 @@
+
+
+
+ 标签管理功能待接入
+
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 d5036dc5c74..42e04750dfe 100644
--- a/ui/src/views/system/chat-management/portal-setting/PortalSettingView.vue
+++ b/ui/src/views/system/chat-management/portal-setting/PortalSettingView.vue
@@ -80,14 +80,16 @@ const previewLogo = computed(() => portalSetting.logo)
-
-
-
![门户 Logo]()
-
-
{{ previewName }}
+
+
+
+
![门户 Logo]()
+
+
{{ previewName }}
+
+
+
-
-
@@ -149,7 +151,7 @@ const previewLogo = computed(() => portalSetting.logo)
身份认证
-
+
@@ -157,7 +159,7 @@ const previewLogo = computed(() => portalSetting.logo)
跨域设置
-
+
diff --git a/ui/src/views/system/chat-management/portal-setting/components/ButtonEditPortal.vue b/ui/src/views/system/chat-management/portal-setting/components/ButtonEditPortal.vue
index 3fbf488561a..f7a4db218c5 100644
--- a/ui/src/views/system/chat-management/portal-setting/components/ButtonEditPortal.vue
+++ b/ui/src/views/system/chat-management/portal-setting/components/ButtonEditPortal.vue
@@ -1,11 +1,10 @@