@nocobase/plugin-ai 2.2.0-beta.13 → 2.2.0-beta.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/client-v2.d.ts +1 -0
- package/dist/ai/docs/nocobase/ai-employees/scenarios/company-background-research.md +125 -0
- package/dist/ai/docs/nocobase/building-tips/operations-dashboard.md +513 -0
- package/dist/ai/docs/nocobase/file-manager/stable-url.md +87 -0
- package/dist/ai/docs/nocobase/get-started/deployment/production.md +24 -2
- package/dist/ai/docs/nocobase/get-started/installation/docker-caddy.mdx +3 -0
- package/dist/ai/docs/nocobase/get-started/installation/docker-nginx.mdx +3 -0
- package/dist/ai/docs/nocobase/get-started/installation/docker.mdx +27 -3
- package/dist/ai/docs/nocobase/get-started/installation/env.md +33 -0
- package/dist/ai/docs/nocobase/index.md +1 -1
- package/dist/ai/docs/nocobase/interface-builder/blocks/data-blocks/comment.md +107 -0
- package/dist/ai/docs/nocobase/interface-builder/index.md +7 -6
- package/dist/ai/docs/nocobase/interface-builder/ui-layout/desktop.md +97 -0
- package/dist/ai/docs/nocobase/interface-builder/ui-layout/index.md +50 -0
- package/dist/ai/docs/nocobase/interface-builder/ui-layout/mobile.md +133 -0
- package/dist/ai/docs/nocobase/multi-app/multi-app-vs-multi-portal-vs-multi-space.md +159 -0
- package/dist/ai/docs/nocobase/multi-app/multi-portal/index.md +195 -0
- package/dist/ai/docs/nocobase/nocobase-cli/production/index.md +10 -0
- package/dist/ai/docs/nocobase/nocobase-cli/production/reverse-proxy/caddy.md +15 -2
- package/dist/ai/docs/nocobase/nocobase-cli/production/reverse-proxy/index.md +1 -1
- package/dist/ai/docs/nocobase/nocobase-cli/production/reverse-proxy/nginx.md +16 -2
- package/dist/ai/docs/nocobase/plugins/@nocobase/plugin-block-comment/index.md +14 -0
- package/dist/ai/docs/nocobase/runjs/context/ai.md +206 -0
- package/dist/ai/docs/nocobase/tutorials/index.md +20 -1
- package/dist/ai/docs/nocobase/workflow/development/api.md +259 -77
- package/dist/ai/docs/nocobase/workflow/development/index.md +2 -1
- package/dist/ai/docs/nocobase/workflow/development/migration.md +319 -0
- package/dist/ai/docs/nocobase/workflow/development/node.md +84 -51
- package/dist/ai/docs/nocobase/workflow/development/trigger.md +122 -20
- package/dist/ai/tools/formFiller.js +4 -3
- package/dist/ai/tools/subAgentWebSearch.js +20 -15
- package/dist/client/23.65ea8c37cd4b884b.js +10 -0
- package/dist/client/264.cc98933ef65608b6.js +10 -0
- package/dist/client/336.7a8a8853196ad779.js +11 -0
- package/dist/client/372.40eb52905e3f3049.js +10 -0
- package/dist/client/416.92b74ca47e4099c4.js +10 -0
- package/dist/client/446.d63c38d0309fe250.js +10 -0
- package/dist/client/525.203778500aca5d05.js +10 -0
- package/dist/client/663.680bcf6272a8504d.js +10 -0
- package/dist/client/681.399948c18d753667.js +10 -0
- package/dist/client/705.380279da896021fb.js +10 -0
- package/dist/client/ai-employees/1.x/selector/AIContextCollector.d.ts +1 -4
- package/dist/client/ai-employees/permissions/PermissionsTab.d.ts +21 -5
- package/dist/client/index.d.ts +15 -20
- package/dist/client/index.js +8 -8
- package/dist/client/workflow/nodes/employee/index.d.ts +2 -23
- package/dist/client/workflow/nodes/llm/index.d.ts +2 -52
- package/dist/client/workflow/triggers/ai-employee/index.d.ts +2 -83
- package/dist/client-v2/23.1bcb6986b40723d8.js +10 -0
- package/dist/client-v2/264.be92ff6a4d2612f1.js +10 -0
- package/dist/client-v2/336.e406470429e0670e.js +11 -0
- package/dist/client-v2/372.8cc3fde09c9bec77.js +10 -0
- package/dist/client-v2/406.341be51205c674e0.js +10 -0
- package/dist/client-v2/416.0e1c2d9cde43b83d.js +10 -0
- package/dist/client-v2/446.073d450882db29fd.js +10 -0
- package/dist/client-v2/457.d72febb89e88fc00.js +10 -0
- package/dist/client-v2/663.342341f0b2b412d8.js +10 -0
- package/dist/client-v2/681.082f4f1c7b841983.js +10 -0
- package/dist/client-v2/705.1d10027ff8cfdf79.js +10 -0
- package/dist/{client/ai-employees/admin/AvatarSelect.d.ts → client-v2/ai-employees/AIEmployeeDropdown.d.ts} +8 -9
- package/dist/client-v2/ai-employees/AIEmployeeShortcut.d.ts +9 -2
- package/dist/{client → client-v2}/ai-employees/AddContextButton.d.ts +1 -1
- package/dist/{client → client-v2}/ai-employees/ai-coding/AICodingButton.d.ts +2 -1
- package/dist/{client/ai-employees/chatbox → client-v2/ai-employees/chatbox/components}/Actions.d.ts +2 -4
- package/dist/{client/ai-employees/chatbox → client-v2/ai-employees/chatbox/components}/AddLLMModal.d.ts +2 -4
- package/dist/client-v2/ai-employees/chatbox/components/Attachments.d.ts +27 -0
- package/dist/{client/ai-employees/permissions/Permissions.d.ts → client-v2/ai-employees/chatbox/components/ChatBox.d.ts} +2 -2
- package/dist/{client/ai-employees/chatbox → client-v2/ai-employees/chatbox/components}/ChatBoxLayout.d.ts +1 -1
- package/dist/{client/ai-employees/chatbox → client-v2/ai-employees/chatbox/components}/ContextItem.d.ts +1 -1
- package/dist/{client/ai-employees/admin/Employees.d.ts → client-v2/ai-employees/chatbox/components/DebugPanel.d.ts} +1 -1
- package/dist/{client/ai-employees/chatbox/markdown/Code.d.ts → client-v2/ai-employees/chatbox/components/Markdown.d.ts} +12 -5
- package/dist/{client/ai-employees/admin/ProfileSettings.d.ts → client-v2/ai-employees/chatbox/components/MessageContent.d.ts} +3 -2
- package/dist/client-v2/ai-employees/chatbox/components/MessageRenderers.d.ts +39 -0
- package/dist/{client/ai-employees/chatbox/generative-ui → client-v2/ai-employees/chatbox/components}/ToolCard.d.ts +7 -5
- package/dist/{client/ai-employees/admin/datasource/components/basic → client-v2/ai-employees/chatbox/components}/index.d.ts +5 -2
- package/dist/{client → client-v2}/ai-employees/chatbox/hooks/useChat.d.ts +21 -22
- package/dist/client-v2/ai-employees/chatbox/hooks/useChatBoxActions.d.ts +3 -2
- package/dist/{client → client-v2}/ai-employees/chatbox/hooks/useChatConversationActions.d.ts +2 -2
- package/dist/{client → client-v2}/ai-employees/chatbox/hooks/useChatMessageActions.d.ts +8 -4
- package/dist/{client → client-v2}/ai-employees/chatbox/hooks/useToolCallActions.d.ts +1 -1
- package/dist/client-v2/ai-employees/chatbox/hooks/useUploadFiles.d.ts +46 -0
- package/dist/{client → client-v2}/ai-employees/chatbox/hooks/useWorkflowTasks.d.ts +1 -1
- package/dist/{client → client-v2}/ai-employees/chatbox/model.d.ts +9 -2
- package/dist/client-v2/ai-employees/chatbox/roles.d.ts +162 -0
- package/dist/client-v2/ai-employees/chatbox/stores/chat-box.d.ts +1 -49
- package/dist/client-v2/ai-employees/chatbox/stores/chat-conversations.d.ts +2 -19
- package/dist/client-v2/ai-employees/chatbox/stores/chat-messages.d.ts +1 -46
- package/dist/{client → client-v2}/ai-employees/chatbox/stores/chat-tool-call.d.ts +1 -15
- package/dist/client-v2/ai-employees/chatbox/stores/chat-tools.d.ts +30 -0
- package/dist/client-v2/ai-employees/chatbox/stores/create-selectors.d.ts +31 -3
- package/dist/{client/ai-employees/chatbox/conversations/common.d.ts → client-v2/ai-employees/chatbox/stores/workflow-tasks.d.ts} +21 -4
- package/dist/client-v2/ai-employees/chatbox/utils/normalizeTriggerTaskOptions.d.ts +19 -0
- package/dist/{client → client-v2}/ai-employees/chatbox/utils.d.ts +26 -6
- package/dist/{client/ai-employees/data-visualization/context.d.ts → client-v2/ai-employees/context/chart-config.d.ts} +1 -1
- package/dist/{client → client-v2}/ai-employees/context/code-editor.d.ts +1 -1
- package/dist/{client → client-v2}/ai-employees/context/datasource.d.ts +1 -1
- package/dist/{client → client-v2}/ai-employees/context/flow-models.d.ts +1 -1
- package/dist/{client/ai-employees/admin/datasource/components/DatasourceSettingDetail.d.ts → client-v2/ai-employees/data-modeling/setup.d.ts} +6 -5
- package/dist/{client → client-v2}/ai-employees/datasource/DatasourceSelector.d.ts +6 -2
- package/dist/{client/ai-employees/admin/datasource/flow-models/DatasourceSettingModel.d.ts → client-v2/ai-employees/flow/index.d.ts} +4 -6
- package/dist/{client → client-v2}/ai-employees/form-filler/tools/index.d.ts +1 -1
- package/dist/{client → client-v2}/ai-employees/stores/ai-selection.d.ts +4 -4
- package/dist/{client → client-v2}/ai-employees/stores/dialog-controller.d.ts +4 -4
- package/dist/{client/ai-employees/business-report/ui → client-v2/ai-employees/tools}/BusinessReportCard.d.ts +2 -2
- package/dist/{client/ai-employees/business-report/ui → client-v2/ai-employees/tools}/BusinessReportModal.d.ts +2 -2
- package/dist/{client/ai-employees/1.x/selector/withAISelectable.d.ts → client-v2/ai-employees/tools/ChartGeneratorCard.d.ts} +5 -4
- package/dist/{client/ai-employees/ai-coding/ui → client-v2/ai-employees/tools}/CodeToolCard.d.ts +1 -1
- package/dist/{client/ai-employees/data-modeling/ui → client-v2/ai-employees/tools}/DataModelingCard.d.ts +3 -5
- package/dist/{client/ai-employees/data-modeling/ui → client-v2/ai-employees/tools}/DataModelingModal.d.ts +4 -6
- package/dist/{client/ai-employees/sub-agents/ui → client-v2/ai-employees/tools}/SubAgentDispatchCard.d.ts +4 -9
- package/dist/{client/ai-employees/AISettingsProvider.d.ts → client-v2/ai-employees/tools/SuggestionsOptionsCard.d.ts} +6 -8
- package/dist/{client/ai-employees/workflow-tasks/ui → client-v2/ai-employees/tools}/WorkflowTaskOutputCard.d.ts +7 -2
- package/dist/{client/ai-employees/ai-coding/tools/context-tools.d.ts → client-v2/ai-employees/tools/ai-coding.d.ts} +3 -1
- package/dist/client-v2/ai-employees/tools/business-report-utils.d.ts +45 -0
- package/dist/{client/ai-employees/data-modeling/ui → client-v2/ai-employees/tools/data-modeling}/CollectionNode.d.ts +2 -3
- package/dist/{client/ai-employees/data-modeling/ui → client-v2/ai-employees/tools/data-modeling}/Diagram.d.ts +1 -1
- package/dist/{client/ai-employees/data-modeling/ui → client-v2/ai-employees/tools/data-modeling}/Table.d.ts +2 -2
- package/dist/client-v2/ai-employees/tools/data-modeling/legacy-template.d.ts +13 -0
- package/dist/client-v2/ai-employees/tools/data-modeling/runtime.d.ts +15 -0
- package/dist/{client/ai-employees → client-v2/ai-employees/tools}/data-modeling/types.d.ts +27 -4
- package/dist/client-v2/ai-employees/tools/data-modeling/useFieldInterfaceOptions.d.ts +151 -0
- package/dist/{client/ai-employees/data-visualization/tools/index.d.ts → client-v2/ai-employees/tools/data-visualization.d.ts} +1 -1
- package/dist/client-v2/ai-employees/tools/index.d.ts +32 -0
- package/dist/client-v2/ai-employees/types.d.ts +101 -7
- package/dist/client-v2/components/RemoteSelect.d.ts +43 -0
- package/dist/{client → client-v2}/debug-logger.d.ts +2 -2
- package/dist/client-v2/f0053e745af0ad03.svg +50 -0
- package/dist/client-v2/index.d.ts +9 -8
- package/dist/client-v2/index.js +37 -1
- package/dist/client-v2/llm-providers/forms.d.ts +44 -0
- package/dist/client-v2/llm-providers/index.d.ts +24 -0
- package/dist/{client/ai-employees/ai-coding/tools/index.d.ts → client-v2/llm-services/utils.d.ts} +5 -3
- package/dist/client-v2/locale.d.ts +14 -0
- package/dist/client-v2/manager/ai-manager.d.ts +55 -0
- package/dist/client-v2/models/ai-employees/AIEmployeeActionModel.d.ts +33 -0
- package/dist/client-v2/models/ai-employees/AIEmployeeShortcutModel.d.ts +44 -0
- package/dist/client-v2/pages/AdminSettingsPage.d.ts +24 -0
- package/dist/client-v2/pages/DatasourceSettingsPage.d.ts +62 -0
- package/dist/client-v2/pages/EmployeesPage.d.ts +62 -0
- package/dist/client-v2/pages/LLMServicesPage.d.ts +75 -0
- package/dist/client-v2/pages/MCPSettingsPage.d.ts +73 -0
- package/dist/client-v2/pages/drawerWidth.d.ts +10 -0
- package/dist/client-v2/pages/permissions/Permissions.d.ts +67 -0
- package/dist/client-v2/pages/permissions/PermissionsTab.d.ts +12 -0
- package/dist/client-v2/pages/useUnsavedChangesBeforeClose.d.ts +29 -0
- package/dist/client-v2/plugin.d.ts +33 -0
- package/dist/client-v2/repositories/AIConfigRepository.d.ts +3 -23
- package/dist/client-v2/runjs/registerAIEmployeeRunJSFacade.d.ts +20 -0
- package/dist/client-v2/workflow/components/FormValueRegistry.d.ts +12 -0
- package/dist/{client/components/ListCollapse.d.ts → client-v2/workflow/components/WorkflowListCollapse.d.ts} +4 -4
- package/dist/client-v2/workflow/constants.d.ts +26 -0
- package/dist/client-v2/workflow/nodes/employee/components/AIEmployeeFieldset.d.ts +11 -0
- package/dist/{client/ai-employees/common/CodeHighlight.d.ts → client-v2/workflow/nodes/employee/components/AIEmployeeSelect.d.ts} +5 -6
- package/dist/{client/ai-employees/ContextAwareTooltip.d.ts → client-v2/workflow/nodes/employee/components/Assignees.d.ts} +2 -1
- package/dist/client-v2/workflow/nodes/employee/components/FeedbackSettings.d.ts +17 -0
- package/dist/client-v2/workflow/nodes/employee/components/FileInputs.d.ts +11 -0
- package/dist/{client/ai-employees/AIEmployeesProvider.d.ts → client-v2/workflow/nodes/employee/components/MessageInputs.d.ts} +2 -3
- package/dist/client-v2/workflow/nodes/employee/components/ModelOptions.d.ts +17 -0
- package/dist/{client/ai-employees/admin/datasource/components/basic/CollectionCascader.d.ts → client-v2/workflow/nodes/employee/components/SkillSettings.d.ts} +6 -3
- package/dist/client-v2/workflow/nodes/employee/components/StructuredOutput.d.ts +11 -0
- package/dist/client-v2/workflow/nodes/employee/components/UserInput.d.ts +18 -0
- package/dist/client-v2/workflow/nodes/employee/components/WebSearchOptions.d.ts +16 -0
- package/dist/client-v2/workflow/nodes/employee/index.d.ts +23 -0
- package/dist/{client/ai-employees/AIEmployeeListItem.d.ts → client-v2/workflow/nodes/llm/components/LLMFieldset.d.ts} +3 -5
- package/dist/{client/admin-settings/AdminSettings.d.ts → client-v2/workflow/nodes/llm/components/Messages.d.ts} +2 -1
- package/dist/client-v2/workflow/nodes/llm/components/StructuredOutput.d.ts +11 -0
- package/dist/client-v2/workflow/nodes/llm/index.d.ts +30 -0
- package/dist/{client/ai-employees/1.x/selector/BlockSelector.d.ts → client-v2/workflow/register.d.ts} +2 -6
- package/dist/client-v2/workflow/triggers/ai-employee/AIEmployeeTriggerConfig.d.ts +11 -0
- package/dist/client-v2/workflow/triggers/ai-employee/Parameters.d.ts +11 -0
- package/dist/client-v2/workflow/triggers/ai-employee/index.d.ts +25 -0
- package/dist/client-v2/workflow/types.d.ts +128 -0
- package/dist/externalVersion.js +20 -25
- package/dist/locale/en-US.json +45 -1
- package/dist/locale/zh-CN.json +45 -1
- package/dist/node_modules/@langchain/mistralai/package.json +1 -1
- package/dist/node_modules/@langchain/xai/package.json +1 -1
- package/dist/node_modules/fs-extra/package.json +1 -1
- package/dist/node_modules/jsonrepair/package.json +1 -1
- package/dist/node_modules/just-bash/package.json +1 -1
- package/dist/node_modules/nodejs-snowflake/package.json +1 -1
- package/dist/node_modules/openai/package.json +1 -1
- package/dist/node_modules/zod/package.json +1 -1
- package/dist/server/ai-employees/ai-employee.d.ts +1 -0
- package/dist/server/ai-employees/ai-employee.js +37 -2
- package/dist/server/ai-employees/prompts.d.ts +2 -1
- package/dist/server/ai-employees/prompts.js +8 -2
- package/dist/server/ai-employees/tool-call-sanitizer.d.ts +1 -0
- package/dist/server/ai-employees/tool-call-sanitizer.js +2 -1
- package/dist/server/ai-employees/utils.js +11 -5
- package/dist/server/attachments.d.ts +24 -0
- package/dist/server/attachments.js +204 -0
- package/dist/server/document-loader/cached.d.ts +1 -0
- package/dist/server/document-loader/cached.js +18 -9
- package/dist/server/document-loader/loader.d.ts +0 -1
- package/dist/server/document-loader/loader.js +25 -8
- package/dist/server/document-loader/types.d.ts +7 -0
- package/dist/server/llm-providers/anthropic.d.ts +2 -1
- package/dist/server/llm-providers/anthropic.js +1 -3
- package/dist/server/llm-providers/dashscope.d.ts +2 -1
- package/dist/server/llm-providers/dashscope.js +16 -1
- package/dist/server/llm-providers/deepseek.d.ts +2 -1
- package/dist/server/llm-providers/deepseek.js +33 -2
- package/dist/server/llm-providers/google-genai.d.ts +1 -1
- package/dist/server/llm-providers/google-genai.js +1 -5
- package/dist/server/llm-providers/kimi/provider.d.ts +2 -1
- package/dist/server/llm-providers/kimi/provider.js +22 -2
- package/dist/server/llm-providers/mistral.d.ts +36 -2
- package/dist/server/llm-providers/mistral.js +62 -2
- package/dist/server/llm-providers/openai/completions.d.ts +2 -1
- package/dist/server/llm-providers/openai/completions.js +17 -1
- package/dist/server/llm-providers/openai/responses.d.ts +2 -1
- package/dist/server/llm-providers/openai/responses.js +17 -1
- package/dist/server/llm-providers/provider.d.ts +10 -2
- package/dist/server/llm-providers/provider.js +33 -4
- package/dist/server/manager/ai-context-datasource-manager.js +34 -7
- package/dist/server/manager/ai-manager.d.ts +2 -1
- package/dist/server/manager/ai-manager.js +4 -1
- package/dist/server/plugin.js +14 -0
- package/dist/server/resource/aiConversations.js +44 -1
- package/dist/server/utils.d.ts +5 -2
- package/dist/server/utils.js +11 -19
- package/dist/server/workflow/nodes/employee/files.d.ts +3 -1
- package/dist/server/workflow/nodes/employee/files.js +31 -5
- package/package.json +5 -5
- package/dist/client/119.c6bf8c6433167d81.js +0 -10
- package/dist/client/170.d98eacdc00d9d527.js +0 -10
- package/dist/client/228.b4b709f93b86b6b9.js +0 -10
- package/dist/client/280.003b9e9788599244.js +0 -10
- package/dist/client/290.0f7f441d8a94f03c.js +0 -10
- package/dist/client/331.d547c95410476a69.js +0 -10
- package/dist/client/406.15c09d98faa2ccf1.js +0 -10
- package/dist/client/428.5eb4f53ddbb6a3b8.js +0 -10
- package/dist/client/462.d172d0fe91519e35.js +0 -10
- package/dist/client/486.dcac8f3fcec19c33.js +0 -10
- package/dist/client/502.2b4a51e0a8122e52.js +0 -10
- package/dist/client/525.33a9c8ec28be4ec4.js +0 -10
- package/dist/client/559.959c46d0056ccdc8.js +0 -10
- package/dist/client/561.7ec804ef39ec7dcd.js +0 -10
- package/dist/client/580.35ba54ff91b7fe6d.js +0 -10
- package/dist/client/597.b0d64948d74cf6cb.js +0 -10
- package/dist/client/604.89c674f35b52b4ef.js +0 -10
- package/dist/client/614.aa766080f6b99aab.js +0 -10
- package/dist/client/646.2e395a514c511084.js +0 -10
- package/dist/client/687.224e569a99cae4bb.js +0 -10
- package/dist/client/699.57c0a1acb723202a.js +0 -10
- package/dist/client/711.92cd94681fde7e05.js +0 -10
- package/dist/client/758.a9741e81911e53c3.js +0 -10
- package/dist/client/768.5177bff46ae71a5b.js +0 -10
- package/dist/client/792.abb57765453bcbcc.js +0 -10
- package/dist/client/820.f72ef2462b61d812.js +0 -10
- package/dist/client/832.0cf69e3f43c320b2.js +0 -10
- package/dist/client/927.d95c74ebb8fd51c9.js +0 -10
- package/dist/client/ai-employees/1.x/selector/AISelectorProvider.d.ts +0 -33
- package/dist/client/ai-employees/ProfileCard.d.ts +0 -15
- package/dist/client/ai-employees/admin/ChatSettings.d.ts +0 -10
- package/dist/client/ai-employees/admin/DataSourceSettings.d.ts +0 -10
- package/dist/client/ai-employees/admin/EnableSwitch.d.ts +0 -10
- package/dist/client/ai-employees/admin/InputsFormSettings.d.ts +0 -10
- package/dist/client/ai-employees/admin/KnowledgeBaseSettings.d.ts +0 -10
- package/dist/client/ai-employees/admin/ModelSettings.d.ts +0 -10
- package/dist/client/ai-employees/admin/SkillSettings.d.ts +0 -19
- package/dist/client/ai-employees/admin/SystemPrompt.d.ts +0 -10
- package/dist/client/ai-employees/admin/Templates.d.ts +0 -10
- package/dist/client/ai-employees/admin/ToolsSettings.d.ts +0 -17
- package/dist/client/ai-employees/admin/datasource/components/DatasourceSettingForm.d.ts +0 -10
- package/dist/client/ai-employees/admin/datasource/components/DatasourceSettingGrid.d.ts +0 -10
- package/dist/client/ai-employees/admin/datasource/components/basic/FieldsTransfer.d.ts +0 -17
- package/dist/client/ai-employees/admin/datasource/components/form-steps/CollectionSetting.d.ts +0 -17
- package/dist/client/ai-employees/admin/datasource/components/form-steps/FieldsSetting.d.ts +0 -15
- package/dist/client/ai-employees/admin/datasource/components/form-steps/FilterSetting.d.ts +0 -17
- package/dist/client/ai-employees/admin/datasource/components/form-steps/Preview.d.ts +0 -13
- package/dist/client/ai-employees/admin/datasource/components/form-steps/SortSetting.d.ts +0 -15
- package/dist/client/ai-employees/admin/datasource/components/form-steps/index.d.ts +0 -13
- package/dist/client/ai-employees/admin/datasource/components/index.d.ts +0 -9
- package/dist/client/ai-employees/admin/datasource/context.d.ts +0 -17
- package/dist/client/ai-employees/admin/datasource/flow-models/index.d.ts +0 -9
- package/dist/client/ai-employees/admin/datasource/index.d.ts +0 -10
- package/dist/client/ai-employees/admin/hooks.d.ts +0 -39
- package/dist/client/ai-employees/admin/mcp/MCPSettings.d.ts +0 -10
- package/dist/client/ai-employees/admin/mcp/MCPToolsList.d.ts +0 -19
- package/dist/client/ai-employees/admin/mcp/context.d.ts +0 -15
- package/dist/client/ai-employees/admin/mcp/schemas.d.ts +0 -1314
- package/dist/client/ai-employees/ai-coding/CodeHistory.d.ts +0 -10
- package/dist/client/ai-employees/ai-coding/markdown/Code.d.ts +0 -16
- package/dist/client/ai-employees/avatars.d.ts +0 -9
- package/dist/client/ai-employees/built-in/utils.d.ts +0 -15
- package/dist/client/ai-employees/business-report/tools/index.d.ts +0 -10
- package/dist/client/ai-employees/business-report/ui/report-utils.d.ts +0 -38
- package/dist/client/ai-employees/chart-generator/tools/index.d.ts +0 -10
- package/dist/client/ai-employees/chart-generator/ui/ECharts.d.ts +0 -13
- package/dist/client/ai-employees/chatbox/AIThinking.d.ts +0 -12
- package/dist/client/ai-employees/chatbox/Attachment.d.ts +0 -14
- package/dist/client/ai-employees/chatbox/AttachmentsHeader.d.ts +0 -10
- package/dist/client/ai-employees/chatbox/ChatBox.d.ts +0 -12
- package/dist/client/ai-employees/chatbox/ContextItemsHeader.d.ts +0 -10
- package/dist/client/ai-employees/chatbox/DebugPanel.d.ts +0 -16
- package/dist/client/ai-employees/chatbox/EditMessageHeader.d.ts +0 -10
- package/dist/client/ai-employees/chatbox/HintMessageHeader.d.ts +0 -10
- package/dist/client/ai-employees/chatbox/MessageRenderer.d.ts +0 -33
- package/dist/client/ai-employees/chatbox/SenderFooter.d.ts +0 -13
- package/dist/client/ai-employees/chatbox/SenderHeader.d.ts +0 -10
- package/dist/client/ai-employees/chatbox/SenderPrefix.d.ts +0 -10
- package/dist/client/ai-employees/chatbox/Upload.d.ts +0 -12
- package/dist/client/ai-employees/chatbox/VirtualList.d.ts +0 -28
- package/dist/client/ai-employees/chatbox/conversations/ConversationsList.d.ts +0 -13
- package/dist/client/ai-employees/chatbox/conversations/WorkflowTasksList.d.ts +0 -13
- package/dist/client/ai-employees/chatbox/conversations/index.d.ts +0 -9
- package/dist/client/ai-employees/chatbox/generative-ui/DefaultToolCard.d.ts +0 -16
- package/dist/client/ai-employees/chatbox/hooks/useChatBoxActions.d.ts +0 -18
- package/dist/client/ai-employees/chatbox/hooks/useUploadFiles.d.ts +0 -12
- package/dist/client/ai-employees/chatbox/markdown/ECharts.d.ts +0 -10
- package/dist/client/ai-employees/chatbox/markdown/Form.d.ts +0 -10
- package/dist/client/ai-employees/chatbox/markdown/Generating.d.ts +0 -10
- package/dist/client/ai-employees/chatbox/markdown/Markdown.d.ts +0 -13
- package/dist/client/ai-employees/chatbox/roles.d.ts +0 -32
- package/dist/client/ai-employees/chatbox/stores/chat-box.d.ts +0 -9
- package/dist/client/ai-employees/chatbox/stores/chat-conversations.d.ts +0 -9
- package/dist/client/ai-employees/chatbox/stores/chat-messages.d.ts +0 -9
- package/dist/client/ai-employees/chatbox/stores/chat-tools.d.ts +0 -51
- package/dist/client/ai-employees/chatbox/stores/create-selectors.d.ts +0 -18
- package/dist/client/ai-employees/chatbox/stores/workflow-tasks.d.ts +0 -45
- package/dist/client/ai-employees/context/classic-pages.d.ts +0 -10
- package/dist/client/ai-employees/data-modeling/Table.d.ts +0 -12
- package/dist/client/ai-employees/data-modeling/setup.d.ts +0 -10
- package/dist/client/ai-employees/data-modeling/tools/index.d.ts +0 -10
- package/dist/client/ai-employees/data-modeling/ui/useFieldInterfaceOptions.d.ts +0 -14
- package/dist/client/ai-employees/datasource/DatasourceList.d.ts +0 -17
- package/dist/client/ai-employees/datasource/index.d.ts +0 -9
- package/dist/client/ai-employees/flow/events/index.d.ts +0 -9
- package/dist/client/ai-employees/flow/index.d.ts +0 -36
- package/dist/client/ai-employees/flow/models/AIEmployeeActionModel.d.ts +0 -18
- package/dist/client/ai-employees/flow/models/AIEmployeeShortcutModel.d.ts +0 -30
- package/dist/client/ai-employees/shortcuts/ShortcutList.d.ts +0 -10
- package/dist/client/ai-employees/shortcuts/useShortcuts.d.ts +0 -13
- package/dist/client/ai-employees/stores/context-aware.d.ts +0 -19
- package/dist/client/ai-employees/sub-agents/tools/index.d.ts +0 -10
- package/dist/client/ai-employees/suggestions/tools/index.d.ts +0 -10
- package/dist/client/ai-employees/suggestions/ui/SuggestionsOptions.d.ts +0 -13
- package/dist/client/ai-employees/types.d.ts +0 -259
- package/dist/client/ai-employees/workflow-tasks/tools/index.d.ts +0 -10
- package/dist/client/chat-settings/Messages.d.ts +0 -11
- package/dist/client/chat-settings/StructuredOutput.d.ts +0 -11
- package/dist/client/components/skill-settings.d.ts +0 -22
- package/dist/client/features/components.d.ts +0 -9
- package/dist/client/features/feature-manager.d.ts +0 -9
- package/dist/client/features/index.d.ts +0 -9
- package/dist/client/features/vector-database-provider.d.ts +0 -9
- package/dist/client/features/vector-store-provider.d.ts +0 -9
- package/dist/client/llm-providers/anthropic/ModelSettings.d.ts +0 -10
- package/dist/client/llm-providers/anthropic/ProviderSettings.d.ts +0 -10
- package/dist/client/llm-providers/anthropic/index.d.ts +0 -10
- package/dist/client/llm-providers/components/Chat.d.ts +0 -10
- package/dist/client/llm-providers/components/ModelSelect.d.ts +0 -10
- package/dist/client/llm-providers/dashscope/ModelSettings.d.ts +0 -10
- package/dist/client/llm-providers/dashscope/ProviderSettings.d.ts +0 -10
- package/dist/client/llm-providers/dashscope/index.d.ts +0 -10
- package/dist/client/llm-providers/deepseek/ModelSettings.d.ts +0 -10
- package/dist/client/llm-providers/deepseek/index.d.ts +0 -10
- package/dist/client/llm-providers/google-genai/MessageRenderer.d.ts +0 -13
- package/dist/client/llm-providers/google-genai/ModelSettings.d.ts +0 -10
- package/dist/client/llm-providers/google-genai/ProviderSettings.d.ts +0 -10
- package/dist/client/llm-providers/google-genai/index.d.ts +0 -10
- package/dist/client/llm-providers/kimi/ModelSettings.d.ts +0 -10
- package/dist/client/llm-providers/kimi/index.d.ts +0 -10
- package/dist/client/llm-providers/mimo/ModelSettings.d.ts +0 -10
- package/dist/client/llm-providers/mimo/index.d.ts +0 -10
- package/dist/client/llm-providers/mistral/ModelSettings.d.ts +0 -10
- package/dist/client/llm-providers/mistral/index.d.ts +0 -10
- package/dist/client/llm-providers/ollama/ModelSettings.d.ts +0 -10
- package/dist/client/llm-providers/ollama/ProviderSettings.d.ts +0 -10
- package/dist/client/llm-providers/ollama/index.d.ts +0 -10
- package/dist/client/llm-providers/openai/completions/ModelSettings.d.ts +0 -10
- package/dist/client/llm-providers/openai/completions/index.d.ts +0 -10
- package/dist/client/llm-providers/openai/components/ProviderSettings.d.ts +0 -10
- package/dist/client/llm-providers/openai/responses/ModelSettings.d.ts +0 -10
- package/dist/client/llm-providers/openai/responses/index.d.ts +0 -10
- package/dist/client/llm-providers/orcarouter/ModelSettings.d.ts +0 -10
- package/dist/client/llm-providers/orcarouter/ProviderSettings.d.ts +0 -10
- package/dist/client/llm-providers/orcarouter/index.d.ts +0 -10
- package/dist/client/llm-providers/tongyi/ModelSettings.d.ts +0 -10
- package/dist/client/llm-providers/tongyi/ProviderSettings.d.ts +0 -10
- package/dist/client/llm-providers/tongyi/index.d.ts +0 -10
- package/dist/client/llm-providers/xai/ModelSettings.d.ts +0 -10
- package/dist/client/llm-providers/xai/index.d.ts +0 -10
- package/dist/client/llm-services/LLMServices.d.ts +0 -13
- package/dist/client/llm-services/component/DefaultModelSelect.d.ts +0 -10
- package/dist/client/llm-services/component/EnabledModelsSelect.d.ts +0 -23
- package/dist/client/llm-services/component/LLMTestFlight.d.ts +0 -10
- package/dist/client/llm-services/component/ModelOptionsSettings.d.ts +0 -10
- package/dist/client/llm-services/component/UnifiedModelSettings.d.ts +0 -10
- package/dist/client/llm-services/hooks/useLLMServiceCatalog.d.ts +0 -18
- package/dist/client/llm-services/llm-providers.d.ts +0 -27
- package/dist/client/llm-services/utils.d.ts +0 -35
- package/dist/client/manager/ai-feature-manager.d.ts +0 -9
- package/dist/client/manager/ai-manager.d.ts +0 -35
- package/dist/client/repositories/AIConfigRepository.d.ts +0 -60
- package/dist/client/repositories/hooks/useAIConfigRepository.d.ts +0 -10
- package/dist/client/schemas/llms.d.ts +0 -347
- package/dist/client/workflow/nodes/employee/components/AIEmployeeSelect.d.ts +0 -10
- package/dist/client/workflow/nodes/employee/components/assigness.d.ts +0 -11
- package/dist/client/workflow/nodes/employee/components/file-inputs.d.ts +0 -10
- package/dist/client/workflow/nodes/employee/components/message-inputs.d.ts +0 -12
- package/dist/client/workflow/nodes/employee/components/model-options.d.ts +0 -10
- package/dist/client/workflow/nodes/employee/components/structured-output.d.ts +0 -10
- package/dist/client/workflow/nodes/employee/components/users-select.d.ts +0 -15
- package/dist/client/workflow/nodes/employee/components/web-search-options.d.ts +0 -10
- package/dist/client/workflow/nodes/employee/configuration.d.ts +0 -12
- package/dist/client/workflow/nodes/employee/flow-models/feedback.d.ts +0 -14
- package/dist/client/workflow/nodes/employee/flow-models/task.d.ts +0 -13
- package/dist/client/workflow/nodes/llm/ModelSettings.d.ts +0 -11
- package/dist/client/workflow/triggers/ai-employee/Parameters.d.ts +0 -13
- /package/dist/{client → client-v2}/ai-employees/AISelection.d.ts +0 -0
- /package/dist/{client → client-v2}/ai-employees/AISelectionControl.d.ts +0 -0
- /package/dist/{client → client-v2}/ai-employees/ai-coding/prompts.d.ts +0 -0
- /package/dist/{client → client-v2}/ai-employees/ai-coding/setup.d.ts +0 -0
- /package/dist/{client/ai-employees/chatbox/AIEmployeeSwitch.d.ts → client-v2/ai-employees/chatbox/components/AIEmployeeSwitcher.d.ts} +0 -0
- /package/dist/{client/ai-employees/chatbox → client-v2/ai-employees/chatbox/components}/ChatButton.d.ts +0 -0
- /package/dist/{client/ai-employees/chatbox/conversations → client-v2/ai-employees/chatbox/components}/Conversations.d.ts +0 -0
- /package/dist/{client/ai-employees/chatbox → client-v2/ai-employees/chatbox/components}/Messages.d.ts +0 -0
- /package/dist/{client/ai-employees/chatbox → client-v2/ai-employees/chatbox/components}/ModelSwitcher.d.ts +0 -0
- /package/dist/{client/ai-employees/chatbox → client-v2/ai-employees/chatbox/components}/SearchSwitch.d.ts +0 -0
- /package/dist/{client/ai-employees/chatbox → client-v2/ai-employees/chatbox/components}/Sender.d.ts +0 -0
- /package/dist/{client/ai-employees/chatbox/generative-ui → client-v2/ai-employees/chatbox/components}/ToolModal.d.ts +0 -0
- /package/dist/{client/ai-employees/chatbox → client-v2/ai-employees/chatbox/components}/UserPrompt.d.ts +0 -0
- /package/dist/{client → client-v2}/ai-employees/chatbox/hooks/useChatBoxEffect.d.ts +0 -0
- /package/dist/{client → client-v2}/ai-employees/chatbox/hooks/useLoadMoreObserver.d.ts +0 -0
- /package/dist/client-v2/ai-employees/{chatbox/stores → stores}/global-store.d.ts +0 -0
- /package/dist/{client/ai-employees/flow/models → client-v2/models/ai-employees}/AIEmployeeShortcutListModel.d.ts +0 -0
- /package/dist/{client/ai-employees/flow/models → client-v2/models/ai-employees}/index.d.ts +0 -0
- /package/dist/{client/ai-employees/flow/events/ai-context-selection.d.ts → client-v2/workflow/components/index.d.ts} +0 -0
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
---
|
|
2
|
+
pkg: '@nocobase/plugin-file-manager'
|
|
3
|
+
title: "Stable URL (proxy URL)"
|
|
4
|
+
description: "Explains NocoBase stable file URLs, access permissions, redirects, temporary Office preview URLs, and behavior across file-related features."
|
|
5
|
+
keywords: "stable URL,proxy URL,permanent URL,file access,file permissions,Office preview,NocoBase"
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Stable URL
|
|
9
|
+
|
|
10
|
+
Files managed by a NocoBase storage engine are accessed through a **stable URL**. The URL first reaches NocoBase, where the file record and access permissions are checked, and then redirects to the actual URL generated by the storage engine.
|
|
11
|
+
|
|
12
|
+
## URL format
|
|
13
|
+
|
|
14
|
+
```text
|
|
15
|
+
/files/<app>/<dataSource>/<collection>/<id><extname>
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
For example:
|
|
19
|
+
|
|
20
|
+
```text
|
|
21
|
+
/files/main/main/attachments/42.pdf
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
When `APP_PUBLIC_PATH=/nocobase` is configured, the URL starts with `/nocobase/files/`. The path identifies the app, data source, file collection, record ID, and extension. The ID and extension cannot be changed after creation, which keeps the URL stable for the lifetime of the record.
|
|
25
|
+
|
|
26
|
+
## URL variants
|
|
27
|
+
|
|
28
|
+
| Purpose | URL | Behavior |
|
|
29
|
+
|---|---|---|
|
|
30
|
+
| Open or embed | `/files/.../42.pdf` | Checks permission and redirects to the actual file URL |
|
|
31
|
+
| Preview | `/files/.../42.png?preview=1` | Redirects to the preview or thumbnail URL |
|
|
32
|
+
| Download | `/files/.../42.pdf?download=1` | Redirects with download semantics |
|
|
33
|
+
| Office preview | `/files/.../42.xlsx?temporaryAccessToken=...` | Allows Microsoft Office Online Viewer to fetch one file for a short time |
|
|
34
|
+
|
|
35
|
+
:::tip
|
|
36
|
+
|
|
37
|
+
Use the `url` and `preview` values returned by NocoBase. Application code normally should not construct `/files` URLs or their query parameters.
|
|
38
|
+
|
|
39
|
+
:::
|
|
40
|
+
|
|
41
|
+
## Behavior across NocoBase
|
|
42
|
+
|
|
43
|
+
- Attachment fields and file collections return stable URLs after upload and when records are queried
|
|
44
|
+
- [HTTP API](./http-api.md) responses no longer expose local paths, storage domains, or presigned download URLs
|
|
45
|
+
- Markdown uploads store the stable URL, including files in private S3, OSS, COS, or S3 Pro storage
|
|
46
|
+
- Attachment URL fields store a stable URL for managed uploads, while manually entered external URLs remain unchanged
|
|
47
|
+
- Image, PDF, audio, video, and text previews use the stable URL and the current NocoBase login session
|
|
48
|
+
- Public forms grant limited access to files uploaded in the current public-form browser session; this does not create a generally public link
|
|
49
|
+
|
|
50
|
+
## Office preview
|
|
51
|
+
|
|
52
|
+
Microsoft Office Online Viewer fetches the file from Microsoft servers and cannot use the user's NocoBase cookie. When the user opens an Office preview, NocoBase first checks the user's file permission and then issues a temporary URL for that file.
|
|
53
|
+
|
|
54
|
+
The URL is valid for 10 minutes by default. `TEMPORARY_FILE_ACCESS_EXPIRES_IN` may be set from 5 to 10 minutes. It is requested again when the preview is reopened and must never be saved in an attachment field, Markdown content, or a business record.
|
|
55
|
+
|
|
56
|
+
## Permissions and redirects
|
|
57
|
+
|
|
58
|
+
Logged-in requests use the current app credentials and role. After permission is granted, NocoBase responds with `302` and redirects to the local or object-storage URL.
|
|
59
|
+
|
|
60
|
+
Stable URLs support `GET` and `HEAD`. Other methods return `405`. A command-line client must follow redirects, for example:
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
curl -L \
|
|
64
|
+
-H "Authorization: Bearer <JWT>" \
|
|
65
|
+
"https://example.com/files/main/main/attachments/42.pdf"
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## Important notes
|
|
69
|
+
|
|
70
|
+
- Stable does not mean public; recipients still need permission to view the file
|
|
71
|
+
- Deleting the record or changing its app, data source, or collection context invalidates the old URL
|
|
72
|
+
- Do not persist `temporaryAccessToken` or use it as a sharing link
|
|
73
|
+
- Do not cache the `302 Location` as a permanent URL because storage signatures can expire
|
|
74
|
+
- Do not rewrite the app, data source, collection, ID, or extension in the path
|
|
75
|
+
- Reverse proxies must forward the `/files/` route under `APP_PUBLIC_PATH` to NocoBase. For subpath deployments, keep a compatible root-level `/files/` route as well. Configurations generated by the NocoBase CLI include both routes automatically
|
|
76
|
+
- Deployments where the pages access the API cross-origin (with `API_BASE_URL` pointing to another origin) must add the page origin to `CORS_ORIGIN_WHITELIST`; otherwise the login cookie is never stored and stable URLs return `403` for lack of credentials. See [Environment Variables](../get-started/installation/env.md#api_base_url)
|
|
77
|
+
- Use a different `hostname` for each independent NocoBase service instead of separating services only by port. Browser cookies are not isolated by port; see [Production Environment Deployment](../get-started/deployment/production.md)
|
|
78
|
+
- Sub-apps in the same NocoBase deployment are distinguished by app name and do not need separate hostnames. However, an independent service on another port still needs hostname isolation if it contains a main app or sub-app with the same name
|
|
79
|
+
- Custom `fetch()` code may also need object-storage CORS after following the redirect
|
|
80
|
+
- Use a dedicated sharing or public-access feature when a long-lived public link is required
|
|
81
|
+
|
|
82
|
+
## Related links
|
|
83
|
+
|
|
84
|
+
- [HTTP API](./http-api.md) — Upload and query files through the API
|
|
85
|
+
- [File preview](./file-preview/index.md) — Preview behavior for supported file types
|
|
86
|
+
- [Office file preview](./file-preview/ms-office.md) — Configure Microsoft Office Online Viewer
|
|
87
|
+
- [Storage engines](./storage/index.md) — Configure local and object storage
|
|
@@ -2,12 +2,34 @@
|
|
|
2
2
|
|
|
3
3
|
When deploying NocoBase in a production environment, installing dependencies can be cumbersome due to differences in build methods across various systems and environments. For a complete functional experience, we recommend deploying with **Docker**. If your system environment cannot use Docker, you can also deploy using **create-nocobase-app**.
|
|
4
4
|
|
|
5
|
-
:::warning
|
|
5
|
+
:::warning Note
|
|
6
6
|
|
|
7
7
|
It is not recommended to deploy directly from source code in a production environment. The source code has many dependencies, is large in size, and a full compilation has high CPU and memory requirements. If you must deploy from source code, it is recommended to first build a custom Docker image and then deploy it.
|
|
8
8
|
|
|
9
9
|
:::
|
|
10
10
|
|
|
11
|
+
:::warning Note
|
|
12
|
+
|
|
13
|
+
If you deploy multiple independent NocoBase services, use a different `hostname` for each service, such as separate subdomains. Do not distinguish services only by port, for example `https://example.com:13000` and `https://example.com:14000`.
|
|
14
|
+
|
|
15
|
+
NocoBase uses cookies to maintain login state and [file access permissions](../../file-manager/stable-url.md). Browsers do not isolate cookies by port, so services on different ports under the same `hostname` may share cookies with the same name. This can overwrite login state or cause file preview and download authorization failures.
|
|
16
|
+
|
|
17
|
+
Sub-apps within the same NocoBase deployment are outside this restriction. Login cookies are distinguished by app name, so the main app and differently named sub-apps can share one `hostname`.
|
|
18
|
+
|
|
19
|
+
However, independent services still need isolation. If another NocoBase service runs on a different port under the same `hostname` and contains a main app or sub-app with the same name, its cookies may still conflict.
|
|
20
|
+
|
|
21
|
+
Use addresses such as `app1.example.com` and `app2.example.com`, then route them to different NocoBase services through Nginx or Caddy.
|
|
22
|
+
|
|
23
|
+
:::
|
|
24
|
+
|
|
25
|
+
## Separated Frontend / Cross-Origin API Access
|
|
26
|
+
|
|
27
|
+
Prefer keeping the pages and the API on the same origin: use a reverse proxy under one domain to forward `${APP_PUBLIC_PATH}api/` and `${APP_PUBLIC_PATH}files/` to the NocoBase service, and leave `API_BASE_URL` empty.
|
|
28
|
+
|
|
29
|
+
If the pages must access the API cross-origin (with `API_BASE_URL` pointing to another origin), add the page origin to `CORS_ORIGIN_WHITELIST`. Otherwise the browser ignores `Set-Cookie` in API responses, the login cookie is never stored, and preview and download through stable file URLs fail authorization.
|
|
30
|
+
|
|
31
|
+
Also note that cookies are stored per `hostname`: when the pages and the API use entirely different domains, requests to `/files/` from the page domain will not carry the login cookie stored under the API domain. Such deployments should switch to a same-origin reverse proxy. See [Environment Variables](../installation/env.md#api_base_url).
|
|
32
|
+
|
|
11
33
|
## Deployment Process
|
|
12
34
|
|
|
13
35
|
For production environment deployment, you can refer to the existing installation and upgrade steps.
|
|
@@ -39,4 +61,4 @@ In a production environment, it is recommended to manage static assets with a pr
|
|
|
39
61
|
Depending on the installation method, you can use the following commands to manage the NocoBase process:
|
|
40
62
|
|
|
41
63
|
- [docker compose](./common-commands/docker-compose.md)
|
|
42
|
-
- [pm2](./common-commands/pm2.md)
|
|
64
|
+
- [pm2](./common-commands/pm2.md)
|
|
@@ -94,6 +94,7 @@ services:
|
|
|
94
94
|
- `NOCOBASE_PROXY_UPSTREAM_HOST=app` lets the Caddy container reach the `app` service through the Compose network
|
|
95
95
|
- `./storage` must be mounted into both the `app` and `caddy` containers so they can share proxy config, static assets, and uploaded files
|
|
96
96
|
- The `caddy` container should wait until `nocobase.caddy` is generated, then link it to `/etc/caddy/Caddyfile` with `ln -sf`
|
|
97
|
+
- The generated config forwards both the `/files/` route under `APP_PUBLIC_PATH` and the root-level `/files/` route to NocoBase for authenticated file previews and downloads
|
|
97
98
|
- Expose only the Caddy container port to the host. For testing, you can start with `13000:80`; in production, you usually expose the host `80` and `443` ports directly, while the `app` service does not need to expose its port to the host
|
|
98
99
|
|
|
99
100
|
## If you use a local host Caddy
|
|
@@ -169,6 +170,8 @@ sudo systemctl reload caddy
|
|
|
169
170
|
|
|
170
171
|
If your host Caddy does not use `/etc/caddy/Caddyfile`, replace the link target with your own config path. Usually it is safer to keep `nocobase.caddy` as the main entry file instead of copying its content manually.
|
|
171
172
|
|
|
173
|
+
If you maintain Caddy yourself instead of using the generated config, make sure `/files/*` and the corresponding route under `APP_PUBLIC_PATH` are forwarded to NocoBase before the SPA fallback rules. See [Caddy Reverse Proxy](../../nocobase-cli/production/reverse-proxy/caddy.md) for a complete example.
|
|
174
|
+
|
|
172
175
|
## Related links
|
|
173
176
|
|
|
174
177
|
- [Docker Installation (Built-in Nginx)](./docker.mdx) — Start with the single-container setup
|
|
@@ -95,6 +95,7 @@ services:
|
|
|
95
95
|
- `NOCOBASE_PROXY_UPSTREAM_HOST=app` lets the Nginx container reach the `app` service through the Compose network
|
|
96
96
|
- `./storage` must be mounted into both the `app` and `nginx` containers so they can share proxy config, static assets, and uploaded files
|
|
97
97
|
- The `nginx` container should wait until `nocobase.conf` is generated, then link it to `/etc/nginx/conf.d/default.conf` with `ln -sf`
|
|
98
|
+
- The generated config forwards both the `/files/` route under `APP_PUBLIC_PATH` and the root-level `/files/` route to NocoBase for authenticated file previews and downloads
|
|
98
99
|
- If you use an external Nginx container, let the `nginx` container handle the host port mapping. For testing, you can start with `13000:80`; in production, you usually expose the host `80` and `443` ports directly, while the `app` service does not need to expose its port to the host
|
|
99
100
|
|
|
100
101
|
## If you use a local host Nginx
|
|
@@ -170,6 +171,8 @@ sudo systemctl reload nginx
|
|
|
170
171
|
|
|
171
172
|
If your host Nginx does not use the `conf.d` directory, replace the link target with your own config path. Usually it is safer to keep `nocobase.conf` as a file included from the `http {}` context instead of copying its content manually.
|
|
172
173
|
|
|
174
|
+
If you maintain Nginx yourself instead of using the generated config, make sure `/files/` and the corresponding route under `APP_PUBLIC_PATH` are forwarded to NocoBase before the SPA fallback rules. See [Nginx Reverse Proxy](../../nocobase-cli/production/reverse-proxy/nginx.md) for a complete example.
|
|
175
|
+
|
|
173
176
|
## Related links
|
|
174
177
|
|
|
175
178
|
- [Docker Installation (Built-in Nginx)](./docker.mdx) — Start with the single-container setup
|
|
@@ -627,7 +627,7 @@ If you use the built-in Nginx image, it is usually better not to expose `13000`
|
|
|
627
627
|
|
|
628
628
|
The following config proxies domain requests to `http://127.0.0.1:13000/`:
|
|
629
629
|
|
|
630
|
-
```
|
|
630
|
+
```nginx
|
|
631
631
|
server {
|
|
632
632
|
listen 80;
|
|
633
633
|
server_name your_domain.com; # Replace your_domain.com with your domain
|
|
@@ -658,6 +658,8 @@ server {
|
|
|
658
658
|
|
|
659
659
|
If you also want to enable HTTPS, configure `443` and the certificate on the host Nginx. The NocoBase container does not need to handle certificates separately.
|
|
660
660
|
|
|
661
|
+
The `location /` block in this root-path configuration also proxies `/api/`, `/ws`, and `/files/`. If you split static assets from application routes, make sure `/files/` is still forwarded to NocoBase and is not handled as a static directory.
|
|
662
|
+
|
|
661
663
|
### Subpath deployment
|
|
662
664
|
|
|
663
665
|
If you want to deploy the app under a subpath, such as `https://your_domain.com/nocobase/`, configure the `APP_PUBLIC_PATH` environment variable first:
|
|
@@ -674,7 +676,7 @@ Keep the leading and trailing `/` in the path. After this is configured, the app
|
|
|
674
676
|
|
|
675
677
|
Then configure the host Nginx with the same subpath proxy:
|
|
676
678
|
|
|
677
|
-
```
|
|
679
|
+
```nginx
|
|
678
680
|
server {
|
|
679
681
|
listen 80;
|
|
680
682
|
server_name your_domain.com; # Replace your_domain.com with your domain
|
|
@@ -700,10 +702,32 @@ server {
|
|
|
700
702
|
send_timeout 600;
|
|
701
703
|
proxy_buffering off;
|
|
702
704
|
}
|
|
705
|
+
|
|
706
|
+
# Keep compatibility with root-level file access URLs.
|
|
707
|
+
location ^~ /files/ {
|
|
708
|
+
proxy_pass http://127.0.0.1:13000;
|
|
709
|
+
proxy_http_version 1.1;
|
|
710
|
+
|
|
711
|
+
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
|
712
|
+
proxy_set_header X-Forwarded-Proto $upstream_x_forwarded_proto;
|
|
713
|
+
proxy_set_header Host $final_host;
|
|
714
|
+
proxy_set_header Referer $http_referer;
|
|
715
|
+
proxy_set_header User-Agent $http_user_agent;
|
|
716
|
+
|
|
717
|
+
add_header Cache-Control "no-cache, no-store" always;
|
|
718
|
+
|
|
719
|
+
proxy_connect_timeout 600;
|
|
720
|
+
proxy_send_timeout 600;
|
|
721
|
+
proxy_read_timeout 600;
|
|
722
|
+
send_timeout 600;
|
|
723
|
+
}
|
|
703
724
|
}
|
|
704
725
|
```
|
|
705
726
|
|
|
706
|
-
|
|
727
|
+
Keep these points in mind:
|
|
728
|
+
|
|
729
|
+
- `APP_PUBLIC_PATH` and the path in `proxy_pass` must stay consistent. If either side misses `/nocobase/`, static assets and routing will usually not work correctly
|
|
730
|
+
- `/nocobase/files/` is forwarded by `location /nocobase/`; the compatible root-level `/files/` route must be forwarded to NocoBase separately
|
|
707
731
|
|
|
708
732
|
### Other options
|
|
709
733
|
|
|
@@ -86,6 +86,39 @@ API_BASE_PATH=/api/
|
|
|
86
86
|
|
|
87
87
|
### API_BASE_URL
|
|
88
88
|
|
|
89
|
+
Base URL the frontend uses to access the NocoBase API. Empty by default, which means the same-origin `${APP_PUBLIC_PATH}api/` is used.
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
API_BASE_URL=
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
Only set it to the full API address when the pages and the API service are on different origins (different protocol, domain, or port):
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
API_BASE_URL=https://api.example.com/api/
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
:::warning{title="Cross-origin deployments"}
|
|
102
|
+
NocoBase uses cookies to maintain login state and to authorize [stable file URLs](../../file-manager/stable-url.md). When `API_BASE_URL` points to a different origin than the pages:
|
|
103
|
+
|
|
104
|
+
- The page origin must be added to [`CORS_ORIGIN_WHITELIST`](#cors_origin_whitelist). Otherwise the browser ignores `Set-Cookie` in API responses, the login cookie is never stored, and cookie-dependent features such as file preview and download fail with `403`.
|
|
105
|
+
- Cookies are stored per `hostname`. If the pages and the API use entirely different domains, requests to `/files/` stable URLs from the page domain will not carry the login cookie stored under the API domain, so file access still fails.
|
|
106
|
+
|
|
107
|
+
Prefer serving the pages and the API from the same origin through a reverse proxy and leaving `API_BASE_URL` empty.
|
|
108
|
+
:::
|
|
109
|
+
|
|
110
|
+
### CORS_ORIGIN_WHITELIST
|
|
111
|
+
|
|
112
|
+
Whitelist of origins allowed to access the API cross-origin with credentials (cookies). Multiple origins are separated by commas. Empty by default.
|
|
113
|
+
|
|
114
|
+
```bash
|
|
115
|
+
CORS_ORIGIN_WHITELIST=https://www.example.com,https://admin.example.com
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
- When not configured, only same-origin requests are treated as trusted; cross-origin requests can still call the API anonymously, but the browser is not allowed to read or write cookies for them.
|
|
119
|
+
- When configured, whitelisted origins receive an exact `Access-Control-Allow-Origin` echo and `Access-Control-Allow-Credentials: true`, which lets the browser send and store login cookies on cross-origin requests.
|
|
120
|
+
- The sign-in API validates the request `Origin` / `Referer`; cross-origin sign-in requests from origins outside the whitelist are rejected with `403`.
|
|
121
|
+
|
|
89
122
|
### CLUSTER_MODE
|
|
90
123
|
|
|
91
124
|
> `v1.6.0+`
|
|
@@ -28,7 +28,7 @@ features:
|
|
|
28
28
|
link: /ai/install-nocobase-app
|
|
29
29
|
- title: Tutorials
|
|
30
30
|
details: Step-by-step tutorials to build real projects with NocoBase from scratch.
|
|
31
|
-
link: /tutorials/
|
|
31
|
+
link: /tutorials/
|
|
32
32
|
|
|
33
33
|
- title: AI
|
|
34
34
|
details: An AI-powered new way to get started - use natural language to build, use, and develop.
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
---
|
|
2
|
+
pkg: "@nocobase/plugin-block-comment"
|
|
3
|
+
title: "Comment Block"
|
|
4
|
+
description: "Comment block: view and create comments in record details, pop-ups, and similar scenarios, with field mapping, pagination, data scope, default sorting, and auto jump to last page."
|
|
5
|
+
keywords: "Comment Block,CommentBlock,comment collection,field mapping,data scope,default sorting,interface builder,NocoBase"
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Comment Block
|
|
9
|
+
|
|
10
|
+
## Introduction
|
|
11
|
+
|
|
12
|
+
The Comment block adds commenting capabilities to business records. You can add it to detail pages or pop-ups for tasks, articles, tickets, customers, and other records, so users can view, reply to, and create comments around the current record.
|
|
13
|
+
|
|
14
|
+

|
|
15
|
+
|
|
16
|
+
:::tip
|
|
17
|
+
|
|
18
|
+
The Comment block does not create a collection by itself. Before using it, prepare a collection for storing comments and configure fields such as comment content, commenter, comment owner, and comment time.
|
|
19
|
+
|
|
20
|
+
:::
|
|
21
|
+
|
|
22
|
+
## Add a block
|
|
23
|
+
|
|
24
|
+
The Comment block is usually added to the detail page or pop-up of a business record.
|
|
25
|
+
|
|
26
|
+

|
|
27
|
+
|
|
28
|
+
1. Open the target record detail page or pop-up
|
|
29
|
+
2. Click "Add block"
|
|
30
|
+
3. Select "Comment"
|
|
31
|
+
4. Select the collection used to store comments
|
|
32
|
+
5. Complete field mapping as prompted
|
|
33
|
+
|
|
34
|
+
If the Comment block is created from an association, NocoBase will try to automatically identify the comment owner field and the current record value based on the current association. In this case, "Comment owner field" and "Comment owner field value" are filled automatically, and usually do not need manual configuration.
|
|
35
|
+
|
|
36
|
+

|
|
37
|
+
|
|
38
|
+
If the block is created directly from the comment collection, you need to manually configure the comment owner field and value.
|
|
39
|
+
|
|
40
|
+
.png)
|
|
41
|
+
|
|
42
|
+
## Field mapping
|
|
43
|
+
|
|
44
|
+
The Comment block uses "Field mapping" to know how each comment should be displayed and saved.
|
|
45
|
+
|
|
46
|
+
| Configuration | Description |
|
|
47
|
+
| --- | --- |
|
|
48
|
+
| Comment content field | Select the field used to store the comment body. |
|
|
49
|
+
| Commenter field | Select a many-to-one field associated with the users collection. |
|
|
50
|
+
| Comment owner field | Select the field used to store the current business record identifier. |
|
|
51
|
+
| Comment owner field value | Specify the current business record value, such as `{{ ctx.popup.record.id }}`. |
|
|
52
|
+
| Comment date field | Select the comment time field, used for display and default sorting. |
|
|
53
|
+
|
|
54
|
+
### Comment owner field
|
|
55
|
+
|
|
56
|
+
"Comment owner field" is used to filter comments for the current record, and is also written when a new comment is created.
|
|
57
|
+
|
|
58
|
+
When selected manually, the dropdown only shows ordinary scalar fields and does not show association fields. Common configurations are:
|
|
59
|
+
|
|
60
|
+
| Business collection | Owner field in comment collection | Comment owner field value |
|
|
61
|
+
| --- | --- | --- |
|
|
62
|
+
| Tasks | `taskId` | `{{ ctx.popup.record.id }}` |
|
|
63
|
+
| Articles | `postId` | `{{ ctx.popup.record.id }}` |
|
|
64
|
+
| Tickets | `ticketId` | `{{ ctx.popup.record.id }}` |
|
|
65
|
+
|
|
66
|
+
If the current record uses a unique identifier other than `id`, change "Comment owner field value" to the corresponding field, such as `{{ ctx.popup.record.uuid }}`.
|
|
67
|
+
|
|
68
|
+
### Automatic mapping from associations
|
|
69
|
+
|
|
70
|
+
If the block is created from an association of the business record, the Comment block prioritizes the foreign key field of that association as the comment owner field, and uses the current record value as the comment owner field value.
|
|
71
|
+
|
|
72
|
+

|
|
73
|
+
|
|
74
|
+
For example, if there is a one-to-many association between the task collection and the task comment collection, and the foreign key field in the task comment collection is `taskId`, then when you add a Comment block from the association in the task detail page, the block automatically uses:
|
|
75
|
+
|
|
76
|
+
- Comment owner field: `taskId`
|
|
77
|
+
- Comment owner field value: the identifier of the current task record
|
|
78
|
+
|
|
79
|
+
This approach is suitable for most scenarios and reduces manual configuration errors.
|
|
80
|
+
|
|
81
|
+
## Block settings
|
|
82
|
+
|
|
83
|
+

|
|
84
|
+
|
|
85
|
+
### Page size
|
|
86
|
+
|
|
87
|
+
Set how many comments are displayed on each page. Available values include `5`, `10`, `20`, `50`, `100`, and `200`.
|
|
88
|
+
|
|
89
|
+
### Data scope
|
|
90
|
+
|
|
91
|
+
Set the data filtering scope for the comment list. You can add more conditions here, such as showing only comments that match certain status or permission conditions.
|
|
92
|
+
|
|
93
|
+
For more details, see [Set data scope](../block-settings/data-scope.md).
|
|
94
|
+
|
|
95
|
+
### Default sorting rule
|
|
96
|
+
|
|
97
|
+
Set the default sorting rule for the comment list. Usually, you can sort by the comment date field in ascending or descending order.
|
|
98
|
+
|
|
99
|
+
If no default sorting rule is configured separately, the Comment block prioritizes the "Comment date field" as the default sorting field.
|
|
100
|
+
|
|
101
|
+
For more details, see [Set sorting rule](../block-settings/sorting-rule.md).
|
|
102
|
+
|
|
103
|
+
### Auto jump to last page
|
|
104
|
+
|
|
105
|
+
Disabled by default. When disabled, the Comment block stays on the first page after opening.
|
|
106
|
+
|
|
107
|
+
When enabled, the Comment block jumps to the last page on first load. This is suitable when you want users to see the latest comments first.
|
|
@@ -16,12 +16,9 @@ Edit mode:
|
|
|
16
16
|

|
|
17
17
|
|
|
18
18
|
|
|
19
|
-
## Layout
|
|
19
|
+
## UI Layout
|
|
20
20
|
|
|
21
|
-
NocoBase
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-

|
|
21
|
+
NocoBase provides desktop and mobile layouts. The desktop layout works well for standard administration and adapts its navigation and page content on phones. The mobile layout provides separate mobile navigation and page configuration. See [UI Layout](./ui-layout/index.md) for details.
|
|
25
22
|
|
|
26
23
|
|
|
27
24
|
## Configuration Options
|
|
@@ -55,4 +52,8 @@ Action configuration options:
|
|
|
55
52
|
Table column configuration options:
|
|
56
53
|
|
|
57
54
|
|
|
58
|
-

|
|
55
|
+

|
|
56
|
+
|
|
57
|
+
## Related links
|
|
58
|
+
|
|
59
|
+
- [UI Layout](./ui-layout/index.md) — Learn about desktop and mobile layouts
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Desktop Layout"
|
|
3
|
+
description: "Learn about the navigation structure, page building, route management, and narrow-screen responsive behavior of the NocoBase desktop layout."
|
|
4
|
+
keywords: "desktop layout,UI layout,narrow-screen responsive,page building,route management,UI Editor,NocoBase"
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Desktop Layout
|
|
8
|
+
|
|
9
|
+
In NocoBase, the **desktop layout** is the default application interface. It is designed for data management, form entry, business configuration, and everyday work on a computer, and can also be used on mobile devices.
|
|
10
|
+
|
|
11
|
+
The desktop layout is available at `/admin` by default. If the application has its own access prefix, the actual URL automatically includes that prefix.
|
|
12
|
+
|
|
13
|
+

|
|
14
|
+
|
|
15
|
+

|
|
16
|
+
|
|
17
|
+
## Build a page
|
|
18
|
+
|
|
19
|
+
### Step 1: Open the desktop layout
|
|
20
|
+
|
|
21
|
+
Visit `/admin` to open the desktop layout. After signing in, the application usually opens this layout directly.
|
|
22
|
+
|
|
23
|
+

|
|
24
|
+
|
|
25
|
+
### Step 2: Open UI Editor
|
|
26
|
+
|
|
27
|
+
Click 「UI Editor」 in the upper-right corner of the page to enter UI building mode. Configuration entries then appear around menus, pages, blocks, fields, and actions.
|
|
28
|
+
|
|
29
|
+

|
|
30
|
+
|
|
31
|
+
### Step 3: Create menus and pages
|
|
32
|
+
|
|
33
|
+
You can add groups, pages, or links in the navigation area, and enable tabs for a page. After creating a page, open it and add the blocks you need.
|
|
34
|
+
|
|
35
|
+
Page content is built in the same way as other interfaces: add [blocks](../blocks/index.md) first, then configure [fields](../fields/index.md) and [actions](../actions/index.md) for your business needs.
|
|
36
|
+
|
|
37
|
+

|
|
38
|
+
|
|
39
|
+
### Step 4: Configure page content
|
|
40
|
+
|
|
41
|
+
Add table, form, details, filter, or other blocks to the page, then adjust the fields, actions, and arrangement of the blocks. Each change is reflected directly on the current page.
|
|
42
|
+
|
|
43
|
+

|
|
44
|
+
|
|
45
|
+
## Manage routes and menus
|
|
46
|
+
|
|
47
|
+
When you add a page or link in the navigation area, it also appears in the [Route Manager](../../routes/index.md). Changes made in the Route Manager also update the menu.
|
|
48
|
+
|
|
49
|
+
The desktop layout supports these common route types:
|
|
50
|
+
|
|
51
|
+
- **Group** — Organizes multiple pages and links under the same navigation group.
|
|
52
|
+
- **Page** — Opens a page where you can continue adding blocks.
|
|
53
|
+
- **Link** — Opens an internal or external URL.
|
|
54
|
+
- **Tab** — Organizes multiple content tabs within a page.
|
|
55
|
+
|
|
56
|
+
In the Route Manager, you can add, edit, delete, show, or hide routes. It is often the more convenient place to reorganize the entire menu structure.
|
|
57
|
+
|
|
58
|
+

|
|
59
|
+
|
|
60
|
+
## Responsive behavior on narrow screens
|
|
61
|
+
|
|
62
|
+
The desktop layout can be used directly on a phone or in a narrow browser window. In narrow-screen mode, it still uses the same desktop routes and pages. It does not automatically switch to the mobile layout.
|
|
63
|
+
|
|
64
|
+
### Layout changes
|
|
65
|
+
|
|
66
|
+
The navigation menu collapses, and top actions move into a more compact entry. Page margins and spacing between blocks also shrink, while the content area adapts to the visible height of the mobile browser.
|
|
67
|
+
|
|
68
|
+
UI Editor is not available on narrow screens. To change menus or pages, you need to return to a desktop browser and make the changes there.
|
|
69
|
+
|
|
70
|
+

|
|
71
|
+
|
|
72
|
+
### How page content adapts
|
|
73
|
+
|
|
74
|
+
Common components also adjust their interactions for narrow screens, making them easier to use on a phone. For instance, multi-column blocks switch to a single column, tables allow horizontal scrolling for columns that extend beyond the screen, and pagination and action entries become more compact. Selection, date and time, filter, and subpage interactions also use forms that are easier to operate on a phone.
|
|
75
|
+
|
|
76
|
+
:::tip Desktop responsiveness and the mobile layout
|
|
77
|
+
|
|
78
|
+
If you only access the application from a phone occasionally, the responsive desktop layout is usually enough. If you need separate bottom navigation, mobile pages, and mobile workflows, build a [mobile layout](./mobile.md) as well.
|
|
79
|
+
|
|
80
|
+
:::
|
|
81
|
+
|
|
82
|
+
## Recommendations
|
|
83
|
+
|
|
84
|
+
- Use the desktop layout by default for work performed mainly on a computer.
|
|
85
|
+
- Finish building the page on a wide screen, then narrow the window to check its responsive behavior.
|
|
86
|
+
- If a page contains many table columns or horizontal actions, keep only the necessary content to reduce the workload on smaller screens.
|
|
87
|
+
- If the desktop and mobile workflows differ significantly, separate pages are usually clearer.
|
|
88
|
+
|
|
89
|
+
## Related links
|
|
90
|
+
|
|
91
|
+
- [UI layout overview](./index.md) — Compare desktop and mobile layout use cases
|
|
92
|
+
- [Mobile layout](./mobile.md) — Build separate mobile navigation and pages
|
|
93
|
+
- [Blocks](../blocks/index.md) — Add and configure blocks on a page
|
|
94
|
+
- [Fields](../fields/index.md) — Configure fields in tables, forms, and details blocks
|
|
95
|
+
- [Actions](../actions/index.md) — Configure actions on pages and blocks
|
|
96
|
+
- [Route Manager](../../routes/index.md) — Manage desktop menus and routes in one place
|
|
97
|
+
- [Permission configuration](../../users-permissions/acl/permissions.md) — Control which desktop routes each role can access
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "UI Layout"
|
|
3
|
+
description: "An overview of NocoBase UI layouts, including desktop and mobile layout features, use cases, and how their configurations relate."
|
|
4
|
+
keywords: "UI layout,desktop layout,mobile layout,responsive layout,mobile pages,NocoBase"
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# UI Layout
|
|
8
|
+
|
|
9
|
+
NocoBase provides desktop and mobile layouts. Both layouts support UI building, so you can create pages and configure blocks, fields, and actions within them.
|
|
10
|
+
|
|
11
|
+
The desktop layout is the default choice and works well for everyday administration and data processing on a computer. If you need dedicated navigation and pages for mobile devices, you can build a mobile layout as well.
|
|
12
|
+
|
|
13
|
+
## Desktop layout
|
|
14
|
+
|
|
15
|
+
The [desktop layout](./desktop.md) is available at `/admin` by default. It consists of top navigation, side navigation, and a page content area, making it suitable for common business scenarios such as managing tables, entering form data, and viewing records.
|
|
16
|
+
|
|
17
|
+
The desktop layout also supports responsive behavior on narrow screens. When a page is displayed on a smaller screen, the navigation, spacing, and common components adjust to fit while continuing to use the existing desktop menus and pages.
|
|
18
|
+
|
|
19
|
+

|
|
20
|
+
|
|
21
|
+
## Mobile layout
|
|
22
|
+
|
|
23
|
+
The [mobile layout](./mobile.md) is available at `/mobile` by default. It uses a bottom tab bar for primary navigation and provides separate mobile pages, links, and page tabs.
|
|
24
|
+
|
|
25
|
+
The mobile layout works well for frequent phone-based tasks such as on-site data entry, mobile approvals, task processing, and data lookup. You can build and preview pages in a desktop browser, then use a QR code to check the result on a physical device.
|
|
26
|
+
|
|
27
|
+

|
|
28
|
+
|
|
29
|
+
## Which layout should I use?
|
|
30
|
+
|
|
31
|
+
Use the desktop layout by default.
|
|
32
|
+
|
|
33
|
+
| I want to... | Recommended layout |
|
|
34
|
+
| --- | --- |
|
|
35
|
+
| Work mainly on a computer and occasionally access pages from a phone | [Desktop layout](./desktop.md) |
|
|
36
|
+
| Design separate navigation, pages, and workflows for phones | [Mobile layout](./mobile.md) |
|
|
37
|
+
| Provide a complete experience for both computers and mobile devices | Build the desktop and mobile layouts separately |
|
|
38
|
+
|
|
39
|
+
## How the configurations relate
|
|
40
|
+
|
|
41
|
+
The desktop and mobile layouts use the same data sources and business data. You can use the same data table to build separate pages for different devices.
|
|
42
|
+
|
|
43
|
+
Menus, routes, and page configurations are maintained separately. Changes to a desktop page do not automatically update its mobile counterpart, and changes to mobile navigation do not affect desktop navigation. [Route access permissions](../../users-permissions/acl/permissions.md) also need to be configured separately for each layout.
|
|
44
|
+
|
|
45
|
+
## Related links
|
|
46
|
+
|
|
47
|
+
- [Desktop layout](./desktop.md) — Build desktop pages and learn how they behave on narrow screens
|
|
48
|
+
- [Mobile layout](./mobile.md) — Build separate mobile navigation and pages
|
|
49
|
+
- [Route Manager](../../routes/index.md) — Manage desktop and mobile pages, links, and menus
|
|
50
|
+
- [Permission configuration](../../users-permissions/acl/permissions.md) — Control which menus and pages each role can access
|