From 15229cc5ab93dbcd26d94adfa123734b64d5391b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?cls=5F=E5=AE=81=E6=B3=A2=E6=9C=AC=E6=9C=BA?= <908705107@qq.com> Date: Thu, 11 Jun 2026 18:03:43 +0800 Subject: [PATCH] feat: lighten ai agent admin frontend --- .gitignore | 1 + web/apps/web-ele/src/api/core/index.ts | 8 - .../dashboard-design/DashboardRenderer.vue | 143 - .../components/WidgetRenderer.vue | 319 --- .../components/widgets/AnnouncementList.vue | 298 -- .../components/widgets/ApprovalCenter.vue | 118 - .../components/widgets/CalendarWidget.vue | 71 - .../components/widgets/ClockWidget.vue | 125 - .../components/widgets/CountdownWidget.vue | 155 - .../components/widgets/DataTable.vue | 285 -- .../components/widgets/FilterDate.vue | 127 - .../components/widgets/FilterDateRange.vue | 159 -- .../components/widgets/FilterInput.vue | 139 - .../components/widgets/FilterSelect.vue | 180 -- .../components/widgets/IframeWidget.vue | 202 -- .../components/widgets/ImageCarousel.vue | 252 -- .../components/widgets/ImageWidget.vue | 117 - .../components/widgets/MyApps.vue | 130 - .../components/widgets/NoticeList.vue | 269 -- .../components/widgets/ProgressCard.vue | 28 - .../components/widgets/QuickLinks.vue | 120 - .../components/widgets/RankingList.vue | 71 - .../components/widgets/ServerMonitor.vue | 294 -- .../components/widgets/StatCard.vue | 91 - .../components/widgets/TodoList.vue | 81 - .../components/widgets/VideoPlayer.vue | 277 -- .../components/widgets/WeatherWidget.vue | 364 --- .../components/widgets/WelcomeCard.vue | 115 - .../src/components/dashboard-design/index.ts | 10 - .../components/dashboard-design/runtime.ts | 23 - .../src/components/dashboard-design/types.ts | 115 - .../dashboard-design/utils/dataFetcher.ts | 200 -- .../components/form-editor/AppDesignPanel.vue | 109 - .../form-editor/AppSettingsPanel.vue | 536 ---- .../form-editor/BasicInfoEditor.vue | 117 - .../DashboardBasicInfoConfirmPanel.vue | 122 - .../DashboardDesignConfirmPanel.vue | 137 - .../DashboardPublishConfirmPanel.vue | 137 - .../form-editor/DesignEditorPanel.vue | 288 -- .../form-editor/FormEditorContent.vue | 329 --- .../form-editor/PageBasicInfoEditor.vue | 140 - .../form-editor/PageEditorContent.vue | 210 -- .../form-editor/PagePublishInfoEditor.vue | 129 - .../form-editor/PublishInfoEditor.vue | 122 - .../form-editor/SystemSummaryConfirmPanel.vue | 317 --- .../src/components/form-editor/index.ts | 40 - .../src/components/fu-page/fu-page.vue | 2 +- .../user-avatar/UserProfileDialog.vue | 50 - .../src/locales/langs/en-US/about.json | 15 - .../locales/langs/en-US/account-settings.json | 3 - .../src/locales/langs/en-US/ai-platform.json | 2509 ----------------- .../src/locales/langs/en-US/announcement.json | 73 - .../src/locales/langs/en-US/api-token.json | 37 - .../src/locales/langs/en-US/application.json | 75 - .../src/locales/langs/en-US/approval.json | 62 - .../locales/langs/en-US/authentication.json | 41 - .../web-ele/src/locales/langs/en-US/chat.json | 91 - .../src/locales/langs/en-US/common.json | 188 -- .../src/locales/langs/en-US/contract.json | 150 - .../web-ele/src/locales/langs/en-US/core.json | 55 - .../locales/langs/en-US/dashboard-design.json | 894 ------ .../src/locales/langs/en-US/data-source.json | 283 -- .../langs/en-US/database-connection.json | 52 - .../locales/langs/en-US/database-manager.json | 394 --- .../locales/langs/en-US/database-monitor.json | 138 - .../src/locales/langs/en-US/demos.json | 48 - .../web-ele/src/locales/langs/en-US/dept.json | 41 - .../web-ele/src/locales/langs/en-US/dict.json | 22 - .../locales/langs/en-US/dingtalk-sync.json | 106 - .../langs/en-US/document-generator.json | 527 ---- .../locales/langs/en-US/electronic-seal.json | 60 - .../src/locales/langs/en-US/feishu-sync.json | 65 - .../src/locales/langs/en-US/file-manager.json | 42 - .../src/locales/langs/en-US/form-manager.json | 803 ------ .../src/locales/langs/en-US/loginLog.json | 69 - .../src/locales/langs/en-US/menu-title.json | 61 - .../web-ele/src/locales/langs/en-US/menu.json | 63 - .../src/locales/langs/en-US/message.json | 90 - .../src/locales/langs/en-US/org-chart.json | 10 - .../src/locales/langs/en-US/page-manager.json | 126 - .../web-ele/src/locales/langs/en-US/page.json | 14 - .../src/locales/langs/en-US/permission.json | 74 - .../web-ele/src/locales/langs/en-US/post.json | 34 - .../locales/langs/en-US/redis-manager.json | 73 - .../locales/langs/en-US/redis-monitor.json | 181 -- .../locales/langs/en-US/report-manager.json | 437 --- .../web-ele/src/locales/langs/en-US/role.json | 134 - .../src/locales/langs/en-US/scheduler.json | 130 - .../locales/langs/en-US/server-monitor.json | 160 -- .../locales/langs/en-US/system-config.json | 75 - .../src/locales/langs/en-US/system.json | 10 - .../src/locales/langs/en-US/ui-config.json | 172 -- .../web-ele/src/locales/langs/en-US/ui.json | 15 - .../src/locales/langs/en-US/user-avatar.json | 13 - .../web-ele/src/locales/langs/en-US/user.json | 68 - .../src/locales/langs/en-US/wecom-sync.json | 67 - .../src/locales/langs/en-US/workflow.json | 310 -- .../locales/langs/zh-CN/account-settings.json | 3 - .../src/locales/langs/zh-CN/application.json | 75 - .../web-ele/src/locales/langs/zh-CN/chat.json | 91 - .../src/locales/langs/zh-CN/data-source.json | 283 -- .../locales/langs/zh-CN/database-manager.json | 396 --- .../web-ele/src/locales/langs/zh-CN/dict.json | 22 - .../src/locales/langs/zh-CN/form-manager.json | 810 ------ .../src/locales/langs/zh-CN/page-manager.json | 126 - .../locales/langs/zh-CN/report-manager.json | 437 --- .../locales/langs/zh-CN/system-config.json | 71 - .../src/locales/langs/zh-CN/ui-config.json | 172 -- .../src/locales/langs/zh-CN/workflow.json | 310 -- .../src/locales/langs/zh-TW/about.json | 15 - .../locales/langs/zh-TW/account-settings.json | 3 - .../src/locales/langs/zh-TW/ai-platform.json | 2509 ----------------- .../src/locales/langs/zh-TW/announcement.json | 73 - .../src/locales/langs/zh-TW/api-token.json | 37 - .../src/locales/langs/zh-TW/application.json | 75 - .../src/locales/langs/zh-TW/approval.json | 62 - .../locales/langs/zh-TW/authentication.json | 41 - .../web-ele/src/locales/langs/zh-TW/chat.json | 91 - .../src/locales/langs/zh-TW/common.json | 188 -- .../src/locales/langs/zh-TW/contract.json | 150 - .../locales/langs/zh-TW/dashboard-design.json | 894 ------ .../src/locales/langs/zh-TW/data-source.json | 283 -- .../langs/zh-TW/database-connection.json | 52 - .../locales/langs/zh-TW/database-manager.json | 399 --- .../locales/langs/zh-TW/database-monitor.json | 138 - .../src/locales/langs/zh-TW/demos.json | 48 - .../web-ele/src/locales/langs/zh-TW/dept.json | 41 - .../web-ele/src/locales/langs/zh-TW/dict.json | 22 - .../locales/langs/zh-TW/dingtalk-sync.json | 86 - .../langs/zh-TW/document-generator.json | 527 ---- .../locales/langs/zh-TW/electronic-seal.json | 60 - .../src/locales/langs/zh-TW/email.json | 125 - .../src/locales/langs/zh-TW/feishu-sync.json | 65 - .../src/locales/langs/zh-TW/file-manager.json | 42 - .../src/locales/langs/zh-TW/form-manager.json | 804 ------ .../src/locales/langs/zh-TW/loginLog.json | 69 - .../src/locales/langs/zh-TW/menu-title.json | 61 - .../web-ele/src/locales/langs/zh-TW/menu.json | 63 - .../src/locales/langs/zh-TW/message.json | 90 - .../src/locales/langs/zh-TW/org-chart.json | 10 - .../src/locales/langs/zh-TW/page-manager.json | 126 - .../web-ele/src/locales/langs/zh-TW/page.json | 14 - .../src/locales/langs/zh-TW/permission.json | 74 - .../web-ele/src/locales/langs/zh-TW/post.json | 34 - .../locales/langs/zh-TW/redis-manager.json | 73 - .../locales/langs/zh-TW/redis-monitor.json | 181 -- .../locales/langs/zh-TW/report-manager.json | 437 --- .../web-ele/src/locales/langs/zh-TW/role.json | 134 - .../src/locales/langs/zh-TW/scheduler.json | 119 - .../locales/langs/zh-TW/server-monitor.json | 167 -- .../locales/langs/zh-TW/system-config.json | 75 - .../src/locales/langs/zh-TW/system.json | 10 - .../src/locales/langs/zh-TW/ui-config.json | 172 -- .../web-ele/src/locales/langs/zh-TW/ui.json | 15 - .../src/locales/langs/zh-TW/user-avatar.json | 13 - .../web-ele/src/locales/langs/zh-TW/user.json | 68 - .../src/locales/langs/zh-TW/wecom-sync.json | 67 - .../src/locales/langs/zh-TW/workflow.json | 310 -- web/apps/web-ele/src/router/access.ts | 25 +- .../web-ele/src/router/routes/modules/chat.ts | 18 - .../src/router/routes/modules/demos.ts | 5 - web/apps/web-ele/src/utils/column-sql.ts | 592 ---- web/apps/web-ele/src/utils/constraint-sql.ts | 483 ---- web/apps/web-ele/src/utils/database-types.ts | 393 --- web/apps/web-ele/src/utils/index-sql.ts | 217 -- web/apps/web-ele/src/utils/legacy-home.ts | 2 - .../web-ele/src/views/_core/about/index.vue | 25 - .../account-settings/api-token-management.vue | 330 --- .../src/views/_core/account-settings/data.ts | 165 -- .../_core/account-settings/device-item.vue | 137 - .../account-settings/device-management.vue | 229 -- .../views/_core/account-settings/index.vue | 184 -- .../modules/password-form.vue | 168 -- .../account-settings/modules/profile-form.vue | 293 -- .../src/views/_core/agent-chat/index.vue | 2 +- .../_core/ai-confirmation-center/index.vue | 237 -- .../src/views/_core/application/index.vue | 514 ---- .../modules/application-form-modal.vue | 345 --- .../views/_core/authentication/code-login.vue | 5 +- .../_core/authentication/forget-password.vue | 5 +- .../src/views/_core/authentication/login.vue | 6 +- .../_core/authentication/qrcode-login.vue | 2 +- .../views/_core/authentication/register.vue | 5 +- .../_core/chat/components/AddMemberDialog.vue | 93 - .../views/_core/chat/components/ChatInput.vue | 762 ----- .../views/_core/chat/components/ChatToast.vue | 133 - .../_core/chat/components/ContactDetail.vue | 283 -- .../_core/chat/components/ContactList.vue | 333 --- .../chat/components/ConversationInfo.vue | 192 -- .../chat/components/ConversationList.vue | 373 --- .../chat/components/CreateGroupDialog.vue | 93 - .../_core/chat/components/EmojiPicker.vue | 370 --- .../_core/chat/components/MessageList.vue | 1276 --------- .../_core/chat/composables/chatStorage.ts | 442 --- .../views/_core/chat/composables/useChat.ts | 623 ---- .../chat/composables/useChatNotification.ts | 118 - .../_core/chat/composables/useChatSound.ts | 33 - .../chat/composables/useVoiceRecorder.ts | 130 - .../web-ele/src/views/_core/chat/index.vue | 591 ---- .../src/views/_core/data-source/data.ts | 166 -- web/apps/web-ele/src/views/_core/dept/data.ts | 77 - .../web-ele/src/views/_core/dept/index.vue | 159 -- .../_core/dept/modules/dept-form-modal.vue | 209 -- .../views/_core/dept/modules/dept-tree.vue | 501 ---- .../views/_core/dept/modules/user-form.vue | 72 - web/apps/web-ele/src/views/_core/dict/data.ts | 197 -- .../web-ele/src/views/_core/dict/index.vue | 39 - .../_core/dict/modules/dict-form-modal.vue | 99 - .../dict/modules/dict-item-form-modal.vue | 92 - .../_core/dict/modules/dict-item-list.vue | 683 ----- .../views/_core/dict/modules/dict-list.vue | 297 -- .../src/views/_core/fallback/coming-soon.vue | 2 +- .../src/views/_core/fallback/forbidden.vue | 2 +- .../views/_core/fallback/internal-error.vue | 2 +- .../src/views/_core/fallback/not-found.vue | 2 +- .../src/views/_core/fallback/offline.vue | 2 +- .../components/CreateFolderDialog.vue | 93 - .../file-manager/components/FileList.vue | 547 ---- .../file-manager/components/FileToolbar.vue | 296 -- .../file-manager/components/FolderTree.vue | 121 - .../file-manager/components/RenameDialog.vue | 99 - .../composables/useFileManager.ts | 129 - .../src/views/_core/file-manager/index.vue | 21 - .../src/views/_core/login-log/README.md | 216 -- .../web-ele/src/views/_core/login-log/data.ts | 233 -- .../src/views/_core/login-log/index.vue | 228 -- .../_core/login-log/modules/detail-drawer.vue | 180 -- .../web-ele/src/views/_core/menu/index.vue | 2 +- .../src/views/_core/org-chart/index.vue | 33 - .../_core/org-chart/modules/OrgChartPanel.vue | 344 --- .../views/_core/org-chart/modules/OrgNode.vue | 496 ---- .../views/_core/page-render/AiAgentHome.vue | 1108 +++++--- .../src/views/_core/permission/index.vue | 2 +- web/apps/web-ele/src/views/_core/post/data.ts | 187 -- .../web-ele/src/views/_core/post/index.vue | 160 -- .../_core/post/modules/post-form-modal.vue | 84 - .../views/_core/post/modules/post-list.vue | 291 -- .../web-ele/src/views/_core/role/index.vue | 2 +- .../src/views/_core/system-config/index.vue | 307 -- .../system-config/modules/config-form.vue | 206 -- .../modules/dingtalk-sync-form.vue | 838 ------ .../modules/feishu-sync-form.vue | 575 ---- .../modules/model-config-form.vue | 9 - .../system-config/modules/wecom-sync-form.vue | 562 ---- .../src/views/_core/ui-config/index.vue | 219 -- .../ui-config/modules/app-settings-form.vue | 623 ---- .../ui-config/modules/login-config-form.vue | 331 --- .../ui-config/modules/ui-preferences-form.vue | 664 ----- .../web-ele/src/views/_core/user/index.vue | 2 +- .../src/views/ai-platform/agent/index.vue | 2 +- .../ai-platform/knowledge/detail/index.vue | 2 +- .../src/views/ai-platform/knowledge/index.vue | 2 +- .../src/views/ai-platform/model/index.vue | 2 +- .../ai-platform/model/model-config-form.vue | 138 +- .../views/ai-platform/workflow-runs/index.vue | 2 +- .../editor/components/ConfirmModeSelect.vue | 121 - .../editor/components/DbConfigSummary.vue | 40 - .../editor/components/DbConnectionSelect.vue | 107 - .../editor/components/DbDatabaseSelect.vue | 118 - .../components/DbNodeConnectionBadge.vue | 36 - .../editor/components/TableSelectDialog.vue | 577 ---- .../editor/components/TableSelectModal.vue | 1297 --------- .../workflow/editor/nodes/AppCreateNode.vue | 59 - .../workflow/editor/nodes/AppDesignNode.vue | 57 - .../workflow/editor/nodes/AppSettingsNode.vue | 69 - .../workflow/editor/nodes/AppUpdateNode.vue | 57 - .../editor/nodes/DashboardBasicInfoNode.vue | 58 - .../editor/nodes/DashboardCreateNode.vue | 65 - .../editor/nodes/DashboardDesignNode.vue | 55 - .../editor/nodes/DashboardPublishNode.vue | 57 - .../workflow/editor/nodes/DbDeleteNode.vue | 68 - .../workflow/editor/nodes/DbInsertNode.vue | 85 - .../workflow/editor/nodes/DbQueryNode.vue | 81 - .../workflow/editor/nodes/DbSqlNode.vue | 61 - .../workflow/editor/nodes/DbUpdateNode.vue | 93 - .../editor/nodes/FormBasicInfoNode.vue | 75 - .../workflow/editor/nodes/FormCreateNode.vue | 51 - .../workflow/editor/nodes/FormDataNode.vue | 189 -- .../editor/nodes/FormDatabaseCreateNode.vue | 74 - .../editor/nodes/FormDatabaseDesignNode.vue | 80 - .../editor/nodes/FormListDesignNode.vue | 86 - .../workflow/editor/nodes/FormPublishNode.vue | 56 - .../editor/nodes/FormUIDesignNode.vue | 89 - .../nodes/SnowflakeCortexAnalystNode.vue | 77 - .../editor/nodes/SnowflakeCortexLLMNode.vue | 114 - .../editor/nodes/SystemSummaryNode.vue | 80 - .../workflow/editor/nodes/TextToSqlNode.vue | 62 - .../workflow/editor/panels/AppCreatePanel.vue | 189 -- .../workflow/editor/panels/AppDesignPanel.vue | 114 - .../editor/panels/AppSettingsPanel.vue | 196 -- .../workflow/editor/panels/AppUpdatePanel.vue | 103 - .../editor/panels/DashboardBasicInfoPanel.vue | 164 -- .../editor/panels/DashboardCreatePanel.vue | 135 - .../editor/panels/DashboardDesignPanel.vue | 119 - .../editor/panels/DashboardPublishPanel.vue | 165 -- .../workflow/editor/panels/DbDeletePanel.vue | 239 -- .../workflow/editor/panels/DbInsertPanel.vue | 365 --- .../workflow/editor/panels/DbQueryPanel.vue | 275 -- .../workflow/editor/panels/DbSqlPanel.vue | 363 --- .../workflow/editor/panels/DbUpdatePanel.vue | 353 --- .../editor/panels/FormBasicInfoPanel.vue | 206 -- .../editor/panels/FormCreatePanel.vue | 228 -- .../workflow/editor/panels/FormDataPanel.vue | 308 -- .../editor/panels/FormDatabaseCreatePanel.vue | 206 -- .../editor/panels/FormDatabaseDesignPanel.vue | 360 --- .../editor/panels/FormListDesignPanel.vue | 286 -- .../editor/panels/FormPublishPanel.vue | 132 - .../editor/panels/FormUIDesignPanel.vue | 248 -- .../panels/SnowflakeCortexAnalystPanel.vue | 432 --- .../editor/panels/SnowflakeCortexLLMPanel.vue | 711 ----- .../editor/panels/SystemSummaryPanel.vue | 214 -- .../workflow/editor/panels/TextToSqlPanel.vue | 331 --- .../src/views/ai-platform/workflow/index.vue | 2 +- web/apps/web-ele/vite.config.mts | 32 + .../common-ui/src/ui/authentication/login.vue | 80 +- .../layouts/src/basic/header/header.vue | 63 +- 316 files changed, 898 insertions(+), 60944 deletions(-) delete mode 100644 web/apps/web-ele/src/components/dashboard-design/DashboardRenderer.vue delete mode 100644 web/apps/web-ele/src/components/dashboard-design/components/WidgetRenderer.vue delete mode 100644 web/apps/web-ele/src/components/dashboard-design/components/widgets/AnnouncementList.vue delete mode 100644 web/apps/web-ele/src/components/dashboard-design/components/widgets/ApprovalCenter.vue delete mode 100644 web/apps/web-ele/src/components/dashboard-design/components/widgets/CalendarWidget.vue delete mode 100644 web/apps/web-ele/src/components/dashboard-design/components/widgets/ClockWidget.vue delete mode 100644 web/apps/web-ele/src/components/dashboard-design/components/widgets/CountdownWidget.vue delete mode 100644 web/apps/web-ele/src/components/dashboard-design/components/widgets/DataTable.vue delete mode 100644 web/apps/web-ele/src/components/dashboard-design/components/widgets/FilterDate.vue delete mode 100644 web/apps/web-ele/src/components/dashboard-design/components/widgets/FilterDateRange.vue delete mode 100644 web/apps/web-ele/src/components/dashboard-design/components/widgets/FilterInput.vue delete mode 100644 web/apps/web-ele/src/components/dashboard-design/components/widgets/FilterSelect.vue delete mode 100644 web/apps/web-ele/src/components/dashboard-design/components/widgets/IframeWidget.vue delete mode 100644 web/apps/web-ele/src/components/dashboard-design/components/widgets/ImageCarousel.vue delete mode 100644 web/apps/web-ele/src/components/dashboard-design/components/widgets/ImageWidget.vue delete mode 100644 web/apps/web-ele/src/components/dashboard-design/components/widgets/MyApps.vue delete mode 100644 web/apps/web-ele/src/components/dashboard-design/components/widgets/NoticeList.vue delete mode 100644 web/apps/web-ele/src/components/dashboard-design/components/widgets/ProgressCard.vue delete mode 100644 web/apps/web-ele/src/components/dashboard-design/components/widgets/QuickLinks.vue delete mode 100644 web/apps/web-ele/src/components/dashboard-design/components/widgets/RankingList.vue delete mode 100644 web/apps/web-ele/src/components/dashboard-design/components/widgets/ServerMonitor.vue delete mode 100644 web/apps/web-ele/src/components/dashboard-design/components/widgets/StatCard.vue delete mode 100644 web/apps/web-ele/src/components/dashboard-design/components/widgets/TodoList.vue delete mode 100644 web/apps/web-ele/src/components/dashboard-design/components/widgets/VideoPlayer.vue delete mode 100644 web/apps/web-ele/src/components/dashboard-design/components/widgets/WeatherWidget.vue delete mode 100644 web/apps/web-ele/src/components/dashboard-design/components/widgets/WelcomeCard.vue delete mode 100644 web/apps/web-ele/src/components/dashboard-design/index.ts delete mode 100644 web/apps/web-ele/src/components/dashboard-design/runtime.ts delete mode 100644 web/apps/web-ele/src/components/dashboard-design/types.ts delete mode 100644 web/apps/web-ele/src/components/dashboard-design/utils/dataFetcher.ts delete mode 100644 web/apps/web-ele/src/components/form-editor/AppDesignPanel.vue delete mode 100644 web/apps/web-ele/src/components/form-editor/AppSettingsPanel.vue delete mode 100644 web/apps/web-ele/src/components/form-editor/BasicInfoEditor.vue delete mode 100644 web/apps/web-ele/src/components/form-editor/DashboardBasicInfoConfirmPanel.vue delete mode 100644 web/apps/web-ele/src/components/form-editor/DashboardDesignConfirmPanel.vue delete mode 100644 web/apps/web-ele/src/components/form-editor/DashboardPublishConfirmPanel.vue delete mode 100644 web/apps/web-ele/src/components/form-editor/DesignEditorPanel.vue delete mode 100644 web/apps/web-ele/src/components/form-editor/FormEditorContent.vue delete mode 100644 web/apps/web-ele/src/components/form-editor/PageBasicInfoEditor.vue delete mode 100644 web/apps/web-ele/src/components/form-editor/PageEditorContent.vue delete mode 100644 web/apps/web-ele/src/components/form-editor/PagePublishInfoEditor.vue delete mode 100644 web/apps/web-ele/src/components/form-editor/PublishInfoEditor.vue delete mode 100644 web/apps/web-ele/src/components/form-editor/SystemSummaryConfirmPanel.vue delete mode 100644 web/apps/web-ele/src/components/form-editor/index.ts delete mode 100644 web/apps/web-ele/src/components/user-avatar/UserProfileDialog.vue delete mode 100644 web/apps/web-ele/src/locales/langs/en-US/about.json delete mode 100644 web/apps/web-ele/src/locales/langs/en-US/account-settings.json delete mode 100644 web/apps/web-ele/src/locales/langs/en-US/ai-platform.json delete mode 100644 web/apps/web-ele/src/locales/langs/en-US/announcement.json delete mode 100644 web/apps/web-ele/src/locales/langs/en-US/api-token.json delete mode 100644 web/apps/web-ele/src/locales/langs/en-US/application.json delete mode 100644 web/apps/web-ele/src/locales/langs/en-US/approval.json delete mode 100644 web/apps/web-ele/src/locales/langs/en-US/authentication.json delete mode 100644 web/apps/web-ele/src/locales/langs/en-US/chat.json delete mode 100644 web/apps/web-ele/src/locales/langs/en-US/common.json delete mode 100644 web/apps/web-ele/src/locales/langs/en-US/contract.json delete mode 100644 web/apps/web-ele/src/locales/langs/en-US/core.json delete mode 100644 web/apps/web-ele/src/locales/langs/en-US/dashboard-design.json delete mode 100644 web/apps/web-ele/src/locales/langs/en-US/data-source.json delete mode 100644 web/apps/web-ele/src/locales/langs/en-US/database-connection.json delete mode 100644 web/apps/web-ele/src/locales/langs/en-US/database-manager.json delete mode 100644 web/apps/web-ele/src/locales/langs/en-US/database-monitor.json delete mode 100644 web/apps/web-ele/src/locales/langs/en-US/demos.json delete mode 100644 web/apps/web-ele/src/locales/langs/en-US/dept.json delete mode 100644 web/apps/web-ele/src/locales/langs/en-US/dict.json delete mode 100644 web/apps/web-ele/src/locales/langs/en-US/dingtalk-sync.json delete mode 100644 web/apps/web-ele/src/locales/langs/en-US/document-generator.json delete mode 100644 web/apps/web-ele/src/locales/langs/en-US/electronic-seal.json delete mode 100644 web/apps/web-ele/src/locales/langs/en-US/feishu-sync.json delete mode 100644 web/apps/web-ele/src/locales/langs/en-US/file-manager.json delete mode 100644 web/apps/web-ele/src/locales/langs/en-US/form-manager.json delete mode 100644 web/apps/web-ele/src/locales/langs/en-US/loginLog.json delete mode 100644 web/apps/web-ele/src/locales/langs/en-US/menu-title.json delete mode 100644 web/apps/web-ele/src/locales/langs/en-US/menu.json delete mode 100644 web/apps/web-ele/src/locales/langs/en-US/message.json delete mode 100644 web/apps/web-ele/src/locales/langs/en-US/org-chart.json delete mode 100644 web/apps/web-ele/src/locales/langs/en-US/page-manager.json delete mode 100644 web/apps/web-ele/src/locales/langs/en-US/page.json delete mode 100644 web/apps/web-ele/src/locales/langs/en-US/permission.json delete mode 100644 web/apps/web-ele/src/locales/langs/en-US/post.json delete mode 100644 web/apps/web-ele/src/locales/langs/en-US/redis-manager.json delete mode 100644 web/apps/web-ele/src/locales/langs/en-US/redis-monitor.json delete mode 100644 web/apps/web-ele/src/locales/langs/en-US/report-manager.json delete mode 100644 web/apps/web-ele/src/locales/langs/en-US/role.json delete mode 100644 web/apps/web-ele/src/locales/langs/en-US/scheduler.json delete mode 100644 web/apps/web-ele/src/locales/langs/en-US/server-monitor.json delete mode 100644 web/apps/web-ele/src/locales/langs/en-US/system-config.json delete mode 100644 web/apps/web-ele/src/locales/langs/en-US/system.json delete mode 100644 web/apps/web-ele/src/locales/langs/en-US/ui-config.json delete mode 100644 web/apps/web-ele/src/locales/langs/en-US/ui.json delete mode 100644 web/apps/web-ele/src/locales/langs/en-US/user-avatar.json delete mode 100644 web/apps/web-ele/src/locales/langs/en-US/user.json delete mode 100644 web/apps/web-ele/src/locales/langs/en-US/wecom-sync.json delete mode 100644 web/apps/web-ele/src/locales/langs/en-US/workflow.json delete mode 100644 web/apps/web-ele/src/locales/langs/zh-CN/account-settings.json delete mode 100644 web/apps/web-ele/src/locales/langs/zh-CN/application.json delete mode 100644 web/apps/web-ele/src/locales/langs/zh-CN/chat.json delete mode 100644 web/apps/web-ele/src/locales/langs/zh-CN/data-source.json delete mode 100644 web/apps/web-ele/src/locales/langs/zh-CN/database-manager.json delete mode 100644 web/apps/web-ele/src/locales/langs/zh-CN/dict.json delete mode 100644 web/apps/web-ele/src/locales/langs/zh-CN/form-manager.json delete mode 100644 web/apps/web-ele/src/locales/langs/zh-CN/page-manager.json delete mode 100644 web/apps/web-ele/src/locales/langs/zh-CN/report-manager.json delete mode 100644 web/apps/web-ele/src/locales/langs/zh-CN/system-config.json delete mode 100644 web/apps/web-ele/src/locales/langs/zh-CN/ui-config.json delete mode 100644 web/apps/web-ele/src/locales/langs/zh-CN/workflow.json delete mode 100644 web/apps/web-ele/src/locales/langs/zh-TW/about.json delete mode 100644 web/apps/web-ele/src/locales/langs/zh-TW/account-settings.json delete mode 100644 web/apps/web-ele/src/locales/langs/zh-TW/ai-platform.json delete mode 100644 web/apps/web-ele/src/locales/langs/zh-TW/announcement.json delete mode 100644 web/apps/web-ele/src/locales/langs/zh-TW/api-token.json delete mode 100644 web/apps/web-ele/src/locales/langs/zh-TW/application.json delete mode 100644 web/apps/web-ele/src/locales/langs/zh-TW/approval.json delete mode 100644 web/apps/web-ele/src/locales/langs/zh-TW/authentication.json delete mode 100644 web/apps/web-ele/src/locales/langs/zh-TW/chat.json delete mode 100644 web/apps/web-ele/src/locales/langs/zh-TW/common.json delete mode 100644 web/apps/web-ele/src/locales/langs/zh-TW/contract.json delete mode 100644 web/apps/web-ele/src/locales/langs/zh-TW/dashboard-design.json delete mode 100644 web/apps/web-ele/src/locales/langs/zh-TW/data-source.json delete mode 100644 web/apps/web-ele/src/locales/langs/zh-TW/database-connection.json delete mode 100644 web/apps/web-ele/src/locales/langs/zh-TW/database-manager.json delete mode 100644 web/apps/web-ele/src/locales/langs/zh-TW/database-monitor.json delete mode 100644 web/apps/web-ele/src/locales/langs/zh-TW/demos.json delete mode 100644 web/apps/web-ele/src/locales/langs/zh-TW/dept.json delete mode 100644 web/apps/web-ele/src/locales/langs/zh-TW/dict.json delete mode 100644 web/apps/web-ele/src/locales/langs/zh-TW/dingtalk-sync.json delete mode 100644 web/apps/web-ele/src/locales/langs/zh-TW/document-generator.json delete mode 100644 web/apps/web-ele/src/locales/langs/zh-TW/electronic-seal.json delete mode 100644 web/apps/web-ele/src/locales/langs/zh-TW/email.json delete mode 100644 web/apps/web-ele/src/locales/langs/zh-TW/feishu-sync.json delete mode 100644 web/apps/web-ele/src/locales/langs/zh-TW/file-manager.json delete mode 100644 web/apps/web-ele/src/locales/langs/zh-TW/form-manager.json delete mode 100644 web/apps/web-ele/src/locales/langs/zh-TW/loginLog.json delete mode 100644 web/apps/web-ele/src/locales/langs/zh-TW/menu-title.json delete mode 100644 web/apps/web-ele/src/locales/langs/zh-TW/menu.json delete mode 100644 web/apps/web-ele/src/locales/langs/zh-TW/message.json delete mode 100644 web/apps/web-ele/src/locales/langs/zh-TW/org-chart.json delete mode 100644 web/apps/web-ele/src/locales/langs/zh-TW/page-manager.json delete mode 100644 web/apps/web-ele/src/locales/langs/zh-TW/page.json delete mode 100644 web/apps/web-ele/src/locales/langs/zh-TW/permission.json delete mode 100644 web/apps/web-ele/src/locales/langs/zh-TW/post.json delete mode 100644 web/apps/web-ele/src/locales/langs/zh-TW/redis-manager.json delete mode 100644 web/apps/web-ele/src/locales/langs/zh-TW/redis-monitor.json delete mode 100644 web/apps/web-ele/src/locales/langs/zh-TW/report-manager.json delete mode 100644 web/apps/web-ele/src/locales/langs/zh-TW/role.json delete mode 100644 web/apps/web-ele/src/locales/langs/zh-TW/scheduler.json delete mode 100644 web/apps/web-ele/src/locales/langs/zh-TW/server-monitor.json delete mode 100644 web/apps/web-ele/src/locales/langs/zh-TW/system-config.json delete mode 100644 web/apps/web-ele/src/locales/langs/zh-TW/system.json delete mode 100644 web/apps/web-ele/src/locales/langs/zh-TW/ui-config.json delete mode 100644 web/apps/web-ele/src/locales/langs/zh-TW/ui.json delete mode 100644 web/apps/web-ele/src/locales/langs/zh-TW/user-avatar.json delete mode 100644 web/apps/web-ele/src/locales/langs/zh-TW/user.json delete mode 100644 web/apps/web-ele/src/locales/langs/zh-TW/wecom-sync.json delete mode 100644 web/apps/web-ele/src/locales/langs/zh-TW/workflow.json delete mode 100644 web/apps/web-ele/src/router/routes/modules/chat.ts delete mode 100644 web/apps/web-ele/src/router/routes/modules/demos.ts delete mode 100644 web/apps/web-ele/src/utils/column-sql.ts delete mode 100644 web/apps/web-ele/src/utils/constraint-sql.ts delete mode 100644 web/apps/web-ele/src/utils/database-types.ts delete mode 100644 web/apps/web-ele/src/utils/index-sql.ts delete mode 100644 web/apps/web-ele/src/views/_core/about/index.vue delete mode 100644 web/apps/web-ele/src/views/_core/account-settings/api-token-management.vue delete mode 100644 web/apps/web-ele/src/views/_core/account-settings/data.ts delete mode 100644 web/apps/web-ele/src/views/_core/account-settings/device-item.vue delete mode 100644 web/apps/web-ele/src/views/_core/account-settings/device-management.vue delete mode 100644 web/apps/web-ele/src/views/_core/account-settings/index.vue delete mode 100644 web/apps/web-ele/src/views/_core/account-settings/modules/password-form.vue delete mode 100644 web/apps/web-ele/src/views/_core/account-settings/modules/profile-form.vue delete mode 100644 web/apps/web-ele/src/views/_core/ai-confirmation-center/index.vue delete mode 100644 web/apps/web-ele/src/views/_core/application/index.vue delete mode 100644 web/apps/web-ele/src/views/_core/application/modules/application-form-modal.vue delete mode 100644 web/apps/web-ele/src/views/_core/chat/components/AddMemberDialog.vue delete mode 100644 web/apps/web-ele/src/views/_core/chat/components/ChatInput.vue delete mode 100644 web/apps/web-ele/src/views/_core/chat/components/ChatToast.vue delete mode 100644 web/apps/web-ele/src/views/_core/chat/components/ContactDetail.vue delete mode 100644 web/apps/web-ele/src/views/_core/chat/components/ContactList.vue delete mode 100644 web/apps/web-ele/src/views/_core/chat/components/ConversationInfo.vue delete mode 100644 web/apps/web-ele/src/views/_core/chat/components/ConversationList.vue delete mode 100644 web/apps/web-ele/src/views/_core/chat/components/CreateGroupDialog.vue delete mode 100644 web/apps/web-ele/src/views/_core/chat/components/EmojiPicker.vue delete mode 100644 web/apps/web-ele/src/views/_core/chat/components/MessageList.vue delete mode 100644 web/apps/web-ele/src/views/_core/chat/composables/chatStorage.ts delete mode 100644 web/apps/web-ele/src/views/_core/chat/composables/useChat.ts delete mode 100644 web/apps/web-ele/src/views/_core/chat/composables/useChatNotification.ts delete mode 100644 web/apps/web-ele/src/views/_core/chat/composables/useChatSound.ts delete mode 100644 web/apps/web-ele/src/views/_core/chat/composables/useVoiceRecorder.ts delete mode 100644 web/apps/web-ele/src/views/_core/chat/index.vue delete mode 100644 web/apps/web-ele/src/views/_core/data-source/data.ts delete mode 100644 web/apps/web-ele/src/views/_core/dept/data.ts delete mode 100644 web/apps/web-ele/src/views/_core/dept/index.vue delete mode 100644 web/apps/web-ele/src/views/_core/dept/modules/dept-form-modal.vue delete mode 100644 web/apps/web-ele/src/views/_core/dept/modules/dept-tree.vue delete mode 100644 web/apps/web-ele/src/views/_core/dept/modules/user-form.vue delete mode 100644 web/apps/web-ele/src/views/_core/dict/data.ts delete mode 100644 web/apps/web-ele/src/views/_core/dict/index.vue delete mode 100644 web/apps/web-ele/src/views/_core/dict/modules/dict-form-modal.vue delete mode 100644 web/apps/web-ele/src/views/_core/dict/modules/dict-item-form-modal.vue delete mode 100644 web/apps/web-ele/src/views/_core/dict/modules/dict-item-list.vue delete mode 100644 web/apps/web-ele/src/views/_core/dict/modules/dict-list.vue delete mode 100644 web/apps/web-ele/src/views/_core/file-manager/components/CreateFolderDialog.vue delete mode 100644 web/apps/web-ele/src/views/_core/file-manager/components/FileList.vue delete mode 100644 web/apps/web-ele/src/views/_core/file-manager/components/FileToolbar.vue delete mode 100644 web/apps/web-ele/src/views/_core/file-manager/components/FolderTree.vue delete mode 100644 web/apps/web-ele/src/views/_core/file-manager/components/RenameDialog.vue delete mode 100644 web/apps/web-ele/src/views/_core/file-manager/composables/useFileManager.ts delete mode 100644 web/apps/web-ele/src/views/_core/file-manager/index.vue delete mode 100644 web/apps/web-ele/src/views/_core/login-log/README.md delete mode 100644 web/apps/web-ele/src/views/_core/login-log/data.ts delete mode 100644 web/apps/web-ele/src/views/_core/login-log/index.vue delete mode 100644 web/apps/web-ele/src/views/_core/login-log/modules/detail-drawer.vue delete mode 100644 web/apps/web-ele/src/views/_core/org-chart/index.vue delete mode 100644 web/apps/web-ele/src/views/_core/org-chart/modules/OrgChartPanel.vue delete mode 100644 web/apps/web-ele/src/views/_core/org-chart/modules/OrgNode.vue delete mode 100644 web/apps/web-ele/src/views/_core/post/data.ts delete mode 100644 web/apps/web-ele/src/views/_core/post/index.vue delete mode 100644 web/apps/web-ele/src/views/_core/post/modules/post-form-modal.vue delete mode 100644 web/apps/web-ele/src/views/_core/post/modules/post-list.vue delete mode 100644 web/apps/web-ele/src/views/_core/system-config/index.vue delete mode 100644 web/apps/web-ele/src/views/_core/system-config/modules/config-form.vue delete mode 100644 web/apps/web-ele/src/views/_core/system-config/modules/dingtalk-sync-form.vue delete mode 100644 web/apps/web-ele/src/views/_core/system-config/modules/feishu-sync-form.vue delete mode 100644 web/apps/web-ele/src/views/_core/system-config/modules/model-config-form.vue delete mode 100644 web/apps/web-ele/src/views/_core/system-config/modules/wecom-sync-form.vue delete mode 100644 web/apps/web-ele/src/views/_core/ui-config/index.vue delete mode 100644 web/apps/web-ele/src/views/_core/ui-config/modules/app-settings-form.vue delete mode 100644 web/apps/web-ele/src/views/_core/ui-config/modules/login-config-form.vue delete mode 100644 web/apps/web-ele/src/views/_core/ui-config/modules/ui-preferences-form.vue delete mode 100644 web/apps/web-ele/src/views/ai-platform/workflow/editor/components/ConfirmModeSelect.vue delete mode 100644 web/apps/web-ele/src/views/ai-platform/workflow/editor/components/DbConfigSummary.vue delete mode 100644 web/apps/web-ele/src/views/ai-platform/workflow/editor/components/DbConnectionSelect.vue delete mode 100644 web/apps/web-ele/src/views/ai-platform/workflow/editor/components/DbDatabaseSelect.vue delete mode 100644 web/apps/web-ele/src/views/ai-platform/workflow/editor/components/DbNodeConnectionBadge.vue delete mode 100644 web/apps/web-ele/src/views/ai-platform/workflow/editor/components/TableSelectDialog.vue delete mode 100644 web/apps/web-ele/src/views/ai-platform/workflow/editor/components/TableSelectModal.vue delete mode 100644 web/apps/web-ele/src/views/ai-platform/workflow/editor/nodes/AppCreateNode.vue delete mode 100644 web/apps/web-ele/src/views/ai-platform/workflow/editor/nodes/AppDesignNode.vue delete mode 100644 web/apps/web-ele/src/views/ai-platform/workflow/editor/nodes/AppSettingsNode.vue delete mode 100644 web/apps/web-ele/src/views/ai-platform/workflow/editor/nodes/AppUpdateNode.vue delete mode 100644 web/apps/web-ele/src/views/ai-platform/workflow/editor/nodes/DashboardBasicInfoNode.vue delete mode 100644 web/apps/web-ele/src/views/ai-platform/workflow/editor/nodes/DashboardCreateNode.vue delete mode 100644 web/apps/web-ele/src/views/ai-platform/workflow/editor/nodes/DashboardDesignNode.vue delete mode 100644 web/apps/web-ele/src/views/ai-platform/workflow/editor/nodes/DashboardPublishNode.vue delete mode 100644 web/apps/web-ele/src/views/ai-platform/workflow/editor/nodes/DbDeleteNode.vue delete mode 100644 web/apps/web-ele/src/views/ai-platform/workflow/editor/nodes/DbInsertNode.vue delete mode 100644 web/apps/web-ele/src/views/ai-platform/workflow/editor/nodes/DbQueryNode.vue delete mode 100644 web/apps/web-ele/src/views/ai-platform/workflow/editor/nodes/DbSqlNode.vue delete mode 100644 web/apps/web-ele/src/views/ai-platform/workflow/editor/nodes/DbUpdateNode.vue delete mode 100644 web/apps/web-ele/src/views/ai-platform/workflow/editor/nodes/FormBasicInfoNode.vue delete mode 100644 web/apps/web-ele/src/views/ai-platform/workflow/editor/nodes/FormCreateNode.vue delete mode 100644 web/apps/web-ele/src/views/ai-platform/workflow/editor/nodes/FormDataNode.vue delete mode 100644 web/apps/web-ele/src/views/ai-platform/workflow/editor/nodes/FormDatabaseCreateNode.vue delete mode 100644 web/apps/web-ele/src/views/ai-platform/workflow/editor/nodes/FormDatabaseDesignNode.vue delete mode 100644 web/apps/web-ele/src/views/ai-platform/workflow/editor/nodes/FormListDesignNode.vue delete mode 100644 web/apps/web-ele/src/views/ai-platform/workflow/editor/nodes/FormPublishNode.vue delete mode 100644 web/apps/web-ele/src/views/ai-platform/workflow/editor/nodes/FormUIDesignNode.vue delete mode 100644 web/apps/web-ele/src/views/ai-platform/workflow/editor/nodes/SnowflakeCortexAnalystNode.vue delete mode 100644 web/apps/web-ele/src/views/ai-platform/workflow/editor/nodes/SnowflakeCortexLLMNode.vue delete mode 100644 web/apps/web-ele/src/views/ai-platform/workflow/editor/nodes/SystemSummaryNode.vue delete mode 100644 web/apps/web-ele/src/views/ai-platform/workflow/editor/nodes/TextToSqlNode.vue delete mode 100644 web/apps/web-ele/src/views/ai-platform/workflow/editor/panels/AppCreatePanel.vue delete mode 100644 web/apps/web-ele/src/views/ai-platform/workflow/editor/panels/AppDesignPanel.vue delete mode 100644 web/apps/web-ele/src/views/ai-platform/workflow/editor/panels/AppSettingsPanel.vue delete mode 100644 web/apps/web-ele/src/views/ai-platform/workflow/editor/panels/AppUpdatePanel.vue delete mode 100644 web/apps/web-ele/src/views/ai-platform/workflow/editor/panels/DashboardBasicInfoPanel.vue delete mode 100644 web/apps/web-ele/src/views/ai-platform/workflow/editor/panels/DashboardCreatePanel.vue delete mode 100644 web/apps/web-ele/src/views/ai-platform/workflow/editor/panels/DashboardDesignPanel.vue delete mode 100644 web/apps/web-ele/src/views/ai-platform/workflow/editor/panels/DashboardPublishPanel.vue delete mode 100644 web/apps/web-ele/src/views/ai-platform/workflow/editor/panels/DbDeletePanel.vue delete mode 100644 web/apps/web-ele/src/views/ai-platform/workflow/editor/panels/DbInsertPanel.vue delete mode 100644 web/apps/web-ele/src/views/ai-platform/workflow/editor/panels/DbQueryPanel.vue delete mode 100644 web/apps/web-ele/src/views/ai-platform/workflow/editor/panels/DbSqlPanel.vue delete mode 100644 web/apps/web-ele/src/views/ai-platform/workflow/editor/panels/DbUpdatePanel.vue delete mode 100644 web/apps/web-ele/src/views/ai-platform/workflow/editor/panels/FormBasicInfoPanel.vue delete mode 100644 web/apps/web-ele/src/views/ai-platform/workflow/editor/panels/FormCreatePanel.vue delete mode 100644 web/apps/web-ele/src/views/ai-platform/workflow/editor/panels/FormDataPanel.vue delete mode 100644 web/apps/web-ele/src/views/ai-platform/workflow/editor/panels/FormDatabaseCreatePanel.vue delete mode 100644 web/apps/web-ele/src/views/ai-platform/workflow/editor/panels/FormDatabaseDesignPanel.vue delete mode 100644 web/apps/web-ele/src/views/ai-platform/workflow/editor/panels/FormListDesignPanel.vue delete mode 100644 web/apps/web-ele/src/views/ai-platform/workflow/editor/panels/FormPublishPanel.vue delete mode 100644 web/apps/web-ele/src/views/ai-platform/workflow/editor/panels/FormUIDesignPanel.vue delete mode 100644 web/apps/web-ele/src/views/ai-platform/workflow/editor/panels/SnowflakeCortexAnalystPanel.vue delete mode 100644 web/apps/web-ele/src/views/ai-platform/workflow/editor/panels/SnowflakeCortexLLMPanel.vue delete mode 100644 web/apps/web-ele/src/views/ai-platform/workflow/editor/panels/SystemSummaryPanel.vue delete mode 100644 web/apps/web-ele/src/views/ai-platform/workflow/editor/panels/TextToSqlPanel.vue diff --git a/.gitignore b/.gitignore index 96f653b..a76bbf7 100644 --- a/.gitignore +++ b/.gitignore @@ -16,6 +16,7 @@ coverage ./web/.cache ./web/.turbo ./web/.temp +/.context ./web/dev-dist ./web/.stylelintcache ./web/yarn.lock diff --git a/web/apps/web-ele/src/api/core/index.ts b/web/apps/web-ele/src/api/core/index.ts index 039cf33..fcdbe2a 100644 --- a/web/apps/web-ele/src/api/core/index.ts +++ b/web/apps/web-ele/src/api/core/index.ts @@ -1,26 +1,18 @@ export * from './announcement'; -export * from './api-token'; export * from './application'; export * from './auth'; -export * from './data-source'; -export * from './database-connection'; -export * from './database-manager'; export * from './dept'; -export * from './device'; export * from './dict'; export * from './file'; export * from './field-permission'; export * from './menu'; export * from './message'; -export * from './org-chart'; export * from './oauth'; export * from './permission'; export * from './post'; export * from './role'; export * from './resource-scope'; -export * from './system-config'; export * from './server-health'; -export * from './server-monitor'; export * from './ui-config'; export * from './user'; export * from './websocket'; diff --git a/web/apps/web-ele/src/components/dashboard-design/DashboardRenderer.vue b/web/apps/web-ele/src/components/dashboard-design/DashboardRenderer.vue deleted file mode 100644 index 9781359..0000000 --- a/web/apps/web-ele/src/components/dashboard-design/DashboardRenderer.vue +++ /dev/null @@ -1,143 +0,0 @@ - - - - - diff --git a/web/apps/web-ele/src/components/dashboard-design/components/WidgetRenderer.vue b/web/apps/web-ele/src/components/dashboard-design/components/WidgetRenderer.vue deleted file mode 100644 index 94b0cf2..0000000 --- a/web/apps/web-ele/src/components/dashboard-design/components/WidgetRenderer.vue +++ /dev/null @@ -1,319 +0,0 @@ - - - - - diff --git a/web/apps/web-ele/src/components/dashboard-design/components/widgets/AnnouncementList.vue b/web/apps/web-ele/src/components/dashboard-design/components/widgets/AnnouncementList.vue deleted file mode 100644 index ce131ad..0000000 --- a/web/apps/web-ele/src/components/dashboard-design/components/widgets/AnnouncementList.vue +++ /dev/null @@ -1,298 +0,0 @@ - - - - - diff --git a/web/apps/web-ele/src/components/dashboard-design/components/widgets/ApprovalCenter.vue b/web/apps/web-ele/src/components/dashboard-design/components/widgets/ApprovalCenter.vue deleted file mode 100644 index 65c5c48..0000000 --- a/web/apps/web-ele/src/components/dashboard-design/components/widgets/ApprovalCenter.vue +++ /dev/null @@ -1,118 +0,0 @@ - - - diff --git a/web/apps/web-ele/src/components/dashboard-design/components/widgets/CalendarWidget.vue b/web/apps/web-ele/src/components/dashboard-design/components/widgets/CalendarWidget.vue deleted file mode 100644 index 6568876..0000000 --- a/web/apps/web-ele/src/components/dashboard-design/components/widgets/CalendarWidget.vue +++ /dev/null @@ -1,71 +0,0 @@ - - - - - diff --git a/web/apps/web-ele/src/components/dashboard-design/components/widgets/ClockWidget.vue b/web/apps/web-ele/src/components/dashboard-design/components/widgets/ClockWidget.vue deleted file mode 100644 index e08e428..0000000 --- a/web/apps/web-ele/src/components/dashboard-design/components/widgets/ClockWidget.vue +++ /dev/null @@ -1,125 +0,0 @@ - - - - - diff --git a/web/apps/web-ele/src/components/dashboard-design/components/widgets/CountdownWidget.vue b/web/apps/web-ele/src/components/dashboard-design/components/widgets/CountdownWidget.vue deleted file mode 100644 index e6fb606..0000000 --- a/web/apps/web-ele/src/components/dashboard-design/components/widgets/CountdownWidget.vue +++ /dev/null @@ -1,155 +0,0 @@ - - - - - diff --git a/web/apps/web-ele/src/components/dashboard-design/components/widgets/DataTable.vue b/web/apps/web-ele/src/components/dashboard-design/components/widgets/DataTable.vue deleted file mode 100644 index 78c755e..0000000 --- a/web/apps/web-ele/src/components/dashboard-design/components/widgets/DataTable.vue +++ /dev/null @@ -1,285 +0,0 @@ - - - - - diff --git a/web/apps/web-ele/src/components/dashboard-design/components/widgets/FilterDate.vue b/web/apps/web-ele/src/components/dashboard-design/components/widgets/FilterDate.vue deleted file mode 100644 index d54a381..0000000 --- a/web/apps/web-ele/src/components/dashboard-design/components/widgets/FilterDate.vue +++ /dev/null @@ -1,127 +0,0 @@ - - - - - diff --git a/web/apps/web-ele/src/components/dashboard-design/components/widgets/FilterDateRange.vue b/web/apps/web-ele/src/components/dashboard-design/components/widgets/FilterDateRange.vue deleted file mode 100644 index 4a755f7..0000000 --- a/web/apps/web-ele/src/components/dashboard-design/components/widgets/FilterDateRange.vue +++ /dev/null @@ -1,159 +0,0 @@ - - - - - diff --git a/web/apps/web-ele/src/components/dashboard-design/components/widgets/FilterInput.vue b/web/apps/web-ele/src/components/dashboard-design/components/widgets/FilterInput.vue deleted file mode 100644 index 88cd1a6..0000000 --- a/web/apps/web-ele/src/components/dashboard-design/components/widgets/FilterInput.vue +++ /dev/null @@ -1,139 +0,0 @@ - - - - - diff --git a/web/apps/web-ele/src/components/dashboard-design/components/widgets/FilterSelect.vue b/web/apps/web-ele/src/components/dashboard-design/components/widgets/FilterSelect.vue deleted file mode 100644 index 6cf69f4..0000000 --- a/web/apps/web-ele/src/components/dashboard-design/components/widgets/FilterSelect.vue +++ /dev/null @@ -1,180 +0,0 @@ - - - - - diff --git a/web/apps/web-ele/src/components/dashboard-design/components/widgets/IframeWidget.vue b/web/apps/web-ele/src/components/dashboard-design/components/widgets/IframeWidget.vue deleted file mode 100644 index 95ed3f1..0000000 --- a/web/apps/web-ele/src/components/dashboard-design/components/widgets/IframeWidget.vue +++ /dev/null @@ -1,202 +0,0 @@ - - - - - diff --git a/web/apps/web-ele/src/components/dashboard-design/components/widgets/ImageCarousel.vue b/web/apps/web-ele/src/components/dashboard-design/components/widgets/ImageCarousel.vue deleted file mode 100644 index 5e19293..0000000 --- a/web/apps/web-ele/src/components/dashboard-design/components/widgets/ImageCarousel.vue +++ /dev/null @@ -1,252 +0,0 @@ - - - - - diff --git a/web/apps/web-ele/src/components/dashboard-design/components/widgets/ImageWidget.vue b/web/apps/web-ele/src/components/dashboard-design/components/widgets/ImageWidget.vue deleted file mode 100644 index f83caee..0000000 --- a/web/apps/web-ele/src/components/dashboard-design/components/widgets/ImageWidget.vue +++ /dev/null @@ -1,117 +0,0 @@ - - - - - diff --git a/web/apps/web-ele/src/components/dashboard-design/components/widgets/MyApps.vue b/web/apps/web-ele/src/components/dashboard-design/components/widgets/MyApps.vue deleted file mode 100644 index e3eaba6..0000000 --- a/web/apps/web-ele/src/components/dashboard-design/components/widgets/MyApps.vue +++ /dev/null @@ -1,130 +0,0 @@ - - - diff --git a/web/apps/web-ele/src/components/dashboard-design/components/widgets/NoticeList.vue b/web/apps/web-ele/src/components/dashboard-design/components/widgets/NoticeList.vue deleted file mode 100644 index 76deccd..0000000 --- a/web/apps/web-ele/src/components/dashboard-design/components/widgets/NoticeList.vue +++ /dev/null @@ -1,269 +0,0 @@ - - - - - diff --git a/web/apps/web-ele/src/components/dashboard-design/components/widgets/ProgressCard.vue b/web/apps/web-ele/src/components/dashboard-design/components/widgets/ProgressCard.vue deleted file mode 100644 index d546246..0000000 --- a/web/apps/web-ele/src/components/dashboard-design/components/widgets/ProgressCard.vue +++ /dev/null @@ -1,28 +0,0 @@ - - - - - diff --git a/web/apps/web-ele/src/components/dashboard-design/components/widgets/QuickLinks.vue b/web/apps/web-ele/src/components/dashboard-design/components/widgets/QuickLinks.vue deleted file mode 100644 index ec167b4..0000000 --- a/web/apps/web-ele/src/components/dashboard-design/components/widgets/QuickLinks.vue +++ /dev/null @@ -1,120 +0,0 @@ - - - - - diff --git a/web/apps/web-ele/src/components/dashboard-design/components/widgets/RankingList.vue b/web/apps/web-ele/src/components/dashboard-design/components/widgets/RankingList.vue deleted file mode 100644 index afb3cbb..0000000 --- a/web/apps/web-ele/src/components/dashboard-design/components/widgets/RankingList.vue +++ /dev/null @@ -1,71 +0,0 @@ - - - - - diff --git a/web/apps/web-ele/src/components/dashboard-design/components/widgets/ServerMonitor.vue b/web/apps/web-ele/src/components/dashboard-design/components/widgets/ServerMonitor.vue deleted file mode 100644 index cdcaaa6..0000000 --- a/web/apps/web-ele/src/components/dashboard-design/components/widgets/ServerMonitor.vue +++ /dev/null @@ -1,294 +0,0 @@ - - - diff --git a/web/apps/web-ele/src/components/dashboard-design/components/widgets/StatCard.vue b/web/apps/web-ele/src/components/dashboard-design/components/widgets/StatCard.vue deleted file mode 100644 index 74c60cd..0000000 --- a/web/apps/web-ele/src/components/dashboard-design/components/widgets/StatCard.vue +++ /dev/null @@ -1,91 +0,0 @@ - - - - - diff --git a/web/apps/web-ele/src/components/dashboard-design/components/widgets/TodoList.vue b/web/apps/web-ele/src/components/dashboard-design/components/widgets/TodoList.vue deleted file mode 100644 index 5ed1800..0000000 --- a/web/apps/web-ele/src/components/dashboard-design/components/widgets/TodoList.vue +++ /dev/null @@ -1,81 +0,0 @@ - - - - - diff --git a/web/apps/web-ele/src/components/dashboard-design/components/widgets/VideoPlayer.vue b/web/apps/web-ele/src/components/dashboard-design/components/widgets/VideoPlayer.vue deleted file mode 100644 index 1fc6df6..0000000 --- a/web/apps/web-ele/src/components/dashboard-design/components/widgets/VideoPlayer.vue +++ /dev/null @@ -1,277 +0,0 @@ - - - - - diff --git a/web/apps/web-ele/src/components/dashboard-design/components/widgets/WeatherWidget.vue b/web/apps/web-ele/src/components/dashboard-design/components/widgets/WeatherWidget.vue deleted file mode 100644 index a53a3c8..0000000 --- a/web/apps/web-ele/src/components/dashboard-design/components/widgets/WeatherWidget.vue +++ /dev/null @@ -1,364 +0,0 @@ - - - - - diff --git a/web/apps/web-ele/src/components/dashboard-design/components/widgets/WelcomeCard.vue b/web/apps/web-ele/src/components/dashboard-design/components/widgets/WelcomeCard.vue deleted file mode 100644 index 229ef9a..0000000 --- a/web/apps/web-ele/src/components/dashboard-design/components/widgets/WelcomeCard.vue +++ /dev/null @@ -1,115 +0,0 @@ - - - - - diff --git a/web/apps/web-ele/src/components/dashboard-design/index.ts b/web/apps/web-ele/src/components/dashboard-design/index.ts deleted file mode 100644 index 9fde736..0000000 --- a/web/apps/web-ele/src/components/dashboard-design/index.ts +++ /dev/null @@ -1,10 +0,0 @@ -export { default as DashboardRenderer } from './DashboardRenderer.vue'; -export type { - DashboardConfig, - DashboardWidget, - DataSourceConfig, - DataSourceType, - WidgetStyle, - WidgetType, -} from './types'; -export { createRefreshTimer, fetchWidgetData } from './utils/dataFetcher'; diff --git a/web/apps/web-ele/src/components/dashboard-design/runtime.ts b/web/apps/web-ele/src/components/dashboard-design/runtime.ts deleted file mode 100644 index a8278da..0000000 --- a/web/apps/web-ele/src/components/dashboard-design/runtime.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { ref } from 'vue'; - -const globalParams = ref>({}); -const globalParamsVersion = ref(0); - -function updateGlobalParam(key: string, value: any) { - globalParams.value = { ...globalParams.value, [key]: value }; - globalParamsVersion.value++; -} - -function clearGlobalParams() { - globalParams.value = {}; - globalParamsVersion.value++; -} - -export function useDashboardRuntime() { - return { - clearGlobalParams, - globalParams, - globalParamsVersion, - updateGlobalParam, - }; -} diff --git a/web/apps/web-ele/src/components/dashboard-design/types.ts b/web/apps/web-ele/src/components/dashboard-design/types.ts deleted file mode 100644 index c7314fe..0000000 --- a/web/apps/web-ele/src/components/dashboard-design/types.ts +++ /dev/null @@ -1,115 +0,0 @@ -export type DataSourceType = 'api' | 'dataSource' | 'static' | 'upload'; - -export interface FieldMapping { - source: string; - target: string; -} - -export interface ParamBinding { - paramName: string; - globalKey: string; -} - -export interface DataSourceConfig { - type: DataSourceType; - dataSourceCode?: string; - apiUrl?: string; - apiMethod?: 'GET' | 'POST'; - apiHeaders?: Record; - apiParams?: Record; - apiBody?: Record; - dataPath?: string; - fieldMappings?: FieldMapping[]; - paramBindings?: ParamBinding[]; - refreshInterval?: number; - refreshEnabled?: boolean; -} - -export type WidgetType = - | 'announcement-list' - | 'approval-center' - | 'calendar' - | 'chart-area' - | 'chart-bar' - | 'chart-funnel' - | 'chart-gauge' - | 'chart-heatmap' - | 'chart-kline' - | 'chart-line' - | 'chart-pie' - | 'chart-radar' - | 'chart-ring' - | 'chart-sankey' - | 'chart-scatter' - | 'clock' - | 'countdown' - | 'data-table' - | 'filter-date' - | 'filter-date-range' - | 'filter-input' - | 'filter-select' - | 'form-render' - | 'iframe' - | 'image' - | 'image-carousel' - | 'my-apps' - | 'notice-list' - | 'progress-card' - | 'quick-links' - | 'ranking-list' - | 'server-monitor' - | 'stat-card' - | 'todo-list' - | 'video-player' - | 'weather' - | 'welcome-card'; - -export interface WidgetStyle { - backgroundColor?: string; - backgroundImage?: string; - backgroundSize?: 'auto' | 'contain' | 'cover'; - borderWidth?: number; - borderColor?: string; - borderStyle?: 'dashed' | 'dotted' | 'none' | 'solid'; - borderRadius?: number; - shadowEnabled?: boolean; - shadowColor?: string; - shadowBlur?: number; - shadowOffsetX?: number; - shadowOffsetY?: number; - padding?: number; - titleShow?: boolean; - titleFontSize?: number; - titleColor?: string; - titleAlign?: 'center' | 'left' | 'right'; - titleFontWeight?: 'bold' | 'normal'; -} - -export interface DashboardWidget { - id: string; - type: WidgetType; - i: string; - x: number; - y: number; - w: number; - h: number; - minW?: number; - minH?: number; - maxW?: number; - maxH?: number; - title?: string; - props: Record; - style?: WidgetStyle; - dataSource?: DataSourceConfig; -} - -export interface DashboardConfig { - id: string; - name: string; - columns: number; - rowHeight: number; - margin: [number, number]; - backgroundColor?: string; - showOuterMargin?: boolean; - widgets: DashboardWidget[]; -} diff --git a/web/apps/web-ele/src/components/dashboard-design/utils/dataFetcher.ts b/web/apps/web-ele/src/components/dashboard-design/utils/dataFetcher.ts deleted file mode 100644 index c584dfb..0000000 --- a/web/apps/web-ele/src/components/dashboard-design/utils/dataFetcher.ts +++ /dev/null @@ -1,200 +0,0 @@ -import type { - DataSourceConfig, - FieldMapping, -} from '../types'; - -import { requestClient } from '#/api/request'; - -/** - * 根据路径获取对象中的值 - * @param obj 对象 - * @param path 路径,如 'data.list' 或 'data.items[0].name' - */ -export function getValueByPath(obj: any, path: string): any { - if (!obj || !path) return obj; - - const keys = path.replaceAll(/\[(\d+)\]/g, '.$1').split('.'); - let result = obj; - - for (const key of keys) { - if (result === null || result === undefined) return undefined; - result = result[key]; - } - - return result; -} - -/** - * 根据路径设置对象中的值 - */ -export function setValueByPath(obj: any, path: string, value: any): void { - if (!obj || !path) return; - - const keys = path.split('.'); - let current = obj; - - for (let i = 0; i < keys.length - 1; i++) { - const key = keys[i]!; - if (current[key] === undefined) { - current[key] = {}; - } - current = current[key]; - } - - current[keys[keys.length - 1]!] = value; -} - -/** - * 应用字段映射 - */ -export function applyFieldMappings( - data: any, - mappings: FieldMapping[] | undefined, - targetProps: Record, -): Record { - if (!mappings || mappings.length === 0) { - return { ...targetProps, ...data }; - } - - const result = { ...targetProps }; - - for (const mapping of mappings) { - const value = getValueByPath(data, mapping.source); - if (value !== undefined) { - setValueByPath(result, mapping.target, value); - } - } - - return result; -} - -/** - * 数据获取工具 - */ -export async function fetchWidgetData( - dataSource: DataSourceConfig | undefined, - defaultProps: Record, - params?: Record, -): Promise<{ data: any; props: Record }> { - if (!dataSource || dataSource.type === 'static') { - return { data: null, props: defaultProps }; - } - - // 通用数据源类型 - if (dataSource.type === 'dataSource' && dataSource.dataSourceCode) { - try { - const response = await requestClient.get( - `/api/core/data-source/execute/${dataSource.dataSourceCode}`, - { params: params && Object.keys(params).length > 0 ? params : undefined }, - ); - - // 后端返回格式是 {data: ...},需要提取 data 字段 - const rawData = response?.data ?? response; - - // 数据源返回的数据可能是数组或对象(图表数据源返回 {xAxisData, seriesData} 格式) - const extractedData = dataSource.dataPath - ? getValueByPath(rawData, dataSource.dataPath) - : rawData; - - // 检查是否是图表数据格式(包含 xAxisData 或 seriesData 或 indicator 或 value) - if ( - extractedData && - typeof extractedData === 'object' && - !Array.isArray(extractedData) && - ('xAxisData' in extractedData || - 'seriesData' in extractedData || - 'indicator' in extractedData || - 'yAxisData' in extractedData || - ('value' in extractedData && 'max' in extractedData)) - ) { - // 图表数据格式,直接合并到 props - const mappedProps = { ...defaultProps, ...extractedData }; - // 如果有额外的字段映射,也应用 - if (dataSource.fieldMappings && dataSource.fieldMappings.length > 0) { - return { - data: extractedData, - props: applyFieldMappings( - extractedData, - dataSource.fieldMappings, - mappedProps, - ), - }; - } - return { data: extractedData, props: mappedProps }; - } - - // 普通数据,应用字段映射 - const mappedProps = applyFieldMappings( - extractedData, - dataSource.fieldMappings, - defaultProps, - ); - - return { data: extractedData, props: mappedProps }; - } catch (error) { - console.error('Failed to fetch data source:', error); - return { data: null, props: defaultProps }; - } - } - - // API 类型 - if (dataSource.type === 'api' && dataSource.apiUrl) { - try { - const method = dataSource.apiMethod || 'GET'; - const params = dataSource.apiParams || {}; - const body = dataSource.apiBody || {}; - const headers = dataSource.apiHeaders || {}; - - let response: any; - - response = await (method === 'GET' - ? requestClient.get(dataSource.apiUrl, { - params, - headers, - }) - : requestClient.post(dataSource.apiUrl, body, { - params, - headers, - })); - - // 根据 dataPath 提取数据 - const extractedData = dataSource.dataPath - ? getValueByPath(response, dataSource.dataPath) - : response; - - // 应用字段映射 - const mappedProps = applyFieldMappings( - extractedData, - dataSource.fieldMappings, - defaultProps, - ); - - return { data: extractedData, props: mappedProps }; - } catch (error) { - console.error('Failed to fetch widget data:', error); - return { data: null, props: defaultProps }; - } - } - - return { data: null, props: defaultProps }; -} - -/** - * 创建自动刷新定时器 - */ -export function createRefreshTimer( - dataSource: DataSourceConfig | undefined, - callback: () => void, -): (() => void) | null { - if ( - !dataSource?.refreshEnabled || - !dataSource.refreshInterval || - dataSource.refreshInterval <= 0 - ) { - return null; - } - - const timer = setInterval(callback, dataSource.refreshInterval * 1000); - - return () => clearInterval(timer); -} diff --git a/web/apps/web-ele/src/components/form-editor/AppDesignPanel.vue b/web/apps/web-ele/src/components/form-editor/AppDesignPanel.vue deleted file mode 100644 index e9864a2..0000000 --- a/web/apps/web-ele/src/components/form-editor/AppDesignPanel.vue +++ /dev/null @@ -1,109 +0,0 @@ - - - - - diff --git a/web/apps/web-ele/src/components/form-editor/AppSettingsPanel.vue b/web/apps/web-ele/src/components/form-editor/AppSettingsPanel.vue deleted file mode 100644 index 6cba399..0000000 --- a/web/apps/web-ele/src/components/form-editor/AppSettingsPanel.vue +++ /dev/null @@ -1,536 +0,0 @@ - - - - - diff --git a/web/apps/web-ele/src/components/form-editor/BasicInfoEditor.vue b/web/apps/web-ele/src/components/form-editor/BasicInfoEditor.vue deleted file mode 100644 index 1642297..0000000 --- a/web/apps/web-ele/src/components/form-editor/BasicInfoEditor.vue +++ /dev/null @@ -1,117 +0,0 @@ - - - - - diff --git a/web/apps/web-ele/src/components/form-editor/DashboardBasicInfoConfirmPanel.vue b/web/apps/web-ele/src/components/form-editor/DashboardBasicInfoConfirmPanel.vue deleted file mode 100644 index 588e12e..0000000 --- a/web/apps/web-ele/src/components/form-editor/DashboardBasicInfoConfirmPanel.vue +++ /dev/null @@ -1,122 +0,0 @@ - - - diff --git a/web/apps/web-ele/src/components/form-editor/DashboardDesignConfirmPanel.vue b/web/apps/web-ele/src/components/form-editor/DashboardDesignConfirmPanel.vue deleted file mode 100644 index 04dce90..0000000 --- a/web/apps/web-ele/src/components/form-editor/DashboardDesignConfirmPanel.vue +++ /dev/null @@ -1,137 +0,0 @@ - - - - - diff --git a/web/apps/web-ele/src/components/form-editor/DashboardPublishConfirmPanel.vue b/web/apps/web-ele/src/components/form-editor/DashboardPublishConfirmPanel.vue deleted file mode 100644 index ed8d069..0000000 --- a/web/apps/web-ele/src/components/form-editor/DashboardPublishConfirmPanel.vue +++ /dev/null @@ -1,137 +0,0 @@ - - - diff --git a/web/apps/web-ele/src/components/form-editor/DesignEditorPanel.vue b/web/apps/web-ele/src/components/form-editor/DesignEditorPanel.vue deleted file mode 100644 index d4d5b23..0000000 --- a/web/apps/web-ele/src/components/form-editor/DesignEditorPanel.vue +++ /dev/null @@ -1,288 +0,0 @@ - - - - - diff --git a/web/apps/web-ele/src/components/form-editor/FormEditorContent.vue b/web/apps/web-ele/src/components/form-editor/FormEditorContent.vue deleted file mode 100644 index 9ae4729..0000000 --- a/web/apps/web-ele/src/components/form-editor/FormEditorContent.vue +++ /dev/null @@ -1,329 +0,0 @@ - - - - - diff --git a/web/apps/web-ele/src/components/form-editor/PageBasicInfoEditor.vue b/web/apps/web-ele/src/components/form-editor/PageBasicInfoEditor.vue deleted file mode 100644 index da89e8d..0000000 --- a/web/apps/web-ele/src/components/form-editor/PageBasicInfoEditor.vue +++ /dev/null @@ -1,140 +0,0 @@ - - - diff --git a/web/apps/web-ele/src/components/form-editor/PageEditorContent.vue b/web/apps/web-ele/src/components/form-editor/PageEditorContent.vue deleted file mode 100644 index e253cd1..0000000 --- a/web/apps/web-ele/src/components/form-editor/PageEditorContent.vue +++ /dev/null @@ -1,210 +0,0 @@ - - - - - diff --git a/web/apps/web-ele/src/components/form-editor/PagePublishInfoEditor.vue b/web/apps/web-ele/src/components/form-editor/PagePublishInfoEditor.vue deleted file mode 100644 index d45a4f5..0000000 --- a/web/apps/web-ele/src/components/form-editor/PagePublishInfoEditor.vue +++ /dev/null @@ -1,129 +0,0 @@ - - - diff --git a/web/apps/web-ele/src/components/form-editor/PublishInfoEditor.vue b/web/apps/web-ele/src/components/form-editor/PublishInfoEditor.vue deleted file mode 100644 index 6524682..0000000 --- a/web/apps/web-ele/src/components/form-editor/PublishInfoEditor.vue +++ /dev/null @@ -1,122 +0,0 @@ - - - -export interface FormPublishInput { - menu_icon: string; - menu_name: string; - menu_order: number; - menu_parent_id?: string; -} diff --git a/web/apps/web-ele/src/components/form-editor/SystemSummaryConfirmPanel.vue b/web/apps/web-ele/src/components/form-editor/SystemSummaryConfirmPanel.vue deleted file mode 100644 index e09262b..0000000 --- a/web/apps/web-ele/src/components/form-editor/SystemSummaryConfirmPanel.vue +++ /dev/null @@ -1,317 +0,0 @@ - - - diff --git a/web/apps/web-ele/src/components/form-editor/index.ts b/web/apps/web-ele/src/components/form-editor/index.ts deleted file mode 100644 index 21d85de..0000000 --- a/web/apps/web-ele/src/components/form-editor/index.ts +++ /dev/null @@ -1,40 +0,0 @@ -/** - * 表单编辑器公共组件 - * 可用于:表单管理器、工作流设计预览编辑 - */ - -export { default as BasicInfoEditor } from './BasicInfoEditor.vue'; -export type { BasicFormData } from './BasicInfoEditor.vue'; - -export { default as DesignEditorPanel } from './DesignEditorPanel.vue'; -export type { DesignData, DesignType } from './DesignEditorPanel.vue'; - -export { default as FormEditorContent } from './FormEditorContent.vue'; -export type { FormEditorData, BasicFormData as FormBasicData } from './FormEditorContent.vue'; - -export { default as AppDesignPanel } from './AppDesignPanel.vue'; -export type { AppDesignData } from './AppDesignPanel.vue'; - -export { default as AppSettingsPanel } from './AppSettingsPanel.vue'; -export type { AppSettingsData } from './AppSettingsPanel.vue'; - -export { default as DashboardBasicInfoConfirmPanel } from './DashboardBasicInfoConfirmPanel.vue'; -export type { DashboardBasicInfoData } from './DashboardBasicInfoConfirmPanel.vue'; - -export { default as DashboardDesignConfirmPanel } from './DashboardDesignConfirmPanel.vue'; -export type { DashboardDesignData } from './DashboardDesignConfirmPanel.vue'; - -export { default as PageBasicInfoEditor } from './PageBasicInfoEditor.vue'; -export type { PageBasicInfo } from './PageBasicInfoEditor.vue'; - -export { default as PagePublishInfoEditor } from './PagePublishInfoEditor.vue'; -export type { PagePublishInfo } from './PagePublishInfoEditor.vue'; - -export { default as PageEditorContent } from './PageEditorContent.vue'; -export type { PageEditorData } from './PageEditorContent.vue'; - -export { default as DashboardPublishConfirmPanel } from './DashboardPublishConfirmPanel.vue'; -export type { DashboardPublishData } from './DashboardPublishConfirmPanel.vue'; - -export { default as SystemSummaryConfirmPanel } from './SystemSummaryConfirmPanel.vue'; -export type { SystemSummaryData } from './SystemSummaryConfirmPanel.vue'; diff --git a/web/apps/web-ele/src/components/fu-page/fu-page.vue b/web/apps/web-ele/src/components/fu-page/fu-page.vue index b0e85aa..29f62ec 100644 --- a/web/apps/web-ele/src/components/fu-page/fu-page.vue +++ b/web/apps/web-ele/src/components/fu-page/fu-page.vue @@ -1,7 +1,7 @@ - - - - diff --git a/web/apps/web-ele/src/locales/langs/en-US/about.json b/web/apps/web-ele/src/locales/langs/en-US/about.json deleted file mode 100644 index b36aa53..0000000 --- a/web/apps/web-ele/src/locales/langs/en-US/about.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "title": "About Project", - "basicInfo": "Basic Information", - "productionDependencies": "Production Dependencies", - "devDependencies": "Development Dependencies", - "version": "Version", - "license": "License", - "buildTime": "Build Time", - "homepage": "Homepage", - "docUrl": "Documentation", - "previewUrl": "Preview", - "github": "Github", - "author": "Author", - "viewDetails": "View Details" -} diff --git a/web/apps/web-ele/src/locales/langs/en-US/account-settings.json b/web/apps/web-ele/src/locales/langs/en-US/account-settings.json deleted file mode 100644 index a384512..0000000 --- a/web/apps/web-ele/src/locales/langs/en-US/account-settings.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "passwordLengthHint": "Password length must be 6-20 characters" -} diff --git a/web/apps/web-ele/src/locales/langs/en-US/ai-platform.json b/web/apps/web-ele/src/locales/langs/en-US/ai-platform.json deleted file mode 100644 index 7489941..0000000 --- a/web/apps/web-ele/src/locales/langs/en-US/ai-platform.json +++ /dev/null @@ -1,2509 +0,0 @@ -{ - "agent": { - "title": "Agent", - "create": "Create Agent", - "createSuccess": "Created successfully", - "createFailed": "Failed to create", - "saveSuccess": "Saved successfully", - "saveFailed": "Failed to save", - "publishSuccess": "Published successfully", - "publishFailed": "Failed to publish", - "disableSuccess": "Disabled", - "deleteSuccess": "Deleted successfully", - "deleteFailed": "Failed to delete", - "deleteConfirm": "Are you sure to delete agent \"{name}\"?", - "deleteTitle": "Delete Confirmation", - "unpublishMenuSuccess": "Menu unpublished successfully", - "operationFailed": "Operation failed", - "fillNameAndCode": "Please fill in name and code", - "codeFormatError": "Code must start with a letter and contain only letters, numbers and underscores", - "searchPlaceholder": "Search agent name", - "search": "Search", - "noDescription": "No description", - "empty": "No agents", - "mainApp": "Main App", - "edit": "Edit", - "delete": "Delete", - "chat": "Chat", - "publish": "Publish", - "publishToMenu": "Publish Agent to Menu", - "publishDialog": { - "menuConfig": "Menu Config", - "menuName": "Menu Name", - "menuNamePlaceholder": "Please enter menu name", - "parentMenu": "Parent Menu", - "parentMenuPlaceholder": "Please select parent menu", - "menuIcon": "Menu Icon", - "routeInfo": "Route Info", - "accessPath": "Access Path" - }, - "unpublishMenu": "Unpublish Menu", - "disable": "Disable", - "back": "Back", - "save": "Save", - "cancel": "Cancel", - "loading": "Loading...", - "status": { - "draft": "Draft", - "published": "Published", - "disabled": "Disabled" - }, - "mode": { - "autonomous": "Autonomous", - "dialogFlow": "Dialog Flow", - "autonomousLabel": "Autonomous Mode", - "dialogFlowLabel": "Dialog Flow Mode", - "autonomousDesc": "Agent automatically decomposes and executes tasks", - "dialogFlowDesc": "Interact with users following predefined workflow" - }, - "form": { - "name": "Name", - "namePlaceholder": "Please enter agent name", - "code": "Code", - "codePlaceholder": "Please enter unique code", - "appCode": "App Code", - "mode": "Mode", - "description": "Description", - "descriptionPlaceholder": "Please enter description", - "globalVisible": "Visible to Sub-apps" - }, - "importExport": { - "export": "Export", - "import": "Import Config", - "exportSuccess": "Agent config exported", - "exportFailed": "Export failed", - "importTitle": "Import Agent Config", - "dragOrClick": "Drag a JSON file here or click to upload", - "onlyJson": "Only .json files are supported", - "fileParseError": "Failed to parse file. Please check the format", - "checking": "Checking...", - "codeConflictTip": "Agent code already exists. Please change the code before importing", - "codeAvailable": "Agent code is available", - "newCodePlaceholder": "Enter a new agent code", - "importSuccess": "Agent config imported successfully", - "importFailed": "Import failed", - "confirmImport": "Confirm Import", - "reselect": "Reselect", - "agentInfo": "Agent Info", - "modelName": "Model", - "workflowCode": "Workflow", - "appTip": "Imported agent will belong to the current application as draft", - "refTip": "Model, workflow and knowledge bases are matched by name/code; reconfigure in editor if missing in target environment" - }, - "basicInfo": "Basic Info", - "runMode": "Run Mode", - "runModeTooltip": "Autonomous Mode: Agent automatically understands user intent and responds, suitable for general Q&A; Dialog Flow Mode: Interacts with users following predefined workflow steps, suitable for fixed process scenarios", - "relatedWorkflow": "Related Workflow", - "relatedWorkflowTooltip": "Select a published workflow. In dialog flow mode, the agent will interact with users following the workflow steps", - "selectWorkflow": "Please select workflow", - "dialogFlowHint": "Dialog flow mode requires a linked workflow. The workflow can use interactive nodes like Q&A, choice, etc.", - "conversationMemory": "Conversation Memory", - "conversationMemoryTooltip": "When enabled, LLM nodes in the workflow can access conversation history for more coherent responses", - "enabled": "Enabled", - "notEnabled": "Not Enabled", - "memoryWindow": "Memory Window", - "memoryWindowTooltip": "LLM nodes can access the last N rounds of conversation history. Larger values mean longer memory but more token consumption", - "rounds": "rounds", - "agentDescription": "Agent description...", - "persona": { - "title": "Persona", - "role": "Role", - "roleTooltip": "Define the core identity and responsibilities of the agent, e.g. 'You are a professional data analyst'. This affects the AI's response style and expertise", - "rolePlaceholder": "e.g. You are a professional data analyst, skilled at handling complex data problems...", - "personality": "Personality", - "personalityTooltip": "Set personality traits like 'rigorous', 'friendly', 'humorous', etc. to influence the tone and style of responses", - "personalityPlaceholder": "Enter personality trait, press Enter to add", - "skills": "Skills", - "skillsTooltip": "List the agent's expertise areas like 'data analysis', 'code review', etc. to help AI understand its capability boundaries", - "skillsPlaceholder": "Enter skill, press Enter to add", - "constraints": "Constraints", - "constraintsTooltip": "Set rules the agent must follow, like 'no political topics', 'answers must be fact-based', etc. to prevent AI from overstepping", - "constraintsPlaceholder": "Enter constraint, press Enter to add", - "background": "Background", - "backgroundTooltip": "Provide detailed background info like company, business domain, target audience, etc. to help AI better understand the business context", - "backgroundPlaceholder": "Detailed background...", - "add": "Add" - }, - "prompt": { - "title": "System Prompt", - "tooltip": "Direct instruction text for AI, higher priority than persona config. Leave empty to auto-generate from persona", - "placeholder": "Write system prompt directly, or leave empty to auto-generate from persona..." - }, - "model": { - "title": "Model Config", - "label": "Model", - "tooltip": "Select the LLM for the agent. Different models vary in capability, speed, and cost", - "placeholder": "Please select model", - "temperature": "Temperature", - "temperatureTooltip": "Controls response randomness. Lower values give more stable responses, higher values are more creative but may be inaccurate. Recommended: strict 0.1~0.3, general 0.5~0.7, creative 0.8~1.2", - "maxToken": "Max Tokens", - "maxTokenTooltip": "Maximum output length per response (in tokens). ~1 token ≈ 4 English characters. Larger values allow longer responses but cost more", - "maxIterations": "Max Iterations", - "maxIterationsTooltip": "Maximum think-act cycles per conversation. Prevents infinite loops. Usually 5~10 is sufficient", - "streaming": "Streaming Output", - "streamingTooltip": "When enabled, AI responses stream character by character for a smoother experience" - }, - "knowledgeBase": { - "title": "Knowledge Base", - "label": "Linked Knowledge Bases", - "placeholder": "Select knowledge bases to link", - "hint": "After selecting knowledge bases, relevant content will be automatically retrieved as context for each question, improving answer accuracy", - "documents": "documents", - "retrievalMode": "Retrieval Mode", - "retrievalModeTooltip": "Hybrid: Uses both semantic vectors and keyword matching, best for most scenarios; Vector: Based on semantic similarity, good at understanding synonyms; Full-text: Based on exact keyword matching, good for technical terms", - "hybridRecommended": "Hybrid (Recommended)", - "vectorSearch": "Vector Semantic Search", - "fulltextSearch": "Full-text Keyword Search", - "topK": "Top K", - "topKTooltip": "Number of most relevant segments returned per retrieval. Larger values provide richer context but may introduce noise. Recommended 3~5", - "scoreThreshold": "Score Threshold", - "scoreThresholdTooltip": "Only return results above this similarity threshold. Higher values mean more precise but may miss relevant content. Recommended 0.5~0.7" - }, - "welcome": { - "title": "Welcome Message", - "tooltip": "Auto-displayed greeting when users first enter the conversation. Can introduce agent capabilities or guide users", - "placeholder": "Welcome message when starting conversation..." - }, - "suggestions": { - "title": "Suggested Questions", - "hint": "Suggested questions are shown at the start of conversation to help users get started quickly", - "placeholder": "Enter suggested question", - "inputPlaceholder": "Enter suggested question, press Enter to add", - "add": "Add", - "empty": "No suggested questions. Add some to help users get started" - }, - "debug": { - "inputPlaceholder": "Enter message to debug...", - "publishFirst": "Please publish the agent first" - }, - "chatPanel": { - "inputPlaceholder": "Enter message...", - "sendToStart": "Send a message to start conversation", - "publishFirst": "Please publish the agent before chatting", - "executionFailed": "Execution failed", - "waitingInput": "Waiting for input...", - "selectPrompt": "Please select:", - "confirm": "Confirm", - "confirmContinue": "Please confirm to continue?", - "inputPrompt": "Please input:", - "feedbackThanks": "Thanks for your feedback", - "confirmDesign": "Confirm Design", - "confirmAppDesign": "Confirm App Design", - "appDesignTitle": "App Design Plan", - "designPreview": "Design Preview", - "designPanelHint": "Please confirm or edit the design in the right panel", - "aiDeveloping": "AI is developing...", - "analyzingAndGenerating": "Analyzing requirements and generating code", - "cancelText": "Cancel" - }, - "codeRequired": "Agent code is required", - "loadFailed": "Failed to load agent", - "notFound": "Agent not found", - "knowledge": { - "annotationReply": "Annotation Direct Reply", - "annotationReplyTip": "When enabled, if user question matches an annotation above the threshold, the annotation answer is returned directly without calling LLM. Zero token cost, faster response. Falls back to normal RAG when no match.", - "annotationThreshold": "Annotation Match Threshold", - "annotationThresholdTip": "Directly return annotation answer when similarity exceeds this threshold. Recommend 0.9+ to avoid false matches." - } - }, - "conversation": { - "history": "History", - "new": "New Chat", - "empty": "No conversations yet", - "untitled": "Untitled", - "messages": "messages", - "loadFailed": "Failed to load conversations", - "deleteConfirm": "Are you sure to delete this conversation?", - "deleteSuccess": "Deleted successfully", - "deleteFailed": "Failed to delete" - }, - "appSettings": { - "title": "App Settings", - "appConfig": "App Config", - "logoConfig": "Logo Config", - "themeConfig": "Theme Config", - "layoutConfig": "Layout Config", - "appName": "App Name", - "appNamePlaceholder": "Please enter app name", - "defaultHomePath": "Default Home", - "defaultHomePathPlaceholder": "Please enter default home path", - "enablePreferences": "Enable Preferences", - "logoEnable": "Enable Logo", - "logoSource": "Logo Image", - "logoSourcePlaceholder": "Please enter logo image URL or upload", - "logoFit": "Fit Mode", - "builtinTheme": "Built-in Theme", - "primaryColor": "Primary Color", - "themeMode": "Theme Mode", - "layout": "Layout Mode", - "layoutOptions": { - "sidebar-nav": "Sidebar Navigation", - "sidebar-mixed-nav": "Sidebar Mixed Navigation", - "header-nav": "Header Navigation", - "mixed-nav": "Mixed Navigation", - "full-content": "Full Content" - }, - "themeOptions": { - "default": "Default", - "violet": "Violet", - "pink": "Pink", - "rose": "Rose", - "sky": "Sky", - "cyan": "Cyan", - "green": "Green", - "orange": "Orange", - "yellow": "Yellow", - "zinc": "Zinc", - "neutral": "Neutral", - "slate": "Slate", - "gray": "Gray", - "deep-blue": "Deep Blue", - "deep-green": "Deep Green" - }, - "themeModeOptions": { - "light": "Light", - "dark": "Dark", - "auto": "Follow System" - }, - "fitOptions": { - "contain": "Contain", - "cover": "Cover", - "fill": "Fill", - "none": "None", - "scale-down": "Scale Down" - } - }, - "dashboard": { - "basicInfo": { - "title": "Dashboard Basic Info", - "name": "Dashboard Name", - "namePlaceholder": "Please enter dashboard name", - "code": "Dashboard Code", - "codePlaceholder": "Please enter dashboard code", - "category": "Category", - "categoryPlaceholder": "Please select category", - "description": "Description", - "descriptionPlaceholder": "Please enter description", - "sort": "Sort", - "requireConfirmation": "Require Confirmation", - "categoryOptions": { - "dashboard": "Dashboard", - "portal": "Portal", - "databoard": "Data Board", - "other": "Other" - } - }, - "design": { - "title": "Dashboard Design", - "designTitle": "Design Title", - "designSuggestion": "Design Suggestion", - "requireConfirmation": "Require Confirmation" - }, - "create": { - "title": "Dashboard Create", - "basicInfo": "Basic Info", - "pageConfig": "Page Config", - "applicationId": "Application ID", - "updateIfExists": "Update If Exists" - }, - "publish": { - "title": "Dashboard Publish", - "dashboardId": "Dashboard ID", - "menuName": "Menu Name", - "menuParentId": "Parent Menu ID", - "menuIcon": "Menu Icon", - "menuOrder": "Menu Order" - } - }, - "systemSummary": { - "title": "System Created Successfully", - "subtitle": "Here are the modules AI created for you", - "app": "Application", - "formModules": "Form Modules", - "dashboard": "Dashboard", - "appInfo": "Application Info", - "formModulesTitle": "Feature Modules", - "dashboardTitle": "Data Dashboard", - "visit": "Visit", - "complete": "Complete", - "noData": "No modules created" - }, - "knowledge": { - "title": "Knowledge Base", - "create": "Create Knowledge Base", - "edit": "Edit Knowledge Base", - "delete": "Delete Knowledge Base", - "deleteConfirm": "Are you sure to delete this knowledge base? All documents and segments will be permanently lost.", - "deleteSuccess": "Deleted successfully", - "createSuccess": "Created successfully", - "saveSuccess": "Saved successfully", - "name": "Name", - "namePlaceholder": "Please enter knowledge base name", - "code": "Code", - "codePlaceholder": "Please enter unique code", - "description": "Description", - "descriptionPlaceholder": "Please enter description", - "embeddingModel": "Embedding Model", - "embeddingModelPlaceholder": "Please select embedding model", - "dimensions": "Dimensions", - "chunkStrategy": "Chunk Strategy", - "chunkSize": "Chunk Size", - "chunkOverlap": "Chunk Overlap", - "retrievalMode": "Retrieval Mode", - "topK": "Top K", - "scoreThreshold": "Score Threshold", - "rerank": "Rerank", - "status": "Status", - "active": "Active", - "disabled": "Disabled", - "globalVisible": "Visible to Sub-apps", - "documents": "Documents", - "segments": "Segments", - "tokens": "Tokens", - "noDescription": "No description", - "mainApp": "Main App", - "search": "Search", - "searchPlaceholder": "Search knowledge base name", - "document": { - "title": "Document Management", - "add": "Add Document", - "batchAdd": "Batch Add", - "delete": "Delete Document", - "deleteConfirm": "Are you sure to delete this document?", - "deleteSuccess": "Deleted successfully", - "reindex": "Reindex", - "reindexSuccess": "Reindexing started", - "reindexAll": "Reindex All", - "reindexAllConfirm": "Are you sure to reindex all documents? This may take a while.", - "reindexAllSuccess": "Started reindexing all documents", - "duplicateWarning": "Duplicate content warning", - "enable": "Enable", - "disable": "Disable", - "pending": "Pending", - "indexing": "Indexing", - "completed": "Completed", - "failed": "Failed", - "searchPlaceholder": "Search document name", - "selectFile": "Select Files", - "addSuccess": "Documents added, indexing in background", - "uploadPlaceholder": "Click to upload or drag files, supports PDF, Word, TXT, Markdown, etc." - }, - "segment": { - "title": "Segment Management", - "add": "Add Segment", - "edit": "Edit Segment", - "delete": "Delete Segment", - "deleteConfirm": "Are you sure to delete this segment?", - "deleteSuccess": "Deleted successfully", - "content": "Content", - "contentPlaceholder": "Please enter segment content", - "keywords": "Keywords", - "enabled": "Enabled", - "disabled": "Disabled", - "searchPlaceholder": "Search segment content", - "embeddingCompleted": "Embedding OK", - "embeddingFailed": "Embedding Failed" - }, - "annotation": { - "title": "Annotations", - "add": "Add Annotation", - "edit": "Edit Annotation", - "delete": "Delete Annotation", - "deleteConfirm": "Are you sure to delete this annotation?", - "deleteSuccess": "Deleted successfully", - "createSuccess": "Created successfully", - "saveSuccess": "Saved successfully", - "question": "Question", - "questionPlaceholder": "Please enter question", - "answer": "Answer", - "answerPlaceholder": "Please enter answer", - "searchPlaceholder": "Search annotations", - "hitCount": "Hit Count", - "enabled": "Enabled", - "disabled": "Disabled", - "reindex": "Re-vectorize", - "reindexSuccess": "Vectorization task submitted", - "vectorizing": "Vectorizing" - }, - "hitStats": { - "title": "Hit Statistics", - "totalHits": "Total Hits", - "totalSegments": "Total Segments", - "zeroHitCount": "Zero-hit Segments", - "hitCount": "Hit Count", - "hitPercentage": "Hit Percentage", - "includeZero": "Include Zero-hit", - "topN": "Display Count", - "noData": "No hit data yet" - }, - "retrievalLog": { - "title": "Retrieval Logs", - "query": "Query", - "resultCount": "Results", - "elapsed": "Elapsed", - "mode": "Mode", - "rerank": "Rerank", - "source": "Source", - "time": "Time", - "searchPlaceholder": "Search query content", - "noData": "No retrieval logs yet", - "sourceAgent": "Agent", - "sourceAnnotation": "Annotation Reply", - "sourceApi": "Recall Test" - }, - "retrieval": { - "title": "Retrieval Test", - "query": "Query", - "queryPlaceholder": "Please enter query text", - "test": "Test", - "results": "Results", - "noResults": "No results found", - "score": "Score", - "source": "Source", - "elapsed": "Elapsed", - "metadataFilterPlaceholder": "Metadata filter (JSON, e.g. {\"author\": \"xxx\"})", - "invalidMetadataFilter": "Invalid metadata filter format, please enter valid JSON", - "matchSource": { - "vector": "Vector Match", - "fulltext": "Fulltext Match", - "annotation": "Annotation Match" - }, - "showParent": "Show Parent Segment", - "hideParent": "Hide Parent Segment" - }, - "chunkPreview": { - "title": "Chunk Preview", - "totalChunks": "Total Chunks", - "selectFile": "Please select a file to preview chunking", - "loading": "Loading chunk preview...", - "noFileId": "This document has no associated file", - "error": "Chunk preview failed" - }, - "metadata": { - "editTitle": "Edit Metadata", - "key": "Key", - "value": "Value", - "add": "Add Metadata", - "addPair": "Add Row", - "addFilter": "Add Metadata Filter", - "filter": "Filter", - "filterKeyPlaceholder": "Metadata Key", - "filterValuePlaceholder": "Metadata Value" - }, - "settings": { - "title": "Knowledge Base Settings", - "basic": "Basic Info", - "indexing": "Indexing Config", - "retrieval": "Retrieval Config", - "advanced": "Advanced", - "embeddingModelChangeTitle": "Embedding Model Changed", - "embeddingModelChangeWarning": "Changing the embedding model will make existing vectors incompatible. All documents need to be re-indexed. Save and re-index?", - "saveAndReindex": "Save & Re-index" - }, - "indexingTechnique": "Indexing Mode", - "indexingTechniques": { - "high_quality": "High Quality", - "economy": "Economy" - }, - "indexingTechniqueHint": { - "high_quality": "Vector indexing + keyword extraction, best retrieval quality", - "economy": "Keyword-only indexing, no Embedding cost" - }, - "retrievalWeight": "Retrieval Weight", - "retrievalWeightHint": "Weight coefficient for multi-KB retrieval (0.1-10.0), higher value ranks results higher", - "processRules": "Process Rules", - "processRulesHint": "Text cleaning rules before document indexing", - "removeExtraSpaces": "Remove extra spaces", - "removeUrlsEmails": "Remove URLs and emails", - "chunkStrategies": { - "recursive": "Recursive", - "markdown": "Markdown", - "fixed": "Fixed Size", - "sentence": "Sentence", - "auto": "Auto (Recommended)", - "qa": "Q&A" - }, - "retrievalModes": { - "vector": "Vector Search", - "fulltext": "Full-text Search", - "hybrid": "Hybrid Search" - }, - "embeddingModelTooltip": "Model for converting text to vectors, directly affects semantic search quality. Different models support different languages and dimensions", - "embeddingModelSettingsTooltip": "Model for converting text to vectors, directly affects semantic search quality. Documents need to be re-indexed after changing the model", - "chunkStrategyTooltip": "Document chunking strategy. auto: automatically select best strategy; recursive: recursive splitting, versatile; markdown: split by headings; fixed: fixed length; sentence: by sentence; qa: AI auto-split into Q&A pairs", - "chunkStrategySettingsTooltip": "Document chunking strategy. auto: auto select; recursive: recursive splitting; markdown: split by headings; fixed: fixed length; sentence: by sentence; qa: AI split into Q&A pairs", - "indexingTechniqueTooltip": "High quality: uses Embedding vectorization, high retrieval accuracy but resource-intensive; Economy: keyword-only indexing, low resource usage but limited accuracy", - "retrievalModeTooltip": "Hybrid: uses both semantic vectors and keyword matching, recommended for most scenarios; Vector: based on semantic similarity; Full-text: based on exact keyword matching", - "chunkSizeTooltip": "Maximum characters per document chunk. Larger chunks preserve more context but may introduce noise, smaller chunks are more precise but may lose context. Recommended: 300~800", - "chunkSizeSettingsTooltip": "Maximum characters per chunk, larger preserves more context but may introduce noise. Recommended: 300~800", - "chunkOverlapTooltip": "Overlapping characters between adjacent chunks to ensure information at chunk boundaries is not lost. Recommended: 10%~20% of chunk size", - "chunkOverlapSettingsTooltip": "Overlapping characters between adjacent chunks to preserve boundary information. Recommended: 10%~20% of chunk size", - "globalVisibleTooltip": "When enabled, all applications can use this knowledge base; otherwise only the current application", - "dimensionsTooltip": "Embedding vector dimensions, must match the selected Embedding model. Higher dimensions provide richer semantic representation but increase storage and computation costs", - "topKTooltip": "Number of most relevant segments returned per retrieval. Higher values provide richer context but may introduce noise. Recommended: 3~5", - "scoreThresholdTooltip": "Only return results with similarity above this threshold. Higher values mean more precise matches but may miss relevant content. Recommended: 0.5~0.7", - "rerankTooltip": "When enabled, performs secondary ranking on initial retrieval results, significantly improving accuracy but adding latency and cost", - "retrievalWeightTooltip": "Weight coefficient for this knowledge base in multi-KB retrieval. Higher values rank this KB's results higher", - "processRulesTooltip": "Text cleaning rules before document indexing. Removes extra spaces, URLs, emails and other irrelevant content to improve retrieval quality" - }, - "knowledgeNode": { - "selectKb": "Select knowledge base", - "queryText": "Query Text", - "queryPlaceholder": "Enter query text or use variable reference", - "queryHint": "Leave empty to use user input, supports {'{{variable}}'} references", - "retrievalMode": "Retrieval Mode", - "useKbDefault": "Use knowledge base default", - "vector": "Vector Search", - "fulltext": "Full-text Search", - "hybrid": "Hybrid Search", - "outputVar": "Result Variable", - "contextVar": "Context Variable", - "rerankEnabled": "Enable Rerank", - "rerankHint": "Use Rerank model to reorder results after retrieval for better relevance", - "rerankModel": "Rerank Model", - "noRerankModel": "No Rerank model configured, please add one in Model Management", - "outputVariables": "Output Variables", - "resultsArrayDesc": "Array of retrieval results with segment_id, content, score, etc.", - "contextTextDesc": "Concatenated context text, ready for LLM node prompts", - "totalCountDesc": "Total count of retrieval results" - }, - "workflow": { - "title": "Workflow", - "create": "Create Workflow", - "createSuccess": "Created successfully", - "saveSuccess": "Saved successfully", - "published": "Published", - "unpublished": "Unpublished", - "editing": "Editing", - "publishSuccess": "Published successfully", - "publishFailed": "Failed to publish", - "copySuccess": "Copied successfully", - "deleteSuccess": "Deleted successfully", - "deleteConfirm": "Are you sure to delete workflow \"{name}\"?", - "deleteTitle": "Delete Confirmation", - "operationFailed": "Operation failed", - "searchPlaceholder": "Search workflow name", - "search": "Search", - "noDescription": "No description", - "empty": "No workflows", - "mainApp": "Main App", - "edit": "Edit", - "editInfo": "Edit Info", - "design": "Design", - "publish": "Publish", - "run": "Run", - "copy": "Copy", - "delete": "Delete", - "disable": "Disable", - "form": { - "name": "Name", - "namePlaceholder": "Please enter workflow name", - "nameRequired": "Please enter name", - "code": "Code", - "codePlaceholder": "Please enter unique code", - "codeRequired": "Please enter code", - "codeFormat": "Code must start with a letter and contain only letters, numbers and underscores", - "type": "Type", - "description": "Description", - "descriptionPlaceholder": "Please enter description", - "globalVisible": "Visible to Sub-apps" - }, - "status": { - "draft": "Draft", - "published": "Published", - "disabled": "Disabled" - }, - "type": { - "general": "General", - "application": "Application", - "form": "Form", - "report": "Report", - "dataProcess": "Data Process", - "automation": "Automation" - }, - "deleteConfirmSimple": "Are you sure to delete this workflow? This action cannot be undone.", - "copyConfirm": "Are you sure to copy workflow \"{name}\"?", - "copyTitle": "Copy Confirmation", - "deleteButton": "Delete", - "cancelButton": "Cancel", - "copyButton": "Copy", - "editWorkflow": "Edit Workflow", - "importExport": { - "export": "Export", - "import": "Import Config", - "exportSuccess": "Workflow config exported", - "exportFailed": "Export failed", - "importTitle": "Import Workflow Config", - "dragOrClick": "Drag a JSON file here or click to upload", - "onlyJson": "Only .json files are supported", - "fileParseError": "Failed to parse file. Please check the format", - "checking": "Checking...", - "codeConflictTip": "Workflow code already exists. Please change the code before importing", - "codeAvailable": "Workflow code is available", - "newCodePlaceholder": "Enter a new workflow code", - "importSuccess": "Workflow config imported successfully", - "importFailed": "Import failed", - "confirmImport": "Confirm Import", - "reselect": "Reselect", - "workflowInfo": "Workflow Info", - "appTip": "Imported workflow will belong to the current application as draft", - "subflowTip": "Subflow nodes are matched by code; re-select in editor if subflows are missing in target environment" - }, - "nodeLabel": "Node Name", - "nodes": { - "knowledge_retrieval": "Knowledge Retrieval", - "common": { - "configured": "Configured", - "notConfigured": "Not configured", - "yes": "Yes", - "no": "No", - "output": "Output:", - "outputVariable": "Output variable:", - "inputVariablesCount": "{count} input variable(s) configured", - "noInputVariables": "No input variables", - "outputVariablesCount": "{count} output variable(s) configured", - "noOutputVariables": "No output variables", - "addNextNode": "Add next node", - "question": "Question:", - "configureQuestion": "Please configure question", - "conditions": "Conditions: {count}", - "selectModel": "Select model" - }, - "start": { - "label": "Start", - "desc": "Starting node of the flow" - }, - "end": { - "label": "End", - "desc": "End flow and output results" - }, - "llm": { - "label": "LLM", - "desc": "Call large language model for processing", - "systemPrompt": "System prompt:", - "userPrompt": "User prompt:" - }, - "code": { - "label": "Code Execution", - "desc": "Execute Python/JavaScript code", - "language": "Language:", - "input": "Input:" - }, - "condition": { - "label": "Condition Branch", - "desc": "Execute different branches based on conditions", - "unnamed": "Unnamed" - }, - "http": { - "label": "HTTP Request", - "desc": "Call external API" - }, - "template": { - "label": "Template Render", - "desc": "Combine text using Jinja2 syntax" - }, - "variable": { - "label": "Variable Assignment", - "desc": "Set or transform variable values" - }, - "question": { - "label": "Question Node", - "desc": "Ask user a question and wait for answer", - "inputType": "Input type:" - }, - "choice": { - "label": "Choice Node", - "desc": "Let user choose from options", - "options": "Options:", - "noOptions": "No options configured", - "multiple": "Multiple", - "single": "Single" - }, - "message": { - "label": "Message Node", - "desc": "Send message to user", - "content": "Message content:", - "configureContent": "Please configure message content", - "messageType": "Message type:" - }, - "confirm": { - "label": "Confirm Node", - "desc": "Wait for user to confirm or cancel", - "confirmText": "Confirm", - "cancelText": "Cancel", - "configureContent": "Please configure confirm content" - }, - "intent": { - "label": "Intent Recognition", - "desc": "AI intelligent intent recognition", - "noMatch": "No match", - "confidenceThreshold": "Confidence threshold:" - }, - "parallel": { - "label": "Parallel Branch", - "desc": "Execute multiple branches simultaneously", - "branch": "Branch {index}" - }, - "merge": { - "label": "Merge", - "desc": "Wait for all branches to complete and merge", - "mergeMode": "Merge mode", - "array": "Array", - "concat": "Concat", - "first": "First", - "object": "Object" - }, - "loop": { - "label": "Loop", - "forEach": "For Each", - "whileLoop": "While Loop", - "nodeCount": "{count} node(s)", - "iteration": "Iteration {current}/{total}", - "iterationNoTotal": "Iteration {current}", - "maxIterations": "Max {max} iterations", - "loopCondition": "Loop condition", - "availableVariables": "Available variables:", - "dragNodeHere": "Drag nodes here as loop body" - }, - "subflow": { - "label": "Subflow", - "desc": "Call sub-workflow", - "subflowLabel": "Subflow:", - "notSelected": "No subflow selected", - "varPassMode": "Variable passing:", - "all": "All", - "selected": "Selected", - "none": "None", - "progress": "Progress:", - "current": "Current: {label}", - "subflowNodes": "Subflow nodes", - "loading": "Loading...", - "emptySubflow": "Subflow is empty", - "selectSubflow": "Please select a subflow" - }, - "db_query": { - "label": "Query", - "desc": "Query data from database", - "noTable": "No table selected", - "returnMode": "Return:", - "limit": "Limit: {count} rows" - }, - "db_insert": { - "label": "Insert", - "desc": "Insert data into database", - "noTable": "No table selected", - "fieldMapping": "Field mapping:", - "upsert": "Upsert:" - }, - "db_update": { - "label": "Update", - "desc": "Update database records", - "noTable": "No table selected", - "updateFields": "Update fields:" - }, - "db_delete": { - "label": "Delete", - "desc": "Delete data from database", - "noTable": "No table selected", - "mustSetCondition": "Conditions required" - }, - "db_sql": { - "label": "SQL Execute", - "desc": "Execute custom SQL statements", - "query": "Query", - "execute": "Execute", - "notConfigured": "Not configured" - }, - "app_create": { - "label": "Create App", - "desc": "Create a new app/sub-app", - "appName": "App name:", - "appCode": "App code:", - "updateIfExists": "Update if exists:" - }, - "app_design": { - "label": "App Design", - "desc": "Display app design, support confirm or edit", - "designTitle": "Design title:", - "needConfirm": "Need confirm:" - }, - "app_settings": { - "label": "App Settings", - "desc": "Configure app settings including theme and layout", - "appName": "App name:", - "layoutMode": "Layout mode:", - "builtinTheme": "Built-in theme:", - "needConfirm": "Need confirm:" - }, - "app_update": { - "label": "App Update", - "desc": "Execute app configuration update", - "settingsSource": "Settings source:", - "app": "App:", - "target": "Target:", - "mainApp": "Main app" - }, - "form_basic_info": { - "label": "Form Basic Info", - "desc": "Process form basic information", - "formName": "Form name:", - "formCode": "Form code:", - "autoGenerate": "Auto generate", - "formType": "Form type:", - "workflow": "Workflow", - "normal": "Normal" - }, - "form_create": { - "label": "Form Create", - "desc": "Save form config to database", - "updateIfExists": "Update if exists:" - }, - "form_data": { - "label": "Form Data", - "desc": "Form data operations", - "create": "Create Form Data", - "createDesc": "Create new form data record", - "read": "Read Form Data", - "readDesc": "Read specified form data record", - "update": "Update Form Data", - "updateDesc": "Update existing form data record", - "delete": "Delete Form Data", - "deleteDesc": "Delete specified form data record", - "list": "Query Form Data", - "listDesc": "Query form data list", - "schemaToLLM": "Form to LLM Schema", - "schemaToLLMDesc": "Convert form config to LLM structured output", - "formCode": "Form code:", - "recordId": "Record ID:", - "updateData": "Update data:", - "createData": "Create data:", - "filterCondition": "Filter condition:" - }, - "form_db_create": { - "label": "DB Table Create", - "desc": "Create database and tables", - "operation": "Operation:", - "createTable": "Create table", - "tableExists": "Table exists:", - "dropRecreate": "Drop & recreate", - "error": "Error", - "skip": "Skip", - "autoCreateSchema": "Auto create:", - "schemaIfNotExists": "Schema:" - }, - "form_db_design": { - "label": "DB Table Design", - "desc": "Validate and standardize DB table structure", - "database": "Database:", - "mainTable": "Main table:", - "subTable": "Sub table:", - "noSubTable": "None", - "systemFields": "System fields:", - "autoAdd": "Auto add", - "noAdd": "No add" - }, - "form_list_design": { - "label": "List UI Design", - "desc": "Generate list config from form UI design", - "containerType": "Container type:", - "drawer": "Drawer", - "dialog": "Dialog", - "page": "Page", - "pageSize": "Page size:", - "autoQueryFields": "Auto query fields:", - "autoColumns": "Auto columns:" - }, - "form_publish": { - "label": "Form Publish", - "desc": "Publish form to menu system", - "menuName": "Menu name:", - "notSet": "Not set", - "menuIcon": "Menu icon:" - }, - "form_ui_design": { - "label": "Form UI Design", - "desc": "Generate form UI config from DB structure", - "layoutMode": "Layout mode:", - "auto": "Auto", - "singleCol": "Single column", - "doubleCol": "Double column", - "tripleCol": "Triple column", - "formName": "Form name:", - "enableGrouping": "Enable grouping:", - "hideSystemFields": "Hide system fields:" - }, - "dashboard_basic_info": { - "label": "Dashboard Basic Info", - "desc": "Configure dashboard basic info", - "name": "Name:", - "code": "Code:", - "category": "Category:" - }, - "dashboard_create": { - "label": "Dashboard Create", - "desc": "Save dashboard config to database", - "basicInfo": "Basic info:", - "pageConfig": "Page config:", - "updateIfExists": "Update if exists:" - }, - "dashboard_design": { - "label": "Dashboard Design", - "desc": "Design dashboard layout and components", - "title": "Title:", - "needConfirm": "Confirm:", - "need": "Required", - "notNeed": "Not required" - }, - "dashboard_publish": { - "label": "Dashboard Publish", - "desc": "Publish dashboard to menu system", - "dashboard": "Dashboard:", - "menuName": "Menu name:", - "icon": "Icon:" - }, - "knowledge_retrieval_node": { - "label": "Knowledge Retrieval", - "desc": "Retrieve relevant documents from knowledge base", - "kbCount": "{count} knowledge base(s)", - "topKThreshold": "Top {topK} · Threshold {threshold}", - "vector": "Vector search", - "fulltext": "Full-text search", - "hybrid": "Hybrid search" - }, - "system_summary": { - "label": "System Summary", - "desc": "Collect and display AI-created system info", - "title": "Title:", - "showStatistics": "Show statistics:", - "appInfo": "App info:", - "formResult": "Form result:", - "dashboard": "Dashboard:" - }, - "snowflake_cortex_llm": { - "label": "Snowflake Cortex LLM", - "desc": "Snowflake Cortex AI functions", - "function": "Function:", - "complete": "LLM Complete", - "summarize": "Summarize", - "translate": "Translate", - "sentiment": "Sentiment", - "extractAnswer": "Extract Answer", - "selectFunction": "Select", - "model": "Model:", - "prompt": "Prompt:", - "translateLabel": "Translate:", - "inputText": "Input text:" - }, - "snowflake_cortex_analyst": { - "label": "Snowflake Cortex Analyst", - "desc": "Natural language data query", - "nlQuery": "Natural language query", - "questionLabel": "Question:", - "semanticModel": "Semantic model:" - }, - "text_to_sql": { - "label": "Text to SQL", - "desc": "Natural language to SQL query", - "notConfigured": "Query not configured", - "chartRecommend": "Chart recommendation" - } - }, - "editor": { - "categories": { - "basic": "Basic Nodes", - "formDesign": "Form Design", - "formData": "Form Data", - "dialog": "Dialog Interaction", - "database": "Database", - "flowControl": "Flow Control", - "appManage": "App Management", - "dashboard": "Dashboard", - "knowledge": "Knowledge Base" - }, - "nodeLabels": { - "start": "Start", - "end": "End", - "llm": "LLM Model", - "http": "HTTP Request", - "code": "Code Execution", - "condition": "Condition Branch", - "template": "Template Render", - "parallel": "Parallel Branch", - "merge": "Merge", - "loop": "Loop", - "intent": "Intent Recognition", - "subflow": "Subflow", - "db_insert": "DB Insert", - "db_update": "DB Update", - "db_query": "DB Query", - "db_delete": "DB Delete", - "db_sql": "SQL Execute", - "text_to_sql": "Text-to-SQL", - "message": "Send Message", - "question": "Question Input", - "choice": "Choice Select", - "confirm": "Confirm Action", - "form_basic_info": "Form Basic Info", - "form_database_design": "Table Structure Design", - "form_database_create": "Database Table Create", - "form_ui_design": "Form UI Design", - "form_list_design": "List UI Design", - "form_create": "Form Create", - "form_publish": "Form Publish", - "form_data_create": "Create Data", - "form_data_read": "Read Data", - "form_data_update": "Update Data", - "form_data_delete": "Delete Data", - "form_data_list": "Query List", - "form_schema_to_llm": "Form to LLM Schema", - "app_create": "Create App", - "app_design": "App Design", - "app_settings": "App Settings", - "app_update": "App Update", - "dashboard_basic_info": "Dashboard Basic Info", - "dashboard_design": "Dashboard Design", - "dashboard_create": "Dashboard Create", - "dashboard_publish": "Dashboard Publish", - "system_summary": "System Summary", - "knowledge_retrieval": "Knowledge Retrieval", - "snowflake_cortex_llm": "Cortex LLM", - "snowflake_cortex_analyst": "Cortex Analyst" - }, - "rename": "Rename", - "renamePrompt": "Please enter new node name", - "confirmBtn": "OK", - "cancelBtn": "Cancel", - "addedToLoop": "Added to loop body", - "autoInserted": "Node auto-inserted", - "saveFailed": "Save failed", - "publishFailed": "Publish failed", - "publishPrompt": "Enter version description (optional)", - "publishTitle": "Publish Workflow", - "publishBtn": "Publish", - "publishPlaceholder": "e.g.: Fixed XX issue, added XX feature", - "publishVersionSuccess": "Published successfully! Version: v{version}", - "workflowHasIssues": "Workflow has issues:", - "workflowIncomplete": "Workflow configuration is incomplete, please fix issues first", - "validation": { - "missingStart": "Missing start node", - "multipleStart": "Only one start node allowed", - "missingEnd": "Missing end node", - "startNoConnection": "Start node is not connected to other nodes", - "endNoConnection": "End node is not connected", - "llmNoModel": "LLM node has no model configured", - "httpNoUrl": "HTTP node has no URL configured", - "parallelMinBranches": "Parallel node requires at least 2 branches", - "mergeMinInputs": "Merge node requires at least 2 inputs" - }, - "toolbar": { - "save": "Save", - "publish": "Publish", - "run": "Run", - "chat": "Chat Test", - "versions": "Version History", - "back": "Back", - "undo": "Undo", - "redo": "Redo", - "zoomIn": "Zoom In", - "zoomOut": "Zoom Out", - "fitView": "Fit View", - "minimap": "Minimap", - "addNode": "Add Node", - "searchNode": "Search nodes...", - "saved": "Saved", - "saving": "Saving...", - "unsaved": "Unsaved" - }, - "contextMenu": { - "rename": "Rename", - "duplicate": "Duplicate", - "delete": "Delete" - }, - "panel": { - "propertyConfig": "Properties", - "noConfig": "No configuration available" - }, - "dbConnection": { - "connectionLabel": "Database Connection", - "databaseHint": "Leave empty to use the connection default; variables like {'{{target_db}}'} are supported", - "databaseInputPlaceholder": "Type manually or insert a variable", - "databaseLabel": "Target Database", - "databaseOracleHint": "For Oracle, the database/service is defined in the connection settings", - "databaseOraclePlaceholder": "Usually leave empty", - "databasePlaceholder": "Select target database (optional)", - "defaultWriteWarning": "Write operation uses the platform default database. Please verify the environment." - }, - "confirmMode": { - "always": "Always Confirm", - "never": "Never Confirm", - "variable": "Variable Control", - "placeholder": "Select or enter variable, e.g. {'{{need_confirm}}'}", - "hint": "Confirm when value is true/1/yes, skip when false/0/no" - }, - "smartInput": { - "insertVariable": "Insert Variable" - }, - "schemaConfigDialog": { - "title": "Structured Output Config", - "visual": "Visual", - "addField": "Add Field", - "emptyHint": "Click \"Add Field\" to define data structure, or switch to JSON mode to paste directly", - "fieldName": "Field Name", - "description": "Description", - "required": "Required", - "advancedConfig": "Advanced", - "advancedConfigEnumDefault": "Advanced (enum, default)", - "advancedConfigMinMaxDefault": "Advanced (min, max, default)", - "enumValues": "Enum Values (enum)", - "enumValuesShort": "Enum:", - "addOption": "Add Option", - "add": "Add", - "enumHint": "Optional, restrict field to one of the specified values", - "optionValue": "Option value", - "defaultValue": "Default:", - "defaultShort": "Default:", - "optional": "Optional", - "minValue": "Min:", - "maxValue": "Max:", - "minShort": "Min:", - "maxShort": "Max:", - "noLimit": "No limit", - "childProperties": "Child Properties", - "noChildProperties": "No child properties", - "nestedProperties": "Nested Properties", - "arrayItemType": "Array Item Type:", - "objectPropertyDef": "Object Property Definition", - "addProperty": "Add Property", - "jsonPreview": "JSON Schema Preview", - "cancel": "Cancel", - "confirm": "OK", - "jsonFormatError": "Invalid JSON format, must contain properties field", - "jsonParseError": "JSON parse error: {message}", - "typeString": "String (string)", - "typeNumber": "Number (number)", - "typeInteger": "Integer (integer)", - "typeBoolean": "Boolean (boolean)", - "typeArray": "Array (array)", - "typeObject": "Object (object)" - }, - "tableSelectModal": { - "title": "Table Selection", - "step1": "Select Tables", - "step2": "Design Relations", - "prevStep": "Previous", - "nextStep": "Next", - "confirmSelect": "Confirm Selection", - "close": "Close", - "database": "Database", - "refresh": "Refresh", - "refreshSuccess": "Refreshed successfully", - "loading": "Loading...", - "fieldOf": "{table} Fields", - "fieldPreview": "Field Preview", - "clickToPreview": "Click a table to preview fields", - "noFields": "No field information", - "selectedTables": "Selected Tables", - "clearAll": "Clear All", - "clickCheckboxHint": "Click the checkbox on the left to add tables", - "fieldsCount": "{count} fields", - "sameDbWarning": "Can only select tables from the same database/schema", - "selectAtLeastTwo": "Please select at least two tables to add a relation", - "selectAtLeastOne": "Please select at least one table", - "completeRelations": "Please complete all relation configurations", - "tableRelations": "Table Relations", - "addRelation": "Add Relation", - "selectTwoTablesFirst": "Please select at least two tables first", - "noRelations": "No table relations", - "addRelationHint": "Click \"Add Relation\" to create associations between tables", - "relationIndex": "Relation {index}", - "delete": "Delete", - "sourceTable": "Source Table", - "selectTable": "Select Table", - "selectField": "Select Field", - "relationType": "Relation Type", - "oneToOne": "One-to-One (1:1)", - "oneToMany": "One-to-Many (1:N)", - "manyToOne": "Many-to-One (N:1)", - "manyToMany": "Many-to-Many (M:N)", - "targetTable": "Target Table", - "hint": "Tip: Table relations help AI understand associations between tables for more accurate JOIN queries" - }, - "tableSelectDialog": { - "title": "Select Table", - "loadConfigFailed": "Failed to load database config", - "selectTableFirst": "Please select a table first", - "refreshSuccess": "Refreshed successfully", - "database": "Database", - "refresh": "Refresh", - "loading": "Loading...", - "current": "Current", - "fieldList": "{table} Field List", - "fieldPreview": "Field Preview", - "clickToPreview": "Click a table to preview fields, double-click to select", - "noFields": "No field information", - "cancel": "Cancel", - "confirmSelect": "Confirm Selection" - }, - "runPanel": { - "runPreview": "Run Preview", - "inputVariables": "Input Variables", - "noVariablesHint": "No input variables, please configure in the \"Start\" node", - "inputPlaceholder": "Please enter {type}", - "startRun": "Start Run", - "stopRun": "Stop Run", - "clearStatus": "Clear Status", - "execStatus": "Execution Status", - "running": "Running", - "nodes": "Nodes", - "llmOutput": "LLM Output", - "parallelBranches": "Parallel Branches ({count})", - "branchResults": "Branch Results:", - "parallelExec": "Parallel Execution", - "input": "Input", - "output": "Output", - "runResult": "Run Result", - "success": "Success", - "failed": "Failed", - "execFailed": "Execution failed", - "workflowExecFailed": "Workflow execution failed", - "userStopped": "User stopped" - }, - "chatPanel": { - "runPreview": "Run Preview", - "configVariables": "Configure Input Variables", - "assistantName": "Workflow", - "placeholder": "Enter message to run workflow...", - "emptyText": "Enter a message to start running workflow", - "execFailed": "Execution failed", - "workflowExecFailed": "Workflow execution failed", - "workflowComplete": "Workflow execution completed", - "resumeFailed": "Resume failed", - "resumeWorkflowFailed": "Resume workflow execution failed", - "waitingInput": "Waiting for input...", - "pleaseSelect": "Please select:", - "confirm": "Confirm", - "pleaseConfirm": "Please confirm to continue?", - "pleaseInput": "Please input:", - "cancel": "Cancel", - "userStopped": "User stopped", - "confirmDesign": "Confirm Design", - "confirmAppDesign": "Confirm App Design", - "confirmAppSettings": "Confirm App Settings", - "confirmDashboardBasicInfo": "Confirm Dashboard Basic Info", - "confirmDashboardDesign": "Confirm Dashboard Design", - "publishToMenu": "Publish to menu: {name}", - "complete": "Complete", - "startRun": "Start Run", - "inputVariable": "Please enter {variable}", - "appDesignTitle": "App Design Plan", - "appSettingsTitle": "App Settings", - "dashboardBasicInfoTitle": "Dashboard Basic Info", - "dashboardDesignTitle": "Dashboard Design", - "dashboardPublishTitle": "Dashboard Publish Confirmation", - "systemSummaryTitle": "System Creation Complete", - "designPreviewTitle": "Design Preview", - "designPreviewHint": "Please confirm or edit the design in the right panel" - }, - "nodeResultCard": { - "failed": "Failed", - "pending": "Pending", - "running": "Running", - "success": "Completed", - "unknown": "Unknown", - "noOutput": "(No output)", - "execFailed": "Execution failed", - "elapsed": "Elapsed:", - "iteration": "Iteration:", - "fullscreen": "Fullscreen", - "input": "Input", - "output": "Output", - "errorInfo": "Error Info" - }, - "variableSelector": { - "searchPlaceholder": "Search variables...", - "noVariables": "No available variables", - "system": "System", - "field": "Field", - "structured": "Structured", - "userChoice": "User Choice", - "choiceText": "Choice Text", - "execResult": "Execution Result (result)", - "confirmed": "Confirmed (true/false)", - "deleteResult": "Delete Result", - "affectedRows": "Affected Rows", - "insertResult": "Insert Result", - "insertId": "Insert ID", - "queryResult": "Query Result", - "resultCount": "Result Count", - "sqlResult": "SQL Result", - "updateResult": "Update Result", - "responseBody": "Response Body", - "statusCode": "Status Code", - "jsonString": "JSON String", - "structuredData": "Structured Data Object", - "tokenUsage": "Token Usage", - "llmResponse": "LLM Response Text", - "currentLoopItem": "Current Loop Item", - "currentIndex": "Current Index", - "loopResults": "Loop Results Array", - "mergeResult": "Merge Result", - "branchCount": "Branch Count", - "userAnswer": "User Answer", - "isValid": "Is Valid", - "queryResultData": "Query Result Data", - "generatedSql": "Generated SQL", - "rawResponse": "Raw Response", - "cortexLlmResponse": "Cortex LLM Response", - "userInput": "User Input", - "appId": "Sub-App ID", - "appCode": "Sub-App Code", - "formCode": "Form Code", - "renderResult": "Render Result", - "generatedSqlStatement": "Generated SQL Statement", - "sqlThought": "SQL Generation Thought", - "formBasicInfoObj": "Form Basic Info Object", - "formName": "Form Name", - "formType": "Form Type", - "formDescription": "Form Description", - "formSort": "Sort Value", - "dbDesignObj": "Database Design Object", - "tableName": "Table Name", - "fieldCount": "Field Count", - "creationResult": "Creation Result Object", - "allTablesReady": "All Tables Ready", - "createdCount": "Created Table Count", - "errorCount": "Error Count", - "schemaName": "Schema Name", - "formUiDesign": "Form UI Design Config", - "groupCount": "Group Count", - "listConfig": "List Config", - "queryFieldCount": "Query Field Count", - "columnCount": "Column Count", - "formId": "Form ID", - "formMeta": "Form Metadata", - "menuId": "Menu ID", - "routePath": "Route Path", - "publishResult": "Publish Result", - "appName": "App Name", - "createSuccess": "Created Successfully", - "designContent": "Design Content", - "designTitle": "Design Title", - "isConfirmed": "Is Confirmed", - "appSettings": "App Settings Config", - "updateSuccess": "Update Successful", - "configId": "Config Record ID", - "updateMessage": "Update Result Message", - "dashboardBasicInfo": "Dashboard Basic Info", - "dashboardName": "Dashboard Name", - "dashboardCode": "Dashboard Code", - "pageConfig": "Page Design Config", - "dashboardId": "Dashboard ID", - "pageMeta": "Page Metadata", - "summaryData": "Summary Data", - "totalForms": "Total Forms", - "hasApp": "Has App", - "hasDashboard": "Has Dashboard", - "subflowFullResult": "Subflow Full Result", - "execSuccess": "Execution Successful", - "subflowOutputVars": "Subflow Output Variables", - "allSubflowVars": "(All Subflow Output Variables)", - "fromSubflow": "From Subflow", - "output": "Output", - "knowledgeResults": "Retrieval Results Array", - "knowledgeContext": "Concatenated Context Text", - "knowledgeResultsTotal": "Total Results Count" - }, - "versionHistory": { - "title": "Version History", - "loadFailed": "Failed to load version history", - "rollbackConfirm": "Are you sure to rollback to v{version}? The current draft will be overwritten.", - "rollbackTitle": "Rollback Confirmation", - "rollbackBtn": "Confirm Rollback", - "rollbackSuccess": "Rolled back to v{version}", - "rollbackFailed": "Rollback failed", - "rollback": "Rollback", - "noDescription": "No description", - "runCount": "Runs: {count}", - "successCount": "Success: {count}", - "empty": "No version history" - } - }, - "panels": { - "common": { - "nodeName": "Node Name", - "add": "Add", - "delete": "Delete", - "noInputVars": "No input variables", - "noOutputVarsClickAdd": "No output variables, click above to add", - "noVars": "No variables", - "noCustomVarsClickAdd": "No custom variables, click above to add", - "inputVars": "Input Variables", - "outputVars": "Output Variables", - "outputVarName": "Output Variable Name", - "variableName": "Variable name", - "defaultValue": "Default value", - "customVars": "Custom Variables", - "sysVar": "System variable (cannot delete)", - "configured": "Configured", - "notConfigured": "Not configured", - "yes": "Yes", - "no": "No", - "output": "Output", - "selectModel": "Select model", - "model": "Model", - "usage": "Usage", - "usageTips": "Usage Tips", - "confirmMode": "Confirm Mode", - "varRef": "Supports variable reference, e.g.: ", - "selectTable": "Select Table", - "targetTable": "Target Table", - "tablePlaceholder": "Click the button on the right to select a table", - "tableFields": "Table Fields", - "availableFields": "Available Fields", - "fieldMapping": "Field Mapping", - "addField": "Add Field", - "addCondition": "Add Condition", - "queryConditions": "Query Conditions", - "field": "Field", - "value": "Value", - "variable": "Variable", - "noConditionQueryAll": "No conditions will query all data", - "noCondition": "No conditions", - "returnFields": "Return Fields", - "returnFieldsHint": "* for all fields, separate multiple fields with commas", - "orderBy": "Order By", - "limitRows": "Limit Rows", - "resultSavedTo": "Query results (array) will be saved to this variable", - "insertResultSavedTo": "Insert result will be saved to this variable", - "updateResultSavedTo": "Update result will be saved to this variable", - "deleteResultSavedTo": "Delete result will be saved to this variable", - "sqlResultSavedTo": "SQL execution result will be saved to this variable", - "clickFieldToAdd": "Click field to quickly add to mapping", - "clickAddField": "Click \"Add Field\" or click table fields above to add", - "selectField": "Select field", - "dbField": "Database field", - "varValue": "Variable value", - "upsert": "Update if exists (UPSERT)", - "upsertHint": "If checked, update existing records, otherwise insert", - "judgeCondition": "Match Condition", - "addJudgeConditionHint": "Please add conditions to check if record exists", - "outputVarTitle": "Output Variables", - "advancedSettings": "Advanced Settings", - "tableFieldsRef": "Table Fields Reference" - }, - "template": { - "label": "Template", - "placeholder": "Template", - "templateContent": "Template Content" - }, - "end": { - "outputContent": "Output Content", - "outputPlaceholder": "Enter content to return to user, use {'{{variable}}'} to reference context variables", - "outputHint": "This content will be displayed in the chat, click / to select variables", - "noOutputVars": "No output variables, click above to add", - "type": "Type" - }, - "message": { - "label": "Message Node", - "placeholder": "Message Node", - "content": "Message Content", - "contentPlaceholder": "Enter message content to send to user, supports variables like {'{{variable}}'}", - "contentHint": "This message will be sent to the user, workflow will not pause", - "messageType": "Message Type", - "plainText": "Plain Text" - }, - "confirm": { - "label": "Confirm Node", - "placeholder": "Confirm Node", - "dialogTitle": "Dialog Title", - "titlePlaceholder": "Confirm", - "content": "Confirm Content", - "contentPlaceholder": "Enter content for user confirmation, supports variables like {'{{variable}}'}", - "contentHint": "Workflow will pause, waiting for user to click confirm or cancel", - "confirmBtnText": "Confirm Button Text", - "cancelBtnText": "Cancel Button Text", - "confirmPlaceholder": "Confirm", - "cancelPlaceholder": "Cancel", - "outputHint": "User confirm returns true, cancel returns false", - "smartIntent": "Smart Intent Recognition", - "smartIntentHint": "When user inputs text (instead of clicking buttons), use LLM to determine user intent.\nBy default, keyword matching is used (e.g. \"ok\", \"yes\" for confirm, \"no\", \"cancel\" for cancel).", - "intentModel": "Intent Recognition Model", - "intentModelHint": "When keyword matching fails, use this model for intent recognition" - }, - "merge": { - "label": "Merge", - "placeholder": "Merge", - "mergeMode": "Merge Mode", - "objectMode": "Object (by branch ID)", - "arrayMode": "Array", - "firstMode": "First Only", - "concatMode": "String Concat", - "objectDesc": "Merge branch results into object, keyed by branch ID", - "arrayDesc": "Merge branch results into array", - "firstDesc": "Take only the first completed branch result", - "concatDesc": "Concatenate branch results into string", - "separator": "Separator", - "usageTip1": "Merge node waits for all parallel branches to complete", - "usageTip2": "Merged results are stored in the output variable", - "usageTip3": "Reference merged results via {template}" - }, - "parallel": { - "label": "Parallel Branch", - "placeholder": "Parallel Branch", - "title": "Parallel Branches", - "addBranch": "Add Branch", - "branchHint": "All branches execute simultaneously, converging at the merge node", - "branchName": "Branch name", - "branch": "Branch {index}", - "usageTip1": "Connect each branch output to different nodes", - "usageTip2": "All branches must connect to the same merge node", - "usageTip3": "Nodes within branches execute in parallel" - }, - "start": { - "userInputDesc": "User input from the chat box, automatically passed to this variable", - "appIdDesc": "Auto-injected actual ID in sub-app, 'main' in main app mode", - "appCodeDesc": "Auto-injected app code in sub-app, empty in main app mode", - "formCodeDesc": "Auto-injected form code when called from form list, empty otherwise" - }, - "choice": { - "label": "Choice Node", - "placeholder": "Choice Node", - "questionContent": "Question Content", - "questionPlaceholder": "Enter question or prompt text", - "outputHint": "User's selection will be saved to this variable", - "optionList": "Option List", - "addOption": "Add Option", - "optionValue": "Option value", - "displayText": "Display text", - "optionDesc": "Option description (optional)", - "option": "Option {index}", - "allowMultiple": "Allow Multiple", - "minSelect": "Min Select", - "maxSelect": "Max Select" - }, - "question": { - "label": "Question Node", - "placeholder": "Question Node", - "questionContent": "Question Content", - "questionPlaceholder": "Enter question to ask user, supports variables like {'{{variable}}'}", - "outputHint": "User's answer will be saved to this variable", - "renderInput": "Render Input Box", - "renderInputHint": "When off, user types in chat box; when on, shows dedicated input", - "inputType": "Input Type", - "text": "Text", - "number": "Number", - "email": "Email", - "phone": "Phone", - "date": "Date", - "placeholderText": "Placeholder Text", - "placeholderHint": "Input placeholder text", - "defaultValueLabel": "Default Value", - "defaultValueHint": "Optional default value", - "required": "Required", - "validationRegex": "Validation Regex", - "validationRegexHint": "Regular expression for validating user input format", - "validationMessage": "Validation Error Message", - "validationDefault": "Invalid input format" - }, - "http": { - "label": "HTTP Request", - "placeholder": "HTTP Request", - "addParam": "Add Param", - "addHeader": "Add Header", - "bodyHint": "JSON format only, supports variable references like {'{{ variable }}'}", - "settings": "Settings", - "timeout": "Timeout (seconds)" - }, - "code": { - "label": "Code Execution", - "placeholder": "Code Execution", - "timeout": "Timeout (seconds)", - "noInputVars": "No input variables", - "noOutputVars": "No output variables, code return fields will be used as output", - "codePython": "Code (Python)", - "codePlaceholder": "Write code here...", - "expandEditor": "Expand editor" - }, - "llm": { - "label": "LLM", - "placeholder": "LLM", - "systemPrompt": "System Prompt", - "optional": "(optional)", - "systemPromptPlaceholder": "Define AI role and behavior rules, e.g.: You are a professional translator...", - "systemPromptHint": "Set AI role, behavior rules and constraints", - "userPrompt": "User Prompt", - "userPromptPlaceholder": "Enter user question or instruction, supports variables like {'{{variable}}'}...", - "userPromptHint": "User's actual question or instruction, can reference upstream node outputs", - "ragTip": "RAG Tip: Use with Knowledge Retrieval node, reference retrieval results with {knowledgeContext} in prompt", - "outputVarHint": "LLM response will be saved to this variable for downstream nodes", - "outputMode": "Output Mode", - "textOutput": "Text Output", - "structuredOutput": "Structured Output", - "structuredDesc": "Use Function Calling to extract structured JSON data", - "textDesc": "Plain text response", - "schemaSource": "Schema Source", - "staticConfig": "Static Config", - "fromVariable": "From Variable", - "fromVariableDesc": "Get schema config from upstream node (e.g. Form-to-LLM-Schema node)", - "staticConfigDesc": "Manually configure output schema", - "schemaVariable": "Schema Variable", - "schemaVarPlaceholder": "Enter variable name, e.g. {'{{llm_output_schema}}'}", - "schemaVarHint": "Variable value should be a structured output config array, can be generated by Form-to-LLM-Schema node", - "configSchema": "Configure Schema", - "configSchemaHint": "Click Configure Schema to define data structure (supports nested)", - "schemaPreviewHint": "Click JSON above to reconfigure, extracted data will be saved as", - "streaming": "Streaming Output", - "streamingHint": "Enable real-time LLM response output", - "conversationHistory": "Use Conversation History", - "conversationHistoryHint": "Include conversation history as context (requires Agent memory enabled)", - "configStructure": "Config Structure" - }, - "condition": { - "label": "Condition Branch", - "placeholder": "Condition Branch", - "booleanHint": "Boolean check", - "emptyStringHint": "Empty string", - "mainAppHint": "Main app check", - "numberCompareHint": "Number comparison", - "branchList": "Branch List", - "addBranch": "Add Branch", - "branch": "Branch {index}", - "conditions": "Conditions", - "elseBranch": "ELSE (default branch)", - "equals": "Equals", - "notEquals": "Not equals", - "gt": "Greater than", - "gte": "Greater or equal", - "lt": "Less than", - "lte": "Less or equal", - "contains": "Contains", - "notContains": "Not contains", - "startsWith": "Starts with", - "endsWith": "Ends with", - "isEmpty": "Is empty", - "isNotEmpty": "Is not empty", - "numberCompare": "Supports greater than, less than operators", - "noCondition": "No Condition" - }, - "intent": { - "label": "Intent Recognition", - "placeholder": "Intent Recognition", - "selectModelHint": "Select model for intent recognition", - "modelHint": "Select LLM model for analyzing user intent", - "inputVariable": "Input Variable", - "inputVarHint": "Variable containing user input, supports variable reference like {'{{ variable }}'}", - "intentList": "Intent List", - "addIntent": "Add Intent", - "intentIndex": "Intent {index}", - "intentNamePlaceholder": "Intent name (e.g.: consult)", - "name": "Name", - "intentDescPlaceholder": "Intent description (e.g.: User wants to consult product info)", - "description": "Description", - "branchIdPlaceholder": "Branch ID (defaults to name)", - "branchLabel": "Branch", - "exampleSentences": "Example sentences (helps AI recognize more accurately)", - "examplePlaceholder": "Enter example sentence", - "otherBranch": "OTHER (when no intent matches)", - "outputHint": "Recognition result will be saved to this variable, containing intent and confidence", - "confidenceThreshold": "Confidence Threshold", - "confidenceHint": "Below this threshold will go to OTHER branch", - "intentLabel": "Intent" - }, - "loop": { - "label": "Loop", - "placeholder": "Loop", - "loopMode": "Loop Mode", - "forEach": "For Each (Array)", - "whileLoop": "While (Condition)", - "arrayVariable": "Array Variable", - "arrayVarHint": "Array variable to iterate, supports {'{{NodeID.key}}'} format or direct JSON array", - "itemVarName": "Item Variable Name", - "indexVarName": "Index Variable Name", - "loopCondition": "Loop Condition", - "conditionLogic": "Condition Logic", - "allMatch": "All match (AND)", - "anyMatch": "Any match (OR)", - "conditionIndex": "Condition {index}", - "varPlaceholder": "Variable, e.g.: {'{{counter}}'}", - "compareValue": "Compare value", - "addConditionHint": "Click \"Add Condition\" to set loop continuation conditions", - "maxIterations": "Max Iterations", - "maxIterationsHint": "Prevent infinite loops, force stop after this count", - "outputVarHint": "Array variable name storing all loop results", - "usageTip1": "Drag nodes into the loop container as loop body", - "usageTip2": "Nodes in loop body will be executed repeatedly", - "usageTip3ForEach": "Use {item} and {index} inside loop body", - "usageTip3While": "Conditions are re-evaluated after each iteration", - "usageTip4": "After loop completes, results stored in {output}", - "eq": "Equals", - "ne": "Not equals", - "gt": "Greater than", - "gte": "Greater or equal", - "lt": "Less than", - "lte": "Less or equal", - "is_empty": "Is empty", - "is_not_empty": "Is not empty", - "is_true": "Is true", - "is_false": "Is false", - "loopBodyHint1": "In loop body you can use", - "loopBodyHint2": "and" - }, - "subflow": { - "label": "Subflow", - "placeholder": "Subflow", - "selectSubflow": "Select Subflow", - "selectSubflowPlaceholder": "Select subflow to call", - "openInNewTab": "Open in new tab", - "publishedOnly": "Only published workflows shown", - "varPass": "Variable Passing", - "passMode": "Pass Mode", - "passAll": "Pass all variables", - "passSelected": "Select variables", - "passNone": "None", - "varMapping": "Variable Mapping", - "addVarMappingHint": "Click \"Add\" to configure variable passing", - "varIndex": "Variable {index}", - "subflowVarName": "Subflow variable name", - "mainflowVarValue": "Main flow variable value", - "selectVarPlaceholder": "Click variable button to select", - "varMappingHint1": "Subflow variable name: variable name used in subflow", - "varMappingHint2": "Main flow variable value: value passed from main flow (select variable)", - "resultHandling": "Result Handling", - "resultPassMode": "Result Pass Mode", - "resultPassAll": "Pass all results", - "resultPassSelected": "Select results", - "resultPassNone": "None", - "selectResultVars": "Select Result Variables", - "resultVarPlaceholder": "Enter subflow variable name", - "resultVarHint": "Enter variable names to pass back from subflow (variables produced inside subflow)", - "resultVarName": "Result Variable Name", - "resultVarSavedHint": "Complete subflow result stored in this variable, access via {template}", - "maxNestDepth": "Max Nesting Depth", - "maxNestDepthHint": "Prevent infinite recursion, max 5 levels by default", - "showSubflowMessages": "Show Subflow Messages", - "showSubflowMessagesHint": "When enabled, message nodes in subflow will display in main flow chat", - "forwardInteractive": "Forward Interactive Nodes", - "forwardInteractiveHint": "When enabled, Q&A, choice, confirm nodes in subflow will display in main flow", - "usageTip1": "Subflow must be a published workflow", - "usageTip2": "Subflow inherits main flow user context", - "usageTip3": "Pass data between main flow and subflow via variable passing", - "usageTip4": "After subflow completes, results stored in specified variable", - "usageTip5": "Supports nested subflow calls, but avoid circular dependencies" - }, - "appCreate": { - "label": "Create App", - "placeholder": "Create App", - "appName": "App Name", - "appNamePlaceholder": "Enter app name or use variable", - "appNameHint": "Supports variable reference, e.g.: ", - "appCode": "App Code", - "appCodePlaceholder": "Enter app code or use variable", - "appCodeHint": "Unique identifier for URL routing. Only letters, numbers, underscores and hyphens, must start with letter", - "appDesc": "App Description", - "appDescPlaceholder": "Enter app description", - "appIcon": "App Icon", - "appIconPlaceholder": "Enter icon name, e.g. app-window", - "appType": "App Type", - "appTypePlaceholder": "Select app type", - "mixedApp": "Mixed App", - "formApp": "Form App", - "workflowApp": "Workflow App", - "dashboardApp": "Dashboard App", - "screenApp": "Screen App", - "updateIfExists": "Update if exists", - "updateIfExistsHint": "When enabled, update existing app instead of error if code exists", - "createdAppId": "Created app ID", - "appCodeOutput": "App code", - "appNameOutput": "App name", - "successOutput": "Whether created successfully (false if exists)" - }, - "appDesign": { - "label": "App Design", - "placeholder": "App Design", - "designContent": "Design Content", - "designContentPlaceholder": "Enter design content or use variable to reference LLM output", - "designContentHint": "Supports Markdown format, can use variable references, e.g.: ", - "designTitle": "Design Title", - "designTitlePlaceholder": "Enter title, defaults to 'App Design Plan'", - "designContentOutput": "Confirmed design content", - "designTitleOutput": "Design title", - "confirmedOutput": "Whether confirmed" - }, - "appSettings": { - "label": "App Settings", - "placeholder": "App Settings", - "varRefHint": "Supports variable reference, e.g.: ", - "homePath": "Home Path", - "homePathHint": "App home path, supports variable reference", - "logoHint": "Logo image URL or file ID, supports variable reference", - "primaryColorHint": "Theme primary color, e.g. hsl(212 100% 45%)", - "settingsOutput": "Complete app settings config", - "confirmedOutput": "Whether confirmed" - }, - "appUpdate": { - "label": "App Update", - "placeholder": "App Update", - "appSettingsLabel": "App Settings", - "appSettingsPlaceholder": "Use variable to reference app settings node output", - "appSettingsHint": "Use variable to reference app settings node output, e.g.: ", - "appId": "App ID", - "appIdPlaceholder": "Leave empty to update main app config", - "appIdHint": "Target app ID, leave empty to update main app config. Supports variable reference, e.g.: ", - "updateSuccess": "Whether update succeeded", - "configId": "Config record ID", - "updateMessage": "Update result message" - }, - "dbQuery": { - "label": "DB Query", - "placeholder": "DB Query", - "eqOp": "Equals (=)", - "neOp": "Not equals (!=)", - "gtOp": "Greater than (>)", - "gteOp": "Greater or equal (>=)", - "ltOp": "Less than (<)", - "lteOp": "Less or equal (<=)", - "likeOp": "Like (LIKE)", - "inOp": "In list (IN)", - "isNullOp": "Is null (IS NULL)", - "isNotNullOp": "Is not null (IS NOT NULL)" - }, - "dbInsert": { - "label": "DB Insert", - "placeholder": "DB Insert" - }, - "dbUpdate": { - "label": "DB Update", - "placeholder": "DB Update", - "updateConditions": "Update Conditions", - "addUpdateConditionHint": "Please add update conditions, otherwise all records will be updated", - "mustAddCondition": "Must add conditions to prevent updating all rows", - "updateFields": "Update Fields" - }, - "dbDelete": { - "label": "DB Delete", - "placeholder": "DB Delete", - "deleteConditions": "Delete Conditions", - "addDeleteConditionHint": "Please add delete conditions, otherwise all records will be deleted", - "dangerWarning": "Danger: No conditions will delete ALL data in the table!", - "mustAddCondition": "Must add conditions to prevent deleting all rows" - }, - "dbSql": { - "label": "SQL Execute", - "placeholder": "SQL Execute", - "sqlStatement": "SQL Statement", - "sqlPlaceholder": "SELECT * FROM users WHERE status = :status LIMIT :limit", - "sqlHint": "Supports variable references. Ensure SQL safety, avoid SQL injection", - "sqlParams": "SQL Parameters", - "addParam": "Add Parameter", - "paramName": "Param name", - "paramType": "Type", - "paramValue": "Param value", - "noParams": "No parameters. Click \"Add Parameter\"", - "paramsHint": "Param name maps to :param_name in SQL; use variable selector for values", - "affectedRowsHint": "Affected rows count will be saved to this variable", - "cautionWarning": "Use with caution, SQL will be executed directly", - "examples": "Examples", - "execType": "Execution Type", - "executeType": "Execute (No Result)", - "insertExample": "Insert Example", - "paramList": "Parameter List", - "paramOrderHint": "The :param_name placeholders in SQL are bound by parameter name", - "paramValuePlaceholder": "Select or enter upstream variable", - "queryExample": "Query Example", - "queryResultHint": "Query results (array) will be saved to this variable", - "queryType": "Query (Returns Result)", - "sqlParamHint": "Use :param_name as named parameter placeholders; supports variable references", - "statsExample": "Statistics Example", - "updateExample": "Update Example" - }, - "textToSql": { - "desc": "Convert natural language to SQL query", - "queryQuestion": "Query Question", - "queryPlaceholder": "Enter natural language question, e.g.: Show sales comparison by department for last 7 days", - "dataTable": "Data Tables", - "modifySelection": "Modify Selection", - "selectDataTable": "Select Data Tables", - "selectedTables": "{count} tables selected", - "clear": "Clear", - "noTableHint": "When no tables selected, all tables will be analyzed (max 20)", - "includeRelations": "Include Table Relations", - "includeRelationsHint": "Auto-detect foreign key relations to improve multi-table JOIN accuracy", - "llmModel": "LLM Model", - "selectLlmModel": "Select LLM Model", - "sqlSavedHint": "Generated SQL will be saved to this variable", - "sqlOutput": "Generated SQL statement", - "thoughtOutput": "SQL generation reasoning", - "autoAnalyzeHint": "When no table selected, all tables will be auto-analyzed (max 20)", - "dataTables": "Data Tables", - "description": "Convert natural language to SQL query", - "modelRecommendation": "Recommend using GPT-4 or equivalent model for better SQL generation quality", - "outputVarHint": "Generated SQL will be saved to this variable", - "reasoningOutput": "SQL Generation Reasoning", - "selectTables": "Select Tables", - "varRefHint": "Supports variable reference, e.g.:" - }, - "systemSummary": { - "label": "System Summary", - "placeholder": "System Summary", - "formResults": "Form Results List", - "formResultsHint": "Result array from loop node or single form publish node output", - "appName": "App Name", - "appNameHint": "App name, can be variable reference or direct text", - "dashboardName": "Dashboard Name", - "dashboardNameHint": "Dashboard name, can be variable reference or direct text", - "summaryTitle": "Summary Title", - "summaryTitleDefault": "System Creation Complete", - "showStatistics": "Show Statistics", - "showStatisticsHint": "Whether to show module count statistics", - "baseUrl": "Base URL", - "baseUrlPlaceholder": "Leave empty for relative paths", - "baseUrlHint": "Base URL for generating full links (optional)", - "summaryOutput": "Complete summary data", - "totalForms": "Total forms", - "hasApp": "Has app", - "hasDashboard": "Has dashboard", - "useCase": "Use Cases", - "fullAppCreate": "Full app creation: ", - "subAppCreate": "Sub-app module creation: ", - "singleFormCreate": "Single form creation: ", - "formCountOutput": "Form Count", - "formResultList": "Form Result List", - "formResultListHint": "Result array from loop node or output from single form publish node", - "hasAppOutput": "Has App", - "hasDashboardOutput": "Has Dashboard", - "summaryDataOutput": "Full Summary Data", - "showStats": "Show Statistics", - "showStatsHint": "Whether to show module count and other statistics", - "usageScenarios": "Usage Scenarios" - }, - "dashboardBasicInfo": { - "label": "Dashboard Basic Info", - "placeholder": "Dashboard Basic Info", - "name": "Dashboard Name", - "namePlaceholder": "Enter dashboard name or use variable", - "code": "Dashboard Code", - "codePlaceholder": "Enter code or use variable", - "codeHint": "Unique identifier for internal reference", - "category": "Category", - "categoryPlaceholder": "e.g.: Operations Analysis, Sales Report", - "catDashboard": "Dashboard", - "catDataboard": "Data Board", - "catOther": "Other", - "catPortal": "Portal", - "dashboardCode": "Dashboard Code", - "dashboardCodePlaceholder": "Leave empty to auto-generate", - "description": "Description", - "descPlaceholder": "Enter description", - "sort": "Sort", - "dashboardName": "Dashboard Name", - "dashboardNamePlaceholder": "Enter name or select variable" - }, - "dashboardCreate": { - "label": "Create Dashboard", - "placeholder": "Create Dashboard", - "basicInfo": "Basic Info", - "basicInfoPlaceholder": "Use variable to reference basic info node output", - "basicInfoHint": "From dashboard basic info node output", - "pageConfig": "Page Config", - "pageConfigPlaceholder": "Use variable to reference design node output", - "pageConfigHint": "From dashboard design node output", - "updateIfExists": "Update if exists", - "updateIfExistsHint": "When enabled, update existing dashboard instead of error if code exists", - "dashboardId": "Created dashboard ID", - "dashboardCode": "Dashboard code", - "appId": "App ID (Optional)", - "appIdPlaceholder": "Leave empty to not associate with app", - "dashboardCodeOutput": "Dashboard Code", - "dashboardIdOutput": "Dashboard ID", - "pageMetaOutput": "Full Page Metadata" - }, - "dashboardDesign": { - "label": "Dashboard Design", - "placeholder": "Dashboard Design", - "designContent": "Design Content", - "designContentPlaceholder": "Enter design content or use variable to reference LLM output", - "designContentHint": "Supports Markdown format, can use variable references", - "designTitle": "Design Title", - "designTitlePlaceholder": "Enter title", - "pageConfigOutput": "Page config data", - "dashboardCode": "Dashboard Code", - "dashboardCodePlaceholder": "From basic info node", - "designSuggestion": "Design Suggestion (Optional)", - "designSuggestionPlaceholder": "LLM-generated design suggestion", - "designTitleLabel": "Design Title", - "usageTip1": "This node will open the dashboard designer", - "usageTip2": "Users can drag and drop charts, cards and other components", - "usageTip3": "Page config will be output after confirmation" - }, - "dashboardPublish": { - "label": "Publish Dashboard", - "placeholder": "Publish Dashboard", - "dashboardId": "Dashboard ID", - "dashboardIdPlaceholder": "Use variable to reference create node output", - "dashboardIdHint": "From dashboard create node output", - "menuName": "Menu Name", - "menuNamePlaceholder": "Enter menu name", - "menuIcon": "Menu Icon", - "menuIconPlaceholder": "e.g. LayoutDashboard", - "menuIdOutput": "Menu ID", - "routePathOutput": "Route path", - "appId": "App ID (Optional)", - "appIdPlaceholder": "Leave empty to use dashboard's app ID", - "menuSort": "Menu Sort", - "parentMenuId": "Parent Menu ID (Optional)", - "parentMenuIdPlaceholder": "Leave empty for top-level menu", - "publishResultOutput": "Publish Result" - }, - "formBasicInfo": { - "label": "Form Basic Info", - "placeholder": "Form Basic Info", - "formName": "Form Name", - "formNamePlaceholder": "Enter form name or use variable", - "formCode": "Form Code", - "formCodePlaceholder": "Enter code or use variable", - "formCodeHint": "Used to generate access route", - "autoGenerate": "Auto generate", - "autoGenCode": "Auto Generate Code", - "autoGenCodeHint": "When enabled, code will be auto-generated from form name (pinyin conversion)", - "formCodeOutput": "Form Code", - "formDesc": "Form Description", - "formDescOutput": "Form Description", - "formDescPlaceholder": "Enter form description", - "formNameHint": "Supports variable reference, e.g.:", - "formNameOutput": "Form Name", - "formTypeOutput": "Form Type", - "formCategoryOutput": "Form Category", - "fullConfigOutput": "Full Basic Info Object", - "confirmedConfigOutput": "Confirmed Full Config", - "normalForm": "Normal Form", - "workflowForm": "Workflow Form", - "sort": "Sort", - "sortHint": "Smaller number comes first", - "sortOutput": "Sort Value", - "sortPlaceholder": "Enter sort value", - "confirmedOutput": "Is Confirmed", - "formType": "Form Type", - "formTypePlaceholder": "Select form type" - }, - "formCreate": { - "label": "Create Form", - "placeholder": "Create Form", - "formConfig": "Form Config", - "formConfigPlaceholder": "Use variable to reference form UI design node output", - "formConfigHint": "From form UI design node output", - "listConfig": "List Config", - "listConfigPlaceholder": "Use variable to reference list design node output", - "listConfigHint": "From list design node output", - "formCodeLabel": "Form Code", - "formCodeOptional": "(optional)", - "formCodeHint": "Used to generate access route", - "appId": "App ID", - "appIdPlaceholder": "Leave empty for main app", - "appIdHint": "Leave empty to not associate with app", - "basicInfoHint": "Output from form basic info node", - "dbCreate": "Database Create", - "dbDesign": "Database Design", - "dbDesignConfig": "Database Design Config", - "dbDesignHint": "Output from database design node", - "formBasicInfo": "Form Basic Info", - "formCodeOutput": "Form Code", - "formCreateStep": "Form Create", - "formIdOutput": "Created Form ID", - "formMetaOutput": "Full Form Metadata", - "formPublish": "Form Publish", - "fullWorkflow": "Full Workflow", - "listDesign": "List UI Design", - "listDesignConfig": "List Config", - "listDesignHint": "Output from list UI design node", - "uiDesign": "Form UI Design", - "uiDesignConfig": "Form UI Design Config", - "uiDesignHint": "Output from form UI design node", - "updateIfExists": "Update If Exists", - "updateIfExistsHint": "Whether to update existing form when code exists" - }, - "formData": { - "label": "Form Data", - "placeholder": "Form Data", - "createLabel": "Create Form Data", - "data": "Data", - "dataHint": "Supports single object or array (batch operation)", - "dataPlaceholder": "Enter JSON data or variable, e.g.", - "deleteLabel": "Delete Form Data", - "filterConditions": "Filter Conditions", - "formCode": "Form Code", - "formCodeHint": "Published form code", - "formCodeInputHint": "Supports direct input or variable reference", - "formCodeInputPlaceholder": "Enter form code or use variable, e.g.", - "formCodePlaceholder": "Enter form code or use variable", - "generateArray": "Generate Array Type", - "generateArrayHint": "When checked, generated structure will be wrapped as array for extracting multiple records", - "hardDelete": "Hard Delete (Irreversible)", - "hardDeleteHint": "Default is soft delete, check to permanently delete data", - "listLabel": "Query Form Data", - "operationType": "Operation Type", - "create": "Create", - "read": "Read", - "update": "Update", - "delete": "Delete", - "list": "Query List", - "readLabel": "Read Form Data", - "recordId": "Record ID", - "recordIdHint": "Record ID to read", - "recordIdPlaceholder": "Enter record ID, supports variable e.g.", - "schemaToLlmLabel": "Form to LLM Schema", - "selectFormPlaceholder": "Select form from list", - "selectedFormHint": "Select from published forms (code: {code})", - "unknownOp": "Unknown Operation", - "updateFieldData": "Update Field Data", - "updateFieldDataHint": "Field data to update (JSON object)", - "updateLabel": "Update Form Data", - "updateRecordIdHint": "Record ID to update", - "deleteRecordIdHint": "Record ID to delete", - "fieldData": "Field Data", - "createFieldDataHint": "Field data for creating record (JSON object)", - "queryConditions": "Query Conditions", - "queryConditionsHint": "Query filter conditions (JSON object)", - "pageSize": "Page Size", - "pageNum": "Page Number", - "outputVarHint": "Operation result will be saved to this variable", - "createdRecordId": "Created Record ID", - "recordDetail": "Record Detail", - "variableInput": "Variable Input", - "selectFromList": "Select from List" - }, - "formDatabaseCreate": { - "label": "Form Database Create", - "placeholder": "Form Database Create" - }, - "formDatabaseDesign": { - "label": "Form Database Design", - "placeholder": "Form Database Design" - }, - "formListDesign": { - "label": "List Design", - "placeholder": "List Design", - "autoGenColumns": "Auto Generate Columns", - "autoGenColumnsHint": "Auto generate list columns from form fields", - "autoGenQuery": "Auto Generate Query Fields", - "autoGenQueryHint": "Auto generate query conditions from form fields", - "columnCountOutput": "Column Count", - "containerType": "Container Type", - "containerTypeHint": "Container type for form editing", - "containerTypePlaceholder": "Select container type", - "dbDesignConfig": "Database Design Config", - "dbDesignConfigHint": "Output from database design node, for supplementing field type info", - "dbDesignConfigPlaceholder": "Optional, for supplementing field type info", - "dialog": "Dialog", - "drawer": "Drawer", - "enableExport": "Enable Export", - "enableImport": "Enable Import", - "fullConfigOutput": "Full List Config", - "inferRules": "Smart Inference Rules", - "inferRule1": "Query fields: name/status/type etc.", - "inferRule2": "Query type: selector→in, option→eq, date→range, text→like", - "inferRule3": "Column sort: backend sort by default, file/image not supported", - "inferRule4": "Column align: number→right, date→center, other→left", - "inferRule5": "Tag display: option fields auto use Tag", - "page": "Page", - "pageSize": "Page Size", - "pageSizePlaceholder": "Select page size", - "queryFieldCountOutput": "Query Field Count", - "showIndex": "Show Index Column", - "showSelection": "Show Selection Column", - "uiDesignConfig": "Form UI Design Config", - "uiDesignConfigHint": "Output config from form UI design node", - "uiDesignConfigPlaceholder": "Use variable to reference form UI design node output", - "perPage": "{count} per page" - }, - "formPublish": { - "label": "Form Publish", - "placeholder": "Form Publish", - "formCode": "Form Code", - "formCodeHint": "Used to generate access route", - "formId": "Form ID", - "formIdHint": "Output from form create node", - "menuIdOutput": "Created Menu ID", - "publishResultOutput": "Publish Result Details", - "routePathOutput": "Form Access Path", - "usageTip1": "This node is used to publish created forms to the menu system.", - "usageTip2": "During execution, a publish config editor will be shown in the right panel, where users can set menu name, icon, etc." - }, - "formUIDesign": { - "label": "Form UI Design", - "placeholder": "Form UI Design", - "dbDesignConfig": "Database Design Config", - "dbDesignPlaceholder": "Use variable to reference database design node output {'{{form_database_design.database_design}}'}", - "dbDesignHint": "From database design node output config", - "formNameLabel": "Form Name", - "formNamePlaceholder": "Leave empty to use table alias", - "formNameHint": "Form display name, e.g.: Employee Info Form", - "formCodeLabel": "Form Code", - "formCodePlaceholder": "Leave empty to use table name", - "formCodeHint": "Unique form code for system identification", - "layoutMode": "Layout Mode", - "layoutModePlaceholder": "Select layout mode", - "autoLayout": "Auto (by field count)", - "singleColumn": "Single Column", - "doubleColumn": "Double Column", - "tripleColumn": "Triple Column", - "autoLayoutHint": "Auto mode: <=6 fields single, 7-12 double, >12 triple", - "labelWidth": "Label Width", - "labelWidthHint": "Form label width (px), default 120px", - "enableGrouping": "Enable Grouping", - "enableGroupingHint": "Auto-group by field type (basic info, contact, system info, etc.)", - "hideSystemFields": "Hide System Fields", - "hideSystemFieldsHint": "Hide system fields (id, sys_create_datetime, is_deleted, etc.)", - "formDesignOutput": "Complete form UI design config", - "formCodeOutput": "Form code", - "fieldCountOutput": "Field count", - "groupCountOutput": "Group count", - "smartMapping": "Smart Mapping Rules", - "dbDesignConfigHint": "Output config from database design node", - "dbDesignConfigPlaceholder": "Use variable to reference database design node output", - "formCode": "Form Code", - "formName": "Form Name", - "fullConfigOutput": "Full Form UI Design Config", - "mappingRules": "Smart Mapping Rules", - "mappingRule1": "varchar → Input / Textarea (length>200)", - "mappingRule2": "int/decimal → Number Input / Currency Input", - "mappingRule3": "datetime → DateTime Picker", - "mappingRule4": "boolean → Switch", - "mappingRule5": "*_id → Select / User/Dept Selector", - "mappingRule6": "email/phone → Input with validation", - "layoutAuto": "Auto (by field count)", - "layoutAutoHint": "Auto mode: ≤6 fields single, 7-12 double, >12 triple column", - "layoutDouble": "Double Column", - "layoutSingle": "Single Column", - "layoutTriple": "Triple Column" - }, - "snowflakeAnalyst": { - "label": "Snowflake Cortex Analyst", - "placeholder": "Snowflake Cortex Analyst", - "authPassword": "Username/Password", - "authKeyPair": "Key Pair", - "authSSO": "External Browser SSO", - "fillRequired": "Please fill in required connection info first", - "fillPassword": "Please fill in password", - "fillPrivateKey": "Please fill in private key content or private key file path", - "connectionFailed": "Connection test failed", - "snowflakeConnection": "Snowflake Connection", - "authMethod": "Auth Method", - "authMethodPlaceholder": "Select auth method", - "username": "Username", - "password": "Password, supports variables", - "privateKeyContent": "Private Key Content", - "privateKeyPlaceholder": "RSA private key content (PEM format), or use file path below", - "privateKeyPath": "Or Private Key File Path", - "privateKeyPassword": "Private Key Password", - "privateKeyPasswordHint": "Fill in if private key is password protected", - "ssoHint": "External browser SSO authentication will open browser for identity verification at execution.", - "database": "Database name", - "schemaOptional": "Optional", - "testing": "Testing...", - "testConnection": "Test Connection", - "snowflakeVersion": "Snowflake version", - "queryConfig": "Query Config", - "semanticModel": "Semantic Model", - "semanticModelHint1": "Two formats supported:", - "semanticModelHint2": "Stage file", - "queryQuestion": "Query Question", - "queryPlaceholder": "Describe the data you want to query in natural language, e.g.: What was last month's total sales?", - "queryHint": "Cortex Analyst will automatically convert natural language to SQL query", - "resultVarName": "Result Variable Name", - "resultVarHint": "Query result data will be saved to this variable", - "sqlVarName": "SQL Variable Name", - "sqlVarHint": "Generated SQL statement will be saved to this variable", - "databaseName": "Database Name", - "optional": "Optional", - "passwordPlaceholder": "Password, supports variables", - "privateKeyPasswordPlaceholder": "Fill in if private key is password protected", - "selectAuthMethod": "Select auth method", - "twoFormats": "Supports two formats" - }, - "snowflakeLLM": { - "label": "Snowflake Cortex LLM", - "placeholder": "Snowflake Cortex LLM", - "complete": "LLM Generation (COMPLETE)", - "summarize": "Text Summary (SUMMARIZE)", - "translate": "Translate (TRANSLATE)", - "sentiment": "Sentiment Analysis (SENTIMENT)", - "extractAnswer": "Q&A Extraction (EXTRACT_ANSWER)", - "langEn": "English", - "langZh": "Chinese", - "langJa": "Japanese", - "langKo": "Korean", - "langFr": "French", - "langDe": "German", - "langEs": "Spanish", - "langRu": "Russian", - "langPt": "Portuguese", - "langIt": "Italian", - "ssoHintFull": "External Browser SSO\nAuthentication will open browser for identity verification at execution, suitable for interactive scenarios.", - "varHint": "Supports variables like", - "functionConfig": "Function Config", - "functionType": "Function Type", - "selectFunction": "Select function", - "selectModelLabel": "Select model", - "systemPrompt": "System Prompt", - "promptRequired": "Prompt", - "promptPlaceholder": "Enter prompt, supports variables like {'{{user_input}}'}", - "defineAiRole": "Define AI role and behavior rules", - "textToSummarize": "Text to Summarize", - "textToSummarizePlaceholder": "Enter text to summarize, supports variables", - "textToTranslate": "Text to Translate", - "textToTranslatePlaceholder": "Enter text to translate, supports variables", - "sourceLang": "Source Language", - "targetLang": "Target Language", - "textToAnalyze": "Text to Analyze", - "textToAnalyzePlaceholder": "Enter text for sentiment analysis, supports variables", - "sentimentRange": "Return range: -1 (negative) to 1 (positive)", - "documentContent": "Document Content", - "documentPlaceholder": "Enter document content, supports variables", - "questionLabel": "Question", - "questionPlaceholder": "Enter question to extract answer from document", - "outputVarHint": "Cortex output will be saved to this variable for downstream nodes", - "funcComplete": "LLM Generate (COMPLETE)", - "funcExtractAnswer": "Q&A Extract (EXTRACT_ANSWER)", - "funcSentiment": "Sentiment Analysis (SENTIMENT)", - "funcSummarize": "Text Summary (SUMMARIZE)", - "funcTranslate": "Translate (TRANSLATE)", - "passwordPlaceholder": "Password, supports variable e.g.", - "prompt": "Prompt", - "question": "Question", - "sentimentPlaceholder": "Enter text for sentiment analysis, supports variables", - "sentimentText": "Text to Analyze", - "sourceLanguage": "Source Language", - "summarizePlaceholder": "Enter text to summarize, supports variables", - "summarizeText": "Text to Summarize", - "systemPromptPlaceholder": "Define AI role and behavior rules", - "targetLanguage": "Target Language", - "translatePlaceholder": "Enter text to translate, supports variables", - "translateText": "Text to Translate", - "varRefHint": "Supports variable e.g." - }, - "formDbCreate": { - "allReadyOutput": "All Tables Ready", - "autoCreateSchema": "Auto Create Schema", - "autoCreateSchemaHint": "Auto create when Schema doesn't exist (PostgreSQL/SQL Server only)", - "cautionWarning": "This node will actually create database tables, please operate with caution", - "database": "Target Database (optional)", - "databaseHint": "If set, overrides the design node; leave empty to use the connection default", - "databasePlaceholder": "e.g. my_app_db, supports {'{{database}}'}", - "dbDesignConfig": "Database Design Config", - "dbDesignConfigHint": "Database design config from previous node (table structure design)", - "dbDesignConfigPlaceholder": "Please use variable", - "errorCountOutput": "Error Count", - "ifExists": "When Table Exists", - "ifExistsHint": "How to handle when table exists, recommended: skip", - "ifExistsPlaceholder": "Select handling method", - "label": "Database Table Create", - "note1": "This node will actually execute DDL statements to create tables", - "note2": "Recommend verifying SQL in test environment first", - "note3": "Choosing \"replace\" will lose all data in the table", - "note4": "Ensure database user has CREATE TABLE permission", - "notes": "Notes", - "placeholder": "Database Table Create", - "replaceDanger": "Replace (Dangerous)", - "resultOutput": "Creation Result Object", - "schema": "Database Schema (Optional)", - "schemaHint": "PostgreSQL/SQL Server schema name. If configured, this value takes priority, otherwise uses design node's schema", - "schemaPlaceholder": "e.g. public, app, supports variables", - "skipRecommended": "Skip (Recommended)", - "successCountOutput": "Successfully Created Table Count", - "throwError": "Throw Error" - }, - "formDbDesign": { - "autoAddSystemFields": "Auto Add System Fields", - "autoAddSystemFieldsHint": "Auto add system fields (id, sys_create_datetime, sys_update_datetime, etc.)", - "dbConfig": "Database Config", - "dbConfigHint": "Database config name, default is 'default'", - "dbConfigPlaceholder": "Enter database config name", - "dbSchema": "Database Schema", - "dbSchemaHint": "PostgreSQL schema name, empty uses database default schema", - "dbSchemaPlaceholder": "PostgreSQL schema name, e.g. public, app (optional)", - "dbType": "Database Type", - "dbTypePlaceholder": "Select database type", - "dbTypeHint": "Select target database type, affects field type mapping", - "designMode": "Design Mode", - "designModeHint": "Choose to design main or sub table, sub table needs to specify related main table", - "fieldCountOutput": "Field Count", - "fieldConfigExample": "Field Config Example (array)", - "fieldList": "Field List", - "fieldListHint": "Field config array, each field contains name, type, comment, etc.", - "fieldListPlaceholder": "Enter field list or use variable", - "foreignKey": "Foreign Key Field", - "foreignKeyHint": "Foreign key field name for main table, auto-generated if empty", - "foreignKeyPlaceholder": "Default is {main_table}_id", - "fullDesignOutput": "Full Database Design Object", - "label": "Database Table Structure Design", - "mainTable": "Main Table", - "placeholder": "Database Table Structure Design", - "relatedMainTable": "Related Main Table", - "relatedMainTableHint": "Main table name that sub table relates to", - "relatedMainTablePlaceholder": "Enter related main table name or use variable", - "subFieldListPlaceholder": "Enter sub table field list or use variable", - "subFieldListHint": "Sub table field config array", - "subTable": "Sub Table", - "subTableName": "Sub Table Name", - "subTableNameHint": "Database table name for sub table", - "subTableNamePlaceholder": "Enter sub table name or use variable", - "tableName": "Table Name", - "tableNameHint": "Database table name, e.g.: employee, order_info", - "tableNameOutput": "Table Name", - "tableNamePlaceholder": "Enter table name or use variable" - } - } - }, - "workflowRuns": { - "title": "Run History", - "description": "View AI workflow execution records and node logs", - "search": "Search", - "refresh": "Refresh", - "filters": { - "workflow": "Workflow", - "status": "Status", - "trigger": "Trigger", - "allWorkflows": "All workflows", - "allStatus": "All statuses", - "allTriggers": "All triggers" - }, - "columns": { - "workflow": "Workflow", - "status": "Status", - "trigger": "Trigger", - "steps": "Steps", - "tokens": "Tokens", - "duration": "Duration", - "startedAt": "Started at", - "error": "Error", - "actions": "Actions" - }, - "status": { - "pending": "Pending", - "running": "Running", - "waiting": "Waiting", - "completed": "Completed", - "failed": "Failed", - "stopped": "Stopped" - }, - "trigger": { - "editor_draft": "Editor draft", - "editor_published": "Editor published", - "agent": "Agent", - "api": "API", - "form_button": "Form button" - }, - "detail": { - "back": "Back to list", - "runId": "Run ID", - "openEditor": "Open workflow", - "snapshotMissing": "Definition snapshot is missing; canvas replay may be incomplete", - "completedAt": "Completed at", - "version": "Version", - "draft": "Draft", - "timeline": "Execution timeline", - "noLogs": "No execution logs", - "inputsOutputs": "Inputs / Outputs" - } - } -} diff --git a/web/apps/web-ele/src/locales/langs/en-US/announcement.json b/web/apps/web-ele/src/locales/langs/en-US/announcement.json deleted file mode 100644 index 53afeee..0000000 --- a/web/apps/web-ele/src/locales/langs/en-US/announcement.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "title": "Title", - "status": "Status", - "priority": "Priority", - "targetType": "Target Type", - "readCount": "Read Count", - "publisher": "Publisher", - "publishTime": "Publish Time", - "actions": "Actions", - "keyword": "Keyword", - "keywordPlaceholder": "Enter title keyword", - "statusAll": "All", - "statusDraft": "Draft", - "statusPublished": "Published", - "statusExpired": "Expired", - "priorityNormal": "Normal", - "priorityImportant": "Important", - "priorityUrgent": "Urgent", - "targetTypeAll": "All", - "targetTypeDept": "Specified Department", - "targetTypeRole": "Specified Role", - "targetTypeUser": "Specified User", - "topTag": "Top", - "createButton": "Create Announcement", - "editButton": "Edit", - "deleteButton": "Delete", - "publishButton": "Publish", - "statsButton": "Read Statistics", - "moreButton": "More", - "createTitle": "Create Announcement", - "editTitle": "Edit Announcement", - "deleteConfirm": "Are you sure you want to delete the announcement \"{title}\"?", - "deleteConfirmTitle": "Delete Confirmation", - "publishConfirm": "Are you sure you want to publish this announcement? Relevant users will be notified after publishing.", - "publishConfirmTitle": "Publish Confirmation", - "deleteSuccess": "Deleted successfully", - "publishSuccess": "Published successfully", - "updateSuccess": "Updated successfully", - "createSuccess": "Created successfully", - "formTitleLabel": "Title", - "formTitlePlaceholder": "Enter announcement title", - "formSummaryLabel": "Summary", - "formSummaryPlaceholder": "Enter summary (optional)", - "formContentLabel": "Content", - "formContentPlaceholder": "Enter announcement content", - "formTitleRequired": "Please enter announcement title", - "formContentRequired": "Please enter announcement content", - "formPriorityLabel": "Priority", - "formTopLabel": "Top", - "formTargetTypeLabel": "Target Type", - "formExpireTimeLabel": "Expire Time", - "formExpireTimePlaceholder": "Select expire time (optional)", - "formCancelButton": "Cancel", - "formSaveButton": "Save", - "statsTitle": "Read Statistics", - "statsReadCount": "Read: {count} people", - "statsUserLabel": "User", - "statsReadTimeLabel": "Read Time", - "unreadOnly": "Unread Only", - "unreadOnlyAll": "All", - "unreadOnlyUnread": "Unread", - "unreadCount": "{count} unread", - "viewButton": "View", - "publisherLabel": "Publisher", - "publishTimeLabel": "Publish Time", - "emptyList": "No announcements", - "loadingMore": "Loading...", - "noMore": "No more data", - "detailTitle": "Announcement Detail", - "selectHint": "Please select an announcement to view", - "unreadLabel": "Unread", - "summary": "Summary" -} diff --git a/web/apps/web-ele/src/locales/langs/en-US/api-token.json b/web/apps/web-ele/src/locales/langs/en-US/api-token.json deleted file mode 100644 index 119ebe7..0000000 --- a/web/apps/web-ele/src/locales/langs/en-US/api-token.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "title": "API Token", - "deviceManagement": "Device Management", - "description": "Create personal access tokens for automation calls.", - "loadError": "Failed to load tokens", - "nameRequired": "Please enter token name", - "createError": "Failed to create token", - "createToken": "Create Token", - "tokenName": "Token Name", - "tokenNamePlaceholder": "Enter token name", - "expirationDate": "Expiration", - "neverExpiresHint": "Leave empty for no expiration", - "tokenDescription": "Description", - "tokenDescriptionPlaceholder": "Enter description", - "tokenCreated": "Token Created", - "tokenWarning": "Copy and save this token now. It will not be shown again.", - "revokeTitle": "Revoke Token", - "revokeConfirm": "Revoke token \"{0}\"?", - "confirmRevoke": "Revoke", - "revokeSuccess": "Token revoked", - "revokeToken": "Revoke Token", - "copy": "Copy", - "copied": "Copied", - "copySuccess": "Copied to clipboard", - "copyError": "Copy failed", - "neverExpires": "Never expires", - "expired": "Expired", - "expiresSoon": "Expires in {0} days", - "createdAt": "Created", - "lastUsed": "Last used", - "empty": "No tokens", - "days7": "7 days", - "days30": "30 days", - "days60": "60 days", - "days90": "90 days", - "days365": "1 year" -} diff --git a/web/apps/web-ele/src/locales/langs/en-US/application.json b/web/apps/web-ele/src/locales/langs/en-US/application.json deleted file mode 100644 index 6cd3d40..0000000 --- a/web/apps/web-ele/src/locales/langs/en-US/application.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "title": "Application Management", - "createApp": "Create App", - "editApp": "Edit App", - "search": "Search", - "searchPlaceholder": "Search app name or code", - "noApps": "No applications", - "appName": "App Name", - "appNamePlaceholder": "Please enter app name", - "appCode": "App Code", - "appCodePlaceholder": "Please enter app code (for URL routing)", - "appType": "App Type", - "appTypePlaceholder": "Please select app type", - "appDescription": "Description", - "appDescriptionPlaceholder": "Please enter app description", - "appIcon": "App Icon", - "systemMenu": "System Menu", - "systemMenuPlaceholder": "Select system menus for dev mode (leave empty for all)", - "selectSystemMenu": "Select System Menu", - "save": "Save", - "create": "Create", - "cancel": "Cancel", - "develop": "Develop", - "edit": "Edit", - "publish": "Publish", - "enable": "Enable", - "disable": "Disable", - "delete": "Delete", - "publishApp": "Publish App", - "enableApp": "Enable App", - "disableApp": "Disable App", - "confirmPublish": "Confirm Publish", - "confirmEnable": "Confirm Enable", - "confirmDisable": "Confirm Disable", - "publishConfirmMsg": "Are you sure to publish app \"{name}\"?", - "enableConfirmMsg": "Are you sure you want to re-enable app \"{name}\"?", - "publishSuccessMsg": "After publishing, users can access this app via the following link:", - "enableSuccessMsg": "After enabling, users can access this app via the following link:", - "disableConfirmMsg": "Are you sure to disable app \"{name}\"?", - "appLink": "App Link:", - "deleteConfirm": "Delete Confirm", - "deleteConfirmMsg": "Are you sure to delete app \"{name}\"?", - "confirm": "Confirm", - "loadFailed": "Failed to load applications", - "publishSuccess": "Published successfully", - "publishFailed": "Failed to publish", - "enableSuccess": "Enabled successfully", - "enableFailed": "Failed to enable", - "disableSuccess": "Disabled successfully", - "disableFailed": "Failed to disable", - "deleteSuccess": "Deleted successfully", - "copySuccess": "Link copied to clipboard", - "copyFailed": "Failed to copy", - "appTypes": { - "mixed": "Mixed App", - "form": "Form App", - "workflow": "Workflow App", - "ai": "AI App", - "dashboard": "Dashboard App", - "screen": "Screen App" - }, - "appStatus": { - "draft": "Draft", - "published": "Published", - "disabled": "Disabled" - }, - "validation": { - "nameRequired": "Please enter app name", - "nameLength": "Length should be 2 to 100 characters", - "codeRequired": "Please enter app code", - "codePattern": "Code must start with a letter and contain only letters, numbers, underscores and hyphens", - "codeLength": "Length should be 2 to 100 characters", - "typeRequired": "Please select app type" - } -} diff --git a/web/apps/web-ele/src/locales/langs/en-US/approval.json b/web/apps/web-ele/src/locales/langs/en-US/approval.json deleted file mode 100644 index 3562138..0000000 --- a/web/apps/web-ele/src/locales/langs/en-US/approval.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "title": "Process Title", - "type": "Process Type", - "currentNode": "Current Node", - "processNode": "Process Node", - "initiator": "Initiator", - "receiveTime": "Receive Time", - "processTime": "Process Time", - "copyTime": "Copy Time", - "startTime": "Start Time", - "actions": "Actions", - "processResult": "Process Result", - "status": "Status", - "approved": "Approved", - "rejected": "Rejected", - "transferred": "Transferred", - "pending": "Pending", - "cancelled": "Cancelled", - "unread": "Unread", - "read": "Read", - "tabPending": "My Pending", - "tabHandled": "My Handled", - "tabInitiated": "My Initiated", - "tabCopy": "Copied to Me", - "approveButton": "Approve", - "detailButton": "Details", - "urgeButton": "Urge", - "cancelButton": "Cancel", - "markReadButton": "Mark as Read", - "emptyPending": "No pending tasks", - "emptyHandled": "No handled tasks", - "emptyInitiated": "No initiated processes", - "emptyCopy": "No copies", - "urgeConfirm": "Are you sure you want to urge this process?", - "cancelConfirm": "Are you sure you want to cancel this process?", - "urgeSuccess": "Urged successfully", - "cancelSuccess": "Cancelled successfully", - "markReadSuccess": "Marked as read", - "operationFailed": "Operation failed", - "dialogTitle": "Approval", - "initiatorLabel": "Initiator", - "startTimeLabel": "Start Time", - "currentNodeLabel": "Current Node", - "formDataTitle": "Form Data", - "approvalLogsTitle": "Approval Logs", - "approvalActionTitle": "Approval Action", - "approvalResultLabel": "Approval Result", - "approvalOpinionLabel": "Approval Opinion", - "approvalOpinionPlaceholder": "Enter approval opinion (optional)", - "approveAction": "Approve", - "rejectAction": "Reject", - "cancelButton2": "Cancel", - "submitButton": "Submit", - "approveSuccess": "Approved successfully", - "rejectSuccess": "Rejected", - "loadDataFailed": "Failed to load data", - "startAction": "Start Process", - "approveActionLabel": "Approve", - "rejectActionLabel": "Reject", - "transferAction": "Transfer", - "cancelAction": "Cancel" -} diff --git a/web/apps/web-ele/src/locales/langs/en-US/authentication.json b/web/apps/web-ele/src/locales/langs/en-US/authentication.json deleted file mode 100644 index 9b78ee1..0000000 --- a/web/apps/web-ele/src/locales/langs/en-US/authentication.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "username": "Username", - "usernameTip": "Please enter username", - "password": "Password", - "passwordTip": "Please enter password", - "confirmPassword": "Confirm Password", - "confirmPasswordTip": "Passwords do not match", - "passwordStrength": "Password Strength", - "selectAccount": "Select Account", - "verifyRequiredTip": "Please complete the slider verification", - "mobile": "Phone Number", - "mobileTip": "Please enter phone number", - "mobileErrortip": "Please enter a valid phone number", - "code": "Verification Code", - "codeTip": "Verification code length is {0} digits", - "sendCode": "Send Code", - "sendText": "Resend({0}s)", - "email": "Email", - "emailTip": "Please enter email", - "emailValidErrorTip": "Please enter a valid email format", - "agree": "I agree to", - "privacyPolicy": "Privacy Policy", - "terms": "Terms of Service", - "agreeTip": "Please agree to Privacy Policy and Terms of Service", - "thirdPartyLogin": "Third-party Login", - "getAuthUrlFailed": "Failed to get authorization link", - "giteeLoginFailed": "Gitee login failed, please try again later", - "githubLoginFailed": "GitHub login failed, please try again later", - "qqLoginFailed": "QQ login failed, please try again later", - "googleLoginFailed": "Google login failed, please try again later", - "wechatLoginFailed": "WeChat login failed, please try again later", - "microsoftLoginFailed": "Microsoft login failed, please try again later", - "dingtalkLoginFailed": "DingTalk login failed, please try again later", - "feishuLoginFailed": "Feishu login failed, please try again later", - "wechat": "WeChat", - "wecom": "WeCom", - "dingtalk": "DingTalk", - "feishu": "Feishu", - "wecomLoginFailed": "WeCom login failed, please try again later", - "dingtalkAutoRedirect": "DingTalk detected, redirecting to login..." -} diff --git a/web/apps/web-ele/src/locales/langs/en-US/chat.json b/web/apps/web-ele/src/locales/langs/en-US/chat.json deleted file mode 100644 index 4195cf5..0000000 --- a/web/apps/web-ele/src/locales/langs/en-US/chat.json +++ /dev/null @@ -1,91 +0,0 @@ -{ - "title": "Chat", - "search": "Search contacts or groups", - "noConversations": "No conversations", - "selectHint": "Select a conversation to start chatting", - "newChat": "New Chat", - "newGroup": "New Group", - "private": "Private", - "group": "Group", - "members": "Members", - "memberCount": "{count} members", - "owner": "Owner", - "admin": "Admin", - "member": "Member", - "groupName": "Group Name", - "groupNamePlaceholder": "Enter group name", - "selectMembers": "Select Members", - "selectMembersPlaceholder": "Select group members", - "createGroupSuccess": "Group created successfully", - "inputPlaceholder": "Type a message...", - "send": "Send", - "sendImage": "Send Image", - "sendFile": "Send File", - "recall": "Recall", - "recallSuccess": "Message recalled", - "recallFailed": "Recall failed", - "recallTimeout": "Cannot recall after 2 minutes", - "messageRecalled": "Message recalled", - "typing": "Typing...", - "yesterday": "Yesterday", - "pin": "Pin", - "unpin": "Unpin", - "mute": "Mute", - "unmute": "Unmute", - "conversationInfo": "Conversation Info", - "addMember": "Add Member", - "addMemberSuccess": "Members added successfully", - "allMembersExist": "Selected members are already in the group", - "removeMember": "Remove Member", - "removeMemberConfirm": "Are you sure to remove this member?", - "dissolveGroup": "Dissolve Group", - "dissolveGroupConfirm": "Are you sure to dissolve this group? This action cannot be undone.", - "dissolveSuccess": "Group dissolved", - "leaveGroup": "Leave Group", - "noMessages": "No messages", - "loadMore": "Load more", - "loading": "Loading...", - "image": "Image", - "file": "File", - "replyTo": "Reply", - "groupNameRequired": "Please enter group name", - "membersRequired": "Please select at least one member", - "recentChats": "Chats", - "contacts": "Contacts", - "searchContacts": "Search contacts", - "noContacts": "No contacts", - "startChat": "Start Chat", - "online": "Online", - "offline": "Offline", - "sending": "Sending...", - "contactDetail": "Contact Detail", - "contactDept": "Department", - "contactPost": "Position", - "contactManager": "Manager", - "contactEmail": "Email", - "contactMobile": "Mobile", - "contactCity": "City", - "contactType": "User Type", - "contactOrg": "Organization", - "contactOrgInfo": "Organization", - "contactInfo": "Contact", - "selectContactHint": "Select a contact to view details", - "copy": "Copy", - "copySuccess": "Copied to clipboard", - "replyingTo": "Reply to {name}", - "markUnread": "Mark as Unread", - "deleteConversation": "Delete", - "deleteConversationConfirm": "Are you sure to delete this conversation?", - "deleteSuccess": "Deleted", - "orgStructure": "Organization", - "emoji": "Emoji", - "voiceMessage": "Voice Message", - "voiceTooShort": "Recording too short", - "voiceUploading": "Sending voice...", - "micPermissionDenied": "Cannot access microphone, please check browser permissions", - "voice": "Voice", - "dropToUpload": "Drop to send file", - "newMessage": "New Message", - "systemNotification": "System Notification", - "viewDetail": "View Detail" -} diff --git a/web/apps/web-ele/src/locales/langs/en-US/common.json b/web/apps/web-ele/src/locales/langs/en-US/common.json deleted file mode 100644 index 979b65d..0000000 --- a/web/apps/web-ele/src/locales/langs/en-US/common.json +++ /dev/null @@ -1,188 +0,0 @@ -{ - "all": "All", - "mainApp": "Main App", - "close": "Close", - "operation": "Operation", - "next": "Next", - "prev": "Previous", - "cancel": "Cancel", - "cancelEdit": "Cancel Edit", - "ok": "OK", - "confirm": "Confirm", - "confirmAndContinue": "Confirm and Continue", - "save": "Save", - "add": "Add", - "delete": "Delete", - "edit": "Edit", - "update": "Update", - "reset": "Reset", - "status": "Status", - "enabled": "Enabled", - "disabled": "Disabled", - "selected": "Selected", - "noData": "No Data", - "loading": "Loading", - "loadMore": "Load More", - "noMore": "No more data", - "noMoreData": "No more data", - "justNow": "Just now", - "minutesAgo": "minutes ago", - "hoursAgo": "hours ago", - "yesterday": "Yesterday", - "daysAgo": "days ago", - "tips": "Tips", - "warning": "Warning", - "success": "Success", - "info": "Info", - "error": "Error", - "primary": "Primary", - "search": "Search", - "clear": "Clear", - "replace": "Replace", - "copy": "Copy", - "format": "Format", - "compress": "Compress", - "redo": "Redo", - "jsonEditor": { - "placeholder": "Enter or paste JSON", - "valid": "✓ Valid", - "invalid": "✗ Invalid", - "format": "Format", - "compress": "Compress", - "copy": "Copy", - "clear": "Clear", - "copiedSuccess": "Copied to clipboard", - "copyFailed": "Copy failed", - "noContent": "No content to copy", - "formatSuccess": "Format successful", - "formatFailed": "Format failed: {0}", - "compressSuccess": "Compress successful", - "compressFailed": "Compress failed: {0}", - "invalidJson": "Invalid JSON format", - "emptyContent": "Please enter JSON content", - "stats": "Lines: {0} | Characters: {1}" - }, - "ui": { - "placeholder": { - "select": "Please select", - "selectAll": "Select All", - "search": "Please enter search content" - }, - "actionTitle": { - "create": "Create {0}", - "add": "Add {0}", - "edit": "Edit {0}", - "view": "View {0}", - "delete": "Delete {0}" - }, - "actionMessage": { - "createSuccess": "Created successfully", - "createError": "Create failed", - "updateSuccess": "Updated successfully", - "updateError": "Update failed", - "deleteSuccess": "Deleted successfully", - "deleteConfirm": "Are you sure you want to delete {0}?", - "deleteError": "Delete failed", - "loadError": "Failed to load" - }, - "submit": "Submit", - "formRules": { - "required": "{0} is required", - "minLength": "{0} must be at least {1} characters", - "maxLength": "{0} must be at most {1} characters", - "alreadyExists": "{0} {1} already exists", - "startWith": "{0} must start with {1}", - "invalidURL": "Please enter a valid URL" - } - }, - "male": "Male", - "female": "Female", - "yes": "Yes", - "no": "No", - "fullscreen": "Fullscreen", - "exitFullscreen": "Exit Fullscreen", - "setting": "Settings", - "columnSetting": "Column Settings", - "sort": "Sort", - "batchDelete": "Batch Delete", - "export": "Export", - "import": "Import", - "downloadTemplate": "Download Template", - "view": "View", - "summarySum": "Sum", - "summaryAvg": "Average", - "summaryCount": "Count", - "summaryMax": "Max", - "summaryMin": "Min", - "startDate": "Start Date", - "endDate": "End Date", - "selectDate": "Select Date", - "table": "Table", - "action": "Action", - "placeholder": "Please enter", - "selectPlaceholder": "Please select", - "back": "Back", - "createSuccess": "Created successfully", - "updateSuccess": "Updated successfully", - "saveFailed": "Save failed", - "noDescription": "No description", - "applicationName": "Application", - "more": "More", - "copied": "Copied", - "deleted": "Deleted", - "duplicate": "Duplicate", - "description": "Description", - "download": "Download", - "downloadFailed": "Download failed", - "loadError": "Load failed", - "loadFailed": "Load failed", - "loadingMenu": "Loading menu", - "moveDown": "Move Down", - "moveUp": "Move Up", - "none": "None", - "operationFailed": "Operation failed", - "operationSuccess": "Operation successful", - "pasted": "Pasted", - "preview": "Preview", - "prompt": "Prompt", - "redone": "Redone", - "refresh": "Refresh", - "row": "Row", - "saveSuccess": "Saved successfully", - "select": "Select", - "selectAll": "Select All", - "unselectAll": "Unselect All", - "submit": "Submit", - "tip": "Tip", - "undo": "Undo", - "undone": "Undone", - "video": "Video", - "exportData": "Export Data", - "exportSuccess": "Export successful", - "exportFailed": "Export failed", - "exportCompleted": "Export completed, {0} records in total", - "exportPreparing": "Preparing export...", - "exportReady": "Ready to export...", - "exportQuerying": "Querying data {0} / {1} records...", - "exportGeneratingExcel": "Generating Excel file...", - "exportGeneratingExcelShort": "Generating Excel...", - "querying": "Querying...", - "retryExport": "Retry Export", - "fileDownloadFailed": "File download failed, please retry", - "records": "records", - "importFailed": "Import failed", - "importPreparing": "Preparing import...", - "importParsing": "Parsing Excel data {0} / {1} rows...", - "importImporting": "Importing data {0} / {1} records...", - "importValidating": "Validating data {0} / {1} rows...", - "validatePreparing": "Preparing validation...", - "importValidatingData": "Checking data uniqueness...", - "willInsert": "Will insert {0} records", - "willUpdate": "Will update {0} records", - "willOverwrite": "Will overwrite {0} records", - "comma": ", ", - "closeConfirmTitle": "Confirm Close", - "closeConfirmMessage": "An operation is in progress. Closing will interrupt it. Are you sure?", - "maxImportRows": "Server supports importing up to {0}0,000 rows", - "maxExportRows": "Server supports exporting up to {0}0,000 rows" -} diff --git a/web/apps/web-ele/src/locales/langs/en-US/contract.json b/web/apps/web-ele/src/locales/langs/en-US/contract.json deleted file mode 100644 index af46ea1..0000000 --- a/web/apps/web-ele/src/locales/langs/en-US/contract.json +++ /dev/null @@ -1,150 +0,0 @@ -{ - "contractNo": "Contract No.", - "contractTitle": "Contract Title", - "templateNameUsed": "Template Used", - "statusLabel": "Status", - "creatorName": "Creator", - "createdTimeInstance": "Created Time", - "completedTimeInstance": "Completed Time", - "actions": "Actions", - "statusDraft": "Draft", - "statusPending": "Pending Signature", - "statusSigning": "Signing", - "statusCompleted": "Completed", - "statusCanceled": "Canceled", - "statusExpired": "Expired", - "createContract": "Create Contract", - "view": "View", - "edit": "Edit", - "copy": "Copy", - "mobileSignButton": "Mobile Sign", - "submit": "Submit", - "complete": "Complete", - "cancel": "Cancel", - "delete": "Delete", - "submitConfirm": "Are you sure you want to submit this contract? It will enter pending signature status after submission.", - "submitConfirmTitle": "Submit Confirmation", - "submitSuccess": "Submitted successfully", - "completeConfirm": "Are you sure you want to complete this contract?", - "completeConfirmTitle": "Complete Confirmation", - "completeSuccess": "Contract completed", - "cancelConfirm": "Are you sure you want to cancel this contract?", - "cancelConfirmTitle": "Cancel Confirmation", - "cancelSuccess": "Canceled", - "deleteConfirm": "Are you sure you want to delete this contract?", - "deleteConfirmTitle": "Delete Confirmation", - "deleteSuccess": "Deleted successfully", - "templateNameLabel": "Template Name", - "templateCodeLabel": "Template Code", - "categoryLabel2": "Category", - "version": "Version", - "createTimeTemplate": "Create Time", - "categoryName": "Category", - "categorySales": "Sales Contract", - "categoryPurchase": "Purchase Contract", - "categoryLabor": "Labor Contract", - "categoryLease": "Lease Contract", - "categoryService": "Service Contract", - "categoryOther": "Other", - "statusPublished": "Published", - "statusDisabled": "Disabled", - "addTemplate": "Add Template", - "batchDelete": "Batch Delete", - "batchDeleteConfirm": "Are you sure you want to delete the selected {count} templates?", - "batchDeleteConfirmTitle": "Batch Delete Confirmation", - "publish": "Publish", - "publishConfirm": "Are you sure you want to publish this template? It can be used to create contracts after publishing.", - "publishConfirmTitle": "Publish Confirmation", - "publishSuccess": "Published successfully", - "disable": "Disable", - "disableConfirm": "Are you sure you want to disable this template? New contracts cannot be created after disabling.", - "disableConfirmTitle": "Disable Confirmation", - "disableSuccess": "Disabled successfully", - "copyTemplate": "Copy Template", - "copyPrompt": "Please enter the code for the new template", - "copyConfirm": "Confirm", - "copyCancel": "Cancel", - "copyCodePattern": "Code must start with a letter and can only contain letters, numbers and underscores", - "copiedSuccess": "Copied successfully", - "pleaseSelectTemplate": "Please select a contract template", - "pleaseInputTitle": "Please enter contract title", - "pleaseInputContractNo": "Please enter contract number", - "contractNoInvalid": "Invalid contract number", - "contractNoDuplicate": "Contract number already exists", - "basicInfo": "Basic Info", - "variableFill": "Variable Fill", - "createDialog": "Create Contract", - "editDialog": "Edit Contract", - "copyDialog": "Copy Contract", - "basicInfoConfig": "Basic Info Configuration", - "contractTemplate": "Contract Template", - "selectTemplate": "Please select a contract template", - "contractNoLabel": "Contract No.", - "inputContractNo": "Please enter contract number", - "regenerate": "Regenerate", - "contractTitleLabel": "Contract Title", - "inputContractTitle": "Please enter contract title", - "contractPreview": "Contract Preview", - "variableRealtime": "Variables will be replaced in real-time", - "variableFillForm": "Variable Fill", - "noVariables": "No variables need to be filled for this template", - "previousStep": "Previous", - "nextStep": "Next", - "save": "Save", - "close": "Close", - "saveSuccess": "Saved successfully", - "createSuccess": "Created successfully", - "loadTemplateFailed": "Failed to load template details", - "loadContractFailed": "Failed to load contract data", - "saveFailed": "Save failed", - "noTemplatesAvailable": "No templates available, please publish contract templates first", - "selectNothing": "Please select templates to delete first", - "selectNothingWarning": "Please select templates to delete first", - "contractDetail": "Contract Details", - "pageNumber": "Page {page} / {total}", - "noContent": "No Content", - "mobileSign": "Mobile Signature", - "contract": "Contract", - "partyType": "Party Type:", - "signerName": "Signer Name:", - "signerNamePlaceholder": "Optional, enter signer name", - "signQrCode": "Signature QR Code", - "generatingQrCode": "Generating QR code...", - "scanQrCodeToSign": "Please scan the QR code with your mobile phone to sign", - "qrCodeExpiredAt": "QR code expires at {time}", - "refreshQrCode": "Refresh QR Code", - "invalidSignUrl": "Invalid signature link", - "pleaseSign": "Please sign first", - "loading": "Loading...", - "checkSignUrl": "Please check if the signature link is correct, or contact the contract initiator", - "signComplete": "Signature Complete", - "signCompleteMsg": "You have successfully completed the signature, you can close this page", - "pleaseSignArea": "Please sign in the following area", - "signed": "Signed", - "sign": "Sign", - "noSignArea": "No signature area required for you", - "contractCompleted": "Contract signature completed", - "handwriteSign": "Handwritten Signature", - "signInArea": "Please write your signature in the area below", - "confirmSign": "Confirm Signature", - "editTemplate": "Edit Contract Template", - "viewTemplate": "View Contract Template", - "addTemplate": "Add Contract Template", - "templateName": "Template Name", - "inputTemplateName": "Please enter template name", - "templateCode": "Template Code", - "inputTemplateCode": "Please enter template code", - "selectCategory": "Please select category", - "templateDescription": "Template Description", - "inputTemplateDescription": "Please enter template description", - "contractNumber": "Contract Number", - "usedTemplate": "Used Template", - "status": "Status", - "creator": "Creator", - "createdTime": "Created Time", - "completedTime": "Completed Time", - "completeSign": "Complete Signing", - "exportPdf": "Export PDF", - "operationLog": "Operation Log", - "noOperationLog": "No operation logs" -} diff --git a/web/apps/web-ele/src/locales/langs/en-US/core.json b/web/apps/web-ele/src/locales/langs/en-US/core.json deleted file mode 100644 index 7b8090c..0000000 --- a/web/apps/web-ele/src/locales/langs/en-US/core.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "user": { - "name": "User", - "title": "User Management", - "list": "User List", - "userName": "User Name", - "account": "Account", - "mobile": "Mobile", - "mobileFormatError": "Please enter a valid mobile phone format", - "email": "Email", - "emailFormatError": "Please enter a valid email format", - "gender": "Gender", - "unknown": "Unknown", - "male": "Male", - "female": "Female", - "locked": "Locked", - "status": "Status", - "role": "Role", - "post": "Post", - "dept": "Department", - "selectRole": "Please select role", - "selectPost": "Please select post", - "selectDept": "Please select department", - "createTime": "Create Time", - "operation": "Operation", - "batchDelete": "Batch Delete", - "resetPassword": "Reset Password", - "resetPasswordTitle": "Reset Password", - "resetPasswordConfirm": "Are you sure you want to reset the password for {0}?", - "resetPasswordSuccess": "Successfully reset the password for {0}", - "resetPasswordError": "Failed to reset password", - "cannotDeleteAdmin": "Cannot delete administrator account", - "cannotResetAdminPassword": "Cannot reset administrator password", - "selectUsersToDelete": "Please select users to delete first", - "batchDeleteTitle": "Batch Delete Users", - "batchDeleteConfirm": "Are you sure you want to delete the selected {0} users? {1}", - "deleteSuccess": "Successfully deleted {0} users", - "deleteError": "Failed to delete users", - "avatar": "Avatar", - "selectAvatar": "Select Avatar", - "avatarHelp": "Recommended to upload a square image, maximum 2MB", - "birthday": "Birthday", - "selectBirthday": "Select Birthday", - "city": "City", - "address": "Address", - "bio": "Bio", - "bioPlaceholder": "Please enter bio", - "manager": "Manager", - "selectManager": "Please select manager", - "userType": "User Type", - "systemUser": "System User", - "normalUser": "Normal User", - "externalUser": "External User" - } -} diff --git a/web/apps/web-ele/src/locales/langs/en-US/dashboard-design.json b/web/apps/web-ele/src/locales/langs/en-US/dashboard-design.json deleted file mode 100644 index 6197b63..0000000 --- a/web/apps/web-ele/src/locales/langs/en-US/dashboard-design.json +++ /dev/null @@ -1,894 +0,0 @@ -{ - "title": "Dashboard Design", - "preview": "Preview", - "save": "Save", - "saveSuccess": "Save successful", - "clear": "Clear", - "clearConfirm": "Are you sure you want to clear the canvas? This action cannot be undone.", - "clearSuccess": "Cleared", - "export": "Export", - "exportSuccess": "Export successful", - "import": "Import", - "importTitle": "Import Configuration", - "importPlaceholder": "Please paste JSON configuration content...", - "importSuccess": "Import successful", - "importError": "Invalid configuration format", - "importEmpty": "Please enter configuration content", - "viewCode": "View Code", - "jsonPreview": "JSON Preview", - "copyCode": "Copy Code", - "copySuccess": "Copied to clipboard", - "copyError": "Copy failed", - "undoSuccess": "Undone", - "redoSuccess": "Redone", - "copyWidgetSuccess": "Copied", - "pasteWidgetSuccess": "Pasted", - "deleteWidgetSuccess": "Deleted", - "noWidgetsTip": "Please add widgets first", - "noConfigTip": "No dashboard configuration", - "loadingData": "Loading data...", - "loadDataError": "Failed to load data", - "unknownWidget": "Unknown widget type", - "widgetCount": "{count} widgets", - "dragTip": "Drag widgets from the left to here", - "add": "Add", - "copy": "Copy", - "delete": "Delete", - "reset": "Reset", - "clean": "Clear", - "canvas": { - "title": "Design Canvas", - "adaptive": "Adaptive", - "actualSize": "Actual Size", - "settings": "Canvas Settings", - "undo": "Undo", - "redo": "Redo" - }, - "months": { - "jan": "Jan", - "feb": "Feb", - "mar": "Mar", - "apr": "Apr", - "may": "May", - "jun": "Jun", - "jul": "Jul", - "aug": "Aug", - "sep": "Sep", - "oct": "Oct", - "nov": "Nov", - "dec": "Dec" - }, - "weekdaysShort": { - "mon": "Mon", - "tue": "Tue", - "wed": "Wed", - "thu": "Thu", - "fri": "Fri", - "sat": "Sat", - "sun": "Sun" - }, - "material": { - "title": "Material Library", - "search": "Search widgets...", - "category": { - "common": "Common", - "chart": "Chart", - "filter": "Filter", - "map": "Map", - "media": "Media", - "other": "Other" - }, - "widgets": { - "statCard": "Stat Card", - "progressCard": "Progress Card", - "chartLine": "Line Chart", - "chartBar": "Bar Chart", - "chartPie": "Pie Chart", - "chartGauge": "Gauge Chart", - "chartArea": "Area Chart", - "chartRadar": "Radar Chart", - "chartFunnel": "Funnel Chart", - "chartScatter": "Scatter Chart", - "chartRing": "Ring Progress", - "chartHeatmap": "Heatmap", - "chartKline": "K-line Chart", - "chartSankey": "Sankey Chart", - "todoList": "Todo List", - "noticeList": "Message Notification", - "announcementList": "Announcement List", - "rankingList": "Ranking List", - "quickLinks": "Quick Links", - "welcomeCard": "Welcome Card", - "calendar": "Calendar", - "countdown": "Countdown", - "clock": "Clock", - "weather": "Weather", - "imageCarousel": "Image Carousel", - "dataTable": "Data Table", - "iframe": "iframe Embed", - "videoPlayer": "Video Player", - "image": "Image", - "formRender": "Form Render", - "approvalCenter": "Approval Center", - "myApps": "My Apps", - "serverMonitor": "Server Monitor", - "filterInput": "Input Filter", - "filterSelect": "Select Filter", - "filterDate": "Date Filter", - "filterDateRange": "Date Range" - }, - "defaultProps": { - "statTitle": "Statistic Data", - "trendLabel": "vs Yesterday", - "progressTitle": "Completion Progress", - "visitTrend": "Visit Trend", - "visits": "Visits", - "downloads": "Downloads", - "salesStat": "Sales Statistics", - "trafficSource": "Traffic Source", - "searchEngine": "Search Engine", - "directAccess": "Direct Access", - "emailMarketing": "Email Marketing", - "unionAds": "Union Ads", - "videoAds": "Video Ads", - "sysLoad": "System Load", - "abilityEval": "Ability Evaluation", - "sales": "Sales", - "mgmt": "Mgmt", - "tech": "Tech", - "cs": "CS", - "rd": "R&D", - "mkt": "Mkt", - "budget": "Budget", - "actual": "Actual", - "convFunnel": "Conversion Funnel", - "visit": "Visit", - "consult": "Consult", - "intent": "Intent", - "order": "Order", - "deal": "Deal", - "dataDist": "Data Distribution", - "height": "Height (cm)", - "weight": "Weight (kg)", - "male": "Male", - "female": "Female", - "kpiDone": "KPI Completion", - "salesVolume": "Sales Volume", - "orderVolume": "Order Volume", - "customerCount": "Customer Count", - "weekVisitHeat": "Weekly Visit Heat", - "stockTrend": "Stock Trend", - "todoTitle": "To-do Items", - "todoItem1": "Complete project report", - "todoItem2": "Team weekly meeting", - "todoItem3": "Code review", - "latestNotice": "Message Notification", - "latestAnnouncement": "Latest Announcements", - "salesRanking": "Sales Ranking", - "welcomeTitle": "Welcome back", - "welcomeSubtitle": "Today is a good day", - "countdownTitle": "Event Countdown", - "todayWeather": "Today's Weather", - "dataList": "Data List", - "externalPage": "External Page", - "itemName": "Item", - "imageTitle": "Image", - "myDashboard": "My Dashboard", - "formRender": "Form Data", - "approvalCenter": "Approval Center", - "myApps": "My Apps", - "serverMonitor": "Server Monitor", - "filterInput": "Keyword", - "filterInputPlaceholder": "Enter keyword to filter...", - "filterSelect": "Select Filter", - "filterSelectPlaceholder": "Please select...", - "filterDate": "Date", - "filterDatePlaceholder": "Select date", - "filterDateRange": "Date Range", - "filterStartDate": "Start Date", - "filterEndDate": "End Date" - } - }, - "attribute": { - "title": "Attribute Panel", - "canvasConfig": "Canvas Config", - "widgetConfig": "Widget Config", - "styleConfig": "Style Config", - "dataConfig": "Data Config", - "globalSettings": "Global Settings", - "dashboardName": "Dashboard Name", - "gridLayout": "Grid Layout", - "columns": "Columns", - "rowHeight": "Row Height (px)", - "widgetMargin": "Widget Margin (px)", - "horizontal": "Horizontal", - "vertical": "Vertical", - "background": "Background", - "backgroundColor": "Background Color", - "reset": "Reset", - "display": "Display", - "outerMargin": "Outer Margin", - "outerMarginTip": "Show outer margin during rendering", - "widgetTitle": "Title", - "layout": "Layout", - "widthGrid": "Width (Grid)", - "heightGrid": "Height (Grid)", - "layoutTip": "Tip: Resize widgets directly on the canvas", - "iconConfig": "Icon Config", - "icon": "Icon", - "iconColor": "Icon Color", - "status": "Status", - "strokeWidth": "Stroke Width", - "showText": "Show Text", - "border": "Border", - "borderWidth": "Border Width", - "borderColor": "Border Color", - "borderStyleLabel": "Border Style", - "borderRadius": "Corner Radius", - "shadow": "Shadow", - "enableShadow": "Enable Shadow", - "shadowColor": "Shadow Color", - "shadowBlur": "Blur Radius", - "chartLayout": "Chart Layout", - "margin": { - "left": "Left Margin (%)", - "right": "Right Margin (%)", - "top": "Top Margin (%)", - "bottom": "Bottom Margin (%)" - }, - "tabs": { - "basic": "Basic", - "data": "Data", - "style": "Style" - }, - "placeholder": { - "name": "Please enter name", - "title": "Please enter title", - "remark": "Please enter description" - }, - "iconOptions": { - "trending": "Trending", - "creditCard": "Credit Card", - "users": "Users", - "activity": "Activity", - "bell": "Bell", - "award": "Award" - }, - "progressStatus": { - "default": "Default", - "success": "Success", - "warning": "Warning", - "exception": "Exception" - }, - "colorTheme": { - "label": "Color Theme", - "default": "Default", - "fresh": "Fresh", - "business": "Business", - "tech": "Tech", - "warm": "Warm" - }, - "chart": { - "smooth": "Smooth Curve", - "showArea": "Show Area", - "showSymbol": "Show Symbol", - "symbolSize": "Symbol Size", - "lineWidth": "Line Width", - "axis": "Axis", - "xAxisName": "X-Axis Name", - "yAxisName": "Y-Axis Name", - "nameLocation": "Name Location", - "legend": "Legend", - "showLegend": "Show Legend", - "legendPosition": "Legend Position", - "barWidth": "Bar Width", - "barRadius": "Bar Radius", - "horizontal": "Horizontal", - "stack": "Stack", - "showBackground": "Show Background", - "pieType": "Pie Type", - "showLabel": "Show Label", - "labelPosition": "Label Position", - "minValue": "Min Value", - "maxValue": "Max Value", - "splitNumber": "Split Number", - "showProgress": "Show Progress", - "showMA5": "Show MA5", - "showMA10": "Show MA10", - "shape": "Shape", - "sort": "Sort", - "orient": "Orient", - "pointSize": "Point Size", - "numerical": "Numerical Config", - "currentValue": "Current Value", - "min": "Min", - "max": "Max", - "unit": "Unit", - "maConfig": "MA Config", - "prefix": "Prefix", - "suffix": "Suffix", - "trendConfig": "Trend Config", - "trendValue": "Trend Value (%)", - "trendTip": "Positive for increase, negative for decrease", - "trendLabel": "Trend Description", - "seriesNamePrefix": "Series", - "itemNamePrefix": "Item", - "placeholder": { - "xAxis": "e.g. Month", - "yAxis": "e.g. Sales", - "unit": "e.g. %", - "title": "Please enter title", - "xAxis2": "Separated by commas, e.g. Jan, Feb, Mar", - "seriesData": "Separated by commas, e.g. 100, 200, 300", - "seriesName": "Series Name", - "prefix": "e.g. $", - "suffix": "e.g. items, %", - "trendLabel": "e.g. vs Yesterday", - "subtitle": "Please enter subtitle" - }, - "location": { - "start": "Start", - "middle": "Middle", - "end": "End", - "top": "Top", - "bottom": "Bottom", - "left": "Left", - "right": "Right" - }, - "pieTypes": { - "pie": "Pie", - "ring": "Ring", - "rose": "Rose" - }, - "labelPositions": { - "outside": "Outside", - "inside": "Inside" - }, - "barWidthOptions": { - "auto": "Auto", - "thin": "Thin (30%)", - "medium": "Medium (50%)", - "thick": "Thick (70%)" - }, - "shapes": { - "polygon": "Polygon", - "circle": "Circle" - }, - "sortOptions": { - "descending": "Descending", - "ascending": "Ascending", - "none": "None" - }, - "orientOptions": { - "vertical": "Vertical", - "horizontal": "Horizontal" - }, - "dataEditMode": "Edit Mode", - "dataEditForm": "Form", - "dataEditJson": "JSON", - "jsonPlaceholder": "JSON format data", - "jsonTip": "Edit JSON directly, automatically applied on blur", - "xAxisData": "X-Axis Data", - "seriesDataLabel": "Series Data", - "addSeries": "Add Series", - "dataItem": "Data Item", - "addItem": "Add Data Item", - "radarTip": "Radar chart data is complex, JSON mode is recommended", - "scatterTip": "Scatter chart data is coordinate points, JSON mode is recommended", - "ringTip": "Ring progress data JSON mode is recommended", - "heatmapTip": "Heatmap data JSON mode is recommended", - "klineTip": "K-line data JSON mode is recommended", - "sankeyTip": "Sankey data JSON mode is recommended", - "gaugeTip": "Gauge data set 'Current Value' in Basic Config" - }, - "dataSource": { - "dataType": "Data Type", - "static": "Static Data", - "uploadImage": "Image Upload", - "uploadVideo": "Video Upload", - "dataSource": "Data Source", - "api": "API Interface", - "config": "Data Source Config", - "select": "Select Data Source", - "selectPlaceholder": "Please select data source", - "mapping": "Field Mapping", - "sourceField": "Source Field", - "targetField": "Target", - "addMapping": "Add Mapping", - "mappingTip": "Tip: Data source mapping is configured in 'Data Source Management', additional mappings here override default.", - "refresh": "Refresh Config", - "autoRefresh": "Auto Refresh", - "interval": "Refresh Interval", - "intervalUnit": "Unit: seconds, min 5 seconds", - "apiConfig": "API Config", - "apiUrl": "Request URL", - "apiUrlPlaceholder": "e.g. /api/dashboard/stats", - "apiMethod": "Request Method", - "dataPath": "Data Path", - "dataPathPlaceholder": "e.g. data.list", - "dataPathTip": "Path to extract data from response", - "enableRefresh": "Enable Refresh", - "intervalSeconds": "Refresh Interval (s)", - "paramBinding": "Param Binding", - "paramName": "Data Source Param", - "globalParam": "Filter Param", - "addBinding": "Add Binding", - "paramBindingTip": "Bind filter component parameters to data source parameters for interactive filtering. Select data source parameter on the left, select or enter filter parameter key on the right.", - "required": "Required" - }, - "widget": { - "todo": { - "items": "Todo Items", - "add": "Add Todo", - "done": "Done", - "newItem": "New Todo", - "priority": { - "high": "High", - "medium": "Medium", - "low": "Low" - } - }, - "notice": { - "tip": "Notice list automatically fetched from system messages, no manual configuration needed", - "limit": "Display Count" - }, - "announcement": { - "tip": "Announcement list automatically fetched from system announcements, no manual configuration needed", - "limit": "Display Count" - }, - "ranking": { - "items": "Ranking Items", - "add": "Add Ranking", - "newItem": "New Member" - }, - "quickLinks": { - "title": "Quick Links", - "tip": "Click grid to select menu, icon automatically uses menu config", - "iconColorDefault": "Default Theme Color", - "selectMenu": "Select Menu" - }, - "welcome": { - "subtitle": "Subtitle", - "subtitlePlaceholder": "Please enter subtitle", - "showTime": "Show Time" - }, - "countdown": { - "config": "Countdown Settings", - "targetTime": "Target Time", - "targetTimePlaceholder": "Select target time", - "showDays": "Show Days", - "showHours": "Show Hours", - "showMinutes": "Show Minutes", - "showSeconds": "Show Seconds", - "finishedText": "Finished Text", - "finishedTextPlaceholder": "e.g. Finished" - }, - "clock": { - "config": "Clock Settings", - "showDate": "Show Date", - "showSeconds": "Show Seconds", - "format24": "24H Format", - "timezone": "Timezone", - "timezoneOptions": { - "local": "Local Time", - "utc": "UTC", - "beijing": "Beijing Time", - "tokyo": "Tokyo Time", - "newyork": "New York Time", - "london": "London Time" - } - }, - "weather": { - "config": "Weather Config", - "cityName": "City Name", - "cityNamePlaceholder": "e.g. Beijing", - "presetCity": "Preset City", - "presetCityPlaceholder": "Quick select city", - "latitude": "Latitude", - "longitude": "Longitude", - "autoLocate": "Auto Locate", - "refreshInterval": "Refresh Interval (min)", - "refreshIntervalTip": "Unit: minutes, minimum 5 minutes" - }, - "carousel": { - "config": "Carousel Settings", - "autoplay": "Autoplay", - "interval": "Interval", - "intervalUnit": "ms", - "showIndicator": "Show Indicator", - "showArrow": "Show Arrow", - "imageList": "Image List", - "addImage": "Add Image", - "selectFromGallery": "From Gallery", - "selectedImages": "Selected Images", - "selectTip": "Please select images from gallery", - "newItem": "New Image" - }, - "table": { - "config": "Table Settings", - "stripe": "Stripe", - "border": "Border", - "showIndex": "Show Index", - "showHeader": "Show Header", - "highlightCurrentRow": "Highlight Current Row", - "alignment": "Alignment", - "headerAlign": "Header Align", - "cellAlign": "Cell Align", - "heightConfig": "Height Config", - "height": "Fixed Height", - "heightPlaceholder": "e.g. 300px or 100%", - "heightTip": "Supports pixels or percentage", - "maxHeight": "Max Height", - "maxHeightPlaceholder": "e.g. 500", - "maxHeightTip": "Shows scrollbar when exceeded", - "customization": "Customization", - "emptyText": "Empty Text", - "emptyTextPlaceholder": "No data", - "headerBgColor": "Header Background", - "summaryConfig": "Summary Config", - "showSummary": "Show Footer Summary", - "summaryType": "Summary Type", - "summaryTypes": { - "sum": "Sum", - "avg": "Average", - "count": "Count", - "max": "Maximum", - "min": "Minimum" - }, - "summaryPrecision": "Decimal Places", - "summaryColumns": "Summary Columns", - "noColumnsConfigured": "Please configure table columns first", - "mergeConfig": "Merge Config", - "enableMerge": "Enable Merge", - "mergeRules": "Merge Rules", - "mergeTypes": { - "row": "Row Merge", - "column": "Column Merge" - }, - "selectMergeField": "Select merge field", - "rowIndex": "Row Index", - "startCol": "Start Column", - "colspan": "Column Span", - "addMergeRule": "Add Merge Rule", - "size": "Size", - "sizeOptions": { - "default": "Default", - "large": "Large", - "small": "Small" - }, - "columnConfig": "Column Config", - "columnConfigJson": "Column Config JSON", - "tableData": "Table Data", - "tableDataJson": "Table Data JSON", - "complexDataTip": "Table data structure is complex, JSON mode is recommended" - }, - "iframe": { - "config": "Display Settings", - "showBorder": "Show Border", - "allowFullscreen": "Allow Fullscreen", - "pageAddress": "Page Address" - }, - "video": { - "config": "Playback Settings", - "autoplay": "Autoplay", - "loop": "Loop", - "muted": "Muted", - "controls": "Native Controls", - "videoAddress": "Video Address", - "poster": "Poster", - "posterPlaceholder": "Poster Image URL (Optional)", - "selectFromFileLib": "From File Library" - }, - "image": { - "title": "Image", - "config": "Image Settings", - "alt": "Alt Text", - "altPlaceholder": "Alt text when image cannot be displayed", - "fit": "Fit Mode", - "fitOptions": { - "cover": "Cover", - "contain": "Contain", - "fill": "Fill", - "none": "None", - "scaleDown": "Scale Down" - }, - "lazy": "Lazy Load", - "previewConfig": "Preview Settings", - "zIndex": "Z-Index", - "closeOnClickModal": "Close on Click Modal", - "url": "Image URL", - "urlPlaceholder": "Please enter image URL", - "link": "Link URL", - "previewList": "Preview List", - "previewListTip": "List of images to preview when clicked, current image if empty", - "addImage": "Add Image", - "mainImage": "Main Image" - }, - "common": { - "staticDataTip": "Current component uses static data, can be modified in Basic Config" - }, - "formRender": { - "formConfig": "Form Config", - "formCode": "Select Form", - "formCodePlaceholder": "Please select a form", - "containerType": "Container Type", - "drawer": "Drawer", - "dialog": "Dialog", - "displayConfig": "Display Config", - "showToolbar": "Show Toolbar", - "showPagination": "Show Pagination", - "pageSize": "Page Size", - "buttonConfig": "Button Config", - "showAdd": "Add Button", - "showView": "View Button", - "showEdit": "Edit Button", - "showDelete": "Delete Button" - } - }, - "fieldLabels": { - "title": "Title", - "value": "Value", - "time": "Time", - "trend": "Trend %", - "trendLabel": "Trend Desc", - "prefix": "Prefix", - "suffix": "Suffix", - "percentage": "Percentage", - "xAxisData": "X-Axis Data", - "seriesData": "Series Data", - "currentValue": "Current Value", - "min": "Min", - "max": "Max", - "listData": "List Data", - "linkData": "Link Data" - }, - "resultType": { - "list": "List", - "tree": "Tree", - "object": "Object", - "value": "Value", - "chartAxis": "Axis Chart", - "chartPie": "Pie Chart", - "chartGauge": "Gauge Chart", - "chartRadar": "Radar Chart", - "chartScatter": "Scatter Chart", - "chartHeatmap": "Heatmap" - }, - "borderStyle": { - "solid": "Solid", - "dashed": "Dashed", - "dotted": "Dotted", - "none": "None" - } - }, - "widgets": { - "announcement": { - "markAllRead": "Mark All as Read", - "top": "Top", - "noData": "No Announcements", - "loading": "Loading...", - "noContent": "No detailed content", - "publisher": "Publisher: ", - "priority": { - "normal": "Normal", - "important": "Important", - "urgent": "Urgent" - }, - "time": { - "justNow": "Just now", - "minutesAgo": " minutes ago", - "hoursAgo": " hours ago", - "daysAgo": " days ago" - } - }, - "weather": { - "city": "City", - "humidity": "Humidity", - "wind": "Wind", - "loading": "Loading weather data...", - "error": "Failed to fetch weather data", - "codes": { - "clear": "Clear", - "mainlyClear": "Mainly Clear", - "partlyCloudy": "Partly Cloudy", - "overcast": "Overcast", - "fog": "Fog", - "drizzle": "Drizzle", - "rain": "Rain", - "snow": "Snow", - "showers": "Showers", - "snowShowers": "Snow Showers", - "thunderstorm": "Thunderstorm" - }, - "windDir": { - "n": "N", - "ne": "NE", - "e": "E", - "se": "SE", - "s": "S", - "sw": "SW", - "w": "W", - "nw": "NW" - } - }, - "chart": { - "visits": "Visits" - }, - "iframe": { - "refresh": "Refresh", - "openNew": "Open in New Tab", - "placeholder": "iframe Embedding", - "noUrl": "URL not set", - "loading": "Loading...", - "loadFailed": "Load failed", - "retry": "Click to retry" - }, - "todo": { - "title": "To-do List", - "noData": "No to-dos", - "priority": { - "high": "High", - "medium": "Medium", - "low": "Low" - } - }, - "dataTable": { - "status": { - "normal": "Normal", - "warning": "Warning", - "error": "Error", - "success": "Success", - "failed": "Failed", - "processing": "Processing" - }, - "summary": { - "sum": "Sum", - "avg": "Avg", - "count": "Count", - "max": "Max", - "min": "Min" - } - }, - "formRender": { - "placeholder": "Form Render Widget", - "noFormCode": "Please configure form code", - "deleteConfirm": "Are you sure to delete this data?", - "batchDeleteConfirm": "Are you sure to delete the selected {count} records?", - "importResult": "Successfully imported {success}, failed {failed}", - "view": "View" - }, - "welcome": { - "greeting": { - "night": "Good late night", - "morning": "Good morning", - "morning2": "Good morning", - "noon": "Good noon", - "afternoon": "Good afternoon", - "evening": "Good evening" - } - }, - "countdown": { - "day": "d", - "hour": "h", - "minute": "m", - "second": "s", - "finished": "Finished" - }, - "video": { - "placeholder": "Video Player" - }, - "ranking": { - "tenThousand": "W" - }, - "clock": { - "weekdays": ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], - "year": "-", - "month": "-", - "day": "" - }, - "image": { - "title": "Image", - "noData": "No images" - }, - "approvalCenter": { - "initiated": "My Initiated", - "pending": "My Pending", - "handling": "My Handling", - "signing": "My Signing", - "handled": "My Handled", - "copy": "CC to Me", - "start": "Start Process", - "more": "More", - "config": "Approval Center Config", - "routePrefix": "Route Prefix" - }, - "myApps": { - "more": "More", - "noData": "No apps" - }, - "serverMonitor": { - "config": "Server Monitor Config", - "cpuBgColor": "CPU Background", - "memoryBgColor": "Memory Background", - "diskBgColor": "Disk Background", - "networkBgColor": "Network Background", - "core": " Cores", - "thread": " Threads", - "memory": "Memory", - "disk": "Disk", - "network": "Network", - "read": "Read", - "write": "Write", - "upload": "Upload", - "download": "Download", - "totalRW": "Total R/W", - "uptime": "Uptime", - "days": "d ", - "hours": "h ", - "minutes": "m" - } - }, - "filter": { - "config": "Filter Config", - "paramKey": "Param Key", - "paramKeyPlaceholder": "e.g. status", - "startParamKey": "Start Date Param", - "startParamKeyPlaceholder": "e.g. start_date", - "endParamKey": "End Date Param", - "endParamKeyPlaceholder": "e.g. end_date", - "label": "Label", - "labelPlaceholder": "Enter label", - "defaultValue": "Default Value", - "noParamKey": "Param key not configured", - "optionConfig": "Option Config", - "optionSource": "Option Source", - "staticOptions": "Static Options", - "optionLabel": "Label", - "optionValue": "Value", - "addOption": "Add Option", - "optionDataSource": "Option Data Source", - "labelField": "Label Field", - "valueField": "Value Field", - "multiple": "Multiple", - "dateFormat": "Date Format", - "styleConfig": "Style Config", - "labelPosition": "Label Position", - "labelPositionLeft": "Left", - "labelPositionTop": "Top", - "labelPositionHidden": "Hidden", - "labelWidth": "Label Width", - "labelAlign": "Label Align", - "alignLeft": "Left", - "alignCenter": "Center", - "alignRight": "Right", - "componentSize": "Size", - "sizeLarge": "Large", - "sizeDefault": "Default", - "sizeSmall": "Small", - "showBorder": "Show Border", - "borderRadius": "Border Radius" - }, - "gradient": { - "solid": "Solid", - "gradient": "Gradient", - "startColor": "Start", - "endColor": "End", - "direction": "Direction", - "noColor": "Not set", - "presetTitle": "Preset Gradients", - "presets": { - "warmSunrise": "Warm Sunrise", - "oceanBreeze": "Ocean Breeze", - "freshMint": "Fresh Mint", - "peachGlow": "Peach Glow", - "lavenderDream": "Lavender Dream", - "skyBlue": "Sky Blue", - "roseWater": "Rose Water", - "softGrass": "Soft Grass", - "winterNymph": "Winter Nymph", - "cottonCandy": "Cotton Candy", - "sunnyMorning": "Sunny Morning", - "crystalClear": "Crystal Clear" - } - } -} diff --git a/web/apps/web-ele/src/locales/langs/en-US/data-source.json b/web/apps/web-ele/src/locales/langs/en-US/data-source.json deleted file mode 100644 index 4c6cd67..0000000 --- a/web/apps/web-ele/src/locales/langs/en-US/data-source.json +++ /dev/null @@ -1,283 +0,0 @@ -{ - "basicInfo": "Basic Info", - "codePlaceholder": "Enter unique code, e.g. user_list", - "dataSourceConfig": "Data Source Configuration", - "dataSourceName": "Data Source Name", - "inputDataSourceName": "Please enter data source name", - "dataSourceType": "Data Source Type", - "selectDataSourceType": "Please select data source type", - "dataSourceDescription": "Data Source Description", - "inputDataSourceDescription": "Please enter data source description", - "testConnection": "Test Connection", - "testConnectionSuccess": "Connection successful", - "testConnectionFailed": "Connection failed", - "testing": "Testing...", - "save": "Save", - "cancel": "Cancel", - "create": "Create", - "edit": "Edit", - "delete": "Delete", - "query": "Query", - "sqlEditor": "SQL Editor", - "executeSql": "Execute SQL", - "executing": "Executing...", - "queryResult": "Query Result", - "noData": "No data", - "error": "Error", - "confirm": "Confirm", - "close": "Close", - "dbSchema": "Database", - "tables": "Tables", - "columns": "Columns", - "dataType": "Data Type", - "nullable": "Nullable", - "primaryKey": "Primary Key", - "loading": "Loading...", - "paramType": "Parameter Type", - "resultType": "Result Type", - "httpMethod": "HTTP Method", - "requestUrl": "Request URL", - "inputRequestUrl": "Please enter request URL", - "requestHeaders": "Request Headers", - "requestBody": "Request Body", - "responseMapping": "Response Mapping", - "addParam": "Add Parameter", - "paramName": "Parameter Name", - "paramValue": "Parameter Value", - "paramLabel": "Display Name", - "deleteParam": "Delete Parameter", - "total": "Total", - "limited": "Limited", - "dataSourceList": "Data Source List", - "createDataSource": "Create Data Source", - "editDataSource": "Edit Data Source", - "deleteDataSourceConfirm": "Are you sure you want to delete this data source?", - "deleteDataSourceSuccess": "Deleted successfully", - "createDataSourceSuccess": "Created successfully", - "updateDataSourceSuccess": "Updated successfully", - "loadDataSourceFailed": "Failed to load data source", - "testDataSourceFailed": "Failed to test data source", - "previousStep": "Previous", - "nextStep": "Next", - "basicInfoConfig": "Basic Information Configuration", - "status": "Status", - "enable": "Enable", - "disable": "Disable", - "selectDbSchema": "Please select database on the left", - "tip": "Tip", - "useParamPlaceholder": "Use", - "onlySelectQuery": "as parameter placeholder, only SELECT queries are allowed", - "paramDefinition": "Parameter Definition", - "defineDataSourceParams": "Define parameters that the data source can receive", - "required": "Required", - "action": "Action", - "resultProcessing": "Result Processing", - "resultTypeListDesc": "Return array data directly, suitable for tables, dropdown selections and other components.", - "resultTypeTreeDesc": "Convert flat list to tree structure, suitable for tree selection, cascade selection and other components.", - "resultTypeObjectDesc": "Return the first record as an object, suitable for detail display, form backfill and other scenarios.", - "resultTypeValueDesc": "Return the first field value of the first record, suitable for statistics, titles and other scenarios.", - "resultTypeChartAxisDesc": "Convert to xAxisData, seriesData format, suitable for line charts, bar charts, area charts.", - "resultTypeChartPieDesc": "Convert to seriesData: [name, value] format, suitable for pie charts, funnel charts.", - "resultTypeChartGaugeDesc": "Convert to value, name, max format, suitable for gauges, progress charts.", - "resultTypeChartRadarDesc": "Convert to indicator, seriesData format, suitable for radar charts, multi-dimensional comparison.", - "resultTypeChartScatterDesc": "Convert to seriesData: [x, y] format, suitable for scatter plots, bubble charts.", - "resultTypeChartHeatmapDesc": "Convert to xAxisData, yAxisData, seriesData format, suitable for heatmaps.", - "treeConversionConfig": "Tree Conversion Configuration", - "refresh": "Refresh", - "fieldPreview": "Field Preview", - "clickTableToView": "Click table name to view", - "selectTable": "Please select a table", - "noFieldInfo": "No field information", - "clickFieldToInsert": "Click field name to insert into editor", - "testDataSource": "Test Data Source", - "dataSourceInfo": "Data Source Information", - "code": "Code", - "type": "Type", - "name": "Name", - "inputCode": "Please enter code", - "all": "All", - "staticData": "Static Data", - "staticLabel": "Static", - "batchDelete": "Batch Delete", - "more": "More", - "copy": "Copy", - "deleteConfirmMessage": "Are you sure you want to delete data source \"{name}\"?", - "deleteConfirmTitle": "Delete Confirmation", - "deleteSuccess": "Data source deleted: {name}", - "batchDeleteConfirmMessage": "Are you sure you want to delete {count} selected data sources?", - "batchDeleteConfirmTitle": "Batch Delete Confirmation", - "batchDeleteSuccess": "Deleted {count} data sources", - "inputNewCode": "Please enter new data source code", - "copyDataSource": "Copy Data Source", - "codeFormatError": "Code must start with a letter and contain only letters, numbers and underscores", - "copySuccess": "Copied successfully", - "importExport": { - "export": "Export", - "import": "Import Config", - "exportSuccess": "Data source config exported", - "exportFailed": "Export failed", - "importTitle": "Import Data Source Config", - "dragOrClick": "Drag a JSON file here or click to upload", - "onlyJson": "Only .json files are supported", - "fileParseError": "Failed to parse file. Please check the format", - "checking": "Checking...", - "codeConflictTip": "Data source code already exists. Please change the code before importing", - "codeAvailable": "Data source code is available", - "newCodePlaceholder": "Enter a new data source code", - "importSuccess": "Data source config imported successfully", - "importFailed": "Import failed", - "confirmImport": "Confirm Import", - "reselect": "Reselect", - "dataSourceInfo": "Data Source Info", - "appTip": "Imported data source will belong to the current application", - "dbConnectionTip": "For SQL sources, db_connection is a connection name — ensure it exists in the target environment" - }, - "saveSuccess": "Saved successfully", - "createTime": "Creation Time", - "apiInterface": "API Interface", - "sqlQuery": "SQL Query", - "resultTypeList": "List", - "resultTypeTree": "Tree", - "resultTypeSingleObject": "Single Object", - "resultTypeSingleValue": "Single Value", - "resultTypeAxisChart": "Axis Chart", - "resultTypePieChart": "Pie Chart Data", - "resultTypeGauge": "Gauge", - "resultTypeRadarChart": "Radar Chart", - "resultTypeScatterChart": "Scatter Chart", - "resultTypeHeatmap": "Heatmap", - "paramTypeString": "String", - "paramTypeInteger": "Integer", - "paramTypeFloat": "Float", - "paramTypeBoolean": "Boolean", - "paramTypeDate": "Date", - "paramTypeDatetime": "Datetime", - "axisChartConfig": "Axis Chart Configuration", - "xAxisField": "X Axis Field", - "seriesField": "Series Field", - "seriesName": "Series Name", - "pieChartConfig": "Pie Chart Configuration", - "nameField": "Name Field", - "valueField": "Value Field", - "gaugeChartConfig": "Gauge Chart Configuration", - "maxField": "Max Field", - "radarChartConfig": "Radar Chart Configuration", - "indicatorNameField": "Indicator Name Field", - "scatterChartConfig": "Scatter Chart Configuration", - "xCoordinateField": "X Coordinate Field", - "yCoordinateField": "Y Coordinate Field", - "sizeField": "Size Field", - "heatmapChartConfig": "Heatmap Configuration", - "fieldMapping": "Field Mapping", - "addMapping": "Add Mapping", - "originalField": "Original Field", - "mappedField": "Mapped Field", - "deleteMapping": "Delete", - "multipleFieldsComma": "Multiple fields separated by commas, e.g.: {example}", - "multipleNamesComma": "Multiple names separated by commas, e.g.: {example}", - "dataFieldsForChart": "Data fields used to draw charts", - "optionalLegendNames": "Optional, the name displayed in the legend, leave blank to use field name", - "oneFieldPerSeries": "One field per series", - "optionalBubbleChart": "e.g.: size (optional, for bubble chart)", - "optionalName": "e.g.: name (optional)", - "optionalMax": "e.g.: max (optional)", - "fieldNameMapping": "Map original field names to new field names, e.g. id -> value", - "cacheConfig": "Cache Configuration", - "enableCache": "Enable Cache", - "cacheTime": "Cache Time", - "cacheTimeUnit": "seconds (0 means no cache)", - "test": "Test", - "testParams": "Test Parameters", - "executeTest": "Execute Test", - "testResult": "Test Result", - "success": "Success", - "failed": "Failed", - "returnedData": "Returned {count} records", - "reachedLimit": "Reached limit {limit} records", - "aiAssistant": "AI Assistant", - "aiSqlAssistant": "AI SQL Assistant", - "aiSqlAssistantTip": "AI will automatically generate SQL queries based on your requirements and database structure", - "sqlWritingTip": "SQL runs against the connection default database. Use schema.table for PostgreSQL/SQL Server/Oracle; `db`.`table` or table for MySQL; bind params as :name. For external connections, pick tables in the tree or AI dialog so db_connection matches the connection code.", - "describeYourQuery": "Describe your query requirements", - "queryPlaceholder": "e.g.: Query the number of new users and active users per day in the last 30 days", - "quickExamples": "Quick Examples", - "selectDataTable": "Select Data Tables", - "modifySelection": "Modify Selection", - "selectedTables": "Selected {count} tables", - "clear": "Clear", - "pleaseSelectTableFirst": "Please select data tables first", - "tableRelationsCount": "Configured {count} table relations", - "includeTableRelations": "Include table relations (improves multi-table JOIN query accuracy)", - "aiModel": "AI Model", - "selectModel": "Select Model", - "generating": "Generating...", - "generateSql": "Generate SQL", - "generationThought": "Generation Thought", - "generatedSql": "Generated SQL", - "paramSuggestions": "Parameter Suggestions", - "default": "Default", - "insertToEditor": "Insert to Editor", - "sqlGenerateSuccess": "SQL generated successfully", - "sqlGenerateFailed": "SQL generation failed", - "sqlInserted": "Inserted to editor", - "copied": "Copied to clipboard", - "pleaseInputQuestion": "Please input query requirements", - "pleaseSelectModel": "Please select AI model", - "pleaseSelectTable": "Please select data tables first", - "aiSqlInsertSuccess": "SQL inserted, parameters auto-configured", - "manualMode": "Manual", - "aiMode": "AI", - "aiConfig": "AI Config", - "aiSqlPlaceholder": "AI generated SQL will be displayed here...", - "querying": "Querying...", - "dataView": "Data", - "chartView": "Chart", - "clickTestToExecute": "Click button above to execute test", - "rawData": "Raw Data", - "selectChartTypeToPreview": "Please select a chart type in Result Processing to preview", - "apiConfig": "API Configuration", - "urlPlaceholder": "https://api.example.com/data", - "apiTabBasic": "Basic", - "apiTabAuth": "Auth", - "apiTabQueryParams": "Query Params", - "apiTabBody": "Body", - "apiTabAdvanced": "Advanced", - "timeout": "Timeout", - "second": "s", - "dataPath": "Data Path", - "dataPathPlaceholder": "e.g. data.list", - "description": "Description", - "authType": "Auth Type", - "authNone": "No Auth", - "bearerTokenPlaceholder": "Enter Token, supports {param} placeholder", - "username": "Username", - "usernamePlaceholder": "Enter username", - "password": "Password", - "passwordPlaceholder": "Enter password", - "keyPosition": "Key Position", - "keyName": "Key Name", - "keyValue": "Key Value", - "bodyType": "Type", - "bodyTypeNone": "None", - "contentType": "Content-Type", - "retryCount": "Retry Count", - "retryInterval": "Retry Interval", - "proxy": "Proxy", - "followRedirects": "Follow Redirects", - "verifySSL": "Verify SSL", - "successCondition": "Success Condition", - "successStatusCodes": "Status Codes", - "successStatusCodesPlaceholder": "e.g. 200, 201 (empty checks 2xx)", - "successFieldPath": "Field Path", - "successFieldPathPlaceholder": "e.g. code", - "successFieldValue": "Expected Value", - "apiTabHeaders": "Headers", - "viewRequest": "View Request", - "queryParamsHint": "Parameters will auto-sync to URL", - "headersHint": "Custom HTTP request headers", - "addHeader": "Add Header", - "headerName": "Name", - "headerValue": "Value", - "noQueryParams": "No query parameters", - "noHeaders": "No headers" -} diff --git a/web/apps/web-ele/src/locales/langs/en-US/database-connection.json b/web/apps/web-ele/src/locales/langs/en-US/database-connection.json deleted file mode 100644 index d57d022..0000000 --- a/web/apps/web-ele/src/locales/langs/en-US/database-connection.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "title": "Database Connections", - "createConnection": "New Connection", - "editConnection": "Edit Connection", - "searchPlaceholder": "Search by name or code", - "code": "Connection Code", - "codePlaceholder": "e.g. erp_mysql", - "codeTip": "Must start with a letter; letters, numbers, underscore, hyphen only; 'default' is reserved", - "name": "Connection Name", - "namePlaceholder": "Enter connection name", - "dbType": "Database Type", - "host": "Host", - "hostPlaceholder": "e.g. 192.168.1.100", - "port": "Port", - "user": "Username", - "userPlaceholder": "Database username", - "password": "Password", - "passwordPlaceholder": "Enter password", - "passwordKeepHint": "Leave blank to keep existing password", - "defaultDatabase": "Default Database", - "defaultDatabasePlaceholder": "Default database after connect (Oracle: Service Name)", - "dbTypePostgresql": "PostgreSQL", - "dbTypeMysql": "MySQL", - "dbTypeSqlserver": "SQL Server", - "dbTypeOracle": "Oracle", - "description": "Description", - "descriptionPlaceholder": "Optional description", - "status": "Enabled", - "enabled": "Enabled", - "disabled": "Disabled", - "systemConnection": "System", - "systemConnectionTip": "System default connection comes from DATABASE_URL and cannot be edited or deleted", - "testConnection": "Test Connection", - "testSuccess": "Connection successful", - "testFailed": "Connection failed", - "confirm": "Confirm", - "cancel": "Cancel", - "deleteConfirmTitle": "Delete Connection", - "deleteConfirmMessage": "Delete connection \"{name}\"?", - "deleteSuccess": "Connection \"{name}\" deleted", - "createSuccess": "Connection created", - "updateSuccess": "Connection updated", - "empty": "No database connections yet. Click the button above to add one.", - "codeExists": "Connection code already exists", - "codeAvailable": "Connection code is available", - "filterAll": "All", - "noDescription": "No description", - "requiredFields": "Please fill in connection code, name and host", - "browseDatabase": "Browse Database", - "backToConnectionList": "Back to Connections", - "connectionNotFoundForBrowse": "Connection not found or disabled, cannot browse" -} diff --git a/web/apps/web-ele/src/locales/langs/en-US/database-manager.json b/web/apps/web-ele/src/locales/langs/en-US/database-manager.json deleted file mode 100644 index c5e0117..0000000 --- a/web/apps/web-ele/src/locales/langs/en-US/database-manager.json +++ /dev/null @@ -1,394 +0,0 @@ -{ - "connectionInfo": "Connection Information", - "testConnection": "Test Connection", - "connectionName": "Connection Name", - "databaseType": "Database Type", - "connectionIdentifier": "Connection Identifier", - "connectionStatus": "Connection Status", - "connectionSuccessful": "✓ Connection Successful", - "connectionFailed": "✗ Connection Failed", - "notTested": "Not Tested", - "testResult": "Test Result:", - "testConnectionSuccess": "Connection test successful", - "testConnectionFailed": "Connection test failed", - "connectionError": "Connection failed", - "usageInstructions": "Usage Instructions", - "expandConnection": "· Expand Connection - View all databases under this connection", - "selectDatabase": "· Select Database - View database details", - "selectTable": "· Select Table - View table structure, query data, execute SQL", - "searchFunction": "· Search Function - Quickly find databases or tables in the left tree", - "quickActions": "Quick Actions", - "testDatabaseConnection": "Test Database Connection", - "tip": "Tip: Click on the left tree node to expand and view more content", - "constraintList": "Constraint List", - "addConstraint": "Add Constraint", - "constraintName": "Constraint Name", - "constraintNameTip": "A unique name to identify and manage this constraint", - "constraintType": "Constraint Type", - "constraintTypeTip": "Primary Key: unique row identifier; Foreign Key: links to another table; Unique: no duplicate values; Check: custom validation rule", - "field": "Local Field", - "constraintFieldTip": "Select the column(s) in this table used by the constraint", - "definition": "Check Rule", - "constraintDefinitionTip": "Required for CHECK constraints only, e.g. age > 0", - "referencedTable": "Related Table", - "referencedTableTip": "Select the target table to link to, usually the parent table", - "referencedTablePlaceholder": "Enter referenced table name", - "selectReferencedTable": "Select related table", - "onDelete": "On Delete", - "onDeleteTip": "What happens in this table when a related row is deleted", - "onUpdate": "On Update", - "onUpdateTip": "What happens in this table when the related column is updated", - "fkActionDefault": "Default", - "fkActionDefaultLabel": "Default rule", - "fkActionDefaultTip": "Use the database default behavior", - "fkActionNoActionLabel": "No action", - "fkActionNoActionTip": "Block delete/update when related data exists", - "fkActionRestrictLabel": "Restrict", - "fkActionRestrictTip": "Immediately reject delete/update when related data exists", - "fkActionCascadeLabel": "Cascade", - "fkActionCascadeTip": "Also delete or update related rows in this table", - "fkActionSetNullLabel": "Set null", - "fkActionSetNullTip": "Set the foreign key column in this table to NULL", - "fkActionSetDefaultLabel": "Set default", - "fkActionSetDefaultTip": "Set the foreign key column in this table to its default value", - "referencedColumns": "Related Column", - "referencedColumnsTip": "Select the matching column in the related table, usually primary key id", - "referencedColumnsPlaceholder": "Select related columns", - "constraintNameRequired": "Please enter constraint name", - "constraintColumnsRequired": "Please select constraint columns", - "constraintCheckDefinitionRequired": "Please enter CHECK constraint definition", - "constraintReferencedTableRequired": "Please enter referenced table for foreign key", - "constraintReferencedColumnsRequired": "Please enter referenced columns for foreign key", - "constraintReferencedColumnsMismatch": "Foreign key column count must match referenced column count", - "constraintValidationFailed": "Constraint validation failed", - "selectField": "Select Field", - "constraintDefinition": "Constraint Definition (e.g.: age > 0)", - "constraintDeleted": "Constraint deleted", - "noConstraints": "No constraints, click \"Add Constraint\" to start creating", - "foreignKey": "FOREIGN KEY", - "foreignKeyLabel": "Foreign Key", - "check": "CHECK", - "checkLabel": "Check Rule", - "database": "Database", - "schema": "Schema", - "tableName": "Table Name", - "enterTableName": "Please enter table name", - "tableComment": "Table Comment", - "enterTableComment": "Please enter table comment (optional)", - "fieldManagement": "Field Management", - "indexManagement": "Index Management", - "constraintManagement": "Constraint Management", - "previewSQL": "Preview SQL", - "createTable": "Create Table", - "createTableSQLPreview": "CREATE TABLE SQL Preview", - "executeCreate": "Execute Create", - "fillTableNameAndFields": "Please fill in the table name and add at least one field", - "createTableSuccess": "Table created successfully", - "createTableFailed": "Failed to create table", - "primaryKeyUUID": "Primary Key ID (UUID)", - "databaseInfo": "Database Information", - "databaseName": "Database Name", - "owner": "Owner", - "encoding": "Encoding", - "collation": "Collation", - "tableCount": "Table Count", - "databaseSize": "Database Size", - "description": "Description", - "noDatabaseInfo": "No database information found", - "viewTableList": "View Table List", - "expandLeftTreeNode": "Expand the left tree node to view all tables in this database", - "searchTable": "Search Table", - "useSearchBox": "Use the search box on the left to quickly find table names", - "switchToSqlTab": "Select any table and switch to the \"SQL Execution\" tab", - "statistics": "Statistics", - "loadDatabaseInfoFailed": "Failed to load database information", - "tables": "Tables", - "loading": "Loading...", - "loadDatabaseConfigsFailed": "Failed to load database configurations", - "loadDatabaseListFailed": "Failed to load database list", - "loadSchemaListFailed": "Failed to load schema list", - "loadTableListFailed": "Failed to load table list", - "loadViewListFailed": "Failed to load view list", - "cannotFindNode": "Cannot find node", - "refreshSuccess": "Refresh successful", - "refreshFailed": "Refresh failed", - "expandNodeToViewLatestData": "Refresh successful, expand the node to view the latest data", - "copiedToClipboard": "Copied to clipboard", - "enterSchemaName": "Please enter schema name", - "createSchema": "Create Schema", - "schemaNamePattern": "Schema name can only contain letters, numbers and underscores, and must start with a letter or underscore", - "schemaCreatedSuccess": "Schema \"{schemaName}\" created successfully", - "createSchemaFailed": "Failed to create schema", - "refreshConnection": "Refresh Connection", - "viewInfo": "View Information", - "copyConnectionName": "Copy Connection Name", - "refreshDatabase": "Refresh Database", - "copyDatabaseName": "Copy Database Name", - "refreshSchema": "Refresh Schema", - "copySchemaName": "Copy Schema Name", - "refreshTableList": "Refresh Table List", - "createNewTable": "Create New Table", - "viewStatistics": "View Statistics", - "refreshViewList": "Refresh View List", - "createNewView": "Create New View", - "refreshAllMaterializedViews": "Refresh All Materialized Views", - "viewTableStructure": "View Table Structure", - "queryData": "Query Data", - "executeSql": "Execute SQL", - "copyTableName": "Copy Table Name", - "refresh": "Refresh", - "viewViewStructure": "View View Structure", - "viewDefinitionSQL": "View Definition SQL", - "refreshView": "Refresh View", - "copyViewName": "Copy View Name", - "confirmTruncateTable": "Are you sure you want to clear all data in table \"{tableName}\"? This operation cannot be undone!", - "deleteTable": "Delete Table", - "confirmDeleteTable": "Are you sure you want to delete table \"{tableName}\"? This operation cannot be undone!", - "deleteTableSuccess": "Table deleted successfully", - "deleteTableFailed": "Failed to delete table", - "warning": "Warning", - "confirm": "Confirm", - "cancel": "Cancel", - "confirmRefreshMaterializedView": "Are you sure you want to refresh the materialized view \"{viewName}\"?", - "onlyMaterializedViewNeedsRefresh": "Only materialized views need manual refresh", - "confirmExportAllTables": "Are you sure you want to export all tables in the current Schema/Database?", - "confirmExportAllViews": "Are you sure you want to export all views in the current Schema/Database?", - "confirmRefreshAllMaterializedViews": "Are you sure you want to refresh all materialized views in the current Schema/Database? This may take some time.", - "exportFeatureDevelopment": "Export feature is under development...", - "importFeatureDevelopment": "Import feature is under development...", - "editFeatureDevelopment": "Edit feature is under development...", - "deleteFeatureDevelopment": "Delete feature is under development...", - "truncateTableFeatureDevelopment": "Truncate table feature is under development...", - "createViewFeatureDevelopment": "Create view feature is under development...", - "exportAllTablesFeatureDevelopment": "Export all tables feature is under development...", - "exportAllViewsFeatureDevelopment": "Export all views feature is under development...", - "refreshAllMaterializedViewsFeatureDevelopment": "Refresh all materialized views feature is under development...", - "selectItemFromLeft": "Please select an item from the left", - "tableStructure": "Table Structure", - "dataQuery": "Data Query", - "sqlExecution": "SQL Execution", - "objectEditor": "Object Editor", - "viewStructure": "View Structure", - "fieldList": "Field List", - "fields": "Fields", - "indexes": "Indexes", - "constraints": "Constraints", - "columns": "Columns", - "addField": "Add Field", - "serialNumber": "Serial Number", - "fieldName": "Field Name", - "dataType": "Data Type", - "lengthPrecision": "Length/Precision", - "decimalPlaces": "Decimal Places", - "nullable": "Nullable", - "defaultValue": "Default Value", - "primaryKey": "Primary Key", - "unique": "Unique", - "comment": "Comment", - "operation": "Operation", - "fieldDeleted": "Field deleted", - "noFields": "No fields, click \"Add Field\" to start creating", - "type": "Type", - "fieldNamePlaceholder": "e.g. product_name", - "defaultValuePlaceholder": "Default value", - "fieldCommentPlaceholder": "Field comment", - "indexList": "Index List", - "addIndex": "Add Index", - "indexName": "Index Name", - "indexType": "Index Type", - "selectFields": "Select Fields", - "indexDeleted": "Index deleted", - "noIndexes": "No indexes, click \"Add Index\" to start creating", - "indexNamePlaceholder": "Index name", - "typePlaceholder": "Type", - "schemaInfo": "Schema Information", - "copyName": "Copy Name", - "schemaName": "Schema Name", - "objectStatistics": "Object Statistics", - "databaseObjects": "Database Objects", - "noTablesInSchema": "No tables in this Schema", - "noViewsInSchema": "No views in this Schema", - "materializedView": "Materialized View", - "updatable": "Updatable", - "readOnly": "Read-only", - "loadSchemaInfoFailed": "Failed to load Schema information", - "sqlEditor": "SQL Editor", - "loadExample": "Load Example", - "clearSQL": "Clear", - "execute": "Execute", - "executionResult": "Execution Result", - "executionTime": "Execution Time", - "affectedRows": "Affected Rows", - "returned": "Returned", - "records": "records", - "querySuccessNoData": "Query successful, but no data returned", - "enterSQL": "Enter SQL statement above and click \"Execute\" button", - "sqlWarning": "Please be careful when executing UPDATE, DELETE and other data modification statements", - "enterSQLStatement": "Enter SQL statement...", - "sqlPlaceholder": "Enter SQL statement...\\n\\nExample:\\nSELECT * FROM users WHERE id > 100;\\nUPDATE users SET status = 'active' WHERE id = 1;\\nDELETE FROM users WHERE id = 999;", - "invalidDatabaseConnection": "Invalid database connection", - "executeSQLFailed": "SQL execution failed", - "pleaseEnterSQL": "Please enter SQL statement", - "whereCondition": "WHERE condition (e.g: id > 100 AND status = 'active')", - "orderBy": "ORDER BY (e.g: id DESC)", - "query": "Query", - "noData": "No data", - "totalRecords": "{count} records in total", - "designTable": "Design Table - {tableName}", - "designTableAction": "Design Table", - "databaseLabel": "Database", - "schemaLabel": "Schema", - "tableNameLabel": "Table Name", - "tableNamePlaceholder": "Table name", - "commentLabel": "Comment", - "tableCommentPlaceholder": "Table comment", - "unsavedChanges": "Unsaved changes", - "noChanges": "No changes", - "reset": "Reset", - "saveChanges": "Save Changes", - "sqlPreview": "SQL Preview", - "close": "Close", - "confirmSave": "Are you sure you want to save these changes?", - "confirmSaveTitle": "Confirm Save", - "confirmClose": "There are unsaved changes, are you sure you want to close?", - "confirmCloseTitle": "Tip", - "noChangesDetected": "No changes detected", - "noSQLGenerated": "No SQL statement generated", - "saveSuccess": "Save successful", - "saveFailed": "Save failed", - "loadTableStructureFailed": "Failed to load table structure", - "loadTableDataFailed": "Failed to load table data", - "tableInfo": "Table Information", - "tableType": "Type", - "rowCount": "Row Count", - "tableSize": "Size", - "ddlStatement": "DDL Statement", - "copy": "Copy", - "basicInfo": "Basic Information", - "confirmReset": "Are you sure you want to reset all changes?", - "confirmResetTitle": "Tip", - "resetSuccess": "Reset successful", - "missingDatabaseConfig": "Missing database configuration information", - "loadDDLFailed": "Failed to load DDL statement", - "loadDDLFailedMsg": "-- Failed to load DDL, please check database connection", - "viewInfo": "View Information", - "viewName": "View Name", - "viewType": "View Type", - "materializedView": "Materialized View", - "normalView": "Normal View", - "isUpdatable": "Is Updatable", - "yes": "Yes", - "no": "No", - "checkOption": "CHECK OPTION", - "columnInfo": "Column Information", - "columnName": "Column Name", - "dataType": "Data Type", - "nullable": "Nullable", - "position": "Position", - "dependentTables": "Dependent Tables", - "noDependentTables": "No Dependent Tables", - "viewDefinition": "View Definition", - "noDefinition": "No Definition", - "description": "Description", - "viewExplanation": "A View is a virtual table based on one or more tables and does not store actual data.", - "viewBenefit1": "Views can simplify complex queries and improve data security", - "viewBenefit2": "Updatable views allow modifying underlying table data through the view", - "viewBenefit3": "When tables that the view depends on are modified, the view structure is automatically updated", - "viewBenefit4": "Deleting a view does not affect the data in the underlying tables", - "searchPlaceholder": "Search databases, tables, views...", - "loadViewStructureFailed": "Failed to load view structure", - "noData": "No data", - "noColumnInfo": "No column information", - "dataTypes": { - "varchar": "Text", - "char": "Fixed Text", - "text": "Long Text", - "integer": "Integer", - "int": "Integer", - "bigint": "Big Integer", - "smallint": "Small Integer", - "numeric": "Exact Decimal", - "decimal": "Exact Decimal", - "doublePrecision": "Decimal", - "double": "Decimal", - "float": "Decimal", - "json": "JSON", - "date": "Date", - "time": "Time", - "datetime": "DateTime", - "timestamp": "Timestamp", - "datetime2": "Timestamp", - "boolean": "Boolean", - "bit": "Boolean", - "nvarchar": "Unicode Text", - "nvarcharMax": "JSON" - }, - "fieldNameRequired": "Field name is required", - "fieldNameInvalidFormat": "Field name must start with a letter or underscore and contain only letters, numbers, and underscores", - "fieldNameDuplicate": "Duplicate field name \"{name}\"", - "tablesFolder": "Tables", - "viewsFolder": "Views", - "refreshSuccess": "Refreshed successfully", - "refreshFailed": "Refresh failed", - "executeShortcutHint": "Ctrl/Cmd + Enter to execute", - "createDatabase": "Create Database", - "dropDatabase": "Drop Database", - "dropSchema": "Drop Schema", - "renameSchema": "Rename Schema", - "renameDatabase": "Rename Database", - "editTableStructure": "Edit Table Structure", - "enterNameToConfirm": "This action cannot be undone. Type the object name below to confirm:", - "nameMismatch": "The name you entered does not match", - "systemConnectionForbidden": "Write operations are not allowed on the system connection", - "systemDatabase": "System Database", - "systemDatabaseForbidden": "This system database cannot be modified", - "databaseCreated": "Database \"{name}\" created successfully", - "databaseDropped": "Database \"{name}\" dropped successfully", - "schemaDropped": "Schema \"{name}\" dropped successfully", - "schemaRenamed": "Schema renamed to \"{name}\"", - "createDatabaseFailed": "Failed to create database", - "dropDatabaseFailed": "Failed to drop database", - "dropSchemaFailed": "Failed to drop schema", - "renameSchemaFailed": "Failed to rename schema", - "renameDatabaseFailed": "Failed to rename database", - "databaseRenamed": "Database renamed to \"{name}\"", - "enterNewDatabaseName": "Enter new database name", - "databaseNameRequired": "Please enter a database name", - "databaseNamePattern": "Database name must start with a letter or underscore and contain only letters, numbers, and underscores", - "enterDatabaseName": "Enter database name", - "databaseName": "Database Name", - "encoding": "Encoding", - "charset": "Charset", - "collation": "Collation", - "enterNewSchemaName": "Enter new schema name", - "objectTypeDatabase": "database", - "objectTypeSchema": "schema", - "objectTypeTable": "table", - "dangerousActionDefaultWarning": "Are you sure you want to drop {objectType} \"{objectName}\"? This cannot be undone.", - "typeObjectNamePlaceholder": "Type \"{objectName}\" to confirm", - "objectOverview": "Overview", - "objectName": "Object Name", - "objectTypeConnection": "Connection", - "objectTypeView": "View", - "databaseCount": "Database Count", - "databasesUnderConnection": "Databases under this connection", - "connectionHint": "Hint", - "connectionBrowseHint": "Expand the connection in the left tree to browse databases and objects", - "schemaList": "Schema List", - "mysqlSchemaHint": "MySQL does not use schema layers; the database is the top-level container. Expand the left tree to view tables and views.", - "schemaDescriptionHint": "A schema is a logical container for database objects such as tables and views.", - "searchObjectPlaceholder": "Search object name...", - "loadObjectListFailed": "Failed to load object list", - "size": "Size", - "indexTypes": { - "btree": "B-Tree", - "hash": "Hash", - "gin": "GIN", - "gist": "GiST", - "brin": "BRIN", - "nonclustered": "Nonclustered", - "clustered": "Clustered", - "normal": "Normal", - "bitmap": "Bitmap" - } -} diff --git a/web/apps/web-ele/src/locales/langs/en-US/database-monitor.json b/web/apps/web-ele/src/locales/langs/en-US/database-monitor.json deleted file mode 100644 index 54d7fa8..0000000 --- a/web/apps/web-ele/src/locales/langs/en-US/database-monitor.json +++ /dev/null @@ -1,138 +0,0 @@ -{ - "overview": "Overview", - "connectionInfo": "Connection Information", - "performanceStats": "Performance Statistics", - "tableStats": "Table Statistics", - "loadConfigFailed": "Failed to load database configuration", - "loading": "Loading {name}...", - "loadSuccess": "{name} loaded successfully", - "loadFailed": "Failed to load {name}", - "selectDatabase": "Please select a database", - "selectConnection": "Please select a database connection", - "systemConnection": "System", - "autoRefreshing": "Auto-refreshing", - "paused": "Paused", - "connected": "Connected", - "disconnected": "Disconnected", - "featureDeveloping": "Feature under development...", - "connectionUsageRate": "Connection Usage Rate", - "databaseSize": "Database Size", - "cacheHitRatio": "Cache Hit Ratio", - "activeConnections": "Active Connections", - "currentActiveConnections": "Current active connections", - "basicInfo": "Basic Information", - "databaseType": "Database Type", - "hostAddress": "Host Address", - "databaseName": "Database Name", - "version": "Version", - "uptime": "Uptime", - "timezone": "Timezone", - "charset": "Charset", - "totalConnections": "Total Connections", - "maxConnections": "Max Connections", - "idleConnections": "Idle Connections", - "storageInfo": "Storage Information", - "databaseSizeGb": "Database Size (GB)", - "databaseSizeMb": "Database Size (MB)", - "databaseSizeBytes": "Database Size (Bytes)", - "transactionsCommit": "Transactions Commit", - "transactionsRollback": "Transactions Rollback", - "tuplesReturned": "Tuples Returned", - "totalQueries": "Total Queries", - "slowQueries": "Slow Queries", - "bytesReceived": "Bytes Received", - "batchRequestsPerSec": "Batch Requests/sec", - "pageLifeExpectancy": "Page Life Expectancy", - "bufferCacheHitRatio": "Buffer Cache Hit Ratio", - "realtimeActiveConnections": "Real-time Active Connections", - "currentIdleConnections": "Current Idle Connections", - "connectionPoolStatus": "Connection Pool Status", - "congested": "Congested", - "busy": "Busy", - "normal": "Normal", - "idle": "Idle", - "connectionDistribution": "Connection Distribution", - "connectionPoolCapacity": "Connection Pool Capacity", - "usedMaxConnections": "Used / Max Connections", - "connectionDetailInfo": "Connection Detail Information", - "usedConnections": "Used Connections", - "availableConnections": "Available Connections", - "connectionExplanation": "Connection Explanation", - "totalConnectionsDesc": "Total number of connections currently established by the database", - "maxConnectionsDesc": "Maximum allowed number of connections configured for the database", - "activeConnectionsDesc": "Number of connections currently executing queries or transactions", - "idleConnectionsDesc": "Number of connections established but not currently in use", - "usageRateDesc": "Percentage of current connections relative to the maximum number of connections", - "connectionStatus": "Connection Status", - "connectionStatusDesc": "Idle (<50%) / Normal (50-70%) / Busy (70-90%) / Congested (≥90%)", - "corePerformanceMetrics": "Core Performance Metrics", - "totalCommittedTransactions": "Total Committed Transactions", - "totalRollbackTransactions": "Total Rollback Transactions", - "totalQueriesCount": "Total Queries Count", - "queriesNeedOptimization": "Queries Needing Optimization", - "batchRequestsPerSecDesc": "Batch requests per second", - "transactionStats": "Transaction Statistics", - "commitRate": "Commit Rate", - "tuplesFetched": "Tuples Fetched", - "tuplesInserted": "Tuples Inserted", - "tuplesUpdated": "Tuples Updated", - "tuplesDeleted": "Tuples Deleted", - "needOptimization": "Need Optimization", - "queryStats": "Query Statistics", - "batchStats": "Batch Statistics", - "cacheStats": "Cache Statistics", - "networkTraffic": "Network Traffic", - "bytesSent": "Bytes Sent", - "totalTraffic": "Total Traffic", - "performanceMetricExplanation": "Performance Metric Explanation", - "cacheHitRatioDesc": "The proportion of data read from the cache; higher is better", - "transactionsCommitDesc": "Total number of successfully committed transactions", - "transactionsRollbackDesc": "Total number of rollback transactions; too high may indicate issues", - "tupleOperations": "Tuple Operations", - "tupleOperationsDesc": "Statistics for insert, update, delete, and select operations on data rows", - "totalQueriesDesc": "Total number of all queries executed by the database", - "slowQueriesDesc": "Queries with execution time exceeding the threshold, needing optimization", - "networkTrafficDesc": "Number of bytes received and sent by the database", - "batchRequests": "Batch Requests", - "batchRequestsDesc": "Number of batch requests processed per second", - "pageLifeExpectancyDesc": "Average number of seconds a page stays in the buffer pool", - "bufferCacheHitRatioDesc": "Proportion of pages read from the buffer cache", - "statisticalOverview": "Statistical Overview", - "totalTables": "Total Tables", - "totalRows": "Total Rows", - "totalSize": "Total Size", - "searchTable": "Search Table", - "searchTablePlaceholder": "Enter table name to search...", - "top10LargestTables": "Top 10 Largest Tables", - "noTableData": "No table data", - "rank": "Rank", - "schema": "Schema", - "tableName": "Table Name", - "rows": "Rows", - "size": "Size", - "dataSize": "Data Size", - "indexSize": "Index Size", - "inserts": "Inserts", - "updates": "Updates", - "deletes": "Deletes", - "deadTuples": "Dead Tuples", - "autoIncrement": "Auto Increment", - "usedSize": "Used Size", - "tableStatsExplanation": "Table Statistics Explanation", - "tableSizeDesc": "Disk space occupied by the table, including data and indexes", - "tableRowsDesc": "Total number of data rows in the table", - "deadTuplesDesc": "Deleted rows not yet cleaned up, requiring VACUUM", - "insertUpdateDelete": "Insert/Update/Delete", - "tableOpsDesc": "Statistics for insert, update, and delete operations on the table", - "tableDataSizeDesc": "Space occupied by table data", - "tableIndexSizeDesc": "Space occupied by table indexes", - "autoIncrementDesc": "Current value of the auto-increment primary key", - "tableUsedSizeDesc": "Actual space used by the table", - "yes": "Yes", - "no": "No", - "realtime": "Real-time", - "noMatchingTables": "No matching tables found", - "allTablesList": "All Tables List", - "tableCount": "{count} tables", - "tableSize": "Table Size" -} diff --git a/web/apps/web-ele/src/locales/langs/en-US/demos.json b/web/apps/web-ele/src/locales/langs/en-US/demos.json deleted file mode 100644 index 18d43c4..0000000 --- a/web/apps/web-ele/src/locales/langs/en-US/demos.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "title": "Demos", - "elementPlus": "Element Plus", - "form": "Form", - "vben": { - "title": "Project", - "about": "About", - "document": "Document", - "antdv": "Ant Design Vue Version", - "naive-ui": "Naive UI Version", - "element-plus": "Element Plus Version" - }, - "demo": { - "name": "Demo", - "list": "Demo List", - "create": "Create Demo", - "edit": "Edit Demo", - "delete": "Delete Demo", - "detail": "Demo Detail", - "title": "Title", - "content": "Content", - "status": "Status", - "priority": "Priority", - "isActive": "Is Active", - "createTime": "Create Time", - "updateTime": "Update Time", - "creator": "Creator", - "dept": "Department", - "statusDraft": "Draft", - "statusPublished": "Published", - "statusArchived": "Archived", - "priorityLow": "Low", - "priorityMedium": "Medium", - "priorityHigh": "High", - "titlePlaceholder": "Please enter title", - "contentPlaceholder": "Please enter content", - "searchPlaceholder": "Search by title", - "createSuccess": "Created successfully", - "updateSuccess": "Updated successfully", - "deleteSuccess": "Deleted successfully", - "deleteConfirm": "Are you sure to delete this Demo?", - "exportExcel": "Export Excel", - "importExcel": "Import Excel", - "downloadTemplate": "Download Template", - "importSuccess": "Imported successfully", - "selectFile": "Select File" - } -} diff --git a/web/apps/web-ele/src/locales/langs/en-US/dept.json b/web/apps/web-ele/src/locales/langs/en-US/dept.json deleted file mode 100644 index 90b1a48..0000000 --- a/web/apps/web-ele/src/locales/langs/en-US/dept.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "name": "Department", - "title": "Department Management", - "deptName": "Department Name", - "parentDept": "Parent Department", - "deptCode": "Department Code", - "deptCodeHelp": "Optional, unique code to identify the department", - "deptCodeFormatError": "Department code can only contain letters, numbers, underscores and hyphens", - "deptType": "Department Type", - "deptTypeOptions": { - "company": "Company", - "department": "Department", - "team": "Team", - "other": "Other" - }, - "lead": "Department Leader", - "phone": "Department Phone", - "phoneHelp": "Optional, department contact phone number", - "phoneFormatError": "Invalid phone number format", - "email": "Department Email", - "emailHelp": "Optional, department contact email", - "emailFormatError": "Please enter a valid email address", - "status": "Status", - "sort": "Sort", - "description": "Department Description", - "descriptionPlaceholder": "Please enter department description", - "descriptionHelp": "Optional, detailed description of the department", - "operation": "Operation", - "addChildDept": "Add Sub-Department", - "edit": "Edit", - "delete": "Delete", - "updateSuccess": "Department updated successfully", - "updateFailed": "Failed to update department data", - "searchFailed": "Failed to search departments", - "selectDeptFirst": "Please select a department first", - "selectUsersFirst": "Please select users first", - "addUsersSuccess": "Added successfully", - "removeUsersConfirm": "Are you sure you want to delete {0} selected users?", - "removeUsersSuccess": "Deleted successfully", - "removeUsersFailed": "Delete failed" -} diff --git a/web/apps/web-ele/src/locales/langs/en-US/dict.json b/web/apps/web-ele/src/locales/langs/en-US/dict.json deleted file mode 100644 index e9db682..0000000 --- a/web/apps/web-ele/src/locales/langs/en-US/dict.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "Dictionary", - "title": "Dictionary Management", - "dictName": "Dictionary Name", - "dictCode": "Dictionary Code", - "remark": "Remark", - "remarkPlaceholder": "Please enter remark", - "status": "Status", - "operation": "Operation", - "edit": "Edit", - "codeFormatError": "Dictionary code can only contain letters, numbers and underscores", - "selectDictFirst": "Please select dictionary first", - "noData": "No data", - "itemName": "Dictionary Item", - "itemLabel": "Label", - "itemValue": "Value", - "itemIcon": "Icon", - "sort": "Sort", - "isGlobal": "Global Visible", - "globalTag": "Global", - "mainApp": "Main App" -} diff --git a/web/apps/web-ele/src/locales/langs/en-US/dingtalk-sync.json b/web/apps/web-ele/src/locales/langs/en-US/dingtalk-sync.json deleted file mode 100644 index 5f232d6..0000000 --- a/web/apps/web-ele/src/locales/langs/en-US/dingtalk-sync.json +++ /dev/null @@ -1,106 +0,0 @@ -{ - "title": "DingTalk Sync Configuration", - "corpId": "Corp ID", - "corpIdPlaceholder": "Enter AgentId", - "appKey": "App Key", - "appKeyPlaceholder": "Enter AppKey", - "appSecret": "App Secret", - "appSecretPlaceholder": "Enter AppSecret", - "testConnection": "Test Connection", - "testSuccess": "Connection Successful", - "testFail": "Connection Failed", - "testing": "Testing...", - "syncScope": "Sync Scope", - "syncScopePlaceholder": "Please select", - "syncScopeTip": "Select an organization as the top-level for data synchronization. Once synced, this organization cannot be changed.", - "syncScopeLocked": "Initial sync completed. Sync scope is now locked. Contact admin to change.", - "syncStats": "Sync Statistics", - "syncType": "Sync Type", - "totalCount": "Total", - "successCount": "Synced", - "failCount": "Failed", - "notSynced": "Not Synced", - "syncTime": "Sync Time", - "syncStatus": "Status", - "statusRunning": "Syncing", - "statusSuccess": "Success", - "statusPartial": "Partial", - "statusFailed": "Failed", - "operation": "Operation", - "sync": "Sync", - "syncing": "Syncing...", - "syncDept": "Organization", - "syncUser": "User", - "syncDeptSuccess": "Organization sync completed", - "syncUserSuccess": "User sync completed", - "syncFail": "Sync failed", - "triggerEvents": "Trigger Events", - "triggerEvent": "Trigger Event", - "description": "Description", - "enableSyncDept": "Enable Sync Organization", - "enableSyncDeptDesc": "Trigger organization sync on add, delete, or modify organization info", - "enableSyncUser": "Enable Sync User", - "enableSyncUserDesc": "Trigger user sync on add, delete, or modify user info", - "save": "Save", - "saving": "Saving...", - "saveSuccess": "Saved successfully", - "saveFail": "Save failed", - "corpName": "Corp Name", - "loadingDeptTree": "Loading department tree...", - "callbackConfig": "Event Callback Configuration", - "callbackConfigTip": "After configuring the callback URL, DingTalk contacts changes will be pushed to this system in real-time for incremental sync.", - "callbackUrl": "Callback URL", - "callbackUrlPlaceholder": "Enter callback URL, e.g. https://example.com/api/core/dingtalk-sync/callback", - "callbackToken": "Callback Token", - "callbackTokenPlaceholder": "Enter callback token", - "callbackAesKey": "Callback AES Key", - "callbackAesKeyPlaceholder": "Enter callback AES Key (43 characters)", - "callbackStatus": "Callback Status", - "callbackRegistered": "Registered", - "callbackNotRegistered": "Not Registered", - "registerCallback": "Register Callback", - "deleteCallback": "Delete Callback", - "registerSuccess": "Callback registered successfully", - "registerFail": "Failed to register callback", - "deleteCallbackSuccess": "Callback deleted successfully", - "deleteCallbackFail": "Failed to delete callback", - "registering": "Registering...", - "subscribedEvents": "Subscribed Events", - "generateRandom": "Generate", - "streamConfig": "Stream Mode (Real-time Sync)", - "streamConfigTip": "Receive DingTalk contacts change events in real-time via WebSocket connection. No public callback URL required.", - "streamStatus": "Connection Status", - "streamConnected": "Connected", - "streamDisconnected": "Disconnected", - "streamTotalEvents": "Events Received", - "streamLastEvent": "Last Event", - "streamLastEventTime": "Last Event Time", - "streamEventNone": "None", - "streamEventLog": "Incremental Sync Log", - "refresh": "Refresh", - "eventType": "Event Type", - "targetType": "Target Type", - "targetName": "Target Name", - "eventStatus": "Status", - "eventTime": "Time", - "eventCreate": "Create Org", - "eventModify": "Modify Org", - "eventRemove": "Remove Org", - "eventAddUser": "Add User", - "eventModifyUser": "Modify User", - "eventLeaveUser": "User Left", - "eventActiveUser": "User Activated", - "guideTitle": "DingTalk Sync Setup Guide", - "guideStep1Title": "Create a DingTalk Internal App", - "guideStep1Desc": "Log in to DingTalk Open Platform (open.dingtalk.com), navigate to \"App Development\" -> \"Internal Development\", create an H5 mini-app, and obtain the AppKey and AppSecret.", - "guideStep2Title": "Configure App Permissions", - "guideStep2Desc": "In the app management page, go to \"Permission Management\" and enable the following permissions: \"Contact Department Info Read\", \"Member Info Read\", \"Contact Department Members Read\", \"Employee Phone Number Info\", etc.", - "guideStep3Title": "Enter Credentials", - "guideStep3Desc": "Fill in the CorpId, AppKey, and AppSecret into the corresponding fields on this page, then click \"Test Connection\" to verify the credentials.", - "guideStep4Title": "Set Sync Scope & Run Full Sync", - "guideStep4Desc": "After a successful connection, select the root department in \"Sync Scope\", then click \"Sync\" in the statistics table — sync organizations first, then users.", - "guideStep5Title": "Enable Stream Mode on DingTalk Platform", - "guideStep5Desc": "Log in to DingTalk Open Platform, go to app -> \"Events & Callbacks\", select \"Stream Mode\" for push method, and save. No callback URL, Token, or AES Key needed.", - "guideStep6Title": "Enable Trigger Events", - "guideStep6Desc": "In the \"Trigger Events\" section, check the event types to auto-sync (organizations, users) and save. DingTalk contacts changes will then be pushed to the system for incremental sync automatically." -} diff --git a/web/apps/web-ele/src/locales/langs/en-US/document-generator.json b/web/apps/web-ele/src/locales/langs/en-US/document-generator.json deleted file mode 100644 index 4ad9577..0000000 --- a/web/apps/web-ele/src/locales/langs/en-US/document-generator.json +++ /dev/null @@ -1,527 +0,0 @@ -{ - "documentGenerator": { - "title": "Document Generator", - "templateManagement": "Template Management", - "sealManagement": "Seal Management", - "documentList": "Document List", - - "addTemplate": "Add Template", - "editTemplate": "Edit Template", - "copyTemplate": "Copy Template", - "previewTemplate": "Preview Template", - - "templateName": "Template Name", - "templateCode": "Template Code", - "category": "Category", - "formCode": "Form Code", - "workflowCode": "Workflow Code", - "bindingType": "Binding Type", - "bindToWorkflow": "Bind to Workflow", - "bindToForm": "Bind to Form", - "workflowLinkedForm": "Workflow linked form", - - "basicInfo": "Basic Info", - "pageSettings": "Page Settings", - "autoGenerate": "Auto Generate", - "watermark": "Watermark", - "templateDesign": "Template Design", - - "pageSize": "Page Size", - "pageSizeCustom": "Custom", - "customPageWidth": "Page Width", - "customPageHeight": "Page Height", - "pageOrientation": "Orientation", - "pageMargin": "Page Margin", - "top": "Top", - "right": "Right", - "bottom": "Bottom", - "left": "Left", - "showPageNumber": "Show Page Number", - "pageNumberSettings": "Page Number", - "pageNumberPosition": "Position", - "pageNumberPositionFooter": "Footer", - "pageNumberPositionHeader": "Header", - "pageNumberAlign": "Alignment", - "pageNumberFormat": "Format", - "pageNumberFormatChinese": "第 1 页 / 共 10 页", - "pageNumberFormatFraction": "1 / 10", - "pageNumberFormatEnglish": "Page 1 of 10", - "pageNumberFontSize": "Font Size", - "pageNumberColor": "Color", - - "enableAutoGenerate": "Enable Auto Generate", - "generateTrigger": "Trigger", - - "enableWatermark": "Enable Watermark", - "watermarkText": "Watermark Text", - "watermarkOpacity": "Opacity", - "watermarkAngle": "Angle", - - "elementLibrary": "Element Library", - "canvas": "Canvas", - "properties": "Properties", - "dragElementHere": "Click elements on the left to add to canvas", - "selectElementToEdit": "Select an element to edit properties", - - "basicProperties": "Basic Properties", - "elementType": "Element Type", - "content": "Content", - "fieldName": "Field Name", - "fieldLabel": "Label", - "format": "Format", - "dataSource": "Data Source", - "columns": "Columns", - "sealType": "Seal Type", - - "position": "Position", - "width": "Width", - "height": "Height", - - "style": "Style", - "fontSize": "Font Size", - "fontWeight": "Font Weight", - "textAlign": "Text Align", - "alignLeft": "Left", - "alignCenter": "Center", - "alignRight": "Right", - "color": "Color", - - "publish": "Publish", - "unpublish": "Unpublish", - "builtin": "Built-in", - - "confirmDelete": "Are you sure to delete this template?", - "confirmUnpublish": "Are you sure to unpublish this template?", - "builtinCannotDelete": "Built-in templates cannot be deleted", - "publishSuccess": "Published successfully", - "unpublishSuccess": "Unpublished successfully", - - "pleaseInputName": "Please input template name", - "pleaseInputCode": "Please input template code", - "codeFormatError": "Code must start with a letter and contain only letters, numbers and underscores", - "pleaseInputNameAndCode": "Please input template name and code", - "pleaseInputFormCode": "Please input form code", - "pleaseInputWorkflowCode": "Please input workflow code", - "pleaseSelectWorkflow": "Please select workflow (optional)", - "pleaseSelectForm": "Please select form", - "pleaseInputWatermarkText": "Please input watermark text", - - "newCode": "New Code", - "newName": "New Name", - - "previewFailed": "Preview failed", - - "generateDocument": "Generate Document", - "regenerate": "Regenerate", - "downloadDocument": "Download Document", - "documentName": "Document Name", - "documentNo": "Document No.", - "generateTime": "Generate Time", - "generator": "Generator", - "downloadCount": "Download Count", - - "sealName": "Seal Name", - "sealImage": "Seal Image", - "uploadSeal": "Upload Seal", - "sealOwner": "Owner", - "sealScope": "Scope", - - "noDocuments": "No documents", - "selectTemplate": "Select Template", - "pleaseSelectTemplate": "Please select a template", - "generate": "Generate", - "generateSuccess": "Generated successfully", - "generateFailed": "Generate failed", - "regenerateSuccess": "Regenerated successfully", - "regenerateFailed": "Regenerate failed", - "pageCount": "Pages", - "fileSize": "File Size", - "generateType": "Type", - "auto": "Auto", - "manual": "Manual", - - "elementText": "Text", - "elementField": "Field", - "elementTable": "Table", - "elementImage": "Image", - "selectImage": "Select Image", - "elementSignature": "Signature", - "elementSeal": "Seal", - "elementQrcode": "QR Code", - "elementDivider": "Divider", - - "noDataSource": "(No data source)", - "signatureDefault": "Signature", - "fieldNamePlaceholder": "e.g. applicant_name", - "fieldLabelPlaceholder": "e.g. Applicant:", - "dataSourcePlaceholder": "e.g. expense_items", - "columnFieldPlaceholder": "Field", - "columnLabelPlaceholder": "Title", - "columnWidthPlaceholder": "Width", - "signatureFieldPlaceholder": "Signature field name", - - "formatNone": "None", - "formatDate": "Date", - "formatDatetime": "Datetime", - "formatMoney": "Money", - "formatNumber": "Number", - - "sealCompany": "Company Seal", - "sealDepartment": "Department Seal", - "sealPersonal": "Personal Seal", - "sealFinance": "Finance Seal", - "sealContract": "Contract Seal", - - "selectedSeal": "Selected Seal", - "selectSeal": "Select Seal", - "noSealSelected": "No seal selected", - "noSealImage": "No image", - "noAvailableSeals": "No available seals", - "clearSeal": "Clear Seal", - "sealLabel": "Seal Label", - "sealLabelPlaceholder": "Enter seal label (e.g., Seal Here)", - "allTypes": "All Types", - "noSealsOfType": "No seals of this type", - - "pleaseInputText": "Please input text", - "fieldPrefix": "Field: ", - "column": "Column", - "addColumn": "Add Column", - - "fontNormal": "Normal", - "fontBold": "Bold", - "alignLeft": "Left", - "alignCenter": "Center", - "alignRight": "Right", - - "notSet": "Not set", - "notSetDataSource": "Data source not set", - - "documents": "Documents", - - "categoryLeave": "Leave", - "categoryExpense": "Expense", - "categoryPurchase": "Purchase", - "categoryContract": "Contract", - "categoryCertificate": "Certificate", - "categoryOther": "Other", - - "statusPublished": "Published", - "statusDraft": "Draft", - - "orientationPortrait": "Portrait", - "orientationLandscape": "Landscape", - - "triggerOnApprove": "On Approval", - "triggerOnSubmit": "On Submit", - "triggerOnComplete": "On Complete", - - "deleteConfirmTitle": "Delete Confirmation", - "deleteSuccess": "Template {name} deleted", - "unpublishConfirmTitle": "Unpublish Confirmation", - - "copyTitle": "Copy Template", - "copyCodePlaceholder": "Enter the new template code", - "copyCodeRule": "Code can only contain letters, numbers, underscores and hyphens", - "copy": "Copy", - "copySuccess": "Copied successfully", - "importExport": { - "export": "Export Config", - "import": "Import Config", - "exportSuccess": "Template config exported", - "exportFailed": "Export failed", - "importTitle": "Import Document Template", - "dragOrClick": "Drag JSON file here or click to upload", - "onlyJson": "Only .json files are supported", - "fileParseError": "Failed to parse file. Please check the format", - "checking": "Checking...", - "codeConflictTip": "Template code already exists. Enter a new code to import", - "codeAvailable": "Template code is available", - "newCodePlaceholder": "Enter a new template code", - "importSuccess": "Template imported successfully", - "importFailed": "Import failed", - "confirmImport": "Confirm Import", - "reselect": "Reselect", - "templateInfo": "Template Info", - "appTip": "Imported template belongs to the current app (draft status)", - "bindingTip": "Ensure linked form/workflow codes exist in the target environment" - }, - - "design": "Design", - "editInfo": "Edit Info", - "createSuccess": "Created successfully", - "saveSuccess": "Saved successfully", - "autoSave": { - "saving": "Saving...", - "saved": "Saved", - "unsaved": "Unsaved" - }, - - "layoutElements": "Layout", - "headerElements": "Header Area", - "infoElements": "Info Area", - "tableElements": "Table Area", - "contentElements": "Content", - "approvalElements": "Approval Area", - "otherElements": "Other Elements", - "footerElements": "Footer Area", - - "rowContainer": "Row Container", - "columnCount": "Column Count", - "columnWidths": "Column Widths", - "columnGap": "Column Gap", - "addRowColumn": "Add Column", - "removeRowColumn": "Remove Column", - "dropElementHere": "Drop element here", - - "documentHeader": "Document Header", - "documentTitle": "Document Title", - "documentInfo": "Document Info", - "infoRow": "Info Row", - "infoTable": "Info Table", - "smartTable": "Smart Table", - "smartText": "Smart Text", - "smartTextPlaceholder": "Type text here...", - "smartTextItalic": "Italic", - "smartTextUnderline": "Underline", - "smartTextStrikethrough": "Strikethrough", - "smartTextUnorderedList": "Unordered List", - "smartTextOrderedList": "Ordered List", - "smartTextLineHeight": "Line Height", - "smartTextHeading": "Heading", - "smartTextParagraph": "Paragraph", - "smartTextH1": "Heading 1", - "smartTextH2": "Heading 2", - "smartTextH3": "Heading 3", - "smartTextInsertTable": "Insert Table", - "smartTextRemoveTable": "Remove Table", - "smartTableRows": "Rows", - "smartTableCols": "Columns", - "smartTableAddRow": "Add Row", - "smartTableAddCol": "Add Column", - "smartTableDeleteRow": "Delete Row", - "smartTableDeleteCol": "Delete Column", - "smartTableMergeCells": "Merge Cells", - "smartTableSplitCell": "Split Cell", - "smartTableCellContent": "Cell Content", - "smartTableSelectCells": "Please select cells first", - "smartTableInsertText": "Enter text or insert variable", - "smartTableInsertRowAbove": "Insert Row Above", - "smartTableInsertRowBelow": "Insert Row Below", - "smartTableInsertColLeft": "Insert Column Left", - "smartTableInsertColRight": "Insert Column Right", - "smartTableClearContent": "Clear Content", - "smartTableBold": "Bold", - "smartTableFontSize": "Font Size", - "smartTableFontColor": "Font Color", - "smartTableBgColor": "Background Color", - "smartTableToggleBorder": "Border Settings", - "borderAll": "All Borders", - "borderOuter": "Outer Border", - "borderInner": "Inner Border", - "borderHorizontal": "Horizontal Border", - "borderVertical": "Vertical Border", - "borderColorLabel": "Border Color", - "customColor": "Custom", - "smartTableColumnWidths": "Column Widths", - "labelField": "Label Field", - "detailTable": "Detail Table", - "amountField": "Amount Field", - "paragraph": "Paragraph", - "richText": "Rich Text", - "approvalArea": "Approval Area", - "barcode": "Barcode", - "spacer": "Spacer", - "documentFooter": "Document Footer", - - "searchElements": "Search elements", - "elementTitle": "Title", - "elementParagraph": "Paragraph", - - "documentTemplate": "Document Template", - "elements": "elements", - - "viewJSON": "View JSON", - "jsonPreview": "JSON Preview", - "copyCode": "Copy Code", - "importConfig": "Import Config", - "pasteJsonConfig": "Paste JSON configuration", - "importSuccess": "Imported successfully", - "exportSuccess": "Exported successfully", - "configFormatError": "Configuration format error", - "copiedToClipboard": "Copied to clipboard", - "copyFailed": "Copy failed", - "pleaseEnterConfig": "Please enter configuration", - "pleaseAddElements": "Please add elements first", - "previewNotImplemented": "Preview not implemented yet", - "pdfPreview": "PDF Preview", - "generatingPreview": "Generating preview...", - "noPreviewContent": "No preview content", - "saveBeforePreview": "Please save the template before preview", - "viewHTML": "View HTML", - "htmlPreview": "HTML Preview", - "htmlPreviewFailed": "HTML preview failed", - "clearCanvasConfirm": "Are you sure to clear the canvas? This action cannot be undone.", - "cleared": "Cleared", - "releaseToAdd": "Release to add element", - - "elementProperties": "Element Properties", - "templateSettings": "Template Settings", - - "signatureZone": "Signature Zone", - "sealZone": "Seal Zone", - "qrcodeContent": "QR Code Content", - "qrcodeContentPlaceholder": "Enter QR code content or field name", - "qrcodeType": "QR Code Type", - "qrcodeTypeText": "Text", - "qrcodeTypeUrl": "URL Link", - "qrcodeTypePhone": "Phone Number", - "qrcodeTypeEmail": "Email", - "signatureFieldName": "Signature field name", - "dividerLine": "Divider Line", - "sourceCode": "Source", - "pagePreview": "Preview", - "fontFamily": "Font Family", - "defaultFont": "Default Font", - "lineHeight": "Line Height", - "fontWeightNormal": "Normal", - "fontWeightBold": "Bold", - "alignJustify": "Justify", - "titlePlaceholder": "Enter title", - "contentPlaceholder": "Enter content, use {{variable}} to insert variables", - "imageUrl": "Image URL", - "imageUrlPlaceholder": "Enter image URL or field name", - "imageLabelPlaceholder": "e.g. Signature, Approver", - "labelPosition": "Label Position", - "labelPositionTop": "Top", - "labelPositionBottom": "Bottom", - "labelPositionLeft": "Left", - "labelPositionRight": "Right", - "labelFontSize": "Label Font Size", - "showUnderline": "Show Underline", - "lineStyle": "Line Style", - "lineSolid": "Solid", - "lineDashed": "Dashed", - "lineDotted": "Dotted", - "lineWidth": "Line Width", - "lineColor": "Line Color", - "showPrintDate": "Show Print Date", - "footerContentPlaceholder": "Enter footer content", - "yes": "Yes", - "no": "No", - "fieldsConfig": "Fields Configuration", - "rowsConfig": "Rows Configuration", - "field": "Field", - "row": "Row", - "addField": "Add Field", - "addRow": "Add Row", - "newField": "New Field", - "label": "Label", - "value": "Value", - "labelWidth": "Label Width", - "labelBgColor": "Label Background", - "labelColor": "Label Font Color", - "fieldFontSize": "Field Font Size", - "fieldColor": "Field Font Color", - "valueFontSize": "Value Font Size", - "valueColor": "Value Font Color", - "fontSettings": "Font Settings", - "fontColor": "Font Color", - "labelFontWeight": "Label Bold", - "headerBgColor": "Header Background", - "headerFontSize": "Header Font Size", - "headerColor": "Header Font Color", - "headerFontWeight": "Header Bold", - "labelSettings": "Label Settings", - "contentFontSize": "Content Font Size", - "contentColor": "Content Font Color", - "columnWidth": "Width", - "showIndex": "Show Index", - "indexWidth": "Index Width", - "noBackground": "No Background", - "borderStyle": "Border Style", - "borderNone": "No Border", - "insertVariable": "Insert Variable", - "searchVariable": "Search variables...", - "noVariables": "No variables", - "otherVariables": "Other", - "varApplicant": "Applicant", - "varDepartment": "Department", - "varPosition": "Position", - "varApplyDate": "Apply Date", - "varDocNo": "Document No", - "varCreateDate": "Create Date", - "varPhone": "Phone", - "varEmail": "Email", - "varTotalAmount": "Total Amount", - "varRemark": "Remark", - - "placeholder": { - "name": "Search template name" - }, - "groupFormFields": "Form Fields", - "groupCalculationFields": "Calculation Fields", - "groupSubTablePrefix": "Sub Table: ", - "subTableDataSourceSuffix": " (Data Source)", - "subTableFirstRowSuffix": " (First Row)", - "nameSuffix": " (Name)", - "companyName": "Company Name", - "headerType": "Header Type", - "noImage": "No Image", - "positionMode": "Position Mode", - "positionInline": "Inline", - "positionFloat": "Float" - }, - "calculation": { - "title": "Calculation Config", - "enableCalculation": "Enable Calculation", - "enableCalculationHint": "Enable to define calculation and aggregation fields in the calculation config step", - "calculationFields": "Calculation Fields", - "aggregationFields": "Aggregation Fields", - "calculationField": "Calculation Field", - "aggregationField": "Aggregation Field", - "noCalculationFields": "No calculation fields, click add button to create", - "noAggregationFields": "No aggregation fields, click add button to create", - "fieldName": "Field Name", - "fieldLabel": "Field Label", - "fieldNamePlaceholder": "e.g. total_amount", - "fieldLabelPlaceholder": "e.g. Total Amount", - "formula": "Formula", - "formulaPlaceholder": "e.g. quantity * unit_price * (1 - discount_rate)", - "formulaHint": "Operators: +, -, *, /, %, ** | Functions: round, abs, numberToChinese | Can reference other fields and aggregation results", - "format": "Format", - "formatNumber": "Number", - "formatMoney": "Money", - "formatPercent": "Percent", - "formatChinese": "Chinese Amount", - "decimalPlaces": "Decimal Places", - "dataSource": "Data Source", - "selectSubTable": "Select sub table", - "aggregateField": "Aggregate Field", - "selectField": "Select field", - "aggregateFunction": "Aggregate Function", - "funcSum": "Sum", - "funcAvg": "Average", - "funcMax": "Maximum", - "funcMin": "Minimum", - "funcCount": "Count", - "usageTitle": "Usage Guide", - "usageHint1": "Aggregation fields are used to summarize sub-table data (e.g. total amount of order items)", - "usageHint2": "Calculation fields are used for formula calculations based on form fields or aggregation results", - "usageHint3": "Calculation results can be referenced in document templates by variable name (wrap with double curly braces)", - "usageHint4": "Chinese format will automatically convert numbers to Chinese amount format", - "positionMode": "Position Mode", - "positionInline": "Inline", - "positionFloat": "Float", - "floatX": "X", - "floatY": "Y", - "floatZIndex": "Z-Index", - "editorModeComponent": "Component", - "editorModeWysiwyg": "Document", - "wysiwygInsertImage": "Insert Image", - "wysiwygInsertSeal": "Insert Seal", - "wysiwygPageCount": "{count} pages", - "hideAttributePanel": "Hide Properties", - "showAttributePanel": "Show Properties" - } -} diff --git a/web/apps/web-ele/src/locales/langs/en-US/electronic-seal.json b/web/apps/web-ele/src/locales/langs/en-US/electronic-seal.json deleted file mode 100644 index e04a9fa..0000000 --- a/web/apps/web-ele/src/locales/langs/en-US/electronic-seal.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "title": "Electronic Seal Management", - "create": "Create Seal", - "createSeal": "Create Seal", - "editSeal": "Edit Seal", - "name": "Seal Name", - "sealTypeLabel": "Seal Type", - "ownerTypeLabel": "Owner Type", - "scopeLabel": "Scope", - "sealImage": "Seal Image", - "description": "Description", - "width": "Width", - "height": "Height", - "enable": "Enable", - "disable": "Disable", - "sealType": { - "company": "Company Seal", - "department": "Department Seal", - "personal": "Personal Seal", - "contract": "Contract Seal", - "finance": "Finance Seal" - }, - "status": { - "active": "Active", - "disabled": "Disabled" - }, - "ownerType": { - "all": "Everyone", - "dept": "Specific Department", - "role": "Specific Role", - "user": "Specific User" - }, - "scope": { - "all": "All Templates", - "specific": "Specific Templates" - }, - "placeholder": { - "name": "Please enter seal name", - "sealType": "Please select seal type", - "ownerType": "Please select owner type", - "scope": "Please select scope", - "sealImage": "Please upload seal image", - "description": "Please enter description", - "selectDept": "Please select department", - "selectRole": "Please select role", - "selectUser": "Please select user", - "selectTemplate": "Please select template" - }, - "deleteConfirm": "Are you sure you want to delete seal \"{name}\"?", - "deleteConfirmTitle": "Delete Confirmation", - "deleteSuccess": "Deleted successfully", - "disableConfirm": "Are you sure you want to disable this seal? It will not be available after disabled.", - "disableConfirmTitle": "Disable Confirmation", - "disableSuccess": "Disabled successfully", - "enableSuccess": "Enabled successfully", - "selectDept": "Select Department", - "selectRole": "Select Role", - "selectUser": "Select User", - "selectTemplate": "Select Template" -} diff --git a/web/apps/web-ele/src/locales/langs/en-US/feishu-sync.json b/web/apps/web-ele/src/locales/langs/en-US/feishu-sync.json deleted file mode 100644 index ee87804..0000000 --- a/web/apps/web-ele/src/locales/langs/en-US/feishu-sync.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "title": "Feishu Sync Configuration", - "appId": "App ID", - "appIdPlaceholder": "Enter Feishu App ID", - "appSecret": "App Secret", - "appSecretPlaceholder": "Enter Feishu App Secret", - "testConnection": "Test Connection", - "testSuccess": "Connection Successful", - "testFail": "Connection Failed", - "testing": "Testing...", - "syncScope": "Sync Scope", - "syncScopePlaceholder": "Please select", - "syncScopeTip": "Select an organization as the top-level for data synchronization. Once synced, this organization cannot be changed.", - "syncScopeLocked": "Initial sync completed. Sync scope is now locked. Contact admin to change.", - "syncStats": "Sync Statistics", - "syncType": "Sync Type", - "totalCount": "Total", - "successCount": "Synced", - "failCount": "Failed", - "notSynced": "Not Synced", - "syncTime": "Sync Time", - "operation": "Operation", - "sync": "Sync", - "syncing": "Syncing...", - "syncDept": "Organization", - "syncUser": "User", - "syncDeptSuccess": "Organization sync completed", - "syncUserSuccess": "User sync completed", - "syncFail": "Sync failed", - "triggerEvents": "Trigger Events", - "triggerEvent": "Trigger Event", - "description": "Description", - "enableSyncDept": "Enable Sync Organization", - "enableSyncDeptDesc": "Trigger organization sync on add, delete, or modify organization info", - "enableSyncUser": "Enable Sync User", - "enableSyncUserDesc": "Trigger user sync on add, delete, or modify user info", - "save": "Save", - "saving": "Saving...", - "saveSuccess": "Saved successfully", - "saveFail": "Save failed", - "callbackConfig": "Event Callback Configuration", - "callbackConfigTip": "After configuring the callback URL, Feishu contacts changes will be pushed to this system in real-time for incremental sync. Feishu callbacks must be manually configured in the Feishu Open Platform console.", - "callbackUrl": "Request URL", - "callbackUrlPlaceholder": "Enter request URL, e.g. https://example.com/api/core/feishu-sync/callback", - "encryptKey": "Encrypt Key", - "encryptKeyPlaceholder": "Enter Encrypt Key", - "verificationToken": "Verification Token", - "verificationTokenPlaceholder": "Enter Verification Token", - "callbackStatus": "Callback Status", - "callbackConfigured": "Configured", - "callbackNotConfigured": "Not Configured", - "subscribedEvents": "Subscribed Events", - "generateRandom": "Generate", - "guideTitle": "Feishu Sync Setup Guide", - "guideStep1Title": "Create a Feishu Custom App", - "guideStep1Desc": "Log in to Feishu Open Platform (open.feishu.cn), go to \"Developer Console\", create a custom app, and obtain the App ID and App Secret.", - "guideStep2Title": "Configure App Permissions", - "guideStep2Desc": "In the app management page, go to \"Permission Management\" and enable contact-related permissions: \"Get Department Basic Info\", \"Get Department Organization Info\", \"Get User Basic Info\", \"Get User Phone Number\", etc.", - "guideStep3Title": "Enter Credentials & Run Full Sync", - "guideStep3Desc": "Fill in App ID and App Secret, click \"Test Connection\" to verify. After success, select the sync scope and sync organizations first, then users.", - "guideStep4Title": "Configure Event Subscription (Real-time Sync)", - "guideStep4Desc": "In the Feishu Open Platform app's \"Event Subscription\" page, set the request URL (format: https://your-domain/api/core/feishu-sync/callback), enter the Encrypt Key and Verification Token generated on this page into Feishu console, and subscribe to contact events.", - "guideStep5Title": "Enable Trigger Events", - "guideStep5Desc": "In the \"Trigger Events\" section, check the event types to auto-sync (organizations, users) and save. Feishu contacts changes will then be pushed to the system for incremental sync automatically." -} diff --git a/web/apps/web-ele/src/locales/langs/en-US/file-manager.json b/web/apps/web-ele/src/locales/langs/en-US/file-manager.json deleted file mode 100644 index e3f9b0a..0000000 --- a/web/apps/web-ele/src/locales/langs/en-US/file-manager.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "myFiles": "My Files", - "fileManagement": "File Management", - "folderName": "Folder Name", - "newFolder": "New Folder", - "rename": "Rename", - "name": "Name", - "size": "Size", - "modifiedTime": "Modified Time", - "actions": "Actions", - "search": "Search...", - "listView": "List View", - "gridView": "Grid View", - "batchDelete": "Batch Delete", - "upload": "Upload", - "uploadFile": "Upload File", - "uploadFolder": "Upload Folder", - "open": "Open", - "download": "Download", - "delete": "Delete", - "selectAll": "Select All", - "noFiles": "No Files", - "pleaseEnterName": "Please enter name", - "pleaseEnterFolderName": "Please enter folder name", - "renameSuccess": "Rename successful", - "createSuccess": "Create successful", - "deleteSuccess": "Delete successful", - "deleteConfirm": "Are you sure you want to delete {name}?", - "batchDeleteConfirm": "Are you sure you want to delete the selected {count} items?", - "uploadSuccess": "Successfully uploaded {count} files", - "uploadFailed": "{count} files failed to upload", - "uploadError": "Upload error", - "folderDownloadNotSupported": "Folder download is not supported currently", - "downloadFailed": "Download failed", - "previewFailed": "Preview failed", - "previewNotSupported": "This file type is not supported for preview", - "previewRenderError": "File rendering failed", - "filePreview": "File Preview", - "tip": "Tip", - "cancel": "Cancel", - "confirm": "Confirm" -} diff --git a/web/apps/web-ele/src/locales/langs/en-US/form-manager.json b/web/apps/web-ele/src/locales/langs/en-US/form-manager.json deleted file mode 100644 index 406fea5..0000000 --- a/web/apps/web-ele/src/locales/langs/en-US/form-manager.json +++ /dev/null @@ -1,803 +0,0 @@ -{ - "form": "Form", - "name": "Form Name", - "code": "Form Code", - "application": "Application", - "type": "Form Type", - "status": "Status", - "description": "Description", - "createTime": "Create Time", - "updateTime": "Update Time", - "actions": "Actions", - "showInMobile": "Show in Mobile", - "showInMobileTip": "When enabled, this form will be displayed in the mobile workbench", - "icon": "Form Icon", - "iconBgColor": "Icon Background Color", - "iconPreview": "Preview", - "iconBgColorPlaceholder": "Enter custom color or gradient", - "iconPlaceholder": "Select form icon", - "placeholder": { - "name": "Please enter form name", - "code": "Please enter form code", - "type": "Please select form type", - "status": "Please select status" - }, - "typeMap": { - "all": "All", - "normal": "Normal Form", - "workflow": "Workflow Form" - }, - "statusMap": { - "all": "All", - "published": "Published", - "draft": "Draft" - }, - "create": "New Form", - "batchDelete": "Batch Delete", - "batchDeleteWithCount": "Batch Delete ({count})", - "deleteConfirm": "Are you sure you want to delete form \"{name}\"?", - "deleteConfirmTitle": "Delete Confirmation", - "deleteConfirmMessage": "The following actions will be performed when deleting the form:

1. Delete the form menu
2. Delete the form API permissions
3. Delete the form field permissions
4. Delete the form data permissions
5. Permanently delete form metadata and design config

Are you sure you want to delete form \"{name}\"?", - "deleteSuccess": "Form deleted: {name}", - "batchDeleteConfirm": "Are you sure you want to delete {count} selected forms?", - "batchDeleteConfirmTitle": "Batch Delete Confirmation", - "batchDeleteSuccess": "{count} forms deleted", - "unpublishSuccess": "Form \"{name}\" unpublished", - "unpublishFailed": "Unpublish failed", - "unpublishConfirmTitle": "Unpublish Confirmation", - "unpublishConfirmMessage": "The following actions will be performed after unpublishing:

1. Delete the form menu
2. Delete the form API permissions
3. Delete the form field permissions
4. Delete the form data permissions

Are you sure you want to unpublish?", - "copyCodePlaceholder": "Please enter new form code", - "copyTitle": "Copy Form", - "copyCodeRule": "Code can only contain letters, numbers, underscores, and dashes", - "codeFormatError": "Code must start with a letter and contain only letters, numbers and underscores", - "copySuccess": "Copied successfully", - "preview": "Preview", - "publish": "Publish", - "unpublish": "Unpublish", - "copy": "Copy", - "visit": "Visit Form", - "setAsHome": "Set as Home", - "setAsHomeTitle": "Set as Default Home", - "setAsHomeConfirm": "Are you sure you want to set form \"{name}\" as the default home page?", - "setAsHomePath": "Home Path", - "setAsHomeTip": "After setting, users will be redirected to this form page by default after login.", - "setAsHomeAppTip": "This form belongs to app \"{app}\". The home page config of that app will be updated.", - "setHomeSuccess": "Set as default home page successfully", - "setHomeFailed": "Failed to set as home page", - "more": "More", - "design": "Design", - "editInfo": "Edit Info", - "saveSuccess": "Form saved successfully", - "previewDialog": { - "title": "Form Preview", - "loadFailed": "Failed to load form configuration", - "verifySuccess": "Validation passed", - "realtimeData": "Realtime Data (v-model):", - "noConfig": "No form configuration", - "close": "Close", - "verifySubmit": "Verify Submit", - "verifyFailed": "Form validation failed" - }, - "editor": { - "title": "Online Development", - "create": "Create Form", - "edit": "Edit Form", - "steps": { - "basic": "Basic Info", - "database": "Database Design", - "form": "Form Design", - "list": "List Design", - "publish": "Publish Form" - }, - "placeholder": { - "remark": "Please enter form description" - }, - "validate": { - "title": "Form validation failed", - "warningTitle": "Form validation warnings", - "repairTip": "Please fix the following issues before continuing", - "warningTip": "The following issues won't block saving, but please review and confirm", - "continueAnyway": "Continue anyway", - "basic": "Validation failed: Name and Code are required", - "database": "Validation failed: Main table must be configured", - "incomplete": "Incomplete form configuration", - "perfectDesign": "Please complete form design" - }, - "loadFailed": "Failed to load data", - "createSuccess": "Created successfully", - "save": "Save", - "saveSuccess": "Saved successfully", - "autoSave": { - "saving": "Saving...", - "saved": "Saved", - "unsaved": "Unsaved" - } - }, - "dataSource": { - "refresh": "Refresh", - "refreshSuccess": "Refresh successful", - "loading": "Loading...", - "mainTable": "Main Table", - "subTable": "Sub Table", - "added": "Added", - "fieldPreview": "Field Preview", - "noFields": "No field information", - "relationConfig": "Table Relation Config", - "selectMainTip": "Please select main table first", - "selectMainDesc": "Expand to table node in database tree, click [Main Table] button to set.", - "addDatabase": "Add Database", - "refreshConn": "Refresh Connection", - "copyConnName": "Copy Connection Name", - "addSchema": "Add Schema", - "addTable": "Add Table", - "editDatabase": "Edit Database", - "refreshDatabase": "Refresh Database", - "copyDatabaseName": "Copy Database Name", - "editSchema": "Edit Schema", - "refreshSchema": "Refresh Schema", - "copySchemaName": "Copy Schema Name", - "viewFields": "View Fields", - "designTable": "Design Table", - "setMainTable": "Set as Main", - "addSubTable": "Add as Sub", - "copyTableName": "Copy Table Name", - "deleteTable": "Delete Table", - "deleteTableConfirmTitle": "Delete Confirmation", - "confirmDeleteTable": "Are you sure you want to delete table \"{tableName}\"? This operation cannot be undone!", - "deleteTableSuccess": "Table deleted successfully", - "deleteTableFailed": "Failed to delete table", - "inputDatabaseName": "Please enter database name", - "databaseNameRule": "Name can only contain letters, numbers, and underscores, starting with letter/underscore", - "databaseCreateSuccess": "Database \"{name}\" created successfully", - "databaseCreateFailed": "Failed to create database", - "inputNewDatabaseName": "Please enter new database name", - "nameNotChanged": "Name not changed", - "renameNotSupported": "Database renaming not supported yet, please do it manually", - "inputSchemaName": "Please enter Schema name", - "createSchema": "Create Schema", - "schemaNameRule": "Name can only contain letters, numbers, and underscores, starting with letter/underscore", - "schemaCreateSuccess": "Schema \"{name}\" created successfully", - "schemaCreateFailed": "Failed to create Schema", - "inputNewSchemaName": "Please enter new Schema name", - "schemaRenameSuccess": "Schema renamed to \"{name}\"", - "schemaRenameFailed": "Failed to rename Schema", - "sqlServerRenameSchemaNotSupported": "SQL Server does not support renaming Schema directly", - "loadConfigFailed": "Failed to load database configuration", - "loadDatabaseFailed": "Failed to load databases", - "loadSchemaFailed": "Failed to load schemas", - "loadTableFailed": "Failed to load tables", - "loadNodeFailed": "Failed to load node data", - "nodeNotFound": "Node not found", - "refreshNodeSuccess": "Refresh successful, expand node to see latest data", - "refreshNodeFailed": "Failed to refresh node", - "refreshFailed": "Refresh failed", - "copyToClipboard": "Copied to clipboard", - "tableAlreadyAdded": "Table already added", - "setMainSuccess": "{name} set as main table", - "addSubSuccess": "Sub table {name} added", - "tableFieldsRefreshed": "Table {name} fields updated", - "removeMainConfirm": "Are you sure you want to remove the main table?", - "removeSubConfirm": "Are you sure you want to remove this sub table?", - "removeMain": "Remove Main Table", - "subTableCount": "{count} sub tables in total", - "tableName": "Table Name", - "tableNamePlaceholder": "Please enter table name", - "alias": "Alias", - "aliasPlaceholder": "For SQL query", - "fieldList": "Field List ({count})", - "fieldName": "Field Name", - "fieldNamePlaceholder": "Please enter field name", - "fieldType": "Type", - "fieldLength": "Length", - "fieldScale": "Scale", - "fieldComment": "Comment", - "fieldCommentPlaceholder": "Please enter field comment", - "schemaName": "Schema", - "schemaNamePlaceholder": "Please enter schema name", - "nullable": "Nullable", - "isPrimaryKey": "Primary Key", - "uniqueCheck": "Unique", - "addField": "Add Field", - "relationType": "Relation Type", - "oneToMany": "One-to-Many", - "oneToOne": "One-to-One", - "foreignKeyField": "Foreign Key (Sub)", - "relatedFieldMain": "Related Field (Main)", - "selectForeignKey": "Select foreign key", - "selectRelatedField": "Select related field", - "viewFieldList": "View field list ({count} fields)", - "noSubTables": "No sub tables", - "addSubTip": "Click + button in database tree to add sub table", - "missingSystemFieldsTitle": "Missing System Fields", - "missingSystemFieldsMessage": "This table is missing system fields required for data permissions:

{fields}

Data permissions will not work properly without these fields.

Click 【Auto Add】 to automatically add the missing fields;
Click 【Ignore and Continue】 to skip this check.", - "autoAddFields": "Auto Add", - "ignoreAndContinue": "Ignore and Continue", - "addSystemFieldsSuccess": "System fields added successfully", - "addSystemFieldsFailed": "Failed to add system fields", - "mainTableRequired": "Please configure a main table first", - "connectionUnavailable": "Database connection is unavailable; check connection settings", - "mainTableNotFound": "Main table {table} was not found on the target connection", - "subTableNotFound": "Sub table {table} was not found on the target connection", - "currentConnection": "Connection", - "externalConnectionTip": "Form data is stored on the external connection; ensure tables exist on the target database" - }, - "listDesign": { - "containerPage": "Page", - "title": "List Design", - "queryTab": "Query Fields", - "listTab": "List Fields", - "propertyTab": "List Properties", - "querySelectionTip": "Select fields to add to query criteria", - "listSelectionTip": "Select fields to add to list display", - "selectAll": "Select All", - "noAvailableFields": "No available fields, please add fields in form design first", - "tableProperties": "Table Properties", - "showPagination": "Show Pagination", - "pageSize": "Page Size", - "itemsPerPage": "{count} items/page", - "showIndex": "Show Index Column", - "showSelection": "Show Selection Box", - "stripe": "Stripe", - "border": "Border", - "size": "Size", - "sizeLarge": "Large", - "sizeDefault": "Medium", - "sizeSmall": "Small", - "tableHeight": "Table Height", - "adaptive": "Adaptive", - "dialogProperties": "Dialog Properties", - "dialogWidth": "Dialog Width", - "widthSmall": "Small (600px)", - "widthMedium": "Medium (800px)", - "widthLarge": "Large (1000px)", - "widthExtraLarge": "Extra Large (1200px)", - "fullscreen": "Fullscreen", - "draggable": "Draggable", - "closeOnClickModal": "Close on Mask Click", - "closeOnPressEscape": "Close on ESC", - "pageProperties": "Page Properties", - "showBackButton": "Show Back Button", - "showBackButtonTip": "Control whether to display the back to list button in the upper left corner of the page", - "layoutRenderMode": "Render Mode", - "conditionRender": "Conditional Render", - "routeRender": "Route Render", - "conditionRenderTip": "Switch form display via v-if within the current page without creating a new route", - "routeRenderTip": "Navigate to a separate route page to display the form without showing tabs", - "openInNewTab": "Open in New Tab", - "openInNewTabTip": "Whether to open the form page in a new tab when clicking add, edit, or view buttons", - "buttonDisplay": "Button Display", - "toolbarButtons": "Toolbar Buttons", - "rowActionButtons": "Row Action Buttons", - "addBtn": "Add Button", - "editBtn": "Edit Button", - "deleteBtn": "Delete Button", - "viewBtn": "View Button", - "exportBtn": "Export Button", - "importBtn": "Import Button", - "batchDeleteBtn": "Batch Delete", - "startWorkflow": "Start Workflow", - "noWorkflowBound": "No workflow bound to this form", - "startWorkflowSuccess": "Workflow started successfully", - "startWorkflowFailed": "Failed to start workflow", - "workflowTitleLabel": "Workflow Title", - "workflowTitlePlaceholder": "Please enter workflow title", - "workflowTitleRequired": "Workflow title is required", - "formActionSettings": "Form Action Settings", - "showConfirmButton": "Show Confirm Button", - "showConfirmButtonTip": "When disabled, the confirm button will not be shown when adding/editing data", - "afterSaveAction": "After Save Action", - "afterSaveClose": "Close and return to list", - "afterSaveEditMode": "Switch to edit mode", - "afterSaveContinueAdd": "Clear form and continue adding", - "afterSaveActionTip": "Only applies when adding: close and return, stay on current record to edit, or clear form to add another", - "enableStartWorkflowOnAdd": "Enable Start Workflow on Add", - "enableStartWorkflowOnAddTip": "When enabled, a 'Start Workflow' button will be shown when adding new data", - "queryConfigTitle": "Query Field Config", - "listConfigTitle": "List Field Config", - "sort": "Sort", - "displayName": "Display Name", - "fieldKey": "Field Key", - "queryType": "Query Type", - "componentType": "Component Type", - "width": "Width", - "defaultValue": "Default Value", - "hidden": "Hidden", - "showTime": "Time", - "multiple": "Multiple", - "caseSensitive": "Case Sensitive", - "actions": "Actions", - "matchLike": "Like", - "matchEq": "Equals", - "matchRange": "Range", - "matchIn": "In", - "matchSpaceLikeAnd": "Space Fuzzy AND", - "matchSpaceLikeOr": "Space Fuzzy OR", - "matchSpaceEqAnd": "Space Exact AND", - "matchSpaceEqOr": "Space Exact OR", - "compInput": "Input", - "compSelect": "Select", - "compDate": "Date", - "compTime": "Time", - "compUser-select": "User Selector", - "compDept-select": "Department Selector", - "compRole-select": "Role Selector", - "compPost-select": "Post Selector", - "compForm-select": "Form Selector", - "compTable-select": "Table Selector", - "compFile-select": "File Selector", - "compImage-select": "Image Selector", - "compRegion-select": "Region Selector", - "compMoney-input": "Money Input", - "compRich-text": "Rich Text Editor", - "compCode-editor": "Code Editor", - "compFormula-input": "Formula Input", - "compCron-selector": "Cron Expression", - "compCurrent-user": "Current User", - "compCurrent-datetime": "Current Datetime", - "compCode-generator": "Code Generator", - "compAi-image-ocr": "AI Image OCR", - "width18": "1/8 (3)", - "width16": "1/6 (4)", - "width14": "1/4 (6)", - "width13": "1/3 (8)", - "width12": "1/2 (12)", - "widthFull": "Full (24)", - "none": "None", - "noQueryFields": "No query fields", - "selectQueryTip": "Please select fields to query on the right", - "columnName": "Column Name", - "left": "Left", - "center": "Center", - "right": "Right", - "minWidth": "Min Width", - "min": "Min", - "noFixed": "Not Fixed", - "fixedLeft": "Left Side", - "fixedRight": "Right Side", - "sortable": "Sortable", - "resizable": "Resizable", - "overflowTooltip": "Overflow Tooltip", - "ellipsis": "Ellipsis", - "fileImageDisplayHint": "Image/signature fields display as thumbnails automatically; text options do not apply", - "showAsTag": "Show as Tag", - "tagType": "Tag Type:", - "tagDefault": "Default", - "tagSuccess": "Success", - "tagWarning": "Warning", - "tagInfo": "Info", - "tagDanger": "Danger", - "formatter": "Formatter", - "formatDate": "Date", - "formatDateTime": "DateTime", - "formatMoney": "Money", - "formatPercent": "Percent", - "formatNumber": "Number", - "formatPattern": "Pattern", - "prefix": "Prefix", - "suffix": "Suffix", - "custom": "Custom", - "unitYuan": "Yuan", - "unitGe": "Unit", - "unitCi": "Times", - "unitDay": "Days", - "unitHour": "Hours", - "noListFields": "No list fields", - "selectListTip": "Please select fields to display on the right", - "defaultSortField": "Default Sort Field", - "selectSortField": "Select sort field", - "sortOrder": "Sort Order", - "ascending": "Ascending", - "descending": "Descending", - "addSortField": "Add Sort Field", - "defaultFilterConditions": "Default Filter Conditions", - "selectFilterField": "Select field", - "selectFilterOperator": "Operator", - "filterValue": "Value", - "filterValuePlaceholder": "Enter filter value", - "addFilterCondition": "Add Filter Condition", - "filterOperatorEq": "Equals", - "filterOperatorNe": "Not equals", - "filterOperatorGt": "Greater than", - "filterOperatorGte": "Greater or equal", - "filterOperatorLt": "Less than", - "filterOperatorLte": "Less or equal", - "filterOperatorLike": "Contains", - "filterOperatorIn": "In list", - "filterOperatorNull": "Is null", - "filterOperatorNotNull": "Not null", - "tableSummary": "Table Summary", - "showSummary": "Show Summary Row", - "summaryText": "Summary Row Label", - "summaryTextPlaceholder": "Total", - "summaryColumnTip": "Enable summary for numeric fields in list field config", - "treeConfig": "Tree Table", - "enableTree": "Enable Tree Table", - "parentField": "Parent Field", - "lazyLoad": "Lazy Load", - "lazyLoadOnTip": "Load children on demand", - "lazyLoadOffTip": "Load all data at once", - "defaultExpandAll": "Expand All by Default", - "indent": "Indent", - "checkStrictly": "Check Strictly", - "enableSummary": "Summary", - "summaryType": "Type", - "summarySum": "Sum", - "summaryAvg": "Average", - "summaryCount": "Count", - "summaryMax": "Max", - "summaryMin": "Min", - "summaryPrecision": "Precision", - "sortFrontend": "Frontend", - "sortBackend": "Backend", - "filterable": "Filter", - "filterInput": "Input", - "filterSelect": "Select", - "filterDateRange": "Date Range", - "filterMultiple": "Multiple", - "dialogFilter": "Dialog Select", - "subTableButtons": "Sub Table Buttons", - "subTableButtonsTip": "Configure sub table form buttons, click to manage sub table data in dialog/drawer/page", - "addSubTableButton": "Add Sub Table Button", - "noSubTableButtons": "No sub table buttons", - "subTableButtonText": "Button Text", - "selectSubTable": "Select Sub Table", - "selectSubTablePlaceholder": "Select the sub table to associate", - "selectSubForm": "Select Sub Form", - "selectSubFormPlaceholder": "Select the independent form for sub table", - "foreignKeyField": "Foreign Key Field", - "foreignKeyFieldPlaceholder": "Auto-filled from sub table config", - "buttonStyle": "Button Style", - "subFormContainerType": "Container Type", - "drawerSize": "Drawer Size", - "drawerDirection": "Open Direction", - "customButtons": "Custom Buttons", - "addCustomButton": "Add Custom Button", - "noCustomButtons": "No custom buttons", - "defaultButtonName": "Custom Button", - "buttonName": "Button Name", - "buttonType": "Button Type", - "buttonPosition": "Button Position", - "toolbar": "Toolbar", - "tools": "Toolbar Right", - "row": "Row Action", - "iconAndDisplay": "Icon & Display", - "iconOnly": "Icon Only", - "actionType": "Action Type", - "actionLink": "Open Link", - "actionApi": "Call API", - "actionEvent": "Trigger Event", - "actionPage": "Open Page", - "actionGenerateDocument": "Generate Document", - "bindDocumentTemplates": "Bind Document Templates", - "bindDocumentTemplatesPlaceholder": "Select templates to generate (multiple)", - "bindDocumentTemplatesHint": "Leave empty to generate all published templates for this form; otherwise only selected templates", - "pageCode": "Page Code", - "pageCodePlaceholder": "Select page to open", - "pageCodeRequired": "Please select a page", - "dialogTitle": "Dialog Title", - "dialogTitlePlaceholder": "Supports variables: {id}, {name}, etc.", - "pageDialogWidth": "Dialog Width", - "pageDialogFullscreen": "Fullscreen", - "pageView": "Page View", - "pageLoadFailed": "Failed to load page", - "pageNoConfig": "No page configuration", - "linkUrl": "Link URL", - "linkUrlPlaceholder": "Supports variables: {id}, {field}, etc.", - "apiUrl": "API URL", - "apiUrlPlaceholder": "/api/xxx, supports variables: {id}", - "apiMethod": "Request Method", - "confirmMessage": "Confirm Message", - "confirmMessagePlaceholder": "Confirmation message before execution", - "eventName": "Event Name", - "eventNamePlaceholder": "Custom event name", - "buttonIcon": "Button Icon", - "buttonIconPlaceholder": "lucide:icon-name", - "showCondition": "Show Condition", - "showConditionPlaceholder": "row.status === 'active'", - "permissionCode": "Permission Code", - "permissionCodePlaceholder": "Optional, for permission control", - "styleOptions": "Style Options", - "plain": "Plain", - "round": "Round", - "circle": "Circle", - "textBtn": "Text", - "linkBtn": "Link", - "buttonSize": "Button Size", - "stateControl": "State Control", - "disabled": "Disabled", - "disabledCondition": "Disabled Condition", - "disabledConditionPlaceholder": "row.status === 'completed'", - "tooltip": "Tooltip", - "tooltipPlaceholder": "Tooltip text on hover", - "badge": "Badge", - "badgePlaceholder": "Number or text, supports variables", - "badgeType": "Badge Type", - "confirmDialog": "Confirm Dialog", - "confirmTitle": "Confirm Title", - "confirmTitlePlaceholder": "Confirm Operation", - "messageConfig": "Message Config", - "successMessage": "Success Message", - "successMessagePlaceholder": "Operation successful", - "errorMessage": "Error Message", - "errorMessagePlaceholder": "Operation failed", - "reloadAfterSuccess": "Reload after success", - "actionAgent": "Agent Chat", - "agentId": "Agent ID", - "agentIdPlaceholder": "Unique identifier of the agent", - "agentCode": "Agent Code", - "agentCodePlaceholder": "Agent code (alternative)", - "initialMessage": "Initial Message", - "initialMessagePlaceholder": "Initial message when opening chat, supports variables like {name}", - "includeRowData": "Include Row Data", - "autoSend": "Auto Send Initial Message", - "listType": "List Type", - "cardProperties": "Card Properties", - "cardColumns": "Columns Per Row", - "cardColumnsOption": "{count} Columns", - "cardGap": "Card Gap (px)", - "cardShadow": "Card Shadow", - "shadowAlways": "Always", - "shadowHover": "On Hover", - "shadowNever": "Never", - "cardFieldsConfig": "Card Fields Config", - "cardFieldsTip": "Drag fields to card areas", - "cardPreview": "Card Preview", - "cardFieldProperties": "Field Properties", - "fieldProperties": "Field Properties", - "showDisplayName": "Show Name", - "showRelationField": "Show Relation Field", - "selectDisplayField": "Select Display Field", - "selectDisplayFieldPlaceholder": "Select field to display", - "loadingFields": "Loading fields...", - "showAvatar": "Show Avatar", - "showVirtualValue": "Show Linked Value", - "cardAreaIcon": "Icon", - "cardAreaTitle": "Title", - "cardAreaSubtitle": "Subtitle", - "cardAreaDescription": "Description", - "cardAreaTags": "Tags", - "cardAreaFooterLeft": "Footer Left", - "cardAreaFooterRight": "Footer Right", - "useCursorPagination": "Cursor Pagination", - "useCursorPaginationTip": "Suitable for large datasets. When enabled, total count is hidden and only prev/next navigation is available", - "prevPage": "Previous", - "nextPage": "Next", - "noMoreData": "No more data" - }, - "formRender": { - "subTableData": "Sub Table Data", - "loadSubFormFailed": "Failed to load sub form", - "loadDataFailed": "Failed to load data", - "validateFailed": "Please check the form input" - }, - "publishDialog": { - "title": "Form Publish", - "settings": "Publish Settings", - "allowGuest": "Allow Guest Access", - "success": "Published successfully", - "failed": "Publish failed", - "menuConfig": "Menu Config", - "menuName": "Menu Name", - "parentMenu": "Parent Menu", - "parentMenuPlaceholder": "Please select parent menu (top level if empty)", - "menuIcon": "Menu Icon", - "routeInfo": "Route Info", - "accessPath": "Access Path", - "confirmPublish": "Confirm Publish" - }, - "validator": { - "required": "is required", - "formatInvalid": "Format is invalid", - "tooLong": "Length exceeds limit", - "notBound": "Not bound to any data field", - "duplicateSubField": "Field name \"{field}\" is duplicated in sub table \"{table}\"", - "duplicateField": "Field name \"{field}\" is duplicated", - "invalidSubTable": "Invalid sub table \"{table}\"", - "fieldNotInSubTable": "Field \"{field}\" does not exist in sub table \"{table}\"", - "fieldNotInMainTable": "Field \"{field}\" does not exist in main table", - "fileMultipleRequiresJson": "Field \"{field}\" is configured for multiple file/image selection, database type must be JSON, current type is {currentType}", - "fileSingleRequiresVarchar": "Field \"{field}\" is configured for single file/image selection, database type must be VARCHAR, current type is {currentType}", - "regionRequiresJson": "Field \"{field}\" uses region selector component, database type must be JSON, current type is {currentType}", - "numericFieldRequiresNumericComponent": "Field \"{field}\" has database type {fieldType} (numeric), cannot use {componentType} component. Please use numeric components like input-number, money-input, slider, rate, or formula-input", - "stringFieldCannotUseDateComponent": "Field \"{field}\" has database type {fieldType} (string), cannot use {componentType} component. Date/time components require corresponding date/time type fields", - "dateTimeFieldRequiresDateComponent": "Field \"{field}\" has database type {fieldType} (date/time), cannot use {componentType} component. Please use date picker, time picker, or current-datetime components", - "booleanFieldRequiresSwitchComponent": "Field \"{field}\" has database type {fieldType} (boolean), cannot use {componentType} component. Please use switch, radio, or select components", - "jsonFieldRequiresJsonComponent": "Field \"{field}\" has database type {fieldType} (JSON), cannot use {componentType} component. Please use checkbox, cascader, tree-select, file-selector, or other JSON-compatible components", - "reverseAutoFillRequiresMultiple": "Field \"{field}\" has reverse auto-fill enabled and must use multiple selection", - "reverseAutoFillNoFormCode": "Field \"{field}\" has reverse auto-fill enabled but no linked form is configured", - "reverseAutoFillNoSourceField": "Field \"{field}\" has reverse auto-fill enabled but no source field is configured", - "reverseAutoFillNoTargetField": "Field \"{field}\" has reverse auto-fill enabled but no linked form filter field is configured", - "reverseAutoFillSelfSource": "Field \"{field}\" reverse auto-fill source field cannot be itself", - "reverseAutoFillConflictsValueLink": "Field \"{field}\" has reverse auto-fill enabled and cannot also use value link", - "unknown": "Unknown", - "columnNoField": "Column is not bound to any field", - "unknownColumn": "Unknown column", - "columnFieldNotExist": "Column bound field \"{field}\" does not exist in form or database", - "queryFieldNoField": "Query field is not bound to any field", - "unknownQueryField": "Unknown query field", - "queryFieldNotExist": "Query field \"{field}\" does not exist in form or database", - "subTableButton": "Sub-table button", - "subTableButtonNoText": "Sub-table button has no button text", - "subTableButtonNoFormCode": "Sub-table button has no sub-form code", - "subTableButtonNoForeignKey": "Sub-table button has no foreign key field", - "customButton": "Custom button", - "customButtonNoName": "Custom button has no name", - "customButtonLinkNoUrl": "Link type button has no URL", - "customButtonApiNoUrl": "API type button has no API URL", - "customButtonEventNoName": "Event type button has no event name" - }, - "generateDocument": { - "title": "Generate Document", - "template": "Document Template", - "selectTemplate": "Please select a document template", - "selectTemplatePlaceholder": "Select the document template to generate", - "description": "Template Description", - "noTemplates": "No published document templates bound to this form", - "generatedDocuments": "Generated Documents", - "generate": "Generate", - "generateSuccess": "Document generated successfully", - "generateFailed": "Failed to generate document", - "preview": "Preview", - "download": "Download", - "buttonLabel": "Generate Document", - "buttonTooltip": "Generate document from this data", - "positionHint": "Generate document button can only be placed in row actions, as it requires specific form data", - "autoRefresh": "Auto Refresh", - "autoRefreshHint": "When enabled, each click regenerates documents from the latest form data; when disabled, existing documents are shown first" - }, - "apiInfo": { - "title": "API Information", - "description": "This form provides the following API endpoints. All endpoints require authentication.", - "formCode": "Form Code", - "basePrefix": "Base Prefix", - "authRequired": "Auth Required", - "permissions": "Permissions", - "getPermissions": "Get Permissions", - "getPermissionsDesc": "Get current user's operation permissions for this form (view/add/edit/delete/export/import)", - "getFieldPermissions": "Get Field Permissions", - "getFieldPermissionsDesc": "Get current user's field-level read/write permissions for this form", - "dataOperations": "Data Operations", - "getList": "List Data", - "getListDesc": "Paginated query of form data with sorting, search, and filtering support", - "getDetail": "Get Detail", - "getDetailDesc": "Get single record detail including sub-table data", - "createData": "Create Data", - "createDataDesc": "Create a new form record with optional sub-table data", - "updateData": "Update Data", - "updateDataDesc": "Update a specific record with optional sub-table data", - "deleteData": "Delete Data", - "deleteDataDesc": "Delete a specific record and its associated sub-table data", - "batchDelete": "Batch Delete", - "batchDeleteDesc": "Delete multiple records and their associated sub-table data", - "auxiliary": "Auxiliary", - "getTreeChildren": "Get Tree Children", - "getTreeChildrenDesc": "Get child nodes for tree table lazy loading", - "getFieldValues": "Get Field Values", - "getFieldValuesDesc": "Get unique values for a specific field, used for filter options", - "checkUnique": "Check Unique", - "checkUniqueDesc": "Check if a field value is unique", - "importExport": "Import & Export", - "exportExcel": "Export Excel", - "exportExcelDesc": "Export form data to Excel file with field selection and sub-table support", - "importTemplate": "Download Import Template", - "importTemplateDesc": "Download Excel import template", - "importExcel": "Import Excel", - "importExcelDesc": "Import data from Excel file with append or overwrite mode", - "request": "Request", - "response": "Response", - "pathParams": "Path Params", - "queryParams": "Query Params", - "requestBody": "Request Body", - "noParams": "No params", - "copyPath": "Copy Path", - "copiedSuccess": "Copied to clipboard", - "formFields": "Form Fields Reference" - }, - "formData": { - "import": { - "title": "Import Data", - "modeTitle": "Select Import Mode", - "appendMode": "Append Mode", - "appendModeDesc": "Keep existing data and append new data", - "overwriteMode": "Overwrite Mode", - "overwriteModeDesc": "Clear existing data and import all new data", - "overwriteWarning": "Overwrite mode will delete all existing data in the table. This action cannot be undone!", - "dataHandling": "Data Handling", - "insertOnly": "Insert Only", - "insertOnlyDesc": "All data from Excel will be added as new records", - "updateOnly": "Update Only", - "updateOnlyDesc": "Find existing records by the specified field and update them with Excel data. No new records will be added", - "upsert": "Update & Insert", - "upsertDesc": "Update existing records found by the specified field. When no match is found, insert as new records", - "matchField": "Match Field", - "matchFieldPlaceholder": "Select the field to match existing data", - "matchFieldRequired": "A match field is required for update mode", - "updatedCount": "updated successfully", - "insertedCount": "inserted successfully", - "skippedCount": "skipped", - "selectFile": "Select File", - "dragOrClick": "Drag file here or click to upload", - "onlyXlsx": "Only .xlsx format is supported", - "downloadTemplate": "Download Import Template", - "validateAndUpload": "Validate & Upload", - "validating": "Validating data...", - "importing": "Importing data...", - "passCount": "passed validation", - "failCount": "failed validation", - "importedCount": "imported successfully", - "errorList": "Error Details", - "rowNumber": "Row", - "errorMsg": "Error Message", - "allPassed": "All data passed validation, ready to import", - "importSuccess": "Data import completed", - "reselect": "Reselect", - "confirmImport": "Confirm Import" - } - }, - "importExport": { - "export": "Export Config", - "import": "Import Config", - "batchExport": "Batch Export", - "exportSuccess": "Form config exported", - "exportFailed": "Export failed", - "importTitle": "Import Form Config", - "selectFile": "Select File", - "dragOrClick": "Drag a JSON file here or click to upload", - "dragOrClickMulti": "Supports selecting multiple files for batch import", - "onlyJson": "Only .json files are supported", - "fileParseError": "Failed to parse file, please check the format", - "checking": "Checking...", - "checkResult": "Check Result", - "codeConflict": "Form code already exists", - "codeConflictTip": "Please change the code before importing", - "newCode": "New Code", - "newCodePlaceholder": "Enter a new form code", - "tableStatus": "Database Table Status", - "mainTable": "Main Table", - "subTable": "Sub Table", - "schema": "Schema", - "tableExists": "Exists", - "tableNotExists": "Not Exists", - "hasDdl": "Has DDL", - "noDdl": "No DDL", - "autoCreateTables": "Auto create missing tables", - "autoCreateTablesTip": "Missing tables will be created from exported DDL during import", - "createSchemaIfNotExists": "Create schema if missing", - "createSchemaIfNotExistsTip": "Create target schemas from config before import (PostgreSQL / SQL Server only)", - "cannotAutoCreate": "Some tables are missing and have no DDL, cannot auto create", - "crossDialectAutoCreate": "Export database type ({source}) differs from target connection ({target}). Auto-create is not supported; use the same engine or create tables manually.", - "importSuccess": "Form config imported successfully", - "importFailed": "Import failed", - "confirmImport": "Confirm Import", - "formInfo": "Form Info", - "formName": "Form Name", - "formCode": "Form Code", - "formType": "Form Type", - "dbConfig": "Database Config", - "mainTableName": "Main Table", - "fieldCount": "Fields", - "subTableCount": "Sub Tables", - "appTip": "Imported form will belong to the current application", - "tableExistsRename": "Table exists, you can create with a new name and schema", - "newTableName": "New Table Name", - "newTableNamePlaceholder": "Enter a new table name", - "selectSchema": "Select Schema", - "selectSchemaPlaceholder": "Select target schema", - "batchImportTitle": "Batch Import Form Config", - "batchImportCount": "{count} forms total", - "batchImportProgress": "Importing {current}/{total}...", - "batchImportSuccess": "Batch import done, {success} succeeded, {fail} failed", - "batchImportItem": "Item {index}", - "batchNext": "Next", - "batchSkip": "Skip", - "batchSkipped": "Skipped", - "batchConfirmAndNext": "Confirm & Next", - "batchImportAll": "Import All", - "batchImporting": "Importing...", - "checkFailed": "Check failed", - "noSelection": "Please select forms to export first", - "batchExportProgress": "Exporting {current}/{total}...", - "batchExportDone": "Batch export done, {success} succeeded, {fail} failed", - "reselect": "Reselect" - } -} diff --git a/web/apps/web-ele/src/locales/langs/en-US/loginLog.json b/web/apps/web-ele/src/locales/langs/en-US/loginLog.json deleted file mode 100644 index eaef17f..0000000 --- a/web/apps/web-ele/src/locales/langs/en-US/loginLog.json +++ /dev/null @@ -1,69 +0,0 @@ -{ - "name": "Login Log", - "title": "Login Log", - "username": "Username", - "userId": "User ID", - "status": "Login Status", - "loginType": "Login Type", - "passwordLogin": "Password", - "codeLogin": "Verification Code", - "qrcodeLogin": "QR Code", - "wechatLogin": "WeChat", - "microsoftLogin": "Microsoft", - "dingtalkLogin": "DingTalk", - "feishuLogin": "Feishu", - "statusSuccess": "Success", - "statusFailed": "Failed", - "failureReason": "Failure Reason", - "failureReasonUnknown": "Unknown Error", - "failureReasonUserNotExist": "User Not Exist", - "failureReasonPasswordError": "Password Error", - "failureReasonUserDisabled": "User Disabled", - "failureReasonUserLocked": "User Locked", - "failureReasonUserInactive": "User Inactive", - "failureReasonAccountAbnormal": "Account Abnormal", - "failureReasonOther": "Other Error", - "failureMessage": "Failure Message", - "loginIp": "Login IP", - "ipLocation": "IP Location", - "userAgent": "User Agent", - "browserType": "Browser", - "osType": "Operating System", - "deviceType": "Device Type", - "deviceTypeDesktop": "Desktop", - "deviceTypeMobile": "Mobile", - "deviceTypeTablet": "Tablet", - "deviceTypeOther": "Other", - "duration": "Session Duration", - "durationSeconds": "Session Duration (seconds)", - "sessionId": "Session ID", - "remark": "Remark", - "loginTime": "Login Time", - "createTime": "Create Time", - "operation": "Operation", - "detail": "Detail", - "detailTitle": "Login Log Detail", - "batchDelete": "Batch Delete", - "batchDeleteTitle": "Batch Delete Login Logs", - "batchDeleteConfirm": "Are you sure to delete {0} login logs? Users: {1}", - "deleteConfirm": "Are you sure to delete this login log of user {0}?", - "deleteSuccess": "Delete Success", - "deleteError": "Delete Failed", - "selectLogsToDelete": "Please select logs to delete", - "getDetailError": "Failed to get login log detail", - "noData": "No Data", - "searchPlaceholder": "Please enter {0}", - "selectPlaceholder": "Please select {0}", - "selectStatus": "Please select login status", - "selectLoginType": "Please select login type", - "selectFailureReason": "Please select failure reason", - "selectDeviceType": "Please select device type", - "startTime": "Start Time", - "endTime": "End Time", - "selectStartTime": "Please select start time", - "selectEndTime": "Please select end time", - "formatHours": "{0} hours", - "formatMinutes": "{0} minutes", - "formatSeconds": "{0} seconds", - "formatZeroSeconds": "0 seconds" -} diff --git a/web/apps/web-ele/src/locales/langs/en-US/menu-title.json b/web/apps/web-ele/src/locales/langs/en-US/menu-title.json deleted file mode 100644 index 4d137bc..0000000 --- a/web/apps/web-ele/src/locales/langs/en-US/menu-title.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "overview": "Overview", - "analytics": "Analytics", - "workspace": "Workspace", - "home": "Home", - "systemManagement": "System Management", - "userManagement": "User Management", - "departmentManagement": "Department Management", - "organizationChart": "Organization Chart", - "permissionManagement": "API Management", - "menuManagement": "Menu Management", - "positionManagement": "Position Management", - "roleManagement": "Role Permission", - "userCenter": "User Center", - "accountSettings": "Account Settings", - "loginLog": "Login Log", - "databaseManagement": "Database Management", - "dbManagement": "DB Management", - "databaseConnection": "Database Connections", - "redisManagement": "Redis Management", - "dataSource": "Data Source", - "systemTools": "System Tools", - "fileManagement": "File Management", - "dictionaryManagement": "Dictionary Management", - "scheduledTasks": "Scheduled Tasks", - "systemMonitoring": "System Monitoring", - "redisMonitoring": "Redis Monitoring", - "serverMonitoring": "Server Monitoring", - "databaseMonitoring": "Database Monitoring", - "contractManagement": "Contract Management", - "contractList": "Contract List", - "templateManagement": "Template Management", - "crowdUsers": "Crowd Users", - "onlineDevelopment": "Online Development", - "workflowManagement": "Workflow Management", - "workflowInstanceManagement": "Workflow Instances", - "formManagement": "Form Management", - "pageManagement": "Page Management", - "reportManagement": "Report Management", - "approvalProcess": "Approval Process", - "myTasks": "My Tasks", - "initiatedProcesses": "Initiate Process", - "myPending": "My Pending", - "myInitiated": "My Initiated", - "ccToMe": "CC to Me", - "messageCenter": "Message Center", - "announcementList": "Announcement List", - "announcementManagement": "Announcement Management", - "messageList": "Message List", - "dataScreen": "Data Screen", - "screenManagement": "Screen Management", - "aiPlatform": "AI Platform", - "workflowOrchestration": "Workflow Orchestration", - "workflowRunHistory": "Run History", - "aiAgent": "AI Agent", - "knowledgeBase": "Knowledge Base", - "controlCenter": "Control Center", - "applicationManagement": "App Management", - "startChat": "Start Chat", - "uiConfig": "UI Config" -} diff --git a/web/apps/web-ele/src/locales/langs/en-US/menu.json b/web/apps/web-ele/src/locales/langs/en-US/menu.json deleted file mode 100644 index f711222..0000000 --- a/web/apps/web-ele/src/locales/langs/en-US/menu.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "selectMenu": "Please select a menu", - "addChildMenu": "Add Sub-Menu", - "deleteMenu": "Delete", - "searchFailed": "Failed to search menus", - "refreshFailed": "Failed to refresh node", - "menuDetail": "Menu Details", - "title": "Menu Management", - "name": "Menu Management", - "menuName": "Menu Name", - "menuTitle": "Menu Title", - "parent": "Parent Menu", - "path": "Menu Path", - "activePath": "Active Path", - "activePathHelp": "The path to highlight the menu, used to solve the problem of inconsistency between routing paths and menu highlighting", - "activePathMustExist": "The active path must be an existing menu path", - "type": "Menu Type", - "typeCatalog": "Catalog", - "typeMenu": "Menu", - "typeButton": "Button", - "typeEmbedded": "Embedded", - "typeLink": "Link", - "typeOnlineForm": "Online Form", - "typeOnlinePage": "Online Page", - "typeOnlineReport": "Online Report", - "reportCode": "Report Code", - "typeAgent": "Agent", - "formCode": "Form Code", - "agentCode": "Agent Code", - "pageCode": "Page Code", - "component": "Component", - "componentPath": "Component Path", - "icon": "Menu Icon", - "activeIcon": "Active Icon", - "status": "Status", - "authCode": "Permission Code", - "linkSrc": "Link URL", - "operation": "Operation", - "advancedSettings": "Advanced Settings", - "keepAlive": "KeepAlive Cache", - "affixTab": "Affix Tab", - "hideInMenu": "Hide in Menu", - "hideChildrenInMenu": "Hide Children in Menu", - "hideInBreadcrumb": "Hide in Breadcrumb", - "hideInTab": "Hide in Tab", - "noBasicLayout": "No Basic Layout (Fullscreen)", - "badgeType": { - "title": "Badge Type", - "dot": "Dot", - "normal": "Number" - }, - "badge": "Badge Content", - "badgeVariants": "Badge Variant", - "order": "Order", - "applicationId": "Application", - "applicationIdHelp": "Select the application that the menu belongs to, leave empty for main application menu", - "fullPathKey": "Full Path as Key", - "fullPathKeyHelp": "When set to 'No', path parameter changes won't refresh the component (for pages with dynamic parameters)", - "isSystem": "System Menu", - "isSystemHelp": "System menus are visible in all applications (main and sub-applications)", - "appMenu": "App Menu", - "systemMenu": "System Menu" -} diff --git a/web/apps/web-ele/src/locales/langs/en-US/message.json b/web/apps/web-ele/src/locales/langs/en-US/message.json deleted file mode 100644 index b4ba912..0000000 --- a/web/apps/web-ele/src/locales/langs/en-US/message.json +++ /dev/null @@ -1,90 +0,0 @@ -{ - "title": "Message Center", - "type": "Type", - "msgTitle": "Title", - "content": "Content", - "time": "Time", - "actions": "Actions", - "status": "Status", - "typeMap": { - "all": "All", - "system": "System Notification", - "workflow": "Workflow", - "todo": "To-do", - "announcement": "Announcement" - }, - "statusMap": { - "all": "All", - "unread": "Unread", - "read": "Read" - }, - "unreadCount": "{count} unread", - "markAllRead": "Mark All as Read", - "clearRead": "Clear Read", - "markRead": "Mark as Read", - "delete": "Delete", - "markReadSuccess": "Marked as read", - "markAllReadSuccess": "All marked as read", - "markReadFailed": "Failed to mark as read", - "markAllReadConfirm": "Are you sure you want to mark all messages as read?", - "markAllReadConfirmTitle": "Mark All Read", - "deleteConfirm": "Are you sure you want to delete this message?", - "deleteConfirmTitle": "Delete Confirmation", - "deleteSuccess": "Deleted successfully", - "clearReadConfirm": "Are you sure you want to clear all read messages?", - "clearReadConfirmTitle": "Clear Confirmation", - "clearReadSuccess": "Cleared successfully", - "loadUnreadFailed": "Failed to load unread count", - "keywordPlaceholder": "Search messages", - "selectHint": "Select a message to view", - "detailTitle": "Message Detail", - "emptyList": "No messages", - "loadingMore": "Loading...", - "noMore": "No more", - "noContent": "No content", - "noData": "No data", - "sender": "Sender: ", - "send": { - "button": "Send Message", - "title": "Send Message", - "recipient": "Recipient", - "recipientPlaceholder": "Select recipients", - "msgTitle": "Title", - "msgTitlePlaceholder": "Enter message title", - "msgType": "Type", - "content": "Content", - "contentPlaceholder": "Enter message content", - "channels": "Channels", - "channelSite": "Site Message", - "channelEmail": "Email", - "channelDingtalk": "DingTalk", - "channelFeishu": "Feishu", - "channelWechat": "WeCom", - "channelWechatMp": "WeChat MP", - "channelDingtalkTodo": "DingTalk Todo", - "recipientRequired": "Please select recipients", - "titleRequired": "Please enter message title", - "contentRequired": "Please enter message content", - "success": "Message sent successfully", - "failed": "Failed to send message" - }, - "drawer": { - "title": "Message Center", - "messageTab": "Messages", - "announcementTab": "Announcements", - "markAllRead": "Mark All Read", - "clearRead": "Clear Read", - "noMessages": "No messages", - "noAnnouncements": "No announcements", - "pinned": "Pinned", - "urgent": "Urgent", - "important": "Important", - "justNow": "Just now", - "minutesAgo": "{count} min ago", - "hoursAgo": "{count} hr ago", - "daysAgo": "{count} days ago", - "chatTab": "Chat", - "noChats": "No unread chats", - "unreadMessages": "{count} unread" - } -} diff --git a/web/apps/web-ele/src/locales/langs/en-US/org-chart.json b/web/apps/web-ele/src/locales/langs/en-US/org-chart.json deleted file mode 100644 index 7ab60ea..0000000 --- a/web/apps/web-ele/src/locales/langs/en-US/org-chart.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "orgChart": { - "title": "Organization Chart", - "description": "Click on a node to expand or collapse subordinates", - "empty": "No organization data available", - "focusMode": "Switch to Focus Mode", - "expandMode": "Switch to Expand Mode", - "showAll": "Show all siblings" - } -} diff --git a/web/apps/web-ele/src/locales/langs/en-US/page-manager.json b/web/apps/web-ele/src/locales/langs/en-US/page-manager.json deleted file mode 100644 index a6fa3b2..0000000 --- a/web/apps/web-ele/src/locales/langs/en-US/page-manager.json +++ /dev/null @@ -1,126 +0,0 @@ -{ - "applicationName": "Application", - "name": "Page Name", - "code": "Page Code", - "status": "Status", - "description": "Description", - "createTime": "Create Time", - "updateTime": "Update Time", - "actions": "Actions", - "placeholder": { - "name": "Please enter page name", - "remark": "Please enter form description", - "category": "Please select category", - "code": "Please enter page code", - "status": "Please select status", - "description": "Please enter page description" - }, - "categoryMap": { - "dashboard": "Dashboard", - "portal": "Portal Page", - "databoard": "Data Board", - "other": "Other" - }, - "statusMap": { - "all": "All", - "published": "Published", - "draft": "Draft" - }, - "create": "New Page", - "batchDelete": "Batch Delete", - "batchDeleteWithCount": "Batch Delete ({count})", - "deleteConfirm": "Are you sure you want to delete page \"{name}\"?", - "deleteConfirmTitle": "Delete Confirmation", - "deleteSuccess": "Page deleted: {name}", - "batchDeleteConfirm": "Are you sure you want to delete {count} selected pages?", - "batchDeleteConfirmTitle": "Batch Delete Confirmation", - "batchDeleteSuccess": "{count} pages deleted", - "unpublishSuccess": "Page \"{name}\" unpublished", - "unpublishFailed": "Unpublish failed", - "copyCodePlaceholder": "Please enter new page code", - "copyTitle": "Copy Page", - "copyCodeRule": "Code can only contain letters, numbers, underscores, and dashes", - "codeFormatError": "Code must start with a letter and contain only letters, numbers and underscores", - "copySuccess": "Copied successfully", - "design": "Design", - "editInfo": "Edit Info", - "saveSuccess": "Page saved successfully", - "preview": "Preview", - "publish": "Publish", - "unpublish": "Unpublish", - "copy": "Copy", - "setAsHome": "Set as Home", - "setAsHomeTitle": "Set as Default Home", - "setAsHomeConfirm": "Are you sure you want to set page \"{name}\" as the default home page?", - "setAsHomePath": "Home Path", - "setAsHomeTip": "After setting, users will be redirected to this page by default after login.", - "setAsHomeAppTip": "This page belongs to app \"{app}\". The home page config of that app will be updated.", - "setHomeSuccess": "Set as default home page successfully", - "setHomeFailed": "Failed to set as home page", - "more": "More", - "category": "Page Category", - "editor": { - "title": "Online Development", - "create": "Create Page", - "edit": "Edit Page", - "createSuccess": "Created successfully", - "steps": { - "basic": "Basic Info", - "design": "Page Design", - "preview": "Page Preview" - }, - "loadFailed": "Failed to load page data", - "validate": { - "basic": "Validation failed: Name and Code are required", - "perfectDesign": "Please complete page design" - }, - "autoSave": { - "saving": "Saving...", - "saved": "Saved", - "unsaved": "Unsaved" - } - }, - "previewDialog": { - "title": "Page Preview", - "loadFailed": "Failed to load page configuration", - "verifySuccess": "Validation passed", - "realtimeData": "Realtime Data (v-model):", - "noConfig": "No page configuration", - "close": "Close", - "verifySubmit": "Verify Submit", - "verifyFailed": "Page validation failed" - }, - "importExport": { - "export": "Export Config", - "import": "Import Config", - "exportSuccess": "Page config exported", - "exportFailed": "Export failed", - "importTitle": "Import Page Config", - "dragOrClick": "Drag JSON file here or click to upload", - "onlyJson": "Only .json files are supported", - "fileParseError": "Failed to parse file. Please check the format", - "checking": "Checking...", - "codeConflictTip": "Page code already exists. Enter a new code to import", - "codeAvailable": "Page code is available", - "newCodePlaceholder": "Enter a new page code", - "importSuccess": "Page config imported successfully", - "importFailed": "Import failed", - "confirmImport": "Confirm Import", - "reselect": "Reselect", - "pageInfo": "Page Info", - "appTip": "Imported page will belong to the current application" - }, - "publishDialog": { - "title": "Page Publish", - "success": "Published successfully", - "failed": "Publish failed", - "menuConfig": "Menu Config", - "menuName": "Menu Name", - "parentMenu": "Parent Menu", - "parentMenuPlaceholder": "Please select parent menu (top level if empty)", - "menuIcon": "Menu Icon", - "routeInfo": "Route Info", - "accessPath": "Access Path", - "confirmPublish": "Confirm Publish" - } -} diff --git a/web/apps/web-ele/src/locales/langs/en-US/page.json b/web/apps/web-ele/src/locales/langs/en-US/page.json deleted file mode 100644 index 618a258..0000000 --- a/web/apps/web-ele/src/locales/langs/en-US/page.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "auth": { - "login": "Login", - "register": "Register", - "codeLogin": "Code Login", - "qrcodeLogin": "Qr Code Login", - "forgetPassword": "Forget Password" - }, - "dashboard": { - "title": "Dashboard", - "analytics": "Analytics", - "workspace": "Workspace" - } -} diff --git a/web/apps/web-ele/src/locales/langs/en-US/permission.json b/web/apps/web-ele/src/locales/langs/en-US/permission.json deleted file mode 100644 index 196ea83..0000000 --- a/web/apps/web-ele/src/locales/langs/en-US/permission.json +++ /dev/null @@ -1,74 +0,0 @@ -{ - "name": "Permission", - "title": "Permission Management", - "permissionName": "Permission Name", - "permissionCode": "Permission Code", - "permissionType": "Permission Type", - "httpMethod": "HTTP Method", - "apiPath": "API Path", - "dataScope": "Data Scope", - "dataScopes": { - "all": "All Data", - "self": "Self Only", - "dept": "Department", - "deptAndSub": "Dept & Subordinates", - "custom": "Custom" - }, - "description": "Description", - "operation": "Operation", - "add": "Add Permission", - "edit": "Edit Permission", - "selectMenuFirst": "Please select a menu first", - "searchMenu": "Search Menu", - "loadMenuFailed": "Failed to load menu", - "loadSubMenuFailed": "Failed to load sub-menu", - "searchMenuFailed": "Failed to search menu", - "deleteConfirm": "Are you sure you want to delete permission \"{0}\"?", - "batchDelete": "Batch Delete", - "batchDeleteConfirm": "Are you sure you want to delete {0} permissions?\n{1}", - "batchDeleteSuccess": "Successfully deleted {0} permissions", - "batchDeleteFailed": "Batch delete failed", - "selectToDelete": "Please select permissions to delete", - "selectAtLeastOneRoute": "Please select at least one route", - "createSuccess": "Successfully created {created} permissions{skipped}", - "skipped": ", skipped {count}", - "createFailed": "{failed} permissions failed to create: {errors}", - "createError": "Failed to create permissions", - "getRoutesFailed": "Failed to get routes list", - "autoGenerateApi": "Auto Generate API Permissions", - "quickAddApiPermission": "Quick Add API Permission", - "permissionTypes": { - "button": "Button Permission", - "api": "API Permission", - "data": "Data Permission", - "other": "Other Permission", - "buttonDesc": "Used to control the display and hiding of buttons, menu items, and other elements on the page", - "apiDesc": "Used to control API interfaces that users can access", - "dataDesc": "Used to control the data range that users can access", - "otherDesc": "Other types of permissions" - }, - "typeLabels": { - "button": "Button", - "api": "API", - "data": "Data", - "other": "Other", - "unknown": "Unknown" - }, - "helpText": { - "code": "Permission code should follow the \"module:action\" format, using letters, numbers, underscores and colons", - "apiPath": "Complete API path, e.g. /api/user/create or /api/user/:id/update", - "httpMethod": "The HTTP request method corresponding to this permission" - }, - "placeholder": { - "name": "e.g.: Create User, View Report, etc.", - "code": "e.g.: user:create, report:view, etc.", - "apiPath": "/api/user/create" - }, - "validationErrors": { - "nameRequired": "Permission name is required", - "nameMaxLength": "Permission name can be at most 64 characters", - "codeRequired": "Permission code is required", - "codeMaxLength": "Permission code can be at most 64 characters", - "codeFormat": "Permission code can only contain letters, numbers, underscores and colons" - } -} diff --git a/web/apps/web-ele/src/locales/langs/en-US/post.json b/web/apps/web-ele/src/locales/langs/en-US/post.json deleted file mode 100644 index de5711b..0000000 --- a/web/apps/web-ele/src/locales/langs/en-US/post.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "name": "Post", - "title": "Post Management", - "postName": "Post Name", - "postCode": "Post Code", - "postType": "Post Type", - "postLevel": "Post Level", - "department": "Department", - "description": "Post Description", - "status": "Status", - "operation": "Operation", - "edit": "Edit", - "codeFormatError": "Post code can only contain letters, numbers, underscores and hyphens", - "selectDepartment": "Please select department", - "descriptionPlaceholder": "Please enter post description/responsibilities", - "selectUsersFirst": "Please select users first", - "addUsersSuccess": "Added successfully", - "removeUsersConfirm": "Are you sure you want to delete {0} selected users?", - "removeUsersSuccess": "Deleted successfully", - "removeUsersFailed": "Delete failed", - "types": { - "management": "Management", - "technical": "Technical", - "business": "Business", - "functional": "Functional", - "other": "Other" - }, - "levels": { - "senior": "Senior", - "middle": "Middle", - "basic": "Basic", - "staff": "Staff" - } -} diff --git a/web/apps/web-ele/src/locales/langs/en-US/redis-manager.json b/web/apps/web-ele/src/locales/langs/en-US/redis-manager.json deleted file mode 100644 index 76a0cd1..0000000 --- a/web/apps/web-ele/src/locales/langs/en-US/redis-manager.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "databases": "Database List", - "database": "Database", - "allTypes": "All Types", - "refresh": "Refresh", - "expires": "Expires", - "avgTTL": "Avg TTL", - "keyList": "Key List", - "keyDetail": "Key Detail", - "keysCount": "{count} Keys", - "searchKeyPlaceholder": "Search keys (supports * and ?)", - "type": "Type", - "addKey": "Add Key", - "editKey": "Edit Key", - "renameKey": "Rename Key", - "deleteKey": "Delete Key", - "keyName": "Key Name", - "value": "Value", - "ttl": "Expiration", - "size": "Size", - "encoding": "Encoding", - "bytes": "Bytes", - "loading": "Loading...", - "selectKeyPrompt": "Please select a key from the left", - "keyNotExist": "Key does not exist or has expired", - "copy": "Copy", - "copySuccess": "Copied to clipboard", - "deleteConfirm": "Are you sure you want to delete key \"{key}\"?", - "confirmDelete": "Confirm Delete", - "deleteSuccess": "Deleted successfully", - "deleteFailed": "Delete failed", - "renamePrompt": "Please enter a new key name", - "renameSuccess": "Renamed successfully", - "renameFailed": "Rename failed", - "setExpirePrompt": "Please enter expiration time (seconds), -1 for permanent", - "setExpire": "Set Expiration", - "setSuccess": "Set successfully", - "setFailed": "Set failed", - "createSuccess": "Created successfully", - "createFailed": "Create failed", - "updateSuccess": "Updated successfully", - "updateFailed": "Update failed", - "keyRequired": "Key name is required", - "typeRequired": "Please select a type", - "valueRequired": "Please enter a value", - "invalidNumber": "Please enter a valid number", - "permanent": "Permanent", - "expired": "Expired", - "seconds": "s", - "minutes": "mins", - "hours": "hrs", - "days": "days", - "listItem": "List Item", - "setMember": "Set Member", - "zsetMember": "ZSet", - "hashField": "Hash Field", - "add": "Add", - "addItem": "Add Item", - "addMember": "Add Member", - "addField": "Add Field", - "fieldName": "Field Name", - "fieldValue": "Field Value", - "member": "Member", - "score": "Score", - "ttlDesc": "-1 for permanent", - "cancel": "Cancel", - "confirm": "Confirm", - "create": "Create", - "update": "Update", - "loadDatabasesFailed": "Failed to load database list", - "loadKeyDetailFailed": "Failed to load key detail", - "searchKeysFailed": "Failed to search keys" -} diff --git a/web/apps/web-ele/src/locales/langs/en-US/redis-monitor.json b/web/apps/web-ele/src/locales/langs/en-US/redis-monitor.json deleted file mode 100644 index 564e88a..0000000 --- a/web/apps/web-ele/src/locales/langs/en-US/redis-monitor.json +++ /dev/null @@ -1,181 +0,0 @@ -{ - "overview": "Overview Info", - "memory": "Memory Info", - "clients": "Clients", - "keyspace": "Keyspace", - "stats": "Stats Info", - "slowlog": "Slow Log", - "loadFailed": "Failed to load monitor data", - "loadRealtimeStatsFailed": "Failed to load realtime stats", - "refreshSuccess": "Refresh successful", - "autoRefreshing": "Auto-refreshing", - "paused": "Paused", - "featureDeveloping": "Developing...", - "seconds": "s", - "minutes": "mins", - "hours": "hrs", - "days": "days", - "master": "Master", - "slave": "Slave", - "blocked": "Blocked", - "normal": "Normal", - "active": "Active", - "connectedClients": "Connected Clients", - "blockedClients": "Blocked Clients", - "totalConnections": "Total Connections", - "clientList": "Client List", - "totalClientsCount": "Total {count} clients", - "noClientConnections": "No client connections", - "clientId": "Client ID", - "address": "Address", - "name": "Name", - "database": "Database", - "status": "Status", - "age": "Age", - "idle": "Idle", - "outputBuffer": "Output Buffer", - "lastCommand": "Last Command", - "used": "Used", - "queue": "Queue", - "fieldDescription": "Field Description", - "clientIdDesc": "Unique client identifier assigned by Redis", - "addressDesc": "IP address and port of the client", - "nameDesc": "Client name set via CLIENT SETNAME", - "ageDesc": "Total duration of the client connection", - "idleDesc": "Duration the client has been idle (no commands sent)", - "outputBufferDesc": "Memory used by output buffer and queue length", - "permanent": "Permanent", - "milliseconds": "ms", - "totalKeys": "Total Keys", - "expiresKeys": "Expires Keys", - "proportion": "Proportion", - "avgTTL": "Avg TTL", - "databaseList": "Database List", - "totalDatabasesCount": "Total {count} databases", - "noDatabaseInfo": "No database info", - "keyCount": "Key Count", - "expires": "Expires", - "expireRate": "Expire Rate", - "noExpireTime": "No expire time", - "keyCountDesc": "Total number of keys stored in the database", - "expiresDesc": "Number of keys with an expiration set", - "avgTTLDesc": "Average time to live for all expiring keys (ms)", - "expireRateDesc": "Percentage of keys that have an expiration set", - "dbId": "DB ID", - "dbIdDesc": "Redis database index (0-15)", - "usageRateDesc": "Ratio of database keys relative to maximum capacity", - "insufficientMemory": "Insufficient Memory", - "moreFragmentation": "High Fragmentation", - "memoryUsage": "Memory Usage", - "memoryPeak": "Memory Peak", - "memoryPeakDesc": "Historical peak memory usage", - "fragmentationRatio": "Mem Fragmentation Ratio", - "memoryUsageDetail": "Memory Usage Detail", - "usedMemory": "Used Memory", - "rssMemory": "Used Memory RSS", - "physicalMemory": "Physical Memory", - "totalSystemMemory": "Total System Memory", - "system": "System", - "datasetMemory": "Used Memory Dataset", - "allocatorAllocated": "Allocator Allocated", - "allocatorActive": "Allocator Active", - "memoryPolicyConfig": "Memory Policy Config", - "maxMemoryLimit": "Max Memory Limit", - "noLimit": "No Limit", - "set": "Set", - "notLimited": "Not Limited", - "evictionPolicy": "Eviction Policy", - "evictionPolicyDesc": "💡 Eviction Policy Description", - "noevictionDesc": "noeviction: return errors when memory limit is reached", - "allkeysLruDesc": "allkeys-lru: evict any key using approximated LRU", - "volatileLruDesc": "volatile-lru: evict keys with an expire set using approximated LRU", - "allkeysRandomDesc": "allkeys-random: evict any key randomly", - "volatileRandomDesc": "volatile-random: evict keys with an expire set randomly", - "volatileTtlDesc": "volatile-ttl: evict keys with an expire set and shortest TTL", - "memoryUsageTrend": "Memory Usage Trend", - "recentDataPoints": "Recent {count} data points", - "waitingForData": "Waiting for data...", - "collectingMemoryData": "Collecting memory usage data...", - "currentUsage": "Current Usage", - "average": "Average", - "highest": "Highest", - "currentConnections": "Current Connections", - "opsPerSec": "Ops Per Sec", - "hitRate": "Hit Rate", - "redisBasicInfo": "Redis Basic Info", - "redisVersion": "Redis Version", - "redisMode": "Redis Mode", - "role": "Role", - "architecture": "Architecture", - "bits": "bits", - "tcpPort": "TCP Port", - "uptime": "Uptime", - "uptimeInDays": "Uptime In Days", - "connectionStatus": "Connection Status", - "connected": "Connected", - "disconnected": "Disconnected", - "memoryInfo": "Memory Info", - "memoryPolicy": "Memory Policy", - "connectionStats": "Connection Stats", - "rejectedConnections": "Rejected Connections", - "commandStats": "Command Stats", - "totalCommands": "Total Commands", - "keyspaceHits": "Keyspace Hits", - "keyspaceMisses": "Keyspace Misses", - "keyspaceInfo": "Keyspace Info", - "keys": "Keys", - "networkInput": "Network Input", - "totalNetInput": "Total Net Input Bytes", - "inputKbps": "Instantaneous Input Rate", - "networkOutput": "Network Output", - "totalNetOutput": "Total Net Output Bytes", - "outputKbps": "Instantaneous Output Rate", - "totalSlowLogs": "Total Slow Logs", - "avgDuration": "Avg Duration", - "maxDuration": "Max Duration", - "slowLogList": "Slow Log List", - "recentLogsCount": "Recent {count} logs", - "noSlowLogs": "No slow logs found", - "command": "Command", - "clientInfo": "Client Info", - "unnamed": "Unnamed", - "durationProportion": "Duration Proportion", - "relativeToMax": "Relative To Max", - "slowLogDesc": "Slow Log Description", - "slowLogThreshold": "Slow Log Threshold", - "slowLogThresholdDesc": "Commands exceeding the threshold are logged", - "executionTime": "Execution Time", - "executionTimeDesc": "Total time taken to execute the command (μs)", - "clientInfoDesc": "IP and name of the client that executed the command", - "performanceOptimization": "Performance Optimization", - "performanceOptimizationDesc": "Analyzing slow logs helps optimize Redis performance", - "timeUnit": "Time Unit", - "colorIndicator": "Color Indicator", - "excellent": "Excellent", - "good": "Good", - "lower": "Lower", - "veryLow": "Very Low", - "keyPerformanceIndicators": "Key Performance Indicators", - "cacheHitRate": "Cache Hit Rate", - "detailedStats": "Detailed Statistics", - "totalInputTraffic": "Total Input Traffic", - "totalOutputTraffic": "Total Output Traffic", - "instantaneousInputRate": "Instantaneous Input Rate", - "instantaneousOutputRate": "Instantaneous Output Rate", - "keyOperationStats": "Key Operation Stats", - "evictedKeys": "Evicted Keys", - "syncStats": "Sync Stats", - "syncFull": "Sync Full", - "syncPartialOk": "Sync Partial OK", - "syncPartialErr": "Sync Partial Err", - "pubsubChannels": "Pubsub Channels", - "pubsubPatterns": "Pubsub Patterns", - "latestForkUsec": "Latest Fork Usec", - "indicatorDesc": "Indicator Description", - "opsPerSecDesc": "Commands processed per second", - "hitRateDesc": "Keyspace hits as a percentage of total lookups", - "evictedKeysDesc": "Keys evicted due to memory limit", - "rejectedConnectionsDesc": "Connections rejected due to maxclients limit", - "syncFullDesc": "Full resynchronizations with replicas", - "latestForkUsecDesc": "Duration of the latest fork operation (μs)" -} diff --git a/web/apps/web-ele/src/locales/langs/en-US/report-manager.json b/web/apps/web-ele/src/locales/langs/en-US/report-manager.json deleted file mode 100644 index ffa45ed..0000000 --- a/web/apps/web-ele/src/locales/langs/en-US/report-manager.json +++ /dev/null @@ -1,437 +0,0 @@ -{ - "name": "Report Name", - "reportCode": "Report Code", - "category": "Category", - "status": "Status", - "description": "Description", - "createTime": "Created At", - "actions": "Actions", - "create": "New Report", - "design": "Design", - "editInfo": "Edit Info", - "deleteConfirm": "Delete report \"{name}\"?", - "deleteConfirmTitle": "Confirm Delete", - "deleteSuccess": "Deleted: {name}", - "saveSuccess": "Report saved", - "copyTitle": "Copy Report", - "copyCodePlaceholder": "Enter new report code", - "copySuccess": "Copied", - "statusMap": { - "draft": "Draft", - "published": "Published" - }, - "placeholder": { - "name": "Report name", - "code": "Report code", - "category": "Category", - "description": "Description" - }, - "editor": { - "create": "New Report", - "edit": "Edit Report", - "createSuccess": "Report created", - "loadFailed": "Failed to load report", - "back": "Back", - "save": "Save", - "publish": "Publish", - "publishSuccess": "Published. A new draft version was created.", - "copyVersion": "Copy Version", - "copyVersionSuccess": "Copied as a new design version", - "copyVersionFailed": "Failed to copy version" - }, - "leftPanel": { - "dataSource": "Data Source", - "reportProperties": "Report Settings", - "clickToConfigure": "Click to edit", - "configuredCount": "{count} configured", - "queryEmpty": "No query conditions yet", - "sortEmpty": "No sort rules yet", - "columnEmpty": "Column layout not enabled", - "convertEmpty": "No data transforms yet", - "columnEnabled": "Column layout enabled" - }, - "dataset": { - "title": "Datasets", - "selectSource": "Select data source", - "empty": "No datasets. Add one above.", - "fieldMapping": "Field mapping", - "loadingFields": "Loading fields...", - "loadFieldsFailed": "Failed to load fields", - "noFields": "No fields" - }, - "column": { - "config": "Column layout", - "title": "Column layout settings", - "enable": "Enable column layout", - "style": "Layout style", - "styleCol": "Row-based columns", - "styleRow": "Column-based rows", - "type": "Layout type", - "overRows": "After", - "splitCols": "rows, split to columns", - "overCols": "After", - "splitRows": "columns, split to rows", - "splitInto": "Split into", - "colsUnit": "columns", - "rowsUnit": "rows", - "dataRange": "Data range", - "dataRangePlaceholder": "e.g. A2:D10", - "copyColNo": "Copy row numbers", - "copyRowNo": "Copy column numbers", - "rangeHint": "e.g. 1,2-3,6", - "fillEmpty": "Fill empty rows", - "previewNote": "Preview: row-split→N columns, or column-split→N rows. Set range (e.g. A2:D10) and count ≥ 2." - }, - "sort": { - "config": "Sort settings", - "title": "Dataset sorting", - "hint": "Sort by dataset alias.field (e.g. sales.amount)", - "add": "Add rule", - "field": "Sort field", - "fieldPlaceholder": "e.g. sales.createTime", - "order": "Order", - "asc": "Ascending", - "desc": "Descending", - "datasetHint": "Configured datasets" - }, - "query": { - "title": "Query Parameters", - "config": "Configure queries", - "add": "Add field", - "field": "Field", - "fieldPlaceholder": "Select or enter parameter field", - "label": "Label", - "component": "Component", - "defaultValue": "Default", - "required": "This field is required", - "requiredLabel": "Required", - "input": "Input", - "select": "Select", - "date": "Date", - "dateRange": "Date range", - "showTime": "With time", - "options": "Options", - "optionsPlaceholder": "Label:value,Label2:value2", - "search": "Search", - "reset": "Reset", - "startDate": "Start date", - "endDate": "End date" - }, - "convert": { - "config": "Data transform", - "title": "Transform rules", - "hint": "Field format: datasetAlias.fieldName", - "add": "Add rule", - "field": "Field", - "fieldPlaceholder": "e.g. order.status", - "type": "Type", - "configCol": "Settings", - "extraTitle": "Transform settings", - "addOption": "Add option", - "option": "Option", - "optionId": "Value", - "optionLabel": "Label", - "dateFormat": "Date format", - "precision": "Decimal places", - "thousands": "Thousands separator", - "types": { - "select": "Select", - "date": "Date", - "number": "Number", - "user": "User", - "department": "Department", - "organize": "Organization", - "role": "Role", - "dictionary": "Dictionary" - }, - "namesMap": "Name mapping", - "namesPlaceholder": "ID:Label,ID2:Label2", - "dictionaryType": "Dictionary type", - "dictionaryTypePlaceholder": "Dictionary code" - }, - "preview": { - "title": "Preview", - "search": "Search", - "expressionCycle": "Circular references detected between expression cells; results may be incorrect", - "snapshotLarge": "Preview contains a large number of cells and may be slow", - "datasetRowWarn": "Dataset \"{alias}\" has many rows; preview may be slow", - "datasetRowLimit": "Dataset \"{alias}\" reached the row limit; results may be truncated" - }, - "importExport": { - "export": "Export config", - "import": "Import config", - "exportSuccess": "Report config exported", - "exportFailed": "Export failed", - "importTitle": "Import report config", - "dragOrClick": "Drag JSON here or click to upload", - "onlyJson": "Only .json files", - "fileParseError": "Failed to parse file", - "checking": "Checking...", - "codeConflictTip": "Report code exists, enter a new code", - "codeAvailable": "Code is available", - "newCodePlaceholder": "New report code", - "importSuccess": "Report imported", - "importFailed": "Import failed", - "confirmImport": "Import", - "reselect": "Reselect file", - "reportInfo": "Report info", - "appTip": "Report will belong to the current app; datasets match by data source code" - }, - "publishMenu": "Publish to menu", - "updateMenu": "Update menu", - "unpublishMenu": "Unpublish menu", - "unpublishSuccess": "Unpublished: {name}", - "unpublishFailed": "Failed to unpublish", - "publishDialog": { - "title": "Publish report to menu", - "success": "Published to menu", - "failed": "Publish failed", - "confirm": "Publish" - }, - "print": { - "title": "Print", - "notAllowed": "Printing is not allowed for this report", - "browserPrint": "Print", - "previewTitle": "Print preview", - "imageWarn": "This report contains {count} images. Printing may be slow. Continue?", - "failed": "Failed to open print preview. Please try again." - }, - "printForm": { - "printArea": "Print area", - "paperType": "Paper", - "padding": "Margins", - "direction": "Orientation", - "scale": "Scale", - "hAlign": "Horizontal align", - "vAlign": "Vertical align", - "gridlines": "Gridlines", - "workbookTitle": "Workbook title", - "worksheetTitle": "Sheet title", - "printDate": "Date", - "printTime": "Time", - "pageNumber": "Page number", - "yFreeze": "Repeat frozen rows", - "xFreeze": "Repeat frozen columns", - "options": { - "currentSheet": "Current sheet", - "portrait": "Portrait", - "landscape": "Landscape", - "a4": "A4", - "a3": "A3", - "a5": "A5", - "b4": "B4", - "b5": "B5", - "executive": "Executive", - "statement": "Statement", - "letter": "Letter", - "origin": "Original scale", - "fitWidth": "Fit width", - "fitHeight": "Fit height", - "fitPage": "Fit page", - "normal": "Normal", - "narrow": "Narrow margin", - "wide": "Wide margin", - "hAlign": { - "start": "Left", - "middle": "Center", - "end": "Right" - }, - "vAlign": { - "start": "Top", - "middle": "Middle", - "end": "Bottom" - } - } - }, - "image": { - "empty": "Select a floating image", - "source": "Image source", - "sourceLocal": "Upload", - "sourceUrl": "URL", - "url": "Image URL", - "urlPlaceholder": "Must start with http:// or https://", - "upload": "Upload image", - "selectFile": "Choose file", - "uploadSuccess": "Image uploaded", - "uploadFailed": "Upload failed" - }, - "settings": { - "title": "Report settings", - "allowExport": "Allow export", - "allowPrint": "Allow print", - "allowWatermark": "Show watermark", - "allowExportTip": "When enabled, Excel/PDF export is allowed in preview and runtime", - "allowPrintTip": "When enabled, printing is allowed in preview and runtime", - "allowWatermarkTip": "When enabled, watermark is shown in preview and runtime", - "watermarkText": "Watermark text", - "watermarkPlaceholder": "Watermark text", - "watermarkShowTime": "Show time in watermark", - "watermarkTimeFormat": "Time format", - "loadFailed": "Failed to load report settings" - }, - "pdfExport": { - "title": "Export PDF", - "success": "PDF exported", - "failed": "PDF export failed" - }, - "version": { - "title": "Versions", - "hint": "Switch, copy, or delete historical versions", - "switch": "Switch", - "loadFailed": "Failed to load versions", - "deleteConfirm": "Delete version v{version}?", - "deleteSuccess": "Version deleted", - "deleteFailed": "Failed to delete version", - "cannotDeleteActive": "Cannot delete the active version", - "state": { - "0": "Designing", - "1": "Active", - "2": "Archived" - } - }, - "fieldMapping": { - "title": "Field mapping", - "hint": "Map data source fields to dataset aliases", - "add": "Add mapping", - "sourceField": "Source field", - "targetField": "Target field", - "sourcePlaceholder": "Source field name", - "targetPlaceholder": "Mapped field name" - }, - "releaseMenu": { - "existingTitle": "Published menu", - "existingHint": "Current menu: {title} ({path}). Republishing will update the menu." - }, - "export": { - "title": "Export Excel", - "success": "Exported", - "failed": "Export failed", - "notAllowed": "Export is not allowed for this report" - }, - "chart": { - "empty": "Select a floating chart to configure", - "cellEmpty": "Select an in-cell chart to configure", - "cellTitle": "In-cell chart", - "type": "Chart type", - "title": "Chart title", - "datasetHint": "Dataset aliases", - "dataSet": "Dataset", - "classifyField": "Category field", - "maxField": "Radar max field", - "legendShow": "Show legend", - "legendOrient": "Legend layout", - "legendOrientHorizontal": "Horizontal", - "legendOrientVertical": "Vertical", - "legendFontSize": "Legend font size", - "styleType": "Chart style", - "lineArea": "Area fill", - "pieRose": "Rose chart", - "pieShowZero": "Hide zero values", - "layoutSection": "Layout & colors", - "gridTop": "Grid top", - "gridLeft": "Grid left", - "gridRight": "Grid right", - "gridBottom": "Grid bottom", - "legendLeft": "Legend left (%)", - "legendTop": "Legend top (%)", - "colorList": "Series colors", - "addColor": "Add color", - "colorListPlaceholder": "e.g. #5470c6,#91cc75,#fac858", - "seriesCenterLeft": "Pie center X (%)", - "seriesCenterTop": "Pie center Y (%)", - "seriesNameField": "Series name field", - "seriesDataField": "Series value field", - "summaryType": "Aggregation", - "fieldPlaceholder": "e.g. sales.month or month", - "types": { - "bar": "Bar", - "line": "Line", - "pie": "Pie", - "radar": "Radar" - }, - "styleTypes": { - "barDefault": "Default bar", - "barStack": "Stacked bar", - "lineDefault": "Default line", - "lineSmooth": "Smooth line", - "lineStack": "Stacked line", - "pieDefault": "Solid pie", - "pieRing": "Donut pie", - "radarPolygon": "Polygon radar", - "radarCircle": "Circle radar" - }, - "summary": { - "none": "Raw", - "sum": "Sum", - "avg": "Average", - "max": "Max", - "min": "Min", - "count": "Count" - } - }, - "properties": { - "title": "Cell Properties", - "empty": "Select a cell in the spreadsheet", - "position": "Row {row}, Column {col}", - "cellType": "Cell type", - "typeText": "Text", - "textParamHint": "Use #'{'paramName'}' in text cells; replaced on preview", - "typeDataSource": "Data source", - "typeParameter": "Parameter", - "typeQrCode": "QR code", - "typeBarcode": "Barcode", - "typeExpression": "Expression", - "expressionFormula": "Formula", - "expressionPlaceholder": "e.g. =A1+sum(sales.amount) or =sum(A1:B2)", - "expressionHint": "Supports A1/B2 refs, sum(A1:B2), sum(alias.field), #'{'param'}', + - * /", - "dataset": "Dataset alias", - "field": "Field", - "fieldPlaceholder": "e.g. name or user.name", - "displayType": "Display type", - "displayDefault": "Default", - "expand": "Expand", - "expandNone": "None", - "expandDown": "List down", - "expandRight": "List right", - "polymerizationType": "Aggregation", - "polyList": "List", - "polyGroup": "Group", - "polySummary": "Summary", - "summaryType": "Summary type", - "groupType": "Group mode", - "groupDefault": "Default", - "groupAdjacent": "Adjacent", - "mergeCell": "Merge cells", - "fillEmptyRows": "Pad empty rows after list", - "fillEmptyNum": "Empty row count", - "leftParent": "Left parent", - "topParent": "Top parent", - "leftParentCustom": "Left parent (col+row)", - "topParentCustom": "Top parent (col+row)", - "leftParentHint": "When expanding or summarizing, find the nearest data-source cell to the left on the same row to scope the data group. Plain text cells do not need this.", - "topParentHint": "When expanding or summarizing, find the nearest data-source cell above in the same column to scope the data level. Use None for grand totals; use Custom for group subtotals.", - "parentType": { - "none": "None", - "default": "Default", - "custom": "Custom" - }, - "paramField": "Parameter field", - "apply": "Apply to cell" - }, - "code": { - "content": "Code content", - "contentPlaceholder": "Static text or #'{'paramName'}'", - "paramHint": "Use #'{'field'}' for query params; replaced on preview", - "qrLevel": "Error correction", - "barcodeFormat": "Barcode format" - }, - "render": { - "codeRequired": "Report code is required", - "loadFailed": "Failed to load report", - "empty": "No preview data" - }, - "univerPlaceholder": { - "title": "Univer Report Designer", - "desc": "Phase 1 skeleton is ready. Full @univerjs spreadsheet engine will be integrated next." - } -} diff --git a/web/apps/web-ele/src/locales/langs/en-US/role.json b/web/apps/web-ele/src/locales/langs/en-US/role.json deleted file mode 100644 index f349aba..0000000 --- a/web/apps/web-ele/src/locales/langs/en-US/role.json +++ /dev/null @@ -1,134 +0,0 @@ -{ - "name": "Role", - "title": "Role Management", - "roleName": "Role Name", - "roleCode": "Role Code", - "roleType": "Role Type", - "dataScope": "Data Scope", - "priority": "Role Priority", - "priorityHelp": "Higher value means higher priority", - "description": "Role Description", - "descriptionPlaceholder": "Please enter role description", - "remark": "Remark", - "remarkPlaceholder": "Please enter remark", - "status": "Status", - "operation": "Operation", - "edit": "Edit", - "users": "Users", - "addUsersSuccess": "Users added successfully", - "removeUsersConfirm": "Are you sure you want to remove the selected {0} users?", - "removeUsersSuccess": "Users removed successfully", - "removeUsersFailed": "Failed to remove users", - "codeFormatError": "Role code can only contain letters, numbers and underscores", - "types": { - "system": "System Role", - "custom": "Custom Role" - }, - "dataScopes": { - "self": "Own Data Only", - "dept": "Department Data", - "deptAndSub": "Department and Sub-departments Data", - "deptAndSubShort": "Dept & Sub", - "all": "All Data", - "custom": "Custom Data", - "unknown": "Unknown" - }, - "permissions": { - "title": "Permission Assignment", - "save": "Save", - "selectRoleFirst": "Please select a role first", - "noRoleSelected": "No role selected", - "appList": "App List", - "allApps": "All Apps", - "loadAppsFailed": "Failed to load application list", - "menuList": "Menu List", - "selectAll": "Select All", - "unselectAll": "Unselect All", - "selectMenuPrompt": "Please select a menu from the left to view permissions", - "noPermissionData": "No permission data", - "loading": "Loading...", - "noPermissions": "No permissions", - "permissionCount": "permissions", - "loadMenuFailed": "Failed to load menu list", - "loadPermissionsFailed": "Failed to load permissions", - "saveSuccess": "Menu and permissions assigned successfully", - "saveFailed": "Failed to save menu and permission assignments", - "getRoleDetailFailed": "Failed to get role details", - "types": { - "button": "Button Permission", - "api": "API Permission", - "data": "Data Permission", - "other": "Other Permission" - }, - "steps": { - "menuApi": "Menu & API Permissions", - "fieldData": "Field & Data Permissions" - } - }, - "resourceScope": { - "title": "Data Permission", - "helpTip": "Only effective after backend implementation, refer to zq-demo", - "addResource": "Add Resource", - "saveConfig": "Save Configuration", - "deleteConfirm": "Are you sure to delete this configuration?", - "selectRole": "Please select a role first", - "noConfig": "No configuration, click [Add Resource] to start", - "resourceType": "Resource Type", - "selectResourceType": "Select Resource Type", - "dataPermission": "Data Permission Scope", - "selectDataPermission": "Select Data Permission", - "customDept": "Custom Department", - "selectDept": "Select Department", - "operation": "Operation", - "delete": "Delete", - "saveSuccess": "Resource data permission configuration saved successfully", - "saveFailed": "Failed to save resource data permission configuration", - "loadFailed": "Failed to load resource data permission configuration", - "loadResourceTypesFailed": "Failed to load resource types", - "loadDeptsFailed": "Failed to load department list", - "allTypesConfigured": "All resource types have been configured", - "noResourceTypes": "No resource types available", - "customDeptRequired": "Custom data permission must select departments" - }, - "fieldPermission": { - "title": "Field Permission", - "helpTip": "Only effective after backend implementation, refer to zq-demo", - "config": "Config", - "resourceType": "Resource Type", - "selectResourceType": "Select Resource Type", - "selectRoleFirst": "Please select a role first", - "selectRoleAndResource": "Please select a role and resource type first", - "fieldName": "Field Name", - "displayName": "Display Name", - "sensitive": "Sensitive", - "permissionType": "Permission Type", - "maskRule": "Mask Rule", - "description": "Description", - "noConfig": "No field configuration", - "saveConfig": "Save Configuration", - "saveSuccess": "Field permission configuration saved successfully", - "saveFailed": "Failed to save field permission configuration", - "loadFailed": "Failed to load field permission configuration", - "loadMetadataFailed": "Failed to load resource field metadata", - "maskRuleRequired": "Mask rule is required", - "permissionTypes": { - "read": "Read", - "write": "Write", - "hidden": "Hidden", - "masked": "Masked" - }, - "maskRules": { - "phone": "Phone", - "email": "Email", - "id_card": "ID Card", - "name": "Name", - "default": "Default" - }, - "permissionDesc": { - "read": "Can view this field", - "write": "Can view and modify this field", - "hidden": "Completely invisible", - "masked": "Partially visible (masked display)" - } - } -} diff --git a/web/apps/web-ele/src/locales/langs/en-US/scheduler.json b/web/apps/web-ele/src/locales/langs/en-US/scheduler.json deleted file mode 100644 index 8656ea9..0000000 --- a/web/apps/web-ele/src/locales/langs/en-US/scheduler.json +++ /dev/null @@ -1,130 +0,0 @@ -{ - "scheduler": "Scheduler", - "jobList": "Job List", - "jobDetail": "Job Detail", - "executionLogs": "Execution Logs", - "runStatus": "Run Status", - "running": "Running", - "stopped": "Stopped", - "totalJobs": "Total Jobs", - "enabledJobs": "Enabled Jobs", - "totalExecutions": "Total Executions", - "successRate": "Success Rate", - "executionCount": "Execution Count", - "failureCount": "Failure Count", - "successCount": "Success Count", - "allJobs": "All Jobs", - "runningJobs": "Running Jobs", - "executionRecords": "Execution Records", - "jobSuccessRate": "Job Success Rate", - "totalRunCount": "Total Run Count", - "executionFailed": "Failed", - "executionSuccess": "Success", - "fetchStatusFailed": "Failed to fetch scheduler status", - "fetchDetailFailed": "Failed to fetch job detail", - "cardView": "Card View", - "listView": "List View", - "refresh": "Refresh", - "loading": "Loading...", - "noLogs": "No logs found", - "allLogsLoaded": "All logs loaded", - "retryCount": "Retry Count", - "retryTimes": "Retry {count} times", - "startTime": "Start Time", - "endTime": "End Time", - "duration": "Duration", - "executionDuration": "Duration (s)", - "executionResult": "Result", - "exceptionInfo": "Exception", - "stackTrace": "Stack Trace", - "jobName": "Job Name", - "jobCode": "Job Code", - "jobGroup": "Job Group", - "triggerType": "Trigger Type", - "cronExpression": "Cron Expression", - "intervalTime": "Interval Time", - "jobStatus": "Job Status", - "priority": "Priority", - "maxInstances": "Max Instances", - "maxRetries": "Max Retries", - "timeout": "Timeout", - "timeoutSeconds": "Timeout (s)", - "coalesce": "Coalesce", - "allowConcurrent": "Allow Concurrent", - "remark": "Remark", - "remarkPlaceholder": "Remark information", - "taskMode": "Task Type", - "modeFunction": "Execute Function", - "modeWorkflow": "Execute Workflow", - "taskFunc": "Task Function", - "taskFuncPlaceholder": "Enter task function path (e.g. scheduler.tasks.test_task)", - "taskFuncs": { - "testTask": "Test Task", - "cleanupTask": "Cleanup Logs", - "workflowTask": "Execute Workflow" - }, - "workflowCode": "Target Workflow", - "workflowCodePlaceholder": "Select workflow to execute", - "taskArgs": "Task Args", - "taskKwargs": "Task Kwargs", - "cronPlaceholder": "e.g., 0 0 * * * (Every day at midnight)", - "intervalPlaceholder": "Interval time", - "datePlaceholder": "Run date", - "groupPlaceholder": "Job group, default is 'default'", - "argsPlaceholder": "JSON array, e.g., [\"param1\", \"param2\"]", - "kwargsPlaceholder": "JSON object, e.g., {'{'}'key': 'value'{'}'}", - "required": "{field} is required", - "deleteJob": "Delete Job", - "maxLength": "{field} length cannot exceed {max} characters", - "codeInvalid": "Job code can only contain letters, numbers, and underscores", - "createJob": "Create Job", - "editJob": "Edit Job", - "deleteJobConfirm": "Are you sure you want to delete job \"{name}\"?", - "operationSuccess": "Operation successful", - "lastRunTime": "Last Run", - "nextRunTime": "Next Run", - "description": "Description", - "triggerCron": "Cron", - "triggerInterval": "Interval", - "triggerDate": "One-time", - "status": { - "enabled": "Enabled", - "disabled": "Disabled", - "paused": "Paused", - "pending": "Pending", - "running": "Running", - "success": "Success", - "failed": "Failed", - "timeout": "Timeout", - "skipped": "Skipped", - "waiting": "Waiting", - "unknown": "Unknown" - }, - "unit": { - "seconds": "s", - "minutes": "mins", - "hours": "hrs", - "days": "days" - }, - "paramType": { - "string": "String", - "number": "Number", - "boolean": "Boolean" - }, - "paramKey": "Key", - "paramValue": "Value", - "argValue": "Value", - "addParam": "Add Parameter", - "addArg": "Add Argument", - "noParams": "No parameters, click button below to add", - "noArgs": "No arguments, click button below to add", - "executeNow": "Execute Now", - "executeSuccess": "Job {name} has started execution", - "executeFailed": "Failed to execute job", - "executionProgress": "Execution Progress", - "streaming": "Streaming", - "streamComplete": "Completed", - "noStreamLogs": "No execution logs", - "waitingForLogs": "Waiting for logs...", - "viewLiveLogs": "View Live Logs" -} diff --git a/web/apps/web-ele/src/locales/langs/en-US/server-monitor.json b/web/apps/web-ele/src/locales/langs/en-US/server-monitor.json deleted file mode 100644 index a7a1828..0000000 --- a/web/apps/web-ele/src/locales/langs/en-US/server-monitor.json +++ /dev/null @@ -1,160 +0,0 @@ -{ - "systemInfo": "System Info", - "cpuInfo": "CPU Info", - "memoryInfo": "Memory Info", - "diskInfo": "Disk Info", - "networkInfo": "Network Info", - "processInfo": "Process Info", - "loadFailed": "Failed to load server monitor data", - "refreshSuccess": "Refresh successful", - "autoRefreshOn": "Auto-refresh enabled", - "autoRefreshOff": "Auto-refresh disabled", - "autoRefreshing": "Auto-refreshing", - "paused": "Paused", - "featureDeveloping": "Feature under development...", - "serverMonitor": "Server Monitor", - "uptime": "Uptime", - "days": "days", - "hours": "hours", - "minutes": "minutes", - "justStarted": "Just started", - "cpuUsage": "CPU Usage", - "core": "Core", - "memoryUsage": "Memory Usage", - "diskUsage": "Disk Usage", - "totalDiskCapacity": "Total Disk Capacity", - "networkTraffic3Min": "Network Traffic (Last 3 mins)", - "upload": "Upload", - "download": "Download", - "peakUpload": "Peak Upload", - "peakDownload": "Peak Download", - "top10Processes": "Top 10 Processes", - "topProcessesCpu": "Top Processes (by CPU usage)", - "processName": "Process Name", - "status": "Status", - "createTime": "Create Time", - "overallUsage": "Overall Usage", - "physicalCores": "Physical Cores", - "coreCount": "Core Count", - "logicalProcessors": "Logical Processors", - "threadCount": "Thread Count", - "basicInfo": "Basic Information", - "processorModel": "Processor Model", - "architecture": "Architecture", - "physicalCoreCount": "Physical Core Count", - "logicalProcessorCount": "Logical Processor Count", - "currentUsage": "Current Usage", - "frequencyInfo": "Frequency Information", - "currentFrequency": "Current Frequency", - "maxFrequency": "Max Frequency", - "minFrequency": "Min Frequency", - "coreUsage": "Usage per Core", - "cpuTimeStats": "CPU Time Statistics", - "cpuStatsInfo": "CPU Statistics", - "systemLoad": "System Load", - "load1min": "1-min Average Load", - "load5min": "5-min Average Load", - "load15min": "15-min Average Load", - "cpuCoreCount": "CPU Cores", - "totalMemory": "Total Memory", - "physicalMemoryTotal": "Total Physical Memory", - "used": "Used", - "diskIo": "Disk IO", - "read": "Read", - "write": "Write", - "totalRead": "Total Read", - "totalWrite": "Total Write", - "networkIo": "Network IO", - "totalSent": "Total Sent", - "totalReceived": "Total Received", - "hostname": "Hostname", - "ipAddress": "IP Address", - "os": "OS", - "processor": "Processor", - "pythonVersion": "Python Version", - "systemStatus": "System Status", - "startTime": "Start Time", - "processCount": "Process Count", - "onlineUsers": "Online Users", - "unitUser": "", - "updateTime": "Update Time", - "networkUsageTrend": "Network Usage Trend", - "recentDataPoints": "Recent {count} data points", - "waitingForData": "Waiting for data...", - "collectingNetworkData": "Collecting network usage data...", - "availableMemory": "Available Memory", - "immediatelyAvailable": "Immediately Available", - "virtualMemoryRam": "Virtual Memory (RAM)", - "memoryUsageStatus": "Memory Usage Status", - "kernelMemory": "Kernel Memory", - "usedMemory": "Used Memory", - "swapPartition": "Swap Partition", - "swapUsageStatus": "Swap Usage Status", - "swapTotal": "Total Swap", - "swapAvailable": "Available Swap", - "swapUsed": "Used Swap", - "memoryDistribution": "Memory Distribution", - "cache": "Cache", - "buffer": "Buffer", - "activeMemory": "Active Memory", - "inactiveMemory": "Inactive Memory", - "freeMemory": "Free Memory", - "realtimeMemoryDetails": "Real-time Memory Details", - "readSpeed": "Read Speed", - "currentReadRate": "Current Read Rate", - "writeSpeed": "Write Speed", - "currentWriteRate": "Current Write Rate", - "diskPartitionList": "Disk Partition List", - "device": "Device", - "fileSystem": "File System", - "totalCapacity": "Total Capacity", - "available": "Available", - "diskIoStats": "Disk IO Statistics", - "readStats": "Read Statistics", - "totalReadAmount": "Total Read Amount", - "readCount": "Read Count", - "readTime": "Read Time", - "seconds": "seconds", - "writeStats": "Write Statistics", - "totalWriteAmount": "Total Write Amount", - "writeCount": "Write Count", - "writeTime": "Write Time", - "realtimeDiskIo": "Real-time Disk IO", - "uploadSpeed": "Upload Speed", - "currentUploadRate": "Current Upload Rate", - "downloadSpeed": "Download Speed", - "currentDownloadRate": "Current Download Rate", - "accumulatedSentData": "Accumulated Sent Data", - "accumulatedReceivedData": "Accumulated Received Data", - "networkInterfaceList": "Network Interface List", - "online": "Online", - "offline": "Offline", - "interfaceName": "Interface Name", - "speed": "Speed", - "mtu": "MTU", - "mountPoint": "Mount Point", - "usageRate": "Usage Rate", - "availableSpace": "Available Space", - "remainingSpace": "Remaining Space", - "currentSpeed": "Current Speed", - "sentBytes": "Sent Bytes", - "receivedBytes": "Received Bytes", - "networkTrafficStats": "Network Traffic Statistics", - "sentStats": "Sent Statistics", - "totalSentAmount": "Total Sent Amount", - "receivedStats": "Received Statistics", - "totalReceivedAmount": "Total Received Amount", - "realtimeNetworkIo": "Real-time Network IO", - "totalProcesses": "Total Processes", - "totalSystemProcesses": "Total System Processes", - "running": "Running", - "runningProcesses": "Running Processes", - "sleeping": "Sleeping", - "sleepingProcesses": "Sleeping Processes", - "otherStatus": "Other Status", - "stoppedZombieStatus": "Stopped/Zombie etc.", - "processDistribution": "Process Distribution", - "total": "Total", - "resourceUsageRanking": "Resource Usage Ranking", - "noProcessData": "No process data" -} diff --git a/web/apps/web-ele/src/locales/langs/en-US/system-config.json b/web/apps/web-ele/src/locales/langs/en-US/system-config.json deleted file mode 100644 index b8368f9..0000000 --- a/web/apps/web-ele/src/locales/langs/en-US/system-config.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "title": "System Config", - "ssoConfig": "SSO Config", - "notifyConfig": "Notification Config", - "modelConfig": "Model Config", - "syncConfig": "Sync Config", - "save": "Save", - "reset": "Reset to Default", - "resetConfirm": "Are you sure to reset this group to default? This will delete custom configs from database and restore to environment variable defaults.", - "saveSuccess": "Saved successfully", - "saveError": "Save failed", - "resetSuccess": "Restored to default config", - "resetError": "Reset failed", - "warmupSuccess": "Cache warmup completed", - "clearCacheSuccess": "Cache cleared", - "secretTip": "Sensitive field, displayed as masked value. Leave empty or keep masked value to preserve original.", - "groups": { - "oauth_gitee": "Gitee", - "oauth_github": "GitHub", - "oauth_qq": "QQ", - "oauth_google": "Google", - "oauth_wechat": "WeChat", - "oauth_microsoft": "Microsoft", - "oauth_dingtalk": "DingTalk", - "oauth_feishu": "Feishu", - "oauth_wecom": "WeCom", - "notify_email": "Email", - "notify_dingtalk": "DingTalk", - "notify_feishu": "Feishu", - "notify_wecom": "WeCom", - "notify_sms": "SMS", - "notify_wechat_mp": "WeChat MP", - "sync_dingtalk": "DingTalk", - "sync_wecom": "WeCom", - "sync_feishu": "Feishu" - }, - "fields": { - "client_id": "Client ID", - "client_secret": "Client Secret", - "redirect_uri": "Web Redirect URI", - "h5_redirect_uri": "H5 Redirect URI", - "app_id": "App ID", - "app_key": "App Key", - "app_secret": "App Secret", - "corp_id": "Corp ID", - "agent_id": "Agent ID", - "smtp_host": "SMTP Host", - "smtp_port": "SMTP Port", - "smtp_user": "SMTP User", - "smtp_password": "SMTP Password", - "smtp_use_tls": "Use TLS", - "smtp_from_name": "From Name", - "smtp_from_email": "From Email", - "webhook_url": "Webhook URL", - "webhook_secret": "Webhook Secret", - "template_id": "Template ID", - "url": "Redirect URL", - "mini_appid": "Mini Program AppID", - "mini_page": "Mini Program Page", - "provider": "Provider", - "providerAliyun": "Alibaba Cloud", - "providerTencent": "Tencent Cloud", - "aliyun_access_key_id": "Aliyun AccessKey ID", - "aliyun_access_key_secret": "Aliyun AccessKey Secret", - "aliyun_sign_name": "Aliyun SMS Sign Name", - "aliyun_template_code": "Aliyun SMS Template Code", - "tencent_secret_id": "Tencent SecretId", - "tencent_secret_key": "Tencent SecretKey", - "tencent_sdk_app_id": "Tencent SDKAppID", - "tencent_sign_name": "Tencent SMS Sign Name", - "tencent_template_id": "Tencent SMS Template ID", - "todo_pc_url": "Todo PC Redirect URL", - "todo_app_url": "Todo Mobile Redirect URL" - } -} diff --git a/web/apps/web-ele/src/locales/langs/en-US/system.json b/web/apps/web-ele/src/locales/langs/en-US/system.json deleted file mode 100644 index 60c3fb0..0000000 --- a/web/apps/web-ele/src/locales/langs/en-US/system.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "title": "System Management", - "tool": "System Tool", - "user": { - "selectPost": "Select Post", - "selectDept": "Select Department", - "selectRole": "Select Role", - "allDept": "All Departments" - } -} diff --git a/web/apps/web-ele/src/locales/langs/en-US/ui-config.json b/web/apps/web-ele/src/locales/langs/en-US/ui-config.json deleted file mode 100644 index 872eaa1..0000000 --- a/web/apps/web-ele/src/locales/langs/en-US/ui-config.json +++ /dev/null @@ -1,172 +0,0 @@ -{ - "title": "UI Config Management", - "name": "UI Config", - "styleConfig": "Style Config", - "configKey": "Config Key", - "configKeyPlaceholder": "Please enter config key", - "configValue": "Config Value", - "configValuePlaceholder": "Please enter config value (JSON format)", - "configType": "Config Type", - "configTypePlaceholder": "Please select config type", - "description": "Description", - "descriptionPlaceholder": "Please enter description", - "status": "Status", - "sort": "Sort", - "operation": "Operation", - "edit": "Edit", - "keyFormatError": "Config key can only contain letters, numbers, underscores and hyphens", - "appConfig": "App Config", - "themeConfig": "Theme Config", - "logoConfig": "Logo Config", - "copyrightConfig": "Copyright Config", - "otherConfig": "Other Config", - "configList": "Config List", - "configTypes": { - "preferences": "Preferences", - "theme": "Theme", - "logo": "Logo", - "copyright": "Copyright", - "other": "Other" - }, - "jsonFormatError": "JSON format error", - "save": "Save", - "saveSuccess": "Save success", - "saveError": "Save failed", - "loadSuccess": "Load success", - "loadError": "Load failed", - "previewConfig": "Preview Config", - "applyConfig": "Apply Config", - "app": { - "title": "App Config", - "name": "App Name", - "namePlaceholder": "Please enter app name", - "defaultHomePath": "Default Home Path", - "defaultHomePathPlaceholder": "Please enter default home path", - "locale": "Default Language", - "dynamicTitle": "Dynamic Title", - "dynamicTitleTip": "When enabled, page title will change dynamically based on current route", - "watermark": "Watermark", - "watermarkTip": "When enabled, watermark will be displayed on the page", - "watermarkContent": "Watermark Content", - "watermarkContentPlaceholder": "Please enter watermark content", - "enablePreferences": "Enable Preferences", - "enablePreferencesTip": "When enabled, users can modify preferences in the interface", - "layout": "Layout Mode", - "layoutOptions": { - "sidebar-nav": "Sidebar Navigation", - "header-nav": "Header Navigation", - "mixed-nav": "Mixed Navigation", - "header-sidebar-nav": "Header + Sidebar Navigation" - } - }, - "theme": { - "mode": "Theme Mode", - "modeOptions": { - "light": "Light", - "dark": "Dark", - "auto": "Follow System" - }, - "colorPrimary": "Primary Color", - "radius": "Border Radius", - "builtinType": "Built-in Theme", - "semiDarkSidebar": "Semi Dark Sidebar", - "semiDarkHeader": "Semi Dark Header" - }, - "logo": { - "enable": "Enable Logo", - "source": "Logo Image", - "sourcePlaceholder": "Please enter logo image URL or upload", - "fit": "Fit Mode", - "fitOptions": { - "contain": "Contain", - "cover": "Cover", - "fill": "Fill", - "none": "None", - "scale-down": "Scale Down" - } - }, - "copyright": { - "enable": "Enable Copyright", - "companyName": "Company Name", - "companyNamePlaceholder": "Please enter company name", - "companySiteLink": "Company Website", - "companySiteLinkPlaceholder": "Please enter company website link", - "date": "Copyright Year", - "datePlaceholder": "Please enter copyright year", - "icp": "ICP License", - "icpPlaceholder": "Please enter ICP license number", - "icpLink": "ICP Link", - "icpLinkPlaceholder": "Please enter ICP link", - "policeIcp": "Police ICP Number", - "policeIcpPlaceholder": "Please enter police ICP number", - "policeIcpLink": "Police ICP Link", - "policeIcpLinkPlaceholder": "Please enter police ICP link", - "loginOnly": "Login Page Only", - "loginOnlyTip": "When enabled, copyright info will only be displayed on the login page" - }, - "loginConfig": { - "title": "Login Config", - "enableThirdPartyLogin": "Enable Third-party Login", - "enableThirdPartyLoginTip": "When enabled, the login page will display third-party login options", - "enabledProviders": "Enabled Login Methods", - "enabledProvidersTip": "Select which third-party login methods to display on the login page", - "providers": { - "gitee": "Gitee", - "github": "GitHub", - "google": "Google", - "microsoft": "Microsoft", - "qq": "QQ", - "wechat": "WeChat", - "wecom": "WeCom", - "dingtalk": "DingTalk", - "feishu": "Feishu" - } - }, - "modelConfig": "Model Config", - "model": { - "title": "Model Config", - "providerManagement": "Provider Management", - "modelManagement": "Model Management", - "addProvider": "Add Provider", - "editProvider": "Edit Provider", - "addModel": "Add Model", - "editModel": "Edit Model", - "addDefaultModels": "Add Default Models", - "providerName": "Name", - "providerType": "Type", - "providerDescription": "Description", - "apiKey": "API Key", - "apiBase": "API Base URL", - "ollamaHost": "Ollama Host", - "modelName": "Model Name", - "displayName": "Display Name", - "modelType": "Model Type", - "maxTokens": "Max Tokens", - "supportsVision": "Supports Vision", - "supportsFunction": "Supports Function", - "enabled": "Enabled", - "status": "Status", - "operation": "Operation", - "test": "Test", - "selectProvider": "Select Provider", - "chatModel": "Chat Model", - "embeddingModel": "Embedding Model", - "completionModel": "Completion Model", - "rerankModel": "Rerank Model", - "chat": "Chat", - "embedding": "Embedding", - "rerank": "Rerank", - "addSelected": "Add Selected", - "noDefaultModels": "No default models", - "addedModels": "Added Models", - "availableModels": "Available Models", - "addAll": "Add All", - "added": "Added", - "refreshModels": "Refresh", - "sourceApi": "Live", - "sourceDefault": "Default", - "fetchFromApiSuccess": "Fetched latest models from provider API", - "fetchFromApiFallback": "Online fetch failed, using default model list", - "searchModel": "Search models" - } -} diff --git a/web/apps/web-ele/src/locales/langs/en-US/ui.json b/web/apps/web-ele/src/locales/langs/en-US/ui.json deleted file mode 100644 index a5b0099..0000000 --- a/web/apps/web-ele/src/locales/langs/en-US/ui.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "layout": { - "poweredBy": "AI Agent Admin" - }, - "actionMessage": { - "createSuccess": "Created successfully", - "createError": "Failed to create", - "updateSuccess": "Updated successfully", - "updateError": "Failed to update", - "deleteSuccess": "Deleted successfully", - "deleteConfirm": "Are you sure to delete {0}?", - "deleteError": "Failed to delete", - "loadError": "Failed to load" - } -} diff --git a/web/apps/web-ele/src/locales/langs/en-US/user-avatar.json b/web/apps/web-ele/src/locales/langs/en-US/user-avatar.json deleted file mode 100644 index a77067c..0000000 --- a/web/apps/web-ele/src/locales/langs/en-US/user-avatar.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "profile": { - "overview": "Overview", - "organization": "Organization", - "email": "Email", - "mobile": "Mobile", - "department": "Department", - "position": "Position", - "manager": "Manager", - "city": "City", - "type": "Type" - } -} diff --git a/web/apps/web-ele/src/locales/langs/en-US/user.json b/web/apps/web-ele/src/locales/langs/en-US/user.json deleted file mode 100644 index 2f13f67..0000000 --- a/web/apps/web-ele/src/locales/langs/en-US/user.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "name": "User", - "title": "User Management", - "userName": "User Name", - "account": "Account", - "avatar": "Avatar", - "avatarHelp": "Support jpg, png format, size no more than 2MB", - "selectAvatar": "Select Avatar", - "email": "Email", - "emailFormatError": "Please enter a valid email address", - "mobile": "Mobile", - "mobileFormatError": "Please enter a valid mobile number", - "gender": "Gender", - "unknown": "Unknown", - "male": "Male", - "female": "Female", - "birthday": "Birthday", - "selectBirthday": "Select Birthday", - "city": "City", - "address": "Address", - "bio": "Bio", - "bioPlaceholder": "Please enter bio", - "dept": "Department", - "selectDept": "Please select department", - "manager": "Manager", - "selectManager": "Please select manager", - "post": "Post", - "selectPost": "Please select post", - "role": "Role", - "selectRole": "Please select role", - "selectUser": "Select User", - "userList": "User List", - "userType": "User Type", - "systemUser": "System User", - "normalUser": "Normal User", - "externalUser": "External User", - "status": "Status", - "locked": "Locked", - "createTime": "Create Time", - "operation": "Operation", - "resetPassword": "Reset Password", - "cannotDeleteAdmin": "Cannot delete administrator account", - "selectUsersToDelete": "Please select users to delete", - "batchDeleteTitle": "Batch Delete Users", - "batchDeleteConfirm": "Are you sure to delete {0} users?\n{1}", - "batchDelete": "Batch Delete", - "deleteSuccess": "Successfully deleted {0} users", - "deleteError": "Failed to delete user", - "cannotResetAdminPassword": "Cannot reset administrator password", - "resetPasswordTitle": "Reset Password", - "resetPasswordConfirm": "Are you sure to reset password for user \"{0}\"?\nThe password will be reset to: admin123", - "resetPasswordSuccess": "Password reset successfully for user \"{0}\"", - "resetPasswordError": "Failed to reset password", - "basicInfo": "Basic Information", - "changePassword": "Change Password", - "oldPassword": "Current Password", - "newPassword": "New Password", - "confirmPassword": "Confirm Password", - "oldPasswordPlaceholder": "Please enter current password", - "newPasswordPlaceholder": "Please enter new password", - "confirmPasswordPlaceholder": "Please enter new password again", - "passwordNotMatch": "Passwords do not match", - "changePasswordSuccess": "Password changed successfully", - "changePasswordError": "Failed to change password", - "updateProfileSuccess": "Profile updated successfully", - "updateProfileError": "Failed to update profile", - "loadProfileError": "Failed to load profile" -} diff --git a/web/apps/web-ele/src/locales/langs/en-US/wecom-sync.json b/web/apps/web-ele/src/locales/langs/en-US/wecom-sync.json deleted file mode 100644 index a523cd3..0000000 --- a/web/apps/web-ele/src/locales/langs/en-US/wecom-sync.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "title": "WeCom Sync Configuration", - "corpId": "Corp ID", - "corpIdPlaceholder": "Enter Corp ID", - "corpSecret": "Contacts Secret", - "corpSecretPlaceholder": "Enter Contacts Management Secret", - "testConnection": "Test Connection", - "testSuccess": "Connection Successful", - "testFail": "Connection Failed", - "testing": "Testing...", - "syncScope": "Sync Scope", - "syncScopePlaceholder": "Please select", - "syncScopeTip": "Select an organization as the top-level for data synchronization. Once synced, this organization cannot be changed.", - "syncScopeLocked": "Initial sync completed. Sync scope is now locked. Contact admin to change.", - "syncStats": "Sync Statistics", - "syncType": "Sync Type", - "totalCount": "Total", - "successCount": "Synced", - "failCount": "Failed", - "notSynced": "Not Synced", - "syncTime": "Sync Time", - "operation": "Operation", - "sync": "Sync", - "syncing": "Syncing...", - "syncDept": "Organization", - "syncUser": "User", - "syncDeptSuccess": "Organization sync completed", - "syncUserSuccess": "User sync completed", - "syncFail": "Sync failed", - "triggerEvents": "Trigger Events", - "triggerEvent": "Trigger Event", - "description": "Description", - "enableSyncDept": "Enable Sync Organization", - "enableSyncDeptDesc": "Trigger organization sync on add, delete, or modify organization info", - "enableSyncUser": "Enable Sync User", - "enableSyncUserDesc": "Trigger user sync on add, delete, or modify user info", - "save": "Save", - "saving": "Saving...", - "saveSuccess": "Saved successfully", - "saveFail": "Save failed", - "corpName": "Corp Name", - "loadingDeptTree": "Loading department tree...", - "callbackConfig": "Event Callback Configuration", - "callbackConfigTip": "After configuring the callback URL in WeCom admin console, contacts changes will be pushed to this system in real-time for incremental sync.", - "callbackUrl": "Callback URL", - "callbackUrlPlaceholder": "Enter callback URL, e.g. https://example.com/api/core/wecom-sync/callback", - "callbackToken": "Callback Token", - "callbackTokenPlaceholder": "Enter callback token", - "callbackAesKey": "EncodingAESKey", - "callbackAesKeyPlaceholder": "Enter EncodingAESKey (43 characters)", - "callbackStatus": "Callback Status", - "callbackRegistered": "Configured", - "callbackNotRegistered": "Not Configured", - "subscribedEvents": "Subscribed Events", - "generateRandom": "Generate", - "guideTitle": "WeCom Sync Setup Guide", - "guideStep1Title": "Get WeCom Contacts Secret", - "guideStep1Desc": "Log in to WeCom admin console (work.weixin.qq.com), go to \"Management Tools\" -> \"Contacts Sync\", enable API sync, and get the Contacts Secret. Also get the Corp ID from the \"My Enterprise\" page.", - "guideStep2Title": "Enter Credentials", - "guideStep2Desc": "Fill in the Corp ID and Contacts Secret into the corresponding fields on this page, then click \"Test Connection\" to verify.", - "guideStep3Title": "Set Sync Scope & Run Full Sync", - "guideStep3Desc": "After a successful connection, select the root department in \"Sync Scope\", then click \"Sync\" in the statistics table — sync organizations first, then users.", - "guideStep4Title": "Configure Event Callback (Real-time Sync)", - "guideStep4Desc": "In WeCom admin console under \"Management Tools\" -> \"Contacts Sync\", set up the event receiver server. Enter the Token and EncodingAESKey generated on this page into WeCom admin. The callback URL format is: https://your-domain/api/core/wecom-sync/callback. Enter the same values on this page and save.", - "guideStep5Title": "Enable Trigger Events", - "guideStep5Desc": "In the \"Trigger Events\" section, check the event types to auto-sync (organizations, users) and save. WeCom contacts changes will then be pushed to the system for incremental sync automatically." -} diff --git a/web/apps/web-ele/src/locales/langs/en-US/workflow.json b/web/apps/web-ele/src/locales/langs/en-US/workflow.json deleted file mode 100644 index 856702c..0000000 --- a/web/apps/web-ele/src/locales/langs/en-US/workflow.json +++ /dev/null @@ -1,310 +0,0 @@ -{ - "workflow": "Workflow", - "title": "Process Title", - "type": "Process Type", - "status": "Status", - "currentNode": "Current Node", - "startTime": "Start Time", - "endTime": "End Time", - "actions": "Actions", - "details": "Details", - "recall": "Recall", - "recallConfirm": "Recall Confirmation", - "recallConfirmMsg": "Are you sure you want to recall this process? This action cannot be undone.", - "recallSuccess": "Recall successful", - "recallFailed": "Recall failed", - "statusMap": { - "pending": "Pending", - "approved": "Approved", - "rejected": "Rejected", - "canceled": "Canceled", - "transferred": "Transferred" - }, - "nodeName": "Node Name", - "result": "Result", - "initiator": "Initiator", - "handleTime": "Handle Time", - "workflowType": { - "label": "Workflow Type", - "approval": "Approval", - "application": "Application", - "business": "Business", - "hr": "HR", - "finance": "Finance", - "admin": "Admin", - "other": "Other" - }, - "manager": { - "title": "Workflow Management", - "add": "Add Workflow", - "edit": "Edit Workflow", - "view": "View Workflow", - "basicInfo": "Basic Information", - "design": "Workflow Design", - "editInfo": "Edit Info", - "name": "Process Name", - "code": "Process Code", - "workflowType": "Workflow Type", - "icon": "Process Icon", - "iconBgColor": "Icon Background Color", - "preview": "Preview", - "form": "Related Form", - "category": "Category", - "version": "Version", - "updatedAt": "Updated At", - "remark": "Process Description", - "sort": "Sort Order", - "addProcess": "Add Process", - "batchDelete": "Batch Delete", - "batchDeleteWithCount": "Batch Delete ({count})", - "publish": "Publish", - "disable": "Disable", - "copy": "Copy", - "status": { - "draft": "Draft", - "published": "Published", - "disabled": "Disabled" - }, - "placeholder": { - "title": "Please enter process title", - "workflowType": "Please select workflow type", - "icon": "Please select process icon", - "iconBgColor": "Enter custom color or gradient", - "status": "Please select status", - "name": "Please enter process name", - "code": "Please enter process code", - "form": "Please select related form", - "remark": "Please enter process description", - "sort": "Smaller values appear first, default is 0", - "copyCode": "Please enter new process code" - }, - "validate": { - "name": "Please enter process name", - "code": "Please enter process code", - "codeFormat": "Code must start with a letter and contain only letters, numbers, and underscores", - "form": "Please select related form", - "design": "Workflow design is incomplete" - }, - "message": { - "deleteConfirm": "Are you sure you want to delete this process?", - "deleteConfirmTitle": "Delete Confirmation", - "deleteSuccess": "Deleted successfully", - "selectToDelete": "Please select processes to delete first", - "batchDeleteConfirm": "Are you sure you want to delete {count} selected processes?", - "batchDeleteConfirmTitle": "Batch Delete Confirmation", - "publishConfirm": "Are you sure you want to publish this process? It can be used after publishing.", - "publishConfirmTitle": "Publish Confirmation", - "publishSuccess": "Published successfully", - "disableConfirm": "Are you sure you want to disable this process? New processes cannot be started after disabling.", - "disableConfirmTitle": "Disable Confirmation", - "disableSuccess": "Disabled successfully", - "copyConfirmTitle": "Copy Process", - "copySuccess": "Copied successfully", - "copySuffix": "Copy", - "loadFailed": "Failed to load data", - "saveSuccess": "Saved successfully", - "createSuccess": "Created successfully" - }, - "autoSave": { - "saving": "Saving...", - "saved": "Saved", - "unsaved": "Unsaved" - }, - "steps": { - "basic": "Basic Information", - "design": "Workflow Design" - }, - "importExport": { - "export": "Export Config", - "import": "Import Config", - "exportSuccess": "Workflow config exported", - "exportFailed": "Export failed", - "importTitle": "Import Workflow Config", - "dragOrClick": "Drag JSON file here or click to upload", - "onlyJson": "Only .json files are supported", - "fileParseError": "Invalid file. Required fields: name, code, form_code", - "checking": "Checking...", - "codeConflictTip": "Workflow code already exists. Enter a new code to import", - "codeAvailable": "Workflow code is available", - "newCodePlaceholder": "Enter a new workflow code", - "importSuccess": "Workflow imported successfully", - "importFailed": "Import failed", - "confirmImport": "Confirm Import", - "reselect": "Reselect", - "workflowInfo": "Workflow Info", - "appTip": "Imported workflow belongs to the current app (draft status)", - "bindingTip": "Ensure linked form and document template codes exist and are published in the target environment" - } - }, - "pending": { - "title": "Pending Approval", - "approval": "Approval", - "approve": "Approve", - "reject": "Reject", - "submit": "Submit", - "comment": "Comment", - "commentPlaceholder": "Please enter approval comment", - "result": "Approval Result", - "success": "Process successful", - "taskType": "Task Type", - "timeoutStatus": "Timeout Status", - "arriveTime": "Arrive Time", - "isTimeout": "Timed Out", - "aboutToTimeout": "About to Timeout", - "deadline": "Deadline", - "daysAfter": "{count} days later", - "hoursAfter": "{count} hours later", - "minutesAfter": "{count} mins later", - "view": "View", - "handle": "Handle", - "modify": "Modify", - "cc": "CC", - "copyDetail": "CC Details", - "reviseSubmit": "Modify and Resubmit", - "copyAction": "CC Action", - "handleAction": "Handle Action", - "reviseAction": "Modify Action", - "approvalAction": "Approval Action", - "signComment": "Sign Comment", - "delegateComment": "Delegate Comment", - "rejectReason": "Reject Reason", - "returnReason": "Return Reason", - "transferComment": "Transfer Comment", - "signPlaceholder": "Optional, enter sign description", - "approvalPlaceholder": "Optional, enter approval comment", - "delegatePlaceholder": "Optional, enter delegate description", - "rejectPlaceholder": "Please enter reject reason", - "returnPlaceholder": "Please enter return reason", - "transferPlaceholder": "Optional, enter transfer description", - "fetchDetailFailed": "Failed to load task details", - "markReadSuccess": "Marked as read", - "handleSuccess": "Handle completed", - "actionFailed": "Action failed", - "selectSignUser": "Please select sign user", - "signSuccess": "Sign successful", - "approveSuccess": "Approval passed", - "signature": "Signature", - "signaturePlaceholder": "Please sign here", - "signatureRequired": "This approval node requires a signature, please sign first", - "selectDelegateUser": "Please select delegate user", - "delegateSuccess": "Delegated", - "rejectCommentRequired": "Approval comment is required when rejecting", - "rejectSuccess": "Rejected", - "returnCommentRequired": "Approval comment is required when returning", - "returnSuccess": "Returned", - "selectTransferUser": "Please select transfer user", - "transferSuccess": "Transferred", - "unsupportedAction": "Unsupported action", - "continueHandle": "Continue Handling", - "actionSuccess": "Action successful", - "viewHandled": "View Handled", - "reviseSuccess": "Resubmitted", - "markRead": "Read", - "formContent": "Form Content", - "emptyForm": "No form content", - "processInfo": "Process Info", - "returnTo": "Return To", - "initiator": "Initiator", - "previousNode": "Previous Node", - "transferTo": "Transfer To", - "delegateTo": "Delegate To", - "signType": "Sign Type", - "beforeSign": "Before Sign", - "afterSign": "After Sign", - "parallelSign": "Parallel Sign", - "beforeSignTip": "Signer approves first, then returns to you", - "afterSignTip": "You approve first, then signer approves", - "parallelSignTip": "You and signer approve simultaneously", - "signUser": "Signer", - "selectSignUserPlaceholder": "Please select signer (Multiple choice)", - "handleTip": "Please view the form content and click \"Submit\" to complete handling", - "handleComment": "Handle Comment", - "handleCommentPlaceholder": "Optional, enter handle comment", - "copyTip": "This is a CC task for reference only. Click \"Read\" to confirm.", - "reviseTip": "Please modify the form content and click \"Submit\" to resubmit for approval.", - "modifyComment": "Modify Description", - "modifyCommentPlaceholder": "Optional, enter modify description", - "selectTask": "Please select a task from the left", - "approvalInfo": "Approval Info" - }, - "handled": { - "title": "Handled Tasks" - }, - "initiated": { - "title": "Initiated by Me", - "selectInstance": "Please select a process from the left" - }, - "copy": { - "title": "CC to Me", - "ccNode": "CC Node", - "ccTime": "CC Time" - }, - "start": { - "title": "Start Process", - "select": "Select Process", - "form": "Process Form", - "searchPlaceholder": "Search by name, code or category", - "fetchFailed": "Failed to load process list", - "startSuccess": "Process started successfully, check progress in Approval Center", - "start": "Start", - "submit": "Submit", - "allWorkflows": "All Processes", - "noWorkflows": "No processes available to start", - "workflowTitle": "Process Title", - "titlePlaceholder": "Please enter process title, e.g., John's Leave Application", - "titleHint": "Recommended format: Applicant + Process Type, for easier identification", - "formInfo": "Form Information", - "loadConfigFailed": "Failed to load form configuration", - "titleRequired": "Please enter process title", - "formInvalid": "Please check if the form is filled correctly", - "startFailed": "Failed to start process", - "submitSuccess": "Process Started Successfully", - "submitSuccessHint": "Your application has been submitted, please wait for approval", - "workflowName": "Process Name", - "instanceNo": "Process No.", - "viewDetail": "View Details", - "continueStart": "Start Another", - "backToList": "Back to List", - "approvalPath": "Approval Path", - "showFlow": "Show Flow", - "hideFlow": "Hide Flow", - "loadingUsers": "Loading..." - }, - "validation": { - "title": "Workflow Validation", - "passed": "Passed", - "failed": "Failed", - "warning": "Warning", - "errorCount": "{count} errors", - "warningCount": "{count} warnings", - "validating": "Validating workflow configuration...", - "failedMsg": "Validation failed, please fix and retry", - "passedMsg": "Validation passed, you can save the workflow", - "ready": "Ready to validate", - "checkCount": "{count} checks in total", - "confirmSave": "Confirm Save" - }, - "documents": "Documents", - "viewDocuments": "View Documents", - "noDocuments": "No documents", - "pages": "pages", - "documentTemplates": "Document Templates", - "selectDocumentTemplates": "Select Document Templates", - "generateDocuments": "Generate Documents", - "generateDocumentsSuccess": "Documents generated successfully", - "generateDocumentsFailed": "Failed to generate documents", - "regenerateDocuments": "Regenerate", - "regenerateDocumentsSuccess": "Documents regenerated successfully", - "regenerateDocumentsFailed": "Failed to regenerate documents", - "instanceManager": { - "title": "Workflow Instances", - "detailTitle": "Instance Details", - "instanceNo": "Instance No.", - "application": "Application", - "searchTitle": "Search by title", - "searchInstanceNo": "Search by instance no.", - "searchWorkflowName": "Search by workflow name", - "searchInitiator": "Search by initiator", - "searchStatus": "Select status" - } -} diff --git a/web/apps/web-ele/src/locales/langs/zh-CN/account-settings.json b/web/apps/web-ele/src/locales/langs/zh-CN/account-settings.json deleted file mode 100644 index 398900a..0000000 --- a/web/apps/web-ele/src/locales/langs/zh-CN/account-settings.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "passwordLengthHint": "密码长度需为 6-20 位" -} diff --git a/web/apps/web-ele/src/locales/langs/zh-CN/application.json b/web/apps/web-ele/src/locales/langs/zh-CN/application.json deleted file mode 100644 index cad45bc..0000000 --- a/web/apps/web-ele/src/locales/langs/zh-CN/application.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "title": "应用管理", - "createApp": "创建应用", - "editApp": "编辑应用", - "search": "搜索", - "searchPlaceholder": "搜索应用名称或编码", - "noApps": "暂无应用", - "appName": "应用名称", - "appNamePlaceholder": "请输入应用名称", - "appCode": "应用编码", - "appCodePlaceholder": "请输入应用编码(用于URL路由)", - "appType": "应用类型", - "appTypePlaceholder": "请选择应用类型", - "appDescription": "应用描述", - "appDescriptionPlaceholder": "请输入应用描述", - "appIcon": "应用图标", - "systemMenu": "系统菜单", - "systemMenuPlaceholder": "选择开发模式下显示的系统菜单(留空则显示全部)", - "selectSystemMenu": "选择系统菜单", - "save": "保存", - "create": "创建", - "cancel": "取消", - "develop": "设置开发", - "edit": "编辑", - "publish": "发布", - "enable": "启用", - "disable": "停用", - "delete": "删除", - "publishApp": "发布应用", - "enableApp": "启用应用", - "disableApp": "停用应用", - "confirmPublish": "确认发布", - "confirmEnable": "确认启用", - "confirmDisable": "确认停用", - "publishConfirmMsg": "确定要发布应用「{name}」吗?", - "enableConfirmMsg": "确定要重新启用应用「{name}」吗?", - "publishSuccessMsg": "发布后,用户可以通过以下链接访问该应用:", - "enableSuccessMsg": "启用后,用户可以通过以下链接访问该应用:", - "disableConfirmMsg": "确定要停用应用「{name}」吗?", - "appLink": "应用链接:", - "deleteConfirm": "删除确认", - "deleteConfirmMsg": "确定要删除应用「{name}」吗?", - "confirm": "确定", - "loadFailed": "加载应用列表失败", - "publishSuccess": "发布成功", - "publishFailed": "发布失败", - "enableSuccess": "启用成功", - "enableFailed": "启用失败", - "disableSuccess": "停用成功", - "disableFailed": "停用失败", - "deleteSuccess": "删除成功", - "copySuccess": "链接已复制到剪贴板", - "copyFailed": "复制失败", - "appTypes": { - "mixed": "混合应用", - "form": "表单应用", - "workflow": "流程应用", - "ai": "AI应用", - "dashboard": "数据应用", - "screen": "大屏应用" - }, - "appStatus": { - "draft": "开发中", - "published": "已发布", - "disabled": "已停用" - }, - "validation": { - "nameRequired": "请输入应用名称", - "nameLength": "长度在 2 到 100 个字符", - "codeRequired": "请输入应用编码", - "codePattern": "编码必须以字母开头,只能包含字母、数字、下划线和短横线", - "codeLength": "长度在 2 到 100 个字符", - "typeRequired": "请选择应用类型" - } -} diff --git a/web/apps/web-ele/src/locales/langs/zh-CN/chat.json b/web/apps/web-ele/src/locales/langs/zh-CN/chat.json deleted file mode 100644 index ad2db01..0000000 --- a/web/apps/web-ele/src/locales/langs/zh-CN/chat.json +++ /dev/null @@ -1,91 +0,0 @@ -{ - "title": "聊天", - "search": "搜索联系人或群聊", - "noConversations": "暂无会话", - "selectHint": "选择一个会话开始聊天", - "newChat": "发起聊天", - "newGroup": "创建群聊", - "private": "单聊", - "group": "群聊", - "members": "成员", - "memberCount": "{count} 人", - "owner": "群主", - "admin": "管理员", - "member": "成员", - "groupName": "群聊名称", - "groupNamePlaceholder": "请输入群聊名称", - "selectMembers": "选择成员", - "selectMembersPlaceholder": "请选择群成员", - "createGroupSuccess": "群聊创建成功", - "inputPlaceholder": "输入消息...", - "send": "发送", - "sendImage": "发送图片", - "sendFile": "发送文件", - "recall": "撤回", - "recallSuccess": "消息已撤回", - "recallFailed": "撤回失败", - "recallTimeout": "超过2分钟无法撤回", - "messageRecalled": "消息已撤回", - "typing": "正在输入...", - "yesterday": "昨天", - "pin": "置顶", - "unpin": "取消置顶", - "mute": "免打扰", - "unmute": "取消免打扰", - "conversationInfo": "会话信息", - "addMember": "添加成员", - "addMemberSuccess": "成员添加成功", - "allMembersExist": "所选成员已在群聊中", - "removeMember": "移除成员", - "removeMemberConfirm": "确定移除该成员吗?", - "dissolveGroup": "解散群聊", - "dissolveGroupConfirm": "确定解散该群聊吗?解散后不可恢复。", - "dissolveSuccess": "群聊已解散", - "leaveGroup": "退出群聊", - "noMessages": "暂无消息", - "loadMore": "加载更多", - "loading": "加载中...", - "image": "图片", - "file": "文件", - "replyTo": "回复", - "groupNameRequired": "请输入群聊名称", - "membersRequired": "请至少选择一个成员", - "recentChats": "最近聊天", - "contacts": "联系人", - "searchContacts": "搜索联系人", - "noContacts": "暂无联系人", - "startChat": "发起聊天", - "online": "在线", - "offline": "离线", - "sending": "发送中...", - "contactDetail": "联系人详情", - "contactDept": "部门", - "contactPost": "岗位", - "contactManager": "直属上级", - "contactEmail": "邮箱", - "contactMobile": "手机", - "contactCity": "城市", - "contactType": "用户类型", - "contactOrg": "组织架构", - "contactOrgInfo": "组织信息", - "contactInfo": "联系方式", - "selectContactHint": "选择一个联系人查看详情", - "copy": "复制", - "copySuccess": "已复制到剪贴板", - "replyingTo": "回复 {name}", - "markUnread": "标记未读", - "deleteConversation": "删除记录", - "deleteConversationConfirm": "确定删除该会话记录吗?", - "deleteSuccess": "已删除", - "orgStructure": "组织架构", - "emoji": "表情", - "voiceMessage": "语音消息", - "voiceTooShort": "录音时间太短", - "voiceUploading": "语音发送中...", - "micPermissionDenied": "无法访问麦克风,请检查浏览器权限", - "voice": "语音", - "dropToUpload": "松开发送文件", - "newMessage": "新消息", - "systemNotification": "系统通知", - "viewDetail": "查看详情" -} diff --git a/web/apps/web-ele/src/locales/langs/zh-CN/data-source.json b/web/apps/web-ele/src/locales/langs/zh-CN/data-source.json deleted file mode 100644 index dd425ad..0000000 --- a/web/apps/web-ele/src/locales/langs/zh-CN/data-source.json +++ /dev/null @@ -1,283 +0,0 @@ -{ - "basicInfo": "基础信息", - "codePlaceholder": "请输入唯一编码,如 user_list", - "dataSourceConfig": "数据源配置", - "dataSourceName": "数据源名称", - "inputDataSourceName": "请输入数据源名称", - "dataSourceType": "数据源类型", - "selectDataSourceType": "请选择数据源类型", - "dataSourceDescription": "数据源描述", - "inputDataSourceDescription": "请输入数据源描述", - "testConnection": "测试连接", - "testConnectionSuccess": "连接成功", - "testConnectionFailed": "连接失败", - "testing": "测试中...", - "save": "保存", - "create": "创建", - "query": "查询", - "sqlEditor": "SQL编辑器", - "executeSql": "执行SQL", - "executing": "执行中...", - "queryResult": "查询结果", - "noData": "暂无数据", - "error": "错误", - "confirm": "确定", - "close": "关闭", - "dbSchema": "数据库", - "tables": "表", - "columns": "列", - "dataType": "数据类型", - "nullable": "可空", - "primaryKey": "主键", - "loading": "加载中...", - "paramType": "参数类型", - "resultType": "结果类型", - "httpMethod": "HTTP方法", - "requestUrl": "请求URL", - "inputRequestUrl": "请输入请求URL", - "requestHeaders": "请求头", - "requestBody": "请求体", - "responseMapping": "响应映射", - "addParam": "添加参数", - "paramName": "参数名", - "paramValue": "参数值", - "paramLabel": "显示名", - "deleteParam": "删除参数", - "total": "总数", - "limited": "限制", - "dataSourceList": "数据源列表", - "createDataSource": "创建数据源", - "editDataSource": "编辑数据源", - "deleteDataSourceConfirm": "确定要删除此数据源吗?", - "deleteDataSourceSuccess": "删除成功", - "createDataSourceSuccess": "创建成功", - "updateDataSourceSuccess": "更新成功", - "loadDataSourceFailed": "加载数据源失败", - "testDataSourceFailed": "测试数据源失败", - "previousStep": "上一步", - "nextStep": "下一步", - "basicInfoConfig": "基础信息配置", - "status": "状态", - "enable": "启用", - "disable": "禁用", - "selectDbSchema": "请在左侧选择数据库", - "tip": "提示", - "useParamPlaceholder": "使用", - "onlySelectQuery": "作为参数占位符,只允许 SELECT 查询", - "paramDefinition": "参数定义", - "defineDataSourceParams": "定义数据源可接收的参数", - "required": "必填", - "action": "操作", - "resultProcessing": "结果处理", - "resultTypeListDesc": "直接返回数组数据,适用于表格、下拉选择等组件。", - "resultTypeTreeDesc": "将平铺列表转换为树形结构,适用于树形选择、级联选择等组件。", - "resultTypeObjectDesc": "返回第一条记录作为对象,适用于详情展示、表单回填等场景。", - "resultTypeValueDesc": "返回第一条记录的第一个字段值,适用于统计数字、标题等场景。", - "resultTypeChartAxisDesc": "转换为 xAxisData, seriesData 格式,适用于折线图、柱状图、面积图。", - "resultTypeChartPieDesc": "转换为 seriesData: [name, value] 格式,适用于饼图、漏斗图。", - "resultTypeChartGaugeDesc": "转换为 value, name, max 格式,适用于仪表盘、进度图。", - "resultTypeChartRadarDesc": "转换为 indicator, seriesData 格式,适用于雷达图、多维对比。", - "resultTypeChartScatterDesc": "转换为 seriesData: [x, y] 格式,适用于散点图、气泡图。", - "resultTypeChartHeatmapDesc": "转换为 xAxisData, yAxisData, seriesData 格式,适用于热力图。", - "treeConversionConfig": "树形转换配置", - "refresh": "刷新", - "fieldPreview": "字段预览", - "clickTableToView": "点击表名查看", - "selectTable": "请选择一个表", - "noFieldInfo": "暂无字段信息", - "clickFieldToInsert": "点击字段名插入到编辑器", - "testDataSource": "测试数据源", - "dataSourceInfo": "数据源信息", - "code": "编码", - "type": "类型", - "name": "名称", - "inputCode": "请输入编码", - "all": "全部", - "staticData": "静态数据", - "staticLabel": "静态", - "batchDelete": "批量删除", - "edit": "编辑", - "delete": "删除", - "more": "更多", - "copy": "复制", - "deleteConfirmMessage": "确定要删除数据源 \"{name}\" 吗?", - "deleteConfirmTitle": "删除确认", - "deleteSuccess": "已删除数据源: {name}", - "batchDeleteConfirmMessage": "确定要删除选中的 {count} 个数据源吗?", - "batchDeleteConfirmTitle": "批量删除确认", - "batchDeleteSuccess": "已删除 {count} 个数据源", - "inputNewCode": "请输入新数据源编码", - "copyDataSource": "复制数据源", - "codeFormatError": "编码必须以字母开头,只能包含字母、数字和下划线", - "copySuccess": "复制成功", - "importExport": { - "export": "导出", - "import": "导入配置", - "exportSuccess": "数据源配置已导出", - "exportFailed": "导出失败", - "importTitle": "导入数据源配置", - "dragOrClick": "拖拽 JSON 文件到此处或点击上传", - "onlyJson": "仅支持 .json 格式文件", - "fileParseError": "文件解析失败,请确认文件格式正确", - "checking": "正在检查...", - "codeConflictTip": "数据源编码已存在,请修改编码后再导入", - "codeAvailable": "数据源编码可用,可以导入", - "newCodePlaceholder": "请输入新的数据源编码", - "importSuccess": "数据源配置导入成功", - "importFailed": "导入失败", - "confirmImport": "确认导入", - "reselect": "重新选择", - "dataSourceInfo": "数据源信息", - "appTip": "导入的数据源将归属到当前应用", - "dbConnectionTip": "SQL 类型数据源的 db_connection 为连接名称,请确认目标环境已配置同名数据库连接" - }, - "saveSuccess": "保存成功", - "createTime": "创建时间", - "cancel": "取消", - "apiInterface": "API接口", - "sqlQuery": "SQL查询", - "resultTypeList": "列表", - "resultTypeTree": "树形", - "resultTypeSingleObject": "单对象", - "resultTypeSingleValue": "单值", - "resultTypeAxisChart": "轴向图表", - "resultTypePieChart": "饼图数据", - "resultTypeGauge": "仪表盘", - "resultTypeRadarChart": "雷达图", - "resultTypeScatterChart": "散点图", - "resultTypeHeatmap": "热力图", - "paramTypeString": "字符串", - "paramTypeInteger": "整数", - "paramTypeFloat": "浮点数", - "paramTypeBoolean": "布尔值", - "paramTypeDate": "日期", - "paramTypeDatetime": "日期时间", - "axisChartConfig": "轴向图表配置", - "xAxisField": "X轴字段", - "seriesField": "系列字段", - "seriesName": "系列名称", - "pieChartConfig": "饼图配置", - "nameField": "名称字段", - "valueField": "数值字段", - "gaugeChartConfig": "仪表盘配置", - "maxField": "最大值字段", - "radarChartConfig": "雷达图配置", - "indicatorNameField": "指标名称字段", - "scatterChartConfig": "散点图配置", - "xCoordinateField": "X坐标字段", - "yCoordinateField": "Y坐标字段", - "sizeField": "大小字段", - "heatmapChartConfig": "热力图配置", - "fieldMapping": "字段映射", - "addMapping": "添加映射", - "originalField": "原字段", - "mappedField": "映射字段", - "deleteMapping": "删除", - "multipleFieldsComma": "多个字段用逗号分隔,如:{example}", - "multipleNamesComma": "多个名称用逗号分隔,如:{example}", - "dataFieldsForChart": "数据中用于绘制图表的数值字段", - "optionalLegendNames": "可选,图例显示的名称,留空则使用字段名", - "oneFieldPerSeries": "每个字段对应一个系列", - "optionalBubbleChart": "如:size(可选,气泡图)", - "optionalName": "如:name(可选)", - "optionalMax": "如:max(可选)", - "fieldNameMapping": "将原字段名映射为新字段名,如 id -> value", - "cacheConfig": "缓存配置", - "enableCache": "启用缓存", - "cacheTime": "缓存时间", - "cacheTimeUnit": "秒(0表示不缓存)", - "test": "测试", - "testParams": "测试参数", - "executeTest": "执行测试", - "testResult": "测试结果", - "success": "成功", - "failed": "失败", - "returnedData": "返回 {count} 条数据", - "reachedLimit": "已达上限 {limit} 条", - "aiAssistant": "AI 助手", - "aiSqlAssistant": "AI SQL 助手", - "aiSqlAssistantTip": "AI 将根据你的需求和数据库结构自动生成 SQL 查询语句", - "sqlWritingTip": "SQL 在「数据库连接」配置的默认库上执行。PostgreSQL/SQL Server/Oracle 请写 schema.table;MySQL 写 `库名`.`表名` 或表名;参数用 :name。第三方连接请在左侧树或 AI 选表后确认 db_connection 为连接 code。", - "describeYourQuery": "描述你的查询需求", - "queryPlaceholder": "例如:查询最近30天内,每天的新增用户数量和活跃用户数量", - "quickExamples": "快速示例", - "selectDataTable": "选择数据表", - "modifySelection": "修改选择", - "selectedTables": "已选 {count} 张表", - "clear": "清空", - "pleaseSelectTableFirst": "请先选择数据表", - "tableRelationsCount": "已配置 {count} 个表关系", - "includeTableRelations": "包含表关系信息(提高多表 JOIN 查询准确度)", - "aiModel": "AI 模型", - "selectModel": "选择模型", - "generating": "生成中...", - "generateSql": "生成 SQL", - "generationThought": "生成思路", - "generatedSql": "生成的 SQL", - "paramSuggestions": "参数建议", - "default": "默认", - "insertToEditor": "插入到编辑器", - "sqlGenerateSuccess": "SQL 生成成功", - "sqlGenerateFailed": "SQL 生成失败", - "sqlInserted": "已插入到编辑器", - "copied": "已复制到剪贴板", - "pleaseInputQuestion": "请输入查询需求", - "pleaseSelectModel": "请选择 AI 模型", - "pleaseSelectTable": "请先选择数据表", - "aiSqlInsertSuccess": "SQL 已插入,参数已自动配置", - "manualMode": "手动", - "aiMode": "AI", - "aiConfig": "AI 配置", - "aiSqlPlaceholder": "AI 生成的 SQL 将显示在此处...", - "querying": "正在查询...", - "dataView": "数据", - "chartView": "图表", - "clickTestToExecute": "点击上方按钮执行测试", - "rawData": "原始数据", - "selectChartTypeToPreview": "请在结果处理中选择图表类型以预览", - "apiConfig": "API 配置", - "urlPlaceholder": "https://api.example.com/data", - "apiTabBasic": "基本", - "apiTabAuth": "认证", - "apiTabQueryParams": "Query参数", - "apiTabBody": "请求体", - "apiTabAdvanced": "高级", - "timeout": "超时时间", - "second": "秒", - "dataPath": "数据路径", - "dataPathPlaceholder": "如 data.list", - "description": "描述", - "authType": "认证类型", - "authNone": "无认证", - "bearerTokenPlaceholder": "输入 Token,支持 {param} 占位符", - "username": "用户名", - "usernamePlaceholder": "请输入用户名", - "password": "密码", - "passwordPlaceholder": "请输入密码", - "keyPosition": "Key 位置", - "keyName": "Key 名称", - "keyValue": "Key 值", - "bodyType": "类型", - "bodyTypeNone": "无", - "contentType": "Content-Type", - "retryCount": "重试次数", - "retryInterval": "重试间隔", - "proxy": "代理地址", - "followRedirects": "跟随重定向", - "verifySSL": "验证SSL", - "successCondition": "成功条件", - "successStatusCodes": "状态码", - "successStatusCodesPlaceholder": "如 200, 201(留空则检查 2xx)", - "successFieldPath": "字段路径", - "successFieldPathPlaceholder": "如 code", - "successFieldValue": "期望值", - "apiTabHeaders": "请求头", - "viewRequest": "查看请求", - "queryParamsHint": "参数会自动同步到 URL", - "headersHint": "自定义 HTTP 请求头", - "addHeader": "添加请求头", - "headerName": "名称", - "headerValue": "值", - "noQueryParams": "暂无 Query 参数", - "noHeaders": "暂无请求头" -} diff --git a/web/apps/web-ele/src/locales/langs/zh-CN/database-manager.json b/web/apps/web-ele/src/locales/langs/zh-CN/database-manager.json deleted file mode 100644 index 319573b..0000000 --- a/web/apps/web-ele/src/locales/langs/zh-CN/database-manager.json +++ /dev/null @@ -1,396 +0,0 @@ -{ - "connectionInfo": "连接信息", - "testConnection": "测试连接", - "connectionName": "连接名称", - "databaseType": "数据库类型", - "connectionIdentifier": "连接标识", - "connectionStatus": "连接状态", - "connectionSuccessful": "✓ 连接成功", - "connectionFailed": "✗ 连接失败", - "notTested": "未测试", - "testResult": "测试结果:", - "testConnectionSuccess": "连接测试成功", - "testConnectionFailed": "连接测试失败", - "connectionError": "连接失败", - "usageInstructions": "使用说明", - "expandConnection": "· 展开连接 - 查看该连接下的所有数据库", - "selectDatabase": "· 选择数据库 - 查看数据库详细信息", - "selectTable": "· 选择表 - 查看表结构、查询数据、执行SQL", - "searchFunction": "· 搜索功能 - 在左侧树中快速查找数据库或表", - "testDatabaseConnection": "测试数据库连接", - "constraintList": "约束列表", - "addConstraint": "添加约束", - "constraintName": "约束名", - "constraintNameTip": "给约束起一个唯一名称,便于识别和管理", - "constraintType": "约束类型", - "constraintTypeTip": "主键:唯一标识记录;外键:关联其他表;唯一:字段值不能重复;检查:自定义校验规则", - "field": "本表字段", - "constraintFieldTip": "选择当前表中参与此约束的字段", - "definition": "检查规则", - "constraintDefinitionTip": "仅检查约束需要填写,例如 age > 0", - "referencedTable": "关联表", - "referencedTableTip": "选择要关联的目标表,通常是被引用的主表", - "referencedTablePlaceholder": "请输入引用表名", - "selectReferencedTable": "请选择关联表", - "onDelete": "删除时", - "onDeleteTip": "当关联表中的记录被删除时,本表如何处理", - "onUpdate": "更新时", - "onUpdateTip": "当关联表中的关联字段被修改时,本表如何处理", - "fkActionDefault": "默认", - "fkActionDefaultLabel": "默认规则", - "fkActionDefaultTip": "不额外指定,使用数据库默认行为", - "fkActionNoActionLabel": "无动作", - "fkActionNoActionTip": "有关联数据时不允许删除或更新", - "fkActionRestrictLabel": "限制操作", - "fkActionRestrictTip": "有关联数据时立即阻止删除或更新", - "fkActionCascadeLabel": "级联同步", - "fkActionCascadeTip": "同步删除或更新本表中的关联数据", - "fkActionSetNullLabel": "置空", - "fkActionSetNullTip": "将本表外键字段设为 NULL", - "fkActionSetDefaultLabel": "设默认值", - "fkActionSetDefaultTip": "将本表外键字段设为默认值", - "referencedColumns": "关联字段", - "referencedColumnsTip": "选择关联表中对应的字段,通常为主键 id", - "referencedColumnsPlaceholder": "请选择关联字段", - "constraintNameRequired": "请填写约束名", - "constraintColumnsRequired": "请选择约束字段", - "constraintCheckDefinitionRequired": "请填写 CHECK 约束定义", - "constraintReferencedTableRequired": "请填写外键引用表", - "constraintReferencedColumnsRequired": "请填写外键引用字段", - "constraintReferencedColumnsMismatch": "外键字段数量需与引用字段数量一致", - "constraintValidationFailed": "约束配置校验失败", - "selectField": "选择字段", - "constraintDefinition": "约束定义 (如: age > 0)", - "constraintDeleted": "约束已删除", - "noConstraints": "暂无约束,点击\"添加约束\"开始创建", - "foreignKey": "FOREIGN KEY", - "foreignKeyLabel": "外键", - "check": "CHECK", - "checkLabel": "检查规则", - "database": "数据库", - "schema": "Schema", - "tableName": "表名", - "enterTableName": "请输入表名", - "tableComment": "表注释", - "enterTableComment": "请输入表注释(可选)", - "previewSQL": "预览SQL", - "createTable": "创建表", - "createTableSQLPreview": "CREATE TABLE SQL预览", - "executeCreate": "执行创建", - "fillTableNameAndFields": "请填写表名并至少添加一个字段", - "createTableSuccess": "表创建成功", - "createTableFailed": "创建表失败", - "primaryKeyUUID": "主键ID (UUID)", - "databaseInfo": "数据库信息", - "databaseName": "数据库名称", - "owner": "所有者", - "encoding": "字符编码", - "collation": "排序规则", - "tableCount": "表数量", - "databaseSize": "数据库大小", - "description": "说明", - "noDatabaseInfo": "未找到数据库信息", - "viewTableList": "查看表列表", - "expandLeftTreeNode": "展开左侧树节点查看该数据库下的所有表", - "searchTable": "搜索表", - "useSearchBox": "使用左侧搜索框快速查找表名", - "switchToSqlTab": "选择任意表后切换到\"SQL执行\"标签页", - "statistics": "统计信息", - "loadDatabaseInfoFailed": "加载数据库信息失败", - "tables": "表", - "loading": "加载中...", - "loadDatabaseConfigsFailed": "加载数据库配置失败", - "loadDatabaseListFailed": "加载数据库列表失败", - "loadSchemaListFailed": "加载Schema列表失败", - "loadTableListFailed": "加载表列表失败", - "loadViewListFailed": "加载视图列表失败", - "cannotFindNode": "无法找到节点", - "refreshSuccess": "刷新成功", - "refreshFailed": "刷新失败", - "expandNodeToViewLatestData": "刷新成功,展开节点查看最新数据", - "copiedToClipboard": "已复制到剪贴板", - "enterSchemaName": "请输入Schema名称", - "createSchema": "创建Schema", - "schemaNamePattern": "Schema名称只能包含字母、数字和下划线,且必须以字母或下划线开头", - "schemaCreatedSuccess": "Schema \"{schemaName}\" 创建成功", - "createSchemaFailed": "创建Schema失败", - "refreshConnection": "刷新连接", - "viewInfo": "查看信息", - "copyConnectionName": "复制连接名", - "refreshDatabase": "刷新数据库", - "copyDatabaseName": "复制数据库名", - "refreshSchema": "刷新Schema", - "copySchemaName": "复制Schema名", - "refreshTableList": "刷新表列表", - "createNewTable": "创建新表", - "viewStatistics": "查看统计", - "refreshViewList": "刷新视图列表", - "createNewView": "创建新视图", - "refreshAllMaterializedViews": "刷新所有物化视图", - "viewTableStructure": "查看表结构", - "queryData": "查询数据", - "executeSql": "执行SQL", - "copyTableName": "复制表名", - "refresh": "刷新", - "viewViewStructure": "查看视图结构", - "viewDefinitionSQL": "查看定义SQL", - "refreshView": "刷新视图", - "copyViewName": "复制视图名", - "confirmTruncateTable": "确定要清空表 \"{tableName}\" 的所有数据吗?此操作不可恢复!", - "deleteTable": "删除表", - "confirmDeleteTable": "确定要删除表 \"{tableName}\" 吗?此操作不可恢复!", - "deleteTableSuccess": "表删除成功", - "deleteTableFailed": "删除表失败", - "warning": "警告", - "confirm": "确定", - "cancel": "取消", - "confirmRefreshMaterializedView": "确定要刷新物化视图 \"{viewName}\" 吗?", - "onlyMaterializedViewNeedsRefresh": "只有物化视图才需要手动刷新", - "confirmExportAllTables": "确定要导出当前Schema/Database下的所有表吗?", - "confirmExportAllViews": "确定要导出当前Schema/Database下的所有视图吗?", - "confirmRefreshAllMaterializedViews": "确定要刷新当前Schema/Database下的所有物化视图吗?这可能需要一些时间。", - "exportFeatureDevelopment": "导出功能开发中...", - "importFeatureDevelopment": "导入功能开发中...", - "editFeatureDevelopment": "编辑功能开发中...", - "deleteFeatureDevelopment": "删除功能开发中...", - "truncateTableFeatureDevelopment": "清空表功能开发中...", - "createViewFeatureDevelopment": "创建视图功能开发中...", - "exportAllTablesFeatureDevelopment": "导出所有表功能开发中...", - "exportAllViewsFeatureDevelopment": "导出所有视图功能开发中...", - "refreshAllMaterializedViewsFeatureDevelopment": "刷新所有物化视图功能开发中...", - "selectItemFromLeft": "请从左侧选择一个项目", - "tableStructure": "表结构", - "dataQuery": "数据查询", - "sqlExecution": "SQL执行", - "objectEditor": "对象编辑", - "viewStructure": "视图结构", - "fieldList": "字段列表", - "fields": "字段", - "indexes": "索引", - "constraints": "约束", - "columns": "列", - "addField": "添加字段", - "serialNumber": "序号", - "fieldName": "字段名", - "dataType": "数据类型", - "lengthPrecision": "长度/精度", - "decimalPlaces": "小数位", - "nullable": "可空", - "defaultValue": "默认值", - "primaryKey": "主键", - "unique": "唯一", - "comment": "注释", - "operation": "操作", - "fieldDeleted": "字段已删除", - "noFields": "暂无字段,点击\"添加字段\"开始创建", - "type": "类型", - "fieldNamePlaceholder": "如: product_name", - "defaultValuePlaceholder": "默认值", - "fieldCommentPlaceholder": "字段注释", - "indexList": "索引列表", - "addIndex": "添加索引", - "indexName": "索引名", - "indexType": "索引类型", - "selectFields": "选择字段", - "indexDeleted": "索引已删除", - "noIndexes": "暂无索引,点击\"添加索引\"开始创建", - "indexNamePlaceholder": "索引名", - "typePlaceholder": "类型", - "schemaInfo": "Schema 信息", - "copyName": "复制名称", - "schemaName": "Schema名称", - "objectStatistics": "对象统计", - "databaseObjects": "数据库对象", - "noTablesInSchema": "该Schema下暂无表", - "noViewsInSchema": "该Schema下暂无视图", - "materializedView": "物化视图", - "updatable": "可更新", - "readOnly": "只读", - "loadSchemaInfoFailed": "加载Schema信息失败", - "sqlEditor": "SQL编辑器", - "loadExample": "加载示例", - "clearSQL": "清空", - "execute": "执行", - "executionResult": "执行结果", - "executionTime": "执行时间", - "affectedRows": "影响行数", - "returned": "返回", - "records": "行记录", - "querySuccessNoData": "查询成功,但没有返回数据", - "enterSQL": "在上方输入SQL语句并点击\"执行\"按钮", - "sqlWarning": "请谨慎执行UPDATE、DELETE等修改数据的语句", - "enterSQLStatement": "输入SQL语句...", - "sqlPlaceholder": "输入SQL语句...\\n\\n示例:\\nSELECT * FROM users WHERE id > 100;\\nUPDATE users SET status = 'active' WHERE id = 1;\\nDELETE FROM users WHERE id = 999;", - "invalidDatabaseConnection": "无效的数据库连接", - "executeSQLFailed": "SQL执行失败", - "pleaseEnterSQL": "请输入SQL语句", - "whereCondition": "WHERE 条件 (例: id > 100 AND status = 'active')", - "orderBy": "ORDER BY (例: id DESC)", - "query": "查询", - "noData": "暂无数据", - "totalRecords": "共 {count} 条记录", - "designTable": "设计表 - {tableName}", - "designTableAction": "设计表", - "databaseLabel": "数据库", - "schemaLabel": "Schema", - "tableNameLabel": "表名", - "tableNamePlaceholder": "表名", - "commentLabel": "注释", - "tableCommentPlaceholder": "表注释", - "fieldManagement": "字段管理", - "indexManagement": "索引管理", - "constraintManagement": "约束管理", - "unsavedChanges": "有未保存的修改", - "noChanges": "无修改", - "cancel": "取消", - "reset": "重置", - "previewSQL": "预览SQL", - "saveChanges": "保存更改", - "sqlPreview": "SQL预览", - "close": "关闭", - "executeSql": "执行SQL", - "confirmSave": "确定要保存这些修改吗?", - "confirmSaveTitle": "确认保存", - "confirmClose": "有未保存的修改,确定要关闭吗?", - "confirmCloseTitle": "提示", - "confirm": "确定", - "noChangesDetected": "没有检测到任何修改", - "noSQLGenerated": "没有生成任何SQL语句", - "saveSuccess": "保存成功", - "saveFailed": "保存失败", - "loadTableStructureFailed": "加载表结构失败", - "loadTableDataFailed": "加载表数据失败", - "tableInfo": "表信息", - "tableType": "类型", - "rowCount": "行数", - "tableSize": "大小", - "ddlStatement": "DDL语句", - "copy": "复制", - "basicInfo": "基本信息", - "confirmReset": "确定要重置所有修改吗?", - "confirmResetTitle": "提示", - "resetSuccess": "已重置", - "missingDatabaseConfig": "缺少数据库配置信息", - "loadDDLFailed": "加载DDL语句失败", - "loadDDLFailedMsg": "-- 加载DDL失败,请检查数据库连接", - "viewInfo": "视图信息", - "viewName": "视图名称", - "viewType": "视图类型", - "materializedView": "物化视图", - "normalView": "普通视图", - "isUpdatable": "是否可更新", - "yes": "是", - "no": "否", - "checkOption": "CHECK OPTION", - "columnInfo": "列信息", - "columnName": "列名", - "dataType": "数据类型", - "nullable": "可空", - "position": "位置", - "dependentTables": "依赖的表", - "noDependentTables": "无依赖表", - "viewDefinition": "视图定义", - "noDefinition": "暂无定义", - "description": "说明", - "viewExplanation": "视图(View)是基于一个或多个表的虚拟表,不存储实际数据。", - "viewBenefit1": "视图可以简化复杂查询,提高数据安全性", - "viewBenefit2": "可更新视图允许通过视图修改基础表数据", - "viewBenefit3": "视图依赖的表被修改时,视图结构会自动更新", - "viewBenefit4": "删除视图不会影响基础表的数据", - "searchPlaceholder": "搜索数据库、表、视图...", - "loadViewStructureFailed": "加载视图结构失败", - "noData": "暂无数据", - "noColumnInfo": "暂无列信息", - "dataTypes": { - "varchar": "文本", - "char": "定长文本", - "text": "长文本", - "integer": "整数", - "int": "整数", - "bigint": "长整数", - "smallint": "短整数", - "numeric": "精确小数", - "decimal": "精确小数", - "doublePrecision": "小数", - "double": "小数", - "float": "小数", - "json": "JSON", - "date": "日期", - "time": "时间", - "datetime": "日期时间", - "timestamp": "时间戳", - "datetime2": "时间戳", - "boolean": "布尔", - "bit": "布尔", - "nvarchar": "Unicode文本", - "nvarcharMax": "JSON" - }, - "fieldNameRequired": "字段名不能为空", - "fieldNameInvalidFormat": "字段名只能包含字母、数字和下划线,且必须以字母或下划线开头", - "fieldNameDuplicate": "字段名 \"{name}\" 重复", - "tablesFolder": "表", - "viewsFolder": "视图", - "refreshSuccess": "刷新成功", - "refreshFailed": "刷新失败", - "executeShortcutHint": "Ctrl/Cmd + Enter 执行", - "createDatabase": "创建数据库", - "dropDatabase": "删除数据库", - "dropSchema": "删除 Schema", - "renameSchema": "重命名 Schema", - "renameDatabase": "重命名数据库", - "editTableStructure": "编辑表结构", - "enterNameToConfirm": "此操作不可恢复。请在下方输入对象名称以确认:", - "nameMismatch": "输入的名称与对象名称不一致", - "systemConnectionForbidden": "系统连接不允许执行写操作", - "systemDatabase": "系统数据库", - "systemDatabaseForbidden": "系统数据库不允许此操作", - "databaseCreated": "数据库 \"{name}\" 创建成功", - "databaseDropped": "数据库 \"{name}\" 删除成功", - "schemaDropped": "Schema \"{name}\" 删除成功", - "schemaRenamed": "Schema 已重命名为 \"{name}\"", - "createDatabaseFailed": "创建数据库失败", - "dropDatabaseFailed": "删除数据库失败", - "dropSchemaFailed": "删除 Schema 失败", - "renameSchemaFailed": "重命名 Schema 失败", - "renameDatabaseFailed": "重命名数据库失败", - "databaseRenamed": "数据库已重命名为 \"{name}\"", - "enterNewDatabaseName": "请输入新的数据库名称", - "databaseNameRequired": "请输入数据库名称", - "databaseNamePattern": "数据库名只能包含字母、数字和下划线,且必须以字母或下划线开头", - "enterDatabaseName": "请输入数据库名称", - "databaseName": "数据库名称", - "encoding": "编码", - "charset": "字符集", - "collation": "排序规则", - "enterNewSchemaName": "请输入新的 Schema 名称", - "objectTypeDatabase": "数据库", - "objectTypeSchema": "Schema", - "objectTypeTable": "表", - "dangerousActionDefaultWarning": "确定要删除{objectType} \"{objectName}\" 吗?此操作不可恢复。", - "typeObjectNamePlaceholder": "请输入 \"{objectName}\" 以确认", - "objectOverview": "概览", - "objectName": "对象名称", - "objectTypeConnection": "连接", - "objectTypeView": "视图", - "databaseCount": "数据库数量", - "databasesUnderConnection": "该连接下的数据库", - "connectionHint": "提示", - "connectionBrowseHint": "在左侧树中展开连接,浏览数据库与对象", - "schemaList": "Schema 列表", - "mysqlSchemaHint": "MySQL 不使用 Schema 层级,数据库即为顶层容器。请展开左侧树查看表与视图。", - "schemaDescriptionHint": "Schema 是数据库对象的逻辑容器,用于组织表、视图等对象。", - "searchObjectPlaceholder": "搜索对象名称...", - "loadObjectListFailed": "加载对象列表失败", - "size": "大小", - "indexTypes": { - "btree": "B-Tree", - "hash": "Hash", - "gin": "GIN", - "gist": "GiST", - "brin": "BRIN", - "nonclustered": "非聚集", - "clustered": "聚集", - "normal": "普通", - "bitmap": "位图" - } -} diff --git a/web/apps/web-ele/src/locales/langs/zh-CN/dict.json b/web/apps/web-ele/src/locales/langs/zh-CN/dict.json deleted file mode 100644 index f450b14..0000000 --- a/web/apps/web-ele/src/locales/langs/zh-CN/dict.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "字典", - "title": "字典管理", - "dictName": "字典名称", - "dictCode": "字典编码", - "remark": "备注", - "remarkPlaceholder": "请输入备注", - "status": "状态", - "operation": "操作", - "edit": "编辑", - "codeFormatError": "字典编码只能包含字母、数字和下划线", - "selectDictFirst": "请先选择字典", - "noData": "暂无数据", - "itemName": "字典项", - "itemLabel": "标签", - "itemValue": "值", - "itemIcon": "图标", - "sort": "排序", - "isGlobal": "全局可见", - "globalTag": "全局", - "mainApp": "主应用" -} diff --git a/web/apps/web-ele/src/locales/langs/zh-CN/form-manager.json b/web/apps/web-ele/src/locales/langs/zh-CN/form-manager.json deleted file mode 100644 index 17bfb7f..0000000 --- a/web/apps/web-ele/src/locales/langs/zh-CN/form-manager.json +++ /dev/null @@ -1,810 +0,0 @@ -{ - "form": "表单", - "name": "表单名称", - "code": "表单编码", - "application": "所属应用", - "type": "表单类型", - "status": "状态", - "description": "描述", - "createTime": "创建时间", - "updateTime": "更新时间", - "actions": "操作", - "showInMobile": "移动端显示", - "showInMobileTip": "开启后,该表单将在移动端工作台中显示", - "icon": "表单图标", - "iconBgColor": "图标背景色", - "iconPreview": "预览", - "iconBgColorPlaceholder": "输入自定义颜色或渐变色", - "iconPlaceholder": "请选择表单图标", - "placeholder": { - "name": "请输入表单名称", - "code": "请输入表单编码", - "type": "请选择表单类型", - "status": "请选择状态" - }, - "typeMap": { - "all": "全部", - "normal": "普通表单", - "workflow": "流程表单" - }, - "statusMap": { - "all": "全部", - "published": "已发布", - "draft": "草稿" - }, - "create": "新建表单", - "batchDelete": "批量删除", - "batchDeleteWithCount": "批量删除 ({count})", - "deleteConfirm": "确定要删除表单 \"{name}\" 吗?", - "deleteConfirmTitle": "删除确认", - "deleteConfirmMessage": "删除表单后将执行以下操作:

1. 删除表单对应的菜单
2. 删除表单的API权限配置
3. 删除表单的字段权限配置
4. 删除表单的数据权限配置
5. 永久删除表单元数据及设计配置

确定要删除表单 \"{name}\" 吗?", - "deleteSuccess": "已删除表单: {name}", - "batchDeleteConfirm": "确定要删除选中的 {count} 个表单吗?", - "batchDeleteConfirmTitle": "批量删除确认", - "batchDeleteSuccess": "已删除 {count} 个表单", - "unpublishSuccess": "表单 \"{name}\" 已取消发布", - "unpublishFailed": "取消发布失败", - "unpublishConfirmTitle": "取消发布确认", - "unpublishConfirmMessage": "取消发布后将执行以下操作:

1. 删除表单对应的菜单
2. 删除表单的API权限配置
3. 删除表单的字段权限配置
4. 删除表单的数据权限配置

确定要取消发布吗?", - "copyCodePlaceholder": "请输入新表单编码", - "copyTitle": "复制表单", - "copyCodeRule": "编码只能包含字母、数字、下划线和横线", - "codeFormatError": "编码必须以字母开头,只能包含字母、数字和下划线", - "copySuccess": "复制成功", - "preview": "预览", - "publish": "发布", - "unpublish": "取消发布", - "copy": "复制", - "visit": "访问表单", - "setAsHome": "设为首页", - "setAsHomeTitle": "设为默认首页", - "setAsHomeConfirm": "确定要将表单「{name}」设为默认首页吗?", - "setAsHomePath": "首页路径", - "setAsHomeTip": "设置后,用户登录系统将默认跳转到此表单页面。", - "setAsHomeAppTip": "此表单属于应用「{app}」,将更新该应用的首页配置。", - "setHomeSuccess": "已设为默认首页", - "setHomeFailed": "设置首页失败", - "more": "更多", - "design": "设计", - "editInfo": "编辑信息", - "saveSuccess": "表单保存成功", - "previewDialog": { - "title": "表单预览", - "loadFailed": "加载表单配置失败", - "verifySuccess": "验证通过", - "realtimeData": "实时数据 (v-model):", - "noConfig": "暂无表单配置", - "close": "关闭", - "verifySubmit": "验证提交", - "verifyFailed": "表单验证失败" - }, - "editor": { - "title": "在线开发", - "create": "创建表单", - "edit": "编辑表单", - "steps": { - "basic": "基础信息", - "database": "数据库设计", - "form": "表单设计", - "list": "列表设计", - "publish": "发布表单" - }, - "placeholder": { - "remark": "请输入表单说明" - }, - "validate": { - "title": "表单校验未通过", - "warningTitle": "表单校验警告", - "repairTip": "请修复以下问题后再继续", - "warningTip": "以下问题不会阻止保存,但建议检查确认", - "continueAnyway": "继续操作", - "basic": "基础信息验证:名称、编码必填", - "database": "数据库配置验证:必须配置主表", - "incomplete": "表单配置不完整", - "perfectDesign": "请完善表单设计" - }, - "loadFailed": "加载数据失败", - "createSuccess": "创建成功", - "save": "保存", - "saveSuccess": "保存成功", - "autoSave": { - "saving": "保存中...", - "saved": "已保存", - "unsaved": "未保存" - } - }, - "dataSource": { - "database": "数据库", - "refresh": "刷新", - "refreshSuccess": "刷新成功", - "loading": "加载中...", - "mainTable": "主表", - "subTable": "从表", - "added": "已添加", - "fieldPreview": "字段预览", - "noFields": "暂无字段信息", - "relationConfig": "表关联配置", - "selectMainTip": "请先选择主表", - "selectMainDesc": "在左侧数据库树中展开到表节点,点击【主表】按钮设置主表。", - "addDatabase": "新增数据库", - "refreshConn": "刷新连接", - "copyConnName": "复制连接名", - "addSchema": "新增Schema", - "addTable": "新增表", - "editDatabase": "编辑数据库", - "refreshDatabase": "刷新数据库", - "copyDatabaseName": "复制数据库名", - "editSchema": "编辑Schema", - "refreshSchema": "刷新Schema", - "copySchemaName": "复制Schema名", - "viewFields": "查看字段", - "designTable": "设计表", - "setMainTable": "设为主表", - "addSubTable": "添加为从表", - "copyTableName": "复制表名", - "deleteTable": "删除表", - "deleteTableConfirmTitle": "删除确认", - "confirmDeleteTable": "确定要删除表 \"{tableName}\" 吗?此操作不可恢复!", - "deleteTableSuccess": "表删除成功", - "deleteTableFailed": "删除表失败", - "inputDatabaseName": "请输入数据库名称", - "databaseNameRule": "数据库名称只能包含字母、数字和下划线,且必须以字母或下划线开头", - "databaseCreateSuccess": "数据库 \"{name}\" 创建成功", - "databaseCreateFailed": "创建数据库失败", - "inputNewDatabaseName": "请输入新的数据库名称", - "nameNotChanged": "名称未变更", - "renameNotSupported": "数据库重命名功能暂不支持,请手动操作", - "inputSchemaName": "请输入Schema名称", - "createSchema": "创建Schema", - "schemaNameRule": "Schema名称只能包含字母、数字和下划线,且必须以字母或下划线开头", - "schemaCreateSuccess": "Schema \"{name}\" 创建成功", - "schemaCreateFailed": "创建Schema失败", - "inputNewSchemaName": "请输入新的Schema名称", - "schemaRenameSuccess": "Schema 已重命名为 \"{name}\"", - "schemaRenameFailed": "重命名Schema失败", - "sqlServerRenameSchemaNotSupported": "SQL Server 不支持直接重命名Schema", - "loadConfigFailed": "加载数据库配置失败", - "loadDatabaseFailed": "加载数据库失败", - "loadSchemaFailed": "加载Schema失败", - "loadTableFailed": "加载表列表失败", - "loadNodeFailed": "加载节点数据失败", - "nodeNotFound": "无法找到节点", - "refreshNodeSuccess": "刷新成功,展开节点查看最新数据", - "refreshNodeFailed": "刷新节点失败", - "refreshFailed": "刷新失败", - "copyToClipboard": "已复制到剪贴板", - "tableAlreadyAdded": "该表已添加", - "setMainSuccess": "已设置 {name} 为主表", - "addSubSuccess": "已添加从表 {name}", - "tableFieldsRefreshed": "表 {name} 的字段信息已更新", - "removeMainConfirm": "确定移除主表吗?", - "removeSubConfirm": "确定移除此从表吗?", - "removeMain": "移除主表", - "subTableCount": "共 {count} 个从表", - "tableName": "表名", - "tableNamePlaceholder": "请输入表名", - "alias": "别名", - "aliasPlaceholder": "用于SQL查询", - "fieldList": "字段列表 ({count})", - "fieldName": "字段名", - "fieldNamePlaceholder": "请输入字段名", - "fieldType": "类型", - "fieldLength": "长度", - "fieldScale": "小数位", - "fieldComment": "注释", - "fieldCommentPlaceholder": "请输入字段注释", - "schemaName": "Schema", - "schemaNamePlaceholder": "请输入Schema名", - "nullable": "可空", - "isPrimaryKey": "主键", - "uniqueCheck": "唯一", - "addField": "添加字段", - "relationType": "关联类型", - "oneToMany": "一对多", - "oneToOne": "一对一", - "foreignKeyField": "外键字段(从表)", - "relatedFieldMain": "关联字段(主表)", - "selectForeignKey": "选择外键字段", - "selectRelatedField": "选择关联字段", - "viewFieldList": "查看字段列表 ({count} 个字段)", - "noSubTables": "暂无从表", - "addSubTip": "在左侧数据库树中点击 + 按钮添加从表", - "missingSystemFieldsTitle": "缺少系统字段", - "missingSystemFieldsMessage": "该表缺少数据权限所需的系统字段:

{fields}

如果不添加这些字段,数据权限功能将无法正常工作。

点击【自动添加】将自动为表添加缺少的字段;
点击【忽略并继续】将跳过此检查。", - "autoAddFields": "自动添加", - "ignoreAndContinue": "忽略并继续", - "addSystemFieldsSuccess": "系统字段添加成功", - "addSystemFieldsFailed": "系统字段添加失败", - "mainTableRequired": "请先配置主表", - "connectionUnavailable": "数据库连接不可用,请检查连接配置", - "mainTableNotFound": "主表 {table} 在目标连接中不存在", - "subTableNotFound": "从表 {table} 在目标连接中不存在", - "currentConnection": "当前连接", - "externalConnectionTip": "表单数据将写入第三方数据库连接,请确保表已在目标库创建" - }, - "listDesign": { - "containerPage": "独立页面", - "title": "列表设计", - "queryTab": "查询字段", - "listTab": "列表字段", - "propertyTab": "列表属性", - "querySelectionTip": "勾选字段添加到查询条件", - "listSelectionTip": "勾选字段添加到列表显示", - "selectAll": "全选", - "noAvailableFields": "暂无可用字段,请先在表单设计中添加字段", - "tableProperties": "Table 属性", - "showPagination": "显示分页", - "pageSize": "每页条数", - "itemsPerPage": "{count} 条/页", - "showIndex": "显示序号列", - "showSelection": "显示多选框", - "stripe": "斑马纹", - "border": "边框", - "size": "尺寸", - "sizeLarge": "大", - "sizeDefault": "中", - "sizeSmall": "小", - "tableHeight": "表格高度", - "adaptive": "自适应", - "dialogProperties": "Dialog 属性", - "dialogWidth": "弹窗宽度", - "widthSmall": "小 (600px)", - "widthMedium": "中 (800px)", - "widthLarge": "大 (1000px)", - "widthExtraLarge": "超大 (1200px)", - "fullscreen": "全屏显示", - "draggable": "可拖拽", - "closeOnClickModal": "点击遮罩关闭", - "closeOnPressEscape": "ESC 关闭", - "pageProperties": "Page 属性", - "showBackButton": "显示返回按钮", - "showBackButtonTip": "控制页面左上角是否显示返回列表按钮", - "layoutRenderMode": "渲染模式", - "conditionRender": "条件渲染", - "routeRender": "路由渲染", - "conditionRenderTip": "在当前页面内通过 v-if 切换显示表单,不产生新路由", - "routeRenderTip": "跳转到独立路由页面显示表单,不显示标签页", - "openInNewTab": "新开标签页", - "openInNewTabTip": "点击新增、编辑、查看按钮时是否在新标签页中打开表单页面", - "buttonDisplay": "按钮显示", - "toolbarButtons": "列表头部按钮", - "rowActionButtons": "列表项操作按钮", - "addBtn": "新增按钮", - "editBtn": "编辑按钮", - "deleteBtn": "删除按钮", - "viewBtn": "查看按钮", - "exportBtn": "导出按钮", - "importBtn": "导入按钮", - "batchDeleteBtn": "批量删除", - "startWorkflow": "发起流程", - "noWorkflowBound": "该表单未绑定任何流程", - "startWorkflowSuccess": "流程发起成功", - "startWorkflowFailed": "流程发起失败", - "workflowTitleLabel": "流程标题", - "workflowTitlePlaceholder": "请输入流程标题", - "workflowTitleRequired": "流程标题不能为空", - "formActionSettings": "表单操作设置", - "showConfirmButton": "显示确认按钮", - "showConfirmButtonTip": "关闭后,新增/编辑时不显示确认按钮", - "afterSaveAction": "新增保存后行为", - "afterSaveClose": "关闭并返回列表", - "afterSaveEditMode": "切换为编辑模式", - "afterSaveContinueAdd": "清空表单继续新增", - "afterSaveActionTip": "仅在新增时生效:关闭返回列表、保持当前记录进入编辑、或清空表单继续录入下一条", - "enableStartWorkflowOnAdd": "新增时可发起流程", - "enableStartWorkflowOnAddTip": "开启后,在新增数据时会显示「发起流程」按钮", - "queryConfigTitle": "查询字段配置", - "listConfigTitle": "列表字段配置", - "sort": "排序", - "displayName": "显示名称", - "fieldKey": "字段键值", - "queryType": "查询类型", - "componentType": "组件类型", - "width": "宽度", - "defaultValue": "默认值", - "hidden": "隐藏", - "showTime": "时间", - "multiple": "多选", - "caseSensitive": "大小写敏感", - "actions": "操作", - "matchLike": "模糊匹配", - "matchEq": "精确匹配", - "matchRange": "范围查询", - "matchIn": "包含匹配", - "matchSpaceLikeAnd": "空格模糊且", - "matchSpaceLikeOr": "空格模糊或", - "matchSpaceEqAnd": "空格精确且", - "matchSpaceEqOr": "空格精确或", - "compInput": "输入框", - "compSelect": "下拉框", - "compDate": "日期", - "compTime": "时间", - "compUser-select": "用户选择", - "compDept-select": "部门选择", - "compRole-select": "角色选择", - "compPost-select": "岗位选择", - "compForm-select": "表单选择", - "compTable-select": "表格选择", - "compFile-select": "文件选择", - "compImage-select": "图片选择", - "compRegion-select": "省市区选择", - "compMoney-input": "金额输入", - "compRich-text": "富文本编辑器", - "compCode-editor": "代码编辑器", - "compFormula-input": "公式输入", - "compCron-selector": "Cron表达式", - "compCurrent-user": "当前用户", - "compCurrent-datetime": "当前时间", - "compCode-generator": "编码生成器", - "compAi-image-ocr": "AI图片识别", - "width18": "1/8 (3)", - "width16": "1/6 (4)", - "width14": "1/4 (6)", - "width13": "1/3 (8)", - "width12": "1/2 (12)", - "widthFull": "整行 (24)", - "none": "无", - "noQueryFields": "暂无查询字段", - "selectQueryTip": "请在右侧勾选需要查询的字段", - "columnName": "列名", - "left": "居左", - "center": "居中", - "right": "居右", - "minWidth": "最小宽度", - "min": "最小", - "noFixed": "不冻结", - "fixedLeft": "左侧", - "fixedRight": "右侧", - "sortable": "可排序", - "resizable": "可调宽", - "overflowTooltip": "溢出提示", - "ellipsis": "省略号", - "fileImageDisplayHint": "图片/签名字段自动以缩略图显示,无需文本类配置", - "showAsTag": "Tag显示", - "tagType": "Tag类型:", - "tagDefault": "默认", - "tagSuccess": "成功", - "tagWarning": "警告", - "tagInfo": "信息", - "tagDanger": "危险", - "formatter": "格式化", - "formatDate": "日期", - "formatDateTime": "日期时间", - "formatMoney": "金额", - "formatPercent": "百分比", - "formatNumber": "数字", - "formatPattern": "模式", - "prefix": "前缀", - "suffix": "后缀", - "custom": "自定义", - "unitYuan": "元", - "unitGe": "个", - "unitCi": "次", - "unitDay": "天", - "unitHour": "小时", - "noListFields": "暂无列表字段", - "selectListTip": "请在右侧勾选需要显示的字段", - "defaultSortField": "默认排序字段", - "selectSortField": "请选择排序字段", - "sortOrder": "排序方向", - "ascending": "升序", - "descending": "降序", - "addSortField": "添加排序字段", - "defaultFilterConditions": "默认过滤条件", - "selectFilterField": "请选择字段", - "selectFilterOperator": "操作符", - "filterValue": "值", - "filterValuePlaceholder": "请输入过滤值", - "addFilterCondition": "添加过滤条件", - "filterOperatorEq": "等于", - "filterOperatorNe": "不等于", - "filterOperatorGt": "大于", - "filterOperatorGte": "大于等于", - "filterOperatorLt": "小于", - "filterOperatorLte": "小于等于", - "filterOperatorLike": "包含", - "filterOperatorIn": "在列表中", - "filterOperatorNull": "为空", - "filterOperatorNotNull": "不为空", - "tableSummary": "表尾统计", - "showSummary": "显示统计行", - "summaryText": "统计行首列文字", - "summaryTextPlaceholder": "合计", - "summaryColumnTip": "在列表字段配置中为数值类型字段开启统计", - "treeConfig": "树形表格", - "enableTree": "启用树形表格", - "parentField": "父节点字段", - "lazyLoad": "懒加载", - "lazyLoadOnTip": "按需加载子节点", - "lazyLoadOffTip": "一次加载全部数据", - "defaultExpandAll": "默认展开所有", - "indent": "缩进", - "checkStrictly": "父子不关联", - "enableSummary": "统计", - "summaryType": "类型", - "summarySum": "求和", - "summaryAvg": "平均", - "summaryCount": "计数", - "summaryMax": "最大", - "summaryMin": "最小", - "summaryPrecision": "精度", - "sortFrontend": "前端", - "sortBackend": "后端", - "filterable": "过滤", - "filterInput": "输入", - "filterSelect": "选择", - "filterDateRange": "日期范围", - "filterMultiple": "多选", - "dialogFilter": "弹窗选择", - "subTableButtons": "子表操作按钮", - "subTableButtonsTip": "配置子表独立表单的操作按钮,点击后可在弹窗/抽屉/页面中管理子表数据", - "addSubTableButton": "添加子表按钮", - "noSubTableButtons": "暂无子表操作按钮", - "subTableButtonText": "按钮文本", - "selectSubTable": "选择子表", - "selectSubTablePlaceholder": "请选择要关联的子表", - "selectSubForm": "选择子表单", - "selectSubFormPlaceholder": "请选择子表对应的独立表单", - "foreignKeyField": "外键字段", - "foreignKeyFieldPlaceholder": "自动从子表配置获取", - "buttonStyle": "按钮样式", - "subFormContainerType": "容器类型", - "drawerSize": "抽屉尺寸", - "drawerDirection": "打开方向", - "customButtons": "自定义按钮", - "addCustomButton": "添加自定义按钮", - "noCustomButtons": "暂无自定义按钮", - "defaultButtonName": "自定义按钮", - "buttonName": "按钮名称", - "buttonType": "按钮类型", - "buttonPosition": "按钮位置", - "toolbar": "工具栏", - "tools": "工具栏右侧", - "row": "行操作", - "iconAndDisplay": "图标和显示", - "iconOnly": "只显示图标", - "actionType": "操作类型", - "actionLink": "打开链接", - "actionApi": "调用接口", - "actionEvent": "触发事件", - "actionPage": "打开页面", - "actionGenerateDocument": "生成单据", - "bindDocumentTemplates": "绑定单据模板", - "bindDocumentTemplatesPlaceholder": "选择要生成的单据模板(可多选)", - "bindDocumentTemplatesHint": "不选择则生成该表单下全部已发布单据模板;选择后仅生成所选模板", - "pageCode": "页面编码", - "pageCodePlaceholder": "选择要打开的页面", - "pageCodeRequired": "请选择页面", - "dialogTitle": "弹窗标题", - "dialogTitlePlaceholder": "支持变量:{id}、{name}等", - "pageDialogWidth": "弹窗宽度", - "pageDialogFullscreen": "全屏显示", - "pageView": "页面查看", - "pageLoadFailed": "加载页面失败", - "pageNoConfig": "暂无页面配置", - "linkUrl": "链接地址", - "linkUrlPlaceholder": "支持变量:{id}、{field}等", - "apiUrl": "接口地址", - "apiUrlPlaceholder": "/api/xxx,支持变量:{id}", - "apiMethod": "请求方法", - "confirmMessage": "确认提示", - "confirmMessagePlaceholder": "执行前显示的确认消息", - "eventName": "事件名称", - "eventNamePlaceholder": "自定义事件名称", - "buttonIcon": "按钮图标", - "buttonIconPlaceholder": "lucide:icon-name", - "showCondition": "显示条件", - "showConditionPlaceholder": "row.status === 'active'", - "permissionCode": "权限编码", - "permissionCodePlaceholder": "可选,用于权限控制", - "styleOptions": "样式选项", - "plain": "朴素按钮", - "round": "圆角按钮", - "circle": "圆形按钮", - "textBtn": "文本按钮", - "linkBtn": "链接按钮", - "buttonSize": "按钮尺寸", - "stateControl": "状态控制", - "disabled": "禁用", - "disabledCondition": "禁用条件", - "disabledConditionPlaceholder": "row.status === 'completed'", - "tooltip": "提示文本", - "tooltipPlaceholder": "鼠标悬停时显示的提示", - "badge": "徽标", - "badgePlaceholder": "数字或文本,支持变量", - "badgeType": "徽标类型", - "confirmDialog": "确认对话框", - "confirmTitle": "确认标题", - "confirmTitlePlaceholder": "确认操作", - "messageConfig": "消息配置", - "successMessage": "成功消息", - "successMessagePlaceholder": "操作成功", - "errorMessage": "失败消息", - "errorMessagePlaceholder": "操作失败", - "reloadAfterSuccess": "成功后刷新列表", - "actionAgent": "Agent对话", - "agentId": "Agent ID", - "agentIdPlaceholder": "Agent的唯一标识", - "agentCode": "Agent编码", - "agentCodePlaceholder": "Agent的编码(备选)", - "initialMessage": "初始消息", - "initialMessagePlaceholder": "打开对话时的初始消息,支持变量如{name}", - "includeRowData": "包含行数据", - "autoSend": "自动发送初始消息", - "listType": "列表类型", - "cardProperties": "Card 属性", - "cardColumns": "每行显示数量", - "cardColumnsOption": "{count} 列", - "cardGap": "卡片间距 (px)", - "cardShadow": "卡片阴影", - "shadowAlways": "始终显示", - "shadowHover": "悬停显示", - "shadowNever": "不显示", - "cardFieldsConfig": "卡片字段配置", - "cardFieldsTip": "将字段拖拽到卡片对应区域", - "cardPreview": "卡片预览", - "cardFieldProperties": "字段属性", - "fieldProperties": "字段属性", - "showDisplayName": "显示名称", - "showRelationField": "显示关联字段", - "selectDisplayField": "选择显示字段", - "selectDisplayFieldPlaceholder": "请选择要显示的字段", - "loadingFields": "加载字段中...", - "showAvatar": "显示头像", - "showVirtualValue": "显示关联值", - "cardAreaIcon": "图标", - "cardAreaTitle": "标题", - "cardAreaSubtitle": "副标题", - "cardAreaDescription": "描述", - "cardAreaTags": "标签", - "cardAreaFooterLeft": "底部左侧", - "cardAreaFooterRight": "底部右侧", - "cardAreaEmpty": "拖入字段", - "cardAreaRequired": "必填", - "cardAreaMaxTags": "最多 {count} 个", - "cardQueryLimit": "卡片模式下查询字段最多 {count} 个", - "noCardFields": "暂无卡片字段配置", - "selectCardFieldTip": "点击卡片区域或从右侧拖入字段", - "useCursorPagination": "游标分页", - "useCursorPaginationTip": "适用于大数据量场景,开启后不显示总条数,仅支持上一页/下一页翻页", - "prevPage": "上一页", - "nextPage": "下一页", - "noMoreData": "没有更多数据" - }, - "formRender": { - "subTableData": "子表数据", - "loadSubFormFailed": "加载子表单失败", - "loadDataFailed": "加载数据失败", - "validateFailed": "请检查表单填写是否正确" - }, - "publishDialog": { - "title": "表单发布", - "settings": "发布设置", - "allowGuest": "允许访客填写", - "success": "发布成功", - "failed": "发布失败", - "menuConfig": "菜单配置", - "menuName": "菜单名称", - "parentMenu": "上级菜单", - "parentMenuPlaceholder": "请选择上级菜单(不选则为顶级)", - "menuIcon": "菜单图标", - "routeInfo": "路由信息", - "accessPath": "访问路径", - "confirmPublish": "确认发布" - }, - "validator": { - "required": "不能为空", - "formatInvalid": "格式不正确", - "tooLong": "长度超出限制", - "notBound": "未绑定数据字段", - "duplicateSubField": "从表 \"{table}\" 中字段名 \"{field}\" 重复使用", - "duplicateField": "字段名 \"{field}\" 重复使用", - "invalidSubTable": "无效的从表 \"{table}\"", - "fieldNotInSubTable": "字段 \"{field}\" 不存在于从表 \"{table}\" 中", - "fieldNotInMainTable": "字段 \"{field}\" 不存在于主表中", - "fileMultipleRequiresJson": "字段 \"{field}\" 配置为多选文件/图片,数据库类型必须为 JSON,当前类型为 {currentType}", - "fileSingleRequiresVarchar": "字段 \"{field}\" 配置为单选文件/图片,数据库类型必须为 VARCHAR,当前类型为 {currentType}", - "regionRequiresJson": "字段 \"{field}\" 使用省市区组件,数据库类型必须为 JSON,当前类型为 {currentType}", - "numericFieldRequiresNumericComponent": "字段 \"{field}\" 的数据库类型为 {fieldType}(数字类型),不能使用 {componentType} 组件,请使用数字输入、金额输入、滑块、评分或公式计算等数字类型组件", - "stringFieldCannotUseDateComponent": "字段 \"{field}\" 的数据库类型为 {fieldType}(字符串类型),不能使用 {componentType} 组件,日期时间组件需要对应的日期时间类型字段", - "dateTimeFieldRequiresDateComponent": "字段 \"{field}\" 的数据库类型为 {fieldType}(日期时间类型),不能使用 {componentType} 组件,请使用日期选择、时间选择或创建时间等日期时间组件", - "booleanFieldRequiresSwitchComponent": "字段 \"{field}\" 的数据库类型为 {fieldType}(布尔类型),不能使用 {componentType} 组件,请使用开关、单选框或下拉选择等组件", - "jsonFieldRequiresJsonComponent": "字段 \"{field}\" 的数据库类型为 {fieldType}(JSON类型),不能使用 {componentType} 组件,请使用多选框、级联选择、树形选择、文件选择等支持JSON的组件", - "reverseAutoFillRequiresMultiple": "字段 \"{field}\" 启用了关联自动填充,必须开启多选", - "reverseAutoFillNoFormCode": "字段 \"{field}\" 启用了关联自动填充,但未配置关联表单", - "reverseAutoFillNoSourceField": "字段 \"{field}\" 启用了关联自动填充,但未配置源字段", - "reverseAutoFillNoTargetField": "字段 \"{field}\" 启用了关联自动填充,但未配置关联表单过滤字段", - "reverseAutoFillSelfSource": "字段 \"{field}\" 关联自动填充的源字段不能是自身", - "reverseAutoFillConflictsValueLink": "字段 \"{field}\" 已启用关联自动填充,不能同时启用值关联", - "unknown": "未知", - "columnNoField": "列未绑定字段", - "unknownColumn": "未知列", - "columnFieldNotExist": "列绑定的字段 \"{field}\" 不存在于表单或数据库中", - "queryFieldNoField": "查询字段未绑定字段", - "unknownQueryField": "未知查询字段", - "queryFieldNotExist": "查询字段 \"{field}\" 不存在于表单或数据库中", - "subTableButton": "子表按钮", - "subTableButtonNoText": "子表按钮未设置按钮文本", - "subTableButtonNoFormCode": "子表按钮未设置子表单编码", - "subTableButtonNoForeignKey": "子表按钮未设置外键字段", - "customButton": "自定义按钮", - "customButtonNoName": "自定义按钮未设置名称", - "customButtonLinkNoUrl": "链接类型按钮未设置跳转地址", - "customButtonApiNoUrl": "API类型按钮未设置接口地址", - "customButtonEventNoName": "事件类型按钮未设置事件名称" - }, - "generateDocument": { - "title": "生成单据", - "template": "单据模板", - "selectTemplate": "请选择单据模板", - "selectTemplatePlaceholder": "请选择要生成的单据模板", - "description": "模板说明", - "noTemplates": "该表单未绑定任何已发布的单据模板", - "generatedDocuments": "已生成单据", - "generate": "生成", - "generateSuccess": "单据生成成功", - "generateFailed": "单据生成失败", - "preview": "预览", - "download": "下载", - "buttonLabel": "生成单据", - "buttonTooltip": "根据此数据生成单据", - "positionHint": "生成单据按钮只能放在行操作位置,因为需要基于具体的表单数据生成", - "autoRefresh": "自动刷新", - "autoRefreshHint": "开启后,每次点击按钮都会按最新表单数据重新生成单据;关闭则优先展示已生成的单据" - }, - "apiInfo": { - "title": "API 接口信息", - "description": "当前表单提供以下 API 接口,所有接口均需要认证令牌。", - "formCode": "表单编码", - "basePrefix": "基础前缀", - "authRequired": "需要认证", - "permissions": "权限查询", - "getPermissions": "获取操作权限", - "getPermissionsDesc": "获取当前用户对该表单的操作权限(查看/新增/编辑/删除/导出/导入)", - "getFieldPermissions": "获取字段权限", - "getFieldPermissionsDesc": "获取当前用户对该表单各字段的读写权限", - "dataOperations": "数据操作", - "getList": "查询数据列表", - "getListDesc": "分页查询表单数据,支持排序、搜索和过滤", - "getDetail": "获取数据详情", - "getDetailDesc": "获取单条数据详情,包含子表数据", - "createData": "新增数据", - "createDataDesc": "新增一条表单数据,支持同时写入子表", - "updateData": "更新数据", - "updateDataDesc": "更新指定记录,支持同时更新子表", - "deleteData": "删除数据", - "deleteDataDesc": "删除指定记录及其关联子表数据", - "batchDelete": "批量删除", - "batchDeleteDesc": "批量删除多条记录及其关联子表数据", - "auxiliary": "辅助接口", - "getTreeChildren": "获取树形子节点", - "getTreeChildrenDesc": "树形表格懒加载时获取子节点数据", - "getFieldValues": "获取字段唯一值", - "getFieldValuesDesc": "获取指定字段的唯一值列表,用于过滤选项", - "checkUnique": "唯一性检查", - "checkUniqueDesc": "检查指定字段值是否唯一", - "importExport": "导入导出", - "exportExcel": "导出 Excel", - "exportExcelDesc": "导出表单数据为 Excel 文件,支持字段选择和子表导出", - "importTemplate": "下载导入模板", - "importTemplateDesc": "下载 Excel 导入模板", - "importExcel": "导入 Excel", - "importExcelDesc": "从 Excel 文件导入数据,支持追加和覆盖模式", - "request": "请求", - "response": "响应", - "pathParams": "路径参数", - "queryParams": "查询参数", - "requestBody": "请求体", - "noParams": "无参数", - "copyPath": "复制路径", - "copiedSuccess": "已复制到剪贴板", - "formFields": "表单字段参考" - }, - "formData": { - "import": { - "title": "导入数据", - "modeTitle": "选择导入模式", - "appendMode": "追加模式", - "appendModeDesc": "保留现有数据,追加导入新数据", - "overwriteMode": "覆盖模式", - "overwriteModeDesc": "清空现有数据,重新导入全部数据", - "overwriteWarning": "覆盖模式将删除表中所有现有数据,此操作不可恢复!", - "dataHandling": "数据处理方式", - "insertOnly": "仅新增数据", - "insertOnlyDesc": "将Excel中的数据全部追加为表格的新数据", - "updateOnly": "仅更新数据", - "updateOnlyDesc": "通过指定字段找到表格的所有已有数据,用Excel中的数据更新对应数据,不会新增任何数据", - "upsert": "更新和新增数据", - "upsertDesc": "更新和新增数据用Excel中的数据更新表格的所有已有数据,当通过指定字段找不到已有数据时,会新增数据", - "matchField": "匹配字段", - "matchFieldPlaceholder": "选择用于匹配已有数据的字段", - "matchFieldRequired": "更新模式下需要选择匹配字段", - "updatedCount": "条更新成功", - "insertedCount": "条新增成功", - "skippedCount": "条已跳过", - "selectFile": "选择文件", - "dragOrClick": "拖拽文件到此处或点击上传", - "onlyXlsx": "仅支持 .xlsx 格式文件", - "downloadTemplate": "下载导入模板", - "validateAndUpload": "验证并上传", - "validating": "正在验证数据...", - "importing": "正在导入数据...", - "passCount": "条验证通过", - "failCount": "条验证失败", - "importedCount": "条导入成功", - "errorList": "错误详情", - "rowNumber": "行号", - "errorMsg": "错误信息", - "allPassed": "所有数据验证通过,可以开始导入", - "importSuccess": "数据导入完成", - "reselect": "重新选择", - "confirmImport": "确认导入" - } - }, - "importExport": { - "export": "导出", - "import": "导入配置", - "batchExport": "批量导出", - "exportSuccess": "表单配置已导出", - "exportFailed": "导出失败", - "importTitle": "导入表单配置", - "selectFile": "选择文件", - "dragOrClick": "拖拽 JSON 文件到此处或点击上传", - "dragOrClickMulti": "支持选择多个文件批量导入", - "onlyJson": "仅支持 .json 格式文件", - "fileParseError": "文件解析失败,请确认文件格式正确", - "checking": "正在检查...", - "checkResult": "检查结果", - "codeConflict": "表单编码已存在", - "codeConflictTip": "表单编码已存在, 请修改编码后再导入", - "newCode": "新编码", - "newCodePlaceholder": "请输入新的表单编码", - "tableStatus": "数据库表状态", - "mainTable": "主表", - "subTable": "子表", - "schema": "Schema", - "tableExists": "已存在", - "tableNotExists": "不存在", - "hasDdl": "有 DDL", - "noDdl": "无 DDL", - "autoCreateTables": "自动创建不存在的表", - "autoCreateTablesTip": "导入时将根据导出的 DDL 自动创建不存在的数据库表", - "createSchemaIfNotExists": "新建 Schema(不存在时)", - "createSchemaIfNotExistsTip": "导入前自动创建配置中的目标 Schema(仅 PostgreSQL / SQL Server)", - "cannotAutoCreate": "部分表不存在且无 DDL,无法自动创建", - "crossDialectAutoCreate": "导出库类型({source})与目标连接({target})不一致,无法自动建表,请使用相同引擎或手工建表", - "importSuccess": "表单配置导入成功", - "importFailed": "导入失败", - "confirmImport": "确认导入", - "formInfo": "表单信息", - "formName": "表单名称", - "formCode": "表单编码", - "formType": "表单类型", - "dbConfig": "数据库配置", - "mainTableName": "主表名", - "fieldCount": "字段数", - "subTableCount": "子表数", - "appTip": "导入的表单将归属到当前应用", - "tableExistsRename": "表已存在,可使用新表名和Schema建表", - "newTableName": "新表名", - "newTableNamePlaceholder": "请输入新的表名", - "selectSchema": "选择 Schema", - "selectSchemaPlaceholder": "请选择目标 Schema", - "batchImportTitle": "批量导入表单配置", - "batchImportCount": "共 {count} 个表单", - "batchImportProgress": "正在导入 {current}/{total}...", - "batchImportSuccess": "批量导入完成,成功 {success} 个,失败 {fail} 个", - "batchImportItem": "第 {index} 个", - "batchNext": "下一个", - "batchSkip": "跳过", - "batchSkipped": "已跳过", - "batchConfirmAndNext": "确认导入并下一个", - "batchImportAll": "导入全部", - "batchImporting": "正在导入...", - "checkFailed": "检查失败", - "noSelection": "请先选择要导出的表单", - "batchExportProgress": "正在导出第 {current}/{total} 个...", - "batchExportDone": "批量导出完成,成功 {success} 个,失败 {fail} 个", - "reselect": "重新选择" - } -} diff --git a/web/apps/web-ele/src/locales/langs/zh-CN/page-manager.json b/web/apps/web-ele/src/locales/langs/zh-CN/page-manager.json deleted file mode 100644 index 64539f3..0000000 --- a/web/apps/web-ele/src/locales/langs/zh-CN/page-manager.json +++ /dev/null @@ -1,126 +0,0 @@ -{ - "applicationName": "所属应用", - "name": "页面名称", - "code": "页面编码", - "status": "状态", - "description": "描述", - "createTime": "创建时间", - "updateTime": "更新时间", - "actions": "操作", - "placeholder": { - "name": "请输入页面名称", - "code": "请输入页面编码", - "status": "请选择状态", - "remark": "请输入表单说明", - "category": "请选择分类", - "description": "请输入页面说明" - }, - "categoryMap": { - "dashboard": "仪表盘", - "portal": "门户页面", - "databoard": "数据看板", - "other": "其他" - }, - "statusMap": { - "all": "全部", - "published": "已发布", - "draft": "草稿" - }, - "create": "新建页面", - "batchDelete": "批量删除", - "batchDeleteWithCount": "批量删除 ({count})", - "deleteConfirm": "确定要删除页面 \"{name}\" 吗?", - "deleteConfirmTitle": "删除确认", - "deleteSuccess": "已删除页面: {name}", - "batchDeleteConfirm": "确定要删除选中的 {count} 个页面吗?", - "batchDeleteConfirmTitle": "批量删除确认", - "batchDeleteSuccess": "已删除 {count} 个页面", - "unpublishSuccess": "页面 \"{name}\" 已取消发布", - "unpublishFailed": "取消发布失败", - "copyCodePlaceholder": "请输入新页面编码", - "copyTitle": "复制页面", - "copyCodeRule": "编码只能包含字母、数字、下划线和横线", - "codeFormatError": "编码必须以字母开头,只能包含字母、数字和下划线", - "copySuccess": "复制成功", - "design": "设计", - "editInfo": "编辑信息", - "saveSuccess": "页面保存成功", - "preview": "预览", - "publish": "发布", - "unpublish": "取消发布", - "copy": "复制", - "setAsHome": "设为首页", - "setAsHomeTitle": "设为默认首页", - "setAsHomeConfirm": "确定要将页面「{name}」设为默认首页吗?", - "setAsHomePath": "首页路径", - "setAsHomeTip": "设置后,用户登录系统将默认跳转到此页面。", - "setAsHomeAppTip": "此页面属于应用「{app}」,将更新该应用的首页配置。", - "setHomeSuccess": "已设为默认首页", - "setHomeFailed": "设置首页失败", - "more": "更多", - "category": "页面分类", - "editor": { - "title": "在线开发", - "create": "创建页面", - "edit": "编辑页面", - "createSuccess": "创建成功", - "steps": { - "basic": "基础信息", - "design": "页面设计", - "preview": "页面预览" - }, - "loadFailed": "加载页面数据失败", - "validate": { - "basic": "基础信息验证:名称、编码必填", - "perfectDesign": "请完善页面设计" - }, - "autoSave": { - "saving": "保存中...", - "saved": "已保存", - "unsaved": "未保存" - } - }, - "previewDialog": { - "title": "页面预览", - "loadFailed": "加载页面配置失败", - "verifySuccess": "验证通过", - "realtimeData": "实时数据 (v-model):", - "noConfig": "暂无页面配置", - "close": "关闭", - "verifySubmit": "验证提交", - "verifyFailed": "页面验证失败" - }, - "importExport": { - "export": "导出", - "import": "导入配置", - "exportSuccess": "页面配置已导出", - "exportFailed": "导出失败", - "importTitle": "导入页面配置", - "dragOrClick": "拖拽 JSON 文件到此处或点击上传", - "onlyJson": "仅支持 .json 格式文件", - "fileParseError": "文件解析失败,请确认文件格式正确", - "checking": "正在检查...", - "codeConflictTip": "页面编码已存在,请修改编码后再导入", - "codeAvailable": "页面编码可用,可以导入", - "newCodePlaceholder": "请输入新的页面编码", - "importSuccess": "页面配置导入成功", - "importFailed": "导入失败", - "confirmImport": "确认导入", - "reselect": "重新选择", - "pageInfo": "页面信息", - "appTip": "导入的页面将归属到当前应用" - }, - "publishDialog": { - "title": "页面发布", - "success": "发布成功", - "failed": "发布失败", - "menuConfig": "菜单配置", - "menuName": "菜单名称", - "parentMenu": "上级菜单", - "parentMenuPlaceholder": "请选择上级菜单(不选则为顶级)", - "menuIcon": "菜单图标", - "routeInfo": "路由信息", - "accessPath": "访问路径", - "confirmPublish": "确认发布" - } -} diff --git a/web/apps/web-ele/src/locales/langs/zh-CN/report-manager.json b/web/apps/web-ele/src/locales/langs/zh-CN/report-manager.json deleted file mode 100644 index 34131ad..0000000 --- a/web/apps/web-ele/src/locales/langs/zh-CN/report-manager.json +++ /dev/null @@ -1,437 +0,0 @@ -{ - "name": "报表名称", - "reportCode": "报表编码", - "category": "分类", - "status": "状态", - "description": "描述", - "createTime": "创建时间", - "actions": "操作", - "create": "新建报表", - "design": "设计", - "editInfo": "编辑信息", - "deleteConfirm": "确定要删除报表 \"{name}\" 吗?", - "deleteConfirmTitle": "删除确认", - "deleteSuccess": "已删除报表: {name}", - "saveSuccess": "报表保存成功", - "copyTitle": "复制报表", - "copyCodePlaceholder": "请输入新报表编码", - "copySuccess": "复制成功", - "statusMap": { - "draft": "草稿", - "published": "已发布" - }, - "placeholder": { - "name": "请输入报表名称", - "code": "请输入报表编码", - "category": "请输入分类", - "description": "请输入报表说明" - }, - "editor": { - "create": "新建报表", - "edit": "编辑报表", - "createSuccess": "报表创建成功", - "loadFailed": "加载报表失败", - "back": "返回", - "save": "保存", - "publish": "发布", - "publishSuccess": "发布成功,已创建新的设计版本", - "copyVersion": "复制版本", - "copyVersionSuccess": "已复制为新设计版本", - "copyVersionFailed": "复制版本失败" - }, - "leftPanel": { - "dataSource": "数据源", - "reportProperties": "报表设置", - "clickToConfigure": "点击编辑配置", - "configuredCount": "已配置 {count} 项", - "queryEmpty": "暂未配置查询条件", - "sortEmpty": "暂未配置排序规则", - "columnEmpty": "暂未启用分栏布局", - "convertEmpty": "暂未配置数据转换", - "columnEnabled": "已启用分栏" - }, - "dataset": { - "title": "数据集", - "selectSource": "选择数据源", - "empty": "暂无数据集,请从上方添加", - "fieldMapping": "字段映射", - "loadingFields": "加载字段中...", - "loadFieldsFailed": "加载字段失败", - "noFields": "暂无字段" - }, - "column": { - "config": "分栏配置", - "title": "分栏设置", - "enable": "启用分栏", - "style": "分栏样式", - "styleCol": "行分栏", - "styleRow": "列分栏", - "type": "分栏类型", - "overRows": "超过", - "splitCols": "行后分栏", - "overCols": "超过", - "splitRows": "列后分栏", - "splitInto": "分栏成", - "colsUnit": "列", - "rowsUnit": "行", - "dataRange": "分栏数据区域", - "dataRangePlaceholder": "如 A2:D10", - "copyColNo": "复制行号", - "copyRowNo": "复制列号", - "rangeHint": "如 1,2-3,6", - "fillEmpty": "补充空白行", - "previewNote": "预览支持:行分栏→分栏成 N 列;列分栏→分栏成 N 行。请填写区域(如 A2:D10)并设置列/行数≥2。" - }, - "sort": { - "config": "排序配置", - "title": "数据集排序", - "hint": "按数据集别名字段排序,格式:别名.字段名(如 sales.amount)", - "add": "添加排序", - "field": "排序字段", - "fieldPlaceholder": "如 sales.createTime", - "order": "顺序", - "asc": "升序", - "desc": "降序", - "datasetHint": "已配置数据集" - }, - "query": { - "title": "查询条件", - "config": "配置查询条件", - "add": "添加条件", - "field": "字段名", - "fieldPlaceholder": "选择或输入参数字段名", - "label": "显示名", - "component": "组件", - "defaultValue": "默认值", - "required": "请填写此项", - "requiredLabel": "必填", - "input": "输入框", - "select": "下拉", - "date": "日期", - "dateRange": "日期范围", - "showTime": "含时间", - "options": "选项", - "optionsPlaceholder": "显示名:值,显示名2:值2", - "search": "查询", - "reset": "重置", - "startDate": "开始日期", - "endDate": "结束日期" - }, - "convert": { - "config": "数据转换", - "title": "数据转换配置", - "hint": "字段格式:数据集别名.字段名", - "add": "添加规则", - "field": "字段", - "fieldPlaceholder": "如 order.status", - "type": "转换类型", - "configCol": "设置", - "extraTitle": "转换设置", - "addOption": "添加选项", - "option": "选项", - "optionId": "值", - "optionLabel": "显示名", - "dateFormat": "日期格式", - "precision": "小数位数", - "thousands": "千分位", - "types": { - "select": "枚举", - "date": "日期", - "number": "数字", - "user": "用户", - "department": "部门", - "organize": "组织", - "role": "角色", - "dictionary": "字典" - }, - "namesMap": "名称映射", - "namesPlaceholder": "ID:显示名,ID2:显示名2", - "dictionaryType": "字典类型", - "dictionaryTypePlaceholder": "请输入字典编码" - }, - "preview": { - "title": "预览", - "search": "查询", - "expressionCycle": "检测到表达式单元格存在循环引用,计算结果可能不正确", - "snapshotLarge": "预览结果单元格数量较大,可能影响性能", - "datasetRowWarn": "数据集「{alias}」行数较多,预览可能较慢", - "datasetRowLimit": "数据集「{alias}」已达到行数上限,结果可能被截断" - }, - "importExport": { - "export": "导出配置", - "import": "导入配置", - "exportSuccess": "报表配置已导出", - "exportFailed": "导出失败", - "importTitle": "导入报表配置", - "dragOrClick": "拖拽 JSON 文件到此处或点击上传", - "onlyJson": "仅支持 .json 格式文件", - "fileParseError": "文件解析失败,请确认文件格式正确", - "checking": "正在检查...", - "codeConflictTip": "报表编码已存在,请修改编码后再导入", - "codeAvailable": "报表编码可用,可以导入", - "newCodePlaceholder": "请输入新的报表编码", - "importSuccess": "报表配置导入成功", - "importFailed": "导入失败", - "confirmImport": "确认导入", - "reselect": "重新选择", - "reportInfo": "报表信息", - "appTip": "导入的报表将归属到当前应用;数据集按数据源编码匹配,未匹配的将跳过" - }, - "publishMenu": "发布到菜单", - "updateMenu": "更新菜单", - "unpublishMenu": "取消发布菜单", - "unpublishSuccess": "已取消发布: {name}", - "unpublishFailed": "取消发布失败", - "publishDialog": { - "title": "发布报表到菜单", - "success": "已发布到菜单", - "failed": "发布失败", - "confirm": "确认发布" - }, - "print": { - "title": "打印", - "notAllowed": "该报表不允许打印", - "browserPrint": "打印", - "previewTitle": "打印预览", - "imageWarn": "报表包含 {count} 张图片,打印可能较慢,是否继续?", - "failed": "打开打印预览失败,请重试" - }, - "printForm": { - "printArea": "打印范围", - "paperType": "纸张类型", - "padding": "纸张边距", - "direction": "纸张方向", - "scale": "页面缩放", - "hAlign": "左右对齐", - "vAlign": "上下对齐", - "gridlines": "网格线", - "workbookTitle": "报表名称", - "worksheetTitle": "工作表名称", - "printDate": "当前日期", - "printTime": "当前时间", - "pageNumber": "页码", - "yFreeze": "重复冻结行", - "xFreeze": "重复冻结列", - "options": { - "currentSheet": "当前工作表", - "portrait": "纵向", - "landscape": "横向", - "a4": "A4", - "a3": "A3", - "a5": "A5(14.8厘米 x 21.0厘米)", - "b4": "B4(25.0厘米 x 35.3厘米)", - "b5": "B5(17.6厘米 x 25.0厘米)", - "executive": "行政公文纸(18.4厘米 x 26.7厘米)", - "statement": "报表(14.0厘米 x 21.6厘米)", - "letter": "信纸", - "origin": "原始比例", - "fitWidth": "适应宽度", - "fitHeight": "适应高度", - "fitPage": "适应页面", - "normal": "正常", - "narrow": "窄边距", - "wide": "宽边距", - "hAlign": { - "start": "左对齐", - "middle": "水平居中", - "end": "右对齐" - }, - "vAlign": { - "start": "顶部对齐", - "middle": "垂直居中", - "end": "底部对齐" - } - } - }, - "image": { - "empty": "选中悬浮图片后可配置", - "source": "图片来源", - "sourceLocal": "本地上传", - "sourceUrl": "URL 地址", - "url": "图片地址", - "urlPlaceholder": "以 http:// 或 https:// 开头", - "upload": "上传图片", - "selectFile": "选择图片", - "uploadSuccess": "图片上传成功", - "uploadFailed": "图片上传失败" - }, - "settings": { - "title": "报表设置", - "allowExport": "允许导出", - "allowPrint": "允许打印", - "allowWatermark": "显示水印", - "allowExportTip": "开启后,预览和运行时允许导出 Excel/PDF", - "allowPrintTip": "开启后,预览和运行时允许打印", - "allowWatermarkTip": "开启后,预览和运行时显示水印", - "watermarkText": "水印文字", - "watermarkPlaceholder": "请输入水印文字", - "watermarkShowTime": "水印显示时间", - "watermarkTimeFormat": "时间格式", - "loadFailed": "加载报表设置失败" - }, - "pdfExport": { - "title": "导出 PDF", - "success": "PDF 导出成功", - "failed": "PDF 导出失败" - }, - "version": { - "title": "版本管理", - "hint": "切换、复制或删除历史版本", - "switch": "切换", - "loadFailed": "加载版本列表失败", - "deleteConfirm": "确定删除版本 v{version} 吗?", - "deleteSuccess": "版本已删除", - "deleteFailed": "删除版本失败", - "cannotDeleteActive": "不能删除启用中的版本", - "state": { - "0": "设计中", - "1": "启用中", - "2": "已归档" - } - }, - "fieldMapping": { - "title": "字段映射", - "hint": "配置数据源字段到数据集别名的映射", - "add": "添加映射", - "sourceField": "源字段", - "targetField": "目标字段", - "sourcePlaceholder": "数据源字段名", - "targetPlaceholder": "映射后的字段名" - }, - "releaseMenu": { - "existingTitle": "已发布菜单", - "existingHint": "当前菜单:{title}({path}),重新发布将更新菜单配置" - }, - "export": { - "title": "导出 Excel", - "success": "导出成功", - "failed": "导出失败", - "notAllowed": "该报表不允许导出" - }, - "chart": { - "empty": "选中悬浮图表后可配置", - "cellEmpty": "选中单元格内嵌图表后可配置", - "cellTitle": "单元格图表", - "type": "图表类型", - "title": "图表标题", - "datasetHint": "数据集别名", - "dataSet": "绑定数据集", - "classifyField": "分类字段", - "maxField": "雷达最大值字段", - "legendShow": "显示图例", - "legendOrient": "图例布局", - "legendOrientHorizontal": "横排", - "legendOrientVertical": "竖排", - "legendFontSize": "图例字体大小", - "styleType": "图表样式", - "lineArea": "面积填充", - "pieRose": "玫瑰图", - "pieShowZero": "隐藏零值", - "layoutSection": "布局与配色", - "gridTop": "上边距", - "gridLeft": "左边距", - "gridRight": "右边距", - "gridBottom": "下边距", - "legendLeft": "图例水平(%)", - "legendTop": "图例垂直(%)", - "colorList": "系列配色", - "addColor": "添加颜色", - "colorListPlaceholder": "如 #5470c6,#91cc75,#fac858", - "seriesCenterLeft": "饼图中心水平(%)", - "seriesCenterTop": "饼图中心垂直(%)", - "seriesNameField": "系列名称字段", - "seriesDataField": "系列数值字段", - "summaryType": "汇总方式", - "fieldPlaceholder": "如 sales.month 或 month", - "types": { - "bar": "柱状图", - "line": "折线图", - "pie": "饼图", - "radar": "雷达图" - }, - "styleTypes": { - "barDefault": "默认柱状", - "barStack": "堆叠柱状", - "lineDefault": "默认折线", - "lineSmooth": "平滑曲线", - "lineStack": "堆叠折线", - "pieDefault": "实心饼图", - "pieRing": "环形饼图", - "radarPolygon": "多边形雷达", - "radarCircle": "圆形雷达" - }, - "summary": { - "none": "原值", - "sum": "求和", - "avg": "平均", - "max": "最大", - "min": "最小", - "count": "计数" - } - }, - "properties": { - "title": "单元格属性", - "empty": "请在表格中选中单元格", - "position": "位置:第 {row} 行,第 {col} 列", - "cellType": "单元格类型", - "typeText": "文本", - "textParamHint": "文本单元格可直接写 #'{'参数名'}',预览时自动替换", - "typeDataSource": "数据源", - "typeParameter": "参数", - "typeQrCode": "二维码", - "typeBarcode": "条形码", - "typeExpression": "表达式", - "expressionFormula": "表达式", - "expressionPlaceholder": "如 =A1+sum(sales.amount) 或 =sum(A1:B2)", - "expressionHint": "支持 A1/B2 引用、sum(A1:B2)、sum(别名.字段)、#'{'参数'}'、+ - * /", - "dataset": "数据集别名", - "field": "绑定字段", - "fieldPlaceholder": "如 name 或 user.name", - "displayType": "显示类型", - "displayDefault": "默认", - "expand": "扩展方向", - "expandNone": "不扩展", - "expandDown": "向下列表", - "expandRight": "向右列表", - "polymerizationType": "聚合方式", - "polyList": "列表", - "polyGroup": "分组", - "polySummary": "汇总", - "summaryType": "汇总类型", - "groupType": "分组方式", - "groupDefault": "默认分组", - "groupAdjacent": "相邻连续分组", - "mergeCell": "合并单元格", - "fillEmptyRows": "列表后补空行", - "fillEmptyNum": "补空行数", - "leftParent": "左父格", - "topParent": "上父格", - "leftParentCustom": "左父格位置(列名+行号)", - "topParentCustom": "上父格位置(列名+行号)", - "leftParentHint": "扩展或汇总时,从本格同一行向左找最近的数据源单元格,用于限定数据分组范围。纯文本单元格无需配置。", - "topParentHint": "扩展或汇总时,从本格同一列向上找最近的数据源单元格,用于限定数据层级。合计行通常选「无」;分组小计可选「自定义」指向分组格。", - "parentType": { - "none": "无", - "default": "默认", - "custom": "自定义" - }, - "paramField": "参数字段名", - "apply": "应用到单元格" - }, - "code": { - "content": "编码内容", - "contentPlaceholder": "静态文本或 #'{'参数名'}'", - "paramHint": "支持 #'{'field'}' 引用查询参数,预览时自动替换", - "qrLevel": "纠错级别", - "barcodeFormat": "条形码格式" - }, - "render": { - "codeRequired": "报表编码不能为空", - "loadFailed": "加载报表失败", - "empty": "暂无预览数据" - }, - "univerPlaceholder": { - "title": "Univer 报表设计器", - "desc": "Phase 1 骨架已就绪,完整 @univerjs 表格引擎将在下一阶段接入。" - } -} diff --git a/web/apps/web-ele/src/locales/langs/zh-CN/system-config.json b/web/apps/web-ele/src/locales/langs/zh-CN/system-config.json deleted file mode 100644 index af98f8b..0000000 --- a/web/apps/web-ele/src/locales/langs/zh-CN/system-config.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "title": "系统配置", - "ssoConfig": "SSO配置", - "notifyConfig": "通知配置", - "modelConfig": "模型配置", - "save": "保存", - "reset": "恢复默认", - "resetConfirm": "确定要恢复该分组为默认配置吗?这将删除数据库中的自定义配置,恢复为环境变量的默认值。", - "saveSuccess": "保存成功", - "saveError": "保存失败", - "resetSuccess": "已恢复为默认配置", - "resetError": "恢复失败", - "warmupSuccess": "缓存预热完成", - "clearCacheSuccess": "缓存已清除", - "secretTip": "敏感字段,显示为脱敏值。留空或保持脱敏值不会修改原值。", - "groups": { - "oauth_gitee": "Gitee", - "oauth_github": "GitHub", - "oauth_qq": "QQ", - "oauth_google": "Google", - "oauth_wechat": "微信", - "oauth_microsoft": "Microsoft", - "oauth_dingtalk": "钉钉", - "oauth_feishu": "飞书", - "oauth_wecom": "企业微信", - "notify_email": "邮件通知", - "notify_dingtalk": "钉钉通知", - "notify_feishu": "飞书通知", - "notify_wecom": "企业微信通知", - "notify_sms": "短信通知", - "notify_wechat_mp": "微信公众号" - }, - "fields": { - "client_id": "Client ID", - "client_secret": "Client Secret", - "redirect_uri": "Web 回调地址", - "h5_redirect_uri": "H5 回调地址", - "app_id": "App ID", - "app_key": "App Key", - "app_secret": "App Secret", - "corp_id": "Corp ID", - "agent_id": "Agent ID", - "smtp_host": "SMTP 服务器", - "smtp_port": "SMTP 端口", - "smtp_user": "SMTP 用户名", - "smtp_password": "SMTP 密码", - "smtp_use_tls": "使用 TLS", - "smtp_from_name": "发件人名称", - "smtp_from_email": "发件人邮箱", - "webhook_url": "Webhook 地址", - "webhook_secret": "Webhook 密钥", - "template_id": "模板 ID", - "url": "跳转链接", - "mini_appid": "小程序 AppID", - "mini_page": "小程序页面路径", - "provider": "服务商", - "providerAliyun": "阿里云", - "providerTencent": "腾讯云", - "aliyun_access_key_id": "阿里云 AccessKey ID", - "aliyun_access_key_secret": "阿里云 AccessKey Secret", - "aliyun_sign_name": "阿里云短信签名", - "aliyun_template_code": "阿里云短信模板编号", - "tencent_secret_id": "腾讯云 SecretId", - "tencent_secret_key": "腾讯云 SecretKey", - "tencent_sdk_app_id": "腾讯云 SDKAppID", - "tencent_sign_name": "腾讯云短信签名", - "tencent_template_id": "腾讯云短信模板 ID", - "todo_pc_url": "待办 PC 端跳转地址", - "todo_app_url": "待办移动端跳转地址" - } -} diff --git a/web/apps/web-ele/src/locales/langs/zh-CN/ui-config.json b/web/apps/web-ele/src/locales/langs/zh-CN/ui-config.json deleted file mode 100644 index c835440..0000000 --- a/web/apps/web-ele/src/locales/langs/zh-CN/ui-config.json +++ /dev/null @@ -1,172 +0,0 @@ -{ - "title": "UI配置管理", - "name": "UI配置", - "styleConfig": "样式配置", - "configKey": "配置键", - "configKeyPlaceholder": "请输入配置键", - "configValue": "配置值", - "configValuePlaceholder": "请输入配置值(JSON格式)", - "configType": "配置类型", - "configTypePlaceholder": "请选择配置类型", - "description": "配置描述", - "descriptionPlaceholder": "请输入配置描述", - "status": "状态", - "sort": "排序", - "operation": "操作", - "edit": "编辑", - "keyFormatError": "配置键只能包含字母、数字、下划线和短横线", - "appConfig": "应用配置", - "themeConfig": "主题配置", - "logoConfig": "Logo配置", - "copyrightConfig": "版权配置", - "otherConfig": "其他配置", - "configList": "配置列表", - "configTypes": { - "preferences": "偏好设置", - "theme": "主题", - "logo": "Logo", - "copyright": "版权", - "other": "其他" - }, - "jsonFormatError": "JSON格式错误", - "save": "保存", - "saveSuccess": "保存成功", - "saveError": "保存失败", - "loadSuccess": "加载成功", - "loadError": "加载失败", - "previewConfig": "预览配置", - "applyConfig": "应用配置", - "app": { - "title": "应用配置", - "name": "应用名称", - "namePlaceholder": "请输入应用名称", - "defaultHomePath": "默认首页路径", - "defaultHomePathPlaceholder": "请输入默认首页路径", - "locale": "默认语言", - "dynamicTitle": "动态标题", - "dynamicTitleTip": "开启后,页面标题会根据当前路由动态变化", - "watermark": "水印", - "watermarkTip": "开启后,页面会显示水印", - "watermarkContent": "水印内容", - "watermarkContentPlaceholder": "请输入水印内容", - "enablePreferences": "启用偏好设置", - "enablePreferencesTip": "开启后,用户可以在界面上修改偏好设置", - "layout": "布局模式", - "layoutOptions": { - "sidebar-nav": "侧边导航", - "header-nav": "顶部导航", - "mixed-nav": "混合导航", - "header-sidebar-nav": "顶部+侧边导航" - } - }, - "theme": { - "mode": "主题模式", - "modeOptions": { - "light": "浅色", - "dark": "深色", - "auto": "跟随系统" - }, - "colorPrimary": "主题色", - "radius": "圆角大小", - "builtinType": "内置主题", - "semiDarkSidebar": "深色侧边栏", - "semiDarkHeader": "深色顶栏" - }, - "logo": { - "enable": "启用Logo", - "source": "Logo图片", - "sourcePlaceholder": "请输入Logo图片URL或上传", - "fit": "适应方式", - "fitOptions": { - "contain": "包含", - "cover": "覆盖", - "fill": "填充", - "none": "无", - "scale-down": "缩小" - } - }, - "copyright": { - "enable": "启用版权", - "companyName": "公司名称", - "companyNamePlaceholder": "请输入公司名称", - "companySiteLink": "公司网站", - "companySiteLinkPlaceholder": "请输入公司网站链接", - "date": "版权年份", - "datePlaceholder": "请输入版权年份", - "icp": "ICP备案号", - "icpPlaceholder": "请输入ICP备案号", - "icpLink": "ICP链接", - "icpLinkPlaceholder": "请输入ICP链接", - "policeIcp": "公安备案号", - "policeIcpPlaceholder": "请输入公安备案号", - "policeIcpLink": "公安备案链接", - "policeIcpLinkPlaceholder": "请输入公安备案链接", - "loginOnly": "仅登录页显示", - "loginOnlyTip": "开启后,版权信息仅在登录页面显示" - }, - "loginConfig": { - "title": "登录配置", - "enableThirdPartyLogin": "启用第三方登录", - "enableThirdPartyLoginTip": "开启后,登录页面将显示第三方登录区域", - "enabledProviders": "启用的登录方式", - "enabledProvidersTip": "选择需要在登录页面显示的第三方登录方式", - "providers": { - "gitee": "Gitee", - "github": "GitHub", - "google": "Google", - "microsoft": "Microsoft", - "qq": "QQ", - "wechat": "微信", - "wecom": "企业微信", - "dingtalk": "钉钉", - "feishu": "飞书" - } - }, - "modelConfig": "模型配置", - "model": { - "title": "模型配置", - "providerManagement": "提供商管理", - "modelManagement": "模型管理", - "addProvider": "添加提供商", - "editProvider": "编辑提供商", - "addModel": "添加模型", - "editModel": "编辑模型", - "addDefaultModels": "添加默认模型", - "providerName": "名称", - "providerType": "类型", - "providerDescription": "描述", - "apiKey": "API Key", - "apiBase": "API 地址", - "ollamaHost": "Ollama 地址", - "modelName": "模型名称", - "displayName": "显示名称", - "modelType": "模型类型", - "maxTokens": "最大 Token", - "supportsVision": "支持视觉", - "supportsFunction": "支持函数", - "enabled": "启用", - "status": "状态", - "operation": "操作", - "test": "测试", - "selectProvider": "选择提供商", - "chatModel": "对话模型", - "embeddingModel": "向量模型", - "completionModel": "补全模型", - "rerankModel": "重排序模型", - "chat": "对话", - "embedding": "向量", - "rerank": "重排序", - "addSelected": "添加选中", - "noDefaultModels": "暂无默认模型", - "addedModels": "已添加模型", - "availableModels": "可选模型", - "addAll": "全部添加", - "added": "已添加", - "refreshModels": "刷新模型", - "sourceApi": "在线拉取", - "sourceDefault": "默认列表", - "fetchFromApiSuccess": "已从提供商 API 拉取最新模型列表", - "fetchFromApiFallback": "在线拉取失败,已使用默认模型列表", - "searchModel": "搜索模型" - } -} diff --git a/web/apps/web-ele/src/locales/langs/zh-CN/workflow.json b/web/apps/web-ele/src/locales/langs/zh-CN/workflow.json deleted file mode 100644 index 536e58a..0000000 --- a/web/apps/web-ele/src/locales/langs/zh-CN/workflow.json +++ /dev/null @@ -1,310 +0,0 @@ -{ - "workflow": "工作流", - "title": "流程标题", - "type": "流程类型", - "status": "状态", - "currentNode": "当前节点", - "startTime": "发起时间", - "endTime": "完成时间", - "actions": "操作", - "details": "详情", - "recall": "撤回", - "recallConfirm": "撤回确认", - "recallConfirmMsg": "确定要撤回该流程吗?撤回后将无法恢复。", - "recallSuccess": "撤回成功", - "recallFailed": "撤回失败", - "statusMap": { - "pending": "审批中", - "approved": "已通过", - "rejected": "已拒绝", - "canceled": "已撤回", - "transferred": "已转交" - }, - "nodeName": "处理节点", - "result": "处理结果", - "initiator": "发起人", - "handleTime": "处理时间", - "workflowType": { - "label": "流程类型", - "approval": "审批流程", - "application": "申请流程", - "business": "业务流程", - "hr": "人事流程", - "finance": "财务流程", - "admin": "行政流程", - "other": "其他流程" - }, - "manager": { - "title": "工作流管理", - "add": "新增工作流", - "edit": "编辑工作流", - "view": "查看工作流", - "basicInfo": "基本信息", - "design": "流程设计", - "editInfo": "编辑信息", - "name": "流程名称", - "code": "流程编码", - "workflowType": "流程类型", - "icon": "流程图标", - "iconBgColor": "图标背景色", - "preview": "预览", - "form": "关联表单", - "category": "分类", - "version": "版本", - "updatedAt": "更新时间", - "remark": "流程描述", - "sort": "排序", - "addProcess": "新增流程", - "batchDelete": "批量删除", - "batchDeleteWithCount": "批量删除 ({count})", - "publish": "发布", - "disable": "停用", - "copy": "复制", - "status": { - "draft": "草稿", - "published": "已发布", - "disabled": "已停用" - }, - "placeholder": { - "title": "请输入流程标题", - "workflowType": "请选择流程类型", - "icon": "请选择流程图标", - "iconBgColor": "输入自定义颜色或渐变色", - "status": "请选择状态", - "name": "请输入流程名称", - "code": "请输入流程编码", - "form": "请选择关联表单", - "remark": "请输入流程描述", - "sort": "数值越小越靠前,默认为0", - "copyCode": "请输入新流程的编码" - }, - "validate": { - "name": "请输入流程名称", - "code": "请输入流程编码", - "codeFormat": "编码必须以字母开头,只能包含字母、数字和下划线", - "form": "请选择关联表单", - "design": "流程设计不完整" - }, - "message": { - "deleteConfirm": "确定要删除这个流程吗?", - "deleteConfirmTitle": "删除确认", - "deleteSuccess": "删除成功", - "selectToDelete": "请先选择要删除的流程", - "batchDeleteConfirm": "确定要删除选中的 {count} 个流程吗?", - "batchDeleteConfirmTitle": "批量删除确认", - "publishConfirm": "确定要发布这个流程吗?发布后可被使用。", - "publishConfirmTitle": "发布确认", - "publishSuccess": "发布成功", - "disableConfirm": "确定要停用这个流程吗?停用后将无法发起新流程。", - "disableConfirmTitle": "停用确认", - "disableSuccess": "停用成功", - "copyConfirmTitle": "复制流程", - "copySuccess": "复制成功", - "copySuffix": "副本", - "loadFailed": "加载数据失败", - "saveSuccess": "保存成功", - "createSuccess": "创建成功" - }, - "autoSave": { - "saving": "保存中...", - "saved": "已保存", - "unsaved": "未保存" - }, - "steps": { - "basic": "基本信息", - "design": "流程设计" - }, - "importExport": { - "export": "导出", - "import": "导入配置", - "exportSuccess": "流程配置已导出", - "exportFailed": "导出失败", - "importTitle": "导入流程配置", - "dragOrClick": "拖拽 JSON 文件到此处或点击上传", - "onlyJson": "仅支持 .json 格式文件", - "fileParseError": "文件解析失败,请确认包含 name、code、form_code 字段", - "checking": "正在检查...", - "codeConflictTip": "流程编码已存在,请修改编码后再导入", - "codeAvailable": "流程编码可用,可以导入", - "newCodePlaceholder": "请输入新的流程编码", - "importSuccess": "流程配置导入成功", - "importFailed": "导入失败", - "confirmImport": "确认导入", - "reselect": "重新选择", - "workflowInfo": "流程信息", - "appTip": "导入的流程将归属到当前应用,状态为草稿", - "bindingTip": "请确认关联的表单编码、单据模板编码在目标环境中存在并已发布" - } - }, - "pending": { - "title": "待办审批", - "approval": "审批", - "approve": "通过", - "reject": "拒绝", - "submit": "提交", - "comment": "审批意见", - "commentPlaceholder": "请输入审批意见", - "result": "审批结果", - "success": "处理成功", - "taskType": "任务类型", - "timeoutStatus": "超时状态", - "arriveTime": "到达时间", - "isTimeout": "已超时", - "aboutToTimeout": "即将超时", - "deadline": "截止时间", - "daysAfter": "{count}天后", - "hoursAfter": "{count}小时后", - "minutesAfter": "{count}分钟后", - "view": "查看", - "handle": "办理", - "modify": "修改", - "cc": "抄送", - "copyDetail": "抄送详情", - "reviseSubmit": "修改并重新提交", - "copyAction": "抄送操作", - "handleAction": "办理操作", - "reviseAction": "修改操作", - "approvalAction": "审批操作", - "signComment": "加签说明", - "delegateComment": "委派说明", - "rejectReason": "拒绝原因", - "returnReason": "驳回原因", - "transferComment": "转办说明", - "signPlaceholder": "选填,可输入加签说明", - "approvalPlaceholder": "选填,可输入审批意见", - "delegatePlaceholder": "选填,可输入委派说明", - "rejectPlaceholder": "请填写拒绝原因", - "returnPlaceholder": "请填写驳回原因", - "transferPlaceholder": "选填,可输入转办说明", - "fetchDetailFailed": "加载任务详情失败", - "markReadSuccess": "已标记为已阅", - "handleSuccess": "办理完成", - "actionFailed": "操作失败", - "selectSignUser": "请选择加签人", - "signSuccess": "加签成功", - "approveSuccess": "审批通过", - "signature": "签名", - "signaturePlaceholder": "请在此处签名", - "signatureRequired": "该审批节点要求签名,请先签名", - "selectDelegateUser": "请选择委派人", - "delegateSuccess": "已委派", - "rejectCommentRequired": "拒绝时请填写审批意见", - "rejectSuccess": "已拒绝", - "returnCommentRequired": "驳回时请填写审批意见", - "returnSuccess": "已驳回", - "selectTransferUser": "请选择转办人", - "transferSuccess": "已转办", - "unsupportedAction": "暂不支持此操作", - "continueHandle": "继续处理", - "actionSuccess": "操作成功", - "viewHandled": "查看已办", - "reviseSuccess": "已重新提交", - "markRead": "已阅", - "formContent": "表单内容", - "emptyForm": "暂无表单内容", - "processInfo": "流程信息", - "returnTo": "驳回至", - "initiator": "发起人", - "previousNode": "上一节点", - "transferTo": "转办给", - "delegateTo": "委派给", - "signType": "加签类型", - "beforeSign": "前加签", - "afterSign": "后加签", - "parallelSign": "并行加签", - "beforeSignTip": "加签人先审批,审批通过后回到您继续审批", - "afterSignTip": "您先审批通过,再由加签人审批", - "parallelSignTip": "您和加签人同时审批", - "signUser": "加签人", - "selectSignUserPlaceholder": "请选择加签人(可多选)", - "handleTip": "请查看表单内容后点击\"提交\"完成办理", - "handleComment": "办理意见", - "handleCommentPlaceholder": "选填,可输入办理意见", - "copyTip": "此为抄送任务,仅供查阅。点击\"已阅\"确认查看。", - "reviseTip": "请修改左侧表单内容后点击\"提交\"重新发起审批。", - "modifyComment": "修改说明", - "modifyCommentPlaceholder": "选填,可输入修改说明", - "selectTask": "请从左侧选择一个待办任务", - "approvalInfo": "审批信息" - }, - "handled": { - "title": "已办任务" - }, - "initiated": { - "title": "我发起的", - "selectInstance": "请从左侧选择一个流程" - }, - "copy": { - "title": "抄送给我", - "ccNode": "抄送节点", - "ccTime": "抄送时间" - }, - "start": { - "title": "发起流程", - "select": "选择流程", - "form": "流程表单", - "searchPlaceholder": "搜索流程名称、编码或分类", - "fetchFailed": "加载流程列表失败", - "startSuccess": "流程发起成功,可在审批中心查看进度", - "start": "发起", - "submit": "提交", - "allWorkflows": "全部流程", - "noWorkflows": "暂无可发起的流程", - "workflowTitle": "流程标题", - "titlePlaceholder": "请输入流程标题", - "titleHint": "建议格式:申请人 + 流程类型,便于审批人识别", - "formInfo": "表单信息", - "loadConfigFailed": "加载表单配置失败", - "titleRequired": "请输入流程标题", - "formInvalid": "请检查表单填写是否正确", - "startFailed": "发起流程失败", - "submitSuccess": "流程发起成功", - "submitSuccessHint": "您的申请已提交,请等待审批", - "workflowName": "流程名称", - "instanceNo": "流程编号", - "viewDetail": "查看详情", - "continueStart": "继续发起", - "backToList": "返回列表", - "approvalPath": "审批路径", - "showFlow": "显示流程", - "hideFlow": "关闭流程", - "loadingUsers": "加载中..." - }, - "validation": { - "title": "流程校验", - "passed": "通过", - "failed": "失败", - "warning": "警告", - "errorCount": "{count} 个错误", - "warningCount": "{count} 个警告", - "validating": "正在校验流程配置...", - "failedMsg": "校验未通过,请修正后重试", - "passedMsg": "校验通过,可以保存流程", - "ready": "准备校验", - "checkCount": "共 {count} 项检查", - "confirmSave": "确认保存" - }, - "documents": "流程单据", - "viewDocuments": "查看单据", - "noDocuments": "暂无单据", - "pages": "页", - "documentTemplates": "绑定文档模板", - "selectDocumentTemplates": "选择文档模板", - "generateDocuments": "生成单据", - "generateDocumentsSuccess": "单据生成成功", - "generateDocumentsFailed": "单据生成失败", - "regenerateDocuments": "重新生成", - "regenerateDocumentsSuccess": "单据重新生成成功", - "regenerateDocumentsFailed": "单据重新生成失败", - "instanceManager": { - "title": "流程实例管理", - "detailTitle": "流程实例详情", - "instanceNo": "流程编号", - "application": "所属应用", - "searchTitle": "搜索流程标题", - "searchInstanceNo": "搜索流程编号", - "searchWorkflowName": "搜索流程名称", - "searchInitiator": "搜索发起人", - "searchStatus": "选择状态" - } -} diff --git a/web/apps/web-ele/src/locales/langs/zh-TW/about.json b/web/apps/web-ele/src/locales/langs/zh-TW/about.json deleted file mode 100644 index 4587e25..0000000 --- a/web/apps/web-ele/src/locales/langs/zh-TW/about.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "title": "關於項目", - "basicInfo": "基本信息", - "productionDependencies": "生產環境依賴", - "devDependencies": "開發環境依賴", - "version": "版本號", - "license": "開源許可協議", - "buildTime": "最後構建時間", - "homepage": "主頁", - "docUrl": "文檔地址", - "previewUrl": "預覽地址", - "github": "Github", - "author": "作者", - "viewDetails": "點擊查看" -} diff --git a/web/apps/web-ele/src/locales/langs/zh-TW/account-settings.json b/web/apps/web-ele/src/locales/langs/zh-TW/account-settings.json deleted file mode 100644 index c27b97d..0000000 --- a/web/apps/web-ele/src/locales/langs/zh-TW/account-settings.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "passwordLengthHint": "密碼長度需為 6-20 位" -} diff --git a/web/apps/web-ele/src/locales/langs/zh-TW/ai-platform.json b/web/apps/web-ele/src/locales/langs/zh-TW/ai-platform.json deleted file mode 100644 index a14ac8c..0000000 --- a/web/apps/web-ele/src/locales/langs/zh-TW/ai-platform.json +++ /dev/null @@ -1,2509 +0,0 @@ -{ - "agent": { - "title": "智能體", - "create": "建立智能體", - "createSuccess": "建立成功", - "createFailed": "建立失敗", - "saveSuccess": "儲存成功", - "saveFailed": "儲存失敗", - "publishSuccess": "發布成功", - "publishFailed": "發布失敗", - "disableSuccess": "已停用", - "deleteSuccess": "刪除成功", - "deleteFailed": "刪除失敗", - "deleteConfirm": "確定要刪除智能體「{name}」嗎?", - "deleteTitle": "刪除確認", - "unpublishMenuSuccess": "取消發布菜單成功", - "operationFailed": "操作失敗", - "fillNameAndCode": "請填寫名稱和編碼", - "codeFormatError": "編碼必須以字母開頭,只能包含字母、數字和下劃線", - "searchPlaceholder": "搜尋智能體名稱", - "search": "搜尋", - "noDescription": "暫無描述", - "empty": "暫無智能體", - "mainApp": "主應用", - "edit": "編輯", - "delete": "刪除", - "chat": "對話", - "publish": "發布", - "publishToMenu": "發布智能體到菜單", - "publishDialog": { - "menuConfig": "菜單設定", - "menuName": "菜單名稱", - "menuNamePlaceholder": "請輸入菜單名稱", - "parentMenu": "上級菜單", - "parentMenuPlaceholder": "請選擇上級菜單", - "menuIcon": "菜單圖標", - "routeInfo": "路由資訊", - "accessPath": "訪問路徑" - }, - "unpublishMenu": "取消發布菜單", - "disable": "停用", - "back": "返回", - "save": "儲存", - "cancel": "取消", - "loading": "載入中...", - "status": { - "draft": "草稿", - "published": "已發布", - "disabled": "已停用" - }, - "mode": { - "autonomous": "自主規劃", - "dialogFlow": "對話流", - "autonomousLabel": "自主規劃模式", - "dialogFlowLabel": "對話流模式", - "autonomousDesc": "Agent 自動拆解任務並執行", - "dialogFlowDesc": "按預定義流程與用戶互動" - }, - "form": { - "name": "名稱", - "namePlaceholder": "請輸入智能體名稱", - "code": "編碼", - "codePlaceholder": "請輸入唯一編碼", - "appCode": "應用編碼", - "mode": "模式", - "description": "描述", - "descriptionPlaceholder": "請輸入描述", - "globalVisible": "子應用可見" - }, - "importExport": { - "export": "匯出", - "import": "匯入配置", - "exportSuccess": "智能體配置已匯出", - "exportFailed": "匯出失敗", - "importTitle": "匯入智能體配置", - "dragOrClick": "拖拽 JSON 檔案到此處或點擊上傳", - "onlyJson": "僅支援 .json 格式檔案", - "fileParseError": "檔案解析失敗,請確認檔案格式正確", - "checking": "正在檢查...", - "codeConflictTip": "智能體編碼已存在,請修改編碼後再匯入", - "codeAvailable": "智能體編碼可用,可以匯入", - "newCodePlaceholder": "請輸入新的智能體編碼", - "importSuccess": "智能體配置匯入成功", - "importFailed": "匯入失敗", - "confirmImport": "確認匯入", - "reselect": "重新選擇", - "agentInfo": "智能體資訊", - "modelName": "模型", - "workflowCode": "關聯工作流", - "appTip": "匯入的智能體將歸屬到當前應用,狀態為草稿", - "refTip": "模型、工作流、知識庫按編碼/名稱匹配;目標環境缺失時匯入後需在編輯器中重新配置" - }, - "basicInfo": "基本資訊", - "runMode": "運行模式", - "runModeTooltip": "自主規劃模式:Agent 自動理解用戶意圖並回答,適合通用問答;對話流模式:按預定義的工作流步驟與用戶互動,適合固定流程場景", - "relatedWorkflow": "關聯工作流", - "relatedWorkflowTooltip": "選擇一個已發布的工作流,對話流模式下智能體將按照工作流定義的步驟與用戶互動", - "selectWorkflow": "請選擇工作流", - "dialogFlowHint": "對話流模式需要關聯一個工作流,工作流中可以使用問答節點、選項節點等互動式節點", - "conversationMemory": "對話記憶", - "conversationMemoryTooltip": "啟用後,工作流中的 LLM 節點可以存取歷史對話內容,讓回答更連貫", - "enabled": "已啟用", - "notEnabled": "未啟用", - "memoryWindow": "記憶窗口", - "memoryWindowTooltip": "LLM 節點可以存取最近 N 輪對話歷史,數值越大記憶越長但消耗 Token 越多", - "rounds": "輪對話", - "agentDescription": "智能體描述...", - "persona": { - "title": "人設配置", - "role": "角色定位", - "roleTooltip": "定義智能體的核心身份和職責,例如'你是一個專業的數據分析師',這將影響 AI 的回答風格和專業度", - "rolePlaceholder": "例如:你是一個專業的數據分析師,擅長處理複雜的數據問題...", - "personality": "性格特點", - "personalityTooltip": "設定智能體的性格特徵,如'嚴謹''友善''幽默'等,影響回答的語氣和風格", - "personalityPlaceholder": "輸入性格特點,按 Enter 新增", - "skills": "技能", - "skillsTooltip": "列出智能體擅長的能力領域,如'數據分析''程式碼審查'等,幫助 AI 更好地理解自己的能力邊界", - "skillsPlaceholder": "輸入技能,按 Enter 新增", - "constraints": "約束條件", - "constraintsTooltip": "設定智能體必須遵守的規則,如'不討論政治話題''回答必須基於事實'等,防止 AI 越界", - "constraintsPlaceholder": "輸入約束條件,按 Enter 新增", - "background": "背景介紹", - "backgroundTooltip": "提供智能體的詳細背景資訊,如所屬公司、業務領域、服務對象等,幫助 AI 更好地理解業務上下文", - "backgroundPlaceholder": "詳細的背景介紹...", - "add": "新增" - }, - "prompt": { - "title": "系統提示詞", - "tooltip": "直接給 AI 的指令文字,優先級高於人設配置。留空則自動根據人設生成", - "placeholder": "直接編寫系統提示詞,或留空使用人設自動生成..." - }, - "model": { - "title": "模型配置", - "label": "模型", - "tooltip": "選擇智能體使用的大語言模型,不同模型在能力、速度和成本上有差異", - "placeholder": "請選擇模型", - "temperature": "溫度 (Temperature)", - "temperatureTooltip": "控制回答的隨機性,值越低回答越穩定確定,值越高越有創造性但可能不準確。推薦:嚴謹場景 0.1~0.3,通用對話 0.5~0.7,創意寫作 0.8~1.2", - "maxToken": "最大 Token", - "maxTokenTooltip": "單次回答的最大輸出長度(Token 數),約 1 Token ≈ 1.5 個中文字。值越大回答可以越長但成本越高", - "maxIterations": "最大推理輪數", - "maxIterationsTooltip": "Agent 在一次對話中最多進行的思考-行動循環次數,防止無限循環,一般 5~10 輪即可", - "streaming": "流式輸出", - "streamingTooltip": "啟用後 AI 回覆將逐字輸出,用戶無需等待完整回答生成,體驗更流暢" - }, - "knowledgeBase": { - "title": "知識庫", - "label": "關聯知識庫", - "placeholder": "選擇要關聯的知識庫", - "hint": "選擇知識庫後,用戶每次提問時會自動檢索相關內容作為上下文,提升回答準確性", - "documents": "文檔", - "retrievalMode": "檢索模式", - "retrievalModeTooltip": "混合檢索:同時使用語義向量和關鍵詞匹配,綜合排序,適合大多數場景;向量語義檢索:基於語義相似度匹配,擅長理解同義詞和語義關聯;全文關鍵詞檢索:基於關鍵詞精確匹配,適合專業術語或編號查詢", - "hybridRecommended": "混合檢索(推薦)", - "vectorSearch": "向量語義檢索", - "fulltextSearch": "全文關鍵詞檢索", - "topK": "返回數量 (Top K)", - "topKTooltip": "每次檢索返回的最相關文檔分段數量,數值越大上下文越豐富但可能引入噪音,建議 3~5", - "scoreThreshold": "相似度閾值", - "scoreThresholdTooltip": "只返回相似度高於此閾值的結果,值越高匹配越精確但可能遺漏相關內容,建議 0.5~0.7" - }, - "welcome": { - "title": "開場白", - "tooltip": "用戶首次進入對話時自動顯示的歡迎語,可用於介紹智能體能力或引導用戶提問", - "placeholder": "智能體開始對話時的歡迎語..." - }, - "suggestions": { - "title": "推薦問題", - "hint": "推薦問題會在對話開始時顯示,幫助用戶快速開始對話", - "placeholder": "輸入推薦問題", - "inputPlaceholder": "輸入推薦問題,按 Enter 新增", - "add": "新增", - "empty": "暫無推薦問題,新增一些問題幫助用戶快速開始對話" - }, - "debug": { - "inputPlaceholder": "輸入訊息進行除錯...", - "publishFirst": "請先發布智能體" - }, - "chatPanel": { - "inputPlaceholder": "輸入訊息...", - "sendToStart": "發送訊息開始對話", - "publishFirst": "請先發布智能體後再進行對話", - "executionFailed": "執行失敗", - "waitingInput": "等待輸入...", - "selectPrompt": "請選擇:", - "confirm": "確認", - "confirmContinue": "請確認是否繼續?", - "inputPrompt": "請輸入:", - "feedbackThanks": "感謝您的回饋", - "confirmDesign": "確認設計", - "confirmAppDesign": "確認應用設計", - "appDesignTitle": "應用設計方案", - "designPreview": "設計預覽", - "designPanelHint": "請在右側面板中確認或編輯設計", - "aiDeveloping": "AI 正在開發...", - "analyzingAndGenerating": "正在分析需求並生成程式碼", - "cancelText": "取消" - }, - "codeRequired": "缺少智能體編碼", - "loadFailed": "加載智能體失敗", - "notFound": "智能體不存在", - "knowledge": { - "annotationReply": "標註直接回覆", - "annotationReplyTip": "啟用後,當用戶問題與標註的相似度超過閾值時,直接返回標註答案,跳過 LLM 調用,零 token 消耗,回應更快。未命中時仍走正常 RAG 流程。", - "annotationThreshold": "標註匹配閾值", - "annotationThresholdTip": "相似度超過此閾值時直接返回標註答案。建議設置 0.9 以上,避免誤匹配。" - } - }, - "conversation": { - "history": "歷史記錄", - "new": "新對話", - "empty": "暫無對話記錄", - "untitled": "未命名對話", - "messages": "條訊息", - "loadFailed": "加載對話列表失敗", - "deleteConfirm": "確定要刪除這個對話嗎?", - "deleteSuccess": "刪除成功", - "deleteFailed": "刪除失敗" - }, - "appSettings": { - "title": "應用設置", - "appConfig": "應用配置", - "logoConfig": "Logo配置", - "themeConfig": "主題配置", - "layoutConfig": "佈局配置", - "appName": "應用名稱", - "appNamePlaceholder": "請輸入應用名稱", - "defaultHomePath": "默認首頁", - "defaultHomePathPlaceholder": "請輸入默認首頁路徑", - "enablePreferences": "啟用偏好設置", - "logoEnable": "啟用Logo", - "logoSource": "Logo圖片", - "logoSourcePlaceholder": "請輸入Logo圖片URL或上傳", - "logoFit": "適應方式", - "builtinTheme": "內置主題", - "primaryColor": "主題色", - "themeMode": "主題模式", - "layout": "佈局模式", - "layoutOptions": { - "sidebar-nav": "側邊導航", - "sidebar-mixed-nav": "側邊混合導航", - "header-nav": "頂部導航", - "mixed-nav": "混合導航", - "full-content": "全屏內容" - }, - "themeOptions": { - "default": "默認", - "violet": "紫羅蘭", - "pink": "粉紅", - "rose": "玫瑰", - "sky": "天藍", - "cyan": "青色", - "green": "綠色", - "orange": "橙色", - "yellow": "黃色", - "zinc": "鋅色", - "neutral": "中性", - "slate": "石板", - "gray": "灰色", - "deep-blue": "深藍", - "deep-green": "深綠" - }, - "themeModeOptions": { - "light": "淺色", - "dark": "深色", - "auto": "跟隨系統" - }, - "fitOptions": { - "contain": "包含", - "cover": "覆蓋", - "fill": "填充", - "none": "無", - "scale-down": "縮小" - } - }, - "dashboard": { - "basicInfo": { - "title": "儀表盤基礎信息", - "name": "儀表盤名稱", - "namePlaceholder": "請輸入儀表盤名稱", - "code": "儀表盤編碼", - "codePlaceholder": "請輸入儀表盤編碼", - "category": "分類", - "categoryPlaceholder": "請選擇分類", - "description": "描述", - "descriptionPlaceholder": "請輸入描述", - "sort": "排序", - "requireConfirmation": "需要確認", - "categoryOptions": { - "dashboard": "儀表盤", - "portal": "門戶", - "databoard": "數據看板", - "other": "其他" - } - }, - "design": { - "title": "儀表盤設計", - "designTitle": "設計標題", - "designSuggestion": "設計建議", - "requireConfirmation": "需要確認" - }, - "create": { - "title": "儀表盤創建", - "basicInfo": "基礎信息", - "pageConfig": "頁面配置", - "applicationId": "應用ID", - "updateIfExists": "如果存在則更新" - }, - "publish": { - "title": "儀表盤發布", - "dashboardId": "儀表盤ID", - "menuName": "菜單名稱", - "menuParentId": "父菜單ID", - "menuIcon": "菜單圖標", - "menuOrder": "菜單排序" - } - }, - "systemSummary": { - "title": "系統創建完成", - "subtitle": "以下是AI為您創建的系統模組", - "app": "應用", - "formModules": "表單模組", - "dashboard": "儀表盤", - "appInfo": "應用信息", - "formModulesTitle": "功能模組", - "dashboardTitle": "數據儀表盤", - "visit": "訪問", - "complete": "完成", - "noData": "暫無創建的模組" - }, - "knowledge": { - "title": "知識庫", - "create": "建立知識庫", - "edit": "編輯知識庫", - "delete": "刪除知識庫", - "deleteConfirm": "確定要刪除該知識庫嗎?刪除後所有文件和分段資料將不可恢復。", - "deleteSuccess": "刪除成功", - "createSuccess": "建立成功", - "saveSuccess": "儲存成功", - "name": "名稱", - "namePlaceholder": "請輸入知識庫名稱", - "code": "編碼", - "codePlaceholder": "請輸入唯一編碼(英文)", - "description": "描述", - "descriptionPlaceholder": "請輸入描述", - "embeddingModel": "Embedding 模型", - "embeddingModelPlaceholder": "請選擇 Embedding 模型", - "dimensions": "向量維度", - "chunkStrategy": "分塊策略", - "chunkSize": "分塊大小", - "chunkOverlap": "分塊重疊", - "retrievalMode": "檢索模式", - "topK": "返回數量", - "scoreThreshold": "相似度閾值", - "rerank": "重排序", - "status": "狀態", - "active": "啟用", - "disabled": "停用", - "globalVisible": "子應用可見", - "documents": "文件", - "segments": "分段", - "tokens": "Tokens", - "noDescription": "暫無描述", - "mainApp": "主應用", - "search": "搜尋", - "searchPlaceholder": "搜尋知識庫名稱", - "document": { - "title": "文件管理", - "add": "新增文件", - "batchAdd": "批次新增", - "delete": "刪除文件", - "deleteConfirm": "確定要刪除該文件嗎?", - "deleteSuccess": "刪除成功", - "reindex": "重新索引", - "reindexSuccess": "已開始重新索引", - "reindexAll": "全部重新索引", - "reindexAllConfirm": "確定要重新索引所有文件嗎?這可能需要較長時間。", - "reindexAllSuccess": "已開始重新索引所有文件", - "duplicateWarning": "內容重複提示", - "enable": "啟用", - "disable": "停用", - "pending": "待處理", - "indexing": "索引中", - "completed": "已完成", - "failed": "失敗", - "searchPlaceholder": "搜尋文件名稱", - "selectFile": "選擇檔案", - "addSuccess": "文件新增成功,正在背景索引", - "uploadPlaceholder": "點擊上傳或拖曳檔案,支援 PDF、Word、TXT、Markdown 等格式" - }, - "segment": { - "title": "分段管理", - "add": "新增分段", - "edit": "編輯分段", - "delete": "刪除分段", - "deleteConfirm": "確定要刪除該分段嗎?", - "deleteSuccess": "刪除成功", - "content": "內容", - "contentPlaceholder": "請輸入分段內容", - "keywords": "關鍵詞", - "enabled": "已啟用", - "disabled": "已停用", - "searchPlaceholder": "搜尋分段內容", - "embeddingCompleted": "向量化成功", - "embeddingFailed": "向量化失敗" - }, - "annotation": { - "title": "標註管理", - "add": "新增標註", - "edit": "編輯標註", - "delete": "刪除標註", - "deleteConfirm": "確定要刪除該標註嗎?", - "deleteSuccess": "刪除成功", - "createSuccess": "建立成功", - "saveSuccess": "儲存成功", - "question": "問題", - "questionPlaceholder": "請輸入問題", - "answer": "答案", - "answerPlaceholder": "請輸入答案", - "searchPlaceholder": "搜尋標註內容", - "hitCount": "命中次數", - "enabled": "已啟用", - "disabled": "已停用", - "reindex": "重新向量化", - "reindexSuccess": "已提交向量化任務", - "vectorizing": "向量化中" - }, - "hitStats": { - "title": "命中統計", - "totalHits": "總命中次數", - "totalSegments": "總分段數", - "zeroHitCount": "未命中分段", - "hitCount": "命中次數", - "hitPercentage": "命中佔比", - "includeZero": "包含未命中", - "topN": "顯示數量", - "noData": "暫無命中資料" - }, - "retrievalLog": { - "title": "檢索日誌", - "query": "查詢內容", - "resultCount": "結果數", - "elapsed": "耗時", - "mode": "檢索模式", - "rerank": "重排序", - "source": "來源", - "time": "時間", - "searchPlaceholder": "搜尋查詢內容", - "noData": "暫無檢索日誌", - "sourceAgent": "智能體", - "sourceAnnotation": "標註回覆", - "sourceApi": "召回測試" - }, - "retrieval": { - "title": "召回測試", - "query": "查詢", - "queryPlaceholder": "請輸入查詢文字", - "test": "測試", - "results": "檢索結果", - "noResults": "未找到相關結果", - "score": "相似度", - "source": "來源", - "elapsed": "耗時", - "metadataFilterPlaceholder": "元數據過濾(JSON格式,如 {\"author\": \"xxx\"})", - "invalidMetadataFilter": "元數據過濾格式錯誤,請輸入有效的 JSON", - "matchSource": { - "vector": "向量命中", - "fulltext": "全文命中", - "annotation": "標註命中" - }, - "showParent": "展開父分段", - "hideParent": "收起父分段" - }, - "chunkPreview": { - "title": "分塊預覽", - "totalChunks": "分塊數量", - "selectFile": "請選擇檔案進行分塊預覽", - "loading": "正在載入分塊預覽...", - "noFileId": "該文檔沒有關聯檔案", - "error": "分塊預覽失敗" - }, - "metadata": { - "editTitle": "編輯元數據", - "key": "鍵", - "value": "值", - "add": "新增元數據", - "addPair": "新增一行", - "addFilter": "新增元數據過濾", - "filter": "過濾", - "filterKeyPlaceholder": "元數據鍵", - "filterValuePlaceholder": "元數據值" - }, - "settings": { - "title": "知識庫設定", - "basic": "基本資訊", - "indexing": "索引配置", - "retrieval": "檢索配置", - "advanced": "進階配置", - "embeddingModelChangeTitle": "Embedding 模型變更", - "embeddingModelChangeWarning": "更換 Embedding 模型後,已有的向量數據將與新模型不相容,需要重新索引所有文檔。是否儲存並重新索引?", - "saveAndReindex": "儲存並重新索引" - }, - "indexingTechnique": "索引模式", - "indexingTechniques": { - "high_quality": "高品質", - "economy": "經濟" - }, - "indexingTechniqueHint": { - "high_quality": "向量化索引 + 關鍵詞提取,檢索效果最佳", - "economy": "僅關鍵詞索引,不消耗 Embedding 額度" - }, - "retrievalWeight": "檢索權重", - "retrievalWeightHint": "多知識庫檢索時的加權係數(0.1-10.0),值越大該知識庫結果排名越前", - "processRules": "預處理規則", - "processRulesHint": "文件索引前的文字清洗規則", - "removeExtraSpaces": "去除多餘空格", - "removeUrlsEmails": "去除 URL 和郵箱", - "chunkStrategies": { - "recursive": "遞迴分塊", - "markdown": "Markdown 分塊", - "fixed": "固定大小分塊", - "sentence": "按句子分塊", - "auto": "自動(推薦)", - "qa": "Q&A 問答分塊" - }, - "retrievalModes": { - "vector": "向量檢索", - "fulltext": "全文檢索", - "hybrid": "混合檢索" - }, - "embeddingModelTooltip": "用於將文字轉換為向量的模型,直接影響語義檢索的品質。不同模型支援的語言和維度不同", - "embeddingModelSettingsTooltip": "用於將文字轉換為向量的模型,直接影響語義檢索的品質。更換模型後需重新索引文件", - "chunkStrategyTooltip": "文件分塊策略。auto: 自動選擇最佳策略;recursive: 遞迴分割,通用性強;markdown: 按標題分割;fixed: 固定長度;sentence: 按句子;qa: AI 自動拆分為問答對", - "chunkStrategySettingsTooltip": "文件分塊策略。auto: 自動選擇;recursive: 遞迴分割;markdown: 按標題分割;fixed: 固定長度;sentence: 按句子;qa: AI 拆分為問答對", - "indexingTechniqueTooltip": "高品質模式:使用 Embedding 向量化,檢索精度高但消耗資源;經濟模式:僅使用關鍵詞索引,資源消耗低但檢索精度有限", - "retrievalModeTooltip": "混合檢索:同時使用語義向量和關鍵詞匹配,推薦大多數場景;向量檢索:基於語義相似度;全文檢索:基於關鍵詞精確匹配", - "chunkSizeTooltip": "每個文件分塊的最大字元數。較大的分塊保留更多上下文但可能引入雜訊,較小的分塊更精確但可能丟失上下文,建議 300~800", - "chunkSizeSettingsTooltip": "每個分塊的最大字元數,較大保留更多上下文但可能引入雜訊,建議 300~800", - "chunkOverlapTooltip": "相鄰分塊之間的重疊字元數,確保分塊邊界處的資訊不會丟失。建議設為分塊大小的 10%~20%", - "chunkOverlapSettingsTooltip": "相鄰分塊的重疊字元數,確保邊界處資訊不丟失。建議為分塊大小的 10%~20%", - "globalVisibleTooltip": "啟用後所有應用都可以使用此知識庫,否則僅當前應用可用", - "dimensionsTooltip": "Embedding 向量的維度數,需與所選 Embedding 模型支援的維度一致。維度越高語義表達越豐富但儲存和計算成本越高", - "topKTooltip": "每次檢索返回的最相關分段數量,數值越大上下文越豐富但可能引入雜訊,建議 3~5", - "scoreThresholdTooltip": "只返回相似度高於此閾值的結果,值越高匹配越精確但可能遺漏相關內容,建議 0.5~0.7", - "rerankTooltip": "啟用後會對初步檢索結果進行二次排序,顯著提升檢索精度,但會增加延遲和成本", - "retrievalWeightTooltip": "多知識庫檢索時本知識庫結果的權重係數,值越大本知識庫結果排名越前", - "processRulesTooltip": "文件入庫前的清洗規則,可去除多餘空格、URL、郵箱等無關內容,提升檢索品質" - }, - "knowledgeNode": { - "selectKb": "請選擇知識庫", - "queryText": "查詢文本", - "queryPlaceholder": "輸入查詢文本或使用變數引用", - "queryHint": "留空則使用使用者輸入,支援 {'{{variable}}'} 變數引用", - "retrievalMode": "檢索模式", - "useKbDefault": "使用知識庫預設配置", - "vector": "向量檢索", - "fulltext": "全文檢索", - "hybrid": "混合檢索", - "outputVar": "結果變數名", - "contextVar": "上下文變數名", - "rerankEnabled": "啟用重排序", - "rerankHint": "檢索後使用 Rerank 模型重新排序,提升結果相關性", - "rerankModel": "Rerank 模型", - "noRerankModel": "未配置 Rerank 模型,請先在模型管理中新增", - "outputVariables": "輸出變數", - "resultsArrayDesc": "檢索結果陣列,包含 segment_id、content、score 等欄位", - "contextTextDesc": "拼接後的上下文文本,可直接用於 LLM 節點的 prompt", - "totalCountDesc": "檢索結果總數" - }, - "workflow": { - "title": "工作流", - "create": "建立工作流", - "createSuccess": "建立成功", - "saveSuccess": "儲存成功", - "published": "已發布", - "unpublished": "未發布", - "editing": "編輯中", - "publishSuccess": "發布成功", - "publishFailed": "發布失敗", - "copySuccess": "複製成功", - "deleteSuccess": "刪除成功", - "deleteConfirm": "確定要刪除工作流「{name}」嗎?", - "deleteTitle": "刪除確認", - "operationFailed": "操作失敗", - "searchPlaceholder": "搜尋工作流名稱", - "search": "搜尋", - "noDescription": "暫無描述", - "empty": "暫無工作流", - "mainApp": "主應用", - "edit": "編輯", - "editInfo": "編輯資訊", - "design": "設計", - "publish": "發布", - "run": "執行", - "copy": "複製", - "delete": "刪除", - "disable": "停用", - "form": { - "name": "名稱", - "namePlaceholder": "請輸入工作流名稱", - "nameRequired": "請輸入名稱", - "code": "編碼", - "codePlaceholder": "請輸入唯一編碼", - "codeRequired": "請輸入編碼", - "codeFormat": "編碼必須以字母開頭,只能包含字母、數字和下劃線", - "type": "類型", - "description": "描述", - "descriptionPlaceholder": "請輸入描述", - "globalVisible": "子應用可見" - }, - "status": { - "draft": "草稿", - "published": "已發布", - "disabled": "已停用" - }, - "type": { - "general": "通用", - "application": "應用", - "form": "表單", - "report": "報表", - "dataProcess": "數據處理", - "automation": "自動化" - }, - "deleteConfirmSimple": "確定要刪除該工作流嗎?此操作無法撤銷。", - "copyConfirm": "確定要複製工作流「{name}」嗎?", - "copyTitle": "複製確認", - "deleteButton": "刪除", - "cancelButton": "取消", - "copyButton": "複製", - "editWorkflow": "編輯工作流", - "importExport": { - "export": "匯出", - "import": "匯入配置", - "exportSuccess": "工作流配置已匯出", - "exportFailed": "匯出失敗", - "importTitle": "匯入工作流配置", - "dragOrClick": "拖拽 JSON 檔案到此處或點擊上傳", - "onlyJson": "僅支援 .json 格式檔案", - "fileParseError": "檔案解析失敗,請確認檔案格式正確", - "checking": "正在檢查...", - "codeConflictTip": "工作流編碼已存在,請修改編碼後再匯入", - "codeAvailable": "工作流編碼可用,可以匯入", - "newCodePlaceholder": "請輸入新的工作流編碼", - "importSuccess": "工作流配置匯入成功", - "importFailed": "匯入失敗", - "confirmImport": "確認匯入", - "reselect": "重新選擇", - "workflowInfo": "工作流資訊", - "appTip": "匯入的工作流將歸屬到當前應用,狀態為草稿", - "subflowTip": "子流程節點按編碼匹配;若目標環境無對應子流程,匯入後需在編輯器中重新選擇" - }, - "nodeLabel": "節點名稱", - "nodes": { - "knowledge_retrieval": "知識庫檢索", - "common": { - "configured": "已配置", - "notConfigured": "未配置", - "yes": "是", - "no": "否", - "output": "輸出:", - "outputVariable": "輸出變數:", - "inputVariablesCount": "已配置 {count} 個輸入變數", - "noInputVariables": "暫無輸入變數", - "outputVariablesCount": "已配置 {count} 個輸出變數", - "noOutputVariables": "暫無輸出變數", - "addNextNode": "新增下一個節點", - "question": "問題:", - "configureQuestion": "請配置問題內容", - "conditions": "條件: {count} 個", - "selectModel": "請選擇模型" - }, - "start": { - "label": "開始", - "desc": "流程的起始節點" - }, - "end": { - "label": "結束", - "desc": "流程結束並輸出結果" - }, - "llm": { - "label": "LLM 大模型", - "desc": "呼叫大語言模型進行處理", - "systemPrompt": "系統指令:", - "userPrompt": "使用者提示詞:" - }, - "code": { - "label": "程式碼執行", - "desc": "執行 Python/JavaScript 程式碼", - "language": "語言:", - "input": "輸入:" - }, - "condition": { - "label": "邏輯分支", - "desc": "根據條件執行不同分支", - "unnamed": "未命名" - }, - "http": { - "label": "HTTP 請求", - "desc": "呼叫外部 API 介面" - }, - "template": { - "label": "範本渲染", - "desc": "使用 Jinja2 語法組合文字" - }, - "variable": { - "label": "變數賦值", - "desc": "設定或轉換變數值" - }, - "question": { - "label": "問答節點", - "desc": "向使用者提問並等待回答", - "inputType": "輸入類型:" - }, - "choice": { - "label": "選項節點", - "desc": "讓使用者從選項中選擇", - "options": "選項:", - "noOptions": "未配置選項", - "multiple": "多選", - "single": "單選" - }, - "message": { - "label": "訊息節點", - "desc": "向使用者傳送訊息", - "content": "訊息內容:", - "configureContent": "請配置訊息內容", - "messageType": "訊息類型:" - }, - "confirm": { - "label": "確認節點", - "desc": "等待使用者確認或取消", - "confirmText": "確認", - "cancelText": "取消", - "configureContent": "請配置確認內容" - }, - "intent": { - "label": "意圖識別", - "desc": "AI 智慧識別使用者意圖", - "noMatch": "未匹配時", - "confidenceThreshold": "置信度閾值:" - }, - "parallel": { - "label": "並行分支", - "desc": "同時執行多個分支", - "branch": "分支 {index}" - }, - "merge": { - "label": "合併", - "desc": "等待所有分支完成後合併", - "mergeMode": "合併模式", - "array": "陣列", - "concat": "拼接", - "first": "取第一個", - "object": "物件" - }, - "loop": { - "label": "迴圈", - "forEach": "遍歷陣列", - "whileLoop": "條件迴圈", - "nodeCount": "{count} 個節點", - "iteration": "第 {current}/{total} 次", - "iterationNoTotal": "第 {current} 次", - "maxIterations": "最大 {max} 次", - "loopCondition": "迴圈條件", - "availableVariables": "可用變數:", - "dragNodeHere": "拖曳節點到此處作為迴圈體" - }, - "subflow": { - "label": "子流程", - "desc": "呼叫子工作流", - "subflowLabel": "子流程:", - "notSelected": "未選擇子流程", - "varPassMode": "變數傳遞:", - "all": "全部", - "selected": "選擇", - "none": "無", - "progress": "執行進度:", - "current": "目前: {label}", - "subflowNodes": "子流程節點", - "loading": "載入中...", - "emptySubflow": "子流程為空", - "selectSubflow": "請先選擇子流程" - }, - "db_query": { - "label": "查詢", - "desc": "從資料庫查詢資料", - "noTable": "未選擇表", - "returnMode": "返回:", - "limit": "限制: {count} 條" - }, - "db_insert": { - "label": "插入", - "desc": "向資料庫插入資料", - "noTable": "未選擇表", - "fieldMapping": "欄位映射:", - "upsert": "存在則更新:" - }, - "db_update": { - "label": "更新", - "desc": "更新資料庫記錄", - "noTable": "未選擇表", - "updateFields": "更新欄位:" - }, - "db_delete": { - "label": "刪除", - "desc": "從資料庫刪除資料", - "noTable": "未選擇表", - "mustSetCondition": "必須設定條件" - }, - "db_sql": { - "label": "SQL 執行", - "desc": "執行自訂 SQL 語句", - "query": "查詢", - "execute": "執行", - "notConfigured": "未配置" - }, - "app_create": { - "label": "建立應用", - "desc": "建立一個新的應用/子應用", - "appName": "應用名稱:", - "appCode": "應用編碼:", - "updateIfExists": "存在時更新:" - }, - "app_design": { - "label": "應用設計", - "desc": "展示應用設計方案,支援確認或編輯", - "designTitle": "設計標題:", - "needConfirm": "需要確認:" - }, - "app_settings": { - "label": "應用設定", - "desc": "配置應用設定,包括主題和佈局", - "appName": "應用名稱:", - "layoutMode": "佈局模式:", - "builtinTheme": "內建主題:", - "needConfirm": "需要確認:" - }, - "app_update": { - "label": "應用更新", - "desc": "執行應用配置的更新操作", - "settingsSource": "設定來源:", - "app": "應用:", - "target": "目標:", - "mainApp": "主應用" - }, - "form_basic_info": { - "label": "表單基礎資訊", - "desc": "處理表單基礎資訊", - "formName": "表單名稱:", - "formCode": "表單編碼:", - "autoGenerate": "自動生成", - "formType": "表單類型:", - "workflow": "工作流", - "normal": "普通" - }, - "form_create": { - "label": "表單建立", - "desc": "將表單配置儲存到資料庫", - "updateIfExists": "存在時更新:" - }, - "form_data": { - "label": "表單資料", - "desc": "表單資料操作", - "create": "建立表單資料", - "createDesc": "建立新的表單資料記錄", - "read": "讀取表單資料", - "readDesc": "讀取指定的表單資料記錄", - "update": "更新表單資料", - "updateDesc": "更新已有的表單資料記錄", - "delete": "刪除表單資料", - "deleteDesc": "刪除指定的表單資料記錄", - "list": "查詢表單資料", - "listDesc": "查詢表單資料列表", - "schemaToLLM": "表單轉LLM結構", - "schemaToLLMDesc": "將表單配置轉換為LLM結構化輸出", - "formCode": "表單編碼:", - "recordId": "記錄ID:", - "updateData": "更新資料:", - "createData": "建立資料:", - "filterCondition": "過濾條件:" - }, - "form_db_create": { - "label": "資料庫表建立", - "desc": "實際建立資料庫和表", - "operation": "操作:", - "createTable": "建立表", - "tableExists": "表已存在:", - "dropRecreate": "刪除重建", - "error": "報錯", - "skip": "跳過", - "autoCreateSchema": "自動建立:", - "schemaIfNotExists": "Schema:" - }, - "form_db_design": { - "label": "資料庫表結構設計", - "desc": "驗證和標準化資料庫表結構", - "database": "資料庫:", - "mainTable": "主表:", - "subTable": "從表:", - "noSubTable": "無", - "systemFields": "系統欄位:", - "autoAdd": "自動新增", - "noAdd": "不新增" - }, - "form_list_design": { - "label": "列表UI設計", - "desc": "根據表單UI設計生成列表配置", - "containerType": "容器類型:", - "drawer": "抽屜", - "dialog": "彈窗", - "page": "頁面", - "pageSize": "每頁條數:", - "autoQueryFields": "自動查詢欄位:", - "autoColumns": "自動生成列:" - }, - "form_publish": { - "label": "表單發佈", - "desc": "發佈表單到選單系統", - "menuName": "選單名稱:", - "notSet": "未設定", - "menuIcon": "選單圖示:" - }, - "form_ui_design": { - "label": "表單UI設計", - "desc": "根據資料庫結構生成表單UI配置", - "layoutMode": "佈局模式:", - "auto": "自動", - "singleCol": "單列", - "doubleCol": "雙列", - "tripleCol": "三列", - "formName": "表單名稱:", - "enableGrouping": "啟用分組:", - "hideSystemFields": "隱藏系統欄位:" - }, - "dashboard_basic_info": { - "label": "儀表盤基礎資訊", - "desc": "配置儀表盤基礎資訊", - "name": "名稱:", - "code": "編碼:", - "category": "分類:" - }, - "dashboard_create": { - "label": "儀表盤建立", - "desc": "將儀表盤配置儲存到資料庫", - "basicInfo": "基礎資訊:", - "pageConfig": "頁面配置:", - "updateIfExists": "更新已存在:" - }, - "dashboard_design": { - "label": "儀表盤設計", - "desc": "設計儀表盤頁面佈局和元件", - "title": "標題:", - "needConfirm": "確認:", - "need": "需要", - "notNeed": "不需要" - }, - "dashboard_publish": { - "label": "儀表盤發佈", - "desc": "發佈儀表盤到選單系統", - "dashboard": "儀表盤:", - "menuName": "選單名稱:", - "icon": "圖示:" - }, - "knowledge_retrieval_node": { - "label": "知識庫檢索", - "desc": "從知識庫檢索相關文件", - "kbCount": "{count} 個知識庫", - "topKThreshold": "Top {topK} · 閾值 {threshold}", - "vector": "向量檢索", - "fulltext": "全文檢索", - "hybrid": "混合檢索" - }, - "system_summary": { - "label": "系統總結", - "desc": "收集和展示AI建立的系統資訊", - "title": "標題:", - "showStatistics": "顯示統計:", - "appInfo": "應用資訊:", - "formResult": "表單結果:", - "dashboard": "儀表盤:" - }, - "snowflake_cortex_llm": { - "label": "Snowflake Cortex LLM", - "desc": "Snowflake Cortex AI 函式", - "function": "功能:", - "complete": "LLM 生成", - "summarize": "文字摘要", - "translate": "翻譯", - "sentiment": "情感分析", - "extractAnswer": "問答提取", - "selectFunction": "請選擇", - "model": "模型:", - "prompt": "提示詞:", - "translateLabel": "翻譯:", - "inputText": "輸入文字:" - }, - "snowflake_cortex_analyst": { - "label": "Snowflake Cortex Analyst", - "desc": "自然語言查詢資料", - "nlQuery": "自然語言查詢", - "questionLabel": "問題:", - "semanticModel": "語義模型:" - }, - "text_to_sql": { - "label": "Text to SQL", - "desc": "自然語言轉 SQL 查詢", - "notConfigured": "未配置查詢問題", - "chartRecommend": "圖表推薦" - } - }, - "editor": { - "categories": { - "basic": "基礎節點", - "formDesign": "表單設計", - "formData": "表單數據", - "dialog": "對話互動", - "database": "資料庫", - "flowControl": "流程控制", - "appManage": "應用管理", - "dashboard": "儀表盤", - "knowledge": "知識庫" - }, - "nodeLabels": { - "start": "開始", - "end": "結束", - "llm": "LLM 大模型", - "http": "HTTP 請求", - "code": "程式執行", - "condition": "邏輯分支", - "template": "模板渲染", - "parallel": "平行分支", - "merge": "合併", - "loop": "迴圈", - "intent": "意圖識別", - "subflow": "子流程", - "db_insert": "DB 插入", - "db_update": "DB 更新", - "db_query": "DB 查詢", - "db_delete": "DB 刪除", - "db_sql": "SQL 執行", - "text_to_sql": "Text-to-SQL", - "message": "傳送訊息", - "question": "問答輸入", - "choice": "選項選擇", - "confirm": "確認操作", - "form_basic_info": "表單基礎資訊", - "form_database_design": "表結構設計", - "form_database_create": "資料庫表建立", - "form_ui_design": "表單UI設計", - "form_list_design": "列表UI設計", - "form_create": "表單建立", - "form_publish": "表單發布", - "form_data_create": "建立數據", - "form_data_read": "讀取數據", - "form_data_update": "更新數據", - "form_data_delete": "刪除數據", - "form_data_list": "查詢列表", - "form_schema_to_llm": "表單轉LLM結構", - "app_create": "建立應用", - "app_design": "應用設計", - "app_settings": "應用設定", - "app_update": "應用更新", - "dashboard_basic_info": "儀表盤基礎資訊", - "dashboard_design": "儀表盤設計", - "dashboard_create": "儀表盤建立", - "dashboard_publish": "儀表盤發布", - "system_summary": "系統總結", - "knowledge_retrieval": "知識庫檢索", - "snowflake_cortex_llm": "Cortex LLM", - "snowflake_cortex_analyst": "Cortex Analyst" - }, - "rename": "重新命名", - "renamePrompt": "請輸入新的節點名稱", - "confirmBtn": "確定", - "cancelBtn": "取消", - "addedToLoop": "已新增到迴圈體", - "autoInserted": "已自動插入節點", - "saveFailed": "儲存失敗", - "publishFailed": "發布失敗", - "publishPrompt": "請輸入版本說明(可選)", - "publishTitle": "發布工作流", - "publishBtn": "發布", - "publishPlaceholder": "例如:修復了XX問題,新增了XX功能", - "publishVersionSuccess": "發布成功!已發布版本: v{version}", - "workflowHasIssues": "工作流存在問題:", - "workflowIncomplete": "工作流配置不完整,請先修復問題", - "validation": { - "missingStart": "缺少開始節點", - "multipleStart": "只能有一個開始節點", - "missingEnd": "缺少結束節點", - "startNoConnection": "開始節點沒有連接到其他節點", - "endNoConnection": "結束節點沒有被連接", - "llmNoModel": "LLM 節點未配置模型", - "httpNoUrl": "HTTP 節點未配置 URL", - "parallelMinBranches": "平行節點至少需要連接 2 個分支", - "mergeMinInputs": "合併節點至少需要 2 個輸入" - }, - "toolbar": { - "save": "儲存", - "publish": "發布", - "run": "執行", - "chat": "對話測試", - "versions": "版本歷史", - "back": "返回", - "undo": "撤銷", - "redo": "重做", - "zoomIn": "放大", - "zoomOut": "縮小", - "fitView": "適應視圖", - "minimap": "小地圖", - "addNode": "新增節點", - "searchNode": "搜尋節點...", - "saved": "已儲存", - "saving": "儲存中...", - "unsaved": "未儲存" - }, - "contextMenu": { - "rename": "重新命名", - "duplicate": "複製", - "delete": "刪除" - }, - "panel": { - "propertyConfig": "屬性配置", - "noConfig": "暫無配置項" - }, - "dbConnection": { - "connectionLabel": "資料庫連線", - "databaseHint": "留空則使用連線設定的預設庫;也可輸入變數如 {'{{target_db}}'}", - "databaseInputPlaceholder": "手動輸入或插入變數", - "databaseLabel": "目標資料庫", - "databaseOracleHint": "Oracle 的庫/service 在連線設定中指定,一般無需單獨選擇", - "databaseOraclePlaceholder": "通常留空即可", - "databasePlaceholder": "選擇目標庫(可選)", - "defaultWriteWarning": "目前使用平台預設資料庫執行寫入操作,請確認環境是否正確" - }, - "confirmMode": { - "always": "始終確認", - "never": "從不確認", - "variable": "變數控制", - "placeholder": "選擇或輸入變數,如 {'{{need_confirm}}'}", - "hint": "變數值為 true/1/yes 時需要確認,false/0/no 時不需要確認" - }, - "smartInput": { - "insertVariable": "插入變數" - }, - "schemaConfigDialog": { - "title": "結構化輸出配置", - "visual": "視覺化", - "addField": "新增欄位", - "emptyHint": "點擊「新增欄位」開始定義資料結構,或切換到 JSON 模式直接貼上", - "fieldName": "欄位名", - "description": "描述", - "required": "必填", - "advancedConfig": "進階配置", - "advancedConfigEnumDefault": "進階配置 (enum, default)", - "advancedConfigMinMaxDefault": "進階配置 (min, max, default)", - "enumValues": "列舉值 (enum)", - "enumValuesShort": "列舉值:", - "addOption": "新增選項", - "add": "新增", - "enumHint": "可選,限制欄位只能為指定的值之一", - "optionValue": "選項值", - "defaultValue": "預設值:", - "defaultShort": "預設:", - "optional": "可選", - "minValue": "最小值:", - "maxValue": "最大值:", - "minShort": "最小:", - "maxShort": "最大:", - "noLimit": "無限制", - "childProperties": "子屬性", - "noChildProperties": "暫無子屬性", - "nestedProperties": "巢狀屬性", - "arrayItemType": "陣列元素類型:", - "objectPropertyDef": "物件屬性定義", - "addProperty": "新增屬性", - "jsonPreview": "JSON Schema 預覽", - "cancel": "取消", - "confirm": "確定", - "jsonFormatError": "JSON 格式不正確,需要包含 properties 欄位", - "jsonParseError": "JSON 解析錯誤: {message}", - "typeString": "字串 (string)", - "typeNumber": "數字 (number)", - "typeInteger": "整數 (integer)", - "typeBoolean": "布林 (boolean)", - "typeArray": "陣列 (array)", - "typeObject": "物件 (object)" - }, - "tableSelectModal": { - "title": "資料表選擇", - "step1": "選擇資料表", - "step2": "設計表關係", - "prevStep": "上一步", - "nextStep": "下一步", - "confirmSelect": "確認選擇", - "close": "關閉", - "database": "資料庫", - "refresh": "重新整理", - "refreshSuccess": "重新整理成功", - "loading": "載入中...", - "fieldOf": "{table} 欄位", - "fieldPreview": "欄位預覽", - "clickToPreview": "點擊表檢視欄位", - "noFields": "暫無欄位資訊", - "selectedTables": "已選表", - "clearAll": "清空", - "clickCheckboxHint": "點擊左側表的核取方塊新增", - "fieldsCount": "{count} 個欄位", - "sameDbWarning": "只能選擇同一資料庫/Schema 下的表", - "selectAtLeastTwo": "請至少選擇兩張表才能新增關係", - "selectAtLeastOne": "請至少選擇一張表", - "completeRelations": "請完善所有表關係的配置", - "tableRelations": "表關係", - "addRelation": "新增關係", - "selectTwoTablesFirst": "請先選擇至少兩張表", - "noRelations": "暫無表關係", - "addRelationHint": "點擊「新增關係」按鈕建立表之間的關聯", - "relationIndex": "關係 {index}", - "delete": "刪除", - "sourceTable": "來源表", - "selectTable": "選擇表", - "selectField": "選擇欄位", - "relationType": "關係類型", - "oneToOne": "一對一 (1:1)", - "oneToMany": "一對多 (1:N)", - "manyToOne": "多對一 (N:1)", - "manyToMany": "多對多 (M:N)", - "targetTable": "目標表", - "hint": "提示:表關係用於幫助 AI 理解表之間的關聯,生成更準確的 JOIN 查詢" - }, - "tableSelectDialog": { - "title": "選擇資料表", - "loadConfigFailed": "載入資料庫配置失敗", - "selectTableFirst": "請先選擇一張表", - "refreshSuccess": "重新整理成功", - "database": "資料庫", - "refresh": "重新整理", - "loading": "載入中...", - "current": "目前", - "fieldList": "{table} 欄位列表", - "fieldPreview": "欄位預覽", - "clickToPreview": "點擊左側表檢視欄位,雙擊選擇", - "noFields": "暫無欄位資訊", - "cancel": "取消", - "confirmSelect": "確認選擇" - }, - "runPanel": { - "runPreview": "執行預覽", - "inputVariables": "輸入變數", - "noVariablesHint": "暫無輸入變數,請在「開始」節點配置", - "inputPlaceholder": "請輸入 {type}", - "startRun": "開始執行", - "stopRun": "停止執行", - "clearStatus": "清除狀態", - "execStatus": "執行狀態", - "running": "執行中", - "nodes": "節點", - "llmOutput": "LLM 輸出", - "parallelBranches": "並行分支 ({count} 個)", - "branchResults": "分支結果:", - "parallelExec": "並行執行", - "input": "輸入", - "output": "輸出", - "runResult": "執行結果", - "success": "成功", - "failed": "失敗", - "execFailed": "執行失敗", - "workflowExecFailed": "工作流執行失敗", - "userStopped": "使用者停止" - }, - "chatPanel": { - "runPreview": "執行預覽", - "configVariables": "配置輸入變數", - "assistantName": "工作流", - "placeholder": "輸入訊息執行工作流...", - "emptyText": "輸入訊息開始執行工作流", - "execFailed": "執行失敗", - "workflowExecFailed": "工作流執行失敗", - "workflowComplete": "工作流執行完成", - "resumeFailed": "恢復執行失敗", - "resumeWorkflowFailed": "恢復工作流執行失敗", - "waitingInput": "等待輸入...", - "pleaseSelect": "請選擇:", - "confirm": "確認", - "pleaseConfirm": "請確認是否繼續?", - "pleaseInput": "請輸入:", - "cancel": "取消", - "userStopped": "使用者停止", - "confirmDesign": "確認設計", - "confirmAppDesign": "確認應用設計", - "confirmAppSettings": "確認應用設定", - "confirmDashboardBasicInfo": "確認儀表盤基礎資訊", - "confirmDashboardDesign": "確認儀表盤設計", - "publishToMenu": "發布到選單:{name}", - "complete": "完成", - "startRun": "開始執行", - "inputVariable": "請輸入 {variable}", - "appDesignTitle": "應用設計方案", - "appSettingsTitle": "應用設定", - "dashboardBasicInfoTitle": "儀表盤基礎資訊", - "dashboardDesignTitle": "儀表盤設計", - "dashboardPublishTitle": "儀表盤發布確認", - "systemSummaryTitle": "系統建立完成", - "designPreviewTitle": "設計預覽", - "designPreviewHint": "請在右側面板中確認或編輯設計" - }, - "nodeResultCard": { - "failed": "失敗", - "pending": "等待中", - "running": "執行中", - "success": "完成", - "unknown": "未知", - "noOutput": "(無輸出)", - "execFailed": "執行失敗", - "elapsed": "耗時:", - "iteration": "迭代:", - "fullscreen": "全螢幕檢視", - "input": "輸入", - "output": "輸出", - "errorInfo": "錯誤資訊" - }, - "variableSelector": { - "searchPlaceholder": "搜尋變數...", - "noVariables": "無可引用變數", - "system": "系統", - "field": "欄位", - "structured": "結構化", - "userChoice": "使用者選擇", - "choiceText": "選擇文字", - "execResult": "執行結果 (result)", - "confirmed": "是否確認 (true/false)", - "deleteResult": "刪除結果", - "affectedRows": "影響列數", - "insertResult": "插入結果", - "insertId": "插入ID", - "queryResult": "查詢結果", - "resultCount": "結果數量", - "sqlResult": "SQL結果", - "updateResult": "更新結果", - "responseBody": "回應體", - "statusCode": "狀態碼", - "jsonString": "JSON 字串", - "structuredData": "結構化資料物件", - "tokenUsage": "Token 使用量", - "llmResponse": "LLM 回應文字", - "currentLoopItem": "當前迴圈項", - "currentIndex": "當前索引", - "loopResults": "迴圈結果陣列", - "mergeResult": "合併結果", - "branchCount": "分支數量", - "userAnswer": "使用者回答", - "isValid": "是否有效", - "queryResultData": "查詢結果資料", - "generatedSql": "產生的 SQL", - "rawResponse": "原始回應", - "cortexLlmResponse": "Cortex LLM 回應", - "userInput": "使用者輸入", - "appId": "子應用ID", - "appCode": "子應用編碼", - "formCode": "表單編碼", - "renderResult": "渲染結果", - "generatedSqlStatement": "產生的 SQL 語句", - "sqlThought": "SQL 產生思路", - "formBasicInfoObj": "完整基礎資訊物件", - "formName": "表單名稱", - "formType": "表單類型", - "formDescription": "表單描述", - "formSort": "排序值", - "dbDesignObj": "完整資料庫設計物件", - "tableName": "表名", - "fieldCount": "欄位數量", - "creationResult": "建立結果物件", - "allTablesReady": "所有表是否就緒", - "createdCount": "成功建立的表數量", - "errorCount": "錯誤數量", - "schemaName": "Schema 名稱", - "formUiDesign": "表單UI設計配置", - "groupCount": "分組數量", - "listConfig": "列表配置", - "queryFieldCount": "查詢欄位數量", - "columnCount": "欄數量", - "formId": "表單ID", - "formMeta": "表單元資料", - "menuId": "選單ID", - "routePath": "存取路徑", - "publishResult": "發布結果", - "appName": "應用名稱", - "createSuccess": "是否建立成功", - "designContent": "設計方案內容", - "designTitle": "設計方案標題", - "isConfirmed": "是否已確認", - "appSettings": "應用設定配置", - "updateSuccess": "更新是否成功", - "configId": "配置記錄ID", - "updateMessage": "更新結果訊息", - "dashboardBasicInfo": "儀表盤基礎資訊", - "dashboardName": "儀表盤名稱", - "dashboardCode": "儀表盤編碼", - "pageConfig": "頁面設計配置", - "dashboardId": "儀表盤ID", - "pageMeta": "頁面元資料", - "summaryData": "總結資料", - "totalForms": "表單總數", - "hasApp": "是否包含應用", - "hasDashboard": "是否包含儀表盤", - "subflowFullResult": "子流程完整結果", - "execSuccess": "執行是否成功", - "subflowOutputVars": "子流程輸出變數", - "allSubflowVars": "(所有子流程輸出變數)", - "fromSubflow": "來自子流程", - "output": "輸出", - "knowledgeResults": "檢索結果陣列", - "knowledgeContext": "拼接後的上下文文本", - "knowledgeResultsTotal": "檢索結果總數" - }, - "versionHistory": { - "title": "版本歷史", - "loadFailed": "載入版本歷史失敗", - "rollbackConfirm": "確定要回滾到 v{version} 嗎?當前草稿將被覆蓋。", - "rollbackTitle": "回滾確認", - "rollbackBtn": "確定回滾", - "rollbackSuccess": "已回滾到 v{version}", - "rollbackFailed": "回滾失敗", - "rollback": "回滾", - "noDescription": "無版本說明", - "runCount": "執行 {count} 次", - "successCount": "成功 {count} 次", - "empty": "暫無版本歷史" - } - }, - "panels": { - "common": { - "nodeName": "節點名稱", - "add": "新增", - "delete": "刪除", - "noInputVars": "暫無輸入變數", - "noOutputVarsClickAdd": "暫無輸出變數,點擊上方新增", - "noVars": "暫無變數", - "noCustomVarsClickAdd": "暫無自訂變數,點擊上方新增", - "inputVars": "輸入變數", - "outputVars": "輸出變數", - "outputVarName": "輸出變數名", - "variableName": "變數名", - "defaultValue": "預設值", - "customVars": "自訂變數", - "sysVar": "系統變數(不可刪除)", - "configured": "已配置", - "notConfigured": "未配置", - "yes": "是", - "no": "否", - "output": "輸出", - "selectModel": "選擇模型", - "model": "模型", - "usage": "使用說明", - "usageTips": "使用提示", - "confirmMode": "確認模式", - "varRef": "支援變數引用,如:", - "selectTable": "選擇表", - "targetTable": "目標表", - "tablePlaceholder": "點擊右側按鈕選擇表", - "tableFields": "表欄位", - "availableFields": "可選欄位", - "fieldMapping": "欄位映射", - "addField": "新增欄位", - "addCondition": "新增條件", - "queryConditions": "查詢條件", - "field": "欄位", - "value": "值", - "variable": "變數", - "noConditionQueryAll": "無條件將查詢所有資料", - "noCondition": "無條件", - "returnFields": "回傳欄位", - "returnFieldsHint": "* 表示所有欄位,多個欄位用逗號分隔", - "orderBy": "排序", - "limitRows": "限制筆數", - "resultSavedTo": "查詢結果(陣列)將儲存到此變數", - "insertResultSavedTo": "插入結果將儲存到此變數", - "updateResultSavedTo": "更新結果將儲存到此變數", - "deleteResultSavedTo": "刪除結果將儲存到此變數", - "sqlResultSavedTo": "SQL 執行結果將儲存到此變數", - "clickFieldToAdd": "點擊欄位快速新增到映射", - "clickAddField": "點擊「新增欄位」或點擊上方表欄位快速新增", - "selectField": "選擇欄位", - "dbField": "資料庫欄位", - "varValue": "變數值", - "upsert": "存在則更新 (UPSERT)", - "upsertHint": "勾選後,如果記錄已存在則更新,否則插入", - "judgeCondition": "判斷條件", - "addJudgeConditionHint": "請新增用於判斷記錄是否存在的條件", - "outputVarTitle": "輸出變數", - "advancedSettings": "進階設定", - "tableFieldsRef": "表字段參考" - }, - "template": { - "label": "範本", - "placeholder": "範本", - "templateContent": "範本內容" - }, - "end": { - "outputContent": "輸出內容", - "outputPlaceholder": "輸入回傳給使用者的內容,可使用 {'{{變數名}}'} 引用上下文變數", - "outputHint": "此內容會回傳給對話框顯示,點擊 / 可選擇變數", - "noOutputVars": "暫無輸出變數,點擊上方新增", - "type": "類型" - }, - "message": { - "label": "訊息節點", - "placeholder": "訊息節點", - "content": "訊息內容", - "contentPlaceholder": "請輸入要傳送給使用者的訊息內容,支援變數如 {'{{變數名}}'}", - "contentHint": "此訊息將傳送給使用者,工作流不會暫停", - "messageType": "訊息類型", - "plainText": "純文字" - }, - "confirm": { - "label": "確認節點", - "placeholder": "確認節點", - "dialogTitle": "確認框標題", - "titlePlaceholder": "確認", - "content": "確認內容", - "contentPlaceholder": "請輸入需要使用者確認的內容,支援變數如 {'{{變數名}}'}", - "contentHint": "工作流將暫停,等待使用者點擊確認或取消", - "confirmBtnText": "確認按鈕文字", - "cancelBtnText": "取消按鈕文字", - "confirmPlaceholder": "確認", - "cancelPlaceholder": "取消", - "outputHint": "使用者確認回傳 true,取消回傳 false", - "smartIntent": "智慧意圖識別", - "smartIntentHint": "當使用者輸入文字(而非點擊按鈕)時,使用 LLM 判斷使用者意圖。\n預設使用關鍵詞匹配(如「好的」、「可以」為確認,「不」、「取消」為取消)。", - "intentModel": "意圖識別模型", - "intentModelHint": "當關鍵詞匹配失敗時,使用此模型進行意圖識別" - }, - "merge": { - "label": "合併", - "placeholder": "合併", - "mergeMode": "合併模式", - "objectMode": "物件(按分支ID)", - "arrayMode": "陣列", - "firstMode": "取第一個", - "concatMode": "字串拼接", - "objectDesc": "將各分支結果合併為物件,鍵為分支ID", - "arrayDesc": "將各分支結果合併為陣列", - "firstDesc": "只取第一個完成的分支結果", - "concatDesc": "將各分支結果拼接為字串", - "separator": "分隔符", - "usageTip1": "合併節點等待所有並行分支執行完成", - "usageTip2": "合併後的結果儲存在輸出變數中", - "usageTip3": "可透過 {template} 引用合併結果" - }, - "parallel": { - "label": "並行分支", - "placeholder": "並行分支", - "title": "並行分支", - "addBranch": "新增分支", - "branchHint": "所有分支將同時執行,執行完成後在合併節點匯聚", - "branchName": "分支名稱", - "branch": "分支 {index}", - "usageTip1": "從每個分支的輸出端口連接到不同的節點", - "usageTip2": "所有分支最終需要連接到同一個合併節點", - "usageTip3": "分支內的節點將並行執行" - }, - "start": { - "userInputDesc": "使用者在對話框中輸入的內容,自動傳入此變數", - "appIdDesc": "子應用下自動注入實際ID,主應用模式下為main", - "appCodeDesc": "子應用下自動注入應用編碼,主應用模式下為空", - "formCodeDesc": "從表單列表呼叫時自動注入表單編碼,其他情況下為空" - }, - "choice": { - "label": "選項節點", - "placeholder": "選項節點", - "questionContent": "問題內容", - "questionPlaceholder": "請輸入問題或提示文字", - "outputHint": "使用者的選擇將儲存到此變數", - "optionList": "選項列表", - "addOption": "新增選項", - "optionValue": "選項值", - "displayText": "顯示文字", - "optionDesc": "選項描述(可選)", - "option": "選項 {index}", - "allowMultiple": "允許多選", - "minSelect": "最少選擇", - "maxSelect": "最多選擇" - }, - "question": { - "label": "問答節點", - "placeholder": "問答節點", - "questionContent": "問題內容", - "questionPlaceholder": "請輸入要向使用者提出的問題,支援變數如 {'{{變數名}}'}", - "outputHint": "使用者的回答將儲存到此變數", - "renderInput": "渲染輸入框", - "renderInputHint": "關閉時使用者直接在聊天框輸入,開啟時顯示專用輸入框", - "inputType": "輸入類型", - "text": "文字", - "number": "數字", - "email": "電子郵件", - "phone": "手機號", - "date": "日期", - "placeholderText": "佔位文字", - "placeholderHint": "輸入框佔位提示", - "defaultValueLabel": "預設值", - "defaultValueHint": "可選的預設值", - "required": "是否必填", - "validationRegex": "驗證正則", - "validationRegexHint": "用於驗證使用者輸入格式的正則表達式", - "validationMessage": "驗證失敗提示", - "validationDefault": "輸入格式不正確" - }, - "http": { - "label": "HTTP 請求", - "placeholder": "HTTP 請求", - "addParam": "新增參數", - "addHeader": "新增 Header", - "bodyHint": "僅支援 JSON 格式,支援變數引用如 {'{{ variable }}'}", - "settings": "設定", - "timeout": "逾時時間 (秒)" - }, - "code": { - "label": "程式碼執行", - "placeholder": "程式碼執行", - "timeout": "逾時 (秒)", - "noInputVars": "暫無輸入變數", - "noOutputVars": "暫無輸出變數,程式碼回傳的欄位將自動作為輸出", - "codePython": "程式碼 (Python)", - "codePlaceholder": "在此編寫程式碼...", - "expandEditor": "展開編輯器" - }, - "llm": { - "label": "LLM 大模型", - "placeholder": "LLM 大模型", - "systemPrompt": "系統指令", - "optional": "(可選)", - "systemPromptPlaceholder": "定義 AI 的角色和行為規則,如:你是一個專業的翻譯助手...", - "systemPromptHint": "設定 AI 的角色、行為規則和限制", - "userPrompt": "使用者提示詞", - "userPromptPlaceholder": "輸入使用者的問題或指令,支援變數如 {'{{變數名}}'}...", - "userPromptHint": "使用者的實際問題或指令,可使用變數引用上游節點輸出", - "ragTip": "RAG 提示:配合「知識庫檢索」節點,在提示詞中使用 {knowledgeContext} 引用檢索結果作為上下文", - "outputVarHint": "LLM 的回應將儲存到此變數,供後續節點使用", - "outputMode": "輸出模式", - "textOutput": "文字輸出", - "structuredOutput": "結構化輸出", - "structuredDesc": "使用 Function Calling 提取結構化 JSON 資料", - "textDesc": "普通文字回應", - "schemaSource": "結構來源", - "staticConfig": "靜態配置", - "fromVariable": "從變數取得", - "fromVariableDesc": "從上游節點(如「表單轉LLM結構」節點)取得結構配置", - "staticConfigDesc": "手動配置輸出結構", - "schemaVariable": "結構變數", - "schemaVarPlaceholder": "輸入變數名,如 {'{{llm_output_schema}}'}", - "schemaVarHint": "變數值應為結構化輸出配置陣列,可由「表單轉LLM結構」節點產生", - "configSchema": "配置結構", - "configSchemaHint": "點擊「配置結構」定義要提取的資料結構(支援多層巢狀)", - "schemaPreviewHint": "點擊上方 JSON 可重新配置,提取的資料將儲存為", - "streaming": "串流輸出", - "streamingHint": "啟用後將即時輸出 LLM 回應", - "conversationHistory": "使用對話歷史", - "conversationHistoryHint": "啟用後將包含歷史對話作為上下文(需要 Agent 啟用記憶功能)", - "configStructure": "配置結構" - }, - "condition": { - "label": "條件分支", - "placeholder": "條件分支", - "booleanHint": "Boolean判斷", - "emptyStringHint": "空字串", - "mainAppHint": "主應用判斷", - "numberCompareHint": "數值比較", - "branchList": "分支列表", - "addBranch": "新增分支", - "branch": "分支 {index}", - "conditions": "條件", - "elseBranch": "ELSE(預設分支)", - "equals": "等於", - "notEquals": "不等於", - "gt": "大於", - "gte": "大於等於", - "lt": "小於", - "lte": "小於等於", - "contains": "包含", - "notContains": "不包含", - "startsWith": "開頭是", - "endsWith": "結尾是", - "isEmpty": "為空", - "isNotEmpty": "不為空", - "numberCompare": "支援大於、小於等運算子", - "noCondition": "無條件" - }, - "intent": { - "label": "意圖識別", - "placeholder": "意圖識別", - "selectModelHint": "選擇用於意圖識別的模型", - "modelHint": "選擇用於分析使用者意圖的 LLM 模型", - "inputVariable": "輸入變數", - "inputVarHint": "包含使用者輸入的變數名,支援變數引用如 {'{{ 變數名 }}'}", - "intentList": "意圖列表", - "addIntent": "新增意圖", - "intentIndex": "意圖 {index}", - "intentNamePlaceholder": "意圖名稱(如:consult)", - "name": "名稱", - "intentDescPlaceholder": "意圖描述(如:使用者想諮詢產品資訊)", - "description": "描述", - "branchIdPlaceholder": "分支ID(預設與名稱相同)", - "branchLabel": "分支", - "exampleSentences": "範例語句(幫助 AI 更準確識別)", - "examplePlaceholder": "輸入範例語句", - "otherBranch": "OTHER(未匹配任何意圖時)", - "outputHint": "識別結果將儲存到此變數,包含 intent 和 confidence", - "confidenceThreshold": "信心度閾值", - "confidenceHint": "低於此閾值將走 OTHER 分支", - "intentLabel": "意圖" - }, - "loop": { - "label": "迴圈", - "placeholder": "迴圈", - "loopMode": "迴圈模式", - "forEach": "遍歷陣列 (For Each)", - "whileLoop": "條件迴圈 (While)", - "arrayVariable": "陣列變數", - "arrayVarHint": "要遍歷的陣列變數,支援 {'{{NodeID.key}}'} 格式或直接輸入 JSON 陣列", - "itemVarName": "迴圈項變數名", - "indexVarName": "索引變數名", - "loopCondition": "迴圈條件", - "conditionLogic": "條件邏輯", - "allMatch": "全部滿足 (AND)", - "anyMatch": "任一滿足 (OR)", - "conditionIndex": "條件 {index}", - "varPlaceholder": "變數名,如:{'{{counter}}'}", - "compareValue": "比較值", - "addConditionHint": "點擊「新增條件」設定迴圈繼續的條件", - "maxIterations": "最大迭代次數", - "maxIterationsHint": "防止無限迴圈,達到此次數後強制停止", - "outputVarHint": "儲存所有迴圈結果的陣列變數名", - "usageTip1": "將節點拖曳到迴圈容器內作為迴圈體", - "usageTip2": "迴圈體內的節點會被重複執行", - "usageTip3ForEach": "在迴圈體內可使用 {item} 和 {index}", - "usageTip3While": "每次迭代後會重新評估條件", - "usageTip4": "迴圈完成後結果儲存在 {output} 中", - "eq": "等於", - "ne": "不等於", - "gt": "大於", - "gte": "大於等於", - "lt": "小於", - "lte": "小於等於", - "is_empty": "為空", - "is_not_empty": "不為空", - "is_true": "為真", - "is_false": "為假", - "loopBodyHint1": "在循環體內可使用", - "loopBodyHint2": "和" - }, - "subflow": { - "label": "子流程", - "placeholder": "子流程", - "selectSubflow": "選擇子流程", - "selectSubflowPlaceholder": "請選擇要呼叫的子流程", - "openInNewTab": "在新分頁開啟", - "publishedOnly": "只顯示已發佈的工作流", - "varPass": "變數傳遞", - "passMode": "傳遞模式", - "passAll": "傳遞所有變數", - "passSelected": "選擇變數", - "passNone": "不傳遞", - "varMapping": "變數映射", - "addVarMappingHint": "點擊「新增」配置變數傳遞", - "varIndex": "變數 {index}", - "subflowVarName": "子流程變數名", - "mainflowVarValue": "主流程變數值", - "selectVarPlaceholder": "點擊變數按鈕選擇變數", - "varMappingHint1": "子流程變數名:子流程中使用的變數名", - "varMappingHint2": "主流程變數值:從主流程傳遞的值(可選擇變數)", - "resultHandling": "結果處理", - "resultPassMode": "結果傳遞模式", - "resultPassAll": "傳遞所有結果", - "resultPassSelected": "選擇結果", - "resultPassNone": "不傳遞", - "selectResultVars": "選擇結果變數", - "resultVarPlaceholder": "輸入子流程中的變數名", - "resultVarHint": "輸入要從子流程回傳的變數名(子流程內部產生的變數)", - "resultVarName": "結果變數名", - "resultVarSavedHint": "子流程完整結果儲存到此變數,可透過 {template} 存取", - "maxNestDepth": "最大巢狀深度", - "maxNestDepthHint": "防止無限遞迴呼叫,預設最多巢狀 5 層", - "showSubflowMessages": "顯示子流程訊息", - "showSubflowMessagesHint": "開啟後,子流程中的訊息節點會在主流程對話中顯示", - "forwardInteractive": "轉發互動式節點", - "forwardInteractiveHint": "開啟後,子流程中的問答、選項、確認等節點會在主流程中顯示", - "usageTip1": "子流程必須是已發佈狀態的工作流", - "usageTip2": "子流程會繼承主流程的使用者上下文", - "usageTip3": "可以透過變數傳遞在主流程和子流程間傳遞資料", - "usageTip4": "子流程執行完成後,結果會儲存到指定的變數中", - "usageTip5": "支援子流程巢狀呼叫,但要注意避免循環依賴" - }, - "appCreate": { - "label": "建立應用", - "placeholder": "建立應用", - "appName": "應用名稱", - "appNamePlaceholder": "請輸入應用名稱或使用變數", - "appNameHint": "支援變數引用,如:", - "appCode": "應用編碼", - "appCodePlaceholder": "請輸入應用編碼或使用變數", - "appCodeHint": "唯一標識,用於URL路由。只能包含字母、數字、底線和連字號,必須以字母開頭", - "appDesc": "應用描述", - "appDescPlaceholder": "請輸入應用描述", - "appIcon": "應用圖示", - "appIconPlaceholder": "請輸入圖示名稱,如 app-window", - "appType": "應用類型", - "appTypePlaceholder": "請選擇應用類型", - "mixedApp": "混合應用", - "formApp": "表單應用", - "workflowApp": "流程應用", - "dashboardApp": "資料應用", - "screenApp": "大螢幕應用", - "updateIfExists": "已存在時更新", - "updateIfExistsHint": "開啟後,如果應用編碼已存在,將更新該應用而不是報錯", - "createdAppId": "建立的應用ID", - "appCodeOutput": "應用編碼", - "appNameOutput": "應用名稱", - "successOutput": "是否建立成功(已存在時為false)" - }, - "appDesign": { - "label": "應用設計", - "placeholder": "應用設計", - "designContent": "設計方案內容", - "designContentPlaceholder": "請輸入設計方案內容或使用變數引用LLM輸出", - "designContentHint": "支援Markdown格式,可使用變數引用,如:", - "designTitle": "設計方案標題", - "designTitlePlaceholder": "請輸入標題,預設為'應用設計方案'", - "designContentOutput": "確認後的設計方案內容", - "designTitleOutput": "設計方案標題", - "confirmedOutput": "是否已確認" - }, - "appSettings": { - "label": "應用設定", - "placeholder": "應用設定", - "varRefHint": "支援變數引用,如:", - "homePath": "首頁路徑", - "homePathHint": "應用首頁路徑,支援變數引用", - "logoHint": "Logo圖片URL或檔案ID,支援變數引用", - "primaryColorHint": "主題主色調,如 hsl(212 100% 45%)", - "settingsOutput": "完整的應用設定配置", - "confirmedOutput": "是否已確認" - }, - "appUpdate": { - "label": "應用更新", - "placeholder": "應用更新", - "appSettingsLabel": "應用設定", - "appSettingsPlaceholder": "請使用變數引用應用設定節點的輸出", - "appSettingsHint": "使用變數引用應用設定節點的輸出,如:", - "appId": "應用ID", - "appIdPlaceholder": "留空則更新主應用配置", - "appIdHint": "目標應用ID,留空則更新主應用配置。支援變數引用,如:", - "updateSuccess": "更新是否成功", - "configId": "配置記錄ID", - "updateMessage": "更新結果訊息" - }, - "dbQuery": { - "label": "DB 查詢", - "placeholder": "DB 查詢", - "eqOp": "等於 (=)", - "neOp": "不等於 (!=)", - "gtOp": "大於 (>)", - "gteOp": "大於等於 (>=)", - "ltOp": "小於 (<)", - "lteOp": "小於等於 (<=)", - "likeOp": "模糊匹配 (LIKE)", - "inOp": "在列表中 (IN)", - "isNullOp": "為空 (IS NULL)", - "isNotNullOp": "不為空 (IS NOT NULL)" - }, - "dbInsert": { - "label": "DB 插入", - "placeholder": "DB 插入" - }, - "dbUpdate": { - "label": "DB 更新", - "placeholder": "DB 更新", - "updateConditions": "更新條件", - "addUpdateConditionHint": "請新增更新條件,否則將更新所有記錄", - "mustAddCondition": "必須添加條件,防止誤更新全表", - "updateFields": "更新字段" - }, - "dbDelete": { - "label": "DB 刪除", - "placeholder": "DB 刪除", - "deleteConditions": "刪除條件", - "addDeleteConditionHint": "請新增刪除條件,否則將刪除所有記錄", - "dangerWarning": "危險操作:沒有條件將刪除表中所有資料!", - "mustAddCondition": "必須添加條件,防止誤刪全表" - }, - "dbSql": { - "label": "SQL 執行", - "placeholder": "SQL 執行", - "sqlStatement": "SQL 語句", - "sqlPlaceholder": "SELECT * FROM users WHERE status = :status LIMIT :limit", - "sqlHint": "支援變數引用。注意:請確保 SQL 安全,避免 SQL 注入", - "sqlParams": "SQL 參數", - "addParam": "新增參數", - "paramName": "參數名", - "paramType": "類型", - "paramValue": "參數值", - "noParams": "暫無參數,點擊「新增參數」", - "paramsHint": "參數名對應 SQL 中的 :param_name;參數值可通過變量選擇器引用上游變量", - "affectedRowsHint": "受影響的行數將保存到此變量", - "cautionWarning": "請謹慎使用,SQL 將直接執行", - "examples": "示例", - "execType": "執行類型", - "executeType": "執行 (不返回結果)", - "insertExample": "插入示例", - "paramList": "參數列表", - "paramOrderHint": "SQL 中的 :param_name 占位符將與參數名對應綁定", - "paramValuePlaceholder": "選擇或輸入上游變量", - "queryExample": "查詢示例", - "queryResultHint": "查詢結果(數組)將保存到此變量", - "queryType": "查詢 (返回結果)", - "sqlParamHint": "使用 :param_name 作為命名參數占位符,支持變量引用", - "statsExample": "統計示例", - "updateExample": "更新示例" - }, - "textToSql": { - "desc": "將自然語言轉換為 SQL 查詢", - "queryQuestion": "查詢問題", - "queryPlaceholder": "輸入自然語言問題,如:顯示最近7天各部門的銷售額對比", - "dataTable": "資料表", - "modifySelection": "修改選擇", - "selectDataTable": "選擇資料表", - "selectedTables": "已選 {count} 張表", - "clear": "清空", - "noTableHint": "未選擇表時將自動分析所有表(最多20張)", - "includeRelations": "包含表關係資訊", - "includeRelationsHint": "自動取得外鍵關係,提高多表 JOIN 查詢準確度", - "llmModel": "LLM 模型", - "selectLlmModel": "選擇 LLM 模型", - "sqlSavedHint": "產生的 SQL 將儲存到此變數", - "sqlOutput": "產生的 SQL 語句", - "thoughtOutput": "SQL 產生思路", - "autoAnalyzeHint": "未選擇表時將自動分析所有表(最多20張)", - "dataTables": "數據表", - "description": "將自然語言轉換為 SQL 查詢", - "modelRecommendation": "推薦使用 GPT-4 或同等能力的模型以獲得更好的 SQL 生成質量", - "outputVarHint": "生成的 SQL 將保存到此變量", - "reasoningOutput": "SQL 生成思路", - "selectTables": "選擇數據表", - "varRefHint": "支持變量引用,如:" - }, - "systemSummary": { - "label": "系統總結", - "placeholder": "系統總結", - "formResults": "表單結果列表", - "formResultsHint": "來自迴圈節點的結果陣列或單個表單發佈節點的輸出", - "appName": "應用名稱", - "appNameHint": "應用名稱,可以是變數引用或直接輸入文字", - "dashboardName": "儀表盤名稱", - "dashboardNameHint": "儀表盤名稱,可以是變數引用或直接輸入文字", - "summaryTitle": "總結標題", - "summaryTitleDefault": "系統建立完成", - "showStatistics": "顯示統計資訊", - "showStatisticsHint": "是否顯示模組數量等統計資訊", - "baseUrl": "基礎URL", - "baseUrlPlaceholder": "留空則使用相對路徑", - "baseUrlHint": "用於產生完整連結的基礎URL(可選)", - "summaryOutput": "完整的總結資料", - "totalForms": "表單總數", - "hasApp": "是否包含應用", - "hasDashboard": "是否包含儀表盤", - "useCase": "使用場景", - "fullAppCreate": "完整應用建立:", - "subAppCreate": "子應用模組建立:", - "singleFormCreate": "單個表單建立:", - "formCountOutput": "表單總數", - "formResultList": "表單結果列表", - "formResultListHint": "來自循環節點的結果數組或單個表單發布節點的輸出", - "hasAppOutput": "是否包含應用", - "hasDashboardOutput": "是否包含儀表盤", - "summaryDataOutput": "完整的總結數據", - "showStats": "顯示統計信息", - "showStatsHint": "是否顯示模組數量等統計信息", - "usageScenarios": "使用場景" - }, - "dashboardBasicInfo": { - "label": "儀表盤基礎資訊", - "placeholder": "儀表盤基礎資訊", - "name": "儀表盤名稱", - "namePlaceholder": "請輸入儀表盤名稱或使用變數", - "code": "儀表盤編碼", - "codePlaceholder": "請輸入編碼或使用變數", - "codeHint": "唯一標識,用於系統內部引用", - "category": "分類", - "categoryPlaceholder": "如:營運分析、銷售報表", - "catDashboard": "儀表盤", - "catDataboard": "數據看板", - "catOther": "其他", - "catPortal": "門戶", - "dashboardCode": "儀表盤編碼", - "dashboardCodePlaceholder": "留空則自動生成", - "description": "描述", - "descPlaceholder": "輸入描述", - "sort": "排序", - "dashboardName": "儀表盤名稱", - "dashboardNamePlaceholder": "輸入名稱或選擇變量" - }, - "dashboardCreate": { - "label": "建立儀表盤", - "placeholder": "建立儀表盤", - "basicInfo": "基礎資訊", - "basicInfoPlaceholder": "請使用變數引用基礎資訊節點的輸出", - "basicInfoHint": "來自儀表盤基礎資訊節點的輸出", - "pageConfig": "頁面配置", - "pageConfigPlaceholder": "請使用變數引用設計節點的輸出", - "pageConfigHint": "來自儀表盤設計節點的輸出", - "updateIfExists": "已存在時更新", - "updateIfExistsHint": "開啟後,如果儀表盤編碼已存在,將更新而不是報錯", - "dashboardId": "建立的儀表盤ID", - "dashboardCode": "儀表盤編碼", - "appId": "應用ID(可選)", - "appIdPlaceholder": "留空則不關聯應用", - "dashboardCodeOutput": "儀表盤編碼", - "dashboardIdOutput": "儀表盤ID", - "pageMetaOutput": "完整頁面元數據" - }, - "dashboardDesign": { - "label": "儀表盤設計", - "placeholder": "儀表盤設計", - "designContent": "設計內容", - "designContentPlaceholder": "請輸入設計內容或使用變數引用LLM輸出", - "designContentHint": "支援Markdown格式,可使用變數引用", - "designTitle": "設計標題", - "designTitlePlaceholder": "請輸入標題", - "pageConfigOutput": "頁面配置資料", - "dashboardCode": "儀表盤編碼", - "dashboardCodePlaceholder": "來自基礎信息節點", - "designSuggestion": "設計建議(可選)", - "designSuggestionPlaceholder": "LLM生成的設計建議", - "designTitleLabel": "設計標題", - "usageTip1": "此節點會打開儀表盤設計器", - "usageTip2": "用戶可以拖拽添加圖表、卡片等組件", - "usageTip3": "確認後會輸出頁面配置" - }, - "dashboardPublish": { - "label": "發佈儀表盤", - "placeholder": "發佈儀表盤", - "dashboardId": "儀表盤ID", - "dashboardIdPlaceholder": "請使用變數引用建立節點的輸出", - "dashboardIdHint": "來自儀表盤建立節點的輸出", - "menuName": "選單名稱", - "menuNamePlaceholder": "請輸入選單名稱", - "menuIcon": "選單圖示", - "menuIconPlaceholder": "如 LayoutDashboard", - "menuIdOutput": "選單ID", - "routePathOutput": "路由路徑", - "appId": "應用ID(可選)", - "appIdPlaceholder": "留空則使用儀表盤的應用ID", - "menuSort": "菜單排序", - "parentMenuId": "父菜單ID(可選)", - "parentMenuIdPlaceholder": "留空則為頂級菜單", - "publishResultOutput": "發布結果" - }, - "formBasicInfo": { - "label": "表單基礎資訊", - "placeholder": "表單基礎資訊", - "formName": "表單名稱", - "formNamePlaceholder": "請輸入表單名稱或使用變數", - "formCode": "表單編碼", - "formCodePlaceholder": "請輸入編碼或使用變數", - "formCodeHint": "用於產生存取路由", - "autoGenerate": "自動產生", - "autoGenCode": "自動生成編碼", - "autoGenCodeHint": "開啟後將根據表單名稱自動生成編碼(拼音轉換)", - "formCodeOutput": "表單編碼", - "formDesc": "表單描述", - "formDescOutput": "表單描述", - "formDescPlaceholder": "請輸入表單描述", - "formNameHint": "支持變量引用,如:", - "formNameOutput": "表單名稱", - "formTypeOutput": "表單類型", - "formCategoryOutput": "表單分類", - "fullConfigOutput": "完整的基礎信息對象", - "confirmedConfigOutput": "確認後的完整配置", - "normalForm": "普通表單", - "workflowForm": "工作流表單", - "sort": "排序", - "sortHint": "數字越小越靠前", - "sortOutput": "排序值", - "sortPlaceholder": "請輸入排序值", - "confirmedOutput": "是否已確認", - "formType": "表單類型", - "formTypePlaceholder": "請選擇表單類型" - }, - "formCreate": { - "label": "建立表單", - "placeholder": "建立表單", - "formConfig": "表單配置", - "formConfigPlaceholder": "請使用變數引用表單UI設計節點的輸出", - "formConfigHint": "來自表單UI設計節點的輸出", - "listConfig": "列表配置", - "listConfigPlaceholder": "請使用變數引用列表設計節點的輸出", - "listConfigHint": "來自列表設計節點的輸出", - "formCodeLabel": "表單編碼", - "formCodeOptional": "(可選)", - "formCodeHint": "用於產生存取路由", - "appId": "所屬應用ID", - "appIdPlaceholder": "留空則為主應用", - "appIdHint": "留空則不關聯應用", - "basicInfoHint": "來自表單基礎信息節點的輸出", - "dbCreate": "數據庫創建", - "dbDesign": "數據庫設計", - "dbDesignConfig": "數據庫設計配置", - "dbDesignHint": "來自數據庫設計節點的輸出", - "formBasicInfo": "表單基礎信息", - "formCodeOutput": "表單編碼", - "formCreateStep": "表單創建", - "formIdOutput": "創建的表單ID", - "formMetaOutput": "完整的表單元數據", - "formPublish": "表單發布", - "fullWorkflow": "完整工作流", - "listDesign": "列表UI設計", - "listDesignConfig": "列表配置", - "listDesignHint": "來自列表UI設計節點的輸出", - "uiDesign": "表單UI設計", - "uiDesignConfig": "表單UI設計配置", - "uiDesignHint": "來自表單UI設計節點的輸出", - "updateIfExists": "存在時更新", - "updateIfExistsHint": "表單編碼已存在時是否更新現有表單" - }, - "formData": { - "label": "表單資料", - "placeholder": "表單資料", - "createLabel": "創建表單數據", - "data": "數據", - "dataHint": "支持單條對象或數組(批量操作)", - "dataPlaceholder": "輸入 JSON 數據或變量,如", - "deleteLabel": "刪除表單數據", - "filterConditions": "過濾條件", - "formCode": "表單編碼", - "formCodeHint": "已發布的表單編碼", - "formCodeInputHint": "支持直接輸入表單編碼或使用變量", - "formCodeInputPlaceholder": "輸入表單編碼或使用變量,如", - "formCodePlaceholder": "請輸入表單編碼或使用變量", - "generateArray": "生成數組類型", - "generateArrayHint": "勾選後生成的結構將包裝為數組,用於提取多條數據", - "hardDelete": "物理刪除(不可恢復)", - "hardDeleteHint": "默認為軟刪除,勾選後將永久刪除數據", - "listLabel": "查詢表單數據", - "operationType": "操作類型", - "create": "創建", - "read": "讀取", - "update": "更新", - "delete": "刪除", - "list": "查詢列表", - "readLabel": "讀取表單數據", - "recordId": "記錄ID", - "recordIdHint": "要讀取的記錄ID", - "recordIdPlaceholder": "輸入記錄ID,支持變量如", - "schemaToLlmLabel": "表單轉LLM結構", - "selectFormPlaceholder": "從列表中選擇表單", - "selectedFormHint": "從已發布的表單中選擇(編碼: {code})", - "unknownOp": "未知操作", - "updateFieldData": "更新字段數據", - "updateFieldDataHint": "要更新的字段數據(JSON對象)", - "updateLabel": "更新表單數據", - "updateRecordIdHint": "要更新的記錄ID", - "deleteRecordIdHint": "要刪除的記錄ID", - "fieldData": "字段數據", - "createFieldDataHint": "創建記錄的字段數據(JSON對象)", - "queryConditions": "查詢條件", - "queryConditionsHint": "查詢過濾條件(JSON對象)", - "pageSize": "每頁條數", - "pageNum": "頁碼", - "outputVarHint": "操作結果將保存到此變量", - "createdRecordId": "創建的記錄ID", - "recordDetail": "記錄詳情", - "variableInput": "變量輸入", - "selectFromList": "下拉選擇" - }, - "formDatabaseCreate": { - "label": "表單資料庫建立", - "placeholder": "表單資料庫建立" - }, - "formDatabaseDesign": { - "label": "表單資料庫設計", - "placeholder": "表單資料庫設計" - }, - "formListDesign": { - "label": "列表設計", - "placeholder": "列表設計", - "autoGenColumns": "自動生成列配置", - "autoGenColumnsHint": "根據表單字段自動生成列表列", - "autoGenQuery": "自動生成查詢字段", - "autoGenQueryHint": "根據表單字段自動生成查詢條件", - "columnCountOutput": "列數量", - "containerType": "容器類型", - "containerTypeHint": "表單編輯時的容器類型", - "containerTypePlaceholder": "請選擇容器類型", - "dbDesignConfig": "數據庫設計配置", - "dbDesignConfigHint": "來自數據庫設計節點的輸出,用於補充字段類型信息", - "dbDesignConfigPlaceholder": "可選,用於補充字段類型信息", - "dialog": "彈窗", - "drawer": "抽屜", - "enableExport": "啟用導出", - "enableImport": "啟用導入", - "fullConfigOutput": "完整的列表配置", - "inferRules": "智能推斷規則", - "inferRule1": "查詢字段:name/status/type 等", - "inferRule2": "查詢類型:selector→in,option→eq,date→range,text→like", - "inferRule3": "列排序:默認後端排序,文件/圖片字段不支持", - "inferRule4": "列對齊:數字→右對齊,日期→居中,其他→左對齊", - "inferRule5": "標籤展示:選項類字段自動使用 Tag", - "page": "頁面", - "pageSize": "每頁條數", - "pageSizePlaceholder": "請選擇每頁條數", - "queryFieldCountOutput": "查詢字段數量", - "showIndex": "顯示序號列", - "showSelection": "顯示選擇列", - "uiDesignConfig": "表單UI設計配置", - "uiDesignConfigHint": "來自表單UI設計節點的輸出配置", - "uiDesignConfigPlaceholder": "請使用變量引用表單UI設計節點的輸出", - "perPage": "{count} 條/頁" - }, - "formPublish": { - "label": "表單發佈", - "placeholder": "表單發佈", - "formCode": "表單編碼", - "formCodeHint": "用於生成訪問路由", - "formId": "表單ID", - "formIdHint": "來自表單創建節點的輸出", - "menuIdOutput": "創建的菜單ID", - "publishResultOutput": "發布結果詳情", - "routePathOutput": "表單訪問路徑", - "usageTip1": "此節點用於將已創建的表單發布到菜單系統。", - "usageTip2": "執行時會在右側面板顯示發布配置編輯器,用戶可以設置菜單名稱、圖標等信息。" - }, - "formUIDesign": { - "label": "表單UI設計", - "placeholder": "表單UI設計", - "dbDesignConfig": "資料庫設計配置", - "dbDesignPlaceholder": "請使用變數引用資料庫設計節點的輸出 {'{{form_database_design.database_design}}'}", - "dbDesignHint": "來自資料庫設計節點的輸出配置", - "formNameLabel": "表單名稱", - "formNamePlaceholder": "不填則使用表別名", - "formNameHint": "表單顯示名稱,如:員工資訊表單", - "formCodeLabel": "表單編碼", - "formCodePlaceholder": "不填則使用表名", - "formCodeHint": "表單唯一編碼,用於系統標識", - "layoutMode": "佈局模式", - "layoutModePlaceholder": "請選擇佈局模式", - "autoLayout": "自動(根據欄位數量)", - "singleColumn": "單欄佈局", - "doubleColumn": "雙欄佈局", - "tripleColumn": "三欄佈局", - "autoLayoutHint": "自動模式:≤6欄位單欄,7-12欄位雙欄,>12欄位三欄", - "labelWidth": "標籤寬度", - "labelWidthHint": "表單標籤寬度(像素),預設 120px", - "enableGrouping": "啟用分組", - "enableGroupingHint": "根據欄位類型自動分組(基本資訊、聯絡方式、系統資訊等)", - "hideSystemFields": "隱藏系統欄位", - "hideSystemFieldsHint": "隱藏系統欄位(id, sys_create_datetime, is_deleted 等)", - "formDesignOutput": "完整的表單UI設計配置", - "formCodeOutput": "表單編碼", - "fieldCountOutput": "欄位數量", - "groupCountOutput": "分組數量", - "smartMapping": "智慧映射規則", - "dbDesignConfigHint": "來自數據庫設計節點的輸出配置", - "dbDesignConfigPlaceholder": "請使用變量引用數據庫設計節點的輸出", - "formCode": "表單編碼", - "formName": "表單名稱", - "fullConfigOutput": "完整的表單UI設計配置", - "mappingRules": "智能映射規則", - "mappingRule1": "varchar → 輸入框 / 文本域 (length>200)", - "mappingRule2": "int/decimal → 數字輸入 / 金額輸入", - "mappingRule3": "datetime → 日期時間選擇器", - "mappingRule4": "boolean → 開關", - "mappingRule5": "*_id → 下拉選擇 / 用戶/部門選擇器", - "mappingRule6": "email/phone → 帶校驗的輸入框", - "layoutAuto": "自動(根據字段數量)", - "layoutAutoHint": "自動模式:≤6字段單列,7-12字段雙列,>12字段三列", - "layoutDouble": "雙列佈局", - "layoutSingle": "單列佈局", - "layoutTriple": "三列佈局" - }, - "snowflakeAnalyst": { - "label": "Snowflake Cortex Analyst", - "placeholder": "Snowflake Cortex Analyst", - "authPassword": "使用者名稱/密碼", - "authKeyPair": "金鑰對 (Key Pair)", - "authSSO": "外部瀏覽器 SSO", - "fillRequired": "請先填寫必填的連線資訊", - "fillPassword": "請填寫密碼", - "fillPrivateKey": "請填寫私鑰內容或私鑰檔案路徑", - "connectionFailed": "連線測試失敗", - "snowflakeConnection": "Snowflake 連線", - "authMethod": "認證方式", - "authMethodPlaceholder": "選擇認證方式", - "username": "使用者名稱", - "password": "密碼,支援變數", - "privateKeyContent": "私鑰內容", - "privateKeyPlaceholder": "RSA 私鑰內容(PEM 格式),或使用下方檔案路徑", - "privateKeyPath": "或 私鑰檔案路徑", - "privateKeyPassword": "私鑰密碼", - "privateKeyPasswordHint": "如果私鑰有密碼保護,請填寫", - "ssoHint": "外部瀏覽器 SSO 認證將在執行時開啟瀏覽器進行身份驗證。", - "database": "資料庫名", - "schemaOptional": "可選", - "testing": "測試中...", - "testConnection": "測試連線", - "snowflakeVersion": "Snowflake 版本", - "queryConfig": "查詢配置", - "semanticModel": "語義模型", - "semanticModelHint1": "支援兩種格式:", - "semanticModelHint2": "Stage 檔案", - "queryQuestion": "查詢問題", - "queryPlaceholder": "用自然語言描述你想查詢的資料,如:上個月的銷售總額是多少?", - "queryHint": "Cortex Analyst 會自動將自然語言轉換為 SQL 查詢", - "resultVarName": "結果變數名", - "resultVarHint": "查詢結果資料將儲存到此變數", - "sqlVarName": "SQL 變數名", - "sqlVarHint": "產生的 SQL 語句將儲存到此變數", - "databaseName": "數據庫名", - "optional": "可選", - "passwordPlaceholder": "密碼,支持變量", - "privateKeyPasswordPlaceholder": "如果私鑰有密碼保護,請填寫", - "selectAuthMethod": "選擇認證方式", - "twoFormats": "支持兩種格式" - }, - "snowflakeLLM": { - "label": "Snowflake Cortex LLM", - "placeholder": "Snowflake Cortex LLM", - "complete": "LLM 生成 (COMPLETE)", - "summarize": "文字摘要 (SUMMARIZE)", - "translate": "翻譯 (TRANSLATE)", - "sentiment": "情感分析 (SENTIMENT)", - "extractAnswer": "問答提取 (EXTRACT_ANSWER)", - "langEn": "英語", - "langZh": "中文", - "langJa": "日語", - "langKo": "韓語", - "langFr": "法語", - "langDe": "德語", - "langEs": "西班牙語", - "langRu": "俄語", - "langPt": "葡萄牙語", - "langIt": "義大利語", - "ssoHintFull": "外部瀏覽器 SSO\n認證將在執行時開啟瀏覽器進行身份驗證,適用於互動式場景。", - "varHint": "支援變數如", - "functionConfig": "功能配置", - "functionType": "功能類型", - "selectFunction": "選擇功能", - "selectModelLabel": "選擇模型", - "systemPrompt": "系統提示詞", - "promptRequired": "提示詞", - "promptPlaceholder": "輸入提示詞,支援變數如 {'{{user_input}}'}", - "defineAiRole": "定義 AI 的角色和行為規則", - "textToSummarize": "待摘要文字", - "textToSummarizePlaceholder": "輸入需要摘要的文字,支援變數", - "textToTranslate": "待翻譯文字", - "textToTranslatePlaceholder": "輸入需要翻譯的文字,支援變數", - "sourceLang": "來源語言", - "targetLang": "目標語言", - "textToAnalyze": "待分析文字", - "textToAnalyzePlaceholder": "輸入需要分析情感的文字,支援變數", - "sentimentRange": "回傳值範圍: -1 (負面) 到 1 (正面)", - "documentContent": "文件內容", - "documentPlaceholder": "輸入文件內容,支援變數", - "questionLabel": "問題", - "questionPlaceholder": "輸入要從文件中提取答案的問題", - "outputVarHint": "Cortex 的輸出將儲存到此變數,供後續節點使用", - "funcComplete": "LLM 生成 (COMPLETE)", - "funcExtractAnswer": "問答提取 (EXTRACT_ANSWER)", - "funcSentiment": "情感分析 (SENTIMENT)", - "funcSummarize": "文本摘要 (SUMMARIZE)", - "funcTranslate": "翻譯 (TRANSLATE)", - "passwordPlaceholder": "密碼,支持變量如", - "prompt": "提示詞", - "question": "問題", - "sentimentPlaceholder": "輸入需要分析情感的文本,支持變量", - "sentimentText": "待分析文本", - "sourceLanguage": "源語言", - "summarizePlaceholder": "輸入需要摘要的文本,支持變量", - "summarizeText": "待摘要文本", - "systemPromptPlaceholder": "定義 AI 的角色和行為規則", - "targetLanguage": "目標語言", - "translatePlaceholder": "輸入需要翻譯的文本,支持變量", - "translateText": "待翻譯文本", - "varRefHint": "支持變量如" - }, - "formDbCreate": { - "allReadyOutput": "所有表是否就緒", - "autoCreateSchema": "自動創建Schema", - "autoCreateSchemaHint": "Schema不存在時自動創建(僅PostgreSQL/SQL Server)", - "cautionWarning": "此節點將實際創建數據庫表,請謹慎操作", - "database": "目標資料庫(可選)", - "databaseHint": "若配置則優先使用此值,否則使用設計節點中的目標庫;留空則使用連線預設庫", - "databasePlaceholder": "如 my_app_db,支持變量 {'{{database}}'}", - "dbDesignConfig": "數據庫設計配置", - "dbDesignConfigHint": "從上一節點(表結構設計)獲取的數據庫設計配置", - "dbDesignConfigPlaceholder": "請使用變量", - "errorCountOutput": "錯誤數量", - "ifExists": "表已存在時", - "ifExistsHint": "表已存在時的處理方式,推薦選擇\"跳過\"", - "ifExistsPlaceholder": "請選擇處理方式", - "label": "數據庫表創建", - "note1": "此節點會實際執行DDL語句創建表", - "note2": "建議在測試環境先驗證SQL語句", - "note3": "選擇\"刪除重建\"會丟失表中所有數據", - "note4": "確保數據庫用戶有CREATE TABLE權限", - "notes": "注意事項", - "placeholder": "數據庫表創建", - "replaceDanger": "刪除重建(危險)", - "resultOutput": "創建結果對象", - "schema": "數據庫 Schema(可選)", - "schemaHint": "PostgreSQL/SQL Server schema 名稱。如果配置則優先使用此值,否則使用設計節點的 schema", - "schemaPlaceholder": "如 public、app,支持變量", - "skipRecommended": "跳過(推薦)", - "successCountOutput": "成功創建的表數量", - "throwError": "報錯" - }, - "formDbDesign": { - "autoAddSystemFields": "自動添加系統字段", - "autoAddSystemFieldsHint": "自動添加系統字段(id, sys_create_datetime, sys_update_datetime等)", - "dbConfig": "數據庫配置", - "dbConfigHint": "數據庫配置名稱,默認為 default", - "dbConfigPlaceholder": "請輸入數據庫配置名", - "dbSchema": "數據庫 Schema", - "dbSchemaHint": "PostgreSQL 的 schema 名稱,為空則使用數據庫默認 schema", - "dbSchemaPlaceholder": "PostgreSQL schema 名稱,如 public、app(可選)", - "dbType": "數據庫類型", - "dbTypePlaceholder": "請選擇數據庫類型", - "dbTypeHint": "選擇目標數據庫類型,影響字段類型映射", - "designMode": "設計模式", - "designModeHint": "選擇設計主表或從表,從表需要指定關聯的主表", - "fieldCountOutput": "字段數量", - "fieldConfigExample": "字段配置示例 (array)", - "fieldList": "字段列表", - "fieldListHint": "字段配置數組,每個字段包含 name、type、comment 等屬性", - "fieldListPlaceholder": "請輸入字段列表或使用變量", - "foreignKey": "外鍵字段", - "foreignKeyHint": "關聯主表的外鍵字段名,不填則自動生成", - "foreignKeyPlaceholder": "默認為 {主表名}_id", - "fullDesignOutput": "完整的數據庫設計對象", - "label": "數據庫表結構設計", - "mainTable": "主表", - "placeholder": "數據庫表結構設計", - "relatedMainTable": "關聯主表", - "relatedMainTableHint": "從表關聯的主表名稱", - "relatedMainTablePlaceholder": "請輸入關聯的主表名或使用變量", - "subFieldListPlaceholder": "請輸入從表字段列表或使用變量", - "subFieldListHint": "從表字段配置數組", - "subTable": "從表", - "subTableName": "從表名", - "subTableNameHint": "從表的數據庫表名", - "subTableNamePlaceholder": "請輸入從表名或使用變量", - "tableName": "表名", - "tableNameHint": "數據庫表名,如:employee、order_info", - "tableNameOutput": "表名稱", - "tableNamePlaceholder": "請輸入表名或使用變量" - } - } - }, - "workflowRuns": { - "title": "執行歷史", - "description": "查看 AI 工作流的運行記錄與節點執行日誌", - "search": "查詢", - "refresh": "刷新", - "filters": { - "workflow": "工作流", - "status": "狀態", - "trigger": "觸發來源", - "allWorkflows": "全部工作流", - "allStatus": "全部狀態", - "allTriggers": "全部來源" - }, - "columns": { - "workflow": "工作流", - "status": "狀態", - "trigger": "觸發來源", - "steps": "步驟", - "tokens": "Token", - "duration": "耗時", - "startedAt": "開始時間", - "error": "錯誤", - "actions": "操作" - }, - "status": { - "pending": "等待中", - "running": "運行中", - "waiting": "等待輸入", - "completed": "已完成", - "failed": "失敗", - "stopped": "已停止" - }, - "trigger": { - "editor_draft": "編輯器調試", - "editor_published": "編輯器發布版", - "agent": "智能體", - "api": "API 調用", - "form_button": "表單按鈕" - }, - "detail": { - "back": "返回列表", - "runId": "運行 ID", - "openEditor": "打開工作流", - "snapshotMissing": "缺少定義快照,畫布可能無法完整回放", - "completedAt": "完成時間", - "version": "版本", - "draft": "草稿", - "timeline": "執行時間線", - "noLogs": "暫無執行日誌", - "inputsOutputs": "輸入 / 輸出" - } - } -} diff --git a/web/apps/web-ele/src/locales/langs/zh-TW/announcement.json b/web/apps/web-ele/src/locales/langs/zh-TW/announcement.json deleted file mode 100644 index 41ebfae..0000000 --- a/web/apps/web-ele/src/locales/langs/zh-TW/announcement.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "title": "標題", - "status": "狀態", - "priority": "優先級", - "targetType": "接收範圍", - "readCount": "閱讀數", - "publisher": "發佈人", - "publishTime": "發佈時間", - "actions": "操作", - "keyword": "關鍵詞", - "keywordPlaceholder": "請輸入標題關鍵詞", - "statusAll": "全部", - "statusDraft": "草稿", - "statusPublished": "已發佈", - "statusExpired": "已過期", - "priorityNormal": "普通", - "priorityImportant": "重要", - "priorityUrgent": "緊急", - "targetTypeAll": "全員", - "targetTypeDept": "指定部門", - "targetTypeRole": "指定角色", - "targetTypeUser": "指定用戶", - "topTag": "置頂", - "createButton": "新增公告", - "editButton": "編輯", - "deleteButton": "刪除", - "publishButton": "發佈", - "statsButton": "閱讀統計", - "moreButton": "更多", - "createTitle": "新增公告", - "editTitle": "編輯公告", - "deleteConfirm": "確定要刪除公告 \"{title}\" 嗎?", - "deleteConfirmTitle": "刪除確認", - "publishConfirm": "確定發佈該公告嗎?發佈後將通知相關用戶。", - "publishConfirmTitle": "發佈確認", - "deleteSuccess": "刪除成功", - "publishSuccess": "發佈成功", - "updateSuccess": "更新成功", - "createSuccess": "創建成功", - "formTitleLabel": "標題", - "formTitlePlaceholder": "請輸入公告標題", - "formSummaryLabel": "摘要", - "formSummaryPlaceholder": "請輸入摘要(可選)", - "formContentLabel": "內容", - "formContentPlaceholder": "請輸入公告內容", - "formTitleRequired": "請輸入公告標題", - "formContentRequired": "請輸入公告內容", - "formPriorityLabel": "優先級", - "formTopLabel": "置頂", - "formTargetTypeLabel": "接收範圍", - "formExpireTimeLabel": "過期時間", - "formExpireTimePlaceholder": "選擇過期時間(可選)", - "formCancelButton": "取消", - "formSaveButton": "保存", - "statsTitle": "閱讀統計", - "statsReadCount": "已閱讀: {count} 人", - "statsUserLabel": "用戶", - "statsReadTimeLabel": "閱讀時間", - "unreadOnly": "只看未讀", - "unreadOnlyAll": "全部", - "unreadOnlyUnread": "未讀", - "unreadCount": "{count} 條未讀", - "viewButton": "查看", - "publisherLabel": "發佈人", - "publishTimeLabel": "發佈時間", - "emptyList": "暫無公告", - "loadingMore": "載入中...", - "noMore": "沒有更多了", - "detailTitle": "公告詳情", - "selectHint": "請選擇一條公告查看", - "unreadLabel": "未讀", - "summary": "摘要" -} diff --git a/web/apps/web-ele/src/locales/langs/zh-TW/api-token.json b/web/apps/web-ele/src/locales/langs/zh-TW/api-token.json deleted file mode 100644 index 387c3a1..0000000 --- a/web/apps/web-ele/src/locales/langs/zh-TW/api-token.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "title": "API Token", - "deviceManagement": "設備管理", - "description": "建立用於自動化調用的個人訪問令牌。", - "loadError": "載入 Token 失敗", - "nameRequired": "請輸入 Token 名稱", - "createError": "建立 Token 失敗", - "createToken": "建立 Token", - "tokenName": "Token 名稱", - "tokenNamePlaceholder": "請輸入 Token 名稱", - "expirationDate": "過期時間", - "neverExpiresHint": "不選擇則永不過期", - "tokenDescription": "描述", - "tokenDescriptionPlaceholder": "請輸入描述", - "tokenCreated": "Token 已建立", - "tokenWarning": "請立即複製保存 Token,關閉後將無法再次查看。", - "revokeTitle": "撤銷 Token", - "revokeConfirm": "確定撤銷 Token「{0}」嗎?", - "confirmRevoke": "確認撤銷", - "revokeSuccess": "Token 已撤銷", - "revokeToken": "撤銷 Token", - "copy": "複製", - "copied": "已複製", - "copySuccess": "已複製到剪貼簿", - "copyError": "複製失敗", - "neverExpires": "永不過期", - "expired": "已過期", - "expiresSoon": "{0} 天後過期", - "createdAt": "建立時間", - "lastUsed": "最後使用", - "empty": "暫無 Token", - "days7": "7 天", - "days30": "30 天", - "days60": "60 天", - "days90": "90 天", - "days365": "1 年" -} diff --git a/web/apps/web-ele/src/locales/langs/zh-TW/application.json b/web/apps/web-ele/src/locales/langs/zh-TW/application.json deleted file mode 100644 index 3f8b48c..0000000 --- a/web/apps/web-ele/src/locales/langs/zh-TW/application.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "title": "應用管理", - "createApp": "創建應用", - "editApp": "編輯應用", - "search": "搜索", - "searchPlaceholder": "搜索應用名稱或編碼", - "noApps": "暫無應用", - "appName": "應用名稱", - "appNamePlaceholder": "請輸入應用名稱", - "appCode": "應用編碼", - "appCodePlaceholder": "請輸入應用編碼(用於URL路由)", - "appType": "應用類型", - "appTypePlaceholder": "請選擇應用類型", - "appDescription": "應用描述", - "appDescriptionPlaceholder": "請輸入應用描述", - "appIcon": "應用圖標", - "systemMenu": "系統菜單", - "systemMenuPlaceholder": "選擇開發模式下顯示的系統菜單(留空則顯示全部)", - "selectSystemMenu": "選擇系統菜單", - "save": "保存", - "create": "創建", - "cancel": "取消", - "develop": "設置開發", - "edit": "編輯", - "publish": "發布", - "enable": "啟用", - "disable": "停用", - "delete": "刪除", - "publishApp": "發布應用", - "enableApp": "啟用應用", - "disableApp": "停用應用", - "confirmPublish": "確認發布", - "confirmEnable": "確認啟用", - "confirmDisable": "確認停用", - "publishConfirmMsg": "確定要發布應用「{name}」嗎?", - "enableConfirmMsg": "確定要重新啟用應用「{name}」嗎?", - "publishSuccessMsg": "發布後,用戶可以通過以下鏈接訪問該應用:", - "enableSuccessMsg": "啟用後,用戶可以通過以下鏈接訪問該應用:", - "disableConfirmMsg": "確定要停用應用「{name}」嗎?", - "appLink": "應用鏈接:", - "deleteConfirm": "刪除確認", - "deleteConfirmMsg": "確定要刪除應用「{name}」嗎?", - "confirm": "確定", - "loadFailed": "加載應用列表失敗", - "publishSuccess": "發布成功", - "publishFailed": "發布失敗", - "enableSuccess": "啟用成功", - "enableFailed": "啟用失敗", - "disableSuccess": "停用成功", - "disableFailed": "停用失敗", - "deleteSuccess": "刪除成功", - "copySuccess": "鏈接已複製到剪貼板", - "copyFailed": "複製失敗", - "appTypes": { - "mixed": "混合應用", - "form": "表單應用", - "workflow": "流程應用", - "ai": "AI應用", - "dashboard": "數據應用", - "screen": "大屏應用" - }, - "appStatus": { - "draft": "開發中", - "published": "已發布", - "disabled": "已停用" - }, - "validation": { - "nameRequired": "請輸入應用名稱", - "nameLength": "長度在 2 到 100 個字符", - "codeRequired": "請輸入應用編碼", - "codePattern": "編碼必須以字母開頭,只能包含字母、數字、下劃線和短橫線", - "codeLength": "長度在 2 到 100 個字符", - "typeRequired": "請選擇應用類型" - } -} diff --git a/web/apps/web-ele/src/locales/langs/zh-TW/approval.json b/web/apps/web-ele/src/locales/langs/zh-TW/approval.json deleted file mode 100644 index e76556e..0000000 --- a/web/apps/web-ele/src/locales/langs/zh-TW/approval.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "title": "流程標題", - "type": "流程類型", - "currentNode": "當前節點", - "processNode": "處理節點", - "initiator": "發起人", - "receiveTime": "接收時間", - "processTime": "處理時間", - "copyTime": "抄送時間", - "startTime": "發起時間", - "actions": "操作", - "processResult": "處理結果", - "status": "狀態", - "approved": "已通過", - "rejected": "已拒絕", - "transferred": "已轉交", - "pending": "審批中", - "cancelled": "已撤回", - "unread": "未讀", - "read": "已讀", - "tabPending": "我的待辦", - "tabHandled": "我的已辦", - "tabInitiated": "我發起的", - "tabCopy": "抄送我的", - "approveButton": "審批", - "detailButton": "詳情", - "urgeButton": "催辦", - "cancelButton": "撤回", - "markReadButton": "標記已讀", - "emptyPending": "暫無待辦任務", - "emptyHandled": "暫無已辦任務", - "emptyInitiated": "暫無發起的流程", - "emptyCopy": "暫無抄送", - "urgeConfirm": "確定要催辦此流程嗎?", - "cancelConfirm": "確定要撤回此流程嗎?", - "urgeSuccess": "催辦成功", - "cancelSuccess": "撤回成功", - "markReadSuccess": "已標記為已讀", - "operationFailed": "操作失敗", - "dialogTitle": "審批", - "initiatorLabel": "發起人", - "startTimeLabel": "發起時間", - "currentNodeLabel": "當前節點", - "formDataTitle": "表單數據", - "approvalLogsTitle": "審批記錄", - "approvalActionTitle": "審批操作", - "approvalResultLabel": "審批結果", - "approvalOpinionLabel": "審批意見", - "approvalOpinionPlaceholder": "請輸入審批意見(可選)", - "approveAction": "通過", - "rejectAction": "拒絕", - "cancelButton2": "取消", - "submitButton": "確認提交", - "approveSuccess": "審批通過", - "rejectSuccess": "已拒絕", - "loadDataFailed": "加載數據失敗", - "startAction": "發起流程", - "approveActionLabel": "通過", - "rejectActionLabel": "拒絕", - "transferAction": "轉交", - "cancelAction": "撤回" -} diff --git a/web/apps/web-ele/src/locales/langs/zh-TW/authentication.json b/web/apps/web-ele/src/locales/langs/zh-TW/authentication.json deleted file mode 100644 index 14ba31c..0000000 --- a/web/apps/web-ele/src/locales/langs/zh-TW/authentication.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "username": "用戶名", - "usernameTip": "請輸入用戶名", - "password": "密碼", - "passwordTip": "請輸入密碼", - "confirmPassword": "確認密碼", - "confirmPasswordTip": "兩次輸入密碼不一致", - "passwordStrength": "密碼強度", - "selectAccount": "選擇賬戶", - "verifyRequiredTip": "請完成滑塊驗證", - "mobile": "手機號", - "mobileTip": "請輸入手機號", - "mobileErrortip": "請輸入正確的手機號", - "code": "驗證碼", - "codeTip": "驗證碼長度為 {0} 位", - "sendCode": "發送驗證碼", - "sendText": "重新發送({0}s)", - "email": "郵箱", - "emailTip": "請輸入郵箱", - "emailValidErrorTip": "請輸入正確的郵箱格式", - "agree": "我同意", - "privacyPolicy": "隱私政策", - "terms": "服務條款", - "agreeTip": "請同意隱私政策和服務條款", - "thirdPartyLogin": "第三方登錄", - "getAuthUrlFailed": "獲取授權鏈接失敗", - "giteeLoginFailed": "Gitee 登錄失敗,請稍後重試", - "githubLoginFailed": "GitHub 登錄失敗,請稍後重試", - "qqLoginFailed": "QQ 登錄失敗,請稍後重試", - "googleLoginFailed": "Google 登錄失敗,請稍後重試", - "wechatLoginFailed": "微信登錄失敗,請稍後重試", - "microsoftLoginFailed": "微軟登錄失敗,請稍後重試", - "dingtalkLoginFailed": "釘釘登錄失敗,請稍後重試", - "feishuLoginFailed": "飛書登錄失敗,請稍後重試", - "wechat": "微信", - "wecom": "企業微信", - "dingtalk": "釘釘", - "feishu": "飛書", - "wecomLoginFailed": "企業微信登錄失敗,請稍後重試", - "dingtalkAutoRedirect": "偵測到釘釘環境,正在跳轉登入..." -} diff --git a/web/apps/web-ele/src/locales/langs/zh-TW/chat.json b/web/apps/web-ele/src/locales/langs/zh-TW/chat.json deleted file mode 100644 index 5e1023b..0000000 --- a/web/apps/web-ele/src/locales/langs/zh-TW/chat.json +++ /dev/null @@ -1,91 +0,0 @@ -{ - "title": "聊天", - "search": "搜尋聯絡人或群聊", - "noConversations": "暫無會話", - "selectHint": "選擇一個會話開始聊天", - "newChat": "發起聊天", - "newGroup": "建立群聊", - "private": "單聊", - "group": "群聊", - "members": "成員", - "memberCount": "{count} 人", - "owner": "群主", - "admin": "管理員", - "member": "成員", - "groupName": "群聊名稱", - "groupNamePlaceholder": "請輸入群聊名稱", - "selectMembers": "選擇成員", - "selectMembersPlaceholder": "請選擇群成員", - "createGroupSuccess": "群聊建立成功", - "inputPlaceholder": "輸入訊息...", - "send": "傳送", - "sendImage": "傳送圖片", - "sendFile": "傳送檔案", - "recall": "撤回", - "recallSuccess": "訊息已撤回", - "recallFailed": "撤回失敗", - "recallTimeout": "超過2分鐘無法撤回", - "messageRecalled": "訊息已撤回", - "typing": "正在輸入...", - "yesterday": "昨天", - "pin": "置頂", - "unpin": "取消置頂", - "mute": "免打擾", - "unmute": "取消免打擾", - "conversationInfo": "會話資訊", - "addMember": "新增成員", - "addMemberSuccess": "成員新增成功", - "allMembersExist": "所選成員已在群聊中", - "removeMember": "移除成員", - "removeMemberConfirm": "確定移除該成員嗎?", - "dissolveGroup": "解散群聊", - "dissolveGroupConfirm": "確定解散該群聊嗎?解散後不可恢復。", - "dissolveSuccess": "群聊已解散", - "leaveGroup": "退出群聊", - "noMessages": "暫無訊息", - "loadMore": "載入更多", - "loading": "載入中...", - "image": "圖片", - "file": "檔案", - "replyTo": "回覆", - "groupNameRequired": "請輸入群聊名稱", - "membersRequired": "請至少選擇一個成員", - "recentChats": "最近聊天", - "contacts": "聯絡人", - "searchContacts": "搜尋聯絡人", - "noContacts": "暫無聯絡人", - "startChat": "發起聊天", - "online": "線上", - "offline": "離線", - "sending": "傳送中...", - "contactDetail": "聯絡人詳情", - "contactDept": "部門", - "contactPost": "崗位", - "contactManager": "直屬上級", - "contactEmail": "郵箱", - "contactMobile": "手機", - "contactCity": "城市", - "contactType": "用戶類型", - "contactOrg": "組織架構", - "contactOrgInfo": "組織資訊", - "contactInfo": "聯繫方式", - "selectContactHint": "選擇一個聯絡人查看詳情", - "copy": "複製", - "copySuccess": "已複製到剪貼簿", - "replyingTo": "回覆 {name}", - "markUnread": "標記未讀", - "deleteConversation": "刪除記錄", - "deleteConversationConfirm": "確定刪除該會話記錄嗎?", - "deleteSuccess": "已刪除", - "orgStructure": "組織架構", - "emoji": "表情", - "voiceMessage": "語音訊息", - "voiceTooShort": "錄音時間太短", - "voiceUploading": "語音傳送中...", - "micPermissionDenied": "無法存取麥克風,請檢查瀏覽器權限", - "voice": "語音", - "dropToUpload": "\u9b06\u958b\u50b3\u9001\u6a94\u6848", - "newMessage": "\u65b0\u8a0a\u606f", - "systemNotification": "\u7cfb\u7d71\u901a\u77e5", - "viewDetail": "\u67e5\u770b\u8a73\u60c5" -} diff --git a/web/apps/web-ele/src/locales/langs/zh-TW/common.json b/web/apps/web-ele/src/locales/langs/zh-TW/common.json deleted file mode 100644 index a1e3b9c..0000000 --- a/web/apps/web-ele/src/locales/langs/zh-TW/common.json +++ /dev/null @@ -1,188 +0,0 @@ -{ - "all": "全部", - "mainApp": "主應用", - "close": "關閉", - "operation": "操作", - "next": "下一步", - "prev": "上一步", - "cancel": "取消", - "cancelEdit": "取消編輯", - "ok": "確定", - "confirm": "確認", - "confirmAndContinue": "確認並繼續", - "save": "保存", - "add": "新增", - "delete": "刪除", - "edit": "編輯", - "update": "更新", - "reset": "重置", - "status": "狀態", - "enabled": "啟用", - "disabled": "禁用", - "selected": "已選擇", - "noData": "暫無數據", - "loading": "加載中", - "loadMore": "加載更多", - "noMore": "沒有更多數據了", - "noMoreData": "沒有更多數據", - "justNow": "剛剛", - "minutesAgo": "分鐘前", - "hoursAgo": "小時前", - "yesterday": "昨天", - "daysAgo": "天前", - "tips": "提示", - "warning": "警告", - "success": "成功", - "info": "信息", - "error": "錯誤", - "primary": "主要", - "search": "搜索", - "clear": "清空", - "replace": "替換", - "copy": "複製", - "format": "格式化", - "compress": "壓縮", - "redo": "重做", - "jsonEditor": { - "placeholder": "輸入或粘貼 JSON", - "valid": "✓ 有效", - "invalid": "✗ 無效", - "format": "格式化", - "compress": "壓縮", - "copy": "複製", - "clear": "清空", - "copiedSuccess": "已複製到剪貼板", - "copyFailed": "複製失敗", - "noContent": "沒有內容可複製", - "formatSuccess": "格式化成功", - "formatFailed": "格式化失敗: {0}", - "compressSuccess": "壓縮成功", - "compressFailed": "壓縮失敗: {0}", - "invalidJson": "JSON 格式錯誤", - "emptyContent": "請輸入 JSON 內容", - "stats": "行: {0} | 字符: {1}" - }, - "ui": { - "placeholder": { - "select": "請選擇", - "selectAll": "全選", - "search": "請輸入搜索內容" - }, - "actionTitle": { - "create": "新建{0}", - "add": "添加{0}", - "edit": "編輯{0}", - "view": "查看{0}", - "delete": "刪除{0}" - }, - "actionMessage": { - "createSuccess": "創建成功", - "createError": "創建失敗", - "updateSuccess": "更新成功", - "updateError": "更新失敗", - "deleteSuccess": "刪除成功", - "deleteConfirm": "確定要刪除 {0} 嗎?", - "deleteError": "刪除失敗", - "loadError": "加載失敗" - }, - "submit": "提交", - "formRules": { - "required": "{0}不能為空", - "minLength": "{0}最少{1}個字符", - "maxLength": "{0}最多{1}個字符", - "alreadyExists": "{0} {1} 已存在", - "startWith": "{0}必須以{1}開頭", - "invalidURL": "請輸入有效的 URL" - } - }, - "male": "男", - "female": "女", - "yes": "是", - "no": "否", - "fullscreen": "全屏", - "exitFullscreen": "退出全屏", - "setting": "設置", - "columnSetting": "列設置", - "sort": "排序", - "batchDelete": "批量刪除", - "export": "導出", - "import": "導入", - "downloadTemplate": "下載模板", - "view": "查看", - "summarySum": "合計", - "summaryAvg": "平均", - "summaryCount": "計數", - "summaryMax": "最大", - "summaryMin": "最小", - "startDate": "開始日期", - "endDate": "結束日期", - "selectDate": "選擇日期", - "table": "表格", - "action": "操作", - "placeholder": "請輸入", - "selectPlaceholder": "請選擇", - "back": "返回", - "createSuccess": "創建成功", - "updateSuccess": "更新成功", - "saveFailed": "保存失敗", - "noDescription": "暫無描述", - "applicationName": "所屬應用", - "more": "更多", - "copied": "已複製", - "deleted": "已刪除", - "duplicate": "複製", - "description": "描述", - "download": "下載", - "downloadFailed": "下載失敗", - "loadError": "載入失敗", - "loadFailed": "載入失敗", - "loadingMenu": "載入選單中", - "moveDown": "下移", - "moveUp": "上移", - "none": "無", - "operationFailed": "操作失敗", - "operationSuccess": "操作成功", - "pasted": "已貼上", - "preview": "預覽", - "prompt": "提示", - "redone": "已重做", - "refresh": "重新整理", - "row": "行", - "saveSuccess": "儲存成功", - "select": "選擇", - "selectAll": "全選", - "unselectAll": "取消全選", - "submit": "提交", - "tip": "提示", - "undo": "復原", - "undone": "已復原", - "video": "影片", - "exportData": "匯出資料", - "exportSuccess": "匯出成功", - "exportFailed": "匯出失敗", - "exportCompleted": "匯出完成,共 {0} 筆資料", - "exportPreparing": "正在準備匯出...", - "exportReady": "準備匯出...", - "exportQuerying": "正在查詢資料 {0} / {1} 筆...", - "exportGeneratingExcel": "正在產生 Excel 檔案...", - "exportGeneratingExcelShort": "產生 Excel 中...", - "querying": "查詢中...", - "retryExport": "重新匯出", - "fileDownloadFailed": "檔案下載失敗,請重試", - "records": "筆", - "importFailed": "匯入失敗", - "importPreparing": "正在準備匯入...", - "importParsing": "正在解析 Excel 資料 {0} / {1} 行...", - "importImporting": "正在匯入資料 {0} / {1} 筆...", - "importValidating": "正在驗證資料 {0} / {1} 行...", - "validatePreparing": "正在準備驗證...", - "importValidatingData": "正在校驗資料唯一性...", - "willInsert": "將新增 {0} 筆", - "willUpdate": "將更新 {0} 筆", - "willOverwrite": "將覆蓋匯入 {0} 筆", - "comma": ",", - "closeConfirmTitle": "確認關閉", - "closeConfirmMessage": "操作正在進行中,關閉將中斷當前操作。確定要關閉嗎?", - "maxImportRows": "當前伺服器最大支持匯入 {0} 萬行資料", - "maxExportRows": "當前伺服器最大支持匯出 {0} 萬行資料" -} diff --git a/web/apps/web-ele/src/locales/langs/zh-TW/contract.json b/web/apps/web-ele/src/locales/langs/zh-TW/contract.json deleted file mode 100644 index 98aa001..0000000 --- a/web/apps/web-ele/src/locales/langs/zh-TW/contract.json +++ /dev/null @@ -1,150 +0,0 @@ -{ - "contractNo": "合同編號", - "contractTitle": "合同標題", - "templateNameUsed": "使用模板", - "statusLabel": "狀態", - "creatorName": "創建人", - "createdTimeInstance": "創建時間", - "completedTimeInstance": "完成時間", - "actions": "操作", - "statusDraft": "草稿", - "statusPending": "待簽署", - "statusSigning": "簽署中", - "statusCompleted": "已完成", - "statusCanceled": "已取消", - "statusExpired": "已過期", - "createContract": "創建合同", - "view": "查看", - "edit": "編輯", - "copy": "複製", - "mobileSignButton": "手機签", - "submit": "提交", - "complete": "完成", - "cancel": "取消", - "delete": "刪除", - "submitConfirm": "確定要提交這個合同嗎?提交後將進入待簽署狀態。", - "submitConfirmTitle": "提交確認", - "submitSuccess": "提交成功", - "completeConfirm": "確定要完成這個合同嗎?", - "completeConfirmTitle": "完成確認", - "completeSuccess": "合同已完成", - "cancelConfirm": "確定要取消這個合同嗎?", - "cancelConfirmTitle": "取消確認", - "cancelSuccess": "已取消", - "deleteConfirm": "確定要刪除這個合同嗎?", - "deleteConfirmTitle": "刪除確認", - "deleteSuccess": "刪除成功", - "templateNameLabel": "模板名稱", - "templateCodeLabel": "模板编码", - "categoryLabel2": "分類", - "version": "版本", - "createTimeTemplate": "創建時間", - "categoryName": "分類", - "categorySales": "銷售合同", - "categoryPurchase": "採購合同", - "categoryLabor": "勞動合同", - "categoryLease": "租賃合同", - "categoryService": "服務合同", - "categoryOther": "其他", - "statusPublished": "已發布", - "statusDisabled": "已停用", - "addTemplateButton": "新增模板", - "batchDelete": "批量刪除", - "batchDeleteConfirm": "確定要刪除選中的 {count} 個模板嗎?", - "batchDeleteConfirmTitle": "批量刪除確認", - "publish": "發布", - "publishConfirm": "確定要發布這個模板嗎?發布後可用於創建合同。", - "publishConfirmTitle": "發布確認", - "publishSuccess": "發布成功", - "disable": "停用", - "disableConfirm": "確定要停用這個模板嗎?停用後將無法創建新合同。", - "disableConfirmTitle": "停用確認", - "disableSuccess": "停用成功", - "copyTemplate": "複製模板", - "copyPrompt": "請輸入新模板的編碼", - "copyConfirm": "確定", - "copyCancel": "取消", - "copyCodePattern": "編碼必須以字母開頭,只能包含字母、數字和下劃線", - "copiedSuccess": "複製成功", - "pleaseSelectTemplate": "請選擇合同模板", - "pleaseInputTitle": "請輸入合同標題", - "pleaseInputContractNo": "請輸入合同編號", - "contractNoInvalid": "合同編號無效", - "contractNoDuplicate": "合同編號已存在", - "basicInfo": "基礎信息", - "variableFill": "變量填寫", - "createDialog": "創建合同", - "editDialog": "編輯合同", - "copyDialog": "複製合同", - "basicInfoConfig": "基礎信息配置", - "contractTemplate": "合同模板", - "selectTemplate": "請選擇合同模板", - "contractNoLabel": "合同編號", - "inputContractNo": "請輸入合同編號", - "regenerate": "重新生成", - "contractTitleLabel": "合同標題", - "inputContractTitle": "請輸入合同標題", - "contractPreview": "合同預覽", - "variableRealtime": "變量將實時替換顯示", - "variableFillForm": "變量填寫", - "noVariables": "此模板沒有需要填寫的變量", - "previousStep": "上一步", - "nextStep": "下一步", - "save": "保存", - "close": "關閉", - "saveSuccess": "保存成功", - "createSuccess": "創建成功", - "loadTemplateFailed": "加載模板詳情失敗", - "loadContractFailed": "加載合同數據失敗", - "saveFailed": "保存失敗", - "noTemplatesAvailable": "暫無可用模板,請先發布合同模板", - "selectNothing": "請先選擇要刪除的模板", - "selectNothingWarning": "請先選擇要刪除的模板", - "contractDetail": "合同詳情", - "pageNumber": "第 {page} / {total} 頁", - "noContent": "暫無內容", - "mobileSign": "手機签署", - "contract": "合同", - "partyType": "簽署方:", - "signerName": "簽署人:", - "signerNamePlaceholder": "可選,填寫簽署人姓名", - "signQrCode": "簽署二維碼", - "generatingQrCode": "正在生成二維碼...", - "scanQrCodeToSign": "請使用手機掃描二維碼進行簽署", - "qrCodeExpiredAt": "二維碼有效期至 {time}", - "refreshQrCode": "刷新二維碼", - "invalidSignUrl": "無效的簽署鏈接", - "pleaseSign": "請先簽名", - "loading": "加載中...", - "checkSignUrl": "請檢查簽署鏈接是否正確,或聯繫合同發起人", - "signComplete": "簽署完成", - "signCompleteMsg": "您已成功完成簽署,可以關閉此頁面", - "pleaseSignArea": "請在以下區域簽署", - "signed": "已簽署", - "sign": "簽署", - "noSignArea": "暫無需要您簽署的區域", - "contractCompleted": "合同已完成簽署", - "handwriteSign": "手寫簽名", - "signInArea": "請在下方區域手寫簽名", - "confirmSign": "確認簽署", - "editTemplate": "編輯合同模板", - "viewTemplate": "查看合同模板", - "addTemplate": "新增合同模板", - "templateName": "模板名稱", - "inputTemplateName": "請輸入模板名稱", - "templateCode": "模板编码", - "inputTemplateCode": "請輸入模板编码", - "selectCategory": "請選擇分類", - "templateDescription": "模板說明", - "inputTemplateDescription": "請輸入模板說明", - "contractNumber": "合同編號", - "usedTemplate": "使用模板", - "status": "狀態", - "creator": "創建人", - "createdTime": "創建時間", - "completedTime": "完成時間", - "completeSign": "完成簽署", - "exportPdf": "導出 PDF", - "operationLog": "操作日誌", - "noOperationLog": "暫無操作日誌" -} diff --git a/web/apps/web-ele/src/locales/langs/zh-TW/dashboard-design.json b/web/apps/web-ele/src/locales/langs/zh-TW/dashboard-design.json deleted file mode 100644 index d89f1c5..0000000 --- a/web/apps/web-ele/src/locales/langs/zh-TW/dashboard-design.json +++ /dev/null @@ -1,894 +0,0 @@ -{ - "title": "儀表板設計", - "preview": "預覽", - "save": "保存", - "saveSuccess": "保存成功", - "clear": "清空", - "clearConfirm": "確定要清空畫布嗎?此操作不可撤銷。", - "clearSuccess": "已清空", - "export": "導出", - "exportSuccess": "導出成功", - "import": "導入", - "importTitle": "導入配置", - "importPlaceholder": "請粘貼 JSON 配置內容...", - "importSuccess": "導入成功", - "importError": "配置格式錯誤", - "importEmpty": "請輸入配置內容", - "viewCode": "查看代碼", - "jsonPreview": "JSON 預覽", - "copyCode": "複製代碼", - "copySuccess": "已複製到剪貼板", - "copyError": "複製失敗", - "undoSuccess": "已撤銷", - "redoSuccess": "已重做", - "copyWidgetSuccess": "已複製", - "pasteWidgetSuccess": "已粘貼", - "deleteWidgetSuccess": "已刪除", - "noWidgetsTip": "請先添加組件", - "noConfigTip": "暫無儀表板配置", - "loadingData": "數據加載中...", - "loadDataError": "數據加載失敗", - "unknownWidget": "未知組件類型", - "widgetCount": "{count} 個組件", - "dragTip": "從左側拖拽組件到此處", - "add": "添加", - "copy": "複製", - "delete": "刪除", - "reset": "重置", - "clean": "清除", - "canvas": { - "title": "設計畫布", - "adaptive": "自適應", - "actualSize": "實際尺寸", - "settings": "畫布設置", - "undo": "撤銷", - "redo": "重做" - }, - "months": { - "jan": "1月", - "feb": "2月", - "mar": "3月", - "apr": "4月", - "may": "5月", - "jun": "6月", - "jul": "7月", - "aug": "8月", - "sep": "9月", - "oct": "10月", - "nov": "11月", - "dec": "12月" - }, - "weekdaysShort": { - "mon": "週一", - "tue": "週二", - "wed": "週三", - "thu": "週四", - "fri": "週五", - "sat": "週六", - "sun": "週日" - }, - "material": { - "title": "組件庫", - "search": "搜索組件...", - "category": { - "common": "通用", - "chart": "圖表", - "filter": "篩選器", - "map": "地圖", - "media": "多媒體", - "other": "其他" - }, - "widgets": { - "statCard": "統計卡片", - "progressCard": "進度卡片", - "chartLine": "折線圖", - "chartBar": "柱狀圖", - "chartPie": "餅圖", - "chartGauge": "儀表板", - "chartArea": "面積圖", - "chartRadar": "雷達圖", - "chartFunnel": "漏斗圖", - "chartScatter": "散點圖", - "chartRing": "環形進度", - "chartHeatmap": "熱力圖", - "chartKline": "K線圖", - "chartSankey": "桑基圖", - "todoList": "待辦列表", - "noticeList": "消息通知", - "announcementList": "公告列表", - "rankingList": "排行榜", - "quickLinks": "快捷入口", - "welcomeCard": "歡迎卡片", - "calendar": "日曆", - "countdown": "倒計時", - "clock": "時鐘", - "weather": "天氣", - "imageCarousel": "圖片輪播", - "dataTable": "數據表格", - "iframe": "iframe 嵌入", - "videoPlayer": "視頻播放器", - "image": "圖片", - "formRender": "表單渲染", - "approvalCenter": "審批中心", - "myApps": "我的應用", - "serverMonitor": "服務器信息", - "filterInput": "輸入篩選", - "filterSelect": "下拉篩選", - "filterDate": "日期篩選", - "filterDateRange": "日期範圍" - }, - "defaultProps": { - "statTitle": "統計數據", - "trendLabel": "較昨日", - "progressTitle": "完成進度", - "visitTrend": "訪問趨勢", - "visits": "訪問量", - "downloads": "下載量", - "salesStat": "銷售統計", - "trafficSource": "流量來源", - "searchEngine": "搜索引擎", - "directAccess": "直接訪問", - "emailMarketing": "郵件營銷", - "unionAds": "聯盟廣告", - "videoAds": "視頻廣告", - "sysLoad": "系統負載", - "abilityEval": "能力評估", - "sales": "銷售", - "mgmt": "管理", - "tech": "技術", - "cs": "客服", - "rd": "研發", - "mkt": "市場", - "budget": "預算", - "actual": "實際", - "convFunnel": "轉化漏斗", - "visit": "訪問", - "consult": "諮詢", - "intent": "意向", - "order": "下單", - "deal": "成交", - "dataDist": "數據分佈", - "height": "身高 (cm)", - "weight": "體重 (kg)", - "male": "男性", - "female": "女性", - "kpiDone": "KPI完成度", - "salesVolume": "銷售額", - "orderVolume": "訂單量", - "customerCount": "客戶數", - "weekVisitHeat": "周訪問熱力", - "stockTrend": "股價走勢", - "todoTitle": "待辦事項", - "todoItem1": "完成項目報告", - "todoItem2": "團隊週會", - "todoItem3": "代碼審查", - "latestNotice": "消息通知", - "latestAnnouncement": "最新公告", - "salesRanking": "銷售排行", - "welcomeTitle": "歡迎回來", - "welcomeSubtitle": "今天個好日子", - "countdownTitle": "活動倒計時", - "todayWeather": "今日天氣", - "dataList": "數據列表", - "externalPage": "外部頁面", - "itemName": "項目", - "imageTitle": "圖片", - "myDashboard": "我的儀表盤", - "formRender": "表單數據", - "approvalCenter": "審批中心", - "myApps": "我的應用", - "serverMonitor": "服務器信息", - "filterInput": "關鍵詞", - "filterInputPlaceholder": "請輸入關鍵詞篩選...", - "filterSelect": "選擇篩選", - "filterSelectPlaceholder": "請選擇...", - "filterDate": "日期", - "filterDatePlaceholder": "請選擇日期", - "filterDateRange": "日期範圍", - "filterStartDate": "開始日期", - "filterEndDate": "結束日期" - } - }, - "attribute": { - "title": "屬性面板", - "canvasConfig": "畫布配置", - "widgetConfig": "組件配置", - "styleConfig": "樣式配置", - "dataConfig": "數據配置", - "globalSettings": "儀表板全局設置", - "dashboardName": "儀表板名稱", - "gridLayout": "網格佈局", - "columns": "列數", - "rowHeight": "行高 (px)", - "widgetMargin": "組件間距 (px)", - "horizontal": "水平", - "vertical": "垂直", - "background": "背景", - "backgroundColor": "背景顏色", - "reset": "重置", - "display": "顯示", - "outerMargin": "四週邊距", - "outerMarginTip": "渲染時顯示四週邊距", - "widgetTitle": "標題", - "layout": "佈局", - "widthGrid": "寬度 (格)", - "heightGrid": "高度 (格)", - "layoutTip": "提示:直接在畫布上拖拽調整組件大小", - "iconConfig": "圖標配置", - "icon": "圖標", - "iconColor": "圖標顏色", - "status": "狀態", - "strokeWidth": "線條寬度", - "showText": "顯示文字", - "border": "邊框", - "borderWidth": "邊框寬度", - "borderColor": "邊框顏色", - "borderStyleLabel": "邊框樣式", - "borderRadius": "圓角", - "shadow": "陰影", - "enableShadow": "啟用陰影", - "shadowColor": "陰影顏色", - "shadowBlur": "模糊半徑", - "chartLayout": "圖表佈局", - "margin": { - "left": "左邊距 (%)", - "right": "右邊距 (%)", - "top": "上邊距 (%)", - "bottom": "下邊距 (%)" - }, - "tabs": { - "basic": "基礎", - "data": "數據", - "style": "樣式" - }, - "placeholder": { - "name": "請輸入名稱", - "title": "請輸入標題", - "remark": "請輸入描述" - }, - "iconOptions": { - "trending": "趨勢", - "creditCard": "信用卡", - "users": "用戶", - "activity": "活動", - "bell": "鈴鐺", - "award": "獎杯" - }, - "progressStatus": { - "default": "默認", - "success": "成功", - "warning": "警告", - "exception": "異常" - }, - "colorTheme": { - "label": "顏色主題", - "default": "默認", - "fresh": "清新", - "business": "商務", - "tech": "科技", - "warm": "暖色" - }, - "chart": { - "smooth": "平滑曲線", - "showArea": "顯示面積", - "showSymbol": "顯示數據點", - "symbolSize": "數據點大小", - "lineWidth": "線條寬度", - "axis": "座標軸", - "xAxisName": "X軸名稱", - "yAxisName": "Y軸名稱", - "nameLocation": "名稱位置", - "legend": "圖例", - "showLegend": "顯示圖例", - "legendPosition": "圖例位置", - "barWidth": "柱子寬度", - "barRadius": "圓角大小", - "horizontal": "水平方向", - "stack": "堆疊顯示", - "showBackground": "顯示背景", - "pieType": "圖表類型", - "showLabel": "顯示標籤", - "labelPosition": "標籤位置", - "minValue": "最小值", - "maxValue": "最大值", - "splitNumber": "刻度數量", - "showProgress": "顯示進度", - "showMA5": "顯示MA5", - "showMA10": "顯示MA10", - "shape": "形狀", - "sort": "排序方式", - "orient": "方向", - "pointSize": "點大小", - "numerical": "數值配置", - "currentValue": "當前值", - "min": "最小值", - "max": "最大值", - "unit": "單位", - "maConfig": "均線配置", - "prefix": "前綴", - "suffix": "後綴", - "trendConfig": "趨勢配置", - "trendValue": "趨勢值 (%)", - "trendTip": "正數為上升,負數為下降", - "trendLabel": "趨勢說明", - "seriesNamePrefix": "系列", - "itemNamePrefix": "項目", - "placeholder": { - "xAxis": "如:月份", - "yAxis": "如:銷量", - "unit": "如:%", - "title": "請輸入標題", - "xAxis2": "用逗號分隔,如:1月, 2月, 3月", - "seriesData": "用逗號分隔,如:100, 200, 300", - "seriesName": "系列名稱", - "prefix": "如:¥", - "suffix": "如:元、%", - "trendLabel": "如:較昨日", - "subtitle": "請輸入副標題" - }, - "location": { - "start": "起點", - "middle": "中間", - "end": "末端", - "top": "頂部", - "bottom": "底部", - "left": "左側", - "right": "右側" - }, - "pieTypes": { - "pie": "餅圖", - "ring": "環形圖", - "rose": "玫瑰圖" - }, - "labelPositions": { - "outside": "外部", - "inside": "內部" - }, - "barWidthOptions": { - "auto": "自動", - "thin": "細 (30%)", - "medium": "中 (50%)", - "thick": "粗 (70%)" - }, - "shapes": { - "polygon": "多邊形", - "circle": "圓形" - }, - "sortOptions": { - "descending": "降序", - "ascending": "升序", - "none": "不排序" - }, - "orientOptions": { - "vertical": "垂直", - "horizontal": "水平" - }, - "dataEditMode": "編輯模式", - "dataEditForm": "表單", - "dataEditJson": "JSON", - "jsonPlaceholder": "JSON 格式數據", - "jsonTip": "直接編輯 JSON 數據,失去焦點後自動應用", - "xAxisData": "X軸數據", - "seriesDataLabel": "系列數據", - "addSeries": "添加系列", - "dataItem": "數據項", - "addItem": "添加數據項", - "radarTip": "雷達圖數據結構較複雜,建議使用 JSON 模式編輯", - "scatterTip": "散點圖數據為座標點數組,建議使用 JSON 模式編輯", - "ringTip": "環形進度數據建議使用 JSON 模式編輯", - "heatmapTip": "熱力圖數據建議使用 JSON 模式編輯", - "klineTip": "K線圖數據建議使用 JSON 模式編輯", - "sankeyTip": "桑基圖數據建議使用 JSON 模式編輯", - "gaugeTip": "儀表盤數據在基礎配置中設置\"當前值\"" - }, - "dataSource": { - "dataType": "數據類型", - "static": "靜態數據", - "uploadImage": "圖片上傳", - "uploadVideo": "視頻上傳", - "dataSource": "數據源", - "api": "API接口", - "config": "數據源配置", - "select": "選擇數據源", - "selectPlaceholder": "請選擇數據源", - "mapping": "字段映射", - "sourceField": "源字段", - "targetField": "目標", - "addMapping": "添加映射", - "mappingTip": "提示:數據源已在「數據源管理」中配置好字段映射,此處可添加額外的字段映射覆蓋默認配置。", - "refresh": "刷新配置", - "autoRefresh": "自動刷新", - "interval": "刷新間隔", - "intervalUnit": "單位:秒,最小 5 秒", - "apiConfig": "接口配置", - "apiUrl": "請求地址", - "apiUrlPlaceholder": "如:/api/dashboard/stats", - "apiMethod": "請求方式", - "dataPath": "數據路徑", - "dataPathPlaceholder": "如:data.list", - "dataPathTip": "從響應中提取數據的路徑", - "enableRefresh": "啟用刷新", - "intervalSeconds": "刷新間隔 (秒)", - "paramBinding": "參數綁定", - "paramName": "數據源參數", - "globalParam": "篩選器參數", - "addBinding": "添加綁定", - "paramBindingTip": "將篩選器組件的參數綁定到數據源參數,實現篩選聯動。左側選擇數據源中定義的參數,右側選擇或輸入篩選器的參數鍵名。", - "required": "必填" - }, - "widget": { - "todo": { - "items": "待辦項", - "add": "添加待辦", - "done": "完成", - "newItem": "新待辦", - "priority": { - "high": "高", - "medium": "中", - "low": "低" - } - }, - "notice": { - "tip": "通知列表自動從系統消息中獲取數據,無需手動配置", - "limit": "顯示數量" - }, - "announcement": { - "tip": "公告列表自動從系統公告中獲取數據,無需手動配置", - "limit": "顯示數量" - }, - "ranking": { - "items": "排行項", - "add": "添加排行", - "newItem": "新成員" - }, - "quickLinks": { - "title": "快捷入口", - "tip": "點擊格子選擇菜單,圖標自動使用菜單配置", - "iconColorDefault": "默認主題色", - "selectMenu": "選擇菜單" - }, - "welcome": { - "subtitle": "副標題", - "subtitlePlaceholder": "請輸入副標題", - "showTime": "顯示時間" - }, - "countdown": { - "config": "倒計時設置", - "targetTime": "目標時間", - "targetTimePlaceholder": "選擇目標時間", - "showDays": "顯示天數", - "showHours": "顯示小時", - "showMinutes": "顯示分鐘", - "showSeconds": "顯示秒數", - "finishedText": "結束文字", - "finishedTextPlaceholder": "如:已結束" - }, - "clock": { - "config": "時鐘設置", - "showDate": "顯示日期", - "showSeconds": "顯示秒數", - "format24": "24小時制", - "timezone": "時區", - "timezoneOptions": { - "local": "本地時間", - "utc": "UTC", - "beijing": "北京時間", - "tokyo": "東京時間", - "newyork": "紐約時間", - "london": "倫敦時間" - } - }, - "weather": { - "config": "天氣配置", - "cityName": "城市名稱", - "cityNamePlaceholder": "如:北京", - "presetCity": "預設城市", - "presetCityPlaceholder": "快速選擇城市", - "latitude": "緯度", - "longitude": "經度", - "autoLocate": "自動定位", - "refreshInterval": "刷新間隔(分鐘)", - "refreshIntervalTip": "單位:分鐘,最小 5 分鐘" - }, - "carousel": { - "config": "輪播設置", - "autoplay": "自動播放", - "interval": "切換間隔", - "intervalUnit": "毫秒", - "showIndicator": "顯示指示器", - "showArrow": "顯示箭頭", - "imageList": "圖片列表", - "addImage": "添加圖片", - "selectFromGallery": "從圖庫選擇", - "selectedImages": "已選圖片", - "selectTip": "請從圖庫選擇圖片", - "newItem": "新圖片" - }, - "table": { - "config": "表格設置", - "stripe": "斑馬紋", - "border": "邊框", - "showIndex": "顯示序號", - "showHeader": "顯示表頭", - "highlightCurrentRow": "高亮當前行", - "alignment": "對齊方式", - "headerAlign": "表頭對齊", - "cellAlign": "單元格對齊", - "heightConfig": "高度配置", - "height": "固定高度", - "heightPlaceholder": "如:300px 或 100%", - "heightTip": "支持像素值或百分比", - "maxHeight": "最大高度", - "maxHeightPlaceholder": "如:500", - "maxHeightTip": "超出後顯示滾動條", - "customization": "自定義", - "emptyText": "空數據提示", - "emptyTextPlaceholder": "暫無數據", - "headerBgColor": "表頭背景色", - "summaryConfig": "統計配置", - "showSummary": "顯示表尾統計", - "summaryType": "統計類型", - "summaryTypes": { - "sum": "合計", - "avg": "平均值", - "count": "計數", - "max": "最大值", - "min": "最小值" - }, - "summaryPrecision": "小數位數", - "summaryColumns": "統計列", - "noColumnsConfigured": "請先配置表格列", - "mergeConfig": "合併配置", - "enableMerge": "啟用合併", - "mergeRules": "合併規則", - "mergeTypes": { - "row": "行合併", - "column": "列合併" - }, - "selectMergeField": "選擇合併字段", - "rowIndex": "行號", - "startCol": "起始列", - "colspan": "合併列數", - "addMergeRule": "添加合併規則", - "size": "尺寸", - "sizeOptions": { - "default": "默認", - "large": "大", - "small": "小" - }, - "columnConfig": "列配置", - "columnConfigJson": "列配置 JSON", - "tableData": "表格數據", - "tableDataJson": "表格數據 JSON", - "complexDataTip": "表格數據結構較複雜,建議使用 JSON 模式編輯" - }, - "iframe": { - "config": "顯示設置", - "showBorder": "顯示邊框", - "allowFullscreen": "允許全屏", - "pageAddress": "頁面地址" - }, - "video": { - "config": "播放設置", - "autoplay": "自動播放", - "loop": "循環播放", - "muted": "靜音", - "controls": "原生控制欄", - "videoAddress": "視頻地址", - "poster": "封面圖", - "posterPlaceholder": "封面圖片 URL(選填)", - "selectFromFileLib": "從文件庫選擇" - }, - "image": { - "title": "圖片", - "config": "圖片設置", - "alt": "替代文本", - "altPlaceholder": "圖片無法顯示時的替代文本", - "fit": "填充方式", - "fitOptions": { - "cover": "覆蓋 (cover)", - "contain": "包含 (contain)", - "fill": "填充 (fill)", - "none": "無 (none)", - "scaleDown": "縮小 (scale-down)" - }, - "lazy": "懶加載", - "previewConfig": "預覽設置", - "zIndex": "預覽層級", - "closeOnClickModal": "點擊遮罩關閉", - "url": "圖片 URL", - "urlPlaceholder": "請輸入圖片URL", - "link": "跳轉鏈接(選填)", - "previewList": "預覽圖片列表", - "previewListTip": "點擊圖片時可預覽的圖片列表,為空時預覽當前圖片", - "addImage": "添加圖片", - "mainImage": "主圖" - }, - "common": { - "staticDataTip": "當前組件使用靜態數據,可在基礎配置中修改" - }, - "formRender": { - "formConfig": "表單配置", - "formCode": "選擇表單", - "formCodePlaceholder": "請選擇表單", - "containerType": "容器類型", - "drawer": "抽屜", - "dialog": "彈窗", - "displayConfig": "顯示配置", - "showToolbar": "顯示工具欄", - "showPagination": "顯示分頁", - "pageSize": "每頁條數", - "buttonConfig": "按鈕配置", - "showAdd": "新增按鈕", - "showView": "查看按鈕", - "showEdit": "編輯按鈕", - "showDelete": "刪除按鈕" - } - }, - "fieldLabels": { - "title": "標題", - "value": "數值", - "time": "時間", - "trend": "趨勢百分比", - "trendLabel": "趨勢說明", - "prefix": "前綴", - "suffix": "後綴", - "percentage": "百分比", - "xAxisData": "X軸數據", - "seriesData": "系列數據", - "currentValue": "當前值", - "min": "最小值", - "max": "最大值", - "listData": "列表數據", - "linkData": "鏈接數據" - }, - "resultType": { - "list": "列表", - "tree": "樹形", - "object": "對象", - "value": "單值", - "chartAxis": "軸向圖表", - "chartPie": "餅圖", - "chartGauge": "儀表盤", - "chartRadar": "雷達圖", - "chartScatter": "散點圖", - "chartHeatmap": "熱力圖" - }, - "borderStyle": { - "solid": "實線", - "dashed": "虛線", - "dotted": "點線", - "none": "無" - } - }, - "widgets": { - "announcement": { - "markAllRead": "全部已讀", - "top": "置頂", - "noData": "暫無公告", - "loading": "加載中...", - "noContent": "暫無詳細內容", - "publisher": "發佈者:", - "priority": { - "normal": "普通", - "important": "重要", - "urgent": "緊急" - }, - "time": { - "justNow": "剛剛", - "minutesAgo": "分鐘前", - "hoursAgo": "小時前", - "daysAgo": "天前" - } - }, - "weather": { - "city": "城市", - "humidity": "濕度", - "wind": "風力", - "loading": "載入天氣資料中...", - "error": "取得天氣資料失敗", - "codes": { - "clear": "晴", - "mainlyClear": "晴間多雲", - "partlyCloudy": "多雲", - "overcast": "陰", - "fog": "霧", - "drizzle": "毛毛雨", - "rain": "雨", - "snow": "雪", - "showers": "陣雨", - "snowShowers": "陣雪", - "thunderstorm": "雷暴" - }, - "windDir": { - "n": "北風", - "ne": "東北風", - "e": "東風", - "se": "東南風", - "s": "南風", - "sw": "西南風", - "w": "西風", - "nw": "西北風" - } - }, - "chart": { - "visits": "訪問量" - }, - "iframe": { - "refresh": "刷新", - "openNew": "新窗口打開", - "placeholder": "iframe 嵌入", - "noUrl": "未設置 URL", - "loading": "加載中...", - "loadFailed": "加載失敗", - "retry": "點擊重試" - }, - "todo": { - "title": "待辦事項", - "noData": "暫無待辦", - "priority": { - "high": "高", - "medium": "中", - "low": "低" - } - }, - "dataTable": { - "status": { - "normal": "正常", - "warning": "警告", - "error": "異常", - "success": "成功", - "failed": "失敗", - "processing": "進行中" - }, - "summary": { - "sum": "合計", - "avg": "平均", - "count": "計數", - "max": "最大", - "min": "最小" - } - }, - "formRender": { - "placeholder": "表單渲染組件", - "noFormCode": "請配置表單編碼", - "deleteConfirm": "確定要刪除這條數據嗎?", - "batchDeleteConfirm": "確定要刪除選中的 {count} 條數據嗎?", - "importResult": "成功導入 {success} 條,失敗 {failed} 條", - "view": "查看" - }, - "welcome": { - "greeting": { - "night": "夜深了", - "morning": "早上好", - "morning2": "上午好", - "noon": "中午好", - "afternoon": "下午好", - "evening": "晚上好" - } - }, - "countdown": { - "day": "天", - "hour": "時", - "minute": "分", - "second": "秒", - "finished": "已結束" - }, - "video": { - "placeholder": "視頻播放器" - }, - "ranking": { - "tenThousand": "萬" - }, - "clock": { - "weekdays": ["週日", "週一", "週二", "週三", "週四", "週五", "週六"], - "year": "年", - "month": "月", - "day": "日" - }, - "image": { - "title": "圖片", - "noData": "暫無圖片" - }, - "approvalCenter": { - "initiated": "我發起的", - "pending": "我的待辦", - "handling": "我的在辦", - "signing": "我的待簽", - "handled": "我的已辦", - "copy": "抄送我的", - "start": "發起流程", - "more": "更多", - "config": "審批中心配置", - "routePrefix": "路由前綴" - }, - "myApps": { - "more": "更多", - "noData": "暫無應用" - }, - "serverMonitor": { - "config": "服務器信息配置", - "cpuBgColor": "CPU背景色", - "memoryBgColor": "記憶體背景色", - "diskBgColor": "磁碟背景色", - "networkBgColor": "網絡背景色", - "core": "核", - "thread": "線程", - "memory": "記憶體", - "disk": "磁碟", - "network": "網絡", - "read": "讀取", - "write": "寫入", - "upload": "上傳", - "download": "下載", - "totalRW": "累計讀/寫", - "uptime": "運行時間", - "days": "天", - "hours": "小時", - "minutes": "分鐘" - } - }, - "filter": { - "config": "篩選器配置", - "paramKey": "參數鍵名", - "paramKeyPlaceholder": "如:status", - "startParamKey": "開始日期參數", - "startParamKeyPlaceholder": "如:start_date", - "endParamKey": "結束日期參數", - "endParamKeyPlaceholder": "如:end_date", - "label": "標籤", - "labelPlaceholder": "請輸入標籤", - "defaultValue": "默認值", - "noParamKey": "未配置參數鍵名", - "optionConfig": "選項配置", - "optionSource": "選項來源", - "staticOptions": "靜態選項", - "optionLabel": "標籤", - "optionValue": "值", - "addOption": "添加選項", - "optionDataSource": "選項數據源", - "labelField": "標籤字段", - "valueField": "值字段", - "multiple": "多選", - "dateFormat": "日期格式", - "styleConfig": "樣式配置", - "labelPosition": "標籤位置", - "labelPositionLeft": "左側", - "labelPositionTop": "上方", - "labelPositionHidden": "隱藏", - "labelWidth": "標籤寬度", - "labelAlign": "標籤對齊", - "alignLeft": "左對齊", - "alignCenter": "居中", - "alignRight": "右對齊", - "componentSize": "組件尺寸", - "sizeLarge": "大", - "sizeDefault": "中", - "sizeSmall": "小", - "showBorder": "顯示邊框", - "borderRadius": "圓角" - }, - "gradient": { - "solid": "純色", - "gradient": "漸變", - "startColor": "起始色", - "endColor": "結束色", - "direction": "方向", - "noColor": "未設置", - "presetTitle": "預設漸變", - "presets": { - "warmSunrise": "暖陽晨曦", - "oceanBreeze": "海洋微風", - "freshMint": "清新薄荷", - "peachGlow": "蜜桃光暈", - "lavenderDream": "薰衣草夢", - "skyBlue": "天空蔚藍", - "roseWater": "玫瑰花水", - "softGrass": "柔和青草", - "winterNymph": "冬日仙子", - "cottonCandy": "棉花糖", - "sunnyMorning": "陽光早晨", - "crystalClear": "水晶透明" - } - } -} diff --git a/web/apps/web-ele/src/locales/langs/zh-TW/data-source.json b/web/apps/web-ele/src/locales/langs/zh-TW/data-source.json deleted file mode 100644 index 564bc21..0000000 --- a/web/apps/web-ele/src/locales/langs/zh-TW/data-source.json +++ /dev/null @@ -1,283 +0,0 @@ -{ - "basicInfo": "基礎信息", - "codePlaceholder": "請輸入唯一編碼,如 user_list", - "dataSourceConfig": "數據源配置", - "dataSourceName": "數據源名稱", - "inputDataSourceName": "請輸入數據源名稱", - "dataSourceType": "數據源類型", - "selectDataSourceType": "請選擇數據源類型", - "dataSourceDescription": "數據源描述", - "inputDataSourceDescription": "請輸入數據源描述", - "testConnection": "測試連接", - "testConnectionSuccess": "連接成功", - "testConnectionFailed": "連接失敗", - "testing": "測試中...", - "save": "保存", - "cancel": "取消", - "create": "創建", - "edit": "編輯", - "delete": "刪除", - "query": "查詢", - "sqlEditor": "SQL編輯器", - "executeSql": "執行SQL", - "executing": "執行中...", - "queryResult": "查詢結果", - "noData": "暫無數據", - "error": "錯誤", - "confirm": "確定", - "close": "關閉", - "dbSchema": "數據庫", - "tables": "表", - "columns": "列", - "dataType": "數據類型", - "nullable": "可空", - "primaryKey": "主鍵", - "loading": "加載中...", - "paramType": "參數類型", - "resultType": "結果類型", - "httpMethod": "HTTP方法", - "requestUrl": "請求URL", - "inputRequestUrl": "請輸入請求URL", - "requestHeaders": "請求頭", - "requestBody": "請求體", - "responseMapping": "響應映射", - "addParam": "添加參數", - "paramName": "參數名", - "paramValue": "參數值", - "paramLabel": "顯示名", - "deleteParam": "刪除參數", - "total": "總數", - "limited": "限制", - "dataSourceList": "數據源列表", - "createDataSource": "創建數據源", - "editDataSource": "編輯數據源", - "deleteDataSourceConfirm": "確定要刪除此數據源嗎?", - "deleteDataSourceSuccess": "刪除成功", - "createDataSourceSuccess": "創建成功", - "updateDataSourceSuccess": "更新成功", - "loadDataSourceFailed": "加載數據源失敗", - "testDataSourceFailed": "測試數據源失敗", - "previousStep": "上一步", - "nextStep": "下一步", - "basicInfoConfig": "基礎信息配置", - "status": "狀態", - "enable": "啟用", - "disable": "禁用", - "selectDbSchema": "請在左側選擇數據庫", - "tip": "提示", - "useParamPlaceholder": "使用", - "onlySelectQuery": "作為參數占位符,只允許 SELECT 查詢", - "paramDefinition": "參數定義", - "defineDataSourceParams": "定義數據源可接收的參數", - "required": "必填", - "action": "操作", - "resultProcessing": "結果處理", - "resultTypeListDesc": "直接返回數組數據,適用於表格、下拉選擇等組件。", - "resultTypeTreeDesc": "將平鋪列表轉換為樹形結構,適用於樹形選擇、級聯選擇等組件。", - "resultTypeObjectDesc": "返回第一條記錄作為對象,適用於詳情展示、表單回填等場景。", - "resultTypeValueDesc": "返回第一條記錄的第一個字段值,適用於統計數字、標題等場景。", - "resultTypeChartAxisDesc": "轉換為 xAxisData, seriesData 格式,適用於折線圖、柱狀圖、面積圖。", - "resultTypeChartPieDesc": "轉換為 seriesData: [name, value] 格式,適用於餅圖、漏斗圖。", - "resultTypeChartGaugeDesc": "轉換為 value, name, max 格式,適用於儀表盤、進度圖。", - "resultTypeChartRadarDesc": "轉換為 indicator, seriesData 格式,適用於雷達圖、多維對比。", - "resultTypeChartScatterDesc": "轉換為 seriesData: [x, y] 格式,適用於散點圖、氣泡圖。", - "resultTypeChartHeatmapDesc": "轉換為 xAxisData, yAxisData, seriesData 格式,適用於熱力圖。", - "treeConversionConfig": "樹形轉換配置", - "refresh": "刷新", - "fieldPreview": "字段預覽", - "clickTableToView": "點擊表名查看", - "selectTable": "請選擇一個表", - "noFieldInfo": "暫無字段信息", - "clickFieldToInsert": "點擊字段名插入到編輯器", - "testDataSource": "測試數據源", - "dataSourceInfo": "數據源信息", - "code": "編碼", - "type": "類型", - "name": "名稱", - "inputCode": "請輸入編碼", - "all": "全部", - "staticData": "靜態數據", - "staticLabel": "靜態", - "batchDelete": "批量刪除", - "more": "更多", - "copy": "複製", - "deleteConfirmMessage": "確定要刪除數據源 \"{name}\" 嗎?", - "deleteConfirmTitle": "刪除確認", - "deleteSuccess": "已刪除數據源: {name}", - "batchDeleteConfirmMessage": "確定要刪除選中的 {count} 個數據源嗎?", - "batchDeleteConfirmTitle": "批量刪除確認", - "batchDeleteSuccess": "已刪除 {count} 個數據源", - "inputNewCode": "請輸入新數據源編碼", - "copyDataSource": "複製數據源", - "codeFormatError": "編碼必須以字母開頭,只能包含字母、數字和下劃線", - "copySuccess": "複製成功", - "importExport": { - "export": "匯出", - "import": "匯入配置", - "exportSuccess": "數據源配置已匯出", - "exportFailed": "匯出失敗", - "importTitle": "匯入數據源配置", - "dragOrClick": "拖拽 JSON 檔案到此處或點擊上傳", - "onlyJson": "僅支援 .json 格式檔案", - "fileParseError": "檔案解析失敗,請確認檔案格式正確", - "checking": "正在檢查...", - "codeConflictTip": "數據源編碼已存在,請修改編碼後再匯入", - "codeAvailable": "數據源編碼可用,可以匯入", - "newCodePlaceholder": "請輸入新的數據源編碼", - "importSuccess": "數據源配置匯入成功", - "importFailed": "匯入失敗", - "confirmImport": "確認匯入", - "reselect": "重新選擇", - "dataSourceInfo": "數據源資訊", - "appTip": "匯入的數據源將歸屬到當前應用", - "dbConnectionTip": "SQL 類型數據源的 db_connection 為連接名稱,請確認目標環境已配置同名數據庫連接" - }, - "saveSuccess": "保存成功", - "createTime": "創建時間", - "apiInterface": "API接口", - "sqlQuery": "SQL查詢", - "resultTypeList": "列表", - "resultTypeTree": "樹形", - "resultTypeSingleObject": "單對象", - "resultTypeSingleValue": "單值", - "resultTypeAxisChart": "軸向圖表", - "resultTypePieChart": "餅圖數據", - "resultTypeGauge": "儀表盤", - "resultTypeRadarChart": "雷達圖", - "resultTypeScatterChart": "散點圖", - "resultTypeHeatmap": "熱力圖", - "paramTypeString": "字符串", - "paramTypeInteger": "整數", - "paramTypeFloat": "浮點數", - "paramTypeBoolean": "布爾值", - "paramTypeDate": "日期", - "paramTypeDatetime": "日期時間", - "axisChartConfig": "軸向圖表配置", - "xAxisField": "X軸字段", - "seriesField": "系列字段", - "seriesName": "系列名稱", - "pieChartConfig": "餅圖配置", - "nameField": "名稱字段", - "valueField": "數值字段", - "gaugeChartConfig": "儀表盤配置", - "maxField": "最大值字段", - "radarChartConfig": "雷達圖配置", - "indicatorNameField": "指標名稱字段", - "scatterChartConfig": "散點圖配置", - "xCoordinateField": "X坐標字段", - "yCoordinateField": "Y坐標字段", - "sizeField": "大小字段", - "heatmapChartConfig": "熱力圖配置", - "fieldMapping": "字段映射", - "addMapping": "添加映射", - "originalField": "原字段", - "mappedField": "映射字段", - "deleteMapping": "刪除", - "multipleFieldsComma": "多個字段用逗號分隔,如:{example}", - "multipleNamesComma": "多個名稱用逗號分隔,如:{example}", - "dataFieldsForChart": "數據中用於繪製圖表的數值字段", - "optionalLegendNames": "可選,圖例顯示的名稱,留空則使用字段名", - "oneFieldPerSeries": "每個字段對應一個系列", - "optionalBubbleChart": "如:size(可選,氣泡圖)", - "optionalName": "如:name(可選)", - "optionalMax": "如:max(可選)", - "fieldNameMapping": "將原字段名映射為新字段名,如 id -> value", - "cacheConfig": "緩存配置", - "enableCache": "啟用緩存", - "cacheTime": "緩存時間", - "cacheTimeUnit": "秒(0表示不緩存)", - "test": "測試", - "testParams": "測試參數", - "executeTest": "執行測試", - "testResult": "測試結果", - "success": "成功", - "failed": "失敗", - "returnedData": "返回 {count} 條數據", - "reachedLimit": "已達上限 {limit} 條", - "aiAssistant": "AI 助手", - "aiSqlAssistant": "AI SQL 助手", - "aiSqlAssistantTip": "AI 將根據你的需求和資料庫結構自動生成 SQL 查詢語句", - "sqlWritingTip": "SQL 在「資料庫連線」設定的預設庫上執行。PostgreSQL/SQL Server/Oracle 請寫 schema.table;MySQL 寫 `庫名`.`表名` 或表名;參數用 :name。第三方連線請在左側樹或 AI 選表後確認 db_connection 為連線 code。", - "describeYourQuery": "描述你的查詢需求", - "queryPlaceholder": "例如:查詢最近30天內,每天的新增用戶數量和活躍用戶數量", - "quickExamples": "快速示例", - "selectDataTable": "選擇資料表", - "modifySelection": "修改選擇", - "selectedTables": "已選 {count} 張表", - "clear": "清空", - "pleaseSelectTableFirst": "請先選擇資料表", - "tableRelationsCount": "已配置 {count} 個表關係", - "includeTableRelations": "包含表關係資訊(提高多表 JOIN 查詢準確度)", - "aiModel": "AI 模型", - "selectModel": "選擇模型", - "generating": "生成中...", - "generateSql": "生成 SQL", - "generationThought": "生成思路", - "generatedSql": "生成的 SQL", - "paramSuggestions": "參數建議", - "default": "預設", - "insertToEditor": "插入到編輯器", - "sqlGenerateSuccess": "SQL 生成成功", - "sqlGenerateFailed": "SQL 生成失敗", - "sqlInserted": "已插入到編輯器", - "copied": "已複製到剪貼簿", - "pleaseInputQuestion": "請輸入查詢需求", - "pleaseSelectModel": "請選擇 AI 模型", - "pleaseSelectTable": "請先選擇資料表", - "aiSqlInsertSuccess": "SQL 已插入,參數已自動配置", - "manualMode": "手動", - "aiMode": "AI", - "aiConfig": "AI 配置", - "aiSqlPlaceholder": "AI 生成的 SQL 將顯示在此處...", - "querying": "正在查詢...", - "dataView": "數據", - "chartView": "圖表", - "clickTestToExecute": "點擊上方按鈕執行測試", - "rawData": "原始數據", - "selectChartTypeToPreview": "請在結果處理中選擇圖表類型以預覽", - "apiConfig": "API 配置", - "urlPlaceholder": "https://api.example.com/data", - "apiTabBasic": "基本", - "apiTabAuth": "認證", - "apiTabQueryParams": "Query參數", - "apiTabBody": "請求體", - "apiTabAdvanced": "進階", - "timeout": "逾時時間", - "second": "秒", - "dataPath": "數據路徑", - "dataPathPlaceholder": "如 data.list", - "description": "描述", - "authType": "認證類型", - "authNone": "無認證", - "bearerTokenPlaceholder": "輸入 Token,支持 {param} 佔位符", - "username": "使用者名稱", - "usernamePlaceholder": "請輸入使用者名稱", - "password": "密碼", - "passwordPlaceholder": "請輸入密碼", - "keyPosition": "Key 位置", - "keyName": "Key 名稱", - "keyValue": "Key 值", - "bodyType": "類型", - "bodyTypeNone": "無", - "contentType": "Content-Type", - "retryCount": "重試次數", - "retryInterval": "重試間隔", - "proxy": "代理地址", - "followRedirects": "跟隨重定向", - "verifySSL": "驗證SSL", - "successCondition": "成功條件", - "successStatusCodes": "狀態碼", - "successStatusCodesPlaceholder": "如 200, 201(留空則檢查 2xx)", - "successFieldPath": "欄位路徑", - "successFieldPathPlaceholder": "如 code", - "successFieldValue": "期望值", - "apiTabHeaders": "請求頭", - "viewRequest": "查看請求", - "queryParamsHint": "參數會自動同步到 URL", - "headersHint": "自訂 HTTP 請求頭", - "addHeader": "新增請求頭", - "headerName": "名稱", - "headerValue": "值", - "noQueryParams": "暫無 Query 參數", - "noHeaders": "暫無請求頭" -} diff --git a/web/apps/web-ele/src/locales/langs/zh-TW/database-connection.json b/web/apps/web-ele/src/locales/langs/zh-TW/database-connection.json deleted file mode 100644 index 94158b6..0000000 --- a/web/apps/web-ele/src/locales/langs/zh-TW/database-connection.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "title": "資料庫連接", - "createConnection": "新建連接", - "editConnection": "編輯連接", - "searchPlaceholder": "搜尋連接名稱或編碼", - "code": "連接編碼", - "codePlaceholder": "如 erp_mysql", - "codeTip": "字母開頭,僅含字母、數字、底線、連字符;default 為系統保留", - "name": "連接名稱", - "namePlaceholder": "請輸入連接名稱", - "dbType": "資料庫類型", - "host": "主機地址", - "hostPlaceholder": "如 192.168.1.100", - "port": "埠", - "user": "使用者名稱", - "userPlaceholder": "資料庫使用者名稱", - "password": "密碼", - "passwordPlaceholder": "請輸入密碼", - "passwordKeepHint": "留空表示不修改原密碼", - "defaultDatabase": "預設資料庫", - "defaultDatabasePlaceholder": "連接後預設使用的資料庫名(Oracle 填 Service Name)", - "dbTypePostgresql": "PostgreSQL", - "dbTypeMysql": "MySQL", - "dbTypeSqlserver": "SQL Server", - "dbTypeOracle": "Oracle", - "description": "描述", - "descriptionPlaceholder": "可選描述", - "status": "啟用", - "enabled": "已啟用", - "disabled": "已停用", - "systemConnection": "系統", - "systemConnectionTip": "系統預設連接來自環境變數 DATABASE_URL,不可編輯或刪除", - "testConnection": "測試連接", - "testSuccess": "連接成功", - "testFailed": "連接失敗", - "confirm": "確定", - "cancel": "取消", - "deleteConfirmTitle": "刪除連接", - "deleteConfirmMessage": "確定刪除連接「{name}」嗎?", - "deleteSuccess": "已刪除連接「{name}」", - "createSuccess": "連接建立成功", - "updateSuccess": "連接更新成功", - "empty": "暫無資料庫連接,點擊上方按鈕新增", - "codeExists": "連接編碼已存在", - "codeAvailable": "連接編碼可用", - "filterAll": "全部", - "noDescription": "暫無描述", - "requiredFields": "請填寫連接編碼、名稱和主機地址", - "browseDatabase": "瀏覽資料庫", - "backToConnectionList": "返回連接列表", - "connectionNotFoundForBrowse": "該連接不存在或未啟用,無法瀏覽" -} diff --git a/web/apps/web-ele/src/locales/langs/zh-TW/database-manager.json b/web/apps/web-ele/src/locales/langs/zh-TW/database-manager.json deleted file mode 100644 index 85f7ddf..0000000 --- a/web/apps/web-ele/src/locales/langs/zh-TW/database-manager.json +++ /dev/null @@ -1,399 +0,0 @@ -{ - "connectionInfo": "連接信息", - "testConnection": "測試連接", - "connectionName": "連接名稱", - "databaseType": "數據庫類型", - "connectionIdentifier": "連接標識", - "connectionStatus": "連接狀態", - "connectionSuccessful": "✓ 連接成功", - "connectionFailed": "✗ 連接失敗", - "notTested": "未測試", - "testResult": "測試結果:", - "testConnectionSuccess": "連接測試成功", - "testConnectionFailed": "連接測試失敗", - "connectionError": "連接失敗", - "usageInstructions": "使用說明", - "expandConnection": "· 展開連接 - 查看該連接下的所有數據庫", - "selectDatabase": "· 選擇數據庫 - 查看數據庫詳細信息", - "selectTable": "· 選擇表 - 查看表結構、查詢數據、執行SQL", - "searchFunction": "· 搜索功能 - 在左側樹中快速查找數據庫或表", - "quickActions": "快捷操作", - "testDatabaseConnection": "測試數據庫連接", - "tip": "提示:點擊左側樹節點展開查看更多內容", - "constraintList": "約束列表", - "addConstraint": "添加約束", - "constraintName": "約束名", - "constraintNameTip": "給約束起一個唯一名稱,便於識別和管理", - "constraintType": "約束類型", - "constraintTypeTip": "主鍵:唯一標識記錄;外鍵:關聯其他表;唯一:字段值不能重複;檢查:自定義校驗規則", - "field": "本表字段", - "constraintFieldTip": "選擇當前表中參與此約束的字段", - "definition": "檢查規則", - "constraintDefinitionTip": "僅檢查約束需要填寫,例如 age > 0", - "referencedTable": "關聯表", - "referencedTableTip": "選擇要關聯的目標表,通常是被引用的主表", - "referencedTablePlaceholder": "請輸入引用表名", - "selectReferencedTable": "請選擇關聯表", - "onDelete": "刪除時", - "onDeleteTip": "當關聯表中的記錄被刪除時,本表如何處理", - "onUpdate": "更新時", - "onUpdateTip": "當關聯表中的關聯字段被修改時,本表如何處理", - "fkActionDefault": "默認", - "fkActionDefaultLabel": "默認規則", - "fkActionDefaultTip": "不額外指定,使用數據庫默認行為", - "fkActionNoActionLabel": "無動作", - "fkActionNoActionTip": "有關聯數據時不允許刪除或更新", - "fkActionRestrictLabel": "限制操作", - "fkActionRestrictTip": "有關聯數據時立即阻止刪除或更新", - "fkActionCascadeLabel": "級聯同步", - "fkActionCascadeTip": "同步刪除或更新本表中的關聯數據", - "fkActionSetNullLabel": "置空", - "fkActionSetNullTip": "將本表外鍵字段設為 NULL", - "fkActionSetDefaultLabel": "設默認值", - "fkActionSetDefaultTip": "將本表外鍵字段設為默認值", - "referencedColumns": "關聯字段", - "referencedColumnsTip": "選擇關聯表中對應的字段,通常為主鍵 id", - "referencedColumnsPlaceholder": "請選擇關聯字段", - "constraintNameRequired": "請填寫約束名", - "constraintColumnsRequired": "請選擇約束字段", - "constraintCheckDefinitionRequired": "請填寫 CHECK 約束定義", - "constraintReferencedTableRequired": "請填寫外鍵引用表", - "constraintReferencedColumnsRequired": "請填寫外鍵引用字段", - "constraintReferencedColumnsMismatch": "外鍵字段數量需與引用字段數量一致", - "constraintValidationFailed": "約束配置校驗失敗", - "selectField": "選擇字段", - "constraintDefinition": "約束定義 (如: age > 0)", - "constraintDeleted": "約束已刪除", - "noConstraints": "暫無約束,點擊\"添加約束\"開始創建", - "primaryKey": "PRIMARY KEY", - "foreignKey": "FOREIGN KEY", - "foreignKeyLabel": "外鍵", - "unique": "UNIQUE", - "check": "CHECK", - "checkLabel": "檢查規則", - "database": "數據庫", - "schema": "Schema", - "tableName": "表名", - "enterTableName": "請輸入表名", - "tableComment": "表註釋", - "enterTableComment": "請輸入表註釋(可選)", - "fieldManagement": "字段管理", - "indexManagement": "索引管理", - "constraintManagement": "約束管理", - "previewSQL": "預覽SQL", - "createTable": "創建表", - "createTableSQLPreview": "CREATE TABLE SQL預覽", - "executeCreate": "執行創建", - "fillTableNameAndFields": "請填寫表名並至少添加一個字段", - "createTableSuccess": "表創建成功", - "createTableFailed": "創建表失敗", - "primaryKeyUUID": "主鍵ID (UUID)", - "databaseInfo": "數據庫信息", - "databaseName": "數據庫名稱", - "owner": "所有者", - "encoding": "字符編碼", - "collation": "排序規則", - "tableCount": "表數量", - "databaseSize": "數據庫大小", - "description": "說明", - "noDatabaseInfo": "未找到數據庫信息", - "quickOperations": "快速操作", - "viewTableList": "查看表列表", - "expandLeftTreeNode": "展開左側樹節點查看該數據庫下的所有表", - "searchTable": "搜索表", - "useSearchBox": "使用左側搜索框快速查找表名", - "executeSql": "執行SQL", - "switchToSqlTab": "選擇任意表後切換到\"SQL執行\"標籤頁", - "statistics": "統計信息", - "loadDatabaseInfoFailed": "加載數據庫信息失敗", - "tables": "表", - "loading": "加載中...", - "loadDatabaseConfigsFailed": "加載數據庫配置失敗", - "loadDatabaseListFailed": "加載數據庫列表失敗", - "loadSchemaListFailed": "加載Schema列表失敗", - "loadTableListFailed": "加載表列表失敗", - "loadViewListFailed": "加載視圖列表失敗", - "cannotFindNode": "無法找到節點", - "refreshSuccess": "刷新成功", - "refreshFailed": "刷新失敗", - "expandNodeToViewLatestData": "刷新成功,展開節點查看最新數據", - "copiedToClipboard": "已複製到剪貼板", - "enterSchemaName": "請輸入Schema名稱", - "createSchema": "創建Schema", - "schemaNamePattern": "Schema名稱只能包含字母、數字和下劃線,且必須以字母或下劃線開頭", - "schemaCreatedSuccess": "Schema \"{schemaName}\" 創建成功", - "createSchemaFailed": "創建Schema失敗", - "refreshConnection": "刷新連接", - "viewInfo": "查看信息", - "copyConnectionName": "複製連接名", - "refreshDatabase": "刷新數據庫", - "copyDatabaseName": "複製數據庫名", - "refreshSchema": "刷新Schema", - "copySchemaName": "複製Schema名", - "refreshTableList": "刷新表列表", - "createNewTable": "創建新表", - "viewStatistics": "查看統計", - "refreshViewList": "刷新視圖列表", - "createNewView": "創建新視圖", - "refreshAllMaterializedViews": "刷新所有物化視圖", - "viewTableStructure": "查看表結構", - "queryData": "查詢數據", - "executeSql": "執行SQL", - "copyTableName": "複製表名", - "refresh": "刷新", - "viewViewStructure": "查看視圖結構", - "viewDefinitionSQL": "查看定義SQL", - "refreshView": "刷新視圖", - "copyViewName": "複製視圖名", - "confirmTruncateTable": "確定要清空表 \"{tableName}\" 的所有數據嗎?此操作不可恢復!", - "deleteTable": "刪除表", - "confirmDeleteTable": "確定要刪除表 \"{tableName}\" 嗎?此操作不可恢復!", - "deleteTableSuccess": "表刪除成功", - "deleteTableFailed": "刪除表失敗", - "warning": "警告", - "confirm": "確定", - "cancel": "取消", - "confirmRefreshMaterializedView": "確定要刷新物化視圖 \"{viewName}\" 嗎?", - "onlyMaterializedViewNeedsRefresh": "只有物化視圖才需要手動刷新", - "confirmExportAllTables": "確定要導出當前Schema/Database下的所有表嗎?", - "confirmExportAllViews": "確定要導出當前Schema/Database下的所有視圖嗎?", - "confirmRefreshAllMaterializedViews": "確定要刷新當前Schema/Database下的所有物化視圖嗎?這可能需要一些時間。", - "exportFeatureDevelopment": "導出功能開發中...", - "importFeatureDevelopment": "導入功能開發中...", - "editFeatureDevelopment": "編輯功能開發中...", - "deleteFeatureDevelopment": "刪除功能開發中...", - "truncateTableFeatureDevelopment": "清空表功能開發中...", - "createViewFeatureDevelopment": "創建視圖功能開發中...", - "exportAllTablesFeatureDevelopment": "導出所有表功能開發中...", - "exportAllViewsFeatureDevelopment": "導出所有視圖功能開發中...", - "refreshAllMaterializedViewsFeatureDevelopment": "刷新所有物化視圖功能開發中...", - "selectItemFromLeft": "請從左側選擇一個項目", - "tableStructure": "表結構", - "dataQuery": "數據查詢", - "sqlExecution": "SQL執行", - "objectEditor": "對象編輯", - "viewStructure": "視圖結構", - "fieldList": "字段列表", - "fields": "欄位", - "indexes": "索引", - "constraints": "約束", - "columns": "欄位", - "addField": "添加字段", - "serialNumber": "序號", - "fieldName": "字段名", - "dataType": "數據類型", - "lengthPrecision": "長度/精度", - "decimalPlaces": "小數位", - "nullable": "可空", - "defaultValue": "默認值", - "primaryKey": "主鍵", - "unique": "唯一", - "comment": "註釋", - "operation": "操作", - "fieldDeleted": "字段已刪除", - "noFields": "暫無字段,點擊\"添加字段\"開始創建", - "type": "類型", - "fieldNamePlaceholder": "如: product_name", - "defaultValuePlaceholder": "默認值", - "fieldCommentPlaceholder": "字段註釋", - "indexList": "索引列表", - "addIndex": "添加索引", - "indexName": "索引名", - "indexType": "索引類型", - "selectFields": "選擇字段", - "indexDeleted": "索引已刪除", - "noIndexes": "暫無索引,點擊\"添加索引\"開始創建", - "indexNamePlaceholder": "索引名", - "typePlaceholder": "類型", - "schemaInfo": "Schema 信息", - "copyName": "複製名稱", - "schemaName": "Schema名稱", - "databaseType": "數據庫類型", - "objectStatistics": "對象統計", - "databaseObjects": "數據庫對象", - "noTablesInSchema": "該Schema下暫無表", - "noViewsInSchema": "該Schema下暫無視圖", - "materializedView": "物化視圖", - "updatable": "可更新", - "readOnly": "只讀", - "loadSchemaInfoFailed": "加載Schema信息失敗", - "sqlEditor": "SQL編輯器", - "loadExample": "加載示例", - "clearSQL": "清空", - "execute": "執行", - "executionResult": "執行結果", - "executionTime": "執行時間", - "affectedRows": "影響行數", - "returned": "返回", - "records": "行記錄", - "querySuccessNoData": "查詢成功,但沒有返回數據", - "enterSQL": "在上方輸入SQL語句並點擊\"執行\"按鈕", - "sqlWarning": "⚠️ 請謹慎執行UPDATE、DELETE等修改數據的語句", - "enterSQLStatement": "輸入SQL語句...", - "sqlPlaceholder": "輸入SQL語句...\\n\\n示例:\\nSELECT * FROM users WHERE id > 100;\\nUPDATE users SET status = 'active' WHERE id = 1;\\nDELETE FROM users WHERE id = 999;", - "invalidDatabaseConnection": "無效的數據庫連接", - "executeSQLFailed": "SQL執行失敗", - "pleaseEnterSQL": "請輸入SQL語句", - "whereCondition": "WHERE 條件 (例: id > 100 AND status = 'active')", - "orderBy": "ORDER BY (例: id DESC)", - "query": "查詢", - "noData": "暫無數據", - "totalRecords": "共 {count} 條記錄", - "designTable": "設計表 - {tableName}", - "designTableAction": "設計表", - "databaseLabel": "數據庫", - "schemaLabel": "Schema", - "tableNameLabel": "表名", - "tableNamePlaceholder": "表名", - "commentLabel": "註釋", - "tableCommentPlaceholder": "表註釋", - "unsavedChanges": "有未保存的修改", - "noChanges": "無修改", - "reset": "重置", - "saveChanges": "保存更改", - "sqlPreview": "SQL預覽", - "close": "關閉", - "confirmSave": "確定要保存這些修改嗎?", - "confirmSaveTitle": "確認保存", - "confirmClose": "有未保存的修改,確定要關閉嗎?", - "confirmCloseTitle": "提示", - "noChangesDetected": "沒有檢測到任何修改", - "noSQLGenerated": "沒有生成任何SQL語句", - "saveSuccess": "保存成功", - "saveFailed": "保存失敗", - "loadTableStructureFailed": "加載表結構失敗", - "loadTableDataFailed": "加載表數據失敗", - "tableInfo": "表信息", - "tableType": "類型", - "rowCount": "行數", - "tableSize": "大小", - "ddlStatement": "DDL語句", - "copy": "複製", - "basicInfo": "基本信息", - "confirmReset": "確定要重置所有修改嗎?", - "confirmResetTitle": "提示", - "resetSuccess": "已重置", - "missingDatabaseConfig": "缺少數據庫配置信息", - "loadDDLFailed": "加載DDL語句失敗", - "loadDDLFailedMsg": "-- 加載DDL失敗,請檢查數據庫連接", - "viewInfo": "視圖信息", - "viewName": "視圖名稱", - "viewType": "視圖類型", - "materializedView": "物化視圖", - "normalView": "普通視圖", - "isUpdatable": "是否可更新", - "yes": "是", - "no": "否", - "checkOption": "CHECK OPTION", - "columnInfo": "列信息", - "columnName": "列名", - "dataType": "數據類型", - "nullable": "可空", - "position": "位置", - "dependentTables": "依賴的表", - "noDependentTables": "無依賴表", - "viewDefinition": "視圖定義", - "noDefinition": "暫無定義", - "description": "說明", - "viewExplanation": "視圖(View)是基於一個或多個表的虛擬表,不存儲實際數據。", - "viewBenefit1": "視圖可以簡化複雜查詢,提高數據安全性", - "viewBenefit2": "可更新視圖允許通過視圖修改基礎表數據", - "viewBenefit3": "視圖依賴的表被修改時,視圖結構會自動更新", - "viewBenefit4": "刪除視圖不會影響基礎表的數據", - "searchPlaceholder": "搜索數據庫、表、視圖...", - "loadViewStructureFailed": "加載視圖結構失敗", - "noData": "暫無數據", - "noColumnInfo": "暫無列信息", - "dataTypes": { - "varchar": "文本", - "char": "定長文本", - "text": "長文本", - "integer": "整數", - "int": "整數", - "bigint": "長整數", - "smallint": "短整數", - "numeric": "精確小數", - "decimal": "精確小數", - "doublePrecision": "小數", - "double": "小數", - "float": "小數", - "json": "JSON", - "date": "日期", - "time": "時間", - "datetime": "日期時間", - "timestamp": "時間戳", - "datetime2": "時間戳", - "boolean": "布爾", - "bit": "布爾", - "nvarchar": "Unicode文本", - "nvarcharMax": "JSON" - }, - "fieldNameRequired": "字段名不能為空", - "fieldNameInvalidFormat": "字段名只能包含字母、數字和下劃線,且必須以字母或下劃線開頭", - "fieldNameDuplicate": "字段名 \"{name}\" 重複", - "tablesFolder": "表", - "viewsFolder": "視圖", - "refreshSuccess": "刷新成功", - "refreshFailed": "刷新失敗", - "executeShortcutHint": "Ctrl/Cmd + Enter 執行", - "createDatabase": "創建數據庫", - "dropDatabase": "刪除數據庫", - "dropSchema": "刪除 Schema", - "renameSchema": "重命名 Schema", - "renameDatabase": "重命名數據庫", - "editTableStructure": "編輯表結構", - "enterNameToConfirm": "此操作不可恢復。請在下方輸入對象名稱以確認:", - "nameMismatch": "輸入的名稱與對象名稱不一致", - "systemConnectionForbidden": "系統連接不允許執行寫操作", - "systemDatabase": "系統數據庫", - "systemDatabaseForbidden": "系統數據庫不允許此操作", - "databaseCreated": "數據庫 \"{name}\" 創建成功", - "databaseDropped": "數據庫 \"{name}\" 刪除成功", - "schemaDropped": "Schema \"{name}\" 刪除成功", - "schemaRenamed": "Schema 已重命名為 \"{name}\"", - "createDatabaseFailed": "創建數據庫失敗", - "dropDatabaseFailed": "刪除數據庫失敗", - "dropSchemaFailed": "刪除 Schema 失敗", - "renameSchemaFailed": "重命名 Schema 失敗", - "renameDatabaseFailed": "重命名數據庫失敗", - "databaseRenamed": "數據庫已重命名為 \"{name}\"", - "enterNewDatabaseName": "請輸入新的數據庫名稱", - "databaseNameRequired": "請輸入數據庫名稱", - "databaseNamePattern": "數據庫名只能包含字母、數字和下劃線,且必須以字母或下劃線開頭", - "enterDatabaseName": "請輸入數據庫名稱", - "databaseName": "數據庫名稱", - "encoding": "編碼", - "charset": "字符集", - "collation": "排序規則", - "enterNewSchemaName": "請輸入新的 Schema 名稱", - "objectTypeDatabase": "數據庫", - "objectTypeSchema": "Schema", - "objectTypeTable": "表", - "dangerousActionDefaultWarning": "確定要刪除{objectType} \"{objectName}\" 嗎?此操作不可恢復。", - "typeObjectNamePlaceholder": "請輸入 \"{objectName}\" 以確認", - "objectOverview": "概覽", - "objectName": "對象名稱", - "objectTypeConnection": "連接", - "objectTypeView": "視圖", - "databaseCount": "數據庫數量", - "databasesUnderConnection": "該連接下的數據庫", - "connectionHint": "提示", - "connectionBrowseHint": "在左側樹中展開連接,瀏覽數據庫與對象", - "schemaList": "Schema 列表", - "mysqlSchemaHint": "MySQL 不使用 Schema 層級,數據庫即為頂層容器。請展開左側樹查看表與視圖。", - "schemaDescriptionHint": "Schema 是數據庫對象的邏輯容器,用於組織表、視圖等對象。", - "searchObjectPlaceholder": "搜索對象名稱...", - "loadObjectListFailed": "加載對象列表失敗", - "size": "大小", - "indexTypes": { - "btree": "B-Tree", - "hash": "Hash", - "gin": "GIN", - "gist": "GiST", - "brin": "BRIN", - "nonclustered": "非聚集", - "clustered": "聚集", - "normal": "普通", - "bitmap": "位圖" - } -} diff --git a/web/apps/web-ele/src/locales/langs/zh-TW/database-monitor.json b/web/apps/web-ele/src/locales/langs/zh-TW/database-monitor.json deleted file mode 100644 index 63a45e6..0000000 --- a/web/apps/web-ele/src/locales/langs/zh-TW/database-monitor.json +++ /dev/null @@ -1,138 +0,0 @@ -{ - "overview": "概覽信息", - "connectionInfo": "連接信息", - "performanceStats": "性能統計", - "tableStats": "表統計", - "loadConfigFailed": "加載數據庫配置失敗", - "loading": "正在加載 {name}...", - "loadSuccess": "{name} 加載成功", - "loadFailed": "加載 {name} 失敗", - "selectDatabase": "請選擇數據庫", - "selectConnection": "請選擇數據庫連接", - "systemConnection": "系統", - "autoRefreshing": "自動刷新中", - "paused": "已暫停", - "connected": "已連接", - "disconnected": "未連接", - "featureDeveloping": "功能開發中...", - "connectionUsageRate": "連接使用率", - "databaseSize": "數據庫大小", - "cacheHitRatio": "緩存命中率", - "activeConnections": "活動連接", - "currentActiveConnections": "當前活動連接數", - "basicInfo": "基本信息", - "databaseType": "數據庫類型", - "hostAddress": "主機地址", - "databaseName": "數據庫名", - "version": "版本", - "uptime": "運行時間", - "timezone": "時區", - "charset": "字符集", - "totalConnections": "總連接數", - "maxConnections": "最大連接數", - "idleConnections": "空閒連接", - "storageInfo": "存儲信息", - "databaseSizeGb": "數據庫大小(GB)", - "databaseSizeMb": "數據庫大小(MB)", - "databaseSizeBytes": "數據庫大小(字節)", - "transactionsCommit": "事務提交", - "transactionsRollback": "事務回滚", - "tuplesReturned": "元組返回", - "totalQueries": "總查詢數", - "slowQueries": "慢查詢", - "bytesReceived": "接收字節", - "batchRequestsPerSec": "批處理請求/秒", - "pageLifeExpectancy": "頁面生命期望", - "bufferCacheHitRatio": "緩衝區命中率", - "realtimeActiveConnections": "實時活動連接數", - "currentIdleConnections": "當前空閒連接數", - "connectionPoolStatus": "連接池狀態", - "congested": "擁擠", - "busy": "繁忙", - "normal": "正常", - "idle": "空閒", - "connectionDistribution": "連接分佈", - "connectionPoolCapacity": "連接池容量", - "usedMaxConnections": "已使用 / 最大連接數", - "connectionDetailInfo": "連接詳細信息", - "usedConnections": "已使用連接", - "availableConnections": "可用連接", - "connectionExplanation": "連接說明", - "totalConnectionsDesc": "數據庫當前建立的所有連接總數", - "maxConnectionsDesc": "數據庫配置的最大允許連接數", - "activeConnectionsDesc": "正在執行查詢或事務的連接數", - "idleConnectionsDesc": "已建立但未在使用的連接數", - "usageRateDesc": "當前連接數佔最大連接數的百分比", - "connectionStatus": "連接狀態", - "connectionStatusDesc": "空閒(<50%) / 正常(50-70%) / 繁忙(70-90%) / 擁擠(≥90%)", - "corePerformanceMetrics": "核心性能指標", - "totalCommittedTransactions": "累計提交事務數", - "totalRollbackTransactions": "累計回滚事務數", - "totalQueriesCount": "累計查詢次數", - "queriesNeedOptimization": "需要優化的查詢", - "batchRequestsPerSecDesc": "每秒批處理請求數", - "transactionStats": "事務統計", - "commitRate": "提交率", - "tuplesFetched": "元組獲取", - "tuplesInserted": "元組插入", - "tuplesUpdated": "元組更新", - "tuplesDeleted": "元組刪除", - "needOptimization": "需優化", - "queryStats": "查詢統計", - "batchStats": "批處理統計", - "cacheStats": "緩存統計", - "networkTraffic": "網絡流量", - "bytesSent": "發送字節", - "totalTraffic": "總流量", - "performanceMetricExplanation": "性能指標說明", - "cacheHitRatioDesc": "從緩存中讀取數據的比例,越高性能越好", - "transactionsCommitDesc": "成功提交的事務總數", - "transactionsRollbackDesc": "回滚的事務總數,過高可能表示有問題", - "tupleOperations": "元組操作", - "tupleOperationsDesc": "數據行的增删改查操作統計", - "totalQueriesDesc": "數據庫執行的所有查詢總數", - "slowQueriesDesc": "執行時間超過阈值的查詢,需要優化", - "networkTrafficDesc": "數據庫接收和發送的字節數", - "batchRequests": "批處理請求", - "batchRequestsDesc": "每秒處理的批處理請求數", - "pageLifeExpectancyDesc": "頁面在緩衝池中停留的平均秒數", - "bufferCacheHitRatioDesc": "從緩衝區讀取頁面的比例", - "statisticalOverview": "統計概覽", - "totalTables": "總表數", - "totalRows": "總行數", - "totalSize": "總大小", - "searchTable": "搜索表", - "searchTablePlaceholder": "輸入表名搜索...", - "top10LargestTables": "Top 10 最大的表", - "noTableData": "暫無表數據", - "rank": "排名", - "schema": "模式", - "tableName": "表名", - "rows": "行數", - "size": "大小", - "dataSize": "數據大小", - "indexSize": "索引大小", - "inserts": "插入", - "updates": "更新", - "deletes": "删除", - "deadTuples": "死元組", - "autoIncrement": "自增值", - "usedSize": "已用大小", - "tableStatsExplanation": "表統計說明", - "tableSizeDesc": "表佔用的磁盤空間,包括數據和索引", - "tableRowsDesc": "表中的數據行總數", - "deadTuplesDesc": "已删除但未清理的行,需要VACUUM清理", - "insertUpdateDelete": "插入/更新/删除", - "tableOpsDesc": "表的增删改操作統計", - "tableDataSizeDesc": "表數據佔用的空間", - "tableIndexSizeDesc": "表索引佔用的空間", - "autoIncrementDesc": "自增主鍵的當前值", - "tableUsedSizeDesc": "表實際使用的空間", - "yes": "是", - "no": "否", - "realtime": "實時", - "noMatchingTables": "未找到匹配的表", - "allTablesList": "所有表列表", - "tableCount": "{count} 個表", - "tableSize": "表大小" -} diff --git a/web/apps/web-ele/src/locales/langs/zh-TW/demos.json b/web/apps/web-ele/src/locales/langs/zh-TW/demos.json deleted file mode 100644 index 992b5ec..0000000 --- a/web/apps/web-ele/src/locales/langs/zh-TW/demos.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "title": "演示", - "elementPlus": "Element Plus", - "form": "表單演示", - "vben": { - "title": "項目", - "about": "關於", - "document": "文檔", - "antdv": "Ant Design Vue 版本", - "naive-ui": "Naive UI 版本", - "element-plus": "Element Plus 版本" - }, - "demo": { - "name": "Demo", - "list": "Demo列表", - "create": "創建Demo", - "edit": "編輯Demo", - "delete": "刪除Demo", - "detail": "Demo詳情", - "title": "標題", - "content": "內容", - "status": "狀態", - "priority": "優先級", - "isActive": "是否激活", - "createTime": "創建時間", - "updateTime": "更新時間", - "creator": "創建人", - "dept": "部門", - "statusDraft": "草稿", - "statusPublished": "發布", - "statusArchived": "歸檔", - "priorityLow": "低", - "priorityMedium": "中", - "priorityHigh": "高", - "titlePlaceholder": "請輸入標題", - "contentPlaceholder": "請輸入內容", - "searchPlaceholder": "請輸入標題搜索", - "createSuccess": "創建成功", - "updateSuccess": "更新成功", - "deleteSuccess": "刪除成功", - "deleteConfirm": "確定要刪除該Demo嗎?", - "exportExcel": "導出Excel", - "importExcel": "導入Excel", - "downloadTemplate": "下載模板", - "importSuccess": "導入成功", - "selectFile": "選擇文件" - } -} diff --git a/web/apps/web-ele/src/locales/langs/zh-TW/dept.json b/web/apps/web-ele/src/locales/langs/zh-TW/dept.json deleted file mode 100644 index 02969b2..0000000 --- a/web/apps/web-ele/src/locales/langs/zh-TW/dept.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "name": "部門", - "title": "部門管理", - "deptName": "部門名稱", - "parentDept": "上級部門", - "deptCode": "部門編碼", - "deptCodeHelp": "可選,用於標識部門的唯一編碼", - "deptCodeFormatError": "部門編碼只能包含字母、數字、下劃線和橫線", - "deptType": "部門類型", - "deptTypeOptions": { - "company": "公司", - "department": "部門", - "team": "小組", - "other": "其他" - }, - "lead": "部門領導", - "phone": "部門電話", - "phoneHelp": "可選,部門聯繫電話", - "phoneFormatError": "電話號碼格式不正確", - "email": "部門郵箱", - "emailHelp": "可選,部門聯繫郵箱", - "emailFormatError": "請輸入有效的郵箱地址", - "status": "狀態", - "sort": "排序", - "description": "部門描述", - "descriptionPlaceholder": "請輸入部門描述", - "descriptionHelp": "可選,部門的詳細描述信息", - "operation": "操作", - "addChildDept": "新建子部門", - "edit": "編輯", - "delete": "刪除", - "updateSuccess": "部門更新成功", - "updateFailed": "更新部門數據失敗", - "searchFailed": "搜索部門失敗", - "selectDeptFirst": "請先選擇部門", - "selectUsersFirst": "請先選擇用戶", - "addUsersSuccess": "添加成功", - "removeUsersConfirm": "確定要刪除選中的 {0} 個用戶嗎?", - "removeUsersSuccess": "刪除成功", - "removeUsersFailed": "刪除失敗" -} diff --git a/web/apps/web-ele/src/locales/langs/zh-TW/dict.json b/web/apps/web-ele/src/locales/langs/zh-TW/dict.json deleted file mode 100644 index 05b1238..0000000 --- a/web/apps/web-ele/src/locales/langs/zh-TW/dict.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "字典", - "title": "字典管理", - "dictName": "字典名稱", - "dictCode": "字典編碼", - "remark": "備註", - "remarkPlaceholder": "請輸入備註", - "status": "狀態", - "operation": "操作", - "edit": "編輯", - "codeFormatError": "字典編碼只能包含字母、數字和下劃線", - "selectDictFirst": "請先選擇字典", - "noData": "暫無數據", - "itemName": "字典項", - "itemLabel": "標籤", - "itemValue": "值", - "itemIcon": "圖標", - "sort": "排序", - "isGlobal": "全局可見", - "globalTag": "全局", - "mainApp": "主應用" -} diff --git a/web/apps/web-ele/src/locales/langs/zh-TW/dingtalk-sync.json b/web/apps/web-ele/src/locales/langs/zh-TW/dingtalk-sync.json deleted file mode 100644 index b07160c..0000000 --- a/web/apps/web-ele/src/locales/langs/zh-TW/dingtalk-sync.json +++ /dev/null @@ -1,86 +0,0 @@ -{ - "title": "釘釘同步配置", - "corpId": "企業號Id", - "corpIdPlaceholder": "請輸入AgentId", - "appKey": "應用憑證", - "appKeyPlaceholder": "請輸入AppKey", - "appSecret": "憑證密鑰", - "appSecretPlaceholder": "請輸入AppSecret", - "testConnection": "連接測試", - "testSuccess": "連接成功", - "testFail": "連接失敗", - "testing": "測試中...", - "syncScope": "同步範圍", - "syncScopePlaceholder": "請選擇", - "syncScopeTip": "選擇一個組織作為最高級組織進行數據同步,同步成功後該組織不可修改。", - "syncScopeLocked": "已完成首次同步,同步範圍不可修改。如需變更請聯繫管理員。", - "syncStats": "同步統計", - "syncType": "同步類型", - "totalCount": "總數", - "successCount": "同步成功數", - "failCount": "同步失敗數", - "notSynced": "未同步數", - "syncTime": "同步時間", - "syncStatus": "狀態", - "statusRunning": "同步中", - "statusSuccess": "成功", - "statusPartial": "部分成功", - "statusFailed": "失敗", - "operation": "操作", - "sync": "同步", - "syncing": "同步中...", - "syncDept": "組織", - "syncUser": "用戶", - "syncDeptSuccess": "組織架構同步完成", - "syncUserSuccess": "用戶同步完成", - "syncFail": "同步失敗", - "triggerEvents": "觸發事件", - "triggerEvent": "觸發事件", - "description": "描述", - "enableSyncDept": "啟用同步組織", - "enableSyncDeptDesc": "新增、刪除、修改組織信息觸發同步組織事件", - "enableSyncUser": "啟用同步用戶", - "enableSyncUserDesc": "新增、刪除、修改用戶信息觸發同步用戶事件", - "save": "保存", - "saving": "保存中...", - "saveSuccess": "保存成功", - "saveFail": "保存失敗", - "corpName": "企業名稱", - "loadingDeptTree": "載入部門樹中...", - "streamConfig": "Stream 模式(即時同步)", - "streamConfigTip": "通過 WebSocket 長連接即時接收釘釘通訊錄變更事件,無需配置公網回調地址。", - "streamStatus": "連接狀態", - "streamConnected": "已連接", - "streamDisconnected": "未連接", - "streamTotalEvents": "已接收事件", - "streamLastEvent": "最後事件", - "streamLastEventTime": "最後事件時間", - "streamEventNone": "暫無", - "streamEventLog": "增量同步日誌", - "refresh": "重新整理", - "eventType": "事件類型", - "targetType": "目標類型", - "targetName": "目標名稱", - "eventStatus": "狀態", - "eventTime": "時間", - "eventCreate": "新增組織", - "eventModify": "修改組織", - "eventRemove": "刪除組織", - "eventAddUser": "新增用戶", - "eventModifyUser": "修改用戶", - "eventLeaveUser": "用戶離職", - "eventActiveUser": "用戶啟用", - "guideTitle": "釘釘同步配置指南", - "guideStep1Title": "建立釘釘企業內部應用", - "guideStep1Desc": "登入釘釘開放平台(open.dingtalk.com),進入「應用開發」->「企業內部開發」,建立一個 H5 微應用,取得 AppKey 和 AppSecret。", - "guideStep2Title": "配置應用權限", - "guideStep2Desc": "在應用管理頁面,點擊「權限管理」,搜尋並開通以下權限:「通訊錄部門資訊讀取權限」、「成員資訊讀取權限」、「通訊錄部門成員讀取權限」、「企業員工手機號資訊」等。", - "guideStep3Title": "填寫憑證資訊", - "guideStep3Desc": "將取得的企業 CorpId、AppKey、AppSecret 填入本頁面對應的輸入框中,點擊「連接測試」驗證憑證是否正確。", - "guideStep4Title": "選擇同步範圍並執行全量同步", - "guideStep4Desc": "連接成功後,在「同步範圍」中選擇需要同步的根部門,然後在同步統計表中依次點擊「同步」按鈕,先同步組織架構,再同步用戶。", - "guideStep5Title": "在釘釘開放平台開啟 Stream 模式", - "guideStep5Desc": "登入釘釘開放平台,進入應用 -> 「事件與回調」,推送方式選擇「Stream 模式」,保存即可。無需填寫回調地址、Token、AES Key。", - "guideStep6Title": "啟用觸發事件", - "guideStep6Desc": "在「觸發事件」區域勾選需要自動同步的事件類型(同步組織、同步用戶),儲存配置。之後釘釘通訊錄發生變更時將自動推送到系統進行增量同步。" -} diff --git a/web/apps/web-ele/src/locales/langs/zh-TW/document-generator.json b/web/apps/web-ele/src/locales/langs/zh-TW/document-generator.json deleted file mode 100644 index 60e258f..0000000 --- a/web/apps/web-ele/src/locales/langs/zh-TW/document-generator.json +++ /dev/null @@ -1,527 +0,0 @@ -{ - "documentGenerator": { - "title": "文檔生成", - "templateManagement": "模板管理", - "sealManagement": "簽章管理", - "documentList": "文檔列表", - - "addTemplate": "新建模板", - "editTemplate": "編輯模板", - "copyTemplate": "複製模板", - "previewTemplate": "預覽模板", - - "templateName": "模板名稱", - "templateCode": "模板編碼", - "category": "分類", - "formCode": "表單編碼", - "workflowCode": "流程編碼", - "bindingType": "綁定類型", - "bindToWorkflow": "綁定到流程", - "bindToForm": "綁定到表單", - "workflowLinkedForm": "流程已關聯表單", - "pleaseSelectForm": "請選擇關聯表單", - - "basicInfo": "基本信息", - "pageSettings": "頁面設置", - "autoGenerate": "自動生成", - "watermark": "水印設置", - "templateDesign": "模板設計", - - "pageSize": "頁面大小", - "pageSizeCustom": "自定義", - "customPageWidth": "頁面寬度", - "customPageHeight": "頁面高度", - "pageOrientation": "頁面方向", - "pageMargin": "頁邊距", - "top": "上", - "right": "右", - "bottom": "下", - "left": "左", - "showPageNumber": "顯示頁碼", - "pageNumberSettings": "頁碼設置", - "pageNumberPosition": "頁碼位置", - "pageNumberPositionFooter": "頁腳", - "pageNumberPositionHeader": "頁眉", - "pageNumberAlign": "對齊方式", - "pageNumberFormat": "顯示格式", - "pageNumberFormatChinese": "第 1 頁 / 共 10 頁", - "pageNumberFormatFraction": "1 / 10", - "pageNumberFormatEnglish": "Page 1 of 10", - "pageNumberFontSize": "字號", - "pageNumberColor": "顏色", - - "enableAutoGenerate": "啟用自動生成", - "generateTrigger": "觸發時機", - - "enableWatermark": "啟用水印", - "watermarkText": "水印文字", - "watermarkOpacity": "透明度", - "watermarkAngle": "角度", - - "elementLibrary": "元素庫", - "canvas": "畫布", - "properties": "屬性", - "dragElementHere": "點擊左側元素添加到畫布", - "selectElementToEdit": "選擇元素以編輯屬性", - - "basicProperties": "基本屬性", - "elementType": "元素類型", - "content": "內容", - "fieldName": "字段名", - "fieldLabel": "標籤", - "format": "格式", - "dataSource": "數據源", - "columns": "列配置", - "sealType": "簽章類型", - - "position": "位置", - "width": "寬度", - "height": "高度", - - "style": "樣式", - "fontSize": "字號", - "fontWeight": "字重", - "textAlign": "對齊", - "alignLeft": "靠左", - "alignCenter": "置中", - "alignRight": "靠右", - "color": "顏色", - - "publish": "發布", - "unpublish": "取消發布", - "builtin": "內置", - - "confirmDelete": "確定要刪除此模板嗎?", - "confirmUnpublish": "確定要取消發布此模板嗎?", - "builtinCannotDelete": "內置模板不能刪除", - "publishSuccess": "發布成功", - "unpublishSuccess": "取消發布成功", - - "pleaseInputName": "請輸入模板名稱", - "pleaseInputCode": "請輸入模板編碼", - "codeFormatError": "編碼必須以字母開頭,只能包含字母、數字和下劃線", - "pleaseInputNameAndCode": "請輸入模板名稱和編碼", - "pleaseInputFormCode": "請輸入關聯表單編碼", - "pleaseInputWorkflowCode": "請輸入關聯流程編碼", - "pleaseSelectWorkflow": "請選擇關聯工作流(可選)", - "pleaseInputWatermarkText": "請輸入水印文字", - - "newCode": "新編碼", - "newName": "新名稱", - - "previewFailed": "預覽失敗", - - "generateDocument": "生成文檔", - "regenerate": "重新生成", - "downloadDocument": "下載文檔", - "documentName": "文檔名稱", - "documentNo": "文檔編號", - "generateTime": "生成時間", - "generator": "生成人", - "downloadCount": "下載次數", - - "sealName": "簽章名稱", - "sealImage": "簽章圖片", - "uploadSeal": "上傳簽章", - "sealOwner": "使用權限", - "sealScope": "使用範圍", - - "noDocuments": "暫無文檔", - "selectTemplate": "選擇模板", - "pleaseSelectTemplate": "請選擇模板", - "generate": "生成", - "generateSuccess": "生成成功", - "generateFailed": "生成失敗", - "regenerateSuccess": "重新生成成功", - "regenerateFailed": "重新生成失敗", - "pageCount": "頁數", - "fileSize": "文件大小", - "generateType": "生成方式", - "auto": "自動", - "manual": "手動", - - "elementText": "文本", - "elementField": "字段", - "elementTable": "表格", - "elementImage": "圖片", - "selectImage": "選擇圖片", - "elementSignature": "簽名", - "elementSeal": "簽章", - "elementQrcode": "二維碼", - "elementDivider": "分割線", - - "noDataSource": "(未設置數據源)", - "signatureDefault": "簽名", - "fieldNamePlaceholder": "如: applicant_name", - "fieldLabelPlaceholder": "如: 申請人:", - "dataSourcePlaceholder": "如: expense_items", - "columnFieldPlaceholder": "欄位", - "columnLabelPlaceholder": "標題", - "columnWidthPlaceholder": "寬度", - "signatureFieldPlaceholder": "簽名欄位名", - - "formatNone": "無", - "formatDate": "日期", - "formatDatetime": "日期時間", - "formatMoney": "金額", - "formatNumber": "數字", - - "sealCompany": "公司公章", - "sealDepartment": "部門章", - "sealPersonal": "個人章", - "sealFinance": "財務章", - "sealContract": "合同章", - - "selectedSeal": "已選簽章", - "selectSeal": "選擇簽章", - "noSealSelected": "未選擇簽章", - "noSealImage": "無圖片", - "noAvailableSeals": "暫無可用簽章", - "clearSeal": "清除簽章", - "sealLabel": "簽章標籤", - "sealLabelPlaceholder": "請輸入簽章標籤(如:蓋章處)", - "allTypes": "全部類型", - "noSealsOfType": "該類型下暫無簽章", - - "pleaseInputText": "請輸入文本", - "fieldPrefix": "字段:", - "column": "列", - "addColumn": "添加列", - - "fontNormal": "正常", - "fontBold": "粗體", - "alignLeft": "左對齊", - "alignCenter": "居中", - "alignRight": "右對齊", - - "notSet": "未設置", - "notSetDataSource": "未設置數據源", - - "documents": "文檔", - - "categoryLeave": "請假", - "categoryExpense": "報銷", - "categoryPurchase": "採購", - "categoryContract": "合同", - "categoryCertificate": "證明", - "categoryOther": "其他", - - "statusPublished": "已發布", - "statusDraft": "草稿", - - "orientationPortrait": "縱向", - "orientationLandscape": "橫向", - - "triggerOnApprove": "審批通過時", - "triggerOnSubmit": "提交時", - "triggerOnComplete": "流程結束時", - - "deleteConfirmTitle": "刪除確認", - "deleteSuccess": "模板 {name} 已刪除", - "unpublishConfirmTitle": "取消發布確認", - - "copyTitle": "複製模板", - "copyCodePlaceholder": "請輸入新模板的編碼", - "copyCodeRule": "編碼只能包含字母、數字、底線和短橫線", - "copy": "複製", - "copySuccess": "複製成功", - "importExport": { - "export": "匯出配置", - "import": "匯入配置", - "exportSuccess": "單據模板配置已匯出", - "exportFailed": "匯出失敗", - "importTitle": "匯入單據模板", - "dragOrClick": "拖拽 JSON 檔案到此處或點擊上傳", - "onlyJson": "僅支援 .json 格式檔案", - "fileParseError": "檔案解析失敗,請確認檔案格式正確", - "checking": "正在檢查...", - "codeConflictTip": "模板編碼已存在,請修改編碼後再匯入", - "codeAvailable": "模板編碼可用,可以匯入", - "newCodePlaceholder": "請輸入新的模板編碼", - "importSuccess": "單據模板匯入成功", - "importFailed": "匯入失敗", - "confirmImport": "確認匯入", - "reselect": "重新選擇", - "templateInfo": "模板資訊", - "appTip": "匯入的模板將歸屬到當前應用,狀態為草稿", - "bindingTip": "請確認關聯的表單/流程編碼在目標環境中存在,否則生成單據時可能異常" - }, - - "design": "設計", - "editInfo": "編輯信息", - "createSuccess": "創建成功", - "saveSuccess": "保存成功", - "autoSave": { - "saving": "保存中...", - "saved": "已保存", - "unsaved": "未保存" - }, - - "layoutElements": "佈局容器", - "headerElements": "表頭區域", - "infoElements": "資訊區域", - "tableElements": "表格區域", - "contentElements": "文字內容", - "approvalElements": "審批區域", - "otherElements": "其他元素", - "footerElements": "頁腳區域", - - "rowContainer": "行容器", - "columnCount": "列數", - "columnWidths": "列寬設置", - "columnGap": "列間距", - "addRowColumn": "添加列", - "removeRowColumn": "刪除列", - "dropElementHere": "拖曳元素到此處", - - "documentHeader": "文檔頁眉", - "documentTitle": "文檔標題", - "documentInfo": "單據資訊", - "infoRow": "資訊行", - "infoTable": "資訊表格", - "smartTable": "智慧表格", - "smartText": "智慧文字", - "smartTextPlaceholder": "輸入文字內容...", - "smartTextItalic": "斜體", - "smartTextUnderline": "底線", - "smartTextStrikethrough": "刪除線", - "smartTextUnorderedList": "無序列表", - "smartTextOrderedList": "有序列表", - "smartTextLineHeight": "行高", - "smartTextHeading": "標題", - "smartTextParagraph": "正文", - "smartTextH1": "標題 1", - "smartTextH2": "標題 2", - "smartTextH3": "標題 3", - "smartTextInsertTable": "插入表格", - "smartTextRemoveTable": "移除表格", - "smartTableRows": "行數", - "smartTableCols": "列數", - "smartTableAddRow": "新增行", - "smartTableAddCol": "新增列", - "smartTableDeleteRow": "刪除行", - "smartTableDeleteCol": "刪除列", - "smartTableMergeCells": "合併儲存格", - "smartTableSplitCell": "拆分儲存格", - "smartTableCellContent": "儲存格內容", - "smartTableSelectCells": "請先選取要操作的儲存格", - "smartTableInsertText": "輸入文字或插入變數", - "smartTableInsertRowAbove": "在上方插入行", - "smartTableInsertRowBelow": "在下方插入行", - "smartTableInsertColLeft": "在左側插入列", - "smartTableInsertColRight": "在右側插入列", - "smartTableClearContent": "清除內容", - "smartTableBold": "粗體", - "smartTableFontSize": "字號", - "smartTableFontColor": "字體顏色", - "smartTableBgColor": "背景顏色", - "smartTableToggleBorder": "邊框設定", - "borderAll": "所有邊框", - "borderOuter": "外邊框", - "borderInner": "內邊框", - "borderHorizontal": "水平邊框", - "borderVertical": "垂直邊框", - "borderColorLabel": "邊框顏色", - "customColor": "自訂", - "smartTableColumnWidths": "列寬設定", - "labelField": "標籤字段", - "detailTable": "明細表格", - "amountField": "金額字段", - "paragraph": "段落文字", - "richText": "富文字", - "approvalArea": "審批區域", - "barcode": "條形碼", - "spacer": "空白間距", - "documentFooter": "文檔頁腳", - - "searchElements": "搜索元素", - "elementTitle": "標題", - "elementParagraph": "段落", - - "documentTemplate": "文檔模板", - "elements": "個元素", - - "viewJSON": "查看JSON", - "jsonPreview": "JSON預覽", - "copyCode": "複製代碼", - "importConfig": "導入配置", - "pasteJsonConfig": "請粘貼JSON配置", - "importSuccess": "導入成功", - "exportSuccess": "導出成功", - "configFormatError": "配置格式錯誤", - "copiedToClipboard": "已複製到剪貼板", - "copyFailed": "複製失敗", - "pleaseEnterConfig": "請輸入配置", - "pleaseAddElements": "請先添加元素", - "previewNotImplemented": "預覽功能暫未實現", - "pdfPreview": "PDF預覽", - "generatingPreview": "正在生成預覽...", - "noPreviewContent": "暫無預覽內容", - "saveBeforePreview": "請先保存模板後再預覽", - "viewHTML": "查看HTML", - "htmlPreview": "HTML預覽", - "htmlPreviewFailed": "HTML預覽失敗", - "clearCanvasConfirm": "確定要清空畫布嗎?此操作不可撤銷。", - "cleared": "已清空", - "releaseToAdd": "釋放以添加元素", - - "elementProperties": "元素屬性", - "templateSettings": "模板設置", - - "signatureZone": "簽名區域", - "sealZone": "簽章區域", - "qrcodeContent": "二維碼內容", - "qrcodeContentPlaceholder": "請輸入二維碼內容或字段名", - "qrcodeType": "二維碼類型", - "qrcodeTypeText": "文本", - "qrcodeTypeUrl": "網址連結", - "qrcodeTypePhone": "電話號碼", - "qrcodeTypeEmail": "電子郵件", - "signatureFieldName": "簽名字段名", - "dividerLine": "分割線", - "sourceCode": "源碼", - "pagePreview": "頁面", - "fontFamily": "字體", - "defaultFont": "默認字體", - "lineHeight": "行高", - "fontWeightNormal": "正常", - "fontWeightBold": "粗體", - "alignJustify": "兩端對齊", - "titlePlaceholder": "請輸入標題", - "contentPlaceholder": "請輸入內容,支持使用 {{變量名}} 插入變量", - "imageUrl": "圖片地址", - "imageUrlPlaceholder": "請輸入圖片URL或字段名", - "imageLabelPlaceholder": "如:簽名、審批人等", - "labelPosition": "標籤位置", - "labelPositionTop": "上方", - "labelPositionBottom": "下方", - "labelPositionLeft": "左側", - "labelPositionRight": "右側", - "labelFontSize": "標籤字體大小", - "showUnderline": "顯示下劃線", - "lineStyle": "線條樣式", - "lineSolid": "實線", - "lineDashed": "虛線", - "lineDotted": "點線", - "lineWidth": "線條寬度", - "lineColor": "線條顏色", - "showPrintDate": "顯示打印日期", - "footerContentPlaceholder": "請輸入頁腳內容", - "yes": "是", - "no": "否", - "fieldsConfig": "字段配置", - "rowsConfig": "行配置", - "field": "字段", - "row": "行", - "addField": "添加字段", - "addRow": "添加行", - "newField": "新字段", - "label": "標籤", - "value": "值", - "labelWidth": "標籤寬度", - "labelBgColor": "標籤背景色", - "labelColor": "標籤字體顏色", - "fieldFontSize": "字段字體大小", - "fieldColor": "字段字體顏色", - "valueFontSize": "值字體大小", - "valueColor": "值字體顏色", - "fontSettings": "字體設置", - "fontColor": "字體顏色", - "labelFontWeight": "標籤加粗", - "headerBgColor": "表頭背景色", - "headerFontSize": "表頭字體大小", - "headerColor": "表頭字體顏色", - "headerFontWeight": "表頭加粗", - "labelSettings": "標籤設置", - "contentFontSize": "內容字體大小", - "contentColor": "內容字體顏色", - "columnWidth": "列寬", - "showIndex": "顯示序號", - "indexWidth": "序號寬度", - "noBackground": "無背景色", - "borderStyle": "邊框樣式", - "borderNone": "無邊框", - "insertVariable": "插入變量", - "searchVariable": "搜尋變數...", - "noVariables": "暫無變數", - "otherVariables": "其他", - "varApplicant": "申請人", - "varDepartment": "部門", - "varPosition": "職位", - "varApplyDate": "申請日期", - "varDocNo": "單據編號", - "varCreateDate": "創建日期", - "varPhone": "電話", - "varEmail": "郵箱", - "varTotalAmount": "合計金額", - "varRemark": "備註", - - "placeholder": { - "name": "搜索模板名稱" - }, - "groupFormFields": "表單欄位", - "groupCalculationFields": "計算欄位", - "groupSubTablePrefix": "子表: ", - "subTableDataSourceSuffix": "(資料來源)", - "subTableFirstRowSuffix": "(首行)", - "nameSuffix": "(名稱)", - "companyName": "公司名稱", - "headerType": "頁眉類型", - "noImage": "暫無圖片", - "positionMode": "定位模式", - "positionInline": "文件流", - "positionFloat": "懸浮" - }, - "calculation": { - "title": "計算配置", - "enableCalculation": "啟用計算配置", - "enableCalculationHint": "開啟後可在計算配置步驟中定義計算欄位和聚合欄位", - "calculationFields": "計算欄位", - "aggregationFields": "聚合欄位", - "calculationField": "計算欄位", - "aggregationField": "聚合欄位", - "noCalculationFields": "暫無計算欄位,點擊添加按鈕創建", - "noAggregationFields": "暫無聚合欄位,點擊添加按鈕創建", - "fieldName": "欄位名", - "fieldLabel": "欄位標籤", - "fieldNamePlaceholder": "如: total_amount", - "fieldLabelPlaceholder": "如: 合計金額", - "formula": "計算公式", - "formulaPlaceholder": "如: quantity * unit_price * (1 - discount_rate)", - "formulaHint": "支援運算符: +, -, *, /, %, ** | 函數: round, abs, numberToChinese | 可引用其他欄位和聚合結果", - "format": "格式化", - "formatNumber": "數字", - "formatMoney": "金額", - "formatPercent": "百分比", - "formatChinese": "中文大寫", - "decimalPlaces": "小數位數", - "dataSource": "資料來源", - "selectSubTable": "請選擇子表", - "aggregateField": "聚合欄位", - "selectField": "請選擇欄位", - "aggregateFunction": "聚合函數", - "funcSum": "求和", - "funcAvg": "平均值", - "funcMax": "最大值", - "funcMin": "最小值", - "funcCount": "計數", - "usageTitle": "使用說明", - "usageHint1": "聚合欄位用於對子表資料進行匯總計算(如訂單明細的金額合計)", - "usageHint2": "計算欄位用於基於表單欄位或聚合結果進行公式計算", - "usageHint3": "計算結果可在單據模板中通過變數名引用(用雙花括號包裹變數名)", - "usageHint4": "中文大寫格式會自動將數字轉換為大寫金額(如:壹仟貳佰參拾肆元伍角陸分)", - "positionMode": "定位模式", - "positionInline": "文件流", - "positionFloat": "懸浮", - "floatX": "X 座標", - "floatY": "Y 座標", - "floatZIndex": "層級", - "editorModeComponent": "元件模式", - "editorModeWysiwyg": "文件模式", - "wysiwygInsertImage": "插入圖片", - "wysiwygInsertSeal": "插入簽章", - "wysiwygPageCount": "共 {count} 頁", - "hideAttributePanel": "隱藏屬性面板", - "showAttributePanel": "顯示屬性面板" - } -} diff --git a/web/apps/web-ele/src/locales/langs/zh-TW/electronic-seal.json b/web/apps/web-ele/src/locales/langs/zh-TW/electronic-seal.json deleted file mode 100644 index f69dfaf..0000000 --- a/web/apps/web-ele/src/locales/langs/zh-TW/electronic-seal.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "title": "電子簽章管理", - "create": "新建簽章", - "createSeal": "新建簽章", - "editSeal": "編輯簽章", - "name": "簽章名稱", - "sealTypeLabel": "簽章類型", - "ownerTypeLabel": "所有者類型", - "scopeLabel": "使用範圍", - "sealImage": "簽章圖片", - "description": "描述", - "width": "寬度", - "height": "高度", - "enable": "啟用", - "disable": "禁用", - "sealType": { - "company": "公司章", - "department": "部門章", - "personal": "個人章", - "contract": "合同章", - "finance": "財務章" - }, - "status": { - "active": "已啟用", - "disabled": "已禁用" - }, - "ownerType": { - "all": "所有人", - "dept": "指定部門", - "role": "指定角色", - "user": "指定用戶" - }, - "scope": { - "all": "所有模板", - "specific": "指定模板" - }, - "placeholder": { - "name": "請輸入簽章名稱", - "sealType": "請選擇簽章類型", - "ownerType": "請選擇所有者類型", - "scope": "請選擇使用範圍", - "sealImage": "請上傳簽章圖片", - "description": "請輸入描述", - "selectDept": "請選擇部門", - "selectRole": "請選擇角色", - "selectUser": "請選擇用戶", - "selectTemplate": "請選擇模板" - }, - "deleteConfirm": "確定要刪除簽章 \"{name}\" 嗎?", - "deleteConfirmTitle": "刪除確認", - "deleteSuccess": "刪除成功", - "disableConfirm": "確定要禁用此簽章嗎?禁用後將無法使用。", - "disableConfirmTitle": "禁用確認", - "disableSuccess": "禁用成功", - "enableSuccess": "啟用成功", - "selectDept": "選擇部門", - "selectRole": "選擇角色", - "selectUser": "選擇用戶", - "selectTemplate": "選擇模板" -} diff --git a/web/apps/web-ele/src/locales/langs/zh-TW/email.json b/web/apps/web-ele/src/locales/langs/zh-TW/email.json deleted file mode 100644 index 91405ca..0000000 --- a/web/apps/web-ele/src/locales/langs/zh-TW/email.json +++ /dev/null @@ -1,125 +0,0 @@ -{ - "email": { - "title": "郵箱管理", - "composeBtn": "撰寫郵件", - "refresh": "同步", - "syncing": "同步中...", - "search": "搜索郵件...", - "selectAccount": "選擇賬號", - "addAccount": "添加賬號", - "manageAccount": "管理賬號", - "folders": { - "inbox": "收件箱", - "sent": "已發送", - "drafts": "草稿箱", - "trash": "垃圾箱", - "spam": "垃圾郵件", - "archive": "歸檔" - }, - "list": { - "noEmails": "暫無郵件", - "noSubject": "(無主題)", - "emails": "封郵件" - }, - "detail": { - "selectEmail": "選擇一封郵件查看詳情", - "from": "發件人", - "to": "收件人", - "reply": "回復", - "forward": "轉發", - "delete": "刪除", - "deleteConfirm": "確認刪除這封郵件嗎?", - "deleteSuccess": "刪除成功", - "deleteFailed": "刪除失敗", - "attachments": "附件", - "loadFailed": "加載郵件詳情失敗" - }, - "composeModal": { - "new": "撰寫郵件", - "reply": "回復郵件", - "forward": "轉發郵件", - "to": "收件人", - "cc": "抄送", - "subject": "主題", - "content": "內容", - "attachments": "附件", - "addAttachment": "添加附件", - "cancel": "取消", - "saveDraft": "保存草稿", - "send": "發送", - "sendSuccess": "發送成功", - "sendFailed": "發送失敗", - "fillRequired": "請填寫收件人、主題和內容", - "toPlaceholder": "多個收件人用逗號分隔", - "ccPlaceholder": "多個抄送人用逗號分隔", - "subjectPlaceholder": "郵件主題", - "contentPlaceholder": "郵件正文(富文本編輯器待集成)", - "draftSaved": "草稿保存功能待實現" - }, - "account": { - "add": "添加郵箱賬號", - "edit": "編輯郵箱賬號", - "name": "賬號名稱", - "namePlaceholder": "如:工作郵箱", - "provider": "郵件服務商", - "providerSelect": "選擇郵件服務商", - "email": "郵箱地址", - "emailPlaceholder": "your@email.com", - "password": "密碼/授權碼", - "passwordPlaceholder": "輸入郵箱密碼或授權碼", - "advancedSettings": "高級設置", - "imapServer": "IMAP服務器", - "imapServerPlaceholder": "imap.example.com", - "imapPort": "IMAP端口", - "smtpServer": "SMTP服務器", - "smtpServerPlaceholder": "smtp.example.com", - "smtpPort": "SMTP端口", - "autoSync": "自動同步", - "syncInterval": "同步間隔", - "cancel": "取消", - "test": "測試連接", - "save": "保存", - "testSuccess": "連接測試成功!", - "testFailed": "連接測試失敗", - "saveSuccess": "保存成功", - "updateSuccess": "更新成功", - "saveFailed": "保存失敗", - "validation": { - "nameRequired": "請輸入賬號名稱", - "providerRequired": "請選擇郵件服務商", - "emailRequired": "請輸入郵箱地址", - "emailInvalid": "請輸入正確的郵箱地址", - "passwordRequired": "請輸入密碼或授權碼" - } - }, - "sync": { - "notSynced": "未同步", - "syncing": "同步中", - "success": "同步成功", - "failed": "同步失敗", - "justNow": "剛剛", - "minutesAgo": "分鐘前", - "hoursAgo": "小時前", - "daysAgo": "天前", - "syncSuccess": "同步成功,收到 {count} 封新郵件", - "syncFailed": "同步失敗", - "selectAccountFirst": "請先選擇郵箱賬號" - }, - "stats": { - "loadFailed": "加載統計失敗" - }, - "providers": { - "outlook": "Microsoft Outlook", - "163": "網易163郵箱", - "qq": "QQ郵箱", - "gmail": "Gmail", - "enterprise": "企業郵箱", - "notes": { - "163": "需要使用授權碼,不是登錄密碼", - "qq": "需要使用授權碼,不是QQ密碼", - "gmail": "需要開啟允許不夠安全的應用或使用應用專用密碼", - "enterprise": "請聯繫IT管理員獲取郵件服務器配置" - } - } - } -} diff --git a/web/apps/web-ele/src/locales/langs/zh-TW/feishu-sync.json b/web/apps/web-ele/src/locales/langs/zh-TW/feishu-sync.json deleted file mode 100644 index 877588b..0000000 --- a/web/apps/web-ele/src/locales/langs/zh-TW/feishu-sync.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "title": "飛書同步配置", - "appId": "App ID", - "appIdPlaceholder": "請輸入飛書應用 App ID", - "appSecret": "App Secret", - "appSecretPlaceholder": "請輸入飛書應用 App Secret", - "testConnection": "連接測試", - "testSuccess": "連接成功", - "testFail": "連接失敗", - "testing": "測試中...", - "syncScope": "同步範圍", - "syncScopePlaceholder": "請選擇", - "syncScopeTip": "選擇一個組織作為最高級組織進行數據同步,同步成功後該組織不可修改。", - "syncScopeLocked": "已完成首次同步,同步範圍不可修改。如需變更請聯繫管理員。", - "syncStats": "同步統計", - "syncType": "同步類型", - "totalCount": "總數", - "successCount": "同步成功數", - "failCount": "同步失敗數", - "notSynced": "未同步數", - "syncTime": "同步時間", - "operation": "操作", - "sync": "同步", - "syncing": "同步中...", - "syncDept": "組織", - "syncUser": "用戶", - "syncDeptSuccess": "組織架構同步完成", - "syncUserSuccess": "用戶同步完成", - "syncFail": "同步失敗", - "triggerEvents": "觸發事件", - "triggerEvent": "觸發事件", - "description": "描述", - "enableSyncDept": "啟用同步組織", - "enableSyncDeptDesc": "新增、刪除、修改組織資訊觸發同步組織事件", - "enableSyncUser": "啟用同步用戶", - "enableSyncUserDesc": "新增、刪除、修改用戶資訊觸發同步用戶事件", - "save": "保存", - "saving": "保存中...", - "saveSuccess": "保存成功", - "saveFail": "保存失敗", - "callbackConfig": "事件回調配置", - "callbackConfigTip": "配置回調地址後,飛書通訊錄變更將即時推送到本系統進行增量同步。飛書回調需在飛書開放平台管理後台手動配置。", - "callbackUrl": "請求地址", - "callbackUrlPlaceholder": "請輸入請求地址,如 https://example.com/api/core/feishu-sync/callback", - "encryptKey": "Encrypt Key", - "encryptKeyPlaceholder": "請輸入 Encrypt Key", - "verificationToken": "Verification Token", - "verificationTokenPlaceholder": "請輸入 Verification Token", - "callbackStatus": "回調狀態", - "callbackConfigured": "已配置", - "callbackNotConfigured": "未配置", - "subscribedEvents": "已訂閱事件", - "generateRandom": "隨機產生", - "guideTitle": "飛書同步配置指南", - "guideStep1Title": "建立飛書企業自建應用", - "guideStep1Desc": "登入飛書開放平台(open.feishu.cn),進入「開發者後台」,建立一個企業自建應用,取得 App ID 和 App Secret。", - "guideStep2Title": "配置應用權限", - "guideStep2Desc": "在應用管理頁面,點擊「權限管理」,搜尋並開通以下權限:「獲取部門基礎資訊」、「獲取部門組織架構資訊」、「獲取用戶基本資訊」、「獲取用戶手機號」等通訊錄相關權限。", - "guideStep3Title": "填寫憑證並執行全量同步", - "guideStep3Desc": "將 App ID 和 App Secret 填入對應輸入框,點擊「連接測試」驗證憑證。成功後選擇同步範圍,在統計表中依次同步組織架構和用戶。", - "guideStep4Title": "配置事件訂閱(即時同步)", - "guideStep4Desc": "在飛書開放平台應用的「事件訂閱」頁面,設定請求地址(格式:https://你的域名/api/core/feishu-sync/callback),將此頁面產生的 Encrypt Key 和 Verification Token 填入飛書後台,訂閱通訊錄相關事件。", - "guideStep5Title": "啟用觸發事件", - "guideStep5Desc": "在「觸發事件」區域勾選需要自動同步的事件類型(同步組織、同步用戶),儲存配置。之後飛書通訊錄發生變更時將自動推送到系統進行增量同步。" -} diff --git a/web/apps/web-ele/src/locales/langs/zh-TW/file-manager.json b/web/apps/web-ele/src/locales/langs/zh-TW/file-manager.json deleted file mode 100644 index ed4f5d1..0000000 --- a/web/apps/web-ele/src/locales/langs/zh-TW/file-manager.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "myFiles": "我的檔案", - "fileManagement": "檔案管理", - "folderName": "資料夾名稱", - "newFolder": "新建資料夾", - "rename": "重新命名", - "name": "名稱", - "size": "大小", - "modifiedTime": "修改時間", - "actions": "操作", - "search": "搜尋...", - "listView": "列表檢視", - "gridView": "網格檢視", - "batchDelete": "大量刪除", - "upload": "上傳", - "uploadFile": "上傳檔案", - "uploadFolder": "上傳資料夾", - "open": "開啟", - "download": "下載", - "delete": "刪除", - "selectAll": "全選", - "noFiles": "暫無檔案", - "pleaseEnterName": "請輸入名稱", - "pleaseEnterFolderName": "請輸入資料夾名稱", - "renameSuccess": "重新命名成功", - "createSuccess": "建立成功", - "deleteSuccess": "刪除成功", - "deleteConfirm": "確定要刪除 {name} 嗎?", - "batchDeleteConfirm": "確定要刪除選中的 {count} 個項目嗎?", - "uploadSuccess": "成功上傳 {count} 個檔案", - "uploadFailed": "{count} 個檔案上傳失敗", - "uploadError": "上傳出錯", - "folderDownloadNotSupported": "暫不支援下載資料夾", - "downloadFailed": "下載失敗", - "previewFailed": "預覽失敗", - "previewNotSupported": "該檔案類型暫不支援預覽", - "previewRenderError": "檔案渲染失敗", - "filePreview": "檔案預覽", - "tip": "提示", - "cancel": "取消", - "confirm": "確定" -} diff --git a/web/apps/web-ele/src/locales/langs/zh-TW/form-manager.json b/web/apps/web-ele/src/locales/langs/zh-TW/form-manager.json deleted file mode 100644 index b5162b7..0000000 --- a/web/apps/web-ele/src/locales/langs/zh-TW/form-manager.json +++ /dev/null @@ -1,804 +0,0 @@ -{ - "form": "表單", - "name": "表單名稱", - "code": "表單編碼", - "application": "所屬應用", - "type": "表單類型", - "status": "狀態", - "description": "描述", - "createTime": "創建時間", - "updateTime": "更新時間", - "actions": "操作", - "showInMobile": "移動端顯示", - "showInMobileTip": "開啟後,該表單將在移動端工作台中顯示", - "icon": "表單圖標", - "iconBgColor": "圖標背景色", - "iconPreview": "預覽", - "iconBgColorPlaceholder": "輸入自定義顏色或漸變色", - "iconPlaceholder": "請選擇表單圖標", - "placeholder": { - "name": "請輸入表單名稱", - "code": "請輸入表單編碼", - "type": "請選擇表單類型", - "status": "請選擇狀態" - }, - "typeMap": { - "all": "全部", - "normal": "普通表單", - "workflow": "流程表單" - }, - "statusMap": { - "all": "全部", - "published": "已發佈", - "draft": "草稿" - }, - "create": "新建表單", - "batchDelete": "批量刪除", - "batchDeleteWithCount": "批量刪除 ({count})", - "deleteConfirm": "確定要刪除表單 \"{name}\" 嗎?", - "deleteConfirmTitle": "刪除確認", - "deleteConfirmMessage": "刪除表單後將執行以下操作:

1. 刪除表單對應的菜單
2. 刪除表單的API權限配置
3. 刪除表單的字段權限配置
4. 刪除表單的數據權限配置
5. 永久刪除表單元數據及設計配置

確定要刪除表單 \"{name}\" 嗎?", - "deleteSuccess": "已刪除表單: {name}", - "batchDeleteConfirm": "確定要刪除選中的 {count} 個表單嗎?", - "batchDeleteConfirmTitle": "批量刪除確認", - "batchDeleteSuccess": "已刪除 {count} 個表單", - "unpublishSuccess": "表單 \"{name}\" 已取消發佈", - "unpublishFailed": "取消發佈失敗", - "unpublishConfirmTitle": "取消發佈確認", - "unpublishConfirmMessage": "取消發佈後將執行以下操作:

1. 刪除表單對應的菜單
2. 刪除表單的API權限配置
3. 刪除表單的字段權限配置
4. 刪除表單的數據權限配置

確定要取消發佈嗎?", - "copyCodePlaceholder": "請輸入新表單編碼", - "copyTitle": "複製表單", - "copyCodeRule": "編碼只能包含字母、數字、下劃線和橫線", - "codeFormatError": "編碼必須以字母開頭,只能包含字母、數字和下劃線", - "copySuccess": "複製成功", - "preview": "預覽", - "publish": "發佈", - "unpublish": "取消發佈", - "copy": "複製", - "visit": "訪問表單", - "setAsHome": "設為首頁", - "setAsHomeTitle": "設為預設首頁", - "setAsHomeConfirm": "確定要將表單「{name}」設為預設首頁嗎?", - "setAsHomePath": "首頁路徑", - "setAsHomeTip": "設定後,用戶登入系統將預設跳轉到此表單頁面。", - "setAsHomeAppTip": "此表單屬於應用「{app}」,將更新該應用的首頁配置。", - "setHomeSuccess": "已設為預設首頁", - "setHomeFailed": "設定首頁失敗", - "more": "更多", - "design": "設計", - "editInfo": "編輯信息", - "saveSuccess": "表單保存成功", - "previewDialog": { - "title": "表單預覽", - "loadFailed": "加載表單配置失敗", - "verifySuccess": "驗證通過", - "realtimeData": "實時數據 (v-model):", - "noConfig": "暫無表單配置", - "close": "關閉", - "verifySubmit": "驗證提交", - "verifyFailed": "表單驗證失敗" - }, - "editor": { - "title": "在線開發", - "create": "創建表單", - "edit": "編輯表單", - "steps": { - "basic": "基礎信息", - "database": "數據庫設計", - "form": "表單設計", - "list": "列表設計", - "publish": "發佈表單" - }, - "placeholder": { - "remark": "請輸入表單說明" - }, - "validate": { - "title": "表單校驗未通過", - "warningTitle": "表單校驗警告", - "repairTip": "請修復以下問題後再繼續", - "warningTip": "以下問題不會阻止保存,但建議檢查確認", - "continueAnyway": "繼續操作", - "basic": "基礎信息驗證:名稱、編碼必填", - "database": "數據庫配置驗證:必須配置主表", - "incomplete": "表單配置不完整", - "perfectDesign": "請完善表單設計" - }, - "loadFailed": "加載數據失敗", - "createSuccess": "創建成功", - "save": "保存", - "saveSuccess": "保存成功", - "autoSave": { - "saving": "保存中...", - "saved": "已保存", - "unsaved": "未保存" - } - }, - "dataSource": { - "refresh": "刷新", - "refreshSuccess": "刷新成功", - "loading": "加載中...", - "mainTable": "主表", - "subTable": "從表", - "added": "已添加", - "fieldPreview": "字段預覽", - "noFields": "暫無字段信息", - "relationConfig": "表關聯配置", - "selectMainTip": "請先選擇主表", - "selectMainDesc": "在左側數據庫樹中展開到表節點,點擊【主表】按鈕設置主表。", - "addDatabase": "新增數據庫", - "refreshConn": "刷新連接", - "copyConnName": "複製連接名", - "addSchema": "新增Schema", - "addTable": "新增表", - "editDatabase": "編輯數據庫", - "refreshDatabase": "刷新數據庫", - "copyDatabaseName": "複製數據庫名", - "editSchema": "編輯Schema", - "refreshSchema": "刷新Schema", - "copySchemaName": "複製Schema名", - "viewFields": "查看字段", - "designTable": "設計表", - "setMainTable": "設為主表", - "addSubTable": "添加為從表", - "copyTableName": "複製表名", - "deleteTable": "刪除表", - "deleteTableConfirmTitle": "刪除確認", - "confirmDeleteTable": "確定要刪除表 \"{tableName}\" 嗎?此操作不可恢復!", - "deleteTableSuccess": "表刪除成功", - "deleteTableFailed": "刪除表失敗", - "inputDatabaseName": "請輸入數據庫名稱", - "databaseNameRule": "數據庫名稱只能包含字母、數字和下划線,且必須以字母或下划線開頭", - "databaseCreateSuccess": "數據庫 \"{name}\" 創建成功", - "databaseCreateFailed": "創建數據庫失敗", - "inputNewDatabaseName": "請輸入新的數據庫名稱", - "nameNotChanged": "名稱未變更", - "renameNotSupported": "數據庫重命名功能暫不支持,請手動操作", - "inputSchemaName": "請輸入Schema名稱", - "createSchema": "創建Schema", - "schemaNameRule": "Schema名稱只能包含字母、數字和下划線,且必須以字母或下划線開頭", - "schemaCreateSuccess": "Schema \"{name}\" 創建成功", - "schemaCreateFailed": "創建Schema失敗", - "inputNewSchemaName": "請輸入新的Schema名稱", - "schemaRenameSuccess": "Schema 已重命名為 \"{name}\"", - "schemaRenameFailed": "重命名Schema失敗", - "sqlServerRenameSchemaNotSupported": "SQL Server 不支持直接重命名Schema", - "loadConfigFailed": "加載數據庫配置失敗", - "loadDatabaseFailed": "加載數據庫失敗", - "loadSchemaFailed": "加載Schema失敗", - "loadTableFailed": "加載表列表失敗", - "loadNodeFailed": "加載節點數據失敗", - "nodeNotFound": "無法找到節點", - "refreshNodeSuccess": "刷新成功,展開節點查看最新數據", - "refreshNodeFailed": "刷新節點失敗", - "refreshFailed": "刷新失敗", - "copyToClipboard": "已複製到剪貼板", - "tableAlreadyAdded": "該表已添加", - "setMainSuccess": "已設置 {name} 為主表", - "addSubSuccess": "已添加從表 {name}", - "tableFieldsRefreshed": "表 {name} 的字段信息已更新", - "removeMainConfirm": "確定移除主表嗎?", - "removeSubConfirm": "確定移除此從表嗎?", - "removeMain": "移除主表", - "subTableCount": "共 {count} 個從表", - "tableName": "表名", - "tableNamePlaceholder": "請輸入表名", - "alias": "別名", - "aliasPlaceholder": "用於SQL查詢", - "fieldList": "字段列表 ({count})", - "fieldName": "字段名", - "fieldNamePlaceholder": "請輸入字段名", - "fieldType": "類型", - "fieldLength": "長度", - "fieldScale": "小數位", - "fieldComment": "注釋", - "fieldCommentPlaceholder": "請輸入字段注釋", - "schemaName": "Schema", - "schemaNamePlaceholder": "請輸入Schema名", - "nullable": "可空", - "isPrimaryKey": "主鍵", - "uniqueCheck": "唯一", - "addField": "添加字段", - "relationType": "關聯類型", - "oneToMany": "一對多", - "oneToOne": "一對一", - "foreignKeyField": "外鍵字段(從表)", - "relatedFieldMain": "關聯字段(主表)", - "selectForeignKey": "選擇外鍵字段", - "selectRelatedField": "選擇關聯字段", - "viewFieldList": "查看字段列表 ({count} 個字段)", - "noSubTables": "暫無從表", - "addSubTip": "在左側數據庫樹中點擊 + 按鈕添加從表", - "missingSystemFieldsTitle": "缺少系統字段", - "missingSystemFieldsMessage": "該表缺少數據權限所需的系統字段:

{fields}

如果不添加這些字段,數據權限功能將無法正常工作。

點擊【自動添加】將自動為表添加缺少的字段;
點擊【忽略並繼續】將跳過此檢查。", - "autoAddFields": "自動添加", - "ignoreAndContinue": "忽略並繼續", - "addSystemFieldsSuccess": "系統字段添加成功", - "addSystemFieldsFailed": "系統字段添加失敗", - "mainTableRequired": "請先配置主表", - "connectionUnavailable": "資料庫連線不可用,請檢查連線配置", - "mainTableNotFound": "主表 {table} 在目標連線中不存在", - "subTableNotFound": "從表 {table} 在目標連線中不存在", - "currentConnection": "當前連線", - "externalConnectionTip": "表單資料將寫入第三方資料庫連線,請確保表已在目標庫建立" - }, - "listDesign": { - "containerPage": "獨立頁面", - "title": "列表設計", - "queryTab": "查詢字段", - "listTab": "列表字段", - "propertyTab": "列表屬性", - "querySelectionTip": "勾選字段添加到查詢條件", - "listSelectionTip": "勾選字段添加到列表顯示", - "selectAll": "全選", - "noAvailableFields": "暫無可用字段,請先在表單設計中添加字段", - "tableProperties": "Table 屬性", - "showPagination": "顯示分頁", - "pageSize": "每頁條數", - "itemsPerPage": "{count} 條/頁", - "showIndex": "顯示序號列", - "showSelection": "顯示多選框", - "stripe": "斑馬紋", - "border": "邊框", - "size": "尺寸", - "sizeLarge": "大", - "sizeDefault": "中", - "sizeSmall": "小", - "tableHeight": "表格高度", - "adaptive": "自適應", - "dialogProperties": "Dialog 屬性", - "dialogWidth": "彈窗寬度", - "widthSmall": "小 (600px)", - "widthMedium": "中 (800px)", - "widthLarge": "大 (1000px)", - "widthExtraLarge": "超大 (1200px)", - "fullscreen": "全屏顯示", - "draggable": "可拖拽", - "closeOnClickModal": "點擊遮罩關閉", - "closeOnPressEscape": "ESC 關閉", - "pageProperties": "Page 屬性", - "showBackButton": "顯示返回按鈕", - "showBackButtonTip": "控制頁面左上角是否顯示返回列表按鈕", - "layoutRenderMode": "渲染模式", - "conditionRender": "條件渲染", - "routeRender": "路由渲染", - "conditionRenderTip": "在當前頁面內通過 v-if 切換顯示表單,不產生新路由", - "routeRenderTip": "跳轉到獨立路由頁面顯示表單,不顯示標籤頁", - "openInNewTab": "新開標籤頁", - "openInNewTabTip": "點擊新增、編輯、查看按鈕時是否在新標籤頁中打開表單頁面", - "buttonDisplay": "按鈕顯示", - "toolbarButtons": "列表頭部按鈕", - "rowActionButtons": "列表項操作按鈕", - "addBtn": "新增按鈕", - "editBtn": "編輯按鈕", - "deleteBtn": "刪除按鈕", - "viewBtn": "查看按鈕", - "exportBtn": "導出按鈕", - "importBtn": "導入按鈕", - "batchDeleteBtn": "批量刪除", - "startWorkflow": "發起流程", - "noWorkflowBound": "該表單未綁定任何流程", - "startWorkflowSuccess": "流程發起成功", - "startWorkflowFailed": "流程發起失敗", - "workflowTitleLabel": "流程標題", - "workflowTitlePlaceholder": "請輸入流程標題", - "workflowTitleRequired": "流程標題不能為空", - "formActionSettings": "表單操作設置", - "showConfirmButton": "顯示確認按鈕", - "showConfirmButtonTip": "關閉後,新增/編輯時不顯示確認按鈕", - "enableStartWorkflowOnAdd": "新增時可發起流程", - "enableStartWorkflowOnAddTip": "開啟後,在新增數據時會顯示「發起流程」按鈕", - "queryConfigTitle": "查詢字段配置", - "listConfigTitle": "列表字段配置", - "sort": "排序", - "displayName": "顯示名稱", - "fieldKey": "字段鍵值", - "queryType": "查詢類型", - "componentType": "組件類型", - "width": "寬度", - "defaultValue": "默認值", - "hidden": "隱藏", - "showTime": "時間", - "multiple": "多選", - "caseSensitive": "區分大小寫", - "actions": "操作", - "matchLike": "模糊匹配", - "matchEq": "精確匹配", - "matchRange": "範圍查詢", - "matchIn": "包含匹配", - "matchSpaceLikeAnd": "空格模糊且", - "matchSpaceLikeOr": "空格模糊或", - "matchSpaceEqAnd": "空格精確且", - "matchSpaceEqOr": "空格精確或", - "compInput": "輸入框", - "compSelect": "下拉框", - "compDate": "日期", - "compTime": "時間", - "compUser-select": "用戶選擇", - "compDept-select": "部門選擇", - "compRole-select": "角色選擇", - "compPost-select": "崗位選擇", - "compForm-select": "表單選擇", - "compTable-select": "表格選擇", - "compFile-select": "文件選擇", - "compImage-select": "圖片選擇", - "compRegion-select": "省市區選擇", - "compMoney-input": "金額輸入", - "compRich-text": "富文本編輯器", - "compCode-editor": "代碼編輯器", - "compFormula-input": "公式輸入", - "compCron-selector": "Cron表達式", - "compCurrent-user": "當前用戶", - "compCurrent-datetime": "當前時間", - "compCode-generator": "編碼生成器", - "compAi-image-ocr": "AI圖片識別", - "width18": "1/8 (3)", - "width16": "1/6 (4)", - "width14": "1/4 (6)", - "width13": "1/3 (8)", - "width12": "1/2 (12)", - "widthFull": "整行 (24)", - "none": "無", - "noQueryFields": "暫無查詢字段", - "selectQueryTip": "請在右側勾選需要查詢的字段", - "columnName": "列名", - "left": "居左", - "center": "居中", - "right": "居右", - "minWidth": "最小寬度", - "min": "最小", - "noFixed": "不凍結", - "fixedLeft": "左側", - "fixedRight": "右側", - "sortable": "可排序", - "resizable": "可調寬", - "overflowTooltip": "溢出提示", - "ellipsis": "省略號", - "fileImageDisplayHint": "圖片/簽名字段自動以縮圖顯示,無需文字類配置", - "showAsTag": "Tag顯示", - "tagType": "Tag類型:", - "tagDefault": "默認", - "tagSuccess": "成功", - "tagWarning": "警告", - "tagInfo": "信息", - "tagDanger": "危險", - "formatter": "格式化", - "formatDate": "日期", - "formatDateTime": "日期時間", - "formatMoney": "金額", - "formatPercent": "百分比", - "formatNumber": "數字", - "formatPattern": "模式", - "prefix": "前綴", - "suffix": "後綴", - "custom": "自定義", - "unitYuan": "元", - "unitGe": "個", - "unitCi": "次", - "unitDay": "天", - "unitHour": "小時", - "noListFields": "暫無列表字段", - "selectListTip": "請在右側勾選需要顯示的字段", - "defaultSortField": "預設排序欄位", - "selectSortField": "請選擇排序欄位", - "sortOrder": "排序方向", - "ascending": "升序", - "descending": "降序", - "addSortField": "添加排序欄位", - "defaultFilterConditions": "預設過濾條件", - "selectFilterField": "請選擇欄位", - "selectFilterOperator": "操作符", - "filterValue": "值", - "filterValuePlaceholder": "請輸入過濾值", - "addFilterCondition": "添加過濾條件", - "filterOperatorEq": "等於", - "filterOperatorNe": "不等於", - "filterOperatorGt": "大於", - "filterOperatorGte": "大於等於", - "filterOperatorLt": "小於", - "filterOperatorLte": "小於等於", - "filterOperatorLike": "包含", - "filterOperatorIn": "在列表中", - "filterOperatorNull": "為空", - "filterOperatorNotNull": "不為空", - "tableSummary": "表尾統計", - "showSummary": "顯示統計行", - "summaryText": "統計行首列文字", - "summaryTextPlaceholder": "合計", - "summaryColumnTip": "在列表欄位配置中為數值類型欄位開啟統計", - "treeConfig": "樹形表格", - "enableTree": "啟用樹形表格", - "parentField": "父節點欄位", - "lazyLoad": "懶加載", - "lazyLoadOnTip": "按需加載子節點", - "lazyLoadOffTip": "一次加載全部數據", - "defaultExpandAll": "預設展開所有", - "indent": "縮進", - "checkStrictly": "父子不關聯", - "enableSummary": "統計", - "summaryType": "類型", - "summarySum": "求和", - "summaryAvg": "平均", - "summaryCount": "計數", - "summaryMax": "最大", - "summaryMin": "最小", - "summaryPrecision": "精度", - "sortFrontend": "前端", - "sortBackend": "後端", - "filterable": "過濾", - "filterInput": "輸入", - "filterSelect": "選擇", - "filterDateRange": "日期範圍", - "filterMultiple": "多選", - "dialogFilter": "彈窗選擇", - "subTableButtons": "子表操作按鈕", - "subTableButtonsTip": "配置子表獨立表單的操作按鈕,點擊後可在彈窗/抽屜/頁面中管理子表數據", - "addSubTableButton": "添加子表按鈕", - "noSubTableButtons": "暫無子表操作按鈕", - "subTableButtonText": "按鈕文本", - "selectSubTable": "選擇子表", - "selectSubTablePlaceholder": "請選擇要關聯的子表", - "selectSubForm": "選擇子表單", - "selectSubFormPlaceholder": "請選擇子表對應的獨立表單", - "foreignKeyField": "外鍵字段", - "foreignKeyFieldPlaceholder": "自動從子表配置獲取", - "buttonStyle": "按鈕樣式", - "subFormContainerType": "容器類型", - "drawerSize": "抽屜尺寸", - "drawerDirection": "打開方向", - "customButtons": "自定義按鈕", - "addCustomButton": "添加自定義按鈕", - "noCustomButtons": "暫無自定義按鈕", - "defaultButtonName": "自定義按鈕", - "buttonName": "按鈕名稱", - "buttonType": "按鈕類型", - "buttonPosition": "按鈕位置", - "toolbar": "工具欄", - "tools": "工具欄右側", - "row": "行操作", - "iconAndDisplay": "圖標和顯示", - "iconOnly": "只顯示圖標", - "actionType": "操作類型", - "actionLink": "打開鏈接", - "actionApi": "調用接口", - "actionEvent": "觸發事件", - "actionPage": "打開頁面", - "actionGenerateDocument": "生成單據", - "bindDocumentTemplates": "綁定單據模板", - "bindDocumentTemplatesPlaceholder": "選擇要生成的單據模板(可多選)", - "bindDocumentTemplatesHint": "不選擇則生成該表單下全部已發布單據模板;選擇後僅生成所選模板", - "pageCode": "頁面編碼", - "pageCodePlaceholder": "選擇要打開的頁面", - "pageCodeRequired": "請選擇頁面", - "dialogTitle": "彈窗標題", - "dialogTitlePlaceholder": "支持變量:{id}、{name}等", - "pageDialogWidth": "彈窗寬度", - "pageDialogFullscreen": "全屏顯示", - "pageView": "頁面查看", - "pageLoadFailed": "加載頁面失敗", - "pageNoConfig": "暫無頁面配置", - "linkUrl": "鏈接地址", - "linkUrlPlaceholder": "支持變量:{id}、{field}等", - "apiUrl": "接口地址", - "apiUrlPlaceholder": "/api/xxx,支持變量:{id}", - "apiMethod": "請求方法", - "confirmMessage": "確認提示", - "confirmMessagePlaceholder": "執行前顯示的確認消息", - "eventName": "事件名稱", - "eventNamePlaceholder": "自定義事件名稱", - "buttonIcon": "按鈕圖標", - "buttonIconPlaceholder": "lucide:icon-name", - "showCondition": "顯示條件", - "showConditionPlaceholder": "row.status === 'active'", - "permissionCode": "權限編碼", - "permissionCodePlaceholder": "可選,用於權限控制", - "styleOptions": "樣式選項", - "plain": "樸素按鈕", - "round": "圓角按鈕", - "circle": "圓形按鈕", - "textBtn": "文本按鈕", - "linkBtn": "鏈接按鈕", - "buttonSize": "按鈕尺寸", - "stateControl": "狀態控制", - "disabled": "禁用", - "disabledCondition": "禁用條件", - "disabledConditionPlaceholder": "row.status === 'completed'", - "tooltip": "提示文本", - "tooltipPlaceholder": "鼠標懸停時顯示的提示", - "badge": "徽標", - "badgePlaceholder": "數字或文本,支持變量", - "badgeType": "徽標類型", - "confirmDialog": "確認對話框", - "confirmTitle": "確認標題", - "confirmTitlePlaceholder": "確認操作", - "messageConfig": "消息配置", - "successMessage": "成功消息", - "successMessagePlaceholder": "操作成功", - "errorMessage": "失敗消息", - "errorMessagePlaceholder": "操作失敗", - "reloadAfterSuccess": "成功後刷新列表", - "actionAgent": "Agent對話", - "agentId": "Agent ID", - "agentIdPlaceholder": "Agent的唯一標識", - "agentCode": "Agent編碼", - "agentCodePlaceholder": "Agent的編碼(備選)", - "initialMessage": "初始消息", - "initialMessagePlaceholder": "打開對話時的初始消息,支持變量如{name}", - "includeRowData": "包含行數據", - "autoSend": "自動發送初始消息", - "listType": "列表類型", - "cardProperties": "Card 屬性", - "cardColumns": "每行顯示數量", - "cardColumnsOption": "{count} 列", - "cardGap": "卡片間距 (px)", - "cardShadow": "卡片陰影", - "shadowAlways": "始終顯示", - "shadowHover": "懸停顯示", - "shadowNever": "不顯示", - "cardFieldsConfig": "卡片字段配置", - "cardFieldsTip": "將字段拖拽到卡片對應區域", - "cardPreview": "卡片預覽", - "cardFieldProperties": "字段屬性", - "fieldProperties": "字段屬性", - "showDisplayName": "顯示名稱", - "showRelationField": "顯示關聯字段", - "selectDisplayField": "選擇顯示字段", - "selectDisplayFieldPlaceholder": "請選擇要顯示的字段", - "loadingFields": "加載字段中...", - "showAvatar": "顯示頭像", - "showVirtualValue": "顯示關聯值", - "cardAreaIcon": "圖標", - "cardAreaTitle": "標題", - "cardAreaSubtitle": "副標題", - "cardAreaDescription": "描述", - "cardAreaTags": "標籤", - "cardAreaFooterLeft": "底部左側", - "cardAreaFooterRight": "底部右側", - "cardAreaEmpty": "拖入字段", - "cardAreaRequired": "必填", - "cardAreaMaxTags": "最多 {count} 個", - "cardQueryLimit": "卡片模式下查詢字段最多 {count} 個", - "noCardFields": "暫無卡片字段配置", - "selectCardFieldTip": "點擊卡片區域或從右側拖入字段", - "useCursorPagination": "游標分頁", - "useCursorPaginationTip": "適用於大數據量場景,開啟後不顯示總條數,僅支持上一頁/下一頁翻頁", - "prevPage": "上一頁", - "nextPage": "下一頁", - "noMoreData": "沒有更多數據" - }, - "formRender": { - "subTableData": "子表數據", - "loadSubFormFailed": "加載子表單失敗", - "loadDataFailed": "加載數據失敗", - "validateFailed": "請檢查表單填寫是否正確" - }, - "publishDialog": { - "title": "表單發佈", - "settings": "發佈設置", - "allowGuest": "允許訪客填寫", - "success": "發佈成功", - "failed": "發佈失敗", - "menuConfig": "菜單配置", - "menuName": "菜單名稱", - "parentMenu": "上級菜單", - "parentMenuPlaceholder": "請選擇上級菜單(不選則為頂級)", - "menuIcon": "菜單圖標", - "routeInfo": "路由信息", - "accessPath": "訪問路徑", - "confirmPublish": "確認發佈" - }, - "validator": { - "required": "不能為空", - "formatInvalid": "格式不正確", - "tooLong": "長度超出限制", - "notBound": "未綁定數據字段", - "duplicateSubField": "從表 \"{table}\" 中字段名 \"{field}\" 重複使用", - "duplicateField": "字段名 \"{field}\" 重複使用", - "invalidSubTable": "無效的從表 \"{table}\"", - "fieldNotInSubTable": "字段 \"{field}\" 不存在於從表 \"{table}\" 中", - "fieldNotInMainTable": "字段 \"{field}\" 不存在於主表中", - "fileMultipleRequiresJson": "字段 \"{field}\" 配置為多選文件/圖片,數據庫類型必須為 JSON,當前類型為 {currentType}", - "fileSingleRequiresVarchar": "字段 \"{field}\" 配置為單選文件/圖片,數據庫類型必須為 VARCHAR,當前類型為 {currentType}", - "regionRequiresJson": "字段 \"{field}\" 使用省市區組件,數據庫類型必須為 JSON,當前類型為 {currentType}", - "numericFieldRequiresNumericComponent": "字段 \"{field}\" 的數據庫類型為 {fieldType}(數字類型),不能使用 {componentType} 組件,請使用數字輸入、金額輸入、滑塊、評分或公式計算等數字類型組件", - "stringFieldCannotUseDateComponent": "字段 \"{field}\" 的數據庫類型為 {fieldType}(字符串類型),不能使用 {componentType} 組件,日期時間組件需要對應的日期時間類型字段", - "dateTimeFieldRequiresDateComponent": "字段 \"{field}\" 的數據庫類型為 {fieldType}(日期時間類型),不能使用 {componentType} 組件,請使用日期選擇、時間選擇或創建時間等日期時間組件", - "booleanFieldRequiresSwitchComponent": "字段 \"{field}\" 的數據庫類型為 {fieldType}(布爾類型),不能使用 {componentType} 組件,請使用開關、單選框或下拉選擇等組件", - "jsonFieldRequiresJsonComponent": "字段 \"{field}\" 的數據庫類型為 {fieldType}(JSON類型),不能使用 {componentType} 組件,請使用多選框、級聯選擇、樹形選擇、文件選擇等支持JSON的組件", - "reverseAutoFillRequiresMultiple": "字段 \"{field}\" 啟用了關聯自動填充,必須開啟多選", - "reverseAutoFillNoFormCode": "字段 \"{field}\" 啟用了關聯自動填充,但未配置關聯表單", - "reverseAutoFillNoSourceField": "字段 \"{field}\" 啟用了關聯自動填充,但未配置源字段", - "reverseAutoFillNoTargetField": "字段 \"{field}\" 啟用了關聯自動填充,但未配置關聯表單過濾字段", - "reverseAutoFillSelfSource": "字段 \"{field}\" 關聯自動填充的源字段不能是自身", - "reverseAutoFillConflictsValueLink": "字段 \"{field}\" 已啟用關聯自動填充,不能同時啟用值關聯", - "unknown": "未知", - "columnNoField": "列未綁定字段", - "unknownColumn": "未知列", - "columnFieldNotExist": "列綁定的字段 \"{field}\" 不存在於表單或數據庫中", - "queryFieldNoField": "查詢字段未綁定字段", - "unknownQueryField": "未知查詢字段", - "queryFieldNotExist": "查詢字段 \"{field}\" 不存在於表單或數據庫中", - "subTableButton": "子表按鈕", - "subTableButtonNoText": "子表按鈕未設置按鈕文本", - "subTableButtonNoFormCode": "子表按鈕未設置子表單編碼", - "subTableButtonNoForeignKey": "子表按鈕未設置外鍵字段", - "customButton": "自定義按鈕", - "customButtonNoName": "自定義按鈕未設置名稱", - "customButtonLinkNoUrl": "鏈接類型按鈕未設置跳轉地址", - "customButtonApiNoUrl": "API類型按鈕未設置接口地址", - "customButtonEventNoName": "事件類型按鈕未設置事件名稱" - }, - "generateDocument": { - "title": "生成單據", - "template": "單據模板", - "selectTemplate": "請選擇單據模板", - "selectTemplatePlaceholder": "請選擇要生成的單據模板", - "description": "模板說明", - "noTemplates": "該表單未綁定任何已發佈的單據模板", - "generatedDocuments": "已生成單據", - "generate": "生成", - "generateSuccess": "單據生成成功", - "generateFailed": "單據生成失敗", - "preview": "預覽", - "download": "下載", - "buttonLabel": "生成單據", - "buttonTooltip": "根據此數據生成單據", - "positionHint": "生成單據按鈕只能放在行操作位置,因為需要基於具體的表單數據生成", - "autoRefresh": "自動刷新", - "autoRefreshHint": "開啟後,每次點擊按鈕都會按最新表單數據重新生成單據;關閉則優先展示已生成的單據" - }, - "apiInfo": { - "title": "API 介面資訊", - "description": "當前表單提供以下 API 介面,所有介面均需要認證令牌。", - "formCode": "表單編碼", - "basePrefix": "基礎前綴", - "authRequired": "需要認證", - "permissions": "權限查詢", - "getPermissions": "獲取操作權限", - "getPermissionsDesc": "獲取當前用戶對該表單的操作權限(查看/新增/編輯/刪除/匯出/匯入)", - "getFieldPermissions": "獲取欄位權限", - "getFieldPermissionsDesc": "獲取當前用戶對該表單各欄位的讀寫權限", - "dataOperations": "資料操作", - "getList": "查詢資料列表", - "getListDesc": "分頁查詢表單資料,支援排序、搜尋和過濾", - "getDetail": "獲取資料詳情", - "getDetailDesc": "獲取單條資料詳情,包含子表資料", - "createData": "新增資料", - "createDataDesc": "新增一條表單資料,支援同時寫入子表", - "updateData": "更新資料", - "updateDataDesc": "更新指定記錄,支援同時更新子表", - "deleteData": "刪除資料", - "deleteDataDesc": "刪除指定記錄及其關聯子表資料", - "batchDelete": "批量刪除", - "batchDeleteDesc": "批量刪除多條記錄及其關聯子表資料", - "auxiliary": "輔助介面", - "getTreeChildren": "獲取樹形子節點", - "getTreeChildrenDesc": "樹形表格懶加載時獲取子節點資料", - "getFieldValues": "獲取欄位唯一值", - "getFieldValuesDesc": "獲取指定欄位的唯一值列表,用於過濾選項", - "checkUnique": "唯一性檢查", - "checkUniqueDesc": "檢查指定欄位值是否唯一", - "importExport": "匯入匯出", - "exportExcel": "匯出 Excel", - "exportExcelDesc": "匯出表單資料為 Excel 檔案,支援欄位選擇和子表匯出", - "importTemplate": "下載匯入模板", - "importTemplateDesc": "下載 Excel 匯入模板", - "importExcel": "匯入 Excel", - "importExcelDesc": "從 Excel 檔案匯入資料,支援追加和覆蓋模式", - "request": "請求", - "response": "回應", - "pathParams": "路徑參數", - "queryParams": "查詢參數", - "requestBody": "請求體", - "noParams": "無參數", - "copyPath": "複製路徑", - "copiedSuccess": "已複製到剪貼板", - "formFields": "表單欄位參考" - }, - "formData": { - "import": { - "title": "匯入資料", - "modeTitle": "選擇匯入模式", - "appendMode": "追加模式", - "appendModeDesc": "保留現有資料,追加匯入新資料", - "overwriteMode": "覆蓋模式", - "overwriteModeDesc": "清空現有資料,重新匯入全部資料", - "overwriteWarning": "覆蓋模式將刪除表中所有現有資料,此操作不可恢復!", - "dataHandling": "資料處理方式", - "insertOnly": "僅新增資料", - "insertOnlyDesc": "將Excel中的資料全部追加為表格的新資料", - "updateOnly": "僅更新資料", - "updateOnlyDesc": "透過指定欄位找到表格的所有已有資料,用Excel中的資料更新對應資料,不會新增任何資料", - "upsert": "更新和新增資料", - "upsertDesc": "更新和新增資料用Excel中的資料更新表格的所有已有資料,當透過指定欄位找不到已有資料時,會新增資料", - "matchField": "匹配欄位", - "matchFieldPlaceholder": "選擇用於匹配已有資料的欄位", - "matchFieldRequired": "更新模式下需要選擇匹配欄位", - "updatedCount": "條更新成功", - "insertedCount": "條新增成功", - "skippedCount": "條已跳過", - "selectFile": "選擇檔案", - "dragOrClick": "拖曳檔案到此處或點擊上傳", - "onlyXlsx": "僅支援 .xlsx 格式檔案", - "downloadTemplate": "下載匯入模板", - "validateAndUpload": "驗證並上傳", - "validating": "正在驗證資料...", - "importing": "正在匯入資料...", - "passCount": "條驗證通過", - "failCount": "條驗證失敗", - "importedCount": "條匯入成功", - "errorList": "錯誤詳情", - "rowNumber": "行號", - "errorMsg": "錯誤訊息", - "allPassed": "所有資料驗證通過,可以開始匯入", - "importSuccess": "資料匯入完成", - "reselect": "重新選擇", - "confirmImport": "確認匯入" - } - }, - "importExport": { - "export": "匯出配置", - "import": "匯入配置", - "batchExport": "批量匯出", - "exportSuccess": "表單配置已匯出", - "exportFailed": "匯出失敗", - "importTitle": "匯入表單配置", - "selectFile": "選擇檔案", - "dragOrClick": "拖曳 JSON 檔案到此處或點擊上傳", - "dragOrClickMulti": "支援選擇多個檔案批量匯入", - "onlyJson": "僅支持 .json 格式檔案", - "fileParseError": "檔案解析失敗,請確認檔案格式正確", - "checking": "正在檢查...", - "checkResult": "檢查結果", - "codeConflict": "表單編碼已存在", - "codeConflictTip": "請修改編碼後再匯入", - "newCode": "新編碼", - "newCodePlaceholder": "請輸入新的表單編碼", - "tableStatus": "資料庫表狀態", - "mainTable": "主表", - "subTable": "子表", - "schema": "Schema", - "tableExists": "已存在", - "tableNotExists": "不存在", - "hasDdl": "有 DDL", - "noDdl": "無 DDL", - "autoCreateTables": "自動建立不存在的表", - "autoCreateTablesTip": "匯入時將根據匯出的 DDL 自動建立不存在的資料庫表", - "createSchemaIfNotExists": "新建 Schema(不存在時)", - "createSchemaIfNotExistsTip": "匯入前自動建立設定中的目標 Schema(僅 PostgreSQL / SQL Server)", - "cannotAutoCreate": "部分表不存在且無 DDL,無法自動建立", - "crossDialectAutoCreate": "匯出庫類型({source})與目標連線({target})不一致,無法自動建表,請使用相同引擎或手工建表", - "importSuccess": "表單配置匯入成功", - "importFailed": "匯入失敗", - "confirmImport": "確認匯入", - "formInfo": "表單資訊", - "formName": "表單名稱", - "formCode": "表單編碼", - "formType": "表單類型", - "dbConfig": "資料庫配置", - "mainTableName": "主表名", - "fieldCount": "欄位數", - "subTableCount": "子表數", - "appTip": "匯入的表單將歸屬到目前應用", - "tableExistsRename": "表已存在,可使用新表名和Schema建表", - "newTableName": "新表名", - "newTableNamePlaceholder": "請輸入新的表名", - "selectSchema": "選擇 Schema", - "selectSchemaPlaceholder": "請選擇目標 Schema", - "batchImportTitle": "批量匯入表單配置", - "batchImportCount": "共 {count} 個表單", - "batchImportProgress": "正在匯入 {current}/{total}...", - "batchImportSuccess": "批量匯入完成,成功 {success} 個,失敗 {fail} 個", - "batchImportItem": "第 {index} 個", - "batchNext": "下一個", - "batchSkip": "跳過", - "batchSkipped": "已跳過", - "batchConfirmAndNext": "確認匯入並下一個", - "batchImportAll": "匯入全部", - "batchImporting": "正在匯入...", - "checkFailed": "檢查失敗", - "noSelection": "請先選擇要匯出的表單", - "batchExportProgress": "正在匯出第 {current}/{total} 個...", - "batchExportDone": "批量匯出完成,成功 {success} 個,失敗 {fail} 個", - "reselect": "重新選擇" - } -} diff --git a/web/apps/web-ele/src/locales/langs/zh-TW/loginLog.json b/web/apps/web-ele/src/locales/langs/zh-TW/loginLog.json deleted file mode 100644 index 2cbab3c..0000000 --- a/web/apps/web-ele/src/locales/langs/zh-TW/loginLog.json +++ /dev/null @@ -1,69 +0,0 @@ -{ - "name": "登錄日誌", - "title": "登錄日誌", - "username": "用戶名", - "userId": "用戶ID", - "status": "登錄狀態", - "loginType": "登錄方式", - "passwordLogin": "密碼登錄", - "codeLogin": "驗證碼登錄", - "qrcodeLogin": "二維碼登錄", - "wechatLogin": "微信", - "microsoftLogin": "微軟", - "dingtalkLogin": "釘釘", - "feishuLogin": "飛書", - "statusSuccess": "成功", - "statusFailed": "失敗", - "failureReason": "失敗原因", - "failureReasonUnknown": "未知錯誤", - "failureReasonUserNotExist": "用戶不存在", - "failureReasonPasswordError": "密碼錯誤", - "failureReasonUserDisabled": "用戶已禁用", - "failureReasonUserLocked": "用戶已鎖定", - "failureReasonUserInactive": "用戶不激活", - "failureReasonAccountAbnormal": "賬戶異常", - "failureReasonOther": "其他錯誤", - "failureMessage": "失敗信息", - "loginIp": "登錄IP", - "ipLocation": "IP屬地", - "userAgent": "用戶代理", - "browserType": "瀏覽器", - "osType": "操作系統", - "deviceType": "設備類型", - "deviceTypeDesktop": "桌面設備", - "deviceTypeMobile": "移動設備", - "deviceTypeTablet": "平板設備", - "deviceTypeOther": "其他設備", - "duration": "登錄時長", - "durationSeconds": "登錄時長(秒)", - "sessionId": "會話ID", - "remark": "備註", - "loginTime": "登錄時間", - "createTime": "創建時間", - "operation": "操作", - "detail": "詳情", - "detailTitle": "登錄日誌詳情", - "batchDelete": "批量刪除", - "batchDeleteTitle": "批量刪除登錄日誌", - "batchDeleteConfirm": "確定要刪除選中的 {0} 條登錄日誌嗎?涉及用戶:{1}", - "deleteConfirm": "確定要刪除用戶 {0} 的這條登錄日誌嗎?", - "deleteSuccess": "刪除成功", - "deleteError": "刪除失敗", - "selectLogsToDelete": "請選擇要刪除的日誌", - "getDetailError": "獲取登錄日誌詳情失敗", - "noData": "暫無數據", - "searchPlaceholder": "請輸入{0}", - "selectPlaceholder": "請選擇{0}", - "selectStatus": "請選擇登錄狀態", - "selectLoginType": "請選擇登錄方式", - "selectFailureReason": "請選擇失敗原因", - "selectDeviceType": "請選擇設備類型", - "startTime": "開始時間", - "endTime": "結束時間", - "selectStartTime": "請選擇開始時間", - "selectEndTime": "請選擇結束時間", - "formatHours": "{0}小時", - "formatMinutes": "{0}分鐘", - "formatSeconds": "{0}秒", - "formatZeroSeconds": "0秒" -} diff --git a/web/apps/web-ele/src/locales/langs/zh-TW/menu-title.json b/web/apps/web-ele/src/locales/langs/zh-TW/menu-title.json deleted file mode 100644 index 88ff9e3..0000000 --- a/web/apps/web-ele/src/locales/langs/zh-TW/menu-title.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "overview": "概覽", - "analytics": "分析頁", - "workspace": "工作台", - "home": "首頁", - "systemManagement": "系統管理", - "userManagement": "用戶管理", - "departmentManagement": "部門管理", - "organizationChart": "組織架構", - "permissionManagement": "API管理", - "menuManagement": "菜單管理", - "positionManagement": "崗位管理", - "roleManagement": "角色權限", - "userCenter": "用戶中心", - "accountSettings": "賬號設置", - "loginLog": "登錄日誌", - "databaseManagement": "數據庫管理", - "dbManagement": "DB管理", - "databaseConnection": "資料庫連接", - "redisManagement": "Redis管理", - "dataSource": "數據源", - "systemTools": "系統工具", - "fileManagement": "文件管理", - "dictionaryManagement": "字典管理", - "scheduledTasks": "定時任務", - "systemMonitoring": "系統監控", - "redisMonitoring": "Redis監控", - "serverMonitoring": "Server監控", - "databaseMonitoring": "數據庫監控", - "contractManagement": "合同管理", - "contractList": "合同列表", - "templateManagement": "模板管理", - "crowdUsers": "眾籌用戶", - "onlineDevelopment": "在線開發", - "workflowManagement": "流程管理", - "workflowInstanceManagement": "流程實例管理", - "formManagement": "表單管理", - "pageManagement": "頁面管理", - "reportManagement": "報表管理", - "approvalProcess": "審批流程", - "myTasks": "我的已辦", - "initiatedProcesses": "發起流程", - "myPending": "我的待辦", - "myInitiated": "我發起的", - "ccToMe": "抄送我的", - "messageCenter": "消息中心", - "announcementList": "公告列表", - "announcementManagement": "公告管理", - "messageList": "消息列表", - "dataScreen": "數據大屏", - "screenManagement": "大屏管理", - "aiPlatform": "AI 平台", - "workflowOrchestration": "流程編排", - "workflowRunHistory": "執行歷史", - "aiAgent": "智能體", - "knowledgeBase": "知識庫", - "controlCenter": "控制中心", - "applicationManagement": "應用管理", - "startChat": "開始聊天", - "uiConfig": "樣式配置" -} diff --git a/web/apps/web-ele/src/locales/langs/zh-TW/menu.json b/web/apps/web-ele/src/locales/langs/zh-TW/menu.json deleted file mode 100644 index c6e4c09..0000000 --- a/web/apps/web-ele/src/locales/langs/zh-TW/menu.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "selectMenu": "請選擇一個菜單", - "addChildMenu": "新建子菜單", - "deleteMenu": "刪除", - "searchFailed": "搜索菜單失敗", - "refreshFailed": "刷新節點失敗", - "menuDetail": "菜單詳情", - "title": "菜單管理", - "name": "菜單管理", - "menuName": "菜單名稱", - "menuTitle": "菜單標題", - "parent": "父級菜單", - "path": "菜單路徑", - "activePath": "活躍路徑", - "activePathHelp": "高亮菜單的路徑,用於解決路由路徑和菜單高亮不一致的問題", - "activePathMustExist": "活躍路徑必須是一個存在的菜單路徑", - "type": "菜單類型", - "typeCatalog": "目錄", - "typeMenu": "菜單", - "typeButton": "按鈕", - "typeEmbedded": "內嵌", - "typeLink": "外鏈", - "typeOnlineForm": "在線表單", - "typeOnlinePage": "在線頁面", - "typeOnlineReport": "在線報表", - "reportCode": "報表編碼", - "typeAgent": "智能體", - "formCode": "表單編碼", - "agentCode": "智能體編碼", - "pageCode": "頁面編碼", - "component": "組件", - "componentPath": "組件路徑", - "icon": "菜單圖標", - "activeIcon": "活躍圖標", - "status": "狀態", - "authCode": "權限編碼", - "linkSrc": "鏈接地址", - "operation": "操作", - "advancedSettings": "高級設置", - "keepAlive": "KeepAlive 緩存", - "affixTab": "固定標簽頁", - "hideInMenu": "隱藏菜單", - "hideChildrenInMenu": "隱藏子菜單", - "hideInBreadcrumb": "隱藏麵包屑", - "hideInTab": "隱藏標簽頁", - "noBasicLayout": "無基礎佈局(全屏顯示)", - "badgeType": { - "title": "Badge 類型", - "dot": "點", - "normal": "數字" - }, - "badge": "Badge 內容", - "badgeVariants": "Badge 樣式", - "order": "排序", - "applicationId": "所屬應用", - "applicationIdHelp": "選擇菜單所屬的應用,留空表示主應用菜單", - "fullPathKey": "完整路徑作為Key", - "fullPathKeyHelp": "設為「否」時,路徑參數變化不會刷新組件(適用於帶動態參數的頁面)", - "isSystem": "系統菜單", - "isSystemHelp": "系統菜單在所有應用(主應用和子應用)中都可見", - "appMenu": "應用菜單", - "systemMenu": "系統菜單" -} diff --git a/web/apps/web-ele/src/locales/langs/zh-TW/message.json b/web/apps/web-ele/src/locales/langs/zh-TW/message.json deleted file mode 100644 index 90f58e9..0000000 --- a/web/apps/web-ele/src/locales/langs/zh-TW/message.json +++ /dev/null @@ -1,90 +0,0 @@ -{ - "title": "消息中心", - "type": "類型", - "msgTitle": "標題", - "content": "內容", - "time": "時間", - "actions": "操作", - "status": "狀態", - "typeMap": { - "all": "全部", - "system": "系統通知", - "workflow": "工作流", - "todo": "待辦", - "announcement": "公告" - }, - "statusMap": { - "all": "全部", - "unread": "未讀", - "read": "已讀" - }, - "unreadCount": "{count} 條未讀", - "markAllRead": "全部已讀", - "clearRead": "清空已讀", - "markRead": "已讀", - "delete": "刪除", - "markReadSuccess": "已標記為已讀", - "markAllReadSuccess": "已全部標記為已讀", - "markReadFailed": "標記已讀失敗", - "markAllReadConfirm": "確定將所有消息標記為已讀嗎?", - "markAllReadConfirmTitle": "全部已讀", - "deleteConfirm": "確定刪除該消息嗎?", - "deleteConfirmTitle": "刪除確認", - "deleteSuccess": "刪除成功", - "clearReadConfirm": "確定清空所有已讀消息嗎?", - "clearReadConfirmTitle": "清空確認", - "clearReadSuccess": "清空成功", - "loadUnreadFailed": "加載未讀數量失敗", - "keywordPlaceholder": "搜索消息", - "selectHint": "請選擇一條消息查看", - "detailTitle": "消息詳情", - "emptyList": "暫無消息", - "loadingMore": "加載中...", - "noMore": "沒有更多了", - "noContent": "暂无内容", - "noData": "暂無數據", - "sender": "發送者:", - "send": { - "button": "發送消息", - "title": "發送消息", - "recipient": "接收人", - "recipientPlaceholder": "請選擇接收人", - "msgTitle": "消息標題", - "msgTitlePlaceholder": "請輸入消息標題", - "msgType": "消息類型", - "content": "消息內容", - "contentPlaceholder": "請輸入消息內容", - "channels": "發送渠道", - "channelSite": "站內信", - "channelEmail": "郵件", - "channelDingtalk": "釘釘", - "channelFeishu": "飛書", - "channelWechat": "企微", - "channelWechatMp": "微信公眾號", - "channelDingtalkTodo": "釘釘待辦", - "recipientRequired": "請選擇接收人", - "titleRequired": "請輸入消息標題", - "contentRequired": "請輸入消息內容", - "success": "消息發送成功", - "failed": "消息發送失敗" - }, - "drawer": { - "title": "消息中心", - "messageTab": "消息", - "announcementTab": "公告", - "markAllRead": "全部已讀", - "clearRead": "清空已讀", - "noMessages": "暫無消息", - "noAnnouncements": "\u66ab\u7121\u516c\u544a", - "pinned": "置頂", - "urgent": "緊急", - "important": "重要", - "justNow": "剛剛", - "minutesAgo": "{count}分鐘前", - "hoursAgo": "{count}小時前", - "daysAgo": "{count}天前", - "chatTab": "聊天", - "noChats": "暫無未讀聊天", - "unreadMessages": "{count} 條未讀" - } -} diff --git a/web/apps/web-ele/src/locales/langs/zh-TW/org-chart.json b/web/apps/web-ele/src/locales/langs/zh-TW/org-chart.json deleted file mode 100644 index ad75391..0000000 --- a/web/apps/web-ele/src/locales/langs/zh-TW/org-chart.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "orgChart": { - "title": "組織架構", - "description": "點擊節點展開或收起下屬成員", - "empty": "暫無組織架構資料", - "focusMode": "切換聚焦模式", - "expandMode": "切換展開模式", - "showAll": "顯示全部同級" - } -} diff --git a/web/apps/web-ele/src/locales/langs/zh-TW/page-manager.json b/web/apps/web-ele/src/locales/langs/zh-TW/page-manager.json deleted file mode 100644 index 4f9ef1c..0000000 --- a/web/apps/web-ele/src/locales/langs/zh-TW/page-manager.json +++ /dev/null @@ -1,126 +0,0 @@ -{ - "applicationName": "所屬應用", - "name": "頁面名稱", - "code": "頁面編碼", - "status": "狀態", - "description": "描述", - "createTime": "創建時間", - "updateTime": "更新時間", - "actions": "操作", - "placeholder": { - "name": "請輸入頁面名稱", - "code": "請輸入頁面編碼", - "status": "請選擇狀態", - "remark": "請輸入表單說明", - "category": "請選擇分類", - "description": "請輸入頁面說明" - }, - "categoryMap": { - "dashboard": "儀表盤", - "portal": "門戶頁面", - "databoard": "數據看板", - "other": "其他" - }, - "statusMap": { - "all": "全部", - "published": "已發佈", - "draft": "草稿" - }, - "create": "新建頁面", - "batchDelete": "批量刪除", - "batchDeleteWithCount": "批量刪除 ({count})", - "deleteConfirm": "確定要刪除頁面 \"{name}\" 嗎?", - "deleteConfirmTitle": "刪除確認", - "deleteSuccess": "已刪除頁面: {name}", - "batchDeleteConfirm": "確定要刪除選中的 {count} 個頁面嗎?", - "batchDeleteConfirmTitle": "批量刪除確認", - "batchDeleteSuccess": "已刪除 {count} 個頁面", - "unpublishSuccess": "頁面 \"{name}\" 已取消發佈", - "unpublishFailed": "取消發佈失敗", - "copyCodePlaceholder": "請輸入新頁面編碼", - "copyTitle": "複製頁面", - "copyCodeRule": "編碼只能包含字母、數字、下劃線和橫線", - "codeFormatError": "編碼必須以字母開頭,只能包含字母、數字和下劃線", - "copySuccess": "複製成功", - "design": "設計", - "editInfo": "編輯信息", - "saveSuccess": "頁面保存成功", - "preview": "預覽", - "publish": "發佈", - "unpublish": "取消發佈", - "copy": "複製", - "setAsHome": "設為首頁", - "setAsHomeTitle": "設為預設首頁", - "setAsHomeConfirm": "確定要將頁面「{name}」設為預設首頁嗎?", - "setAsHomePath": "首頁路徑", - "setAsHomeTip": "設定後,用戶登入系統將預設跳轉到此頁面。", - "setAsHomeAppTip": "此頁面屬於應用「{app}」,將更新該應用的首頁配置。", - "setHomeSuccess": "已設為預設首頁", - "setHomeFailed": "設定首頁失敗", - "more": "更多", - "category": "頁面分類", - "editor": { - "title": "在線開發", - "create": "創建頁面", - "edit": "編輯頁面", - "createSuccess": "創建成功", - "steps": { - "basic": "基礎信息", - "design": "頁面設計", - "preview": "頁面預覽" - }, - "loadFailed": "加載頁面數據失敗", - "validate": { - "basic": "基礎信息驗證:名稱、編碼必填", - "perfectDesign": "請完善頁面設計" - }, - "autoSave": { - "saving": "保存中...", - "saved": "已保存", - "unsaved": "未保存" - } - }, - "previewDialog": { - "title": "頁面預覽", - "loadFailed": "加載頁面配置失敗", - "verifySuccess": "驗證通過", - "realtimeData": "實時數據 (v-model):", - "noConfig": "暫無頁面配置", - "close": "關閉", - "verifySubmit": "驗證提交", - "verifyFailed": "頁面驗證失敗" - }, - "importExport": { - "export": "匯出配置", - "import": "匯入配置", - "exportSuccess": "頁面配置已匯出", - "exportFailed": "匯出失敗", - "importTitle": "匯入頁面配置", - "dragOrClick": "拖拽 JSON 檔案到此處或點擊上傳", - "onlyJson": "僅支援 .json 格式檔案", - "fileParseError": "檔案解析失敗,請確認檔案格式正確", - "checking": "正在檢查...", - "codeConflictTip": "頁面編碼已存在,請修改編碼後再匯入", - "codeAvailable": "頁面編碼可用,可以匯入", - "newCodePlaceholder": "請輸入新的頁面編碼", - "importSuccess": "頁面配置匯入成功", - "importFailed": "匯入失敗", - "confirmImport": "確認匯入", - "reselect": "重新選擇", - "pageInfo": "頁面資訊", - "appTip": "匯入的頁面將歸屬到當前應用" - }, - "publishDialog": { - "title": "頁面發佈", - "success": "發佈成功", - "failed": "發佈失敗", - "menuConfig": "菜單配置", - "menuName": "菜單名稱", - "parentMenu": "上級菜單", - "parentMenuPlaceholder": "請選擇上級菜單(不選則為頂級)", - "menuIcon": "菜單圖標", - "routeInfo": "路由信息", - "accessPath": "訪問路徑", - "confirmPublish": "確認發佈" - } -} diff --git a/web/apps/web-ele/src/locales/langs/zh-TW/page.json b/web/apps/web-ele/src/locales/langs/zh-TW/page.json deleted file mode 100644 index 7d6027f..0000000 --- a/web/apps/web-ele/src/locales/langs/zh-TW/page.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "auth": { - "login": "登錄", - "register": "註冊", - "codeLogin": "驗證碼登錄", - "qrcodeLogin": "二維碼登錄", - "forgetPassword": "忘記密碼" - }, - "dashboard": { - "title": "概覽", - "analytics": "分析頁", - "workspace": "工作臺" - } -} diff --git a/web/apps/web-ele/src/locales/langs/zh-TW/permission.json b/web/apps/web-ele/src/locales/langs/zh-TW/permission.json deleted file mode 100644 index d2d17e0..0000000 --- a/web/apps/web-ele/src/locales/langs/zh-TW/permission.json +++ /dev/null @@ -1,74 +0,0 @@ -{ - "name": "權限", - "title": "權限管理", - "permissionName": "權限名稱", - "permissionCode": "權限編碼", - "permissionType": "權限類型", - "httpMethod": "HTTP 方法", - "apiPath": "API 路徑", - "description": "描述", - "operation": "操作", - "add": "新建權限", - "edit": "編輯權限", - "selectMenuFirst": "請先選擇菜單", - "searchMenu": "搜索菜單", - "loadMenuFailed": "加載菜單失敗", - "loadSubMenuFailed": "加載子菜單失敗", - "searchMenuFailed": "搜索菜單失敗", - "deleteConfirm": "確定刪除權限{0}嗎?", - "batchDelete": "批量刪除", - "batchDeleteConfirm": "確定刪除 {0} 個權限嗎?\n{1}", - "batchDeleteSuccess": "成功刪除 {0} 個權限", - "batchDeleteFailed": "批量刪除失敗", - "selectToDelete": "請選擇要刪除的權限", - "selectAtLeastOneRoute": "請選擇至少一個路由", - "createSuccess": "成功創建 {created} 個權限{skipped}", - "skipped": ",跳過 {count} 個", - "createFailed": "{failed} 個權限創建失敗:{errors}", - "createError": "創建權限失敗", - "getRoutesFailed": "獲取路由列表失敗", - "autoGenerateApi": "自動生成API權限", - "quickAddApiPermission": "快速添加API權限", - "dataScope": "數據範圍", - "dataScopes": { - "all": "全部數據", - "self": "僅本人", - "dept": "本部門", - "deptAndSub": "本部門及下級", - "custom": "自定義" - }, - "permissionTypes": { - "button": "按鈕權限", - "api": "API權限", - "data": "數據權限", - "other": "其他權限", - "buttonDesc": "用於控制頁面中的按鈕、菜單項等元素的顯示隱藏", - "apiDesc": "用於控制用戶可以訪問的 API 接口", - "dataDesc": "用於控制用戶可以訪問的數據範圍", - "otherDesc": "其他類型的權限" - }, - "typeLabels": { - "button": "按鈕", - "api": "API", - "data": "數據", - "other": "其他", - "unknown": "未知" - }, - "helpText": { - "code": "權限編碼應遵循 \"module:action\" 的格式,使用字母、數字、下劃線和冒號", - "apiPath": "完整的 API 路徑,如 /api/user/create 或 /api/user/:id/update", - "httpMethod": "該權限對應的 HTTP 請求方法" - }, - "placeholder": { - "name": "如:新建用戶、查看報表等", - "code": "如:user:create、report:view等", - "apiPath": "/api/user/create" - }, - "validationErrors": { - "nameRequired": "權限名稱不能為空", - "nameMaxLength": "權限名稱最長64個字符", - "codeRequired": "權限編碼不能為空", - "codeMaxLength": "權限編碼最長64個字符", - "codeFormat": "權限編碼只能包含字母、數字、下劃線和冒號" - } -} diff --git a/web/apps/web-ele/src/locales/langs/zh-TW/post.json b/web/apps/web-ele/src/locales/langs/zh-TW/post.json deleted file mode 100644 index 96292a8..0000000 --- a/web/apps/web-ele/src/locales/langs/zh-TW/post.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "name": "崗位", - "title": "崗位管理", - "postName": "崗位名稱", - "postCode": "崗位編碼", - "postType": "崗位類型", - "postLevel": "崗位級別", - "department": "所屬部門", - "description": "崗位描述", - "status": "狀態", - "operation": "操作", - "edit": "編輯", - "codeFormatError": "崗位編碼只能包含字母、數字、下劃線和橫線", - "selectDepartment": "請選擇所屬部門", - "descriptionPlaceholder": "請輸入崗位描述/職責", - "selectUsersFirst": "請先選擇用戶", - "addUsersSuccess": "添加成功", - "removeUsersConfirm": "確定要刪除選中的 {0} 個用戶嗎?", - "removeUsersSuccess": "刪除成功", - "removeUsersFailed": "刪除失敗", - "types": { - "management": "管理崗", - "technical": "技術崗", - "business": "業務崗", - "functional": "職能崗", - "other": "其他" - }, - "levels": { - "senior": "高層", - "middle": "中層", - "basic": "基層", - "staff": "一般員工" - } -} diff --git a/web/apps/web-ele/src/locales/langs/zh-TW/redis-manager.json b/web/apps/web-ele/src/locales/langs/zh-TW/redis-manager.json deleted file mode 100644 index fb50f8c..0000000 --- a/web/apps/web-ele/src/locales/langs/zh-TW/redis-manager.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "databases": "資料庫列表", - "database": "資料庫", - "allTypes": "全部類型", - "refresh": "重新整理", - "expires": "過期", - "avgTTL": "平均 TTL", - "keyList": "鍵列表", - "keyDetail": "鍵詳情", - "keysCount": "{count} 個鍵", - "searchKeyPlaceholder": "搜尋鍵(支援萬用字元 *、?)", - "type": "類型", - "addKey": "新增鍵", - "editKey": "編輯鍵", - "renameKey": "重新命名鍵", - "deleteKey": "刪除鍵", - "keyName": "鍵名", - "value": "值", - "ttl": "過期時間", - "size": "大小", - "encoding": "編碼", - "bytes": "位元組", - "loading": "載入中...", - "selectKeyPrompt": "請從左側選擇一個鍵", - "keyNotExist": "鍵不存在或已過期", - "copy": "複製", - "copySuccess": "已複製到剪貼簿", - "deleteConfirm": "確定要刪除鍵 \"{key}\" 嗎?", - "confirmDelete": "確認刪除", - "deleteSuccess": "刪除成功", - "deleteFailed": "刪除失敗", - "renamePrompt": "請輸入新的鍵名", - "renameSuccess": "重新命名成功", - "renameFailed": "重新命名失敗", - "setExpirePrompt": "請輸入過期時間(秒),-1 表示永不逾期", - "setExpire": "設定過期時間", - "setSuccess": "設定成功", - "setFailed": "設定失敗", - "createSuccess": "建立成功", - "createFailed": "建立失敗", - "updateSuccess": "更新成功", - "updateFailed": "更新失敗", - "keyRequired": "鍵名不能為空", - "typeRequired": "請選擇類型", - "valueRequired": "請輸入值", - "invalidNumber": "請輸入有效的數字", - "permanent": "永不逾期", - "expired": "已逾期", - "seconds": "秒", - "minutes": "分鐘", - "hours": "小時", - "days": "天", - "listItem": "列表項", - "setMember": "集合成員", - "zsetMember": "有序集合", - "hashField": "雜湊欄位", - "add": "添加", - "addItem": "添加項", - "addMember": "添加成員", - "addField": "添加欄位", - "fieldName": "欄位名", - "fieldValue": "欄位值", - "member": "成員", - "score": "分數", - "ttlDesc": "-1 表示永不逾期", - "cancel": "取消", - "confirm": "確定", - "create": "建立", - "update": "更新", - "loadDatabasesFailed": "載入資料庫列表失敗", - "loadKeyDetailFailed": "載入鍵詳情失敗", - "searchKeysFailed": "搜尋鍵失敗" -} diff --git a/web/apps/web-ele/src/locales/langs/zh-TW/redis-monitor.json b/web/apps/web-ele/src/locales/langs/zh-TW/redis-monitor.json deleted file mode 100644 index 2b8bf88..0000000 --- a/web/apps/web-ele/src/locales/langs/zh-TW/redis-monitor.json +++ /dev/null @@ -1,181 +0,0 @@ -{ - "overview": "概覽資訊", - "memory": "記憶體資訊", - "clients": "用戶端", - "keyspace": "鍵空間", - "stats": "統計資訊", - "slowlog": "慢日誌", - "loadFailed": "載入監控數據失敗", - "loadRealtimeStatsFailed": "載入即時統計失敗", - "refreshSuccess": "重新整理成功", - "autoRefreshing": "自動重新整理中", - "paused": "已暫停", - "featureDeveloping": "功能開發中...", - "seconds": "秒", - "minutes": "分鐘", - "hours": "小時", - "days": "天", - "master": "主節點", - "slave": "從節點", - "blocked": "阻塞中", - "normal": "普通", - "active": "活躍", - "connectedClients": "連接用戶端", - "blockedClients": "阻塞用戶端", - "totalConnections": "總連接數", - "clientList": "用戶端列表", - "totalClientsCount": "共 {count} 個用戶端", - "noClientConnections": "暫無用戶端連接", - "clientId": "用戶端 ID", - "address": "地址", - "name": "名稱", - "database": "資料庫", - "status": "狀態", - "age": "連接時長", - "idle": "閒置時長", - "outputBuffer": "輸出緩衝", - "lastCommand": "最後命令", - "used": "使用", - "queue": "隊列", - "fieldDescription": "欄位說明", - "clientIdDesc": "Redis 分配的唯一用戶端識別碼", - "addressDesc": "用戶端的 IP 地址和連接埠號碼", - "nameDesc": "透過 CLIENT SETNAME 設定的用戶端名稱", - "ageDesc": "用戶端連接的總時長", - "idleDesc": "用戶端閒置的時長(未發送命令)", - "outputBufferDesc": "輸出緩衝區使用的記憶體和隊列長度", - "permanent": "永久", - "milliseconds": "毫秒", - "totalKeys": "總鍵數", - "expiresKeys": "逾期鍵數", - "proportion": "佔比", - "avgTTL": "平均 TTL", - "databaseList": "資料庫列表", - "totalDatabasesCount": "共 {count} 個資料庫", - "noDatabaseInfo": "暫無資料庫資訊", - "keyCount": "鍵數量", - "expires": "逾期鍵", - "expireRate": "逾期率", - "noExpireTime": "無逾期時間", - "keyCountDesc": "資料庫中儲存的鍵的總數量", - "expiresDesc": "設定了逾期時間的鍵的数量", - "avgTTLDesc": "所有逾期鍵的平均存活時間(毫秒)", - "expireRateDesc": "逾期鍵佔總鍵數的百分比", - "dbId": "資料庫編號", - "dbIdDesc": "Redis 資料庫編號(0-15)", - "usageRateDesc": "資料庫鍵數量相對於最大容量的佔比", - "insufficientMemory": "記憶體不足", - "moreFragmentation": "碎片較多", - "memoryUsage": "記憶體使用率", - "memoryPeak": "記憶體峰值", - "memoryPeakDesc": "歷史最高使用量", - "fragmentationRatio": "記憶體碎片率", - "memoryUsageDetail": "記憶體使用詳情", - "usedMemory": "已使用記憶體", - "rssMemory": "RSS 記憶體", - "physicalMemory": "實體記憶體", - "totalSystemMemory": "系統總記憶體", - "system": "系統", - "datasetMemory": "數據集記憶體", - "allocatorAllocated": "分配器已分配", - "allocatorActive": "分配器活躍", - "memoryPolicyConfig": "記憶體策略設定", - "maxMemoryLimit": "最大記憶體限制", - "noLimit": "無限制", - "set": "已設定", - "notLimited": "未限制", - "evictionPolicy": "記憶體淘汰策略", - "evictionPolicyDesc": "💡 記憶體淘汰策略說明", - "noevictionDesc": "noeviction: 不淘汰,記憶體滿時回傳錯誤", - "allkeysLruDesc": "allkeys-lru: 從所有鍵中淘汰最近最少使用的鍵", - "volatileLruDesc": "volatile-lru: 從設定了逾期時間的鍵中淘汰最近最少使用的鍵", - "allkeysRandomDesc": "allkeys-random: 從所有鍵中隨機淘汰", - "volatileRandomDesc": "volatile-random: 從設定了逾期時間的鍵中隨機淘汰", - "volatileTtlDesc": "volatile-ttl: 淘汰即將逾期的鍵(TTL 最小)", - "memoryUsageTrend": "記憶體使用趨勢", - "recentDataPoints": "最近 {count} 個數據點", - "waitingForData": "等待數據中...", - "collectingMemoryData": "正在收集記憶體使用數據", - "currentUsage": "目前使用率", - "average": "平均", - "highest": "最高", - "currentConnections": "目前連接數", - "opsPerSec": "每秒操作數", - "hitRate": "命中率", - "redisBasicInfo": "Redis 基礎資訊", - "redisVersion": "Redis 版本", - "redisMode": "執行模式", - "role": "角色", - "architecture": "架構", - "bits": "位元", - "tcpPort": "TCP 連接埠", - "uptime": "執行時間", - "uptimeInDays": "執行天數", - "connectionStatus": "連接狀態", - "connected": "已連接", - "disconnected": "未連接", - "memoryInfo": "記憶體資訊", - "memoryPolicy": "記憶體策略", - "connectionStats": "連接統計", - "rejectedConnections": "拒絕連接數", - "commandStats": "命令統計", - "totalCommands": "總命令數", - "keyspaceHits": "鍵空間命中", - "keyspaceMisses": "鍵空間未命中", - "keyspaceInfo": "鍵空間資訊", - "keys": "鍵", - "networkInput": "網路輸入", - "totalNetInput": "總輸入位元組", - "inputKbps": "每秒輸入", - "networkOutput": "網路輸出", - "totalNetOutput": "總輸出位元組", - "outputKbps": "每秒輸出", - "totalSlowLogs": "慢日誌總數", - "avgDuration": "平均耗時", - "maxDuration": "最大耗時", - "slowLogList": "慢日誌列表", - "recentLogsCount": "最近 {count} 條記錄", - "noSlowLogs": "暫無慢日誌記錄", - "command": "命令", - "clientInfo": "用戶端資訊", - "unnamed": "未命名", - "durationProportion": "耗時佔比", - "relativeToMax": "相對最大值", - "slowLogDesc": "慢日誌說明", - "slowLogThreshold": "慢日誌閾值", - "slowLogThresholdDesc": "超過設定閾值的命令會被記錄到慢日誌", - "executionTime": "執行時間", - "executionTimeDesc": "命令從開始到結束的總耗時(微秒)", - "clientInfoDesc": "執行命令的用戶端 IP 和名稱", - "performanceOptimization": "效能優化", - "performanceOptimizationDesc": "分析慢日誌可以幫助優化 Redis 效能", - "timeUnit": "時間單位", - "colorIndicator": "顏色標示", - "excellent": "優秀", - "good": "良好", - "lower": "較低", - "veryLow": "很低", - "keyPerformanceIndicators": "關鍵效能指標", - "cacheHitRate": "快取命中率", - "detailedStats": "詳細統計資訊", - "totalInputTraffic": "總輸入流量", - "totalOutputTraffic": "總輸出流量", - "instantaneousInputRate": "瞬時輸入速率", - "instantaneousOutputRate": "瞬時輸出速率", - "keyOperationStats": "鍵操作統計", - "evictedKeys": "驅逐鍵數", - "syncStats": "同步統計", - "syncFull": "完全同步", - "syncPartialOk": "部分同步成功", - "syncPartialErr": "部分同步失敗", - "pubsubChannels": "發布訂閱頻道", - "pubsubPatterns": "發布訂閱模式", - "latestForkUsec": "最近 Fork 耗時", - "indicatorDesc": "指標說明", - "opsPerSecDesc": "Redis 每秒處理的命令數量,反映系統負載", - "hitRateDesc": "鍵空間命中次數佔總查詢次數的百分比", - "evictedKeysDesc": "因記憶體不足而被驅逐的鍵數量", - "rejectedConnectionsDesc": "因達到最大連接數而被拒絕的連接", - "syncFullDesc": "主從複製時的完全同步次數", - "latestForkUsecDesc": "最近一次 Fork 操作的耗時(微秒)" -} diff --git a/web/apps/web-ele/src/locales/langs/zh-TW/report-manager.json b/web/apps/web-ele/src/locales/langs/zh-TW/report-manager.json deleted file mode 100644 index 7009f3b..0000000 --- a/web/apps/web-ele/src/locales/langs/zh-TW/report-manager.json +++ /dev/null @@ -1,437 +0,0 @@ -{ - "name": "報表名稱", - "reportCode": "報表編碼", - "category": "分類", - "status": "狀態", - "description": "描述", - "createTime": "建立時間", - "actions": "操作", - "create": "新建報表", - "design": "設計", - "editInfo": "編輯資訊", - "deleteConfirm": "確定要刪除報表 \"{name}\" 嗎?", - "deleteConfirmTitle": "刪除確認", - "deleteSuccess": "已刪除報表: {name}", - "saveSuccess": "報表儲存成功", - "copyTitle": "複製報表", - "copyCodePlaceholder": "請輸入新報表編碼", - "copySuccess": "複製成功", - "statusMap": { - "draft": "草稿", - "published": "已發布" - }, - "placeholder": { - "name": "請輸入報表名稱", - "code": "請輸入報表編碼", - "category": "請輸入分類", - "description": "請輸入報表說明" - }, - "editor": { - "create": "新建報表", - "edit": "編輯報表", - "createSuccess": "報表建立成功", - "loadFailed": "載入報表失敗", - "back": "返回", - "save": "儲存", - "publish": "發布", - "publishSuccess": "發布成功,已建立新的設計版本", - "copyVersion": "複製版本", - "copyVersionSuccess": "已複製為新設計版本", - "copyVersionFailed": "複製版本失敗" - }, - "leftPanel": { - "dataSource": "資料源", - "reportProperties": "報表設定", - "clickToConfigure": "點擊編輯設定", - "configuredCount": "已設定 {count} 項", - "queryEmpty": "尚未設定查詢條件", - "sortEmpty": "尚未設定排序規則", - "columnEmpty": "尚未啟用分欄布局", - "convertEmpty": "尚未設定資料轉換", - "columnEnabled": "已啟用分欄" - }, - "dataset": { - "title": "資料集", - "selectSource": "選擇資料源", - "empty": "暫無資料集,請從上方新增", - "fieldMapping": "欄位映射", - "loadingFields": "載入欄位中...", - "loadFieldsFailed": "載入欄位失敗", - "noFields": "暫無欄位" - }, - "column": { - "config": "分欄設定", - "title": "分欄設定", - "enable": "啟用分欄", - "style": "分欄樣式", - "styleCol": "行分欄", - "styleRow": "列分欄", - "type": "分欄類型", - "overRows": "超過", - "splitCols": "行後分欄", - "overCols": "超過", - "splitRows": "列後分欄", - "splitInto": "分欄成", - "colsUnit": "列", - "rowsUnit": "行", - "dataRange": "分欄資料區域", - "dataRangePlaceholder": "如 A2:D10", - "copyColNo": "複製行號", - "copyRowNo": "複製列號", - "rangeHint": "如 1,2-3,6", - "fillEmpty": "補充空白行", - "previewNote": "預覽支援:行分欄→分欄成 N 列;列分欄→分欄成 N 行。請填寫區域(如 A2:D10)並設定列/行數≥2。" - }, - "sort": { - "config": "排序設定", - "title": "資料集排序", - "hint": "按資料集別名字段排序,格式:別名.欄位名(如 sales.amount)", - "add": "新增排序", - "field": "排序欄位", - "fieldPlaceholder": "如 sales.createTime", - "order": "順序", - "asc": "升序", - "desc": "降序", - "datasetHint": "已設定資料集" - }, - "query": { - "title": "查詢條件", - "config": "設定查詢條件", - "add": "新增條件", - "field": "欄位名", - "fieldPlaceholder": "選擇或輸入參數欄位名", - "label": "顯示名", - "component": "元件", - "defaultValue": "預設值", - "required": "請填寫此項", - "requiredLabel": "必填", - "input": "輸入框", - "select": "下拉", - "date": "日期", - "dateRange": "日期範圍", - "showTime": "含時間", - "options": "選項", - "optionsPlaceholder": "顯示名:值,顯示名2:值2", - "search": "查詢", - "reset": "重置", - "startDate": "開始日期", - "endDate": "結束日期" - }, - "convert": { - "config": "資料轉換", - "title": "資料轉換配置", - "hint": "欄位格式:資料集別名.欄位名", - "add": "添加規則", - "field": "欄位", - "fieldPlaceholder": "如 order.status", - "type": "轉換類型", - "configCol": "設定", - "extraTitle": "轉換設定", - "addOption": "添加選項", - "option": "選項", - "optionId": "值", - "optionLabel": "顯示名", - "dateFormat": "日期格式", - "precision": "小數位數", - "thousands": "千分位", - "types": { - "select": "列舉", - "date": "日期", - "number": "數字", - "user": "使用者", - "department": "部門", - "organize": "組織", - "role": "角色", - "dictionary": "字典" - }, - "namesMap": "名稱映射", - "namesPlaceholder": "ID:顯示名,ID2:顯示名2", - "dictionaryType": "字典類型", - "dictionaryTypePlaceholder": "請輸入字典編碼" - }, - "preview": { - "title": "預覽", - "search": "查詢", - "expressionCycle": "偵測到運算式儲存格存在循環引用,計算結果可能不正確", - "snapshotLarge": "預覽結果儲存格數量較大,可能影響效能", - "datasetRowWarn": "資料集「{alias}」行數較多,預覽可能較慢", - "datasetRowLimit": "資料集「{alias}」已達行數上限,結果可能被截斷" - }, - "importExport": { - "export": "匯出設定", - "import": "匯入設定", - "exportSuccess": "報表設定已匯出", - "exportFailed": "匯出失敗", - "importTitle": "匯入報表設定", - "dragOrClick": "拖曳 JSON 檔案到此處或點擊上傳", - "onlyJson": "僅支援 .json 格式檔案", - "fileParseError": "檔案解析失敗,請確認檔案格式正確", - "checking": "正在檢查...", - "codeConflictTip": "報表編碼已存在,請修改編碼後再匯入", - "codeAvailable": "報表編碼可用,可以匯入", - "newCodePlaceholder": "請輸入新的報表編碼", - "importSuccess": "報表設定匯入成功", - "importFailed": "匯入失敗", - "confirmImport": "確認匯入", - "reselect": "重新選擇", - "reportInfo": "報表資訊", - "appTip": "匯入的報表將歸屬目前應用;資料集依資料源編碼匹配,未匹配的將跳過" - }, - "publishMenu": "發布到選單", - "updateMenu": "更新選單", - "unpublishMenu": "取消發布選單", - "unpublishSuccess": "已取消發布: {name}", - "unpublishFailed": "取消發布失敗", - "publishDialog": { - "title": "發布報表到選單", - "success": "已發布到選單", - "failed": "發布失敗", - "confirm": "確認發布" - }, - "print": { - "title": "列印", - "notAllowed": "該報表不允許列印", - "browserPrint": "列印", - "previewTitle": "列印預覽", - "imageWarn": "報表包含 {count} 張圖片,列印可能較慢,是否繼續?", - "failed": "開啟列印預覽失敗,請重試" - }, - "printForm": { - "printArea": "列印範圍", - "paperType": "紙張類型", - "padding": "紙張邊距", - "direction": "紙張方向", - "scale": "頁面縮放", - "hAlign": "左右對齊", - "vAlign": "上下對齊", - "gridlines": "網格線", - "workbookTitle": "報表名稱", - "worksheetTitle": "工作表名稱", - "printDate": "當前日期", - "printTime": "當前時間", - "pageNumber": "頁碼", - "yFreeze": "重複凍結行", - "xFreeze": "重複凍結列", - "options": { - "currentSheet": "當前工作表", - "portrait": "縱向", - "landscape": "橫向", - "a4": "A4", - "a3": "A3", - "a5": "A5(14.8厘米 x 21.0厘米)", - "b4": "B4(25.0厘米 x 35.3厘米)", - "b5": "B5(17.6厘米 x 25.0厘米)", - "executive": "行政公文紙(18.4厘米 x 26.7厘米)", - "statement": "報表(14.0厘米 x 21.6厘米)", - "letter": "信紙", - "origin": "原始比例", - "fitWidth": "適應寬度", - "fitHeight": "適應高度", - "fitPage": "適應頁面", - "normal": "正常", - "narrow": "窄邊距", - "wide": "寬邊距", - "hAlign": { - "start": "左對齊", - "middle": "水平居中", - "end": "右對齊" - }, - "vAlign": { - "start": "頂部對齊", - "middle": "垂直居中", - "end": "底部對齊" - } - } - }, - "image": { - "empty": "選中懸浮圖片後可設定", - "source": "圖片來源", - "sourceLocal": "本地上傳", - "sourceUrl": "URL 地址", - "url": "圖片地址", - "urlPlaceholder": "以 http:// 或 https:// 開頭", - "upload": "上傳圖片", - "selectFile": "選擇圖片", - "uploadSuccess": "圖片上傳成功", - "uploadFailed": "圖片上傳失敗" - }, - "settings": { - "title": "報表設定", - "allowExport": "允許匯出", - "allowPrint": "允許列印", - "allowWatermark": "顯示浮水印", - "allowExportTip": "開啟後,預覽和執行時允許匯出 Excel/PDF", - "allowPrintTip": "開啟後,預覽和執行時允許列印", - "allowWatermarkTip": "開啟後,預覽和執行時顯示浮水印", - "watermarkText": "水印文字", - "watermarkPlaceholder": "請輸入水印文字", - "watermarkShowTime": "水印顯示時間", - "watermarkTimeFormat": "時間格式", - "loadFailed": "載入報表設定失敗" - }, - "pdfExport": { - "title": "匯出 PDF", - "success": "PDF 匯出成功", - "failed": "PDF 匯出失敗" - }, - "version": { - "title": "版本管理", - "hint": "切換、複製或刪除歷史版本", - "switch": "切換", - "loadFailed": "載入版本列表失敗", - "deleteConfirm": "確定刪除版本 v{version} 嗎?", - "deleteSuccess": "版本已刪除", - "deleteFailed": "刪除版本失敗", - "cannotDeleteActive": "不能刪除啟用中的版本", - "state": { - "0": "設計中", - "1": "啟用中", - "2": "已歸檔" - } - }, - "fieldMapping": { - "title": "欄位映射", - "hint": "設定資料源欄位到資料集別名的映射", - "add": "新增映射", - "sourceField": "源欄位", - "targetField": "目標欄位", - "sourcePlaceholder": "資料源欄位名", - "targetPlaceholder": "映射後的欄位名" - }, - "releaseMenu": { - "existingTitle": "已發布選單", - "existingHint": "目前選單:{title}({path}),重新發布將更新選單設定" - }, - "export": { - "title": "匯出 Excel", - "success": "匯出成功", - "failed": "匯出失敗", - "notAllowed": "該報表不允許匯出" - }, - "chart": { - "empty": "選中懸浮圖表後可設定", - "cellEmpty": "選中儲存格內嵌圖表後可設定", - "cellTitle": "儲存格圖表", - "type": "圖表類型", - "title": "圖表標題", - "datasetHint": "資料集別名", - "dataSet": "綁定資料集", - "classifyField": "分類欄位", - "maxField": "雷達最大值欄位", - "legendShow": "顯示圖例", - "legendOrient": "圖例布局", - "legendOrientHorizontal": "橫排", - "legendOrientVertical": "豎排", - "legendFontSize": "圖例字體大小", - "styleType": "圖表樣式", - "lineArea": "面積填充", - "pieRose": "玫瑰圖", - "pieShowZero": "隱藏零值", - "layoutSection": "版面與配色", - "gridTop": "上邊距", - "gridLeft": "左邊距", - "gridRight": "右邊距", - "gridBottom": "下邊距", - "legendLeft": "圖例水平(%)", - "legendTop": "圖例垂直(%)", - "colorList": "系列配色", - "addColor": "新增顏色", - "colorListPlaceholder": "如 #5470c6,#91cc75,#fac858", - "seriesCenterLeft": "圓餅中心水平(%)", - "seriesCenterTop": "圓餅中心垂直(%)", - "seriesNameField": "系列名稱欄位", - "seriesDataField": "系列數值欄位", - "summaryType": "彙總方式", - "fieldPlaceholder": "如 sales.month 或 month", - "types": { - "bar": "柱狀圖", - "line": "折線圖", - "pie": "圓餅圖", - "radar": "雷達圖" - }, - "styleTypes": { - "barDefault": "預設柱狀", - "barStack": "堆疊柱狀", - "lineDefault": "預設折線", - "lineSmooth": "平滑曲線", - "lineStack": "堆疊折線", - "pieDefault": "實心圓餅", - "pieRing": "環形圓餅", - "radarPolygon": "多邊形雷達", - "radarCircle": "圓形雷達" - }, - "summary": { - "none": "原值", - "sum": "求和", - "avg": "平均", - "max": "最大", - "min": "最小", - "count": "計數" - } - }, - "properties": { - "title": "儲存格屬性", - "empty": "請在表格中選中儲存格", - "position": "位置:第 {row} 行,第 {col} 列", - "cellType": "儲存格類型", - "typeText": "文字", - "textParamHint": "文字儲存格可直接寫 #'{'參數名'}',預覽時自動替換", - "typeDataSource": "資料源", - "typeParameter": "參數", - "typeQrCode": "二維碼", - "typeBarcode": "條形碼", - "typeExpression": "運算式", - "expressionFormula": "運算式", - "expressionPlaceholder": "如 =A1+sum(sales.amount) 或 =sum(A1:B2)", - "expressionHint": "支援 A1/B2 引用、sum(A1:B2)、sum(別名.欄位)、#'{'參數'}'、+ - * /", - "dataset": "資料集別名", - "field": "綁定欄位", - "fieldPlaceholder": "如 name 或 user.name", - "displayType": "顯示類型", - "displayDefault": "預設", - "expand": "擴展方向", - "expandNone": "不擴展", - "expandDown": "向下列表", - "expandRight": "向右列表", - "polymerizationType": "聚合方式", - "polyList": "列表", - "polyGroup": "分組", - "polySummary": "彙總", - "summaryType": "彙總類型", - "groupType": "分組方式", - "groupDefault": "預設分組", - "groupAdjacent": "相鄰連續分組", - "mergeCell": "合併儲存格", - "fillEmptyRows": "列表後補空行", - "fillEmptyNum": "補空行數", - "leftParent": "左父格", - "topParent": "上父格", - "leftParentCustom": "左父格位置(欄名+列號)", - "topParentCustom": "上父格位置(欄名+列號)", - "leftParentHint": "擴展或彙總時,從本格同一列向左找最近的資料源儲存格,用於限定資料分組範圍。純文字儲存格無需配置。", - "topParentHint": "擴展或彙總時,從本格同一欄向上找最近的資料源儲存格,用於限定資料層級。合計列通常選「無」;分組小計可選「自訂」指向分組格。", - "parentType": { - "none": "無", - "default": "預設", - "custom": "自訂" - }, - "paramField": "參數欄位名", - "apply": "套用到儲存格" - }, - "code": { - "content": "編碼內容", - "contentPlaceholder": "靜態文字或 #'{'參數名'}'", - "paramHint": "支援 #'{'field'}' 引用查詢參數,預覽時自動替換", - "qrLevel": "糾錯級別", - "barcodeFormat": "條形碼格式" - }, - "render": { - "codeRequired": "報表編碼不能為空", - "loadFailed": "載入報表失敗", - "empty": "暫無預覽資料" - }, - "univerPlaceholder": { - "title": "Univer 報表設計器", - "desc": "Phase 1 骨架已就緒,完整 @univerjs 表格引擎將在下一階段接入。" - } -} diff --git a/web/apps/web-ele/src/locales/langs/zh-TW/role.json b/web/apps/web-ele/src/locales/langs/zh-TW/role.json deleted file mode 100644 index f5f454d..0000000 --- a/web/apps/web-ele/src/locales/langs/zh-TW/role.json +++ /dev/null @@ -1,134 +0,0 @@ -{ - "name": "角色", - "title": "角色管理", - "roleName": "角色名稱", - "roleCode": "角色編碼", - "roleType": "角色類型", - "dataScope": "數據範圍", - "priority": "角色優先級", - "priorityHelp": "數字越大優先級越高", - "description": "角色描述", - "descriptionPlaceholder": "請輸入角色描述", - "remark": "備註", - "remarkPlaceholder": "請輸入備註信息", - "status": "狀態", - "operation": "操作", - "edit": "編輯", - "users": "用戶", - "addUsersSuccess": "添加用戶成功", - "removeUsersConfirm": "確定要移除選中的 {0} 個用戶嗎?", - "removeUsersSuccess": "移除用戶成功", - "removeUsersFailed": "移除用戶失敗", - "codeFormatError": "角色編碼只能包含字母、數字和下劃線", - "types": { - "system": "系統角色", - "custom": "自定義角色" - }, - "dataScopes": { - "self": "僅本人數據", - "dept": "本部門數據", - "deptAndSub": "本部門及下級部門數據", - "deptAndSubShort": "本部門及下級", - "all": "全部數據", - "custom": "自定義數據", - "unknown": "未知" - }, - "permissions": { - "title": "權限分配", - "save": "保存", - "selectRoleFirst": "請先選擇角色", - "noRoleSelected": "未選擇角色", - "appList": "應用列表", - "allApps": "全部應用", - "loadAppsFailed": "加載應用列表失敗", - "menuList": "菜單列表", - "selectAll": "全選", - "unselectAll": "反選", - "selectMenuPrompt": "請從左側選擇菜單查看權限", - "noPermissionData": "暫無權限數據", - "loading": "加載中...", - "noPermissions": "暫無權限", - "permissionCount": "項權限", - "loadMenuFailed": "加載菜單列表失敗", - "loadPermissionsFailed": "加載權限失敗", - "saveSuccess": "菜單和權限分配成功", - "saveFailed": "保存菜單和權限分配失敗", - "getRoleDetailFailed": "獲取角色詳情失敗", - "types": { - "button": "按鈕權限", - "api": "API權限", - "data": "數據權限", - "other": "其他權限" - }, - "steps": { - "menuApi": "菜單與API權限", - "fieldData": "字段與數據權限" - } - }, - "resourceScope": { - "title": "數據權限配置", - "helpTip": "必須後端實現了相關的方法後才生效,參考 zq-demo", - "addResource": "添加資源", - "saveConfig": "保存配置", - "deleteConfirm": "確定刪除此配置嗎?", - "selectRole": "請先選擇角色", - "noConfig": "暫無配置,點擊【添加資源】開始配置", - "resourceType": "資源類型", - "selectResourceType": "選擇資源類型", - "dataPermission": "數據權限範圍", - "selectDataPermission": "選擇數據權限", - "customDept": "自定義部門", - "selectDept": "選擇部門", - "operation": "操作", - "delete": "刪除", - "saveSuccess": "資源數據權限配置保存成功", - "saveFailed": "保存資源數據權限配置失敗", - "loadFailed": "加載資源數據權限配置失敗", - "loadResourceTypesFailed": "加載資源類型失敗", - "loadDeptsFailed": "加載部門列表失敗", - "allTypesConfigured": "所有資源類型都已配置", - "noResourceTypes": "暫無可用資源類型", - "customDeptRequired": "自定義數據權限必須選擇部門" - }, - "fieldPermission": { - "title": "字段權限配置", - "helpTip": "必須後端實現了相關的方法後才生效,參考 zq-demo", - "config": "配置", - "resourceType": "資源類型", - "selectResourceType": "選擇資源類型", - "selectRoleFirst": "請先選擇角色", - "selectRoleAndResource": "請先選擇角色和資源類型", - "fieldName": "字段名", - "displayName": "顯示名稱", - "sensitive": "敏感", - "permissionType": "權限類型", - "maskRule": "脫敏規則", - "description": "說明", - "noConfig": "暫無字段配置", - "saveConfig": "保存配置", - "saveSuccess": "字段權限配置保存成功", - "saveFailed": "保存字段權限配置失敗", - "loadFailed": "加載字段權限配置失敗", - "loadMetadataFailed": "加載資源字段元數據失敗", - "maskRuleRequired": "脫敏規則不能為空", - "permissionTypes": { - "read": "可讀", - "write": "可寫", - "hidden": "隱藏", - "masked": "脫敏" - }, - "maskRules": { - "phone": "手機號", - "email": "郵箱", - "id_card": "身份證", - "name": "姓名", - "default": "默認" - }, - "permissionDesc": { - "read": "可以查看此字段", - "write": "可以查看和修改此字段", - "hidden": "完全不可見此字段", - "masked": "部分可見(脫敏顯示)" - } - } -} diff --git a/web/apps/web-ele/src/locales/langs/zh-TW/scheduler.json b/web/apps/web-ele/src/locales/langs/zh-TW/scheduler.json deleted file mode 100644 index f5d7258..0000000 --- a/web/apps/web-ele/src/locales/langs/zh-TW/scheduler.json +++ /dev/null @@ -1,119 +0,0 @@ -{ - "scheduler": "排程器", - "jobList": "任務列表", - "jobDetail": "任務詳情", - "executionLogs": "執行日誌", - "runStatus": "執行狀態", - "running": "執行中", - "stopped": "已停止", - "totalJobs": "總任務數", - "enabledJobs": "啟用任務", - "totalExecutions": "總執行次數", - "successRate": "成功率", - "executionCount": "執行次數", - "failureCount": "失敗次數", - "successCount": "成功次數", - "allJobs": "所有任務", - "runningJobs": "執行中的任務", - "executionRecords": "執行記錄", - "jobSuccessRate": "任務成功率", - "totalRunCount": "總執行次數", - "executionFailed": "執行失敗", - "executionSuccess": "執行成功", - "fetchStatusFailed": "獲取排程器狀態失敗", - "fetchDetailFailed": "獲取任務詳情失敗", - "cardView": "卡片檢視", - "listView": "列表檢視", - "refresh": "重新整理", - "loading": "載入中...", - "noLogs": "暫無日誌記錄", - "allLogsLoaded": "已載入全部日誌", - "retryCount": "重試次數", - "retryTimes": "重試 {count} 次", - "startTime": "開始時間", - "endTime": "結束時間", - "duration": "持續時間", - "executionDuration": "執行耗時(秒)", - "executionResult": "執行結果", - "exceptionInfo": "異常資訊", - "stackTrace": "堆疊追蹤", - "jobName": "任務名稱", - "jobCode": "任務編碼", - "jobGroup": "任務分組", - "triggerType": "觸發器類型", - "cronExpression": "Cron 表達式", - "intervalTime": "間隔時間", - "jobStatus": "任務狀態", - "priority": "優先級", - "maxInstances": "最大執行個體數", - "maxRetries": "錯誤重試次數", - "timeout": "逾時時間", - "timeoutSeconds": "逾時時間(秒)", - "coalesce": "是否合併執行", - "allowConcurrent": "是否允許並發執行", - "remark": "備註", - "remarkPlaceholder": "備註資訊", - "taskFunc": "任務函數路徑", - "taskArgs": "任務位置參數", - "taskKwargs": "任務關鍵字參數", - "cronPlaceholder": "例如: 0 0 * * *(每天凌晨 0 點)", - "intervalPlaceholder": "間隔時間", - "datePlaceholder": "指定執行時間", - "groupPlaceholder": "任務分組,預設為 default", - "argsPlaceholder": "JSON 陣列格式,例如: [\"param1\", \"param2\"]", - "kwargsPlaceholder": "JSON 物件格式,例如: {'{'}'key': 'value'{'}'}", - "required": "{field} 不能為空", - "deleteJob": "刪除任務", - "maxLength": "{field} 長度不能超過 {max} 個字元", - "codeInvalid": "任務編碼只能包含字母、數字和底線", - "createJob": "建立定時任務", - "editJob": "編輯定時任務", - "deleteJobConfirm": "確定要刪除任務 \"{name}\" 嗎?", - "operationSuccess": "操作成功", - "lastRunTime": "上次執行", - "nextRunTime": "下次執行", - "description": "描述", - "triggerCron": "Cron", - "triggerInterval": "間隔", - "triggerDate": "一次性", - "status": { - "enabled": "啟用", - "disabled": "停用", - "paused": "暫停", - "pending": "等待執行", - "running": "執行中", - "success": "執行成功", - "failed": "執行失敗", - "timeout": "執行逾時", - "skipped": "跳過執行", - "waiting": "等待中", - "unknown": "未知" - }, - "unit": { - "seconds": "秒", - "minutes": "分", - "hours": "時", - "days": "天" - }, - "paramType": { - "string": "字串", - "number": "數字", - "boolean": "布林值" - }, - "paramKey": "參數名", - "paramValue": "參數值", - "argValue": "參數值", - "addParam": "新增參數", - "addArg": "新增參數", - "noParams": "暫無參數,點擊下方按鈕新增", - "noArgs": "暫無參數,點擊下方按鈕新增", - "executeNow": "立即執行", - "executeSuccess": "任務 {name} 已開始執行", - "executeFailed": "執行任務失敗", - "executionProgress": "執行進度", - "streaming": "即時推送中", - "streamComplete": "已完成", - "noStreamLogs": "暫無執行日誌", - "waitingForLogs": "等待日誌...", - "viewLiveLogs": "查看即時日誌" -} diff --git a/web/apps/web-ele/src/locales/langs/zh-TW/server-monitor.json b/web/apps/web-ele/src/locales/langs/zh-TW/server-monitor.json deleted file mode 100644 index 66e9efc..0000000 --- a/web/apps/web-ele/src/locales/langs/zh-TW/server-monitor.json +++ /dev/null @@ -1,167 +0,0 @@ -{ - "systemInfo": "系統信息", - "cpuInfo": "CPU信息", - "memoryInfo": "內存信息", - "diskInfo": "磁盤信息", - "networkInfo": "網絡信息", - "processInfo": "進程信息", - "loadFailed": "加載服務器監控數據失敗", - "refreshSuccess": "刷新成功", - "autoRefreshOn": "已開啟自動刷新", - "autoRefreshOff": "已關閉自動刷新", - "autoRefreshing": "自動刷新中", - "paused": "已暫停", - "featureDeveloping": "功能開發中...", - "serverMonitor": "服務器監控", - "uptime": "運行時間", - "days": "天", - "hours": "小時", - "minutes": "分鐘", - "justStarted": "剛剛啟動", - "cpuUsage": "CPU使用率", - "core": "核心", - "memoryUsage": "內存使用率", - "diskUsage": "磁盤使用率", - "totalDiskCapacity": "磁盤總容量", - "networkTraffic3Min": "網絡流量 (近3分鐘)", - "upload": "上傳", - "download": "下載", - "peakUpload": "峰值上傳", - "peakDownload": "峰值下載", - "top10Processes": "Top 10 進程", - "topProcessesCpu": "Top 進程(按CPU使用率排序)", - "processName": "進程名", - "status": "狀態", - "createTime": "創建時間", - "overallUsage": "總體使用率", - "physicalCores": "物理核心", - "coreCount": "核心數量", - "logicalProcessors": "邏輯處理器", - "threadCount": "線程數量", - "basicInfo": "基本信息", - "processorModel": "處理器型號", - "architecture": "架構", - "physicalCoreCount": "物理核心數", - "logicalProcessorCount": "邏輯處理器數", - "currentUsage": "當前使用率", - "frequencyInfo": "頻率信息", - "currentFrequency": "當前頻率", - "maxFrequency": "最大頻率", - "minFrequency": "最小頻率", - "coreUsage": "各核心使用率", - "cpuTimeStats": "CPU 時間統計", - "cpuStatsInfo": "CPU 統計信息", - "systemLoad": "系統負載", - "load1min": "1 分鐘平均負載", - "load5min": "5 分鐘平均負載", - "load15min": "15 分鐘平均負載", - "cpuCoreCount": "CPU 核心數", - "totalMemory": "總內存", - "physicalMemoryTotal": "物理內存總量", - "used": "已使用", - "diskIo": "磁盤IO", - "read": "讀取", - "write": "寫入", - "totalRead": "總讀", - "totalWrite": "總寫", - "networkIo": "網絡IO", - "totalSent": "總發", - "totalReceived": "總收", - "hostname": "主機名", - "ipAddress": "IP地址", - "os": "操作系統", - "processor": "處理器", - "pythonVersion": "Python版本", - "systemStatus": "系統狀態", - "startTime": "啟動時間", - "processCount": "進程數", - "onlineUsers": "在線用戶", - "unitUser": "個", - "updateTime": "更新時間", - "networkUsageTrend": "網絡使用趨勢", - "recentDataPoints": "最近 {count} 個數據點", - "waitingForData": "等待數據中...", - "collectingNetworkData": "正在收集網絡使用數據", - "availableMemory": "可用內存", - "immediatelyAvailable": "可立即使用", - "virtualMemoryRam": "虛擬內存(RAM)", - "memoryUsageStatus": "內存使用情況", - "kernelMemory": "核心內存", - "usedMemory": "已使用內存", - "swapPartition": "交換分區(Swap)", - "swapUsageStatus": "交換分區使用情況", - "swapTotal": "交換分區總量", - "swapAvailable": "可用交換分區", - "swapUsed": "已使用交換分區", - "memoryDistribution": "內存分佈", - "cache": "緩存", - "buffer": "緩衝區", - "activeMemory": "活躍內存", - "inactiveMemory": "非活躍內存", - "freeMemory": "空閒內存", - "realtimeMemoryDetails": "實時內存詳情", - "readSpeed": "讀取速度", - "currentReadRate": "當前讀取速率", - "writeSpeed": "寫入速度", - "currentWriteRate": "當前讀取速率", - "totalRead": "總讀取", - "accumulatedReadData": "累計讀取數據", - "totalWrite": "總寫入", - "accumulatedWriteData": "累計寫入數據", - "diskPartitionList": "磁盤分區列表", - "device": "設備", - "fileSystem": "文件系統", - "totalCapacity": "總容量", - "available": "可用", - "diskIoStats": "磁盤IO統計", - "readStats": "讀取統計", - "totalReadAmount": "總讀取量", - "readCount": "讀取次數", - "readTime": "讀取時間", - "seconds": "秒", - "writeStats": "寫入統計", - "totalWriteAmount": "總寫入量", - "writeCount": "寫入次數", - "writeTime": "寫入時間", - "realtimeDiskIo": "實時磁盤IO", - "uploadSpeed": "上傳速度", - "currentUploadRate": "當前上傳速率", - "downloadSpeed": "下載速度", - "currentDownloadRate": "當前下載速率", - "totalSent": "總發送", - "accumulatedSentData": "累計發送數據", - "totalReceived": "總接收", - "accumulatedReceivedData": "累計接收數據", - "networkInterfaceList": "網絡接口列表", - "online": "在線", - "offline": "離線", - "interfaceName": "接口名稱", - "speed": "速度", - "mtu": "MTU", - "sentBytes": "發送字節", - "receivedBytes": "接收字節", - "networkTrafficStats": "網絡流量統計", - "sentStats": "發送統計", - "totalSentAmount": "總發送量", - "sentPackets": "發送包數", - "sentErrors": "發送錯誤", - "sentDropped": "發送丟包", - "receivedStats": "接收統計", - "totalReceivedAmount": "總接收量", - "receivedPackets": "接收包數", - "receivedErrors": "接收錯誤", - "receivedDropped": "接收丟包", - "realtimeNetworkIo": "實時網絡IO", - "totalProcesses": "總進程數", - "totalSystemProcesses": "系統進程總數", - "running": "運行中", - "runningProcesses": "正在運行的進程", - "sleeping": "休眠中", - "sleepingProcesses": "休眠狀態的進程", - "otherStatus": "其他狀態", - "stoppedZombieStatus": "停止/殭屍等狀態", - "processDistribution": "進程分佈", - "total": "總計", - "resourceUsageRanking": "資源使用排行", - "noProcessData": "暫無進程數據" -} diff --git a/web/apps/web-ele/src/locales/langs/zh-TW/system-config.json b/web/apps/web-ele/src/locales/langs/zh-TW/system-config.json deleted file mode 100644 index a1e50bb..0000000 --- a/web/apps/web-ele/src/locales/langs/zh-TW/system-config.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "title": "系統配置", - "ssoConfig": "SSO配置", - "notifyConfig": "訊息配置", - "modelConfig": "模型配置", - "syncConfig": "同步配置", - "save": "儲存", - "reset": "恢復預設", - "resetConfirm": "確定要恢復該分組為預設配置嗎?這將刪除資料庫中的自訂配置,恢復為環境變數的預設值。", - "saveSuccess": "儲存成功", - "saveError": "儲存失敗", - "resetSuccess": "已恢復為預設配置", - "resetError": "恢復失敗", - "warmupSuccess": "快取預熱完成", - "clearCacheSuccess": "快取已清除", - "secretTip": "敏感欄位,顯示為脫敏值。留空或保持脫敏值不會修改原值。", - "groups": { - "oauth_gitee": "Gitee", - "oauth_github": "GitHub", - "oauth_qq": "QQ", - "oauth_google": "Google", - "oauth_wechat": "微信", - "oauth_microsoft": "Microsoft", - "oauth_dingtalk": "釘釘", - "oauth_feishu": "飛書", - "oauth_wecom": "企業微信", - "notify_email": "郵件通知", - "notify_dingtalk": "釘釘通知", - "notify_feishu": "飛書通知", - "notify_wecom": "企業微信通知", - "notify_sms": "短信通知", - "notify_wechat_mp": "微信公眾號", - "sync_dingtalk": "釘釘", - "sync_wecom": "企業微信", - "sync_feishu": "飛書" - }, - "fields": { - "client_id": "Client ID", - "client_secret": "Client Secret", - "redirect_uri": "Web 回調地址", - "h5_redirect_uri": "H5 回調地址", - "app_id": "App ID", - "app_key": "App Key", - "app_secret": "App Secret", - "corp_id": "Corp ID", - "agent_id": "Agent ID", - "smtp_host": "SMTP 伺服器", - "smtp_port": "SMTP 連接埠", - "smtp_user": "SMTP 使用者名稱", - "smtp_password": "SMTP 密碼", - "smtp_use_tls": "使用 TLS", - "smtp_from_name": "寄件人名稱", - "smtp_from_email": "寄件人信箱", - "webhook_url": "Webhook 地址", - "webhook_secret": "Webhook 密鑰", - "template_id": "範本 ID", - "url": "跳轉連結", - "mini_appid": "小程式 AppID", - "mini_page": "小程式頁面路徑", - "provider": "服務商", - "providerAliyun": "阿里雲", - "providerTencent": "騰訊雲", - "aliyun_access_key_id": "阿里雲 AccessKey ID", - "aliyun_access_key_secret": "阿里雲 AccessKey Secret", - "aliyun_sign_name": "阿里雲短信簽名", - "aliyun_template_code": "阿里雲短信範本編號", - "tencent_secret_id": "騰訊雲 SecretId", - "tencent_secret_key": "騰訊雲 SecretKey", - "tencent_sdk_app_id": "騰訊雲 SDKAppID", - "tencent_sign_name": "騰訊雲短信簽名", - "tencent_template_id": "騰訊雲短信範本 ID", - "todo_pc_url": "待辦 PC 端跳轉地址", - "todo_app_url": "待辦行動端跳轉地址" - } -} diff --git a/web/apps/web-ele/src/locales/langs/zh-TW/system.json b/web/apps/web-ele/src/locales/langs/zh-TW/system.json deleted file mode 100644 index f47cb44..0000000 --- a/web/apps/web-ele/src/locales/langs/zh-TW/system.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "title": "系統管理", - "tool": "系統工具", - "user": { - "selectPost": "選擇崗位", - "selectDept": "選擇部門", - "selectRole": "選擇角色", - "allDept": "全部部門" - } -} diff --git a/web/apps/web-ele/src/locales/langs/zh-TW/ui-config.json b/web/apps/web-ele/src/locales/langs/zh-TW/ui-config.json deleted file mode 100644 index 7e7ac9a..0000000 --- a/web/apps/web-ele/src/locales/langs/zh-TW/ui-config.json +++ /dev/null @@ -1,172 +0,0 @@ -{ - "title": "UI配置管理", - "name": "UI配置", - "styleConfig": "樣式配置", - "configKey": "配置鍵", - "configKeyPlaceholder": "請輸入配置鍵", - "configValue": "配置值", - "configValuePlaceholder": "請輸入配置值(JSON格式)", - "configType": "配置類型", - "configTypePlaceholder": "請選擇配置類型", - "description": "配置描述", - "descriptionPlaceholder": "請輸入配置描述", - "status": "狀態", - "sort": "排序", - "operation": "操作", - "edit": "編輯", - "keyFormatError": "配置鍵只能包含字母、數字、下劃線和短橫線", - "appConfig": "應用配置", - "themeConfig": "主題配置", - "logoConfig": "Logo配置", - "copyrightConfig": "版權配置", - "otherConfig": "其他配置", - "configList": "配置列表", - "configTypes": { - "preferences": "偏好設置", - "theme": "主題", - "logo": "Logo", - "copyright": "版權", - "other": "其他" - }, - "jsonFormatError": "JSON格式錯誤", - "save": "保存", - "saveSuccess": "保存成功", - "saveError": "保存失敗", - "loadSuccess": "加載成功", - "loadError": "加載失敗", - "previewConfig": "預覽配置", - "applyConfig": "應用配置", - "app": { - "title": "應用配置", - "name": "應用名稱", - "namePlaceholder": "請輸入應用名稱", - "defaultHomePath": "默認首頁路徑", - "defaultHomePathPlaceholder": "請輸入默認首頁路徑", - "locale": "默認語言", - "dynamicTitle": "動態標題", - "dynamicTitleTip": "開啟後,頁面標題會根據當前路由動態變化", - "watermark": "水印", - "watermarkTip": "開啟後,頁面會顯示水印", - "watermarkContent": "水印內容", - "watermarkContentPlaceholder": "請輸入水印內容", - "enablePreferences": "啟用偏好設置", - "enablePreferencesTip": "開啟後,用戶可以在界面上修改偏好設置", - "layout": "佈局模式", - "layoutOptions": { - "sidebar-nav": "側邊導航", - "header-nav": "頂部導航", - "mixed-nav": "混合導航", - "header-sidebar-nav": "頂部+側邊導航" - } - }, - "theme": { - "mode": "主題模式", - "modeOptions": { - "light": "淺色", - "dark": "深色", - "auto": "跟隨系統" - }, - "colorPrimary": "主題色", - "radius": "圓角大小", - "builtinType": "內置主題", - "semiDarkSidebar": "深色側邊欄", - "semiDarkHeader": "深色頂欄" - }, - "logo": { - "enable": "啟用Logo", - "source": "Logo圖片", - "sourcePlaceholder": "請輸入Logo圖片URL或上傳", - "fit": "適應方式", - "fitOptions": { - "contain": "包含", - "cover": "覆蓋", - "fill": "填充", - "none": "無", - "scale-down": "縮小" - } - }, - "copyright": { - "enable": "啟用版權", - "companyName": "公司名稱", - "companyNamePlaceholder": "請輸入公司名稱", - "companySiteLink": "公司網站", - "companySiteLinkPlaceholder": "請輸入公司網站鏈接", - "date": "版權年份", - "datePlaceholder": "請輸入版權年份", - "icp": "ICP備案號", - "icpPlaceholder": "請輸入ICP備案號", - "icpLink": "ICP鏈接", - "icpLinkPlaceholder": "請輸入ICP鏈接", - "policeIcp": "公安備案號", - "policeIcpPlaceholder": "請輸入公安備案號", - "policeIcpLink": "公安備案鏈接", - "policeIcpLinkPlaceholder": "請輸入公安備案鏈接", - "loginOnly": "僅登錄頁顯示", - "loginOnlyTip": "開啟後,版權資訊僅在登錄頁面顯示" - }, - "loginConfig": { - "title": "登錄配置", - "enableThirdPartyLogin": "啟用第三方登錄", - "enableThirdPartyLoginTip": "開啟後,登錄頁面將顯示第三方登錄區域", - "enabledProviders": "啟用的登錄方式", - "enabledProvidersTip": "選擇需要在登錄頁面顯示的第三方登錄方式", - "providers": { - "gitee": "Gitee", - "github": "GitHub", - "google": "Google", - "microsoft": "Microsoft", - "qq": "QQ", - "wechat": "微信", - "wecom": "企業微信", - "dingtalk": "釘釘", - "feishu": "飛書" - } - }, - "modelConfig": "模型配置", - "model": { - "title": "模型配置", - "providerManagement": "提供商管理", - "modelManagement": "模型管理", - "addProvider": "添加提供商", - "editProvider": "編輯提供商", - "addModel": "添加模型", - "editModel": "編輯模型", - "addDefaultModels": "添加默認模型", - "providerName": "名稱", - "providerType": "類型", - "providerDescription": "描述", - "apiKey": "API Key", - "apiBase": "API 地址", - "ollamaHost": "Ollama 地址", - "modelName": "模型名稱", - "displayName": "顯示名稱", - "modelType": "模型類型", - "maxTokens": "最大 Token", - "supportsVision": "支持視覺", - "supportsFunction": "支持函數", - "enabled": "啟用", - "status": "狀態", - "operation": "操作", - "test": "測試", - "selectProvider": "選擇提供商", - "chatModel": "對話模型", - "embeddingModel": "向量模型", - "completionModel": "補全模型", - "rerankModel": "重排序模型", - "chat": "對話", - "embedding": "向量", - "rerank": "重排序", - "addSelected": "添加選中", - "noDefaultModels": "暫無默認模型", - "addedModels": "已添加模型", - "availableModels": "可選模型", - "addAll": "全部添加", - "added": "已添加", - "refreshModels": "刷新模型", - "sourceApi": "線上拉取", - "sourceDefault": "默認列表", - "fetchFromApiSuccess": "已從提供商 API 拉取最新模型列表", - "fetchFromApiFallback": "線上拉取失敗,已使用默認模型列表", - "searchModel": "搜索模型" - } -} diff --git a/web/apps/web-ele/src/locales/langs/zh-TW/ui.json b/web/apps/web-ele/src/locales/langs/zh-TW/ui.json deleted file mode 100644 index 277871e..0000000 --- a/web/apps/web-ele/src/locales/langs/zh-TW/ui.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "layout": { - "poweredBy": "AI Agent Admin" - }, - "actionMessage": { - "createSuccess": "創建成功", - "createError": "創建失敗", - "updateSuccess": "更新成功", - "updateError": "更新失敗", - "deleteSuccess": "刪除成功", - "deleteConfirm": "確定要刪除 {0} 嗎?", - "deleteError": "刪除失敗", - "loadError": "加載失敗" - } -} diff --git a/web/apps/web-ele/src/locales/langs/zh-TW/user-avatar.json b/web/apps/web-ele/src/locales/langs/zh-TW/user-avatar.json deleted file mode 100644 index 0331184..0000000 --- a/web/apps/web-ele/src/locales/langs/zh-TW/user-avatar.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "profile": { - "overview": "概述", - "organization": "組織", - "email": "郵箱", - "mobile": "手機", - "department": "部門", - "position": "崗位", - "manager": "主管", - "city": "城市", - "type": "類型" - } -} diff --git a/web/apps/web-ele/src/locales/langs/zh-TW/user.json b/web/apps/web-ele/src/locales/langs/zh-TW/user.json deleted file mode 100644 index d1dc452..0000000 --- a/web/apps/web-ele/src/locales/langs/zh-TW/user.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "name": "用戶", - "title": "用戶管理", - "userName": "用戶名稱", - "account": "登錄賬號", - "avatar": "頭像", - "avatarHelp": "支持jpg、png格式,大小不超過2MB", - "selectAvatar": "選擇頭像", - "email": "郵箱", - "emailFormatError": "請輸入有效的郵箱地址", - "mobile": "手機號", - "mobileFormatError": "請輸入有效的手機號碼", - "gender": "性別", - "unknown": "未知", - "male": "男", - "female": "女", - "birthday": "生日", - "selectBirthday": "選擇生日", - "city": "城市", - "address": "地址", - "bio": "個人簡介", - "bioPlaceholder": "請輸入個人簡介", - "dept": "所屬部門", - "selectDept": "請選擇所屬部門", - "manager": "直屬上級", - "selectManager": "請選擇直屬上級", - "post": "崗位", - "selectPost": "請選擇崗位", - "role": "角色", - "selectRole": "請選擇角色", - "selectUser": "選擇用戶", - "userList": "用戶列表", - "userType": "用戶類型", - "systemUser": "系統用戶", - "normalUser": "普通用戶", - "externalUser": "外部用戶", - "status": "狀態", - "locked": "鎖定", - "createTime": "創建時間", - "operation": "操作", - "resetPassword": "重置密碼", - "cannotDeleteAdmin": "不能刪除管理員賬戶", - "selectUsersToDelete": "請選擇要刪除的用戶", - "batchDeleteTitle": "批量刪除用戶", - "batchDeleteConfirm": "確定刪除 {0} 個用戶嗎?\n{1}", - "batchDelete": "批量刪除", - "deleteSuccess": "成功刪除 {0} 個用戶", - "deleteError": "刪除用戶失敗", - "cannotResetAdminPassword": "不能重置管理員密碼", - "resetPasswordTitle": "重置密碼", - "resetPasswordConfirm": "確定要重置用戶 \"{0}\" 的密碼嗎?\n密碼將重置為:admin123", - "resetPasswordSuccess": "用戶 \"{0}\" 的密碼重置成功", - "resetPasswordError": "重置密碼失敗", - "basicInfo": "基本信息", - "changePassword": "修改密碼", - "oldPassword": "當前密碼", - "newPassword": "新密碼", - "confirmPassword": "確認密碼", - "oldPasswordPlaceholder": "請輸入當前密碼", - "newPasswordPlaceholder": "請輸入新密碼", - "confirmPasswordPlaceholder": "請再次輸入新密碼", - "passwordNotMatch": "兩次輸入的密碼不一致", - "changePasswordSuccess": "密碼修改成功", - "changePasswordError": "密碼修改失敗", - "updateProfileSuccess": "個人信息更新成功", - "updateProfileError": "個人信息更新失敗", - "loadProfileError": "加載個人信息失敗" -} diff --git a/web/apps/web-ele/src/locales/langs/zh-TW/wecom-sync.json b/web/apps/web-ele/src/locales/langs/zh-TW/wecom-sync.json deleted file mode 100644 index f9e1fec..0000000 --- a/web/apps/web-ele/src/locales/langs/zh-TW/wecom-sync.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "title": "企業微信同步配置", - "corpId": "企業ID", - "corpIdPlaceholder": "請輸入企業ID(CorpID)", - "corpSecret": "通訊錄Secret", - "corpSecretPlaceholder": "請輸入通訊錄管理Secret", - "testConnection": "連接測試", - "testSuccess": "連接成功", - "testFail": "連接失敗", - "testing": "測試中...", - "syncScope": "同步範圍", - "syncScopePlaceholder": "請選擇", - "syncScopeTip": "選擇一個組織作為最高級組織進行數據同步,同步成功後該組織不可修改。", - "syncScopeLocked": "已完成首次同步,同步範圍不可修改。如需變更請聯繫管理員。", - "syncStats": "同步統計", - "syncType": "同步類型", - "totalCount": "總數", - "successCount": "同步成功數", - "failCount": "同步失敗數", - "notSynced": "未同步數", - "syncTime": "同步時間", - "operation": "操作", - "sync": "同步", - "syncing": "同步中...", - "syncDept": "組織", - "syncUser": "用戶", - "syncDeptSuccess": "組織架構同步完成", - "syncUserSuccess": "用戶同步完成", - "syncFail": "同步失敗", - "triggerEvents": "觸發事件", - "triggerEvent": "觸發事件", - "description": "描述", - "enableSyncDept": "啟用同步組織", - "enableSyncDeptDesc": "新增、刪除、修改組織信息觸發同步組織事件", - "enableSyncUser": "啟用同步用戶", - "enableSyncUserDesc": "新增、刪除、修改用戶信息觸發同步用戶事件", - "save": "保存", - "saving": "保存中...", - "saveSuccess": "保存成功", - "saveFail": "保存失敗", - "corpName": "企業名稱", - "loadingDeptTree": "載入部門樹中...", - "callbackConfig": "事件回調配置", - "callbackConfigTip": "在企業微信管理後台配置回調地址後,通訊錄變更將即時推送到本系統進行增量同步。", - "callbackUrl": "回調地址", - "callbackUrlPlaceholder": "請輸入回調地址,如 https://example.com/api/core/wecom-sync/callback", - "callbackToken": "回調Token", - "callbackTokenPlaceholder": "請輸入回調Token", - "callbackAesKey": "回調EncodingAESKey", - "callbackAesKeyPlaceholder": "請輸入回調EncodingAESKey(43位字元)", - "callbackStatus": "回調狀態", - "callbackRegistered": "已配置", - "callbackNotRegistered": "未配置", - "subscribedEvents": "已訂閱事件", - "generateRandom": "隨機產生", - "guideTitle": "企業微信同步配置指南", - "guideStep1Title": "取得企業微信通訊錄Secret", - "guideStep1Desc": "登入企業微信管理後台(work.weixin.qq.com),進入「管理工具」->「通訊錄同步」,開啟 API 介面同步,取得通訊錄 Secret。同時在「我的企業」頁面取得企業 ID(CorpID)。", - "guideStep2Title": "填寫憑證資訊", - "guideStep2Desc": "將取得的企業 ID(CorpID)和通訊錄 Secret 填入本頁面對應的輸入框中,點擊「連接測試」驗證憑證是否正確。", - "guideStep3Title": "選擇同步範圍並執行全量同步", - "guideStep3Desc": "連接成功後,在「同步範圍」中選擇需要同步的根部門,然後在同步統計表中依次點擊「同步」按鈕,先同步組織架構,再同步用戶。", - "guideStep4Title": "配置事件回調(即時同步)", - "guideStep4Desc": "在企業微信管理後台「管理工具」->「通訊錄同步」中,設置接收事件伺服器。將本頁面產生的 Token 和 EncodingAESKey 填入企業微信後台,回調地址格式為:https://你的域名/api/core/wecom-sync/callback。同時將相同的值填入本頁面並儲存。", - "guideStep5Title": "啟用觸發事件", - "guideStep5Desc": "在「觸發事件」區域勾選需要自動同步的事件類型(同步組織、同步用戶),儲存配置。之後企業微信通訊錄發生變更時將自動推送到系統進行增量同步。" -} diff --git a/web/apps/web-ele/src/locales/langs/zh-TW/workflow.json b/web/apps/web-ele/src/locales/langs/zh-TW/workflow.json deleted file mode 100644 index fb10697..0000000 --- a/web/apps/web-ele/src/locales/langs/zh-TW/workflow.json +++ /dev/null @@ -1,310 +0,0 @@ -{ - "workflow": "工作流", - "title": "流程標題", - "type": "流程類型", - "status": "狀態", - "currentNode": "當前節點", - "startTime": "發起時間", - "endTime": "完成時間", - "actions": "操作", - "details": "詳情", - "recall": "撤回", - "recallConfirm": "撤回確認", - "recallConfirmMsg": "確定要撤回該流程嗎?撤回後將無法恢復。", - "recallSuccess": "撤回成功", - "recallFailed": "撤回失敗", - "statusMap": { - "pending": "審批中", - "approved": "已通過", - "rejected": "已拒絕", - "canceled": "已撤回", - "transferred": "已轉交" - }, - "nodeName": "處理節點", - "result": "處理結果", - "initiator": "發起人", - "handleTime": "處理時間", - "workflowType": { - "label": "流程類型", - "approval": "審批流程", - "application": "申請流程", - "business": "業務流程", - "hr": "人事流程", - "finance": "財務流程", - "admin": "行政流程", - "other": "其他流程" - }, - "manager": { - "title": "工作流管理", - "add": "新增工作流", - "edit": "編輯工作流", - "view": "查看工作流", - "basicInfo": "基本信息", - "design": "流程設計", - "editInfo": "編輯信息", - "name": "流程名稱", - "code": "流程編碼", - "workflowType": "流程類型", - "icon": "流程圖標", - "iconBgColor": "圖標背景色", - "preview": "預覽", - "form": "關聯表單", - "category": "分類", - "version": "版本", - "updatedAt": "更新時間", - "remark": "流程描述", - "sort": "排序", - "addProcess": "新增流程", - "batchDelete": "批量刪除", - "batchDeleteWithCount": "批量刪除 ({count})", - "publish": "發佈", - "disable": "停用", - "copy": "複製", - "status": { - "draft": "草稿", - "published": "已發佈", - "disabled": "已停用" - }, - "placeholder": { - "title": "請輸入流程標題", - "workflowType": "請選擇流程類型", - "icon": "請選擇流程圖標", - "iconBgColor": "輸入自定義顏色或漸變色", - "status": "請選擇狀態", - "name": "請輸入流程名稱", - "code": "請輸入流程編碼", - "form": "請選擇關聯表單", - "remark": "請輸入流程描述", - "sort": "數值越小越靠前,預設為0", - "copyCode": "請輸入新流程的編碼" - }, - "validate": { - "name": "請輸入流程名稱", - "code": "請輸入流程編碼", - "codeFormat": "編碼必須以字母開頭,只能包含字母、數字和底線", - "form": "請選擇關聯表單", - "design": "流程設計不完整" - }, - "message": { - "deleteConfirm": "確定要刪除這個流程嗎?", - "deleteConfirmTitle": "刪除確認", - "deleteSuccess": "刪除成功", - "selectToDelete": "請先選擇要刪除的流程", - "batchDeleteConfirm": "確定要刪除選中的 {count} 個流程嗎?", - "batchDeleteConfirmTitle": "批量刪除確認", - "publishConfirm": "確定要發佈這個流程嗎?發佈後可被使用。", - "publishConfirmTitle": "發佈確認", - "publishSuccess": "發佈成功", - "disableConfirm": "確定要停用這個流程嗎?停用後將無法發起新流程。", - "disableConfirmTitle": "停用確認", - "disableSuccess": "停用成功", - "copyConfirmTitle": "複製流程", - "copySuccess": "複製成功", - "copySuffix": "副本", - "loadFailed": "加載數據失敗", - "saveSuccess": "保存成功", - "createSuccess": "創建成功" - }, - "autoSave": { - "saving": "保存中...", - "saved": "已保存", - "unsaved": "未保存" - }, - "steps": { - "basic": "基本信息", - "design": "流程設計" - }, - "importExport": { - "export": "匯出配置", - "import": "匯入配置", - "exportSuccess": "流程配置已匯出", - "exportFailed": "匯出失敗", - "importTitle": "匯入流程配置", - "dragOrClick": "拖拽 JSON 檔案到此處或點擊上傳", - "onlyJson": "僅支援 .json 格式檔案", - "fileParseError": "檔案解析失敗,請確認包含 name、code、form_code 欄位", - "checking": "正在檢查...", - "codeConflictTip": "流程編碼已存在,請修改編碼後再匯入", - "codeAvailable": "流程編碼可用,可以匯入", - "newCodePlaceholder": "請輸入新的流程編碼", - "importSuccess": "流程配置匯入成功", - "importFailed": "匯入失敗", - "confirmImport": "確認匯入", - "reselect": "重新選擇", - "workflowInfo": "流程資訊", - "appTip": "匯入的流程將歸屬到當前應用,狀態為草稿", - "bindingTip": "請確認關聯的表單編碼、單據模板編碼在目標環境中存在且已發佈" - } - }, - "pending": { - "title": "待辦審批", - "approval": "審批", - "approve": "通過", - "reject": "拒絕", - "submit": "提交", - "comment": "審批意見", - "commentPlaceholder": "請輸入審批意見", - "result": "審批結果", - "success": "處理成功", - "taskType": "任務類型", - "timeoutStatus": "超時狀態", - "arriveTime": "到達時間", - "isTimeout": "已超時", - "aboutToTimeout": "即將超時", - "deadline": "截止時間", - "daysAfter": "{count}天後", - "hoursAfter": "{count}小時後", - "minutesAfter": "{count}分鐘後", - "view": "查看", - "handle": "辦理", - "modify": "修改", - "cc": "抄送", - "copyDetail": "抄送詳情", - "reviseSubmit": "修改並重新提交", - "copyAction": "抄送操作", - "handleAction": "辦理操作", - "reviseAction": "修改操作", - "approvalAction": "審批操作", - "signComment": "加簽說明", - "delegateComment": "委派說明", - "rejectReason": "拒絕原因", - "returnReason": "駁回原因", - "transferComment": "轉辦說明", - "signPlaceholder": "選填,可輸入加簽說明", - "approvalPlaceholder": "選填,可輸入審批意見", - "delegatePlaceholder": "選填,可輸入委派說明", - "rejectPlaceholder": "請填寫拒絕原因", - "returnPlaceholder": "請填寫駁回原因", - "transferPlaceholder": "選填,可輸入轉辦說明", - "fetchDetailFailed": "加載任務詳情失敗", - "markReadSuccess": "已標記為已閱", - "handleSuccess": "辦理完成", - "actionFailed": "操作失敗", - "selectSignUser": "請選擇加簽人", - "signSuccess": "加簽成功", - "approveSuccess": "審批通過", - "signature": "簽名", - "signaturePlaceholder": "請在此處簽名", - "signatureRequired": "該審批節點要求簽名,請先簽名", - "selectDelegateUser": "請選擇委派人", - "delegateSuccess": "已委派", - "rejectCommentRequired": "拒絕時請填寫審批意見", - "rejectSuccess": "已拒絕", - "returnCommentRequired": "駁回時請填寫審批意見", - "returnSuccess": "已駁回", - "selectTransferUser": "請選擇轉辦人", - "transferSuccess": "已轉辦", - "unsupportedAction": "暫不支持此操作", - "continueHandle": "繼續處理", - "actionSuccess": "操作成功", - "viewHandled": "查看已辦", - "reviseSuccess": "已重新提交", - "markRead": "已閱", - "formContent": "表單內容", - "emptyForm": "暫無表單內容", - "processInfo": "流程信息", - "returnTo": "駁回至", - "initiator": "發起人", - "previousNode": "上一節點", - "transferTo": "轉辦給", - "delegateTo": "委派給", - "signType": "加簽類型", - "beforeSign": "前加簽", - "afterSign": "後加簽", - "parallelSign": "並行加簽", - "beforeSignTip": "加簽人先審批,審批通過後回到您繼續審批", - "afterSignTip": "您先審批通過,再由加簽人審批", - "parallelSignTip": "您和加簽人同時審批", - "signUser": "加簽人", - "selectSignUserPlaceholder": "請選擇加簽人(可多選)", - "handleTip": "請查看表單內容後點擊\"提交\"完成辦理", - "handleComment": "辦理意見", - "handleCommentPlaceholder": "選填,可輸入辦理意見", - "copyTip": "此為抄送任務,僅供查閱。點擊\"已閱\"確認查看。", - "reviseTip": "請修改左側表單內容後點擊\"提交\"重新發起審批。", - "modifyComment": "修改說明", - "modifyCommentPlaceholder": "選填,可輸入修改說明", - "selectTask": "請從左側選擇一個待辦任務", - "approvalInfo": "審批資訊" - }, - "handled": { - "title": "已辦任務" - }, - "initiated": { - "title": "我發起的", - "selectInstance": "請從左側選擇一個流程" - }, - "copy": { - "title": "抄送給我", - "ccNode": "抄送節點", - "ccTime": "抄送時間" - }, - "start": { - "title": "發起流程", - "select": "選擇流程", - "form": "流程表單", - "searchPlaceholder": "搜索流程名稱、編碼或分類", - "fetchFailed": "加載流程列表失敗", - "startSuccess": "流程發起成功,可在審批中心查看進度", - "start": "發起", - "submit": "提交", - "allWorkflows": "全部流程", - "noWorkflows": "暫無可發起的流程", - "workflowTitle": "流程標題", - "titlePlaceholder": "請輸入流程標題,如:張三的請假申請", - "titleHint": "建議格式:申請人 + 流程類型,便於審批人識別", - "formInfo": "表單信息", - "loadConfigFailed": "加載表單配置失敗", - "titleRequired": "請輸入流程標題", - "formInvalid": "請檢查表單填寫是否正確", - "startFailed": "發起流程失敗", - "submitSuccess": "流程發起成功", - "submitSuccessHint": "您的申請已提交,請等待審批", - "workflowName": "流程名稱", - "instanceNo": "流程編號", - "viewDetail": "查看詳情", - "continueStart": "繼續發起", - "backToList": "返回列表", - "approvalPath": "審批路徑", - "showFlow": "顯示流程", - "hideFlow": "關閉流程", - "loadingUsers": "加載中..." - }, - "validation": { - "title": "流程校驗", - "passed": "通過", - "failed": "失敗", - "warning": "警告", - "errorCount": "{count} 個錯誤", - "warningCount": "{count} 個警告", - "validating": "正在校驗流程配置...", - "failedMsg": "校驗未通過,請修正後重試", - "passedMsg": "校驗通過,可以保存流程", - "ready": "準備校驗", - "checkCount": "共 {count} 項檢查", - "confirmSave": "確認保存" - }, - "documents": "流程單據", - "viewDocuments": "查看單據", - "noDocuments": "暫無單據", - "pages": "頁", - "documentTemplates": "綁定文檔模板", - "selectDocumentTemplates": "選擇文檔模板", - "generateDocuments": "生成單據", - "generateDocumentsSuccess": "單據生成成功", - "generateDocumentsFailed": "單據生成失敗", - "regenerateDocuments": "重新生成", - "regenerateDocumentsSuccess": "單據重新生成成功", - "regenerateDocumentsFailed": "單據重新生成失敗", - "instanceManager": { - "title": "流程實例管理", - "detailTitle": "流程實例詳情", - "instanceNo": "流程編號", - "application": "所屬應用", - "searchTitle": "搜索流程標題", - "searchInstanceNo": "搜索流程編號", - "searchWorkflowName": "搜索流程名稱", - "searchInitiator": "搜索發起人", - "searchStatus": "選擇狀態" - } -} diff --git a/web/apps/web-ele/src/router/access.ts b/web/apps/web-ele/src/router/access.ts index 8cc9453..aa82424 100644 --- a/web/apps/web-ele/src/router/access.ts +++ b/web/apps/web-ele/src/router/access.ts @@ -39,16 +39,7 @@ function normalizeViewPath(path: string) { const viewPath = normalizedPath.startsWith('/') ? normalizedPath : `/${normalizedPath}`; - return viewPath - .replace(/^\/views/, '') - .replace( - /^\/online-dev\/page-render\/index(\.vue)?$/, - '/_core/page-render/index$1', - ) - .replace( - /^\/online-development\/page-render\/index(\.vue)?$/, - '/_core/page-render/index$1', - ); + return viewPath.replace(/^\/views/, ''); } function hasPageComponent( @@ -183,22 +174,14 @@ async function generateAccess(options: GenerateMenuAndRoutesOptions) { message: `${$t('common.loadingMenu')}...`, }); - // 获取应用上下文 const appContextStore = useAppContextStore(); + const menus = appContextStore.appCode + ? await getAllMenusApi(appContextStore.appCode) + : await getAllMenusApi(); - // 如果是子应用模式,传递 appCode 过滤应用专属菜单 - if (appContextStore.appCode) { - const menus = await getAllMenusApi(appContextStore.appCode); - return filterAvailableRoutes(menus, routePageMap, layoutMap); - } - - // 主应用模式,不传参数 - const menus = await getAllMenusApi(); return filterAvailableRoutes(menus, routePageMap, layoutMap); }, - // 可以指定没有权限跳转403页面 forbiddenComponent, - // 如果 route.meta.menuVisibleWithForbidden = true layoutMap, pageMap, }); diff --git a/web/apps/web-ele/src/router/routes/modules/chat.ts b/web/apps/web-ele/src/router/routes/modules/chat.ts deleted file mode 100644 index 2573181..0000000 --- a/web/apps/web-ele/src/router/routes/modules/chat.ts +++ /dev/null @@ -1,18 +0,0 @@ -import type { RouteRecordRaw } from 'vue-router'; - -// import { $t } from '#/locales'; - -const routes: RouteRecordRaw[] = [ - // { - // meta: { - // icon: 'lucide:message-square', - // title: $t('chat.title'), - // noBasicLayout: true, - // }, - // name: 'ChatIndex', - // path: '/chat', - // component: () => import('#/views/_core/chat/index.vue'), - // }, -]; - -export default routes; diff --git a/web/apps/web-ele/src/router/routes/modules/demos.ts b/web/apps/web-ele/src/router/routes/modules/demos.ts deleted file mode 100644 index aebfc83..0000000 --- a/web/apps/web-ele/src/router/routes/modules/demos.ts +++ /dev/null @@ -1,5 +0,0 @@ -import type { RouteRecordRaw } from 'vue-router'; - -const routes: RouteRecordRaw[] = []; - -export default routes; diff --git a/web/apps/web-ele/src/utils/column-sql.ts b/web/apps/web-ele/src/utils/column-sql.ts deleted file mode 100644 index fc0a4c1..0000000 --- a/web/apps/web-ele/src/utils/column-sql.ts +++ /dev/null @@ -1,592 +0,0 @@ -import { mapToDbType } from '#/utils/database-types'; -import { - quoteIdentifier, - quoteTable, -} from '#/views/_core/database-manager/utils/sql-identifier'; - -export interface ColumnFieldDefinition { - name: string; - type: string; - length?: number; - precision?: number; - scale?: number; - nullable: boolean; - default?: string; - primaryKey: boolean; - unique: boolean; - comment?: string; -} - -function normalizeDbType(dbType: string): string { - const db = (dbType || 'postgresql').toLowerCase(); - if (db === 'sql server' || db === 'mssql') { - return 'sqlserver'; - } - return db; -} - -function escapeSqlString(value: string): string { - return value.replaceAll("'", "''"); -} - -function buildTypeDef(field: ColumnFieldDefinition, dbType: string): string { - const db = normalizeDbType(dbType); - let typeDef = mapToDbType(field.type, dbType); - - const typesWithLength = [ - 'varchar', - 'char', - 'nvarchar', - 'nchar', - 'varbinary', - 'binary', - ]; - const typesWithPrecision = ['decimal', 'numeric']; - const mysqlTypesWithPrecision = ['float']; - const lowerType = field.type.toLowerCase(); - - if ( - typesWithLength.includes(lowerType) && - field.length && - field.length > 0 - ) { - typeDef += `(${field.length})`; - } else if (typesWithPrecision.includes(lowerType) && field.precision) { - typeDef += field.scale - ? `(${field.precision}, ${field.scale})` - : `(${field.precision})`; - } else if ( - db === 'mysql' && - mysqlTypesWithPrecision.includes(lowerType) && - field.precision - ) { - typeDef += field.scale - ? `(${field.precision}, ${field.scale})` - : `(${field.precision})`; - } - - return typeDef; -} - -export function buildColumnDefinition( - field: ColumnFieldDefinition, - dbType: string, -): string { - const db = normalizeDbType(dbType); - const col = quoteIdentifier(field.name, db); - let def = `${col} ${buildTypeDef(field, dbType)}`; - - if (!field.nullable) { - def += ' NOT NULL'; - } - - if (field.default) { - def += ` DEFAULT ${field.default}`; - } - - if (field.comment && db === 'mysql') { - def += ` COMMENT '${escapeSqlString(field.comment)}'`; - } - - return def; -} - -function buildSqlServerColumnExtendedProperty( - tableName: string, - columnName: string, - comment: string, - schema: string, - isUpdate: boolean, -): string { - const proc = isUpdate ? 'sp_updateextendedproperty' : 'sp_addextendedproperty'; - return `EXEC ${proc} @name=N'MS_Description', @value=N'${escapeSqlString(comment)}', @level0type=N'SCHEMA', @level0name=N'${escapeSqlString(schema)}', @level1type=N'TABLE', @level1name=N'${escapeSqlString(tableName)}', @level2type=N'COLUMN', @level2name=N'${escapeSqlString(columnName)}';`; -} - -function buildSqlServerDropDefaultSql( - tableRef: string, - tableName: string, - columnName: string, - schema: string, -): string { - const schemaName = escapeSqlString(schema || 'dbo'); - const table = escapeSqlString(tableName); - const column = escapeSqlString(columnName); - return `DECLARE @sql NVARCHAR(MAX); -SELECT @sql = N'ALTER TABLE ${tableRef} DROP CONSTRAINT ' + QUOTENAME(dc.name) -FROM sys.default_constraints dc -INNER JOIN sys.columns col ON dc.parent_object_id = col.object_id AND dc.parent_column_id = col.column_id -INNER JOIN sys.tables tab ON col.object_id = tab.object_id -INNER JOIN sys.schemas sch ON tab.schema_id = sch.schema_id -WHERE sch.name = N'${schemaName}' AND tab.name = N'${table}' AND col.name = N'${column}'; -IF @sql IS NOT NULL EXEC sp_executesql @sql;`; -} - -function buildSqlServerTableExtendedProperty( - tableName: string, - comment: string, - schema: string, - isUpdate: boolean, -): string { - const proc = isUpdate ? 'sp_updateextendedproperty' : 'sp_addextendedproperty'; - return `EXEC ${proc} @name=N'MS_Description', @value=N'${escapeSqlString(comment)}', @level0type=N'SCHEMA', @level0name=N'${escapeSqlString(schema)}', @level1type=N'TABLE', @level1name=N'${escapeSqlString(tableName)}';`; -} - -export function buildAddColumnSql( - tableRef: string, - field: ColumnFieldDefinition, - dbType: string, - options?: { schema?: string; tableName?: string; hadComment?: boolean }, -): string[] { - const db = normalizeDbType(dbType); - const columnDef = buildColumnDefinition(field, dbType); - const statements: string[] = []; - - switch (db) { - case 'mysql': { - statements.push(`ALTER TABLE ${tableRef} ADD COLUMN ${columnDef};`); - break; - } - case 'sqlserver': { - statements.push(`ALTER TABLE ${tableRef} ADD ${columnDef};`); - if (field.comment && options?.tableName) { - statements.push( - buildSqlServerColumnExtendedProperty( - options.tableName, - field.name, - field.comment, - options.schema || 'dbo', - false, - ), - ); - } - break; - } - case 'oracle': { - statements.push(`ALTER TABLE ${tableRef} ADD (${columnDef});`); - if (field.comment) { - statements.push( - `COMMENT ON COLUMN ${tableRef}.${quoteIdentifier(field.name, db)} IS '${escapeSqlString(field.comment)}';`, - ); - } - break; - } - case 'postgresql': - default: { - statements.push(`ALTER TABLE ${tableRef} ADD COLUMN ${columnDef};`); - if (field.comment) { - statements.push( - `COMMENT ON COLUMN ${tableRef}.${quoteIdentifier(field.name, db)} IS '${escapeSqlString(field.comment)}';`, - ); - } - break; - } - } - - return statements; -} - -export function buildDropColumnSql( - tableRef: string, - columnName: string, - dbType: string, -): string { - const db = normalizeDbType(dbType); - return `ALTER TABLE ${tableRef} DROP COLUMN ${quoteIdentifier(columnName, db)};`; -} - -export function buildTableCommentAlterSql( - tableRef: string, - tableName: string, - comment: string, - dbType: string, - schema?: string, - hadComment?: boolean, -): string | null { - const db = normalizeDbType(dbType); - const escaped = escapeSqlString(comment); - - switch (db) { - case 'postgresql': - case 'oracle': { - return `COMMENT ON TABLE ${tableRef} IS '${escaped}';`; - } - case 'mysql': { - return `ALTER TABLE ${tableRef} COMMENT = '${escaped}';`; - } - case 'sqlserver': { - return buildSqlServerTableExtendedProperty( - tableName, - comment, - schema || 'dbo', - Boolean(hadComment), - ); - } - default: { - return null; - } - } -} - -export function buildColumnCommentAlterSql( - tableRef: string, - tableName: string, - field: ColumnFieldDefinition, - dbType: string, - schema?: string, - hadComment?: boolean, -): string[] { - const db = normalizeDbType(dbType); - const col = quoteIdentifier(field.name, db); - const comment = field.comment || ''; - const statements: string[] = []; - - switch (db) { - case 'postgresql': - case 'oracle': { - statements.push( - `COMMENT ON COLUMN ${tableRef}.${col} IS '${escapeSqlString(comment)}';`, - ); - break; - } - case 'mysql': { - const columnDef = buildColumnDefinition(field, dbType); - statements.push(`ALTER TABLE ${tableRef} MODIFY COLUMN ${columnDef};`); - break; - } - case 'sqlserver': { - statements.push( - buildSqlServerColumnExtendedProperty( - tableName, - field.name, - comment, - schema || 'dbo', - Boolean(hadComment), - ), - ); - break; - } - default: { - break; - } - } - - return statements; -} - -export function buildFieldAlterSql( - originalFields: ColumnFieldDefinition[], - currentFields: ColumnFieldDefinition[], - tableRef: string, - tableName: string, - dbType: string, - schema?: string, -): string[] { - const db = normalizeDbType(dbType); - const statements: string[] = []; - const colRef = (name: string) => quoteIdentifier(name, db); - - for (const origField of originalFields) { - if (!currentFields.find((f) => f.name === origField.name)) { - statements.push(buildDropColumnSql(tableRef, origField.name, dbType)); - } - } - - for (const field of currentFields) { - if (!originalFields.find((f) => f.name === field.name)) { - statements.push( - ...buildAddColumnSql(tableRef, field, dbType, { - schema, - tableName, - }), - ); - } - } - - for (const field of currentFields) { - const origField = originalFields.find((f) => f.name === field.name); - if (!origField || JSON.stringify(field) === JSON.stringify(origField)) { - continue; - } - - const col = colRef(field.name); - const typeDef = buildTypeDef(field, dbType); - const origTypeDef = buildTypeDef(origField, dbType); - - if (db === 'postgresql') { - const typeChanged = - field.type !== origField.type || - field.length !== origField.length || - field.precision !== origField.precision || - field.scale !== origField.scale; - - if (typeChanged) { - statements.push( - `ALTER TABLE ${tableRef} ALTER COLUMN ${col} TYPE ${typeDef} USING ${col}::${typeDef};`, - ); - } - if (field.nullable !== origField.nullable) { - statements.push( - `ALTER TABLE ${tableRef} ALTER COLUMN ${col} ${field.nullable ? 'DROP NOT NULL' : 'SET NOT NULL'};`, - ); - } - if (field.default !== origField.default) { - if (field.default) { - statements.push( - `ALTER TABLE ${tableRef} ALTER COLUMN ${col} SET DEFAULT ${field.default};`, - ); - } else { - statements.push( - `ALTER TABLE ${tableRef} ALTER COLUMN ${col} DROP DEFAULT;`, - ); - } - } - if (field.unique !== origField.unique) { - if (field.unique) { - statements.push( - `ALTER TABLE ${tableRef} ADD CONSTRAINT ${colRef(`${tableName}_${field.name}_key`)} UNIQUE (${col});`, - ); - } else { - statements.push( - `ALTER TABLE ${tableRef} DROP CONSTRAINT IF EXISTS ${colRef(`${tableName}_${field.name}_key`)};`, - ); - } - } - if (field.primaryKey !== origField.primaryKey) { - if (field.primaryKey) { - statements.push( - `ALTER TABLE ${tableRef} ADD PRIMARY KEY (${col});`, - ); - } else { - statements.push( - `ALTER TABLE ${tableRef} DROP CONSTRAINT IF EXISTS ${colRef(`${tableName}_pkey`)};`, - ); - } - } - if (field.comment !== origField.comment) { - statements.push( - ...buildColumnCommentAlterSql( - tableRef, - tableName, - field, - dbType, - schema, - Boolean(origField.comment), - ), - ); - } - } else if (db === 'mysql') { - statements.push( - `ALTER TABLE ${tableRef} MODIFY COLUMN ${buildColumnDefinition(field, dbType)};`, - ); - - if (field.unique !== origField.unique) { - if (field.unique) { - statements.push( - `ALTER TABLE ${tableRef} ADD UNIQUE INDEX ${colRef(`${tableName}_${field.name}_key`)} (${col});`, - ); - } else { - statements.push( - `ALTER TABLE ${tableRef} DROP INDEX IF EXISTS ${colRef(`${tableName}_${field.name}_key`)};`, - ); - } - } - if (field.primaryKey !== origField.primaryKey) { - if (field.primaryKey) { - statements.push(`ALTER TABLE ${tableRef} ADD PRIMARY KEY (${col});`); - } else { - statements.push(`ALTER TABLE ${tableRef} DROP PRIMARY KEY;`); - } - } - } else if (db === 'sqlserver') { - if (typeDef !== origTypeDef) { - let alterDef = `${col} ${typeDef}`; - alterDef += field.nullable ? ' NULL' : ' NOT NULL'; - statements.push(`ALTER TABLE ${tableRef} ALTER COLUMN ${alterDef};`); - } else if (field.nullable !== origField.nullable) { - let alterDef = `${col} ${typeDef}`; - alterDef += field.nullable ? ' NULL' : ' NOT NULL'; - statements.push(`ALTER TABLE ${tableRef} ALTER COLUMN ${alterDef};`); - } - - if (field.default !== origField.default) { - if (field.default) { - statements.push( - `ALTER TABLE ${tableRef} ADD DEFAULT ${field.default} FOR ${col};`, - ); - } else if (origField.default) { - statements.push( - buildSqlServerDropDefaultSql( - tableRef, - tableName, - field.name, - schema || 'dbo', - ), - ); - } - } - - if (field.comment !== origField.comment) { - statements.push( - ...buildColumnCommentAlterSql( - tableRef, - tableName, - field, - dbType, - schema, - Boolean(origField.comment), - ), - ); - } - - if (field.unique !== origField.unique) { - if (field.unique) { - statements.push( - `ALTER TABLE ${tableRef} ADD CONSTRAINT ${colRef(`${tableName}_${field.name}_key`)} UNIQUE (${col});`, - ); - } else { - statements.push( - `ALTER TABLE ${tableRef} DROP CONSTRAINT ${colRef(`${tableName}_${field.name}_key`)};`, - ); - } - } - if (field.primaryKey !== origField.primaryKey) { - if (field.primaryKey) { - statements.push(`ALTER TABLE ${tableRef} ADD PRIMARY KEY (${col});`); - } else { - statements.push( - `ALTER TABLE ${tableRef} DROP CONSTRAINT ${colRef(`${tableName}_pkey`)};`, - ); - } - } - } else if (db === 'oracle') { - const structureChanged = - typeDef !== origTypeDef || - field.nullable !== origField.nullable || - field.default !== origField.default; - - if (structureChanged) { - let modifyDef = `${col} ${typeDef}`; - modifyDef += field.nullable ? ' NULL' : ' NOT NULL'; - if (field.default !== origField.default) { - modifyDef += field.default - ? ` DEFAULT ${field.default}` - : ' DEFAULT NULL'; - } - statements.push(`ALTER TABLE ${tableRef} MODIFY (${modifyDef});`); - } - - if (field.comment !== origField.comment) { - statements.push( - ...buildColumnCommentAlterSql( - tableRef, - tableName, - field, - dbType, - schema, - Boolean(origField.comment), - ), - ); - } - - if (field.unique !== origField.unique) { - if (field.unique) { - statements.push( - `ALTER TABLE ${tableRef} ADD CONSTRAINT ${colRef(`${tableName}_${field.name}_key`)} UNIQUE (${col});`, - ); - } else { - statements.push( - `ALTER TABLE ${tableRef} DROP CONSTRAINT ${colRef(`${tableName}_${field.name}_key`)};`, - ); - } - } - if (field.primaryKey !== origField.primaryKey) { - if (field.primaryKey) { - statements.push(`ALTER TABLE ${tableRef} ADD PRIMARY KEY (${col});`); - } else { - statements.push( - `ALTER TABLE ${tableRef} DROP CONSTRAINT ${colRef(`${tableName}_pk`)};`, - ); - } - } - } - } - - return statements; -} - -/** 建表后追加表/列注释 SQL */ -export function buildCreateTableCommentSql( - tableName: string, - schema: string | undefined, - dbType: string, - tableComment: string, - fields: ColumnFieldDefinition[], -): string[] { - const db = normalizeDbType(dbType); - const tableRef = quoteTable(schema, tableName, db); - const statements: string[] = []; - - if (tableComment) { - switch (db) { - case 'postgresql': - case 'oracle': { - statements.push( - `COMMENT ON TABLE ${tableRef} IS '${escapeSqlString(tableComment)}';`, - ); - break; - } - case 'mysql': { - statements.push( - `ALTER TABLE ${tableRef} COMMENT = '${escapeSqlString(tableComment)}';`, - ); - break; - } - case 'sqlserver': { - statements.push( - buildSqlServerTableExtendedProperty( - tableName, - tableComment, - schema || 'dbo', - false, - ), - ); - break; - } - default: { - break; - } - } - } - - for (const field of fields) { - if (!field.comment) { - continue; - } - switch (db) { - case 'postgresql': - case 'oracle': { - statements.push( - `COMMENT ON COLUMN ${tableRef}.${quoteIdentifier(field.name, db)} IS '${escapeSqlString(field.comment)}';`, - ); - break; - } - case 'sqlserver': { - statements.push( - buildSqlServerColumnExtendedProperty( - tableName, - field.name, - field.comment, - schema || 'dbo', - false, - ), - ); - break; - } - default: { - break; - } - } - } - - return statements; -} diff --git a/web/apps/web-ele/src/utils/constraint-sql.ts b/web/apps/web-ele/src/utils/constraint-sql.ts deleted file mode 100644 index d60d479..0000000 --- a/web/apps/web-ele/src/utils/constraint-sql.ts +++ /dev/null @@ -1,483 +0,0 @@ -import type { ConstraintInfo } from '#/api/core/database-manager'; - -export interface TableConstraintDefinition { - name: string; - type: string; - definition?: string; - columns?: string[]; - referencedTable?: string; - referencedColumns?: string[]; - onDelete?: string; - onUpdate?: string; -} - -export const FOREIGN_KEY_ACTIONS = [ - 'NO ACTION', - 'RESTRICT', - 'CASCADE', - 'SET NULL', - 'SET DEFAULT', -] as const; - -export type ForeignKeyAction = (typeof FOREIGN_KEY_ACTIONS)[number]; - -export function normalizeForeignKeyAction(value?: string): string { - if (!value) { - return ''; - } - return value.toUpperCase().replaceAll(/\s+/g, ' ').trim(); -} - -export function parseForeignKeyActions(definition?: string): { - onDelete: string; - onUpdate: string; -} { - const result = { onDelete: '', onUpdate: '' }; - if (!definition) { - return result; - } - - const onDeleteMatch = definition.match( - /\sON DELETE (NO ACTION|RESTRICT|CASCADE|SET NULL|SET DEFAULT)\b/i, - ); - const onUpdateMatch = definition.match( - /\sON UPDATE (NO ACTION|RESTRICT|CASCADE|SET NULL|SET DEFAULT)\b/i, - ); - - if (onDeleteMatch?.[1]) { - result.onDelete = normalizeForeignKeyAction(onDeleteMatch[1]); - } - if (onUpdateMatch?.[1]) { - result.onUpdate = normalizeForeignKeyAction(onUpdateMatch[1]); - } - - return result; -} - -function buildForeignKeyActionsSql( - constraint: TableConstraintDefinition, - dbType?: string, -): string { - const db = (dbType || 'postgresql').toLowerCase(); - const supportsOnUpdate = db !== 'sqlserver' && db !== 'oracle' && db !== 'mssql'; - - const parts: string[] = []; - if (constraint.onDelete) { - parts.push(`ON DELETE ${constraint.onDelete}`); - } - if (supportsOnUpdate && constraint.onUpdate) { - parts.push(`ON UPDATE ${constraint.onUpdate}`); - } - return parts.length ? ` ${parts.join(' ')}` : ''; -} - -export function normalizeConstraintType(type: string): string { - const normalized = type.toLowerCase().replaceAll('_', ' ').trim(); - if (normalized === 'primary key' || normalized === 'primary') { - return 'primary'; - } - if (normalized === 'foreign key' || normalized === 'foreign') { - return 'foreign'; - } - if (normalized === 'unique') { - return 'unique'; - } - if (normalized === 'check') { - return 'check'; - } - return normalized; -} - -export function parseForeignKeyFromDefinition(definition?: string): { - columns: string[]; - referencedTable: string; - referencedColumns: string[]; -} { - const empty = { columns: [], referencedTable: '', referencedColumns: [] }; - if (!definition?.trim()) { - return empty; - } - - const match = definition.match( - /FOREIGN KEY\s*\(([^)]+)\)\s*REFERENCES\s*(?:"?([\w$]+)"?\.)?"?([\w$]+)"?\s*\(([^)]+)\)/i, - ); - if (!match) { - return empty; - } - - const parseColumnList = (value: string) => - value - .split(',') - .map((column) => column.trim().replaceAll(/^"|"$/g, '')) - .filter(Boolean); - - return { - columns: parseColumnList(match[1]), - referencedTable: match[3], - referencedColumns: parseColumnList(match[4]), - }; -} - -export function inferForeignKeyLocalColumnFromName( - constraintName?: string, -): string | undefined { - if (!constraintName?.trim()) { - return undefined; - } - const match = constraintName.trim().match(/^fk_(.+)$/i); - return match?.[1]; -} - -export function parseConstraintColumnsFromApi( - type: string, - definition?: string, - constraintName?: string, - apiColumns?: string[], -): { columns: string[]; definition: string } { - const columns = apiColumns?.filter(Boolean) || []; - let normalizedDefinition = definition?.trim() || ''; - - if (columns.length) { - return { columns, definition: normalizedDefinition }; - } - - if (normalizedDefinition) { - const checkNotNullMatch = normalizedDefinition.match( - /CHECK\s*\(\(?\s*"?(\w+)"?\s+IS NOT NULL\s*\)?\)?/i, - ); - if (checkNotNullMatch?.[1]) { - const column = checkNotNullMatch[1]; - return { - columns: [column], - definition: `${column} IS NOT NULL`, - }; - } - - const notNullPrefixMatch = normalizedDefinition.match(/^NOT NULL\s+"?(\w+)"?$/i); - if (notNullPrefixMatch?.[1]) { - const column = notNullPrefixMatch[1]; - return { - columns: [column], - definition: `${column} IS NOT NULL`, - }; - } - - const isNotNullMatch = normalizedDefinition.match(/^"?(\w+)"?\s+IS NOT NULL$/i); - if (isNotNullMatch?.[1]) { - return { - columns: [isNotNullMatch[1]], - definition: normalizedDefinition, - }; - } - } - - if (normalizeConstraintType(type) === 'check' && constraintName) { - const nameMatch = constraintName.match(/_(\w+)_not_null$/i); - if (nameMatch?.[1]) { - const column = nameMatch[1]; - return { - columns: [column], - definition: normalizedDefinition || `${column} IS NOT NULL`, - }; - } - } - - return { columns: [], definition: normalizedDefinition }; -} - -export function mapConstraintFromApi( - con: ConstraintInfo, -): TableConstraintDefinition { - const type = normalizeConstraintType(con.constraint_type || 'check'); - const actions = - type === 'foreign' - ? parseForeignKeyActions(con.definition) - : { onDelete: '', onUpdate: '' }; - - if (type === 'foreign') { - const fkFromDef = parseForeignKeyFromDefinition(con.definition); - const apiColumns = con.columns?.split(', ').filter(Boolean) || []; - const apiReferencedColumns = - con.referenced_columns?.split(', ').filter(Boolean) || []; - - let columns = fkFromDef.columns.length ? fkFromDef.columns : apiColumns; - let referencedTable = fkFromDef.referencedTable || con.referenced_table || ''; - let referencedColumns = fkFromDef.referencedColumns.length - ? fkFromDef.referencedColumns - : apiReferencedColumns; - - if (!columns.length) { - const inferred = inferForeignKeyLocalColumnFromName(con.constraint_name); - if (inferred) { - columns = [inferred]; - } - } - - return { - name: con.constraint_name, - type, - definition: con.definition || '', - columns, - referencedTable, - referencedColumns, - onDelete: actions.onDelete, - onUpdate: actions.onUpdate, - }; - } - - const apiColumns = con.columns?.split(', ').filter(Boolean) || []; - const parsed = parseConstraintColumnsFromApi( - type, - con.definition, - con.constraint_name, - apiColumns, - ); - - return { - name: con.constraint_name, - type, - definition: parsed.definition, - columns: parsed.columns, - referencedTable: con.referenced_table || '', - referencedColumns: - con.referenced_columns?.split(', ').filter(Boolean) || [], - onDelete: actions.onDelete, - onUpdate: actions.onUpdate, - }; -} - -function quoteIdentifier(name: string, dbType: string): string { - if (dbType === 'mysql') { - return `\`${name}\``; - } - if (dbType === 'sqlserver' || dbType === 'sql server') { - return `[${name}]`; - } - if (dbType === 'oracle' || dbType === 'postgresql') { - return `"${name.replace(/"/g, '""')}"`; - } - return `"${name}"`; -} - -function quoteTableRef( - tableName: string, - schema: string | undefined, - dbType: string, -): string { - if (tableName.includes('.')) { - const [schemaName, pureTableName] = tableName.split('.', 2); - return `${quoteIdentifier(schemaName, dbType)}.${quoteIdentifier(pureTableName, dbType)}`; - } - if (schema) { - return `${quoteIdentifier(schema, dbType)}.${quoteIdentifier(tableName, dbType)}`; - } - return quoteIdentifier(tableName, dbType); -} - -function quoteColumnList(columns: string[] | undefined, dbType: string): string { - return (columns || []) - .map((column) => quoteIdentifier(column, dbType)) - .join(', '); -} - -export function buildCreateTableConstraintSql( - constraint: TableConstraintDefinition, - dbType: string, - schema?: string, -): string { - const type = normalizeConstraintType(constraint.type); - const columns = quoteColumnList(constraint.columns, dbType); - let sql = ` CONSTRAINT ${quoteIdentifier(constraint.name, dbType)}`; - - switch (type) { - case 'primary': { - sql += ` PRIMARY KEY (${columns})`; - break; - } - case 'foreign': { - const refTable = quoteTableRef( - constraint.referencedTable || '', - schema, - dbType, - ); - const refColumns = quoteColumnList(constraint.referencedColumns, dbType); - sql += ` FOREIGN KEY (${columns}) REFERENCES ${refTable} (${refColumns})${buildForeignKeyActionsSql(constraint, dbType)}`; - break; - } - case 'unique': { - sql += ` UNIQUE (${columns})`; - break; - } - case 'check': { - sql += ` CHECK (${constraint.definition || ''})`; - break; - } - default: { - return ''; - } - } - - return sql; -} - -export function buildAddConstraintSql( - constraint: TableConstraintDefinition, - tableRef: string, - dbType: string, - schema?: string, -): string { - const type = normalizeConstraintType(constraint.type); - const columns = quoteColumnList(constraint.columns, dbType); - let sql = `ALTER TABLE ${tableRef} ADD CONSTRAINT ${quoteIdentifier(constraint.name, dbType)}`; - - switch (type) { - case 'primary': { - sql += ` PRIMARY KEY (${columns})`; - break; - } - case 'foreign': { - const refTable = quoteTableRef( - constraint.referencedTable || '', - schema, - dbType, - ); - const refColumns = quoteColumnList(constraint.referencedColumns, dbType); - sql += ` FOREIGN KEY (${columns}) REFERENCES ${refTable} (${refColumns})${buildForeignKeyActionsSql(constraint, dbType)}`; - break; - } - case 'unique': { - sql += ` UNIQUE (${columns})`; - break; - } - case 'check': { - sql += ` CHECK (${constraint.definition || ''})`; - break; - } - default: { - break; - } - } - - return `${sql};`; -} - -export function buildDropConstraintSql( - constraint: TableConstraintDefinition, - tableRef: string, - dbType: string, -): string { - const name = quoteIdentifier(constraint.name, dbType); - if (dbType === 'mysql' && normalizeConstraintType(constraint.type) === 'foreign') { - return `ALTER TABLE ${tableRef} DROP FOREIGN KEY ${name};`; - } - return `ALTER TABLE ${tableRef} DROP CONSTRAINT ${name};`; -} - -function normalizeConstraintForCompare( - constraint: TableConstraintDefinition, -): TableConstraintDefinition { - return { - name: constraint.name.trim(), - type: normalizeConstraintType(constraint.type), - definition: constraint.definition?.trim() || '', - columns: [...(constraint.columns || [])], - referencedTable: constraint.referencedTable?.trim() || '', - referencedColumns: [...(constraint.referencedColumns || [])], - onDelete: normalizeForeignKeyAction(constraint.onDelete), - onUpdate: normalizeForeignKeyAction(constraint.onUpdate), - }; -} - -export function constraintEquals( - left: TableConstraintDefinition, - right: TableConstraintDefinition, -): boolean { - return ( - JSON.stringify(normalizeConstraintForCompare(left)) === - JSON.stringify(normalizeConstraintForCompare(right)) - ); -} - -export function buildConstraintAlterSql( - originalConstraints: TableConstraintDefinition[], - currentConstraints: TableConstraintDefinition[], - tableRef: string, - dbType: string, - schema?: string, -): string[] { - const statements: string[] = []; - const originalMap = new Map( - originalConstraints.map((item) => [item.name, item]), - ); - const currentMap = new Map(currentConstraints.map((item) => [item.name, item])); - - for (const original of originalConstraints) { - const current = currentMap.get(original.name); - if (!current) { - statements.push(buildDropConstraintSql(original, tableRef, dbType)); - continue; - } - if (!constraintEquals(original, current)) { - statements.push(buildDropConstraintSql(original, tableRef, dbType)); - statements.push(buildAddConstraintSql(current, tableRef, dbType, schema)); - } - } - - for (const current of currentConstraints) { - if (!originalMap.has(current.name)) { - statements.push(buildAddConstraintSql(current, tableRef, dbType, schema)); - } - } - - return statements; -} - -export interface ConstraintValidateResult { - valid: boolean; - errorKey?: - | 'constraintNameRequired' - | 'constraintColumnsRequired' - | 'constraintCheckDefinitionRequired' - | 'constraintReferencedTableRequired' - | 'constraintReferencedColumnsRequired' - | 'constraintReferencedColumnsMismatch'; -} - -export function validateConstraints( - constraints: TableConstraintDefinition[], -): ConstraintValidateResult { - for (const constraint of constraints) { - if (!constraint.name?.trim()) { - return { valid: false, errorKey: 'constraintNameRequired' }; - } - - if (!constraint.columns?.length) { - return { valid: false, errorKey: 'constraintColumnsRequired' }; - } - - const type = normalizeConstraintType(constraint.type); - if (type === 'check' && !constraint.definition?.trim()) { - return { valid: false, errorKey: 'constraintCheckDefinitionRequired' }; - } - - if (type === 'foreign') { - if (!constraint.referencedTable?.trim()) { - return { valid: false, errorKey: 'constraintReferencedTableRequired' }; - } - if (!constraint.referencedColumns?.length) { - return { - valid: false, - errorKey: 'constraintReferencedColumnsRequired', - }; - } - if (constraint.columns.length !== constraint.referencedColumns.length) { - return { - valid: false, - errorKey: 'constraintReferencedColumnsMismatch', - }; - } - } - } - - return { valid: true }; -} diff --git a/web/apps/web-ele/src/utils/database-types.ts b/web/apps/web-ele/src/utils/database-types.ts deleted file mode 100644 index f6e68e4..0000000 --- a/web/apps/web-ele/src/utils/database-types.ts +++ /dev/null @@ -1,393 +0,0 @@ -import { computed } from 'vue'; - -import { $t } from '@vben/locales'; - -// 数据类型定义 -export interface DataTypeOption { - label: string; - value: string; - hasLength?: boolean; - hasPrecision?: boolean; - desc: string; -} - -/** - * 通用数据类型列表 - * - * 前端统一使用通用类型,后端根据数据库类型自动转换: - * - varchar: PostgreSQL=VARCHAR, MySQL=VARCHAR, SQL Server=VARCHAR - * - text: PostgreSQL=TEXT, MySQL=TEXT, SQL Server=TEXT - * - int: PostgreSQL=INTEGER, MySQL=INT, SQL Server=INT - * - bigint: PostgreSQL=BIGINT, MySQL=BIGINT, SQL Server=BIGINT - * - smallint: PostgreSQL=SMALLINT, MySQL=SMALLINT, SQL Server=SMALLINT - * - decimal: PostgreSQL=DECIMAL, MySQL=DECIMAL, SQL Server=DECIMAL - * - float: PostgreSQL=REAL, MySQL=FLOAT, SQL Server=FLOAT - * - double: PostgreSQL=DOUBLE PRECISION, MySQL=DOUBLE, SQL Server=FLOAT - * - datetime: PostgreSQL=TIMESTAMP, MySQL=DATETIME, SQL Server=DATETIME2 - * - date: PostgreSQL=DATE, MySQL=DATE, SQL Server=DATE - * - time: PostgreSQL=TIME, MySQL=TIME, SQL Server=TIME - * - boolean: PostgreSQL=BOOLEAN, MySQL=TINYINT(1), SQL Server=BIT - * - json: PostgreSQL=JSON, MySQL=JSON, SQL Server=NVARCHAR(MAX) - */ -export const commonDataTypes = computed(() => [ - { - label: 'VARCHAR', - value: 'varchar', - hasLength: true, - desc: $t('database-manager.dataTypes.varchar'), - }, - { - label: 'CHAR', - value: 'char', - hasLength: true, - desc: $t('database-manager.dataTypes.char'), - }, - { label: 'TEXT', value: 'text', desc: $t('database-manager.dataTypes.text') }, - { label: 'INT', value: 'int', desc: $t('database-manager.dataTypes.int') }, - { - label: 'BIGINT', - value: 'bigint', - desc: $t('database-manager.dataTypes.bigint'), - }, - { - label: 'SMALLINT', - value: 'smallint', - desc: $t('database-manager.dataTypes.smallint'), - }, - { - label: 'DECIMAL', - value: 'decimal', - hasPrecision: true, - desc: $t('database-manager.dataTypes.decimal'), - }, - { - label: 'NUMERIC', - value: 'numeric', - hasPrecision: true, - desc: $t('database-manager.dataTypes.numeric'), - }, - { - label: 'FLOAT', - value: 'float', - desc: $t('database-manager.dataTypes.float'), - }, - { - label: 'DOUBLE', - value: 'double', - desc: $t('database-manager.dataTypes.double'), - }, - { - label: 'DATETIME', - value: 'datetime', - desc: $t('database-manager.dataTypes.datetime'), - }, - { label: 'DATE', value: 'date', desc: $t('database-manager.dataTypes.date') }, - { label: 'TIME', value: 'time', desc: $t('database-manager.dataTypes.time') }, - { - label: 'BOOLEAN', - value: 'boolean', - desc: $t('database-manager.dataTypes.boolean'), - }, - { label: 'JSON', value: 'json', desc: $t('database-manager.dataTypes.json') }, -]); - -// 保留旧的类型列表以兼容现有代码(已弃用,建议使用 commonDataTypes) -export const postgresqlTypes = commonDataTypes; -export const mysqlTypes = commonDataTypes; -export const sqlserverTypes = commonDataTypes; - -// 根据数据库类型获取数据类型列表(统一返回通用类型) -export function getDataTypesByDbType(_dbType: string): DataTypeOption[] { - // 统一使用通用类型,后端会根据数据库类型自动转换 - return commonDataTypes.value; -} - -// 判断字段类型是否需要长度 -export function typeHasLength(types: DataTypeOption[], type: string): boolean { - const typeOption = types.find((t) => t.value === type); - return typeOption?.hasLength || false; -} - -// 判断字段类型是否需要精度(小数位) -export function typeHasPrecision( - types: DataTypeOption[], - type: string, -): boolean { - const typeOption = types.find((t) => t.value === type); - return typeOption?.hasPrecision || false; -} - -// NUMERIC 类型默认值 -export const NUMERIC_DEFAULT_LENGTH = 10; -export const NUMERIC_DEFAULT_SCALE = 2; - -export interface DbColumnLike { - column_name: string; - data_type: string; - character_maximum_length?: null | number; - numeric_precision?: null | number; - numeric_scale?: null | number; - is_nullable: boolean; - column_default?: null | string; - is_primary_key: boolean; - is_unique: boolean; - description?: null | string; -} - -export interface MappedTableField { - name: string; - type: string; - length?: number; - precision?: number; - scale?: number; - nullable: boolean; - default?: string; - primaryKey: boolean; - unique: boolean; - comment?: string; -} - -/** 将 SQL Server INFORMATION_SCHEMA 默认值格式规范化为可读形式,如 ((0)) -> 0 */ -export function normalizeColumnDefault( - defaultValue?: null | string, - dbType?: string, -): string | undefined { - if (defaultValue == null || defaultValue === '') { - return undefined; - } - - const db = (dbType || '').toLowerCase(); - if (db !== 'sqlserver' && db !== 'mssql' && db !== 'sql server') { - return defaultValue.trim() || undefined; - } - - let value = defaultValue.trim(); - while (value.startsWith('(') && value.endsWith(')')) { - value = value.slice(1, -1).trim(); - } - - if (!value || value.toUpperCase() === 'NULL') { - return undefined; - } - - return value; -} - -/** 将数据库列信息映射为表设计器字段(含 NUMERIC 精度兼容) */ -export function mapDbColumnToField( - col: DbColumnLike, - dbType?: string, -): MappedTableField { - const type = normalizeDbType(col.data_type); - let length = col.character_maximum_length ?? undefined; - let precision = col.numeric_precision ?? undefined; - let scale = col.numeric_scale ?? undefined; - - // 兼容旧版 UI 误将精度写入 length 的情况 - if ( - (type === 'numeric' || type === 'decimal') && - precision == null && - length != null - ) { - precision = length; - length = undefined; - } - - return { - name: col.column_name, - type, - length, - precision, - scale, - nullable: col.is_nullable, - default: normalizeColumnDefault(col.column_default, dbType), - primaryKey: col.is_primary_key, - unique: col.is_unique, - comment: col.description ?? undefined, - }; -} - -/** - * 数据库返回类型到通用类型的映射表 - * 用于将数据库返回的原生类型(如 INTEGER, TIMESTAMP)标准化为前端通用类型(如 int, datetime) - */ -const DB_TYPE_TO_COMMON_TYPE: Record = { - // PostgreSQL 类型映射 - integer: 'int', - int4: 'int', - int8: 'bigint', - int2: 'smallint', - 'double precision': 'double', - float4: 'float', - float8: 'double', - real: 'float', - timestamp: 'datetime', - 'timestamp without time zone': 'datetime', - 'timestamp with time zone': 'datetime', - timestamptz: 'datetime', - bool: 'boolean', - jsonb: 'json', - 'character varying': 'varchar', - character: 'char', - - // MySQL 类型映射 - tinyint: 'boolean', - 'tinyint(1)': 'boolean', - - // SQL Server 类型映射 - datetime2: 'datetime', - bit: 'boolean', - 'nvarchar(max)': 'json', - nvarchar: 'varchar', - nchar: 'char', - - // Oracle 类型映射 - varchar2: 'varchar', - nvarchar2: 'varchar', - number: 'numeric', - clob: 'text', - nclob: 'text', - blob: 'binary', - binary_float: 'float', - binary_double: 'double', - 'timestamp(6)': 'datetime', -}; - -/** - * 将数据库返回的类型标准化为前端通用类型 - * @param dbType 数据库返回的原生类型(如 INTEGER, TIMESTAMP, varchar(255)) - * @returns 标准化后的通用类型(如 int, datetime, varchar) - */ -export function normalizeDbType(dbType: string): string { - if (!dbType) return 'varchar'; - - // 转小写并去除首尾空格 - const lowerType = dbType.toLowerCase().trim(); - - // 先尝试直接匹配 - if (DB_TYPE_TO_COMMON_TYPE[lowerType]) { - return DB_TYPE_TO_COMMON_TYPE[lowerType]; - } - - // 处理带长度的类型,如 varchar(255) -> varchar, numeric(10,2) -> numeric - const baseType = lowerType.replace(/\(.*\)$/, '').trim(); - - // 再次尝试匹配基础类型 - if (DB_TYPE_TO_COMMON_TYPE[baseType]) { - return DB_TYPE_TO_COMMON_TYPE[baseType]; - } - - // 检查是否已经是通用类型 - const commonTypeValues = commonDataTypes.value.map((t) => t.value); - if (commonTypeValues.includes(baseType)) { - return baseType; - } - - // 默认返回原类型(小写) - return baseType; -} - -/** - * 通用类型到数据库特定类型的映射表 - * 用于生成 SQL 时将通用类型(如 int, datetime)转换为数据库特定类型(如 INTEGER, TIMESTAMP) - */ -const COMMON_TYPE_TO_DB_TYPE: Record> = { - postgresql: { - int: 'INTEGER', - bigint: 'BIGINT', - smallint: 'SMALLINT', - float: 'REAL', - double: 'DOUBLE PRECISION', - datetime: 'TIMESTAMP', - boolean: 'BOOLEAN', - json: 'JSON', - varchar: 'VARCHAR', - char: 'CHAR', - text: 'TEXT', - decimal: 'DECIMAL', - numeric: 'NUMERIC', - date: 'DATE', - time: 'TIME', - }, - mysql: { - int: 'INT', - bigint: 'BIGINT', - smallint: 'SMALLINT', - float: 'FLOAT', - double: 'DOUBLE', - datetime: 'DATETIME', - boolean: 'TINYINT(1)', - json: 'JSON', - varchar: 'VARCHAR', - char: 'CHAR', - text: 'TEXT', - decimal: 'DECIMAL', - numeric: 'DECIMAL', - date: 'DATE', - time: 'TIME', - }, - sqlserver: { - int: 'INT', - bigint: 'BIGINT', - smallint: 'SMALLINT', - float: 'FLOAT', - double: 'FLOAT', - datetime: 'DATETIME2', - boolean: 'BIT', - json: 'NVARCHAR(MAX)', - // 中文等 Unicode 必须用 N* 类型,VARCHAR/CHAR/TEXT 会落成问号 - varchar: 'NVARCHAR', - char: 'NCHAR', - text: 'NVARCHAR(MAX)', - decimal: 'DECIMAL', - numeric: 'NUMERIC', - date: 'DATE', - time: 'TIME', - }, - oracle: { - int: 'NUMBER', - bigint: 'NUMBER', - smallint: 'NUMBER', - float: 'BINARY_FLOAT', - double: 'BINARY_DOUBLE', - datetime: 'TIMESTAMP', - boolean: 'NUMBER(1)', - json: 'CLOB', - varchar: 'VARCHAR2', - char: 'CHAR', - text: 'CLOB', - decimal: 'NUMBER', - numeric: 'NUMBER', - date: 'DATE', - time: 'TIMESTAMP', - }, -}; - -/** - * 将通用类型转换为数据库特定类型(用于生成 SQL) - * @param commonType 通用类型(如 int, datetime, varchar) - * @param dbType 数据库类型(postgresql, mysql, sqlserver, oracle) - * @returns 数据库特定类型(如 INTEGER, TIMESTAMP, VARCHAR) - */ -export function mapToDbType(commonType: string, dbType: string): string { - if (!commonType) return 'VARCHAR'; - - const lowerCommonType = commonType.toLowerCase().trim(); - let lowerDbType = dbType.toLowerCase().trim(); - if (lowerDbType === 'mssql' || lowerDbType === 'sql server') { - lowerDbType = 'sqlserver'; - } - - // 获取对应数据库的映射表,默认使用 PostgreSQL - const typeMap: Record = - COMMON_TYPE_TO_DB_TYPE[lowerDbType] ?? COMMON_TYPE_TO_DB_TYPE.postgresql!; - - // 查找映射 - const mappedType = typeMap[lowerCommonType]; - if (mappedType) { - return mappedType; - } - - // 如果没有映射,返回原类型的大写形式 - return commonType.toUpperCase(); -} diff --git a/web/apps/web-ele/src/utils/index-sql.ts b/web/apps/web-ele/src/utils/index-sql.ts deleted file mode 100644 index 3d1496c..0000000 --- a/web/apps/web-ele/src/utils/index-sql.ts +++ /dev/null @@ -1,217 +0,0 @@ -import { - quoteIdentifier, - quoteTable, -} from '#/views/_core/database-manager/utils/sql-identifier'; - -export interface IndexDefinition { - name: string; - type: string; - columns: string[]; - unique: boolean; -} - -function normalizeDbType(dbType: string): string { - const db = (dbType || 'postgresql').toLowerCase(); - if (db === 'sql server' || db === 'mssql') { - return 'sqlserver'; - } - return db; -} - -/** 将后端返回的 index_type 规范化为前端枚举值 */ -export function normalizeIndexType( - indexType: string | undefined, - dbType: string, -): string { - const db = normalizeDbType(dbType); - const raw = (indexType || '').toLowerCase().replaceAll(/\s+/g, '_'); - - if (db === 'postgresql') { - if (['btree', 'hash', 'gin', 'gist', 'brin'].includes(raw)) { - return raw; - } - return 'btree'; - } - if (db === 'mysql') { - if (raw === 'hash') { - return 'hash'; - } - return 'btree'; - } - if (db === 'sqlserver') { - if (raw.includes('clustered') && !raw.includes('non')) { - return 'clustered'; - } - if (raw === 'hash') { - return 'hash'; - } - return 'nonclustered'; - } - if (db === 'oracle') { - if (raw.includes('bitmap')) { - return 'bitmap'; - } - return 'normal'; - } - return 'btree'; -} - -function quoteColumnList(columns: string[], dbType: string): string { - return columns - .map((column) => quoteIdentifier(column, dbType)) - .join(', '); -} - -function buildSqlServerIndexTypeClause(indexType: string): string { - const type = indexType.toLowerCase(); - if (type === 'clustered') { - return 'CLUSTERED '; - } - if (type === 'hash') { - return 'NONCLUSTERED '; - } - return 'NONCLUSTERED '; -} - -function buildOracleIndexTypeClause(indexType: string): string { - if (indexType.toLowerCase() === 'bitmap') { - return 'BITMAP '; - } - return ''; -} - -export function buildCreateIndexSql( - index: IndexDefinition, - tableRef: string, - dbType: string, - _schema?: string, -): string { - const db = normalizeDbType(dbType); - const indexName = quoteIdentifier(index.name, db); - const indexColumns = quoteColumnList(index.columns, db); - const uniquePrefix = index.unique ? 'UNIQUE ' : ''; - - switch (db) { - case 'mysql': { - const indexKeyword = index.unique ? 'UNIQUE INDEX' : 'INDEX'; - return `CREATE ${indexKeyword} ${indexName} ON ${tableRef} (${indexColumns});`; - } - case 'sqlserver': { - const typeClause = buildSqlServerIndexTypeClause(index.type); - return `CREATE ${uniquePrefix}${typeClause}INDEX ${indexName} ON ${tableRef} (${indexColumns});`; - } - case 'oracle': { - const typeClause = buildOracleIndexTypeClause(index.type); - return `CREATE ${uniquePrefix}${typeClause}INDEX ${indexName} ON ${tableRef} (${indexColumns});`; - } - case 'postgresql': - default: { - const method = (index.type || 'btree').toUpperCase(); - const indexKeyword = index.unique ? 'UNIQUE INDEX' : 'INDEX'; - return `CREATE ${indexKeyword} ${indexName} ON ${tableRef} USING ${method} (${indexColumns});`; - } - } -} - -export function buildDropIndexSql( - index: IndexDefinition, - tableRef: string, - dbType: string, - schema?: string, -): string { - const db = normalizeDbType(dbType); - const indexName = quoteIdentifier(index.name, db); - - switch (db) { - case 'mysql': { - return `DROP INDEX ${indexName} ON ${tableRef};`; - } - case 'sqlserver': { - return `DROP INDEX ${indexName} ON ${tableRef};`; - } - case 'oracle': { - if (schema) { - return `DROP INDEX ${quoteIdentifier(schema, db)}.${indexName};`; - } - return `DROP INDEX ${indexName};`; - } - case 'postgresql': - default: { - if (schema) { - return `DROP INDEX IF EXISTS ${quoteIdentifier(schema, db)}.${indexName};`; - } - return `DROP INDEX IF EXISTS ${indexName};`; - } - } -} - -function normalizeIndexForCompare(index: IndexDefinition): IndexDefinition { - return { - name: index.name.trim(), - type: (index.type || 'btree').toLowerCase(), - columns: [...index.columns], - unique: index.unique, - }; -} - -export function indexEquals( - left: IndexDefinition, - right: IndexDefinition, -): boolean { - return ( - JSON.stringify(normalizeIndexForCompare(left)) === - JSON.stringify(normalizeIndexForCompare(right)) - ); -} - -export function buildIndexAlterSql( - originalIndexes: IndexDefinition[], - currentIndexes: IndexDefinition[], - tableRef: string, - dbType: string, - schema?: string, -): string[] { - const statements: string[] = []; - const originalMap = new Map( - originalIndexes.map((item) => [item.name, item]), - ); - const currentMap = new Map(currentIndexes.map((item) => [item.name, item])); - - for (const original of originalIndexes) { - const current = currentMap.get(original.name); - if (!current) { - statements.push(buildDropIndexSql(original, tableRef, dbType, schema)); - continue; - } - if (!indexEquals(original, current)) { - statements.push(buildDropIndexSql(original, tableRef, dbType, schema)); - statements.push(buildCreateIndexSql(current, tableRef, dbType, schema)); - } - } - - for (const current of currentIndexes) { - if (!originalMap.has(current.name)) { - statements.push(buildCreateIndexSql(current, tableRef, dbType, schema)); - } - } - - return statements; -} - -/** 解析 API 索引数据为编辑器格式 */ -export function mapIndexFromApi( - idx: { - index_name: string; - index_type?: string; - columns?: string; - is_unique?: boolean; - }, - dbType: string, -): IndexDefinition { - return { - name: idx.index_name, - type: normalizeIndexType(idx.index_type, dbType), - columns: idx.columns?.split(', ').filter(Boolean) || [], - unique: Boolean(idx.is_unique), - }; -} diff --git a/web/apps/web-ele/src/utils/legacy-home.ts b/web/apps/web-ele/src/utils/legacy-home.ts index 4d1f25a..caa88d3 100644 --- a/web/apps/web-ele/src/utils/legacy-home.ts +++ b/web/apps/web-ele/src/utils/legacy-home.ts @@ -3,8 +3,6 @@ import { preferences } from '@vben/preferences'; const LEGACY_HOME_PATTERNS = [ /^\/app\/[^/]+\/form-render\//, /^\/form-render\//, - /^\/online-dev(?:\/|$)/, - /^\/online-development(?:\/|$)/, ]; function decodePath(path: string) { diff --git a/web/apps/web-ele/src/views/_core/about/index.vue b/web/apps/web-ele/src/views/_core/about/index.vue deleted file mode 100644 index 4189a77..0000000 --- a/web/apps/web-ele/src/views/_core/about/index.vue +++ /dev/null @@ -1,25 +0,0 @@ - - - diff --git a/web/apps/web-ele/src/views/_core/account-settings/api-token-management.vue b/web/apps/web-ele/src/views/_core/account-settings/api-token-management.vue deleted file mode 100644 index cd7072d..0000000 --- a/web/apps/web-ele/src/views/_core/account-settings/api-token-management.vue +++ /dev/null @@ -1,330 +0,0 @@ - - - diff --git a/web/apps/web-ele/src/views/_core/account-settings/data.ts b/web/apps/web-ele/src/views/_core/account-settings/data.ts deleted file mode 100644 index 5886178..0000000 --- a/web/apps/web-ele/src/views/_core/account-settings/data.ts +++ /dev/null @@ -1,165 +0,0 @@ -import type { VbenFormSchema } from '#/adapter/form'; - -import { $t } from '@vben/locales'; - -import { z } from '#/adapter/form'; - -/** - * 获取性别选项 - */ -export function getGenderOptions() { - return [ - { label: $t('user.unknown'), value: 0 }, - { label: $t('user.male'), value: 1 }, - { label: $t('user.female'), value: 2 }, - ]; -} - -/** - * 获取基本信息表单配置 - */ -export function getProfileFormSchema(): VbenFormSchema[] { - return [ - { - component: 'Input', - fieldName: 'name', - label: $t('user.userName'), - rules: z - .string() - .min(2, $t('ui.formRules.minLength', [$t('user.userName'), 2])) - .max(64, $t('ui.formRules.maxLength', [$t('user.userName'), 64])) - .optional() - .or(z.literal('')), - }, - { - component: 'ImageSelector', - componentProps: { - enableCrop: true, - cropShape: 'circle', - maxSize: 2, - placeholder: $t('user.selectAvatar'), - }, - fieldName: 'avatar', - label: $t('user.avatar'), - help: $t('user.avatarHelp'), - }, - { - component: 'Input', - fieldName: 'email', - label: $t('user.email'), - rules: z - .string() - .email($t('user.emailFormatError')) - .max(255, $t('ui.formRules.maxLength', [$t('user.email'), 255])) - .optional() - .or(z.literal('')), - }, - { - component: 'Input', - fieldName: 'mobile', - label: $t('user.mobile'), - rules: z - .string() - .regex(/^1[3-9]\d{9}$/, $t('user.mobileFormatError')) - .optional() - .or(z.literal('')), - }, - { - component: 'RadioGroup', - componentProps: { - buttonStyle: 'solid', - options: getGenderOptions(), - isButton: true, - }, - defaultValue: 0, - fieldName: 'gender', - label: $t('user.gender'), - }, - { - component: 'DatePicker', - componentProps: { - placeholder: $t('user.selectBirthday'), - valueFormat: 'YYYY-MM-DD', - }, - fieldName: 'birthday', - label: $t('user.birthday'), - }, - { - component: 'Input', - fieldName: 'city', - label: $t('user.city'), - rules: z - .string() - .max(100, $t('ui.formRules.maxLength', [$t('user.city'), 100])) - .optional() - .or(z.literal('')), - }, - { - component: 'Input', - fieldName: 'address', - label: $t('user.address'), - rules: z - .string() - .max(200, $t('ui.formRules.maxLength', [$t('user.address'), 200])) - .optional() - .or(z.literal('')), - }, - { - component: 'Textarea', - componentProps: { - placeholder: $t('user.bioPlaceholder'), - rows: 3, - }, - fieldName: 'bio', - label: $t('user.bio'), - }, - ]; -} - -/** - * 获取密码修改表单配置 - */ -export function getPasswordFormSchema(): VbenFormSchema[] { - return [ - { - component: 'Input', - componentProps: { - type: 'password', - showPassword: true, - placeholder: $t('user.oldPasswordPlaceholder'), - }, - fieldName: 'old_password', - label: $t('user.oldPassword'), - rules: z - .string() - .min(1, $t('ui.formRules.required', [$t('user.oldPassword')])), - }, - { - component: 'Input', - componentProps: { - type: 'password', - showPassword: true, - placeholder: $t('user.newPasswordPlaceholder'), - }, - fieldName: 'new_password', - label: $t('user.newPassword'), - rules: z - .string() - .min(6, $t('ui.formRules.minLength', [$t('user.newPassword'), 6])) - .max(20, $t('ui.formRules.maxLength', [$t('user.newPassword'), 20])), - }, - { - component: 'Input', - componentProps: { - type: 'password', - showPassword: true, - placeholder: $t('user.confirmPasswordPlaceholder'), - }, - fieldName: 'confirm_password', - label: $t('user.confirmPassword'), - rules: z - .string() - .min(1, $t('ui.formRules.required', [$t('user.confirmPassword')])), - }, - ]; -} diff --git a/web/apps/web-ele/src/views/_core/account-settings/device-item.vue b/web/apps/web-ele/src/views/_core/account-settings/device-item.vue deleted file mode 100644 index 5973798..0000000 --- a/web/apps/web-ele/src/views/_core/account-settings/device-item.vue +++ /dev/null @@ -1,137 +0,0 @@ - - - - - diff --git a/web/apps/web-ele/src/views/_core/account-settings/device-management.vue b/web/apps/web-ele/src/views/_core/account-settings/device-management.vue deleted file mode 100644 index 571d579..0000000 --- a/web/apps/web-ele/src/views/_core/account-settings/device-management.vue +++ /dev/null @@ -1,229 +0,0 @@ - - - - - diff --git a/web/apps/web-ele/src/views/_core/account-settings/index.vue b/web/apps/web-ele/src/views/_core/account-settings/index.vue deleted file mode 100644 index 2eb2fb2..0000000 --- a/web/apps/web-ele/src/views/_core/account-settings/index.vue +++ /dev/null @@ -1,184 +0,0 @@ - - - - - diff --git a/web/apps/web-ele/src/views/_core/account-settings/modules/password-form.vue b/web/apps/web-ele/src/views/_core/account-settings/modules/password-form.vue deleted file mode 100644 index 61dc6f2..0000000 --- a/web/apps/web-ele/src/views/_core/account-settings/modules/password-form.vue +++ /dev/null @@ -1,168 +0,0 @@ - - - diff --git a/web/apps/web-ele/src/views/_core/account-settings/modules/profile-form.vue b/web/apps/web-ele/src/views/_core/account-settings/modules/profile-form.vue deleted file mode 100644 index c379ebc..0000000 --- a/web/apps/web-ele/src/views/_core/account-settings/modules/profile-form.vue +++ /dev/null @@ -1,293 +0,0 @@ - - - diff --git a/web/apps/web-ele/src/views/_core/agent-chat/index.vue b/web/apps/web-ele/src/views/_core/agent-chat/index.vue index 7e4f337..b23b3ea 100644 --- a/web/apps/web-ele/src/views/_core/agent-chat/index.vue +++ b/web/apps/web-ele/src/views/_core/agent-chat/index.vue @@ -4,7 +4,7 @@ import type { Agent } from '#/api/ai-platform/ai-platform'; import { computed, defineAsyncComponent, onMounted, ref } from 'vue'; import { useRoute } from 'vue-router'; -import { Page } from '@vben/common-ui'; +import { Page } from '@vben/common-ui/es/page'; import { PanelLeft, PanelRight } from '@vben/icons'; import { $t } from '@vben/locales'; diff --git a/web/apps/web-ele/src/views/_core/ai-confirmation-center/index.vue b/web/apps/web-ele/src/views/_core/ai-confirmation-center/index.vue deleted file mode 100644 index 9e9a4f0..0000000 --- a/web/apps/web-ele/src/views/_core/ai-confirmation-center/index.vue +++ /dev/null @@ -1,237 +0,0 @@ - - - diff --git a/web/apps/web-ele/src/views/_core/application/index.vue b/web/apps/web-ele/src/views/_core/application/index.vue deleted file mode 100644 index 1083da5..0000000 --- a/web/apps/web-ele/src/views/_core/application/index.vue +++ /dev/null @@ -1,514 +0,0 @@ - - - - - diff --git a/web/apps/web-ele/src/views/_core/application/modules/application-form-modal.vue b/web/apps/web-ele/src/views/_core/application/modules/application-form-modal.vue deleted file mode 100644 index 157af66..0000000 --- a/web/apps/web-ele/src/views/_core/application/modules/application-form-modal.vue +++ /dev/null @@ -1,345 +0,0 @@ - - - diff --git a/web/apps/web-ele/src/views/_core/authentication/code-login.vue b/web/apps/web-ele/src/views/_core/authentication/code-login.vue index acfd1fd..32a2ffc 100644 --- a/web/apps/web-ele/src/views/_core/authentication/code-login.vue +++ b/web/apps/web-ele/src/views/_core/authentication/code-login.vue @@ -1,10 +1,11 @@ - - diff --git a/web/apps/web-ele/src/views/_core/chat/components/ChatInput.vue b/web/apps/web-ele/src/views/_core/chat/components/ChatInput.vue deleted file mode 100644 index 374fd38..0000000 --- a/web/apps/web-ele/src/views/_core/chat/components/ChatInput.vue +++ /dev/null @@ -1,762 +0,0 @@ - - - - - - - diff --git a/web/apps/web-ele/src/views/_core/chat/components/ChatToast.vue b/web/apps/web-ele/src/views/_core/chat/components/ChatToast.vue deleted file mode 100644 index 9f80607..0000000 --- a/web/apps/web-ele/src/views/_core/chat/components/ChatToast.vue +++ /dev/null @@ -1,133 +0,0 @@ - - - - - - - diff --git a/web/apps/web-ele/src/views/_core/chat/components/ContactDetail.vue b/web/apps/web-ele/src/views/_core/chat/components/ContactDetail.vue deleted file mode 100644 index d461bf8..0000000 --- a/web/apps/web-ele/src/views/_core/chat/components/ContactDetail.vue +++ /dev/null @@ -1,283 +0,0 @@ - - - - - diff --git a/web/apps/web-ele/src/views/_core/chat/components/ContactList.vue b/web/apps/web-ele/src/views/_core/chat/components/ContactList.vue deleted file mode 100644 index 83566c9..0000000 --- a/web/apps/web-ele/src/views/_core/chat/components/ContactList.vue +++ /dev/null @@ -1,333 +0,0 @@ - - - - - diff --git a/web/apps/web-ele/src/views/_core/chat/components/ConversationInfo.vue b/web/apps/web-ele/src/views/_core/chat/components/ConversationInfo.vue deleted file mode 100644 index 1c55317..0000000 --- a/web/apps/web-ele/src/views/_core/chat/components/ConversationInfo.vue +++ /dev/null @@ -1,192 +0,0 @@ - - - diff --git a/web/apps/web-ele/src/views/_core/chat/components/ConversationList.vue b/web/apps/web-ele/src/views/_core/chat/components/ConversationList.vue deleted file mode 100644 index a62da47..0000000 --- a/web/apps/web-ele/src/views/_core/chat/components/ConversationList.vue +++ /dev/null @@ -1,373 +0,0 @@ - - - - - diff --git a/web/apps/web-ele/src/views/_core/chat/components/CreateGroupDialog.vue b/web/apps/web-ele/src/views/_core/chat/components/CreateGroupDialog.vue deleted file mode 100644 index ab2a10d..0000000 --- a/web/apps/web-ele/src/views/_core/chat/components/CreateGroupDialog.vue +++ /dev/null @@ -1,93 +0,0 @@ - - - diff --git a/web/apps/web-ele/src/views/_core/chat/components/EmojiPicker.vue b/web/apps/web-ele/src/views/_core/chat/components/EmojiPicker.vue deleted file mode 100644 index 83fddc1..0000000 --- a/web/apps/web-ele/src/views/_core/chat/components/EmojiPicker.vue +++ /dev/null @@ -1,370 +0,0 @@ - - - - - diff --git a/web/apps/web-ele/src/views/_core/chat/components/MessageList.vue b/web/apps/web-ele/src/views/_core/chat/components/MessageList.vue deleted file mode 100644 index f5d759a..0000000 --- a/web/apps/web-ele/src/views/_core/chat/components/MessageList.vue +++ /dev/null @@ -1,1276 +0,0 @@ - - - - - diff --git a/web/apps/web-ele/src/views/_core/chat/composables/chatStorage.ts b/web/apps/web-ele/src/views/_core/chat/composables/chatStorage.ts deleted file mode 100644 index 7c83545..0000000 --- a/web/apps/web-ele/src/views/_core/chat/composables/chatStorage.ts +++ /dev/null @@ -1,442 +0,0 @@ -import type { ChatMessage, Conversation } from '#/api/core/chat'; - -const DB_NAME = 'zq_chat_cache'; -const DB_VERSION = 1; -const STORE_CONVERSATIONS = 'conversations'; -const STORE_MESSAGES = 'messages'; -const STORE_META = 'meta'; - -// 每个会话最多缓存的消息数量 -const MAX_MESSAGES_PER_CONVERSATION = 200; - -let dbPromise: null | Promise = null; - -function openDB(): Promise { - if (dbPromise) return dbPromise; - - dbPromise = new Promise((resolve, reject) => { - const request = indexedDB.open(DB_NAME, DB_VERSION); - - request.onupgradeneeded = (event) => { - const db = (event.target as IDBOpenDBRequest).result; - - // 会话表: 按 userId 分区存储 - if (!db.objectStoreNames.contains(STORE_CONVERSATIONS)) { - const convStore = db.createObjectStore(STORE_CONVERSATIONS, { - keyPath: ['userId', 'id'], - }); - convStore.createIndex('by_user', 'userId', { unique: false }); - } - - // 消息表: 按 conversationId 索引 - if (!db.objectStoreNames.contains(STORE_MESSAGES)) { - const msgStore = db.createObjectStore(STORE_MESSAGES, { - keyPath: ['conversationId', 'id'], - }); - msgStore.createIndex('by_conversation', 'conversationId', { - unique: false, - }); - msgStore.createIndex( - 'by_conv_time', - ['conversationId', 'sys_create_datetime'], - { - unique: false, - }, - ); - } - - // 元数据表: 存储同步时间戳等 - if (!db.objectStoreNames.contains(STORE_META)) { - db.createObjectStore(STORE_META, { keyPath: 'key' }); - } - }; - - request.onsuccess = () => resolve(request.result); - request.onerror = () => { - dbPromise = null; - reject(request.error); - }; - }); - - return dbPromise; -} - -// ============ 通用事务辅助 ============ - -function withStore( - storeName: string, - mode: IDBTransactionMode, - fn: (store: IDBObjectStore) => IDBRequest, -): Promise { - return openDB().then( - (db) => - new Promise((resolve, reject) => { - const tx = db.transaction(storeName, mode); - const store = tx.objectStore(storeName); - const req = fn(store); - req.onsuccess = () => resolve(req.result); - req.onerror = () => reject(req.error); - }), - ); -} - -// ============ 会话操作 ============ - -export async function getCachedConversations( - userId: string, -): Promise { - try { - const db = await openDB(); - return new Promise((resolve, reject) => { - const tx = db.transaction(STORE_CONVERSATIONS, 'readonly'); - const store = tx.objectStore(STORE_CONVERSATIONS); - const index = store.index('by_user'); - const req = index.getAll(userId); - req.onsuccess = () => { - const items = (req.result || []).map((item: any) => { - const { userId: _uid, ...conv } = item; - return conv as Conversation; - }); - // 按 last_message_time 降序,置顶优先 - items.sort((a: Conversation, b: Conversation) => { - if (a.is_pinned !== b.is_pinned) return a.is_pinned ? -1 : 1; - const ta = a.last_message_time || a.sys_create_datetime || ''; - const tb = b.last_message_time || b.sys_create_datetime || ''; - return tb.localeCompare(ta); - }); - resolve(items); - }; - req.onerror = () => reject(req.error); - }); - } catch { - return []; - } -} - -export async function setCachedConversations( - userId: string, - conversations: Conversation[], -): Promise { - try { - const db = await openDB(); - const tx = db.transaction(STORE_CONVERSATIONS, 'readwrite'); - const store = tx.objectStore(STORE_CONVERSATIONS); - - // 先清除该用户的旧数据 - const index = store.index('by_user'); - const cursorReq = index.openCursor(userId); - await new Promise((resolve, reject) => { - cursorReq.onsuccess = () => { - const cursor = cursorReq.result; - if (cursor) { - cursor.delete(); - cursor.continue(); - } else { - resolve(); - } - }; - cursorReq.onerror = () => reject(cursorReq.error); - }); - - // 写入新数据 - for (const conv of conversations) { - store.put({ ...conv, userId }); - } - - await new Promise((resolve, reject) => { - tx.oncomplete = () => resolve(); - tx.onerror = () => reject(tx.error); - }); - } catch (error) { - console.warn('[ChatStorage] Failed to cache conversations:', error); - } -} - -export async function updateCachedConversation( - userId: string, - conversation: Conversation, -): Promise { - try { - await withStore(STORE_CONVERSATIONS, 'readwrite', (store) => - store.put({ ...conversation, userId }), - ); - } catch (error) { - console.warn('[ChatStorage] Failed to update conversation:', error); - } -} - -// ============ 消息操作 ============ - -export async function getCachedMessages( - conversationId: string, - limit = 30, - beforeId?: string, -): Promise<{ has_more: boolean; items: ChatMessage[] }> { - try { - const db = await openDB(); - return new Promise((resolve, reject) => { - const tx = db.transaction(STORE_MESSAGES, 'readonly'); - const store = tx.objectStore(STORE_MESSAGES); - const index = store.index('by_conversation'); - const req = index.getAll(conversationId); - req.onsuccess = () => { - let items: ChatMessage[] = (req.result || []).map((item: any) => { - const { conversationId: _cid, ...msg } = item; - return msg as ChatMessage; - }); - - // 按时间排序 - items.sort((a, b) => { - const ta = a.sys_create_datetime || ''; - const tb = b.sys_create_datetime || ''; - return ta.localeCompare(tb); - }); - - // 如果有 beforeId,截取之前的消息 - if (beforeId) { - const idx = items.findIndex((m) => m.id === beforeId); - if (idx > 0) { - items = items.slice(0, idx); - } else if (idx === 0) { - items = []; - } - } - - const hasMore = items.length > limit; - if (hasMore) { - items = items.slice(items.length - limit); - } - - resolve({ items, has_more: hasMore }); - }; - req.onerror = () => reject(req.error); - }); - } catch { - return { items: [], has_more: false }; - } -} - -async function _doSetCachedMessages( - conversationId: string, - msgs: ChatMessage[], -): Promise { - const db = await openDB(); - const tx = db.transaction(STORE_MESSAGES, 'readwrite'); - const store = tx.objectStore(STORE_MESSAGES); - - for (const msg of msgs) { - if (msg._sending || msg._tempId) continue; - store.put({ - ...msg, - conversationId, - _sending: undefined, - _tempId: undefined, - _localUrl: undefined, - }); - } - - await new Promise((resolve, reject) => { - tx.oncomplete = () => resolve(); - tx.onerror = () => reject(tx.error); - }); -} - -export async function setCachedMessages( - conversationId: string, - msgs: ChatMessage[], -): Promise { - try { - await _doSetCachedMessages(conversationId, msgs); - // 主动裁剪,保持每个会话消息数在限制内 - await trimOldMessages(conversationId); - } catch (error) { - if (await handleQuotaError(error)) { - try { - await _doSetCachedMessages(conversationId, msgs); - } catch { - console.warn('[ChatStorage] Retry failed after pruning:', error); - } - } else { - console.warn('[ChatStorage] Failed to cache messages:', error); - } - } -} - -export async function addCachedMessage(msg: ChatMessage): Promise { - if (msg._sending || msg._tempId) return; - const data = { - ...msg, - conversationId: msg.conversation_id, - _sending: undefined, - _tempId: undefined, - _localUrl: undefined, - }; - try { - await withStore(STORE_MESSAGES, 'readwrite', (store) => store.put(data)); - } catch (error) { - if (await handleQuotaError(error)) { - try { - await withStore(STORE_MESSAGES, 'readwrite', (store) => - store.put(data), - ); - } catch { - console.warn('[ChatStorage] Retry failed after pruning:', error); - } - } else { - console.warn('[ChatStorage] Failed to add message:', error); - } - } -} - -export async function updateCachedMessage(msg: ChatMessage): Promise { - const data = { - ...msg, - conversationId: msg.conversation_id, - _sending: undefined, - _tempId: undefined, - _localUrl: undefined, - }; - try { - await withStore(STORE_MESSAGES, 'readwrite', (store) => store.put(data)); - } catch (error) { - console.warn('[ChatStorage] Failed to update message:', error); - } -} - -// ============ 元数据操作 ============ - -export async function getLastSyncTime(userId: string): Promise { - try { - const result = await withStore(STORE_META, 'readonly', (store) => - store.get(`sync_${userId}`), - ); - return result?.value || null; - } catch { - return null; - } -} - -export async function setLastSyncTime(userId: string): Promise { - try { - await withStore(STORE_META, 'readwrite', (store) => - store.put({ key: `sync_${userId}`, value: new Date().toISOString() }), - ); - } catch (error) { - console.warn('[ChatStorage] Failed to set sync time:', error); - } -} - -// ============ 容量管理 ============ - -/** - * 裁剪指定会话的旧消息,只保留最近 MAX_MESSAGES_PER_CONVERSATION 条 - */ -async function trimOldMessages(conversationId: string): Promise { - try { - const db = await openDB(); - const tx = db.transaction(STORE_MESSAGES, 'readwrite'); - const store = tx.objectStore(STORE_MESSAGES); - const index = store.index('by_conversation'); - - const allMsgs: any[] = await new Promise((resolve, reject) => { - const req = index.getAll(conversationId); - req.onsuccess = () => resolve(req.result || []); - req.onerror = () => reject(req.error); - }); - - if (allMsgs.length <= MAX_MESSAGES_PER_CONVERSATION) return; - - // 按时间排序,删除最旧的 - allMsgs.sort((a, b) => { - const ta = a.sys_create_datetime || ''; - const tb = b.sys_create_datetime || ''; - return ta.localeCompare(tb); - }); - - const toDelete = allMsgs.slice( - 0, - allMsgs.length - MAX_MESSAGES_PER_CONVERSATION, - ); - for (const msg of toDelete) { - store.delete([msg.conversationId, msg.id]); - } - - await new Promise((resolve, reject) => { - tx.oncomplete = () => resolve(); - tx.onerror = () => reject(tx.error); - }); - } catch (error) { - console.warn('[ChatStorage] Failed to trim messages:', error); - } -} - -/** - * 全局清理:删除所有会话中超出限制的旧消息 - */ -export async function pruneAllOldMessages(): Promise { - try { - const db = await openDB(); - const tx = db.transaction(STORE_MESSAGES, 'readonly'); - const store = tx.objectStore(STORE_MESSAGES); - const index = store.index('by_conversation'); - - // 收集所有 conversationId - const convIds = new Set(); - await new Promise((resolve, reject) => { - const req = index.openKeyCursor(); - req.onsuccess = () => { - const cursor = req.result; - if (cursor) { - convIds.add(cursor.key as string); - cursor.continue(); - } else { - resolve(); - } - }; - req.onerror = () => reject(req.error); - }); - - for (const convId of convIds) { - await trimOldMessages(convId); - } - } catch (error) { - console.warn('[ChatStorage] Failed to prune messages:', error); - } -} - -/** - * 处理存储配额超限:清理旧消息后重试 - * 返回 true 表示已处理,调用方可重试 - */ -async function handleQuotaError(error: unknown): Promise { - if ( - error instanceof DOMException && - (error.name === 'QuotaExceededError' || error.code === 22) - ) { - console.warn('[ChatStorage] Storage quota exceeded, pruning old data...'); - await pruneAllOldMessages(); - return true; - } - return false; -} - -// ============ 清理 ============ - -export async function clearChatCache(): Promise { - try { - const db = await openDB(); - const tx = db.transaction( - [STORE_CONVERSATIONS, STORE_MESSAGES, STORE_META], - 'readwrite', - ); - tx.objectStore(STORE_CONVERSATIONS).clear(); - tx.objectStore(STORE_MESSAGES).clear(); - tx.objectStore(STORE_META).clear(); - await new Promise((resolve, reject) => { - tx.oncomplete = () => resolve(); - tx.onerror = () => reject(tx.error); - }); - } catch (error) { - console.warn('[ChatStorage] Failed to clear cache:', error); - } -} diff --git a/web/apps/web-ele/src/views/_core/chat/composables/useChat.ts b/web/apps/web-ele/src/views/_core/chat/composables/useChat.ts deleted file mode 100644 index b700e35..0000000 --- a/web/apps/web-ele/src/views/_core/chat/composables/useChat.ts +++ /dev/null @@ -1,623 +0,0 @@ -import type { - ChatMessage, - Conversation, - ConversationMember, -} from '#/api/core/chat'; -import type { WebSocketManager } from '#/api/core/websocket'; - -import { computed, nextTick, ref } from 'vue'; - -import { $t } from '@vben/locales'; -import { useAccessStore, useUserStore } from '@vben/stores'; - -import { - createGroupConversationApi, - createPrivateConversationApi, - getConversationsApi, - getMembersApi, - getMessagesApi, - getOnlineUsersApi, - getUnreadChatMessagesApi, - markConversationReadApi, - recallMessageApi, - sendChatMessageApi, - toggleMuteApi, - togglePinApi, -} from '#/api/core/chat'; -import { createChatWebSocket } from '#/api/core/websocket'; - -import { - addCachedMessage, - clearChatCache, - getCachedConversations, - getCachedMessages, - setCachedConversations, - setCachedMessages, - setLastSyncTime, - updateCachedConversation, - updateCachedMessage, -} from './chatStorage'; -import { showBrowserNotification, showChatToast } from './useChatNotification'; -import { playMessageSound } from './useChatSound'; - -// ============ 状态 ============ -const conversations = ref([]); -const currentConversation = ref(null); -const messages = ref([]); -const members = ref([]); -const hasMoreMessages = ref(false); -const loadingConversations = ref(false); -const loadingMessages = ref(false); -const loadingMembers = ref(false); -const sending = ref(false); -const isLoadingMore = ref(false); -const typingUsers = ref>(new Map()); -// 待跳转的会话ID(从其他页面点击通知后跳转到聊天页时使用) -const pendingConversationId = ref(null); - -const unreadChatMessages = ref([]); -const onlineUsers = ref>(new Set()); - -let wsManager: null | WebSocketManager = null; -const typingTimers: Map> = new Map(); -let tempIdCounter = 0; - -// ============ 计算属性 ============ -const totalUnread = computed(() => - conversations.value.reduce((sum, c) => sum + (c.unread_count || 0), 0), -); - -// ============ WebSocket ============ -function connectChat() { - if (wsManager?.isConnected) return; - - const accessStore = useAccessStore(); - if (!accessStore.accessToken) return; - - wsManager = createChatWebSocket({ - onOpen: () => { - console.log('[Chat WS] Connected'); - }, - onMessage: (message) => { - handleWsMessage(message); - }, - onClose: () => { - console.log('[Chat WS] Disconnected'); - }, - onError: () => { - console.error('[Chat WS] Error'); - }, - }); - - wsManager.connect().catch((error) => { - console.error('[Chat WS] Connect failed:', error); - }); -} - -function disconnectChat() { - wsManager?.close(); - wsManager = null; -} - -function handleWsMessage(data: any) { - const type = data.type; - const payload = data.data; - - switch (type) { - case 'chat.message': { - handleIncomingMessage(payload); - break; - } - case 'chat.presence': { - handlePresence(payload); - break; - } - case 'chat.read_receipt': { - handleReadReceipt(payload); - break; - } - case 'chat.recalled': { - handleRecalledMessage(payload); - break; - } - case 'chat.typing': { - handleTypingNotification(payload); - break; - } - } -} - -function handleIncomingMessage(msg: ChatMessage) { - // 如果是当前会话的消息,添加到消息列表 - if ( - currentConversation.value && - msg.conversation_id === currentConversation.value.id - ) { - // 查找是否有对应的临时消息(乐观更新),用服务器确认的消息替换 - const userStore = useUserStore(); - const currentUserId = userStore.userInfo?.userId || ''; - const tempIndex = - msg.sender_id === currentUserId - ? messages.value.findIndex( - (m) => - m._sending && - m._tempId && - m.msg_type === msg.msg_type && - (m.msg_type === 'text' - ? m.content === msg.content - : m.file_id === msg.file_id), - ) - : -1; - if (tempIndex >= 0) { - // 释放本地 blob URL - const tempMsg = messages.value[tempIndex]; - if (tempMsg?._localUrl) { - URL.revokeObjectURL(tempMsg._localUrl); - } - messages.value.splice(tempIndex, 1, msg); - } else { - const exists = messages.value.some((m) => m.id === msg.id); - if (!exists) { - messages.value.push(msg); - } - } - } - - // 缓存新消息到本地 - addCachedMessage(msg); - - // 非自己发的消息:提示音 + 通知 + 更新未读消息列表 - const userId = getCurrentUserId(); - if (msg.sender_id !== userId) { - // 实时添加到未读消息列表(通知中心用) - if ( - !currentConversation.value || - msg.conversation_id !== currentConversation.value.id - ) { - unreadChatMessages.value.unshift(msg); - } - - playMessageSound(); - // 不是当前会话的消息才显示 Toast - if ( - !currentConversation.value || - msg.conversation_id !== currentConversation.value.id - ) { - const conv = conversations.value.find( - (c) => c.id === msg.conversation_id, - ); - showChatToast(msg, () => { - // 设置待跳转会话,导航到聊天页后自动选中 - pendingConversationId.value = msg.conversation_id; - // 使用 window.location 检查是否已在聊天页 - if ( - window.location.hash?.includes('/chat') || - window.location.pathname?.includes('/chat') - ) { - // 已在聊天页,直接选中会话 - if (conv) selectConversation(conv); - pendingConversationId.value = null; - } else { - // 不在聊天页,通过动态 import router 导航 - import('#/router').then(({ router }) => { - router.push('/chat'); - }); - } - }); - showBrowserNotification(msg); - } - } - - // 更新会话列表 - const convIndex = conversations.value.findIndex( - (c) => c.id === msg.conversation_id, - ); - if (convIndex !== -1) { - const conv = { ...conversations.value[convIndex]! }; - conv.last_message_preview = - msg.content || `[${$t(`chat.${msg.msg_type}`) || msg.msg_type}]`; - conv.last_message_time = msg.sys_create_datetime || ''; - // 如果不是当前会话,增加未读数 - if ( - !currentConversation.value || - msg.conversation_id !== currentConversation.value.id - ) { - conv.unread_count = (conv.unread_count || 0) + 1; - } - conversations.value.splice(convIndex, 1); - conversations.value.unshift(conv); - // 更新会话缓存 - const userId = getCurrentUserId(); - if (userId) { - updateCachedConversation(userId, conv); - } - } -} - -function handleTypingNotification(payload: { - conversation_id: string; - user_id: string; - user_name: string; -}) { - if ( - currentConversation.value && - payload.conversation_id === currentConversation.value.id - ) { - typingUsers.value.set(payload.user_id, payload.user_name); - - // 清除之前的定时器 - const existingTimer = typingTimers.get(payload.user_id); - if (existingTimer) clearTimeout(existingTimer); - - // 3秒后自动清除 - typingTimers.set( - payload.user_id, - setTimeout(() => { - typingUsers.value.delete(payload.user_id); - typingTimers.delete(payload.user_id); - }, 3000), - ); - } -} - -function handleRecalledMessage(payload: { - conversation_id: string; - message_id: string; -}) { - if ( - currentConversation.value && - payload.conversation_id === currentConversation.value.id - ) { - const msg = messages.value.find((m) => m.id === payload.message_id); - if (msg) { - msg.is_recalled = true; - msg.content = null as any; - // 更新缓存中的撤回状态 - updateCachedMessage(msg); - } - } -} - -function handleReadReceipt(_payload: { - conversation_id: string; - message_id: string; - user_id: string; -}) { - // 可用于显示已读状态 -} - -function handlePresence(payload: { status: string; user_id: string }) { - if (payload.status === 'online') { - onlineUsers.value.add(payload.user_id); - } else { - onlineUsers.value.delete(payload.user_id); - } - // 触发响应式更新 - onlineUsers.value = new Set(onlineUsers.value); -} - -// ============ 辅助函数 ============ -function getCurrentUserId(): string { - const userStore = useUserStore(); - return userStore.userInfo?.userId || ''; -} - -// ============ API 操作 ============ -async function loadConversations() { - loadingConversations.value = true; - const userId = getCurrentUserId(); - - // 1. 先从本地缓存加载,立即渲染 - if (userId) { - try { - const cached = await getCachedConversations(userId); - if (cached.length > 0 && conversations.value.length === 0) { - conversations.value = cached; - } - } catch (error) { - console.warn('[Chat] Load cache failed:', error); - } - } - - // 2. 从服务端同步最新数据 - try { - const res = await getConversationsApi(); - conversations.value = res.items || []; - // 写入缓存 - if (userId) { - setCachedConversations(userId, conversations.value); - setLastSyncTime(userId); - } - } catch (error) { - console.error('加载会话列表失败:', error); - } finally { - loadingConversations.value = false; - } -} - -async function selectConversation(conv: Conversation) { - currentConversation.value = conv; - messages.value = []; - hasMoreMessages.value = false; - typingUsers.value.clear(); - - // 等待 key 变化触发 MessageList 重建后再加载数据 - await nextTick(); - - // 确保切换期间用户没有再次切换到其他会话 - if (currentConversation.value?.id !== conv.id) return; - - // 先从缓存加载消息(此时新 MessageList 已创建,不会闪现旧消息) - try { - const cached = await getCachedMessages(conv.id, 30); - if (currentConversation.value?.id !== conv.id) return; - if (cached.items.length > 0 && messages.value.length === 0) { - // 只有当 messages 仍为空时才使用缓存(避免覆盖已加载的服务端数据) - messages.value = cached.items; - hasMoreMessages.value = cached.has_more; - } - } catch (error) { - console.warn('[Chat] Load cached messages failed:', error); - } - - // 从服务端加载最新数据 - if (currentConversation.value?.id !== conv.id) return; - await Promise.all([loadMessages(), loadMembers()]); - - // 标记已读 - if (conv.unread_count > 0 && messages.value.length > 0) { - const lastMsg = messages.value[messages.value.length - 1]; - if (lastMsg) { - await markConversationReadApi(conv.id, lastMsg.id); - const c = conversations.value.find((item) => item.id === conv.id); - if (c) c.unread_count = 0; - // 从未读消息列表中移除该会话的消息 - unreadChatMessages.value = unreadChatMessages.value.filter( - (m) => m.conversation_id !== conv.id, - ); - } - } -} - -async function loadMessages(loadMore = false) { - if (!currentConversation.value) return; - const convId = currentConversation.value.id; - loadingMessages.value = true; - if (loadMore) isLoadingMore.value = true; - try { - const beforeId = - loadMore && messages.value.length > 0 ? messages.value[0]?.id : undefined; - const res = await getMessagesApi(convId, { - beforeId, - limit: 30, - }); - // 请求返回后检查会话是否已切换 - if (currentConversation.value?.id !== convId) return; - - const items = res.items || []; - hasMoreMessages.value = res.has_more || false; - - if (loadMore) { - // 使用 splice 原地插入,避免替换数组引用触发整体替换的 watch - messages.value.splice(0, 0, ...items); - } else { - messages.value = items; - } - // 缓存到本地 - if (items.length > 0) { - setCachedMessages(convId, items); - } - } catch (error) { - console.error('加载消息失败:', error); - } finally { - loadingMessages.value = false; - if (loadMore) isLoadingMore.value = false; - } -} - -async function loadMembers() { - if (!currentConversation.value) return; - loadingMembers.value = true; - try { - const res = await getMembersApi(currentConversation.value.id); - members.value = Array.isArray(res) ? res : []; - } catch (error) { - console.error('加载成员失败:', error); - } finally { - loadingMembers.value = false; - } -} - -async function sendMessage( - content: string, - msgType = 'text', - fileId?: string, - replyToId?: string, - fileName?: string, - localUrl?: string, - extra?: Record, -) { - if (!currentConversation.value) return; - sending.value = true; - - // 乐观更新:立即插入临时消息 - const userStore = useUserStore(); - const tempId = `_temp_${++tempIdCounter}_${Date.now()}`; - const tempMsg: ChatMessage = { - id: tempId, - conversation_id: currentConversation.value.id, - sender_id: userStore.userInfo?.userId || '', - msg_type: msgType, - content: msgType === 'text' ? content : undefined, - file_id: fileId, - file_name: fileName, - reply_to_id: replyToId, - is_recalled: false, - sys_create_datetime: new Date().toISOString(), - sender_name: - userStore.userInfo?.realName || userStore.userInfo?.username || '', - sender_avatar: userStore.userInfo?.avatar || '', - extra, - _sending: true, - _tempId: tempId, - _localUrl: localUrl, - }; - messages.value.push(tempMsg); - - try { - // 优先走 WebSocket - if (wsManager?.isConnected) { - wsManager.send({ - type: 'chat.send', - data: { - conversation_id: currentConversation.value.id, - msg_type: msgType, - content: msgType === 'text' ? content : undefined, - file_id: fileId, - reply_to_id: replyToId, - extra, - }, - }); - } else { - // 降级走 REST - const result = await sendChatMessageApi(currentConversation.value.id, { - msg_type: msgType, - content: msgType === 'text' ? content : undefined, - file_id: fileId, - reply_to_id: replyToId, - extra, - }); - // REST 返回后替换临时消息 - const idx = messages.value.findIndex((m) => m._tempId === tempId); - if (idx !== -1 && result) { - messages.value.splice(idx, 1, result as ChatMessage); - // 缓存已确认的消息 - addCachedMessage(result as ChatMessage); - } else if (idx !== -1) { - messages.value[idx]!._sending = false; - } - } - } catch (error) { - // 发送失败,移除临时消息 - const idx = messages.value.findIndex((m) => m._tempId === tempId); - if (idx !== -1) { - messages.value.splice(idx, 1); - } - console.error('发送消息失败:', error); - throw error; - } finally { - sending.value = false; - } -} - -function sendTyping() { - if (!currentConversation.value || !wsManager?.isConnected) return; - wsManager.send({ - type: 'chat.typing', - data: { conversation_id: currentConversation.value.id }, - }); -} - -async function recallMessage(messageId: string) { - await recallMessageApi(messageId); - // 立即更新本地消息状态(撤回者自己不会收到 chat.recalled WebSocket 事件) - const msg = messages.value.find((m) => m.id === messageId); - if (msg) { - msg.is_recalled = true; - msg.content = null as any; - // 同步更新缓存 - updateCachedMessage(msg); - } -} - -async function createPrivateChat(userId: string) { - const conv = await createPrivateConversationApi(userId); - // 添加到列表前面 - const exists = conversations.value.findIndex((c) => c.id === conv.id); - if (exists !== -1) { - conversations.value.splice(exists, 1); - } - conversations.value.unshift(conv); - await selectConversation(conv); - return conv; -} - -async function createGroupChat(name: string, memberIds: string[]) { - const conv = await createGroupConversationApi({ - name, - member_ids: memberIds, - }); - conversations.value.unshift(conv); - await selectConversation(conv); - return conv; -} - -async function loadUnreadChatMessages() { - try { - const res = await getUnreadChatMessagesApi(50); - unreadChatMessages.value = res.items || []; - } catch (error) { - console.error('[Chat] Failed to load unread messages:', error); - } -} - -async function loadOnlineUsers() { - try { - const res = await getOnlineUsersApi(); - onlineUsers.value = new Set(res.user_ids || []); - } catch (error) { - console.error('[Chat] Failed to load online users:', error); - } -} - -async function togglePin(conversationId: string, value: boolean) { - await togglePinApi(conversationId, value); - const conv = conversations.value.find((c) => c.id === conversationId); - if (conv) conv.is_pinned = value; -} - -async function toggleMute(conversationId: string, value: boolean) { - await toggleMuteApi(conversationId, value); - const conv = conversations.value.find((c) => c.id === conversationId); - if (conv) conv.is_muted = value; -} - -// ============ 导出 ============ -export function useChat() { - return { - // 状态 - conversations, - currentConversation, - messages, - members, - hasMoreMessages, - loadingConversations, - loadingMessages, - loadingMembers, - sending, - isLoadingMore, - typingUsers, - totalUnread, - pendingConversationId, - unreadChatMessages, - onlineUsers, - // WebSocket - connectChat, - disconnectChat, - // 操作 - loadConversations, - loadUnreadChatMessages, - loadOnlineUsers, - selectConversation, - loadMessages, - loadMembers, - sendMessage, - sendTyping, - recallMessage, - createPrivateChat, - createGroupChat, - togglePin, - toggleMute, - clearChatCache, - }; -} diff --git a/web/apps/web-ele/src/views/_core/chat/composables/useChatNotification.ts b/web/apps/web-ele/src/views/_core/chat/composables/useChatNotification.ts deleted file mode 100644 index d2dd92a..0000000 --- a/web/apps/web-ele/src/views/_core/chat/composables/useChatNotification.ts +++ /dev/null @@ -1,118 +0,0 @@ -/** - * 聊天消息桌面通知 + 应用内 Toast 通知 - */ -import type { ChatMessage } from '#/api/core/chat'; - -import { h, render } from 'vue'; - -import { $t } from '@vben/locales'; - -import ChatToast from '../components/ChatToast.vue'; - -// 通知队列 -const MAX_TOASTS = 3; -const activeToasts: Array<{ - el: HTMLDivElement; - timer: ReturnType; -}> = []; - -function getMessagePreview(msg: ChatMessage): string { - if (msg.msg_type === 'text') return msg.content || ''; - if (msg.msg_type === 'image') return `[${$t('chat.image')}]`; - if (msg.msg_type === 'file') - return `[${$t('chat.file')}] ${msg.file_name || ''}`; - if (msg.msg_type === 'voice') return `[${$t('chat.voice')}]`; - return `[${$t(`chat.${msg.msg_type}`) || msg.msg_type}]`; -} - -function removeToast(container: HTMLDivElement) { - container.classList.add('chat-toast-exit'); - setTimeout(() => { - render(null, container); - container.remove(); - const idx = activeToasts.findIndex((t) => t.el === container); - if (idx !== -1) activeToasts.splice(idx, 1); - repositionToasts(); - }, 300); -} - -function repositionToasts() { - activeToasts.forEach((toast, index) => { - toast.el.style.top = `${16 + index * 88}px`; - }); -} - -/** - * 显示应用内 Toast 通知 - */ -export function showChatToast(msg: ChatMessage, onClick?: () => void) { - // 超出最大数量,移除最早的 - while (activeToasts.length >= MAX_TOASTS) { - const oldest = activeToasts.shift(); - if (oldest) { - clearTimeout(oldest.timer); - removeToast(oldest.el); - } - } - - const container = document.createElement('div'); - document.body.append(container); - - const preview = getMessagePreview(msg); - - const vnode = h(ChatToast, { - senderName: msg.sender_name || '', - senderId: msg.sender_id || '', - senderAvatar: msg.sender_avatar || '', - content: preview, - onClose: () => removeToast(container), - onClick: () => { - removeToast(container); - onClick?.(); - }, - }); - - render(vnode, container); - - const topOffset = 16 + activeToasts.length * 88; - container.style.position = 'fixed'; - container.style.top = `${topOffset}px`; - container.style.right = '16px'; - container.style.zIndex = '9999'; - container.style.transition = 'top 0.3s ease, opacity 0.3s ease'; - - const timer = setTimeout(() => { - removeToast(container); - }, 5000); - - activeToasts.push({ el: container, timer }); -} - -/** - * 尝试发送浏览器原生通知(页面不在前台时) - */ -export function showBrowserNotification(msg: ChatMessage) { - if (!('Notification' in window)) return; - if (document.visibilityState === 'visible') return; - - if (Notification.permission === 'granted') { - const preview = getMessagePreview(msg); - const notification = new Notification( - msg.sender_name || $t('chat.newMessage'), - { - body: preview, - tag: `chat-${msg.id || Date.now()}`, - ...({ renotify: true } as any), - }, - ); - notification.addEventListener('click', () => { - window.focus(); - import('#/router').then(({ router }) => { - router.push('/chat'); - }); - notification.close(); - }); - } else if (Notification.permission !== 'denied') { - Notification.requestPermission(); - } -} diff --git a/web/apps/web-ele/src/views/_core/chat/composables/useChatSound.ts b/web/apps/web-ele/src/views/_core/chat/composables/useChatSound.ts deleted file mode 100644 index b13939e..0000000 --- a/web/apps/web-ele/src/views/_core/chat/composables/useChatSound.ts +++ /dev/null @@ -1,33 +0,0 @@ -/** - * 聊天消息提示音 - */ -import notificationSound from '#/assets/sounds/message-notification.mp3'; - -let audio: HTMLAudioElement | null = null; -let lastPlayTime = 0; - -// 最小播放间隔(毫秒),避免短时间内大量消息导致音效叠加 -const MIN_INTERVAL = 500; - -/** - * 播放消息提示音 - */ -export function playMessageSound() { - const now = Date.now(); - if (now - lastPlayTime < MIN_INTERVAL) return; - lastPlayTime = now; - - try { - if (!audio) { - audio = new Audio(notificationSound); - audio.volume = 0.5; - } - // 如果正在播放,重置到开头 - audio.currentTime = 0; - audio.play().catch(() => { - // 浏览器可能阻止自动播放,静默忽略 - }); - } catch { - // 静默降级 - } -} diff --git a/web/apps/web-ele/src/views/_core/chat/composables/useVoiceRecorder.ts b/web/apps/web-ele/src/views/_core/chat/composables/useVoiceRecorder.ts deleted file mode 100644 index cd37c64..0000000 --- a/web/apps/web-ele/src/views/_core/chat/composables/useVoiceRecorder.ts +++ /dev/null @@ -1,130 +0,0 @@ -import { onBeforeUnmount, ref } from 'vue'; - -export function useVoiceRecorder() { - const isRecording = ref(false); - const duration = ref(0); - const isPaused = ref(false); - - let mediaRecorder: MediaRecorder | null = null; - let audioChunks: Blob[] = []; - let stream: MediaStream | null = null; - let timer: null | ReturnType = null; - let startTime = 0; - - function startTimer() { - startTime = Date.now(); - duration.value = 0; - timer = setInterval(() => { - duration.value = Math.floor((Date.now() - startTime) / 1000); - }, 200); - } - - function stopTimer() { - if (timer) { - clearInterval(timer); - timer = null; - } - } - - async function startRecording(): Promise { - try { - stream = await navigator.mediaDevices.getUserMedia({ audio: true }); - } catch { - return false; - } - - audioChunks = []; - - // 优先使用 webm/opus,兼容性好 - const mimeType = MediaRecorder.isTypeSupported('audio/webm;codecs=opus') - ? 'audio/webm;codecs=opus' - : (MediaRecorder.isTypeSupported('audio/webm') - ? 'audio/webm' - : ''); - - mediaRecorder = mimeType - ? new MediaRecorder(stream, { mimeType }) - : new MediaRecorder(stream); - - mediaRecorder.ondataavailable = (e) => { - if (e.data.size > 0) { - audioChunks.push(e.data); - } - }; - - mediaRecorder.start(100); // 每 100ms 收集一次数据 - isRecording.value = true; - isPaused.value = false; - startTimer(); - return true; - } - - function stopRecording(): Promise { - return new Promise((resolve) => { - if (!mediaRecorder || mediaRecorder.state === 'inactive') { - cleanup(); - resolve(null); - return; - } - - const finalDuration = Math.max( - 1, - Math.round((Date.now() - startTime) / 1000), - ); - - mediaRecorder.onstop = () => { - const blob = new Blob(audioChunks, { - type: mediaRecorder?.mimeType || 'audio/webm', - }); - cleanup(); - resolve({ blob, duration: finalDuration }); - }; - - mediaRecorder.stop(); - }); - } - - function cancelRecording() { - if (mediaRecorder && mediaRecorder.state !== 'inactive') { - mediaRecorder.onstop = null; - mediaRecorder.stop(); - } - cleanup(); - } - - function cleanup() { - stopTimer(); - isRecording.value = false; - isPaused.value = false; - duration.value = 0; - audioChunks = []; - if (stream) { - stream.getTracks().forEach((t) => t.stop()); - stream = null; - } - mediaRecorder = null; - } - - onBeforeUnmount(() => { - if (isRecording.value) { - cancelRecording(); - } - }); - - return { - isRecording, - duration, - startRecording, - stopRecording, - cancelRecording, - }; -} - -/** - * 格式化录音时长为 mm:ss - */ -export function formatVoiceDuration(seconds: number): string { - const m = Math.floor(seconds / 60); - const s = seconds % 60; - return `${String(m).padStart(2, '0')}:${String(s).padStart(2, '0')}`; -} diff --git a/web/apps/web-ele/src/views/_core/chat/index.vue b/web/apps/web-ele/src/views/_core/chat/index.vue deleted file mode 100644 index 1141d06..0000000 --- a/web/apps/web-ele/src/views/_core/chat/index.vue +++ /dev/null @@ -1,591 +0,0 @@ - - - - - diff --git a/web/apps/web-ele/src/views/_core/data-source/data.ts b/web/apps/web-ele/src/views/_core/data-source/data.ts deleted file mode 100644 index a48ec0d..0000000 --- a/web/apps/web-ele/src/views/_core/data-source/data.ts +++ /dev/null @@ -1,166 +0,0 @@ -import type { DataSource } from '#/api/core/data-source'; - -import { $t } from '@vben/locales'; - -/** - * 数据源类型选项 - */ -export const getSourceTypeOptions = () => [ - { label: $t('data-source.apiInterface'), value: 'api' }, - { label: $t('data-source.sqlQuery'), value: 'sql' }, - { label: $t('data-source.staticData'), value: 'static' }, -]; - -/** - * 结果类型选项 - */ -export const getResultTypeOptions = () => [ - { - label: $t('data-source.resultTypeList'), - value: 'list', - description: $t('data-source.resultTypeListDesc'), - }, - { - label: $t('data-source.resultTypeTree'), - value: 'tree', - description: $t('data-source.resultTypeTreeDesc'), - }, - { - label: $t('data-source.resultTypeSingleObject'), - value: 'object', - description: $t('data-source.resultTypeObjectDesc'), - }, - { - label: $t('data-source.resultTypeSingleValue'), - value: 'value', - description: $t('data-source.resultTypeValueDesc'), - }, - { - label: $t('data-source.resultTypeAxisChart'), - value: 'chart-axis', - description: $t('data-source.resultTypeChartAxisDesc'), - }, - { - label: $t('data-source.resultTypePieChart'), - value: 'chart-pie', - description: $t('data-source.resultTypeChartPieDesc'), - }, - { - label: $t('data-source.resultTypeGauge'), - value: 'chart-gauge', - description: $t('data-source.resultTypeChartGaugeDesc'), - }, - { - label: $t('data-source.resultTypeRadarChart'), - value: 'chart-radar', - description: $t('data-source.resultTypeChartRadarDesc'), - }, - { - label: $t('data-source.resultTypeScatterChart'), - value: 'chart-scatter', - description: $t('data-source.resultTypeChartScatterDesc'), - }, - { - label: $t('data-source.resultTypeHeatmap'), - value: 'chart-heatmap', - description: $t('data-source.resultTypeChartHeatmapDesc'), - }, -]; - -/** - * HTTP 方法选项 - */ -export const httpMethodOptions = [ - { label: 'GET', value: 'GET' }, - { label: 'POST', value: 'POST' }, - { label: 'PUT', value: 'PUT' }, - { label: 'DELETE', value: 'DELETE' }, - { label: 'PATCH', value: 'PATCH' }, -]; - -/** - * 认证类型选项 - */ -export const getAuthTypeOptions = () => [ - { label: $t('data-source.authNone'), value: 'none' }, - { label: 'Bearer Token', value: 'bearer_token' }, - { label: 'Basic Auth', value: 'basic_auth' }, - { label: 'API Key', value: 'api_key' }, -]; - -/** - * 请求体类型选项 - */ -export const getBodyTypeOptions = () => [ - { label: $t('data-source.bodyTypeNone'), value: 'none' }, - { label: 'JSON', value: 'json' }, - { label: 'Form Data', value: 'form-data' }, - { label: 'x-www-form-urlencoded', value: 'x-www-form-urlencoded' }, - { label: 'Raw', value: 'raw' }, -]; - -/** - * API Key 位置选项 - */ -export const getKeyPositionOptions = () => [ - { label: 'Header', value: 'header' }, - { label: 'Query Param', value: 'query' }, -]; - -/** - * 参数类型选项 - */ -export const getParamTypeOptions = () => [ - { label: $t('data-source.paramTypeString'), value: 'string' }, - { label: $t('data-source.paramTypeInteger'), value: 'integer' }, - { label: $t('data-source.paramTypeFloat'), value: 'float' }, - { label: $t('data-source.paramTypeBoolean'), value: 'boolean' }, - { label: $t('data-source.paramTypeDate'), value: 'date' }, - { label: $t('data-source.paramTypeDatetime'), value: 'datetime' }, -]; - -/** - * 默认数据源配置 - */ -export const defaultDataSource: Partial = { - name: '', - code: '', - source_type: 'sql', - description: '', - status: true, - // API 配置 - api_url: '', - api_method: 'GET', - api_headers: {}, - api_query_params: [], - api_body_type: 'none', - api_body: {}, - api_content_type: '', - api_timeout: 30, - api_data_path: '', - // API 认证 - api_auth_type: 'none', - api_auth_config: {}, - // API 高级 - api_retry_count: 0, - api_retry_interval: 1, - api_success_condition: {}, - api_proxy: '', - api_follow_redirects: true, - api_verify_ssl: true, - // SQL 配置 - sql_content: '', - db_connection: 'default', - // 静态数据 - static_data: [], - // 参数 - params: [], - // 结果处理 - result_type: 'list', - tree_config: {}, - field_mapping: {}, - chart_config: {}, - // 缓存 - cache_enabled: false, - cache_ttl: 300, -}; diff --git a/web/apps/web-ele/src/views/_core/dept/data.ts b/web/apps/web-ele/src/views/_core/dept/data.ts deleted file mode 100644 index 9b0f287..0000000 --- a/web/apps/web-ele/src/views/_core/dept/data.ts +++ /dev/null @@ -1,77 +0,0 @@ -import type { VbenFormSchema } from '#/adapter/form'; -import type { DeptUser } from '#/api/core/dept'; - -import { $t } from '@vben/locales'; - -type LegacyTableColumn = Record; -type OnActionClickFn> = (params: { - code: string; - row: T; -}) => void; - -/** - * 获取搜索表单的字段配置 - */ -export function useSearchFormSchema(): VbenFormSchema[] { - return [ - { - component: 'Input', - fieldName: 'name', - label: $t('system.user.userName'), - }, - { - component: 'Input', - fieldName: 'username', - label: $t('system.user.account'), - }, - ]; -} - -/** - * 获取用户表格列配置 - */ -export function useUserColumns( - onActionClick?: OnActionClickFn, -): LegacyTableColumn[] { - return [ - { - type: 'checkbox', - minWidth: 60, - align: 'center', - fixed: 'left', - }, - { - field: 'username', - title: $t('system.user.account'), - minWidth: 120, - }, - { - field: 'name', - title: $t('system.user.userName'), - minWidth: 120, - }, - { - field: 'email', - title: $t('system.user.email'), - minWidth: 180, - }, - { - align: 'right', - cellRender: { - attrs: { - nameField: 'name', - nameTitle: $t('system.user.userName'), - onClick: onActionClick, - }, - name: 'CellOperation', - options: ['edit', 'delete'], - }, - field: 'operation', - fixed: 'right', - headerAlign: 'center', - showOverflow: false, - title: $t('system.user.operation'), - minWidth: 150, - }, - ]; -} diff --git a/web/apps/web-ele/src/views/_core/dept/index.vue b/web/apps/web-ele/src/views/_core/dept/index.vue deleted file mode 100644 index c8134cd..0000000 --- a/web/apps/web-ele/src/views/_core/dept/index.vue +++ /dev/null @@ -1,159 +0,0 @@ - - - diff --git a/web/apps/web-ele/src/views/_core/dept/modules/dept-form-modal.vue b/web/apps/web-ele/src/views/_core/dept/modules/dept-form-modal.vue deleted file mode 100644 index fb81f8c..0000000 --- a/web/apps/web-ele/src/views/_core/dept/modules/dept-form-modal.vue +++ /dev/null @@ -1,209 +0,0 @@ - - - diff --git a/web/apps/web-ele/src/views/_core/dept/modules/dept-tree.vue b/web/apps/web-ele/src/views/_core/dept/modules/dept-tree.vue deleted file mode 100644 index 45f40b4..0000000 --- a/web/apps/web-ele/src/views/_core/dept/modules/dept-tree.vue +++ /dev/null @@ -1,501 +0,0 @@ - - - - - diff --git a/web/apps/web-ele/src/views/_core/dept/modules/user-form.vue b/web/apps/web-ele/src/views/_core/dept/modules/user-form.vue deleted file mode 100644 index 826c5d1..0000000 --- a/web/apps/web-ele/src/views/_core/dept/modules/user-form.vue +++ /dev/null @@ -1,72 +0,0 @@ - - - diff --git a/web/apps/web-ele/src/views/_core/dict/data.ts b/web/apps/web-ele/src/views/_core/dict/data.ts deleted file mode 100644 index b2cf4e2..0000000 --- a/web/apps/web-ele/src/views/_core/dict/data.ts +++ /dev/null @@ -1,197 +0,0 @@ -import type { VbenFormSchema } from '#/adapter/form'; -import type { DictItem } from '#/api/core/dict'; - -import { $t } from '@vben/locales'; - -import { z } from '#/adapter/form'; - -type LegacyTableColumn = Record; -type OnActionClickFn> = (params: { - code: string; - row: T; -}) => void; - -/** - * 获取字典搜索表单的字段配置 - */ -export function useDictSearchFormSchema(): VbenFormSchema[] { - return [ - { - component: 'Input', - fieldName: 'name', - label: $t('dict.dictName'), - }, - { - component: 'Input', - fieldName: 'code', - label: $t('dict.dictCode'), - }, - ]; -} - -/** - * 获取字典表单配置 - */ -export function useDictFormSchema(): VbenFormSchema[] { - return [ - { - component: 'Input', - fieldName: 'name', - label: $t('dict.dictName'), - rules: z - .string() - .min(2, $t('ui.formRules.minLength', [$t('dict.dictName'), 2])) - .max(100, $t('ui.formRules.maxLength', [$t('dict.dictName'), 100])), - }, - { - component: 'Input', - fieldName: 'code', - label: $t('dict.dictCode'), - rules: z - .string() - .min(2, $t('ui.formRules.minLength', [$t('dict.dictCode'), 2])) - .max(100, $t('ui.formRules.maxLength', [$t('dict.dictCode'), 100])) - .regex(/^\w+$/, $t('dict.codeFormatError')), - }, - { - component: 'RadioGroup', - componentProps: { - options: [ - { label: $t('common.enabled'), value: true }, - { label: $t('common.disabled'), value: false }, - ], - }, - defaultValue: true, - fieldName: 'status', - label: $t('dict.status'), - }, - ]; -} - -/** - * 获取字典项搜索表单配置 - */ -export function useDictItemSearchFormSchema(): VbenFormSchema[] { - return [ - { - component: 'Input', - fieldName: 'label', - label: $t('dict.itemLabel'), - }, - { - component: 'Input', - fieldName: 'value', - label: $t('dict.itemValue'), - }, - ]; -} - -/** - * 获取字典项表单配置 - */ -export function useDictItemFormSchema(): VbenFormSchema[] { - return [ - { - component: 'Input', - fieldName: 'label', - label: $t('dict.itemLabel'), - rules: z - .string() - .min(1, $t('ui.formRules.required', [$t('dict.itemLabel')])) - .max(100, $t('ui.formRules.maxLength', [$t('dict.itemLabel'), 100])), - }, - { - component: 'Input', - fieldName: 'value', - label: $t('dict.itemValue'), - rules: z - .string() - .min(1, $t('ui.formRules.required', [$t('dict.itemValue')])) - .max(100, $t('ui.formRules.maxLength', [$t('dict.itemValue'), 100])), - }, - // { - // component: 'Input', - // fieldName: 'icon', - // label: $t('dict.itemIcon'), - // rules: z - // .string() - // .max(100, $t('ui.formRules.maxLength', [$t('dict.itemIcon'), 100])) - // .optional(), - // }, - { - component: 'Textarea', - componentProps: { - placeholder: $t('dict.remarkPlaceholder'), - rows: 3, - }, - fieldName: 'remark', - label: $t('dict.remark'), - }, - { - component: 'RadioGroup', - componentProps: { - options: [ - { label: $t('common.enabled'), value: true }, - { label: $t('common.disabled'), value: false }, - ], - }, - defaultValue: true, - fieldName: 'status', - label: $t('dict.status'), - }, - ]; -} - -/** - * 获取字典项表格列配置 - */ -export function useDictItemColumns( - onActionClick?: OnActionClickFn, -): LegacyTableColumn[] { - return [ - { - field: 'label', - title: $t('dict.itemLabel'), - minWidth: 120, - }, - { - field: 'value', - title: $t('dict.itemValue'), - minWidth: 120, - }, - // { - // field: 'icon', - // title: $t('dict.itemIcon'), - // minWidth: 100, - // }, - { - field: 'status', - title: $t('dict.status'), - minWidth: 80, - cellRender: { - name: 'CellStatus', - attrs: { - onClick: onActionClick, - }, - }, - }, - { - align: 'right', - cellRender: { - attrs: { - nameField: 'label', - nameTitle: $t('dict.itemLabel'), - onClick: onActionClick, - }, - name: 'CellOperation', - options: ['edit', 'delete'], - }, - field: 'operation', - fixed: 'right', - headerAlign: 'center', - showOverflow: false, - title: $t('system.user.operation'), - minWidth: 150, - }, - ]; -} diff --git a/web/apps/web-ele/src/views/_core/dict/index.vue b/web/apps/web-ele/src/views/_core/dict/index.vue deleted file mode 100644 index 043520d..0000000 --- a/web/apps/web-ele/src/views/_core/dict/index.vue +++ /dev/null @@ -1,39 +0,0 @@ - - - diff --git a/web/apps/web-ele/src/views/_core/dict/modules/dict-form-modal.vue b/web/apps/web-ele/src/views/_core/dict/modules/dict-form-modal.vue deleted file mode 100644 index 77aa356..0000000 --- a/web/apps/web-ele/src/views/_core/dict/modules/dict-form-modal.vue +++ /dev/null @@ -1,99 +0,0 @@ - - - diff --git a/web/apps/web-ele/src/views/_core/dict/modules/dict-item-form-modal.vue b/web/apps/web-ele/src/views/_core/dict/modules/dict-item-form-modal.vue deleted file mode 100644 index 5cab3ee..0000000 --- a/web/apps/web-ele/src/views/_core/dict/modules/dict-item-form-modal.vue +++ /dev/null @@ -1,92 +0,0 @@ - - - diff --git a/web/apps/web-ele/src/views/_core/dict/modules/dict-item-list.vue b/web/apps/web-ele/src/views/_core/dict/modules/dict-item-list.vue deleted file mode 100644 index 23cce2f..0000000 --- a/web/apps/web-ele/src/views/_core/dict/modules/dict-item-list.vue +++ /dev/null @@ -1,683 +0,0 @@ - - - - - diff --git a/web/apps/web-ele/src/views/_core/dict/modules/dict-list.vue b/web/apps/web-ele/src/views/_core/dict/modules/dict-list.vue deleted file mode 100644 index a6d999e..0000000 --- a/web/apps/web-ele/src/views/_core/dict/modules/dict-list.vue +++ /dev/null @@ -1,297 +0,0 @@ - - - - - diff --git a/web/apps/web-ele/src/views/_core/fallback/coming-soon.vue b/web/apps/web-ele/src/views/_core/fallback/coming-soon.vue index f394930..fff1f36 100644 --- a/web/apps/web-ele/src/views/_core/fallback/coming-soon.vue +++ b/web/apps/web-ele/src/views/_core/fallback/coming-soon.vue @@ -1,5 +1,5 @@