diff --git a/web/apps/web-ele/src/locales/index.ts b/web/apps/web-ele/src/locales/index.ts
index 95a710f..b5c0da7 100644
--- a/web/apps/web-ele/src/locales/index.ts
+++ b/web/apps/web-ele/src/locales/index.ts
@@ -30,66 +30,24 @@ const modules = import.meta.glob([
'./langs/*/authentication.json',
'./langs/*/chat.json',
'./langs/*/common.json',
- './langs/*/database-connection.json',
- './langs/*/data-source.json',
- './langs/*/dept.json',
- './langs/*/dict.json',
- './langs/*/file-manager.json',
'./langs/*/loginLog.json',
'./langs/*/menu.json',
'./langs/*/menu-title.json',
'./langs/*/message.json',
- './langs/*/org-chart.json',
+ './langs/*/page.json',
'./langs/*/permission.json',
- './langs/*/post.json',
'./langs/*/role.json',
- './langs/*/server-monitor.json',
'./langs/*/system-config.json',
'./langs/*/system.json',
- './langs/*/ui-config.json',
'./langs/*/ui.json',
'./langs/*/user-avatar.json',
'./langs/*/user.json',
- './langs/*/wiki.json',
- './langs/*/workflow.json',
- './langs/*/zq-smart-table.json',
]);
const localesMap = loadLocalesMapFromDir(
/\.\/langs\/([^/]+)\/(.*)\.json$/,
modules,
);
-/** zq-table 需要提升到根级的命名空间,以便 t('table.xxx') 等能正确解析 */
-const ZQ_TABLE_ROOT_KEYS = [
- 'common',
- 'table',
- 'toolbar',
- 'filter',
- 'field',
- 'view',
- 'kanban',
- 'gantt',
- 'calendar',
- 'gallery',
- 'form',
- 'dashboard',
- 'sidebar',
- 'app',
- 'theme',
- 'language',
- 'link',
- 'cellRenderer',
- 'permission',
- 'summary',
- 'formula',
- 'validation',
- 'comment',
- 'mention',
- 'document',
- 'trash',
- 'version',
- 'template',
-] as const;
/**
* 加载应用特有的语言包
@@ -101,30 +59,7 @@ async function loadMessages(lang: SupportedLanguagesType) {
localesMap[lang]?.(),
loadThirdPartyMessage(lang),
]);
- const messages = appLocaleMessages?.default || {};
- // 将 zq-table / zq-smart-table 的 table/toolbar/filter 等命名空间提升到根级
- // 使用浅合并:zq-table 的子键补充到已有命名空间,app 级别的同名 key 优先保留
- const merged = { ...messages };
- for (const ns of ['zq-table', 'zq-smart-table'] as const) {
- const src = messages[ns];
- if (src && typeof src === 'object') {
- for (const key of ZQ_TABLE_ROOT_KEYS) {
- if (key in src && src[key] != null) {
- const existing = merged[key];
- if (
- existing &&
- typeof existing === 'object' &&
- typeof src[key] === 'object'
- ) {
- merged[key] = { ...src[key], ...existing };
- } else {
- merged[key] = src[key];
- }
- }
- }
- }
- }
- return merged;
+ return appLocaleMessages?.default || {};
}
/**
diff --git a/web/apps/web-ele/src/router/access.ts b/web/apps/web-ele/src/router/access.ts
index db83128..140df6e 100644
--- a/web/apps/web-ele/src/router/access.ts
+++ b/web/apps/web-ele/src/router/access.ts
@@ -17,13 +17,29 @@ const forbiddenComponent = () => import('#/views/_core/fallback/forbidden.vue');
async function generateAccess(options: GenerateMenuAndRoutesOptions) {
const pageMap: ComponentRecordType = import.meta.glob([
- '../views/**/*.vue',
- '!../views/**/components/**',
- '!../views/**/modules/**',
- '!../views/ai-platform/workflow/editor/components/**/*.vue',
- '!../views/ai-platform/workflow/editor/edges/**/*.vue',
- '!../views/ai-platform/workflow/editor/nodes/**/*.vue',
- '!../views/ai-platform/workflow/editor/panels/**/*.vue',
+ '../views/_core/account-settings/**/*.vue',
+ '../views/_core/agent-chat/**/*.vue',
+ '../views/_core/announcement/index.vue',
+ '../views/_core/announcement/list.vue',
+ '../views/_core/authentication/**/*.vue',
+ '../views/_core/chat/**/*.vue',
+ '../views/_core/fallback/**/*.vue',
+ '../views/_core/file-preview/index.vue',
+ '../views/_core/login-log/index.vue',
+ '../views/_core/menu/index.vue',
+ '../views/_core/message/index.vue',
+ '../views/_core/mobile-signature/index.vue',
+ '../views/_core/permission/index.vue',
+ '../views/_core/role/index.vue',
+ '../views/_core/system-config/index.vue',
+ '../views/_core/user/index.vue',
+ '../views/ai-platform/agent/editor/index.vue',
+ '../views/ai-platform/agent/index.vue',
+ '../views/ai-platform/knowledge/detail/index.vue',
+ '../views/ai-platform/knowledge/index.vue',
+ '../views/ai-platform/workflow/editor/index.vue',
+ '../views/ai-platform/workflow/index.vue',
+ '../views/ai-platform/workflow-runs/index.vue',
]);
const layoutMap: ComponentRecordType = {
diff --git a/web/apps/web-ele/src/router/routes/core.ts b/web/apps/web-ele/src/router/routes/core.ts
index ac3adfc..82fb730 100644
--- a/web/apps/web-ele/src/router/routes/core.ts
+++ b/web/apps/web-ele/src/router/routes/core.ts
@@ -97,6 +97,17 @@ const coreRoutes: RouteRecordRaw[] = [
title: 'OAuth Callback',
},
},
+ {
+ name: 'MobileSignature',
+ path: '/mobile-signature/:token',
+ component: () => import('#/views/_core/mobile-signature/index.vue'),
+ meta: {
+ hideInBreadcrumb: true,
+ hideInMenu: true,
+ hideInTab: true,
+ title: 'Mobile Signature',
+ },
+ },
{
name: 'FilePreview',
path: '/file-preview/:id',
diff --git a/web/apps/web-ele/src/router/routes/index.ts b/web/apps/web-ele/src/router/routes/index.ts
index ad7393a..7814928 100644
--- a/web/apps/web-ele/src/router/routes/index.ts
+++ b/web/apps/web-ele/src/router/routes/index.ts
@@ -3,17 +3,16 @@ import type { RouteRecordRaw } from 'vue-router';
import { mergeRouteModules, traverseTreeValues } from '@vben/utils';
import { coreRoutes, fallbackNotFoundRoute } from './core';
-
-const dynamicRouteFiles = import.meta.glob('./modules/**/*.ts', {
- eager: true,
-});
+import aiPlatformRoutes from './modules/ai-platform';
// 有需要可以自行打开注释,并创建文件夹
// const externalRouteFiles = import.meta.glob('./external/**/*.ts', { eager: true });
// const staticRouteFiles = import.meta.glob('./static/**/*.ts', { eager: true });
/** 动态路由 */
-const dynamicRoutes: RouteRecordRaw[] = mergeRouteModules(dynamicRouteFiles);
+const dynamicRoutes: RouteRecordRaw[] = mergeRouteModules({
+ './modules/ai-platform.ts': { default: aiPlatformRoutes },
+});
/** 外部路由列表,访问这些页面可以不需要Layout,可能用于内嵌在别的系统(不会显示在菜单中) */
// const externalRoutes: RouteRecordRaw[] = mergeRouteModules(externalRouteFiles);
@@ -37,13 +36,29 @@ const accessRoutes = [...dynamicRoutes, ...staticRoutes];
const componentKeys: string[] = Object.keys(
import.meta.glob([
- '../../views/**/*.vue',
- '!../../views/**/components/**',
- '!../../views/**/modules/**',
- '!../../views/ai-platform/workflow/editor/components/**/*.vue',
- '!../../views/ai-platform/workflow/editor/edges/**/*.vue',
- '!../../views/ai-platform/workflow/editor/nodes/**/*.vue',
- '!../../views/ai-platform/workflow/editor/panels/**/*.vue',
+ '../../views/_core/account-settings/**/*.vue',
+ '../../views/_core/agent-chat/**/*.vue',
+ '../../views/_core/announcement/index.vue',
+ '../../views/_core/announcement/list.vue',
+ '../../views/_core/authentication/**/*.vue',
+ '../../views/_core/chat/**/*.vue',
+ '../../views/_core/fallback/**/*.vue',
+ '../../views/_core/file-preview/index.vue',
+ '../../views/_core/login-log/index.vue',
+ '../../views/_core/menu/index.vue',
+ '../../views/_core/message/index.vue',
+ '../../views/_core/mobile-signature/index.vue',
+ '../../views/_core/permission/index.vue',
+ '../../views/_core/role/index.vue',
+ '../../views/_core/system-config/index.vue',
+ '../../views/_core/user/index.vue',
+ '../../views/ai-platform/agent/editor/index.vue',
+ '../../views/ai-platform/agent/index.vue',
+ '../../views/ai-platform/knowledge/detail/index.vue',
+ '../../views/ai-platform/knowledge/index.vue',
+ '../../views/ai-platform/workflow/editor/index.vue',
+ '../../views/ai-platform/workflow/index.vue',
+ '../../views/ai-platform/workflow-runs/index.vue',
]),
)
.filter((item) => !item.includes('/modules/'))
diff --git a/web/apps/web-ele/src/views/_core/announcement/index.vue b/web/apps/web-ele/src/views/_core/announcement/index.vue
index 4bb7bb9..b8b386f 100644
--- a/web/apps/web-ele/src/views/_core/announcement/index.vue
+++ b/web/apps/web-ele/src/views/_core/announcement/index.vue
@@ -815,7 +815,8 @@ onBeforeUnmount(() => {
class="w-full"
type="textarea"
:placeholder="$t('announcement.formContentPlaceholder')"
- :rows="12"
+ :autosize="{ minRows: 8, maxRows: 16 }"
+ resize="vertical"
/>
diff --git a/web/apps/web-ele/src/views/ai-platform/workflow-runs/index.vue b/web/apps/web-ele/src/views/ai-platform/workflow-runs/index.vue
index 29bbc6d..9544061 100644
--- a/web/apps/web-ele/src/views/ai-platform/workflow-runs/index.vue
+++ b/web/apps/web-ele/src/views/ai-platform/workflow-runs/index.vue
@@ -1,16 +1,29 @@
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common.search') }}
+
+
+ {{ $t('common.refresh') }}
+
+
+
-
-
+
+
+
- {{ getTagLabel(row.trigger_type, triggerOptions) }}
-
-
+
+
+
+
+
+
+
+ {{ getTagLabel(row.trigger_type, triggerOptions) }}
+
+
+
+
+
+
+
+ {{ formatDuration(row.elapsed_time) }}
+
+
+
+
+ {{ formatTime(row.started_at) }}
+
+
+
+
+
+
+ {{ $t('common.view') }}
+
+
+
+
-
- {{ formatDuration(row.elapsed_time) }}
-
-
-
- {{ formatTime(row.started_at) }}
-
-
-
-
- {{ $t('common.view') }}
-
-
-
+
+
+
+
diff --git a/web/apps/web-ele/src/views/ai-platform/workflow/editor/components/ChatPanel.vue b/web/apps/web-ele/src/views/ai-platform/workflow/editor/components/ChatPanel.vue
index 8e48f31..3574803 100644
--- a/web/apps/web-ele/src/views/ai-platform/workflow/editor/components/ChatPanel.vue
+++ b/web/apps/web-ele/src/views/ai-platform/workflow/editor/components/ChatPanel.vue
@@ -1,6 +1,16 @@