cx-chat 0.0.1
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/.cursor/rules/i18n-cn-gloss-comments.mdc +31 -0
- package/.cursor/rules/list-page-view-pageconfig.mdc +32 -0
- package/.cursor/rules/no-over-defensive-programming.mdc +90 -0
- package/.cursor/rules/requirement-description-for-agent.mdc +33 -0
- package/.cursor/rules/use-showToast-not-antd-message.mdc +28 -0
- package/.docker/Dockerfile +7 -0
- package/.env +9 -0
- package/.env.development +7 -0
- package/.env.production +7 -0
- package/.gitlab-ci/docker-build.yaml +28 -0
- package/.gitlab-ci/k8s-deploy-dev-master.yaml +42 -0
- package/.gitlab-ci/npm-build.yaml +17 -0
- package/.gitlab-ci.yml +8 -0
- package/.k8s/0-namespace.yaml +6 -0
- package/.k8s/1-configmap-web.yaml +7 -0
- package/.k8s/1-nginx-conf-dev.yaml +110 -0
- package/.k8s/2-deployment.yaml +27 -0
- package/.k8s/3-service.yaml +16 -0
- package/.k8s/4-ingress-dev.yaml +30 -0
- package/.lingma/rules/use-showToast-not-antd-message.md +34 -0
- package/.nginx/nginx.conf +52 -0
- package/.prettierrc +9 -0
- package/README.md +1 -0
- package/eslint.config.js +32 -0
- package/index.html +13 -0
- package/package.json +67 -0
- package/postcss.config.js +6 -0
- package/public/favicon.ico +0 -0
- package/public/vite.svg +1 -0
- package/src/App.tsx +96 -0
- package/src/_doc/0.docs-overview.md +28 -0
- package/src/_doc/cx-ui/0.docs-overview.md +30 -0
- package/src/_doc/cx-ui/comp.1.cx-ui-overview.md +82 -0
- package/src/_doc/cx-ui/comp.2.cx-modal.md +82 -0
- package/src/_doc/cx-ui/comp.3.cx-button.md +89 -0
- package/src/_doc/cx-ui/comp.4.cx-form.md +72 -0
- package/src/_doc/cx-ui/comp.5.cx-fields.md +76 -0
- package/src/_doc/cx-ui/comp.6.cx-tag.md +57 -0
- package/src/_doc/cx-ui/comp.7.cx-empty-state.md +29 -0
- package/src/_doc/meta/0.docs-overview.md +24 -0
- package/src/_doc/meta/comp.1.enum-runtime.md +33 -0
- package/src/_doc/meta/comp.2.dict-runtime.md +39 -0
- package/src/_doc/router/0.docs-overview.md +14 -0
- package/src/_doc/router/guide.1.menu-component-config.md +181 -0
- package/src/_doc/router/guide.2.router-auto-registration.md +114 -0
- package/src/_doc/table-view/0.docs-overview.md +30 -0
- package/src/_doc/table-view/comp.1.table-view.md +542 -0
- package/src/_doc/table-view/props.1.create-table-view-config.md +193 -0
- package/src/_doc/table-view/props.2.table-view-search-fields.md +106 -0
- package/src/api/_mock/README.md +340 -0
- package/src/api/_mock/api.ts +1642 -0
- package/src/api/_mock/bundle-shim.ts +16 -0
- package/src/api/_mock/handler-shim.ts +6 -0
- package/src/api/_mock/handler.ts +458 -0
- package/src/api/_mock/index.ts +711 -0
- package/src/api/_mock/interceptor.ts +15 -0
- package/src/api/_mock/mod.ts +12 -0
- package/src/api/_mock/utils.ts +65 -0
- package/src/api/base/memory.js +24 -0
- package/src/api/chat.js +210 -0
- package/src/api/common/auth.js +70 -0
- package/src/api/menus/business-rules.js +76 -0
- package/src/api/menus/feedback.js +102 -0
- package/src/api/menus/knowledge.js +159 -0
- package/src/api/menus/model-metadata/manage.js +70 -0
- package/src/api/menus/model-metadata/role.js +50 -0
- package/src/api/menus/model-metadata/training-detail-mock-data.js +569 -0
- package/src/api/menus/model-metadata/training.js +28 -0
- package/src/api/menus/skill.js +40 -0
- package/src/api/system/agent-config.js +16 -0
- package/src/api/system/department.js +94 -0
- package/src/api/system/dict.js +86 -0
- package/src/api/system/menu.js +37 -0
- package/src/api/system/permission.js +26 -0
- package/src/api/system/role.js +34 -0
- package/src/api/system/sys-config.js +16 -0
- package/src/api/system/sys-log.js +17 -0
- package/src/api/system/user.js +75 -0
- package/src/api/upload.js +39 -0
- package/src/assets/react.svg +1 -0
- package/src/components/auth/current-user-avatar.tsx +77 -0
- package/src/components/common/code-view.tsx +149 -0
- package/src/components/common/detail-link.tsx +67 -0
- package/src/components/common/error-boundary.tsx +98 -0
- package/src/components/common/language-switcher.tsx +91 -0
- package/src/components/common/lite-table/index.tsx +135 -0
- package/src/components/common/md-editor.tsx +126 -0
- package/src/components/common/modal/confirm-dialog.tsx +113 -0
- package/src/components/common/modal/dep-user-select-multi.tsx +324 -0
- package/src/components/common/modal/dep-user-select.tsx +249 -0
- package/src/components/common/modal/user-select-multi.tsx +266 -0
- package/src/components/common/pagination.tsx +472 -0
- package/src/components/common/path.tsx +175 -0
- package/src/components/common/system-logo-mark.tsx +48 -0
- package/src/components/cx-ui/button/index.less +208 -0
- package/src/components/cx-ui/button/index.tsx +611 -0
- package/src/components/cx-ui/checkbox/index.tsx +78 -0
- package/src/components/cx-ui/date-picker/index.less +17 -0
- package/src/components/cx-ui/date-picker/index.tsx +193 -0
- package/src/components/cx-ui/drawer/index.tsx +47 -0
- package/src/components/cx-ui/empty-state/index.tsx +20 -0
- package/src/components/cx-ui/floating-shell/CxFloatingShell.tsx +89 -0
- package/src/components/cx-ui/floating-shell/cx-floating-shell.less +283 -0
- package/src/components/cx-ui/floating-shell/has-floating-value.ts +41 -0
- package/src/components/cx-ui/form/CxForm.tsx +15 -0
- package/src/components/cx-ui/form/index.tsx +20 -0
- package/src/components/cx-ui/form-item/index.less +26 -0
- package/src/components/cx-ui/form-item/index.tsx +36 -0
- package/src/components/cx-ui/index.ts +70 -0
- package/src/components/cx-ui/input/auto-complete.tsx +134 -0
- package/src/components/cx-ui/input/index.tsx +259 -0
- package/src/components/cx-ui/input-number/index.jsx +66 -0
- package/src/components/cx-ui/modal/index.jsx +212 -0
- package/src/components/cx-ui/modal/index.less +144 -0
- package/src/components/cx-ui/modal/useCxModal.ts +125 -0
- package/src/components/cx-ui/multi-select/index.jsx +74 -0
- package/src/components/cx-ui/multi-select/index.less +40 -0
- package/src/components/cx-ui/multi-select/index2.tsx +361 -0
- package/src/components/cx-ui/radio/index.tsx +33 -0
- package/src/components/cx-ui/range-picker/index.less +65 -0
- package/src/components/cx-ui/range-picker/index.tsx +219 -0
- package/src/components/cx-ui/select/index.less +34 -0
- package/src/components/cx-ui/select/index.tsx +196 -0
- package/src/components/cx-ui/skeleton/index.tsx +12 -0
- package/src/components/cx-ui/steps/index.tsx +14 -0
- package/src/components/cx-ui/styles/_tokens.less +79 -0
- package/src/components/cx-ui/styles/index.less +246 -0
- package/src/components/cx-ui/switch/index.less +106 -0
- package/src/components/cx-ui/switch/index.tsx +120 -0
- package/src/components/cx-ui/table/index.less +160 -0
- package/src/components/cx-ui/table/index.tsx +152 -0
- package/src/components/cx-ui/tabs/index.less +15 -0
- package/src/components/cx-ui/tabs/index.tsx +34 -0
- package/src/components/cx-ui/tag/index.less +51 -0
- package/src/components/cx-ui/tag/index.tsx +140 -0
- package/src/components/cx-ui/timeline/index.tsx +14 -0
- package/src/components/cx-ui/tooltip/index.tsx +67 -0
- package/src/components/cx-ui/tree/index.tsx +193 -0
- package/src/components/cx-ui/tree-select/index.jsx +91 -0
- package/src/components/cx-ui/tree-select/index.less +27 -0
- package/src/components/cx-ui/upload-file/index.less +223 -0
- package/src/components/cx-ui/upload-file/index.tsx +640 -0
- package/src/components/cx-ui/upload-img/index.tsx +291 -0
- package/src/components/layout/components/Header.tsx +216 -0
- package/src/components/layout/components/Sidebar.tsx +717 -0
- package/src/components/layout/index.tsx +95 -0
- package/src/components/table-view/components/search-area.tsx +411 -0
- package/src/components/table-view/components/table-view-config.tsx +528 -0
- package/src/components/table-view/components/table-view.types.ts +478 -0
- package/src/components/table-view/components/tree-api-normalize.ts +38 -0
- package/src/components/table-view/components/tree-data-annotate.ts +31 -0
- package/src/components/table-view/components/tree-sidebar.tsx +74 -0
- package/src/components/table-view/index.tsx +61 -0
- package/src/components/table-view/list-page-view.tsx +1049 -0
- package/src/components/table-view/select-table-view.tsx +1094 -0
- package/src/components/table-view/styles/select-table-view.less +51 -0
- package/src/config/default-system-name.ts +9 -0
- package/src/config/system.ts +165 -0
- package/src/constants/countryCodes.ts +3 -0
- package/src/contexts/AuthContext.tsx +256 -0
- package/src/contexts/ChatContext.tsx +839 -0
- package/src/contexts/MenuContext.tsx +62 -0
- package/src/contexts/ToastContext.tsx +181 -0
- package/src/hooks/useCopyToClipboard.ts +47 -0
- package/src/hooks/useModalSubmit.ts +104 -0
- package/src/hooks/useRouter.ts +240 -0
- package/src/hooks/useStepForm.ts +46 -0
- package/src/hooks/useStickyHeader.ts +42 -0
- package/src/hooks/useThreadActions.ts +105 -0
- package/src/hooks/useUserPreferences.ts +101 -0
- package/src/http/axios.js +372 -0
- package/src/http/mock.interceptor.ts +9 -0
- package/src/http/obfuscationKey.ts +41 -0
- package/src/i18n.ts +60 -0
- package/src/index.js +1 -0
- package/src/index.less +169 -0
- package/src/locales/en/auth.ts +70 -0
- package/src/locales/en/base/memory.ts +28 -0
- package/src/locales/en/base/settings.ts +41 -0
- package/src/locales/en/chat.ts +40 -0
- package/src/locales/en/common.ts +173 -0
- package/src/locales/en/enum.ts +27 -0
- package/src/locales/en/menus/business-rules.ts +48 -0
- package/src/locales/en/menus/feedback.ts +62 -0
- package/src/locales/en/menus/knowledge.ts +120 -0
- package/src/locales/en/menus/model-metadata/index.ts +10 -0
- package/src/locales/en/menus/model-metadata/manage.ts +151 -0
- package/src/locales/en/menus/model-metadata/role.ts +48 -0
- package/src/locales/en/menus/model-metadata/training.ts +65 -0
- package/src/locales/en/menus/skill.ts +34 -0
- package/src/locales/en/system/agent-config.ts +34 -0
- package/src/locales/en/system/department.ts +68 -0
- package/src/locales/en/system/dict.ts +44 -0
- package/src/locales/en/system/menu.ts +45 -0
- package/src/locales/en/system/permission.ts +89 -0
- package/src/locales/en/system/role.ts +25 -0
- package/src/locales/en/system/sys-config.ts +33 -0
- package/src/locales/en/system/sys-log.ts +38 -0
- package/src/locales/en/system/user.ts +113 -0
- package/src/locales/en.ts +68 -0
- package/src/locales/zh/auth.ts +70 -0
- package/src/locales/zh/base/memory.ts +29 -0
- package/src/locales/zh/base/settings.ts +41 -0
- package/src/locales/zh/chat.ts +47 -0
- package/src/locales/zh/common.ts +178 -0
- package/src/locales/zh/enum.ts +28 -0
- package/src/locales/zh/menus/business-rules.ts +47 -0
- package/src/locales/zh/menus/feedback.ts +62 -0
- package/src/locales/zh/menus/knowledge.ts +117 -0
- package/src/locales/zh/menus/model-metadata/index.ts +10 -0
- package/src/locales/zh/menus/model-metadata/manage.ts +151 -0
- package/src/locales/zh/menus/model-metadata/role.ts +47 -0
- package/src/locales/zh/menus/model-metadata/training.ts +64 -0
- package/src/locales/zh/menus/skill.ts +34 -0
- package/src/locales/zh/system/agent-config.ts +33 -0
- package/src/locales/zh/system/department.ts +69 -0
- package/src/locales/zh/system/dict.ts +44 -0
- package/src/locales/zh/system/menu.ts +47 -0
- package/src/locales/zh/system/permission.ts +94 -0
- package/src/locales/zh/system/role.ts +25 -0
- package/src/locales/zh/system/sys-config.ts +32 -0
- package/src/locales/zh/system/sys-log.ts +38 -0
- package/src/locales/zh/system/user.ts +114 -0
- package/src/locales/zh.ts +67 -0
- package/src/main.tsx +50 -0
- package/src/meta/const/index.ts +40 -0
- package/src/meta/index-dict.ts +56 -0
- package/src/meta/index-enum.ts +95 -0
- package/src/meta/index.ts +14 -0
- package/src/meta/module/dict-data/runtime.ts +199 -0
- package/src/meta/module/dict-data/types.ts +17 -0
- package/src/meta/module/enum-data/runtime.ts +75 -0
- package/src/meta/module/enum-data/types.ts +18 -0
- package/src/router/index.tsx +312 -0
- package/src/styles/AntdThemeProvider.tsx +40 -0
- package/src/styles/antd-theme.ts +20 -0
- package/src/styles/global.less +107 -0
- package/src/styles/variable.less +103 -0
- package/src/types/feedback.ts +43 -0
- package/src/types/index.ts +85 -0
- package/src/types/menu.ts +43 -0
- package/src/utils/aesUtil.ts +123 -0
- package/src/utils/chatUtils.ts +524 -0
- package/src/utils/cn.ts +6 -0
- package/src/utils/crypto.ts +164 -0
- package/src/utils/date.ts +72 -0
- package/src/utils/file-icons.tsx +79 -0
- package/src/utils/index.ts +168 -0
- package/src/utils/markdown-math-plugins.ts +21 -0
- package/src/utils/menuI18n.ts +305 -0
- package/src/utils/menuRouteRegistry.ts +78 -0
- package/src/utils/permission-crud.ts +147 -0
- package/src/utils/routeConfig.ts +350 -0
- package/src/utils/storage.ts +135 -0
- package/src/utils/toastBridge.ts +26 -0
- package/src/utils/url.ts +38 -0
- package/src/utils/validation.ts +16 -0
- package/src/views/auth/auth-code/index.less +169 -0
- package/src/views/auth/auth-code/index.module.less +174 -0
- package/src/views/auth/auth-code/index.tsx +233 -0
- package/src/views/auth/login.tsx +498 -0
- package/src/views/auth/register.tsx +388 -0
- package/src/views/base/memory/index.tsx +136 -0
- package/src/views/base/memory/modal/detail-modal.tsx +89 -0
- package/src/views/base/memory/modal/submit-modal.tsx +134 -0
- package/src/views/base/settings/index.tsx +657 -0
- package/src/views/chat/chat.less +323 -0
- package/src/views/chat/components/chat-input.tsx +298 -0
- package/src/views/chat/components/header-thread-title.tsx +210 -0
- package/src/views/chat/components/message-list/content-answer.tsx +100 -0
- package/src/views/chat/components/message-list/content-question.tsx +18 -0
- package/src/views/chat/components/message-list/index.tsx +520 -0
- package/src/views/chat/components/message-list/message-item.tsx +199 -0
- package/src/views/chat/components/message-list/preparation-demo-items.ts +147 -0
- package/src/views/chat/components/message-list/preparation-steps.tsx +506 -0
- package/src/views/chat/components/message-list/suggestion-list.tsx +36 -0
- package/src/views/chat/components/message-list/thinking-process.tsx +49 -0
- package/src/views/chat/components/message-list/toolbar.tsx +224 -0
- package/src/views/chat/components/message-list/use-message-list-scroll.ts +214 -0
- package/src/views/chat/components/references-knowledge/context.tsx +57 -0
- package/src/views/chat/components/references-knowledge/index.ts +9 -0
- package/src/views/chat/components/references-knowledge/modal/knowledge-detail-drawer.tsx +556 -0
- package/src/views/chat/components/references-knowledge/modal/knowledge-doc-detail-drawer.tsx +529 -0
- package/src/views/chat/components/references-knowledge/panel.tsx +115 -0
- package/src/views/chat/hooks/use-chat-common.ts +19 -0
- package/src/views/chat/index-session.tsx +647 -0
- package/src/views/chat/index.tsx +127 -0
- package/src/views/page-error/401.tsx +56 -0
- package/src/views/page-error/404.tsx +56 -0
- package/src/views/page-menus/business-rules/index.tsx +376 -0
- package/src/views/page-menus/business-rules/modal/detail-modal.tsx +186 -0
- package/src/views/page-menus/business-rules/modal/scope-modal.tsx +272 -0
- package/src/views/page-menus/business-rules/modal/submit-modal.tsx +142 -0
- package/src/views/page-menus/feedback/components/feedback-dataset-list.tsx +471 -0
- package/src/views/page-menus/feedback/index.tsx +166 -0
- package/src/views/page-menus/feedback/modal/export-feedback-modal.tsx +367 -0
- package/src/views/page-menus/knowledge/components/doc-editor-by-type.tsx +32 -0
- package/src/views/page-menus/knowledge/components/doc-editor-type-file.tsx +330 -0
- package/src/views/page-menus/knowledge/detail.tsx +600 -0
- package/src/views/page-menus/knowledge/index.tsx +337 -0
- package/src/views/page-menus/knowledge/modal/detail-modal.tsx +618 -0
- package/src/views/page-menus/knowledge/modal/doc-detail-modal.tsx +550 -0
- package/src/views/page-menus/knowledge/modal/doc-parse.ts +99 -0
- package/src/views/page-menus/knowledge/modal/doc-submit-modal.tsx +349 -0
- package/src/views/page-menus/knowledge/modal/doc-type-picker-modal.tsx +88 -0
- package/src/views/page-menus/knowledge/modal/knowledge-user-select-modal.tsx +283 -0
- package/src/views/page-menus/knowledge/modal/submit-modal.tsx +179 -0
- package/src/views/page-menus/model-metadata/manage/components/metadata-detail-schema-tab.tsx +114 -0
- package/src/views/page-menus/model-metadata/manage/components/step1-basic-info.tsx +232 -0
- package/src/views/page-menus/model-metadata/manage/components/step2-schema.tsx +316 -0
- package/src/views/page-menus/model-metadata/manage/components/step3-permissions.tsx +134 -0
- package/src/views/page-menus/model-metadata/manage/components/step4-documents.tsx +134 -0
- package/src/views/page-menus/model-metadata/manage/components/step5-example-sql.tsx +101 -0
- package/src/views/page-menus/model-metadata/manage/components/submit-add.tsx +338 -0
- package/src/views/page-menus/model-metadata/manage/components/submit-edit.tsx +276 -0
- package/src/views/page-menus/model-metadata/manage/detail.tsx +298 -0
- package/src/views/page-menus/model-metadata/manage/hooks/model-metadata-submit-shared.ts +113 -0
- package/src/views/page-menus/model-metadata/manage/hooks/use-model-metadata-item-state.ts +20 -0
- package/src/views/page-menus/model-metadata/manage/index.tsx +304 -0
- package/src/views/page-menus/model-metadata/manage/modal/components/table-schema.ts +374 -0
- package/src/views/page-menus/model-metadata/manage/modal/components/use-table-detail-tabs.tsx +151 -0
- package/src/views/page-menus/model-metadata/manage/modal/components/use-table-submit-tabs.tsx +423 -0
- package/src/views/page-menus/model-metadata/manage/modal/detail-modal.tsx +218 -0
- package/src/views/page-menus/model-metadata/manage/modal/submit-modal.tsx +261 -0
- package/src/views/page-menus/model-metadata/manage/modal/table-detail-modal.tsx +196 -0
- package/src/views/page-menus/model-metadata/manage/modal/table-submit-modal.tsx +229 -0
- package/src/views/page-menus/model-metadata/manage/submit.tsx +31 -0
- package/src/views/page-menus/model-metadata/role/index.tsx +207 -0
- package/src/views/page-menus/model-metadata/role/modal/detail-modal.tsx +97 -0
- package/src/views/page-menus/model-metadata/role/modal/role-assign-users-modal.tsx +254 -0
- package/src/views/page-menus/model-metadata/role/modal/role-assign-users-panel.tsx +393 -0
- package/src/views/page-menus/model-metadata/role/modal/role-assign-users-utils.ts +120 -0
- package/src/views/page-menus/model-metadata/role/modal/role-permission-assign-panel.tsx +698 -0
- package/src/views/page-menus/model-metadata/role/modal/role-permission-modal.tsx +237 -0
- package/src/views/page-menus/model-metadata/role/modal/submit-modal.tsx +135 -0
- package/src/views/page-menus/model-metadata/training/components/detail-records/index.ts +4 -0
- package/src/views/page-menus/model-metadata/training/components/detail-records/node-card.tsx +72 -0
- package/src/views/page-menus/model-metadata/training/components/detail-records/summary-lines.ts +196 -0
- package/src/views/page-menus/model-metadata/training/components/detail-records/summary-list.tsx +153 -0
- package/src/views/page-menus/model-metadata/training/components/detail-records/timeline.tsx +103 -0
- package/src/views/page-menus/model-metadata/training/components/detail-records/types.ts +82 -0
- package/src/views/page-menus/model-metadata/training/detail.tsx +159 -0
- package/src/views/page-menus/model-metadata/training/index.tsx +236 -0
- package/src/views/page-menus/model-metadata/training/modal/update-detail-modal.tsx +154 -0
- package/src/views/page-menus/skill/index.tsx +201 -0
- package/src/views/page-menus/skill/modal/detail-modal.tsx +156 -0
- package/src/views/page-menus/skill/modal/submit-modal.tsx +214 -0
- package/src/views/page-system/agent-config/index.tsx +370 -0
- package/src/views/page-system/department/departmentFormShared.ts +36 -0
- package/src/views/page-system/department/index.tsx +541 -0
- package/src/views/page-system/department/modal/detail-modal.tsx +94 -0
- package/src/views/page-system/department/modal/member-role-modal.tsx +128 -0
- package/src/views/page-system/department/modal/submit-modal.tsx +265 -0
- package/src/views/page-system/dict/index.tsx +440 -0
- package/src/views/page-system/dict/modal/cate-submit-modal.tsx +315 -0
- package/src/views/page-system/dict/modal/submit-modal.tsx +184 -0
- package/src/views/page-system/logs/components/index.ts +3 -0
- package/src/views/page-system/logs/components/log-message-demo.tsx +30 -0
- package/src/views/page-system/logs/components/log-message-stream.ts +184 -0
- package/src/views/page-system/logs/components/message-list/content-answer.tsx +100 -0
- package/src/views/page-system/logs/components/message-list/content-question.tsx +18 -0
- package/src/views/page-system/logs/components/message-list/index.tsx +515 -0
- package/src/views/page-system/logs/components/message-list/message-item.tsx +193 -0
- package/src/views/page-system/logs/components/message-list/preparation-demo-items.ts +147 -0
- package/src/views/page-system/logs/components/message-list/preparation-steps.tsx +506 -0
- package/src/views/page-system/logs/components/message-list/suggestion-list.tsx +36 -0
- package/src/views/page-system/logs/components/message-list/thinking-process.tsx +49 -0
- package/src/views/page-system/logs/components/message-list/toolbar.tsx +134 -0
- package/src/views/page-system/logs/components/message-list/use-message-list-scroll.ts +214 -0
- package/src/views/page-system/logs/components/message-modal.tsx +239 -0
- package/src/views/page-system/logs/index.tsx +132 -0
- package/src/views/page-system/logs/modal/detail-modal.tsx +157 -0
- package/src/views/page-system/menu/components/menuFormShared.ts +283 -0
- package/src/views/page-system/menu/index.less +12 -0
- package/src/views/page-system/menu/index.tsx +410 -0
- package/src/views/page-system/menu/modal/icon-modal.less +51 -0
- package/src/views/page-system/menu/modal/icon-modal.tsx +87 -0
- package/src/views/page-system/menu/modal/submit-modal.tsx +263 -0
- package/src/views/page-system/permission/index.tsx +562 -0
- package/src/views/page-system/permission/modal/detail-modal.tsx +179 -0
- package/src/views/page-system/permission/modal/submit-modal.less +146 -0
- package/src/views/page-system/permission/modal/submit-modal.tsx +650 -0
- package/src/views/page-system/role/index.tsx +163 -0
- package/src/views/page-system/role/modal/detail-modal.tsx +127 -0
- package/src/views/page-system/role/modal/permission-assign-group-rules.ts +86 -0
- package/src/views/page-system/role/modal/permission-modal.tsx +111 -0
- package/src/views/page-system/role/modal/role-modal-shell-styles.ts +21 -0
- package/src/views/page-system/role/modal/role-permission-assign-panel.tsx +916 -0
- package/src/views/page-system/role/modal/role-permission-assign-shared.ts +1047 -0
- package/src/views/page-system/role/modal/submit-modal.tsx +193 -0
- package/src/views/page-system/sys-config/index.tsx +294 -0
- package/src/views/page-system/user/components/user-role-column.tsx +87 -0
- package/src/views/page-system/user/index.tsx +439 -0
- package/src/views/page-system/user/modal/assign-roles-modal.tsx +389 -0
- package/src/views/page-system/user/modal/detail-modal.tsx +72 -0
- package/src/views/page-system/user/modal/modal-style/submit-modal.less +40 -0
- package/src/views/page-system/user/modal/submit-modal.less +40 -0
- package/src/views/page-system/user/modal/submit-modal.tsx +287 -0
- package/src/views/page-system/user/userFormShared.ts +51 -0
- package/tailwind.config.js +17 -0
- package/tsconfig.app.json +48 -0
- package/tsconfig.json +11 -0
- package/tsconfig.node.json +26 -0
- package/vite.config.ts +264 -0
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: 使用 i18n(t() 或业务 locale 键)时在源码旁写中文对照注释,便于维护
|
|
3
|
+
alwaysApply: true
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# i18n 中文对照注释
|
|
7
|
+
|
|
8
|
+
在 **含国际化** 的 TS/TSX 中生成或修改代码时,**顺手写上中文对照**,方便后人不用翻 locale 也能懂键对应什么文案。
|
|
9
|
+
|
|
10
|
+
## 写法约定
|
|
11
|
+
|
|
12
|
+
1. **可安全用行尾 `//` 的地方**(对象字面量、列配置、`showToast(t(...))` 等,行尾不会被截断)
|
|
13
|
+
- 在 `t('namespace.key')` 或配置里的 `'namespace.key'` **同一行末尾**加 `// 中文简述` 或 `// 键语义`。
|
|
14
|
+
- 例:`title: t('menus.xxx.fields.foo'), // 表名`
|
|
15
|
+
- 例:`showToast(t('menus.xxx.preview_failed'), 'error') // 结构预览失败`
|
|
16
|
+
- 动态键:`t(\`menus.xxx.rules.${err}\`)` 旁注释 `// 校验文案,键见 locales/zh/.../rules` 等。
|
|
17
|
+
|
|
18
|
+
2. **JSX 里**(多属性、`label={t(...)}` 等,行尾 `//` 容易误注释后续属性)
|
|
19
|
+
- 在对应表单项/区块 **上一行** 用 **`{/* 中文 · 或字段说明 */}`**。
|
|
20
|
+
- 例:`{/* 主题 */}` 下一行 `<CxFormItem label={t('...fields.subject')} ...>`。
|
|
21
|
+
|
|
22
|
+
3. **文件头(可选但推荐)**
|
|
23
|
+
- 同一文件大量 `menus.*` 等键时,在模块顶部加一行 **`// i18n 中文:locales/zh/对应路径.ts(namespace)`**,避免每行重复写长路径。
|
|
24
|
+
|
|
25
|
+
4. **与 `common.*` 混用时**
|
|
26
|
+
- `common.no_data`、`common.actions` 等可在注释里写「暂无数据」「操作」,或注明 `common → zh/common.ts`。
|
|
27
|
+
|
|
28
|
+
## 不要求
|
|
29
|
+
|
|
30
|
+
- 不在**无 i18n** 的纯逻辑文件强行加注释。
|
|
31
|
+
- 不为了注释拆成过度冗长的结构;**一行能写完优先一行**(与现有「属性紧凑」风格一致时可同行)。
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: ListPageView 与 createListPageConfig 必须用同一 pageConfig 引用(与角色页一致)
|
|
3
|
+
globs: src/pages/**/index.tsx
|
|
4
|
+
alwaysApply: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# ListPageView + `pageConfig` 约定
|
|
8
|
+
|
|
9
|
+
`ListPageView` 在 `useLayoutEffect` 里会把 **`onDelete`、`onStatusToggle`**(以及包装后的 **`onEdit`**)挂到**传入的 `pageConfig` 对象本身**上。
|
|
10
|
+
|
|
11
|
+
## 必须遵守
|
|
12
|
+
|
|
13
|
+
- 使用 **`const pageConfig = useListPageConfig()`**(工厂 hook 返回的那一个对象)。
|
|
14
|
+
- 表格列:**`pageConfig.columns = useMemo(() => [...], [pageConfig, …])`**,操作列里只调用 **`pageConfig.onDelete` / `pageConfig.onStatusToggle` / `pageConfig.onEdit`**。
|
|
15
|
+
- 传给列表:**`<ListPageView pageConfig={pageConfig} />`**,不要再包一层 `{ ...pageConfig, columns }` 作为另一个变量传入。
|
|
16
|
+
- 树重载等扩展字段:写在同一对象上,例如 **`pageConfig.treeReloadSignal = treeReloadSignal`**(每轮渲染赋值即可),不要为 `treeReloadSignal` 再 `useMemo` 出一个新对象替代 `pageConfig`。
|
|
17
|
+
- 自定义编辑:每轮渲染先 **`pageConfig.onEdit = handleDataEdit`**(在 `ListPageView` 包装逻辑之前由父组件写回),编辑按钮 payload 与角色页一致:`{ type: 'edit', data, record }`。
|
|
18
|
+
|
|
19
|
+
## 反面示例(禁止)
|
|
20
|
+
|
|
21
|
+
```tsx
|
|
22
|
+
// ❌ 注入挂在 listPageConfig,列里却用 pageConfig
|
|
23
|
+
const pageConfig = useMemo(() => ({ ...base, treeReload }), [...])
|
|
24
|
+
const listPageConfig = useMemo(() => ({ ...pageConfig, columns }), [...])
|
|
25
|
+
<ListPageView pageConfig={listPageConfig} />
|
|
26
|
+
// 列里:pageConfig.onDelete // 永远是 undefined
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## 参考实现
|
|
30
|
+
|
|
31
|
+
- `src/pages/page-system/role/index.tsx`
|
|
32
|
+
- `src/pages/page-system/dict/index.tsx`(树 + 自定义 onEdit 时同上)
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: 禁止过度防御性编程,TypeScript 类型约束要宽松,删除多余守卫代码
|
|
3
|
+
globs: **/*.{ts,tsx}
|
|
4
|
+
alwaysApply: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# 禁止过度防御性编程规范
|
|
8
|
+
|
|
9
|
+
## 核心原则
|
|
10
|
+
**不要写无意义的防御性代码**,避免为了"类型安全"而添加大量冗余判断和严格类型约束。
|
|
11
|
+
|
|
12
|
+
## 具体规范
|
|
13
|
+
|
|
14
|
+
### 1. TypeScript 类型定义要宽松
|
|
15
|
+
- ❌ 不要用严格的联合类型限制(如 `'add' | 'edit'`)
|
|
16
|
+
- ✅ 改用 `string` 或 `(string & {})`,让运行时逻辑处理错误值
|
|
17
|
+
|
|
18
|
+
```typescript
|
|
19
|
+
// ❌ 错误示例 - 过度严格的类型
|
|
20
|
+
type ModalMode = 'add' | 'edit' | 'detail'
|
|
21
|
+
type SubmitMode = 'add' | 'edit'
|
|
22
|
+
|
|
23
|
+
// ✅ 正确示例 - 宽松类型
|
|
24
|
+
type ModalMode = string
|
|
25
|
+
type SubmitMode = string
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
### 2. 删除多余的守卫判断
|
|
29
|
+
- 如果函数只在特定场景调用,不要添加不可能触发的条件判断
|
|
30
|
+
- 信任调用方传参,参数错误应该在调用处修复
|
|
31
|
+
|
|
32
|
+
```typescript
|
|
33
|
+
// ❌ 错误示例 - 多余的守卫
|
|
34
|
+
const handleSubmit = async ({ opeType }) => {
|
|
35
|
+
if (opeType === 'detail') return // 详情模式不会调用提交,这个判断多余
|
|
36
|
+
if (opeType === 'edit') {
|
|
37
|
+
result = await editAPI(payload)
|
|
38
|
+
} else {
|
|
39
|
+
result = await addAPI(payload)
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
// ✅ 正确示例 - 简洁直接
|
|
44
|
+
const handleSubmit = async ({ opeType }) => {
|
|
45
|
+
if (opeType === 'edit') {
|
|
46
|
+
result = await editAPI(payload)
|
|
47
|
+
} else {
|
|
48
|
+
result = await addAPI(payload)
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### 3. 避免冗余的状态管理
|
|
54
|
+
- 不要创建与父组件/Hook 重复的 state
|
|
55
|
+
- 直接从父级解构使用,保持单一数据源
|
|
56
|
+
|
|
57
|
+
```typescript
|
|
58
|
+
// ❌ 错误示例 - 重复声明 opeId
|
|
59
|
+
const [opeId, setOpeId] = useState<string | undefined>(undefined)
|
|
60
|
+
const modal = useCxModal({
|
|
61
|
+
onOpen: (payload) => {
|
|
62
|
+
setOpeId(payload.opeId)
|
|
63
|
+
},
|
|
64
|
+
})
|
|
65
|
+
|
|
66
|
+
// ✅ 正确示例 - 从 modal 解构
|
|
67
|
+
const modal = useCxModal({
|
|
68
|
+
onOpen: (payload) => {
|
|
69
|
+
const { setOpeId } = modal
|
|
70
|
+
setOpeId(payload.opeId)
|
|
71
|
+
},
|
|
72
|
+
})
|
|
73
|
+
const { opeId } = modal // 直接使用 modal 提供的
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
### 4. Build 报错优先简化类型
|
|
77
|
+
- 遇到 TypeScript 编译错误时,优先考虑放宽类型约束
|
|
78
|
+
- 不要为了通过编译而添加大量防御性代码
|
|
79
|
+
- 配置错了该报错就行了,不需要在 build 阶段卡死
|
|
80
|
+
|
|
81
|
+
## 反面案例总结
|
|
82
|
+
|
|
83
|
+
以下情况都属于**过度防御**,应该避免:
|
|
84
|
+
1. 为不可能出现的值添加类型约束
|
|
85
|
+
2. 在函数内部重复校验调用方应该保证的参数
|
|
86
|
+
3. 创建与父级重复的 state 变量
|
|
87
|
+
4. 添加永远不会触发的条件分支
|
|
88
|
+
5. 为了过编译而写的类型断言和守卫代码
|
|
89
|
+
|
|
90
|
+
**记住**: 代码应该简洁直观,错了自然会有人改,不要瞎操心。
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: 需求与接口示例的默认理解方式;UI「不可操作」默认不展示入口
|
|
3
|
+
alwaysApply: true
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 需求与接口描述 — Agent 默认约定
|
|
7
|
+
|
|
8
|
+
用户未单独说明时,Agent **按下述方式理解并执行**,避免过度推断或扩大改动范围。
|
|
9
|
+
|
|
10
|
+
## 接口 / JSON 示例
|
|
11
|
+
|
|
12
|
+
- 用户给出响应 JSON 且**未**写「要改拦截器 / 统一 `code`」时:视为**仅说明 `data` 或内层字段形状**,用于对接列表、详情、类型;**不**因示例里的 `code`(如 0 / 200)去改 `src/http/axios` 等全局逻辑。
|
|
13
|
+
- 若需动请求层或全局 `code` 约定,须用户**明确写出**;否则不改。
|
|
14
|
+
|
|
15
|
+
## UI:「不能再操作」类需求
|
|
16
|
+
|
|
17
|
+
- 表述如「已 x 不能再 y」且**未**要求保留占位时:**默认不渲染该操作入口**(不显示按钮/项),**不**默认做成 `disabled` + 灰显。
|
|
18
|
+
- 仅当用户明确要求「保留入口但禁用 / 要 tooltip / 要占位」时,才用禁用态。
|
|
19
|
+
|
|
20
|
+
## 范围与禁忌
|
|
21
|
+
|
|
22
|
+
- 用户指定了文件或模块时,**不**顺带重构无关代码。
|
|
23
|
+
- 用户写出「不要 xxx」(如不要单独命名转换函数、不要读路由参数)时,**严格遵守**。
|
|
24
|
+
|
|
25
|
+
## 重构与数据对齐
|
|
26
|
+
|
|
27
|
+
- 用户描述「目标行为 / 目标数据来源」(如「只认行上的 `metadataId`」)时,按目标改调用链,**不**在未要求时保留旧路径兜底(除非用户要求兼容)。
|
|
28
|
+
|
|
29
|
+
## 用户可选用的一行模板
|
|
30
|
+
|
|
31
|
+
用户可在复杂需求末尾附上:
|
|
32
|
+
|
|
33
|
+
`在【页面】:【行为】。数据按【字段/示例】。不要【动 axios / 禁用占位 等】。`
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: 全局提示统一 useToast/showToast,禁止 antd message API
|
|
3
|
+
alwaysApply: true
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 全局提示(Toast)
|
|
7
|
+
|
|
8
|
+
- **必须**使用 `useToast`(`@/contexts/ToastContext`)的 `showToast`,与 settings、chat、元数据等页面一致。
|
|
9
|
+
- **禁止**使用 antd 的 `message.success` / `message.error` / `message.warning` / `message.info`,以及 `import { message } from 'antd'` 仅为弹全局提示。
|
|
10
|
+
|
|
11
|
+
```tsx
|
|
12
|
+
// ✅
|
|
13
|
+
import { useToast } from '@/contexts/ToastContext'
|
|
14
|
+
|
|
15
|
+
const { showToast } = useToast()
|
|
16
|
+
showToast(t('common.operation_success'), 'success')
|
|
17
|
+
showToast(err?.message || t('common.operation_failed'), 'error')
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
```tsx
|
|
21
|
+
// ❌
|
|
22
|
+
import { message } from 'antd'
|
|
23
|
+
message.success('...')
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
- **非 React 上下文**(如 axios 拦截器、纯工具函数)不可用 hook 时,使用 `@/utils/toastBridge` 的 `showGlobalToast`(由 `ToastProvider` 挂载时注册)。
|
|
27
|
+
|
|
28
|
+
- **例外**:antd `Form` / `Form.Item` 的校验规则对象里的字段 **`message:`** 表示校验失败文案,**不是** antd 全局 `message` API,应继续按 antd 规则写法保留。
|
package/.env
ADDED
package/.env.development
ADDED
package/.env.production
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
docker-build:
|
|
2
|
+
only:
|
|
3
|
+
- master
|
|
4
|
+
stage: docker-build
|
|
5
|
+
image: 10.101.1.128:16666/gitlab-runner/docker:24.0.5-dind-cx-harbor
|
|
6
|
+
artifacts:
|
|
7
|
+
when: always
|
|
8
|
+
paths:
|
|
9
|
+
- ${CI_PROJECT_DIR}/image_tag
|
|
10
|
+
script:
|
|
11
|
+
- export DOCKER_HOST=$(ip route | grep default | awk '{print $3}')
|
|
12
|
+
|
|
13
|
+
# 生成一个时间戳
|
|
14
|
+
- export CI_TIMESTAMP=`TZ='Asia/Shanghai' date "+%Y%m%d%H%M%S"`
|
|
15
|
+
# 保存镜像 tag 通过 gitlab-ci 的 artifacts 功能传递给后续所有 job
|
|
16
|
+
- echo ${CI_TIMESTAMP}${CI_COMMIT_SHORT_SHA} > image_tag
|
|
17
|
+
|
|
18
|
+
# 唯一 tag 的镜像名称
|
|
19
|
+
- IMAGE_NAME=${CI_REGISTRY}/cxinternet/${CI_PROJECT_PATH}:${CI_TIMESTAMP}${CI_COMMIT_SHORT_SHA}
|
|
20
|
+
# 生成唯一 tag 镜像
|
|
21
|
+
- docker build -f ./.docker/Dockerfile -t ${IMAGE_NAME} .
|
|
22
|
+
# 生成 latest 镜像
|
|
23
|
+
- docker tag ${IMAGE_NAME} ${CI_REGISTRY}/cxinternet/${CI_PROJECT_PATH}:latest
|
|
24
|
+
|
|
25
|
+
# 推送镜像
|
|
26
|
+
- docker push ${IMAGE_NAME}
|
|
27
|
+
- docker push ${CI_REGISTRY}/cxinternet/${CI_PROJECT_PATH}:latest
|
|
28
|
+
- echo "push image success:"${IMAGE_NAME}" "${CI_REGISTRY}/cxinternet/${CI_PROJECT_PATH}:latest
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
k8s-deploy-dev-master:
|
|
2
|
+
only:
|
|
3
|
+
- master
|
|
4
|
+
stage: k8s-deploy
|
|
5
|
+
image: 10.101.1.128:16666/kubernetes/kubectl:1.27.4-dev-kvm
|
|
6
|
+
script:
|
|
7
|
+
- |
|
|
8
|
+
# 前端应用名称
|
|
9
|
+
APP_NAME="agent-web"
|
|
10
|
+
# 前端应用端口 后台网关端口 20788
|
|
11
|
+
APP_PORT=20790
|
|
12
|
+
# 镜像仓库的命名空间
|
|
13
|
+
IMAGE_NAMESPACE="cxinternet"
|
|
14
|
+
|
|
15
|
+
PROJECT_PATH=${CI_PROJECT_PATH}
|
|
16
|
+
IMAGE_TAG=$(cat image_tag)
|
|
17
|
+
cd ./.k8s/
|
|
18
|
+
mkdir deployment
|
|
19
|
+
mkdir service
|
|
20
|
+
|
|
21
|
+
kubectl apply -f 0-namespace.yaml
|
|
22
|
+
more ./0-namespace.yaml
|
|
23
|
+
|
|
24
|
+
kubectl apply -f 1-configmap-web.yaml
|
|
25
|
+
more ./1-configmap-web.yaml
|
|
26
|
+
kubectl apply -f 1-nginx-conf-dev.yaml
|
|
27
|
+
more ./1-nginx-conf-dev.yaml
|
|
28
|
+
|
|
29
|
+
image_name=$CI_REGISTRY"/"$IMAGE_NAMESPACE"/"$PROJECT_PATH":"$IMAGE_TAG
|
|
30
|
+
deployment="{\"metadata\":{\"name\":\""$APP_NAME"\",\"labels\":{\"app\":\""$APP_NAME"\"}},\"spec\":{\"selector\":{\"matchLabels\":{\"app\":\""$APP_NAME"\"}},\"template\":{\"metadata\":{\"labels\":{\"app\":\""$APP_NAME"\"}},\"spec\":{\"containers\":[{\"name\":\""$APP_NAME"\",\"image\":\""$image_name"\",\"imagePullPolicy\":\"Always\",\"ports\":[{\"name\":\"http\",\"containerPort\":8080,\"protocol\":\"TCP\"}],\"envFrom\":[{\"configMapRef\":{\"name\":\"agent-web-configmap\"}}],\"volumeMounts\":[{\"name\":\"agent-nginx-conf\",\"mountPath\":\"/etc/nginx/nginx.conf\",\"subPath\":\"nginx.conf\"}]}]}}}}"
|
|
31
|
+
service="{\"metadata\":{\"name\":\""$APP_NAME"\",\"labels\":{\"app\":\""$APP_NAME"\"}},\"spec\":{\"selector\":{\"app\":\""$APP_NAME"\"},\"ports\":[{\"name\":\"http\",\"port\":8080,\"protocol\":\"TCP\",\"targetPort\":8080,\"nodePort\":"$APP_PORT"}],\"type\":\"NodePort\"}}"
|
|
32
|
+
kubectl patch -f 2-deployment.yaml --dry-run=true --local=true -p $deployment -o yaml >./deployment/$APP_NAME-deployment.yaml
|
|
33
|
+
kubectl patch -f 3-service.yaml --dry-run=true --local=true -p $service -o yaml >./service/$APP_NAME-service.yaml
|
|
34
|
+
|
|
35
|
+
more ./deployment/$APP_NAME-deployment.yaml
|
|
36
|
+
more ./service/$APP_NAME-service.yaml
|
|
37
|
+
|
|
38
|
+
kubectl apply -f ./deployment
|
|
39
|
+
kubectl apply -f ./service
|
|
40
|
+
|
|
41
|
+
kubectl apply -f 4-ingress-dev.yaml
|
|
42
|
+
more ./4-ingress-dev.yaml
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
npm-build:
|
|
2
|
+
only:
|
|
3
|
+
- master
|
|
4
|
+
stage: npm-build
|
|
5
|
+
image: 10.101.1.128:16666/gitlab-runner/node:20.19.2-alpine
|
|
6
|
+
artifacts:
|
|
7
|
+
paths:
|
|
8
|
+
- ${CI_PROJECT_DIR}/dist
|
|
9
|
+
script:
|
|
10
|
+
- npm config set prefix /cache${CI_PROJECT_DIR}/node_global
|
|
11
|
+
- npm config set cache /cache${CI_PROJECT_DIR}/node_cache
|
|
12
|
+
- npm config set registry http://registry.npm.taobao.org/
|
|
13
|
+
# - npm install @rollup/rollup-linux-x64-musl --save-optional
|
|
14
|
+
# - npm install --force
|
|
15
|
+
- npm ci --prefer-offline --no-audit
|
|
16
|
+
- export VITE_API_BASE_URL=agent-server
|
|
17
|
+
- npm run build
|
package/.gitlab-ci.yml
ADDED
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
apiVersion: v1
|
|
2
|
+
data:
|
|
3
|
+
nginx.conf: |+
|
|
4
|
+
# For more information on configuration, see:
|
|
5
|
+
# * Official English Documentation: http://nginx.org/en/docs/
|
|
6
|
+
# * Official Russian Documentation: http://nginx.org/ru/docs/
|
|
7
|
+
|
|
8
|
+
user nginx;
|
|
9
|
+
worker_processes auto;
|
|
10
|
+
error_log /var/log/nginx/error.log;
|
|
11
|
+
pid /run/nginx.pid;
|
|
12
|
+
|
|
13
|
+
# Load dynamic modules. See /usr/share/nginx/README.dynamic.
|
|
14
|
+
include /usr/share/nginx/modules/*.conf;
|
|
15
|
+
|
|
16
|
+
events {
|
|
17
|
+
worker_connections 1024;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
http {
|
|
21
|
+
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
|
|
22
|
+
'$status $body_bytes_sent "$http_referer" '
|
|
23
|
+
'"$http_user_agent" "$http_x_forwarded_for"';
|
|
24
|
+
|
|
25
|
+
access_log /var/log/nginx/access.log main;
|
|
26
|
+
|
|
27
|
+
gzip on;
|
|
28
|
+
gzip_comp_level 8;
|
|
29
|
+
gzip_min_length 256;
|
|
30
|
+
gzip_proxied any;
|
|
31
|
+
gzip_vary on;
|
|
32
|
+
gzip_types application/javascript text/css;
|
|
33
|
+
|
|
34
|
+
sendfile on;
|
|
35
|
+
tcp_nopush on;
|
|
36
|
+
tcp_nodelay on;
|
|
37
|
+
underscores_in_headers on;
|
|
38
|
+
keepalive_timeout 65;
|
|
39
|
+
types_hash_max_size 2048;
|
|
40
|
+
client_max_body_size 100M;
|
|
41
|
+
|
|
42
|
+
include /etc/nginx/mime.types;
|
|
43
|
+
default_type application/octet-stream;
|
|
44
|
+
|
|
45
|
+
# Load modular configuration files from the /etc/nginx/conf.d directory.
|
|
46
|
+
# See http://nginx.org/en/docs/ngx_core_module.html#include
|
|
47
|
+
# for more information.
|
|
48
|
+
|
|
49
|
+
server {
|
|
50
|
+
listen 8080 default_server;
|
|
51
|
+
listen [::]:8080 default_server;
|
|
52
|
+
|
|
53
|
+
server_name _;
|
|
54
|
+
root /app/dist;
|
|
55
|
+
|
|
56
|
+
location /dev/agent/agent-server/chat/stream {
|
|
57
|
+
proxy_buffering off;
|
|
58
|
+
proxy_cache off;
|
|
59
|
+
gzip off;
|
|
60
|
+
proxy_http_version 1.1;
|
|
61
|
+
|
|
62
|
+
proxy_connect_timeout 10s;
|
|
63
|
+
proxy_send_timeout 600s;
|
|
64
|
+
proxy_read_timeout 600s;
|
|
65
|
+
|
|
66
|
+
add_header 'Access-Control-Allow-Origin' '*';
|
|
67
|
+
add_header 'Access-Control-Allow-Credentials' 'true';
|
|
68
|
+
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
|
|
69
|
+
add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
|
|
70
|
+
proxy_set_header Cookie $http_cookie;
|
|
71
|
+
proxy_pass http://agent-server:8080/chat/stream;
|
|
72
|
+
|
|
73
|
+
proxy_cookie_path / /dev/agent/agent-server/chat/stream;
|
|
74
|
+
proxy_cookie_domain domino.server nginx.server;
|
|
75
|
+
proxy_redirect off;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
location / {
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
error_page 404 /404.html;
|
|
82
|
+
location = /40x.html {
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
error_page 500 502 503 504 /50x.html;
|
|
86
|
+
location = /50x.html {
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
location /dev/agent {
|
|
90
|
+
proxy_pass http://agent-web:8080/;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
location /agent-server/ {
|
|
94
|
+
add_header 'Access-Control-Allow-Origin' '*';
|
|
95
|
+
add_header 'Access-Control-Allow-Credentials' 'true';
|
|
96
|
+
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
|
|
97
|
+
add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
|
|
98
|
+
proxy_set_header Cookie $http_cookie;
|
|
99
|
+
proxy_pass http://agent-server:8080/;
|
|
100
|
+
|
|
101
|
+
proxy_cookie_path / /agent-server/;
|
|
102
|
+
proxy_cookie_domain domino.server nginx.server;
|
|
103
|
+
proxy_redirect off;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
kind: ConfigMap
|
|
108
|
+
metadata:
|
|
109
|
+
name: agent-nginx-conf
|
|
110
|
+
namespace: agent
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
apiVersion: apps/v1
|
|
2
|
+
kind: Deployment
|
|
3
|
+
metadata:
|
|
4
|
+
name: deployment-name
|
|
5
|
+
namespace: agent
|
|
6
|
+
labels:
|
|
7
|
+
app: label-app
|
|
8
|
+
spec:
|
|
9
|
+
replicas: 1
|
|
10
|
+
selector:
|
|
11
|
+
matchLabels:
|
|
12
|
+
app: selector-name
|
|
13
|
+
strategy:
|
|
14
|
+
type: RollingUpdate
|
|
15
|
+
rollingUpdate:
|
|
16
|
+
maxSurge: 1
|
|
17
|
+
maxUnavailable: 1
|
|
18
|
+
template:
|
|
19
|
+
metadata:
|
|
20
|
+
labels:
|
|
21
|
+
app: pod-template
|
|
22
|
+
spec:
|
|
23
|
+
containers: container
|
|
24
|
+
volumes:
|
|
25
|
+
- configMap:
|
|
26
|
+
name: agent-nginx-conf
|
|
27
|
+
name: agent-nginx-conf
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
apiVersion: networking.k8s.io/v1
|
|
2
|
+
kind: Ingress
|
|
3
|
+
metadata:
|
|
4
|
+
annotations:
|
|
5
|
+
kubernetes.io/ingress.class: nginx
|
|
6
|
+
nginx.ingress.kubernetes.io/proxy-body-size: "50m"
|
|
7
|
+
nginx.ingress.kubernetes.io/client-max-body-size: "50m"
|
|
8
|
+
nginx.ingress.kubernetes.io/proxy-buffering: "off"
|
|
9
|
+
nginx.ingress.kubernetes.io/proxy-http-version: "1.1"
|
|
10
|
+
nginx.ingress.kubernetes.io/configuration-snippet: |
|
|
11
|
+
proxy_cache off;
|
|
12
|
+
gzip off;
|
|
13
|
+
nginx.ingress.kubernetes.io/use-regex: "true"
|
|
14
|
+
nginx.ingress.kubernetes.io/proxy-connect-timeout: "10"
|
|
15
|
+
nginx.ingress.kubernetes.io/proxy-read-timeout: "600"
|
|
16
|
+
nginx.ingress.kubernetes.io/proxy-send-timeout: "600"
|
|
17
|
+
name: agent-web-dev-irs101-cn
|
|
18
|
+
namespace: agent
|
|
19
|
+
spec:
|
|
20
|
+
rules:
|
|
21
|
+
- host: cx.dev.irs101.cn
|
|
22
|
+
http:
|
|
23
|
+
paths:
|
|
24
|
+
- path: /dev/agent(/|$)(.*)
|
|
25
|
+
pathType: Prefix
|
|
26
|
+
backend:
|
|
27
|
+
service:
|
|
28
|
+
name: agent-web
|
|
29
|
+
port:
|
|
30
|
+
number: 8080
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# 全局提示:使用 showToast,禁止 antd message
|
|
2
|
+
|
|
3
|
+
**规则类型(请在灵码 IDE / 插件中将本规则设为「始终生效」)**:项目内所有智能会话与行间生成代码均应遵守。
|
|
4
|
+
|
|
5
|
+
## 要求
|
|
6
|
+
|
|
7
|
+
1. React 组件中需要全局气泡提示时:
|
|
8
|
+
- 从 `@/contexts/ToastContext` 引入 `useToast`。
|
|
9
|
+
- 使用 `const { showToast } = useToast()`。
|
|
10
|
+
- 调用:`showToast(文案字符串, 类型)`,类型为 `'success' | 'error' | 'info' | 'warning'`,可选第三个参数为停留毫秒数。
|
|
11
|
+
|
|
12
|
+
2. **不要**为全局提示引入或使用 antd 的 `message`(如 `message.success`、`message.error`)。
|
|
13
|
+
|
|
14
|
+
3. 不在组件树内、无法使用 hook 的代码(例如 axios 拦截器、独立工具模块):使用 `@/utils/toastBridge` 的 `showGlobalToast`(与 `ToastProvider` 配套)。
|
|
15
|
+
|
|
16
|
+
## 例外
|
|
17
|
+
|
|
18
|
+
- antd `Form` 校验规则里的 **`message:`** 字段表示**校验错误提示文案**,属于规则配置,**必须保留**,与全局 `message` API 无关。
|
|
19
|
+
|
|
20
|
+
## 示例
|
|
21
|
+
|
|
22
|
+
```tsx
|
|
23
|
+
// 正确
|
|
24
|
+
import { useToast } from '@/contexts/ToastContext'
|
|
25
|
+
const { showToast } = useToast()
|
|
26
|
+
showToast(t('menus.xxx.saved'), 'success')
|
|
27
|
+
showToast(error?.message || t('common.operation_failed'), 'error')
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
```tsx
|
|
31
|
+
// 错误 — 不要用 antd 全局 message
|
|
32
|
+
import { message } from 'antd'
|
|
33
|
+
message.success('保存成功')
|
|
34
|
+
```
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# For more information on configuration, see:
|
|
2
|
+
# * Official English Documentation: http://nginx.org/en/docs/
|
|
3
|
+
# * Official Russian Documentation: http://nginx.org/ru/docs/
|
|
4
|
+
|
|
5
|
+
user nginx;
|
|
6
|
+
worker_processes auto;
|
|
7
|
+
error_log /var/log/nginx/error.log;
|
|
8
|
+
pid /run/nginx.pid;
|
|
9
|
+
|
|
10
|
+
# Load dynamic modules. See /usr/share/nginx/README.dynamic.
|
|
11
|
+
include /usr/share/nginx/modules/*.conf;
|
|
12
|
+
|
|
13
|
+
events {
|
|
14
|
+
worker_connections 1024;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
http {
|
|
18
|
+
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
|
|
19
|
+
'$status $body_bytes_sent "$http_referer" '
|
|
20
|
+
'"$http_user_agent" "$http_x_forwarded_for"';
|
|
21
|
+
|
|
22
|
+
access_log /var/log/nginx/access.log main;
|
|
23
|
+
|
|
24
|
+
sendfile on;
|
|
25
|
+
tcp_nopush on;
|
|
26
|
+
tcp_nodelay on;
|
|
27
|
+
keepalive_timeout 65;
|
|
28
|
+
types_hash_max_size 2048;
|
|
29
|
+
|
|
30
|
+
include /etc/nginx/mime.types;
|
|
31
|
+
default_type application/octet-stream;
|
|
32
|
+
|
|
33
|
+
# Load modular configuration files from the /etc/nginx/conf.d directory.
|
|
34
|
+
# See http://nginx.org/en/docs/ngx_core_module.html#include
|
|
35
|
+
# for more information.
|
|
36
|
+
|
|
37
|
+
server {
|
|
38
|
+
listen 8080 default_server;
|
|
39
|
+
listen [::]:80 default_server;
|
|
40
|
+
|
|
41
|
+
server_name _;
|
|
42
|
+
root /app/dist;
|
|
43
|
+
|
|
44
|
+
error_page 404 /404.html;
|
|
45
|
+
location = /40x.html {
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
error_page 500 502 503 504 /50x.html;
|
|
49
|
+
location = /50x.html {
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
package/.prettierrc
ADDED
package/README.md
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# Agent Web 端
|