cx-chat 0.0.1 → 0.0.3
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/dist/cx-chat.css +1 -0
- package/dist/cx-chat.es.js +97326 -0
- package/dist/cx-chat.umd.js +734 -0
- package/package.json +21 -1
- package/.cursor/rules/i18n-cn-gloss-comments.mdc +0 -31
- package/.cursor/rules/list-page-view-pageconfig.mdc +0 -32
- package/.cursor/rules/no-over-defensive-programming.mdc +0 -90
- package/.cursor/rules/requirement-description-for-agent.mdc +0 -33
- package/.cursor/rules/use-showToast-not-antd-message.mdc +0 -28
- package/.docker/Dockerfile +0 -7
- package/.env +0 -9
- package/.env.development +0 -7
- package/.env.production +0 -7
- package/.gitlab-ci/docker-build.yaml +0 -28
- package/.gitlab-ci/k8s-deploy-dev-master.yaml +0 -42
- package/.gitlab-ci/npm-build.yaml +0 -17
- package/.gitlab-ci.yml +0 -8
- package/.k8s/0-namespace.yaml +0 -6
- package/.k8s/1-configmap-web.yaml +0 -7
- package/.k8s/1-nginx-conf-dev.yaml +0 -110
- package/.k8s/2-deployment.yaml +0 -27
- package/.k8s/3-service.yaml +0 -16
- package/.k8s/4-ingress-dev.yaml +0 -30
- package/.lingma/rules/use-showToast-not-antd-message.md +0 -34
- package/.nginx/nginx.conf +0 -52
- package/.prettierrc +0 -9
- package/eslint.config.js +0 -32
- package/index.html +0 -13
- package/postcss.config.js +0 -6
- package/src/App.tsx +0 -96
- package/src/_doc/0.docs-overview.md +0 -28
- package/src/_doc/cx-ui/0.docs-overview.md +0 -30
- package/src/_doc/cx-ui/comp.1.cx-ui-overview.md +0 -82
- package/src/_doc/cx-ui/comp.2.cx-modal.md +0 -82
- package/src/_doc/cx-ui/comp.3.cx-button.md +0 -89
- package/src/_doc/cx-ui/comp.4.cx-form.md +0 -72
- package/src/_doc/cx-ui/comp.5.cx-fields.md +0 -76
- package/src/_doc/cx-ui/comp.6.cx-tag.md +0 -57
- package/src/_doc/cx-ui/comp.7.cx-empty-state.md +0 -29
- package/src/_doc/meta/0.docs-overview.md +0 -24
- package/src/_doc/meta/comp.1.enum-runtime.md +0 -33
- package/src/_doc/meta/comp.2.dict-runtime.md +0 -39
- package/src/_doc/router/0.docs-overview.md +0 -14
- package/src/_doc/router/guide.1.menu-component-config.md +0 -181
- package/src/_doc/router/guide.2.router-auto-registration.md +0 -114
- package/src/_doc/table-view/0.docs-overview.md +0 -30
- package/src/_doc/table-view/comp.1.table-view.md +0 -542
- package/src/_doc/table-view/props.1.create-table-view-config.md +0 -193
- package/src/_doc/table-view/props.2.table-view-search-fields.md +0 -106
- package/src/api/_mock/README.md +0 -340
- package/src/api/_mock/api.ts +0 -1642
- package/src/api/_mock/bundle-shim.ts +0 -16
- package/src/api/_mock/handler-shim.ts +0 -6
- package/src/api/_mock/handler.ts +0 -458
- package/src/api/_mock/index.ts +0 -711
- package/src/api/_mock/interceptor.ts +0 -15
- package/src/api/_mock/mod.ts +0 -12
- package/src/api/_mock/utils.ts +0 -65
- package/src/api/base/memory.js +0 -24
- package/src/api/chat.js +0 -210
- package/src/api/common/auth.js +0 -70
- package/src/api/menus/business-rules.js +0 -76
- package/src/api/menus/feedback.js +0 -102
- package/src/api/menus/knowledge.js +0 -159
- package/src/api/menus/model-metadata/manage.js +0 -70
- package/src/api/menus/model-metadata/role.js +0 -50
- package/src/api/menus/model-metadata/training-detail-mock-data.js +0 -569
- package/src/api/menus/model-metadata/training.js +0 -28
- package/src/api/menus/skill.js +0 -40
- package/src/api/system/agent-config.js +0 -16
- package/src/api/system/department.js +0 -94
- package/src/api/system/dict.js +0 -86
- package/src/api/system/menu.js +0 -37
- package/src/api/system/permission.js +0 -26
- package/src/api/system/role.js +0 -34
- package/src/api/system/sys-config.js +0 -16
- package/src/api/system/sys-log.js +0 -17
- package/src/api/system/user.js +0 -75
- package/src/api/upload.js +0 -39
- package/src/assets/react.svg +0 -1
- package/src/components/auth/current-user-avatar.tsx +0 -77
- package/src/components/common/code-view.tsx +0 -149
- package/src/components/common/detail-link.tsx +0 -67
- package/src/components/common/error-boundary.tsx +0 -98
- package/src/components/common/language-switcher.tsx +0 -91
- package/src/components/common/lite-table/index.tsx +0 -135
- package/src/components/common/md-editor.tsx +0 -126
- package/src/components/common/modal/confirm-dialog.tsx +0 -113
- package/src/components/common/modal/dep-user-select-multi.tsx +0 -324
- package/src/components/common/modal/dep-user-select.tsx +0 -249
- package/src/components/common/modal/user-select-multi.tsx +0 -266
- package/src/components/common/pagination.tsx +0 -472
- package/src/components/common/path.tsx +0 -175
- package/src/components/common/system-logo-mark.tsx +0 -48
- package/src/components/cx-ui/button/index.less +0 -208
- package/src/components/cx-ui/button/index.tsx +0 -611
- package/src/components/cx-ui/checkbox/index.tsx +0 -78
- package/src/components/cx-ui/date-picker/index.less +0 -17
- package/src/components/cx-ui/date-picker/index.tsx +0 -193
- package/src/components/cx-ui/drawer/index.tsx +0 -47
- package/src/components/cx-ui/empty-state/index.tsx +0 -20
- package/src/components/cx-ui/floating-shell/CxFloatingShell.tsx +0 -89
- package/src/components/cx-ui/floating-shell/cx-floating-shell.less +0 -283
- package/src/components/cx-ui/floating-shell/has-floating-value.ts +0 -41
- package/src/components/cx-ui/form/CxForm.tsx +0 -15
- package/src/components/cx-ui/form/index.tsx +0 -20
- package/src/components/cx-ui/form-item/index.less +0 -26
- package/src/components/cx-ui/form-item/index.tsx +0 -36
- package/src/components/cx-ui/index.ts +0 -70
- package/src/components/cx-ui/input/auto-complete.tsx +0 -134
- package/src/components/cx-ui/input/index.tsx +0 -259
- package/src/components/cx-ui/input-number/index.jsx +0 -66
- package/src/components/cx-ui/modal/index.jsx +0 -212
- package/src/components/cx-ui/modal/index.less +0 -144
- package/src/components/cx-ui/modal/useCxModal.ts +0 -125
- package/src/components/cx-ui/multi-select/index.jsx +0 -74
- package/src/components/cx-ui/multi-select/index.less +0 -40
- package/src/components/cx-ui/multi-select/index2.tsx +0 -361
- package/src/components/cx-ui/radio/index.tsx +0 -33
- package/src/components/cx-ui/range-picker/index.less +0 -65
- package/src/components/cx-ui/range-picker/index.tsx +0 -219
- package/src/components/cx-ui/select/index.less +0 -34
- package/src/components/cx-ui/select/index.tsx +0 -196
- package/src/components/cx-ui/skeleton/index.tsx +0 -12
- package/src/components/cx-ui/steps/index.tsx +0 -14
- package/src/components/cx-ui/styles/_tokens.less +0 -79
- package/src/components/cx-ui/styles/index.less +0 -246
- package/src/components/cx-ui/switch/index.less +0 -106
- package/src/components/cx-ui/switch/index.tsx +0 -120
- package/src/components/cx-ui/table/index.less +0 -160
- package/src/components/cx-ui/table/index.tsx +0 -152
- package/src/components/cx-ui/tabs/index.less +0 -15
- package/src/components/cx-ui/tabs/index.tsx +0 -34
- package/src/components/cx-ui/tag/index.less +0 -51
- package/src/components/cx-ui/tag/index.tsx +0 -140
- package/src/components/cx-ui/timeline/index.tsx +0 -14
- package/src/components/cx-ui/tooltip/index.tsx +0 -67
- package/src/components/cx-ui/tree/index.tsx +0 -193
- package/src/components/cx-ui/tree-select/index.jsx +0 -91
- package/src/components/cx-ui/tree-select/index.less +0 -27
- package/src/components/cx-ui/upload-file/index.less +0 -223
- package/src/components/cx-ui/upload-file/index.tsx +0 -640
- package/src/components/cx-ui/upload-img/index.tsx +0 -291
- package/src/components/layout/components/Header.tsx +0 -216
- package/src/components/layout/components/Sidebar.tsx +0 -717
- package/src/components/layout/index.tsx +0 -95
- package/src/components/table-view/components/search-area.tsx +0 -411
- package/src/components/table-view/components/table-view-config.tsx +0 -528
- package/src/components/table-view/components/table-view.types.ts +0 -478
- package/src/components/table-view/components/tree-api-normalize.ts +0 -38
- package/src/components/table-view/components/tree-data-annotate.ts +0 -31
- package/src/components/table-view/components/tree-sidebar.tsx +0 -74
- package/src/components/table-view/index.tsx +0 -61
- package/src/components/table-view/list-page-view.tsx +0 -1049
- package/src/components/table-view/select-table-view.tsx +0 -1094
- package/src/components/table-view/styles/select-table-view.less +0 -51
- package/src/config/default-system-name.ts +0 -9
- package/src/config/system.ts +0 -165
- package/src/constants/countryCodes.ts +0 -3
- package/src/contexts/AuthContext.tsx +0 -256
- package/src/contexts/ChatContext.tsx +0 -839
- package/src/contexts/MenuContext.tsx +0 -62
- package/src/contexts/ToastContext.tsx +0 -181
- package/src/hooks/useCopyToClipboard.ts +0 -47
- package/src/hooks/useModalSubmit.ts +0 -104
- package/src/hooks/useRouter.ts +0 -240
- package/src/hooks/useStepForm.ts +0 -46
- package/src/hooks/useStickyHeader.ts +0 -42
- package/src/hooks/useThreadActions.ts +0 -105
- package/src/hooks/useUserPreferences.ts +0 -101
- package/src/http/axios.js +0 -372
- package/src/http/mock.interceptor.ts +0 -9
- package/src/http/obfuscationKey.ts +0 -41
- package/src/i18n.ts +0 -60
- package/src/index.js +0 -1
- package/src/index.less +0 -169
- package/src/locales/en/auth.ts +0 -70
- package/src/locales/en/base/memory.ts +0 -28
- package/src/locales/en/base/settings.ts +0 -41
- package/src/locales/en/chat.ts +0 -40
- package/src/locales/en/common.ts +0 -173
- package/src/locales/en/enum.ts +0 -27
- package/src/locales/en/menus/business-rules.ts +0 -48
- package/src/locales/en/menus/feedback.ts +0 -62
- package/src/locales/en/menus/knowledge.ts +0 -120
- package/src/locales/en/menus/model-metadata/index.ts +0 -10
- package/src/locales/en/menus/model-metadata/manage.ts +0 -151
- package/src/locales/en/menus/model-metadata/role.ts +0 -48
- package/src/locales/en/menus/model-metadata/training.ts +0 -65
- package/src/locales/en/menus/skill.ts +0 -34
- package/src/locales/en/system/agent-config.ts +0 -34
- package/src/locales/en/system/department.ts +0 -68
- package/src/locales/en/system/dict.ts +0 -44
- package/src/locales/en/system/menu.ts +0 -45
- package/src/locales/en/system/permission.ts +0 -89
- package/src/locales/en/system/role.ts +0 -25
- package/src/locales/en/system/sys-config.ts +0 -33
- package/src/locales/en/system/sys-log.ts +0 -38
- package/src/locales/en/system/user.ts +0 -113
- package/src/locales/en.ts +0 -68
- package/src/locales/zh/auth.ts +0 -70
- package/src/locales/zh/base/memory.ts +0 -29
- package/src/locales/zh/base/settings.ts +0 -41
- package/src/locales/zh/chat.ts +0 -47
- package/src/locales/zh/common.ts +0 -178
- package/src/locales/zh/enum.ts +0 -28
- package/src/locales/zh/menus/business-rules.ts +0 -47
- package/src/locales/zh/menus/feedback.ts +0 -62
- package/src/locales/zh/menus/knowledge.ts +0 -117
- package/src/locales/zh/menus/model-metadata/index.ts +0 -10
- package/src/locales/zh/menus/model-metadata/manage.ts +0 -151
- package/src/locales/zh/menus/model-metadata/role.ts +0 -47
- package/src/locales/zh/menus/model-metadata/training.ts +0 -64
- package/src/locales/zh/menus/skill.ts +0 -34
- package/src/locales/zh/system/agent-config.ts +0 -33
- package/src/locales/zh/system/department.ts +0 -69
- package/src/locales/zh/system/dict.ts +0 -44
- package/src/locales/zh/system/menu.ts +0 -47
- package/src/locales/zh/system/permission.ts +0 -94
- package/src/locales/zh/system/role.ts +0 -25
- package/src/locales/zh/system/sys-config.ts +0 -32
- package/src/locales/zh/system/sys-log.ts +0 -38
- package/src/locales/zh/system/user.ts +0 -114
- package/src/locales/zh.ts +0 -67
- package/src/main.tsx +0 -50
- package/src/meta/const/index.ts +0 -40
- package/src/meta/index-dict.ts +0 -56
- package/src/meta/index-enum.ts +0 -95
- package/src/meta/index.ts +0 -14
- package/src/meta/module/dict-data/runtime.ts +0 -199
- package/src/meta/module/dict-data/types.ts +0 -17
- package/src/meta/module/enum-data/runtime.ts +0 -75
- package/src/meta/module/enum-data/types.ts +0 -18
- package/src/router/index.tsx +0 -312
- package/src/styles/AntdThemeProvider.tsx +0 -40
- package/src/styles/antd-theme.ts +0 -20
- package/src/styles/global.less +0 -107
- package/src/styles/variable.less +0 -103
- package/src/types/feedback.ts +0 -43
- package/src/types/index.ts +0 -85
- package/src/types/menu.ts +0 -43
- package/src/utils/aesUtil.ts +0 -123
- package/src/utils/chatUtils.ts +0 -524
- package/src/utils/cn.ts +0 -6
- package/src/utils/crypto.ts +0 -164
- package/src/utils/date.ts +0 -72
- package/src/utils/file-icons.tsx +0 -79
- package/src/utils/index.ts +0 -168
- package/src/utils/markdown-math-plugins.ts +0 -21
- package/src/utils/menuI18n.ts +0 -305
- package/src/utils/menuRouteRegistry.ts +0 -78
- package/src/utils/permission-crud.ts +0 -147
- package/src/utils/routeConfig.ts +0 -350
- package/src/utils/storage.ts +0 -135
- package/src/utils/toastBridge.ts +0 -26
- package/src/utils/url.ts +0 -38
- package/src/utils/validation.ts +0 -16
- package/src/views/auth/auth-code/index.less +0 -169
- package/src/views/auth/auth-code/index.module.less +0 -174
- package/src/views/auth/auth-code/index.tsx +0 -233
- package/src/views/auth/login.tsx +0 -498
- package/src/views/auth/register.tsx +0 -388
- package/src/views/base/memory/index.tsx +0 -136
- package/src/views/base/memory/modal/detail-modal.tsx +0 -89
- package/src/views/base/memory/modal/submit-modal.tsx +0 -134
- package/src/views/base/settings/index.tsx +0 -657
- package/src/views/chat/chat.less +0 -323
- package/src/views/chat/components/chat-input.tsx +0 -298
- package/src/views/chat/components/header-thread-title.tsx +0 -210
- package/src/views/chat/components/message-list/content-answer.tsx +0 -100
- package/src/views/chat/components/message-list/content-question.tsx +0 -18
- package/src/views/chat/components/message-list/index.tsx +0 -520
- package/src/views/chat/components/message-list/message-item.tsx +0 -199
- package/src/views/chat/components/message-list/preparation-demo-items.ts +0 -147
- package/src/views/chat/components/message-list/preparation-steps.tsx +0 -506
- package/src/views/chat/components/message-list/suggestion-list.tsx +0 -36
- package/src/views/chat/components/message-list/thinking-process.tsx +0 -49
- package/src/views/chat/components/message-list/toolbar.tsx +0 -224
- package/src/views/chat/components/message-list/use-message-list-scroll.ts +0 -214
- package/src/views/chat/components/references-knowledge/context.tsx +0 -57
- package/src/views/chat/components/references-knowledge/index.ts +0 -9
- package/src/views/chat/components/references-knowledge/modal/knowledge-detail-drawer.tsx +0 -556
- package/src/views/chat/components/references-knowledge/modal/knowledge-doc-detail-drawer.tsx +0 -529
- package/src/views/chat/components/references-knowledge/panel.tsx +0 -115
- package/src/views/chat/hooks/use-chat-common.ts +0 -19
- package/src/views/chat/index-session.tsx +0 -647
- package/src/views/chat/index.tsx +0 -127
- package/src/views/page-error/401.tsx +0 -56
- package/src/views/page-error/404.tsx +0 -56
- package/src/views/page-menus/business-rules/index.tsx +0 -376
- package/src/views/page-menus/business-rules/modal/detail-modal.tsx +0 -186
- package/src/views/page-menus/business-rules/modal/scope-modal.tsx +0 -272
- package/src/views/page-menus/business-rules/modal/submit-modal.tsx +0 -142
- package/src/views/page-menus/feedback/components/feedback-dataset-list.tsx +0 -471
- package/src/views/page-menus/feedback/index.tsx +0 -166
- package/src/views/page-menus/feedback/modal/export-feedback-modal.tsx +0 -367
- package/src/views/page-menus/knowledge/components/doc-editor-by-type.tsx +0 -32
- package/src/views/page-menus/knowledge/components/doc-editor-type-file.tsx +0 -330
- package/src/views/page-menus/knowledge/detail.tsx +0 -600
- package/src/views/page-menus/knowledge/index.tsx +0 -337
- package/src/views/page-menus/knowledge/modal/detail-modal.tsx +0 -618
- package/src/views/page-menus/knowledge/modal/doc-detail-modal.tsx +0 -550
- package/src/views/page-menus/knowledge/modal/doc-parse.ts +0 -99
- package/src/views/page-menus/knowledge/modal/doc-submit-modal.tsx +0 -349
- package/src/views/page-menus/knowledge/modal/doc-type-picker-modal.tsx +0 -88
- package/src/views/page-menus/knowledge/modal/knowledge-user-select-modal.tsx +0 -283
- package/src/views/page-menus/knowledge/modal/submit-modal.tsx +0 -179
- package/src/views/page-menus/model-metadata/manage/components/metadata-detail-schema-tab.tsx +0 -114
- package/src/views/page-menus/model-metadata/manage/components/step1-basic-info.tsx +0 -232
- package/src/views/page-menus/model-metadata/manage/components/step2-schema.tsx +0 -316
- package/src/views/page-menus/model-metadata/manage/components/step3-permissions.tsx +0 -134
- package/src/views/page-menus/model-metadata/manage/components/step4-documents.tsx +0 -134
- package/src/views/page-menus/model-metadata/manage/components/step5-example-sql.tsx +0 -101
- package/src/views/page-menus/model-metadata/manage/components/submit-add.tsx +0 -338
- package/src/views/page-menus/model-metadata/manage/components/submit-edit.tsx +0 -276
- package/src/views/page-menus/model-metadata/manage/detail.tsx +0 -298
- package/src/views/page-menus/model-metadata/manage/hooks/model-metadata-submit-shared.ts +0 -113
- package/src/views/page-menus/model-metadata/manage/hooks/use-model-metadata-item-state.ts +0 -20
- package/src/views/page-menus/model-metadata/manage/index.tsx +0 -304
- package/src/views/page-menus/model-metadata/manage/modal/components/table-schema.ts +0 -374
- package/src/views/page-menus/model-metadata/manage/modal/components/use-table-detail-tabs.tsx +0 -151
- package/src/views/page-menus/model-metadata/manage/modal/components/use-table-submit-tabs.tsx +0 -423
- package/src/views/page-menus/model-metadata/manage/modal/detail-modal.tsx +0 -218
- package/src/views/page-menus/model-metadata/manage/modal/submit-modal.tsx +0 -261
- package/src/views/page-menus/model-metadata/manage/modal/table-detail-modal.tsx +0 -196
- package/src/views/page-menus/model-metadata/manage/modal/table-submit-modal.tsx +0 -229
- package/src/views/page-menus/model-metadata/manage/submit.tsx +0 -31
- package/src/views/page-menus/model-metadata/role/index.tsx +0 -207
- package/src/views/page-menus/model-metadata/role/modal/detail-modal.tsx +0 -97
- package/src/views/page-menus/model-metadata/role/modal/role-assign-users-modal.tsx +0 -254
- package/src/views/page-menus/model-metadata/role/modal/role-assign-users-panel.tsx +0 -393
- package/src/views/page-menus/model-metadata/role/modal/role-assign-users-utils.ts +0 -120
- package/src/views/page-menus/model-metadata/role/modal/role-permission-assign-panel.tsx +0 -698
- package/src/views/page-menus/model-metadata/role/modal/role-permission-modal.tsx +0 -237
- package/src/views/page-menus/model-metadata/role/modal/submit-modal.tsx +0 -135
- package/src/views/page-menus/model-metadata/training/components/detail-records/index.ts +0 -4
- package/src/views/page-menus/model-metadata/training/components/detail-records/node-card.tsx +0 -72
- package/src/views/page-menus/model-metadata/training/components/detail-records/summary-lines.ts +0 -196
- package/src/views/page-menus/model-metadata/training/components/detail-records/summary-list.tsx +0 -153
- package/src/views/page-menus/model-metadata/training/components/detail-records/timeline.tsx +0 -103
- package/src/views/page-menus/model-metadata/training/components/detail-records/types.ts +0 -82
- package/src/views/page-menus/model-metadata/training/detail.tsx +0 -159
- package/src/views/page-menus/model-metadata/training/index.tsx +0 -236
- package/src/views/page-menus/model-metadata/training/modal/update-detail-modal.tsx +0 -154
- package/src/views/page-menus/skill/index.tsx +0 -201
- package/src/views/page-menus/skill/modal/detail-modal.tsx +0 -156
- package/src/views/page-menus/skill/modal/submit-modal.tsx +0 -214
- package/src/views/page-system/agent-config/index.tsx +0 -370
- package/src/views/page-system/department/departmentFormShared.ts +0 -36
- package/src/views/page-system/department/index.tsx +0 -541
- package/src/views/page-system/department/modal/detail-modal.tsx +0 -94
- package/src/views/page-system/department/modal/member-role-modal.tsx +0 -128
- package/src/views/page-system/department/modal/submit-modal.tsx +0 -265
- package/src/views/page-system/dict/index.tsx +0 -440
- package/src/views/page-system/dict/modal/cate-submit-modal.tsx +0 -315
- package/src/views/page-system/dict/modal/submit-modal.tsx +0 -184
- package/src/views/page-system/logs/components/index.ts +0 -3
- package/src/views/page-system/logs/components/log-message-demo.tsx +0 -30
- package/src/views/page-system/logs/components/log-message-stream.ts +0 -184
- package/src/views/page-system/logs/components/message-list/content-answer.tsx +0 -100
- package/src/views/page-system/logs/components/message-list/content-question.tsx +0 -18
- package/src/views/page-system/logs/components/message-list/index.tsx +0 -515
- package/src/views/page-system/logs/components/message-list/message-item.tsx +0 -193
- package/src/views/page-system/logs/components/message-list/preparation-demo-items.ts +0 -147
- package/src/views/page-system/logs/components/message-list/preparation-steps.tsx +0 -506
- package/src/views/page-system/logs/components/message-list/suggestion-list.tsx +0 -36
- package/src/views/page-system/logs/components/message-list/thinking-process.tsx +0 -49
- package/src/views/page-system/logs/components/message-list/toolbar.tsx +0 -134
- package/src/views/page-system/logs/components/message-list/use-message-list-scroll.ts +0 -214
- package/src/views/page-system/logs/components/message-modal.tsx +0 -239
- package/src/views/page-system/logs/index.tsx +0 -132
- package/src/views/page-system/logs/modal/detail-modal.tsx +0 -157
- package/src/views/page-system/menu/components/menuFormShared.ts +0 -283
- package/src/views/page-system/menu/index.less +0 -12
- package/src/views/page-system/menu/index.tsx +0 -410
- package/src/views/page-system/menu/modal/icon-modal.less +0 -51
- package/src/views/page-system/menu/modal/icon-modal.tsx +0 -87
- package/src/views/page-system/menu/modal/submit-modal.tsx +0 -263
- package/src/views/page-system/permission/index.tsx +0 -562
- package/src/views/page-system/permission/modal/detail-modal.tsx +0 -179
- package/src/views/page-system/permission/modal/submit-modal.less +0 -146
- package/src/views/page-system/permission/modal/submit-modal.tsx +0 -650
- package/src/views/page-system/role/index.tsx +0 -163
- package/src/views/page-system/role/modal/detail-modal.tsx +0 -127
- package/src/views/page-system/role/modal/permission-assign-group-rules.ts +0 -86
- package/src/views/page-system/role/modal/permission-modal.tsx +0 -111
- package/src/views/page-system/role/modal/role-modal-shell-styles.ts +0 -21
- package/src/views/page-system/role/modal/role-permission-assign-panel.tsx +0 -916
- package/src/views/page-system/role/modal/role-permission-assign-shared.ts +0 -1047
- package/src/views/page-system/role/modal/submit-modal.tsx +0 -193
- package/src/views/page-system/sys-config/index.tsx +0 -294
- package/src/views/page-system/user/components/user-role-column.tsx +0 -87
- package/src/views/page-system/user/index.tsx +0 -439
- package/src/views/page-system/user/modal/assign-roles-modal.tsx +0 -389
- package/src/views/page-system/user/modal/detail-modal.tsx +0 -72
- package/src/views/page-system/user/modal/modal-style/submit-modal.less +0 -40
- package/src/views/page-system/user/modal/submit-modal.less +0 -40
- package/src/views/page-system/user/modal/submit-modal.tsx +0 -287
- package/src/views/page-system/user/userFormShared.ts +0 -51
- package/tailwind.config.js +0 -17
- package/tsconfig.app.json +0 -48
- package/tsconfig.json +0 -11
- package/tsconfig.node.json +0 -26
- package/vite.config.ts +0 -264
- /package/{public → dist}/favicon.ico +0 -0
- /package/{public → dist}/vite.svg +0 -0
|
@@ -1,478 +0,0 @@
|
|
|
1
|
-
import type { TooltipProps } from 'antd'
|
|
2
|
-
import type { ColumnsType } from 'antd/es/table'
|
|
3
|
-
import type { TFunction } from 'i18next'
|
|
4
|
-
import type { ReactNode } from 'react'
|
|
5
|
-
|
|
6
|
-
/** 本文件接口/类型字段统一按英文字母序排列,便于检索(含嵌套对象内字段)。 */
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* 列对象上可选:`ellipsis: true` 且无自定义 `render` 时,控制默认省略格子的悬停 CxTooltip。
|
|
10
|
-
* 默认 `placement` 为右侧,`ellipsisTooltipWidth` 为 300px。
|
|
11
|
-
*/
|
|
12
|
-
export interface TableViewEllipsisTooltipColumn {
|
|
13
|
-
ellipsisTooltipPlacement?: TooltipProps['placement']
|
|
14
|
-
/** Tooltip 正文最大宽度;`number` 按 px;默认 `300` */
|
|
15
|
-
ellipsisTooltipWidth?: number | string
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* 搜索区「重置 / 搜索」及 `searchAreaExtra` 内与 `CxButton` 对齐的尺寸语义。
|
|
20
|
-
* - `default`(`pageInfo` 不传时即此值):40px 高,即 `CxButton` 的 `medium`。
|
|
21
|
-
* - `small`:32px 高;仅个别页(如部门管理)与窄工具栏对齐时再设。
|
|
22
|
-
*/
|
|
23
|
-
export type SearchButtonSize = 'default' | 'small'
|
|
24
|
-
|
|
25
|
-
/** 将 `SearchButtonSize` 映射为 `CxButton` 的 `size` */
|
|
26
|
-
export function toCxSearchButtonSize(
|
|
27
|
-
searchButtonSize: SearchButtonSize,
|
|
28
|
-
): 'small' | 'medium' {
|
|
29
|
-
return searchButtonSize === 'small' ? 'small' : 'medium'
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
/** 列表 tableAPI 入参:搜索快照 + 分页排序(由配置工厂内 buildListTableParams 组装) */
|
|
33
|
-
export type ListTableQueryParams = Record<string, unknown> & {
|
|
34
|
-
order: 'asc' | 'desc'
|
|
35
|
-
page: number
|
|
36
|
-
size: number
|
|
37
|
-
sort: string
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
/** createListPageConfig / createSelectTableConfig 可选:覆盖默认列表排序(默认 sort=createTime、order=desc) */
|
|
41
|
-
export interface ListQueryConfig {
|
|
42
|
-
order?: 'asc' | 'desc'
|
|
43
|
-
sort?: string
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
export interface SearchField {
|
|
47
|
-
clearable?: boolean
|
|
48
|
-
format?: string
|
|
49
|
-
label: string
|
|
50
|
-
labelKey?: string
|
|
51
|
-
multiple?: boolean
|
|
52
|
-
options?: Array<{ label: string; value: any }>
|
|
53
|
-
placeholder?: string | [string, string]
|
|
54
|
-
placeholderKey?: string
|
|
55
|
-
prop: string
|
|
56
|
-
rangeEndProp?: string
|
|
57
|
-
rangeStartProp?: string
|
|
58
|
-
type?: 'input' | 'select' | 'date' | 'dateRange'
|
|
59
|
-
width?: string
|
|
60
|
-
showTime?: boolean
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
export interface TreeConfig {
|
|
64
|
-
autoSearch?: boolean
|
|
65
|
-
/** 为 true 时,树数据加载后默认展开全部节点(用户仍可手动折叠) */
|
|
66
|
-
defaultExpandAll?: boolean
|
|
67
|
-
/**
|
|
68
|
-
* 是否树加载完成后自动选中第一条根节点,并走与手动选中相同逻辑(写入 searchField;是否再拉表由 `autoSearch` 决定)。
|
|
69
|
-
* 默认 true。设为 false 时不自动选根(如部门管理须手动点部门)。
|
|
70
|
-
* 与「挂载时是否拉表」无关,后者见 `fetchTableOnMount`。
|
|
71
|
-
*/
|
|
72
|
-
defaultSelectRoot?: boolean
|
|
73
|
-
/**
|
|
74
|
-
* 有左侧树时,是否在页面挂载阶段立即请求 `tableAPI`。
|
|
75
|
-
* 默认 false:有树时不抢占首屏拉表,等树就绪后「自动选根」或用户点选节点再拉(与 `handleTreeSelect` / `autoSearch` 一致,二者不冲突)。
|
|
76
|
-
* 仅当接口在无树筛选入参时也有明确语义、需要先拉表时再设 `true`。
|
|
77
|
-
*/
|
|
78
|
-
fetchTableOnMount?: boolean
|
|
79
|
-
fieldNames?: {
|
|
80
|
-
children?: string
|
|
81
|
-
id?: string
|
|
82
|
-
label?: string
|
|
83
|
-
}
|
|
84
|
-
/**
|
|
85
|
-
* 通用:若返回 `true`,该节点**标题区域不可点选**(折展箭头仍可用);不限定数据结构,由业务自行判断。
|
|
86
|
-
* @param node 原始树节点
|
|
87
|
-
* @param ctx.depthFromRoot 从 1 起的根行深度(无业务字段时可用于回退逻辑)
|
|
88
|
-
*/
|
|
89
|
-
disableNode?: (node: any, ctx: { depthFromRoot: number }) => boolean
|
|
90
|
-
/** 树节点选中回调,返回选中的节点数据;`sameNodeReselect` 为 `deselect` 时再次点击当前节点会传 `null` */
|
|
91
|
-
onSelect?: (node: any) => void
|
|
92
|
-
/** 树数据经 `treeAPI` 拉取并规范化后触发(与左侧树展示同源) */
|
|
93
|
-
onTreeDataChange?: (nodes: any[]) => void
|
|
94
|
-
/**
|
|
95
|
-
* 再次点击已选中节点:`keep`(默认)仍触发选中;`deselect` 则取消选中(如权限管理需查全部)
|
|
96
|
-
*/
|
|
97
|
-
sameNodeReselect?: 'keep' | 'deselect'
|
|
98
|
-
searchField?: string
|
|
99
|
-
title?: string | React.ReactNode
|
|
100
|
-
unselectText?: string
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
/** 仅配置 treeAPI 时由 ListPageView 合并;页面可通过 tree 覆盖其中任意项 */
|
|
104
|
-
export const TABLE_VIEW_TREE_DEFAULTS: Pick<
|
|
105
|
-
TreeConfig,
|
|
106
|
-
| 'defaultExpandAll'
|
|
107
|
-
| 'defaultSelectRoot'
|
|
108
|
-
| 'fieldNames'
|
|
109
|
-
| 'searchField'
|
|
110
|
-
| 'autoSearch'
|
|
111
|
-
| 'unselectText'
|
|
112
|
-
> = {
|
|
113
|
-
autoSearch: true,
|
|
114
|
-
defaultExpandAll: true,
|
|
115
|
-
defaultSelectRoot: true,
|
|
116
|
-
fieldNames: { children: 'children', id: 'id', label: 'name' },
|
|
117
|
-
searchField: 'deptId',
|
|
118
|
-
unselectText: 'common.unselect_tree',
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
/** ListPageView 底部分页「每页条数」下拉默认选项;可在 createListPageConfig 中用 `pageSizeOptions` 覆盖 */
|
|
122
|
-
export const TABLE_VIEW_DEFAULT_PAGE_SIZE_OPTIONS = [
|
|
123
|
-
10, 20, 50, 100, 200, 500, 1000,
|
|
124
|
-
] as const
|
|
125
|
-
|
|
126
|
-
/** 列表行启用/禁用确认框文案(与 deleteConfirm 形参类似) */
|
|
127
|
-
export interface StatusToggleConfirm {
|
|
128
|
-
cancelText?: string
|
|
129
|
-
content?: string
|
|
130
|
-
contentFields?: string | string[]
|
|
131
|
-
okText?: string
|
|
132
|
-
title?: string
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
/**
|
|
136
|
-
* 列表行启用/禁用:`updateStatusAPI` 与 `deleteAPI` 同级;其余文案放此对象。
|
|
137
|
-
* 行状态字段默认 `status`,`enabledStatus`/`disabledStatus` 默认 1/0。
|
|
138
|
-
*/
|
|
139
|
-
export interface StatusToggleConfig {
|
|
140
|
-
dangerOnDisable?: boolean
|
|
141
|
-
disableConfirm?: StatusToggleConfirm
|
|
142
|
-
disableSuccessMessage?: string
|
|
143
|
-
disabledStatus?: number
|
|
144
|
-
enableConfirm?: StatusToggleConfirm
|
|
145
|
-
enableSuccessMessage?: string
|
|
146
|
-
enabledStatus?: number
|
|
147
|
-
statusField?: string
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
export interface PageConfig {
|
|
151
|
-
/** 单条删除成功后的扩展回调(如刷新左侧树、重置页面局部状态) */
|
|
152
|
-
afterDelete?: (record: any) => void | Promise<void>
|
|
153
|
-
/**
|
|
154
|
-
* `fetchTableData` 成功落表后调用(含首屏、搜索、分页、删除/启禁用后刷新等所有走拉表的路径)。
|
|
155
|
-
* 与 `afterDelete` / `afterStatusChange` 互补:后者不等待拉表完成;需跟列表数据同步时用本钩子。
|
|
156
|
-
*/
|
|
157
|
-
afterGetPageData?: () => void | Promise<void>
|
|
158
|
-
/** 单条启用/禁用成功后的扩展回调 */
|
|
159
|
-
afterStatusChange?: (record: any, nextStatus: number) => void | Promise<void>
|
|
160
|
-
batchDeleteAPI?: (ids: (string | number)[]) => Promise<unknown>
|
|
161
|
-
deleteConfirm?: {
|
|
162
|
-
cancelText?: string
|
|
163
|
-
content?: string
|
|
164
|
-
/** 删除确认文案插值字段,支持单个或多个,默认 name */
|
|
165
|
-
contentFields?: string | string[]
|
|
166
|
-
okText?: string
|
|
167
|
-
/** 成功提示:i18n key(含 `.`)或字面量;不传则用工厂默认 `common.table_view.delete_success` */
|
|
168
|
-
successMessage?: string
|
|
169
|
-
title?: string
|
|
170
|
-
}
|
|
171
|
-
detailAction?: {
|
|
172
|
-
detailType?: string
|
|
173
|
-
labelKey?: string
|
|
174
|
-
permission?: string
|
|
175
|
-
}
|
|
176
|
-
/**
|
|
177
|
-
* 打开详情弹窗时合并进 `detailModalRef.open(payload)` 的额外字段(如菜单 id→名称 map)
|
|
178
|
-
*/
|
|
179
|
-
getDetailModalOpenExtra?: () => Record<string, unknown>
|
|
180
|
-
exportAPI?: (params: Record<string, unknown>) => Promise<unknown>
|
|
181
|
-
fetchTableData?: () => Promise<void>
|
|
182
|
-
handleBatchDelete: () => void
|
|
183
|
-
handleDelete: (record: any) => Promise<boolean> | void
|
|
184
|
-
/** 执行启用/禁用请求(一般由工厂注入;勿与弹窗混用) */
|
|
185
|
-
handleUpdateStatus?: (
|
|
186
|
-
record: any,
|
|
187
|
-
nextStatus: number,
|
|
188
|
-
) => Promise<boolean | void>
|
|
189
|
-
handleExport: () => void
|
|
190
|
-
handleReset: () => void
|
|
191
|
-
handleSearch: () => void
|
|
192
|
-
handleTableChange: (
|
|
193
|
-
pagination: any,
|
|
194
|
-
filters?: any,
|
|
195
|
-
sorter?: any,
|
|
196
|
-
extra?: any,
|
|
197
|
-
) => void
|
|
198
|
-
initialSearchFormData?: Record<string, unknown>
|
|
199
|
-
/** 与 createListPageConfig / createSelectTableConfig 传入的 listQuery 一致(合并默认值后),便于调试 */
|
|
200
|
-
listQuery?: { order: 'asc' | 'desc'; sort: string }
|
|
201
|
-
loading: boolean
|
|
202
|
-
/** createListPageConfig 可选:接管工具栏「新增」;未传时由 ListPageView 按 submitAction 处理 */
|
|
203
|
-
onAdd?: (payload: { config?: any; type: 'add' }) => void
|
|
204
|
-
/** 触发删除确认流程(由 ListPageView 注入,等价于「点击删除」事件) */
|
|
205
|
-
onDelete?: (record: any) => void
|
|
206
|
-
/** 触发启用/禁用确认流程(由 ListPageView 注入) */
|
|
207
|
-
onStatusToggle?: (payload: { nextStatus: number; data: any }) => void
|
|
208
|
-
/** 表格/工具栏回调;含 type、data 等 */
|
|
209
|
-
onDetail?: (payload: {
|
|
210
|
-
config?: any
|
|
211
|
-
data?: any
|
|
212
|
-
type: string
|
|
213
|
-
}) => void
|
|
214
|
-
/** 编辑当前行(与新增无关;新增请用 onAdd) */
|
|
215
|
-
onEdit?: (payload: {
|
|
216
|
-
config?: any
|
|
217
|
-
data?: any
|
|
218
|
-
type: string
|
|
219
|
-
}) => void
|
|
220
|
-
pageInfo: {
|
|
221
|
-
listTitle?: string
|
|
222
|
-
/** 默认 `default`(40 / medium);仅如部门管理需 `small`(32)时显式传入 */
|
|
223
|
-
searchButtonSize?: SearchButtonSize
|
|
224
|
-
subTitle?: string
|
|
225
|
-
title?: string
|
|
226
|
-
}
|
|
227
|
-
/** 分页区「每页条数」下拉选项,默认见 `TABLE_VIEW_DEFAULT_PAGE_SIZE_OPTIONS` */
|
|
228
|
-
pageSizeOptions?: number[]
|
|
229
|
-
/** 分页状态:page 为从 1 开始的页码,与接口 `ListTableQueryParams.page` 一致 */
|
|
230
|
-
paginationData: {
|
|
231
|
-
page: number
|
|
232
|
-
pageSize: number
|
|
233
|
-
total: number
|
|
234
|
-
/** 切片分页:是否第一页 */
|
|
235
|
-
first?: boolean
|
|
236
|
-
/** 切片分页:是否最后一页 */
|
|
237
|
-
last?: boolean
|
|
238
|
-
}
|
|
239
|
-
patchSearchAndRefresh?: (patch: Record<string, unknown>) => void
|
|
240
|
-
replaceSearchAndRefresh?: (next: Record<string, unknown>) => void
|
|
241
|
-
searchFields?: SearchField[]
|
|
242
|
-
searchFormData: Record<string, any>
|
|
243
|
-
selectedRows: any[]
|
|
244
|
-
setPaginationData?: React.Dispatch<
|
|
245
|
-
React.SetStateAction<PageConfig['paginationData']>
|
|
246
|
-
>
|
|
247
|
-
setSearchFormData?: (values: Record<string, any>) => void
|
|
248
|
-
setSelectedRows?: (rows: any[]) => void
|
|
249
|
-
submitAction?: {
|
|
250
|
-
labelKey?: string
|
|
251
|
-
permission?: string
|
|
252
|
-
submitType?: string
|
|
253
|
-
/** 新增按钮禁用:左侧未选菜单时的 Tooltip i18n key */
|
|
254
|
-
addDisabledNoSelectionTooltipKey?: string
|
|
255
|
-
/** 新增按钮禁用:所选菜单非「顶级或二级」(`level` 不为 0 且不为 2)时的 Tooltip i18n key */
|
|
256
|
-
addDisabledMenuTooDeepTooltipKey?: string
|
|
257
|
-
}
|
|
258
|
-
/** 启用/禁用确认文案等,见 {@link StatusToggleConfig} */
|
|
259
|
-
statusToggle?: StatusToggleConfig
|
|
260
|
-
table?: {
|
|
261
|
-
operationWidth?: number
|
|
262
|
-
/** 横向滚动:false 关闭;不传默认 'max-content'(保持现有行为) */
|
|
263
|
-
scrollX?: any
|
|
264
|
-
/** 分页模式:默认 total 分页;'slice' 表示后端切片(仅首页/上一页/下一页) */
|
|
265
|
-
paginationMode?: string
|
|
266
|
-
showBatchDelete?: boolean
|
|
267
|
-
showExport?: boolean
|
|
268
|
-
showPagination?: boolean
|
|
269
|
-
showSelection?: boolean
|
|
270
|
-
showView?: boolean
|
|
271
|
-
}
|
|
272
|
-
/**
|
|
273
|
-
* 列表数据接口;入参由配置工厂内 `buildListTableParams` 组装(搜索区 + 树写入字段 + page + size + sort + order)
|
|
274
|
-
*/
|
|
275
|
-
tableAPI?: (params: ListTableQueryParams) => Promise<unknown>
|
|
276
|
-
tableData: any[]
|
|
277
|
-
/**
|
|
278
|
-
* 列表行状态切换(启用/禁用);入参由工厂组装 id、目标 status、整行 record。
|
|
279
|
-
*/
|
|
280
|
-
updateStatusAPI?: (params: {
|
|
281
|
-
id: string | number
|
|
282
|
-
record: any
|
|
283
|
-
status: number
|
|
284
|
-
}) => Promise<unknown>
|
|
285
|
-
tree?: TreeConfig
|
|
286
|
-
/** 左侧树数据:直接传接口函数即可,ListPageView 负责解析返回体(数组或 { data }) */
|
|
287
|
-
treeAPI?: () => Promise<unknown>
|
|
288
|
-
/** 自增可强制 ListPageView 重新请求树(如无 tableAPI 时保存菜单后刷新左侧树) */
|
|
289
|
-
treeReloadSignal?: number
|
|
290
|
-
}
|
|
291
|
-
|
|
292
|
-
/**
|
|
293
|
-
* 列表与选人表工厂共用的静态入参(拉表、搜索、分页、树等)。
|
|
294
|
-
* {@link SelectTableConfigFactoryInput} 与之同形,表示弹层侧仅需该子集。
|
|
295
|
-
*/
|
|
296
|
-
export interface BaseTableViewFactoryConfig {
|
|
297
|
-
initialSearchFormData?: Record<string, unknown>
|
|
298
|
-
listQuery?: ListQueryConfig
|
|
299
|
-
pageInfo?: Partial<{
|
|
300
|
-
listTitle?: string
|
|
301
|
-
/** 默认 `default`(40 / medium);仅如部门管理需 `small`(32)时显式传入 */
|
|
302
|
-
searchButtonSize?: SearchButtonSize
|
|
303
|
-
subTitle?: string
|
|
304
|
-
title?: string
|
|
305
|
-
}>
|
|
306
|
-
pageSizeOptions?: number[]
|
|
307
|
-
pagination?: {
|
|
308
|
-
page: number
|
|
309
|
-
pageSize: number
|
|
310
|
-
total: number
|
|
311
|
-
}
|
|
312
|
-
searchFields?: SearchField[]
|
|
313
|
-
table?: PageConfig['table']
|
|
314
|
-
tableAPI?: (params: ListTableQueryParams) => Promise<unknown>
|
|
315
|
-
tree?: TreeConfig
|
|
316
|
-
treeAPI?: () => Promise<unknown>
|
|
317
|
-
treeReloadSignal?: number
|
|
318
|
-
}
|
|
319
|
-
|
|
320
|
-
/** 仅 {@link createListPageConfig} 使用的静态入参(删除、导出、提交等整页能力) */
|
|
321
|
-
export interface ListPageFactoryExtensionConfig {
|
|
322
|
-
afterDelete?: PageConfig['afterDelete']
|
|
323
|
-
afterGetPageData?: PageConfig['afterGetPageData']
|
|
324
|
-
afterStatusChange?: PageConfig['afterStatusChange']
|
|
325
|
-
batchDeleteAPI?: PageConfig['batchDeleteAPI']
|
|
326
|
-
batchDeleteConfirm?: {
|
|
327
|
-
cancelText?: string
|
|
328
|
-
content?: string
|
|
329
|
-
okText?: string
|
|
330
|
-
successMessage?: string
|
|
331
|
-
title?: string
|
|
332
|
-
}
|
|
333
|
-
deleteAPI?: (id: string | number) => Promise<unknown>
|
|
334
|
-
deleteConfirm?: PageConfig['deleteConfirm']
|
|
335
|
-
detailAction?: PageConfig['detailAction']
|
|
336
|
-
exportAPI?: PageConfig['exportAPI']
|
|
337
|
-
getDetailModalOpenExtra?: PageConfig['getDetailModalOpenExtra']
|
|
338
|
-
statusToggle?: PageConfig['statusToggle']
|
|
339
|
-
onAdd?: PageConfig['onAdd']
|
|
340
|
-
onDetail?: PageConfig['onDetail']
|
|
341
|
-
onEdit?: PageConfig['onEdit']
|
|
342
|
-
submitAction?: PageConfig['submitAction']
|
|
343
|
-
updateStatusAPI?: PageConfig['updateStatusAPI']
|
|
344
|
-
}
|
|
345
|
-
|
|
346
|
-
/** 传给 createListPageConfig(customConfig):公共子集 + 列表扩展 */
|
|
347
|
-
export interface ListPageConfigFactoryInput
|
|
348
|
-
extends BaseTableViewFactoryConfig,
|
|
349
|
-
ListPageFactoryExtensionConfig {}
|
|
350
|
-
|
|
351
|
-
/** 传给 createSelectTableConfig(customConfig):与 {@link BaseTableViewFactoryConfig} 同形 */
|
|
352
|
-
export type SelectTableConfigFactoryInput = BaseTableViewFactoryConfig
|
|
353
|
-
|
|
354
|
-
export interface SubmitModalProps {
|
|
355
|
-
mode: 'add' | 'edit'
|
|
356
|
-
onCancel: () => void
|
|
357
|
-
onOk: (values: any) => void
|
|
358
|
-
open: boolean
|
|
359
|
-
record?: any
|
|
360
|
-
}
|
|
361
|
-
|
|
362
|
-
export interface DetailModalProps {
|
|
363
|
-
onClose: () => void
|
|
364
|
-
open: boolean
|
|
365
|
-
record?: any
|
|
366
|
-
}
|
|
367
|
-
|
|
368
|
-
/** 列表主体(表格 / 卡片等)渲染上下文,供 renderList 插槽使用 */
|
|
369
|
-
export interface ListRenderContext {
|
|
370
|
-
columns: ColumnsType<any>
|
|
371
|
-
/** 与默认表格单元格一致:尊重 column.render */
|
|
372
|
-
renderCell: (col: any, record: any, rowIndex: number) => React.ReactNode
|
|
373
|
-
tableData: any[]
|
|
374
|
-
t: TFunction
|
|
375
|
-
/** 左侧树存在时由 ListPageView 注入,与本次渲染的树数据同源(勿依赖 pageConfig.treeContext 副作用) */
|
|
376
|
-
tree?: TreeContext
|
|
377
|
-
}
|
|
378
|
-
|
|
379
|
-
/** 左侧树与列表联动时的运行时状态(与 `TreeConfig` 配置区分) */
|
|
380
|
-
export interface TreeContext {
|
|
381
|
-
selectedKey: string | number | null
|
|
382
|
-
selectedNode: any | null
|
|
383
|
-
treeData: any[]
|
|
384
|
-
treeDataLoaded: boolean
|
|
385
|
-
}
|
|
386
|
-
|
|
387
|
-
export interface ListPageViewProps {
|
|
388
|
-
/** 表格列定义(独立于 pageConfig,便于在组件内用 useMemo 管理依赖) */
|
|
389
|
-
columns?: ColumnsType<any>
|
|
390
|
-
/** 多为 ref + open() 的 forwardRef 弹窗,与 {@link DetailModalProps} 控制式并存 */
|
|
391
|
-
detailModalComponent?: React.ElementType
|
|
392
|
-
headerActions?:
|
|
393
|
-
| React.ReactNode
|
|
394
|
-
| ((ctx: { tree?: TreeContext }) => React.ReactNode)
|
|
395
|
-
pageConfig: Omit<PageConfig, 'columns'>
|
|
396
|
-
/** 自定义列表区域;不传则渲染默认表格 */
|
|
397
|
-
renderList?: (ctx: ListRenderContext) => React.ReactNode
|
|
398
|
-
/**
|
|
399
|
-
* 搜索区「搜索」按钮之后的扩展区(与重置、搜索同一右对齐组)。
|
|
400
|
-
* 函数形态可拿到 `searchButtonSize`,便于与 `pageInfo.searchButtonSize` 对齐样式。
|
|
401
|
-
*/
|
|
402
|
-
searchAreaExtra?:
|
|
403
|
-
| React.ReactNode
|
|
404
|
-
| ((ctx: {
|
|
405
|
-
searchButtonSize: SearchButtonSize
|
|
406
|
-
tree?: TreeContext
|
|
407
|
-
}) => React.ReactNode)
|
|
408
|
-
/** 替换整块筛选区域(与 searchFields 二选一,优先 searchSlot) */
|
|
409
|
-
searchSlot?: React.ReactNode
|
|
410
|
-
/** 为 true 时在标题前显示返回按钮,点击默认执行 useRouter().toIndex() */
|
|
411
|
-
showBackToList?: boolean
|
|
412
|
-
submitModalComponent?: React.ComponentType<SubmitModalProps>
|
|
413
|
-
/** 表格区域右上角工具栏(可访问树上下文与 searchButtonSize,与搜索区按钮规格对齐) */
|
|
414
|
-
tableActions?: (ctx: {
|
|
415
|
-
searchButtonSize: SearchButtonSize
|
|
416
|
-
tree?: TreeContext
|
|
417
|
-
}) => React.ReactNode
|
|
418
|
-
/** 紧跟在 `pageInfo.title` 翻译文案后的扩展(如动态括号说明) */
|
|
419
|
-
titleExtra?: ReactNode
|
|
420
|
-
/** 标题左侧图标,默认 ShieldUser(角色页) */
|
|
421
|
-
titleIcon?: React.ReactNode
|
|
422
|
-
}
|
|
423
|
-
|
|
424
|
-
/** 与配置工厂返回的 `pageConfig` 一致;弹框内选择场景用 createSelectTableConfig,可不配 submitAction / deleteAPI */
|
|
425
|
-
export type SelectTableViewConfig = Omit<PageConfig, 'columns'>
|
|
426
|
-
|
|
427
|
-
export interface SelectTableViewProps {
|
|
428
|
-
/** 表格列定义(独立于 pageConfig) */
|
|
429
|
-
columns?: ColumnsType<any>
|
|
430
|
-
/** 期望带左侧树(须配置 `pageConfig.treeAPI`);为 true 且无树时在 dev 下告警 */
|
|
431
|
-
expectTree?: boolean
|
|
432
|
-
/** 与 ListPageView 一致:替换整块筛选区 */
|
|
433
|
-
searchSlot?: ReactNode
|
|
434
|
-
/** 搜索区「搜索」右侧扩展 */
|
|
435
|
-
searchAreaExtra?:
|
|
436
|
-
| ReactNode
|
|
437
|
-
| ((ctx: {
|
|
438
|
-
searchButtonSize: SearchButtonSize
|
|
439
|
-
tree?: TreeContext
|
|
440
|
-
}) => ReactNode)
|
|
441
|
-
/** `'single'`:左侧单选 + 行点击选中;`'multiple'`:上行点选切换,下行已选 + 中间批量移除;`'none'`:纯展示,无选择交互 */
|
|
442
|
-
selectionMode: 'multiple' | 'single' | 'none'
|
|
443
|
-
/**
|
|
444
|
-
* 多选时主区域与「已选」面板的排布:
|
|
445
|
-
* - `vertical`(默认):上方候选表 + 下方已选表
|
|
446
|
-
* - `horizontal`:左侧候选表 + 右侧已选表
|
|
447
|
-
*/
|
|
448
|
-
layout?: 'horizontal' | 'vertical'
|
|
449
|
-
/** 横向布局时左侧(候选表)宽度,如 `420`、`'45%'`;不传则约一半 */
|
|
450
|
-
leftWidth?: number | string
|
|
451
|
-
/** 外层容器 class,嵌入 Modal 时可设 `max-h` 等 */
|
|
452
|
-
className?: string
|
|
453
|
-
/** 受控:单选为一条记录或 null;多选为数组 */
|
|
454
|
-
value?: any | any[] | null
|
|
455
|
-
defaultValue?: any | any[] | null
|
|
456
|
-
onChange?: (next: any | any[] | null) => void
|
|
457
|
-
/** 行主键字段,默认 `id`,不存在时尝试 `_id` */
|
|
458
|
-
rowKey?: string
|
|
459
|
-
pageConfig: SelectTableViewConfig
|
|
460
|
-
/** 多选时下方「已选」区域标题 i18n key */
|
|
461
|
-
selectedPanelTitleKey?: string
|
|
462
|
-
/** 中间移除按钮文案 i18n key */
|
|
463
|
-
removeSelectedLabelKey?: string
|
|
464
|
-
/** 多选时下方「已选」区域列定义;不传则沿用上方 columns */
|
|
465
|
-
selectedPanelColumns?: ColumnsType<any>
|
|
466
|
-
/** 多选时是否展示「已选」面板(默认 true)。关闭后仍可多选,但不会渲染第二张表。 */
|
|
467
|
-
showSelectedPanel?: boolean
|
|
468
|
-
/** 左侧树:是否显示勾选框(与选中查询分离) */
|
|
469
|
-
treeCheckable?: boolean
|
|
470
|
-
/** 左侧树:勾选 keys(受控) */
|
|
471
|
-
treeCheckedKeys?: Set<string | number> | ReadonlyArray<string | number>
|
|
472
|
-
/** 左侧树:勾选回调 */
|
|
473
|
-
onTreeCheck?: (key: string | number, checked: boolean, node: any) => void
|
|
474
|
-
/** 左侧树:自定义节点文案(默认走 CxTree 内置 label 逻辑) */
|
|
475
|
-
treeRenderLabel?: (node: any) => ReactNode
|
|
476
|
-
/** 是否移除容器内边距(默认 false),在弹框内嵌入 Tabs 时可设为 true */
|
|
477
|
-
noPadding?: boolean
|
|
478
|
-
}
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 将树接口返回值规范为根节点数组(供 TreeSidebar / TreeSelect 使用)。
|
|
3
|
-
*
|
|
4
|
-
* 兼容:
|
|
5
|
-
* - 根即为数组;
|
|
6
|
-
* - 标准包裹 `{ data: TreeNode[] }`;
|
|
7
|
-
* - 单根节点 `{ data: { id, name, children?, ... } }`(后端常见「虚拟根」一条);
|
|
8
|
-
* - 双层 `{ data: { data: TreeNode[] } }`。
|
|
9
|
-
*/
|
|
10
|
-
function isSingleTreeRoot(d: unknown): d is Record<string, unknown> {
|
|
11
|
-
if (!d || typeof d !== 'object' || Array.isArray(d)) return false
|
|
12
|
-
const o = d as Record<string, unknown>
|
|
13
|
-
if (!('id' in o)) return false
|
|
14
|
-
if ('children' in o) return true
|
|
15
|
-
if (typeof o.name === 'string') return true
|
|
16
|
-
if (typeof o.title === 'string') return true
|
|
17
|
-
if (typeof o.label === 'string') return true
|
|
18
|
-
return false
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
export function normalizeTreeAPIResult(raw: unknown): any[] {
|
|
22
|
-
if (Array.isArray(raw)) return raw
|
|
23
|
-
|
|
24
|
-
if (raw && typeof raw === 'object' && 'data' in raw) {
|
|
25
|
-
const d = (raw as { data: unknown }).data
|
|
26
|
-
|
|
27
|
-
if (Array.isArray(d)) return d
|
|
28
|
-
if (isSingleTreeRoot(d)) return [d]
|
|
29
|
-
|
|
30
|
-
if (d && typeof d === 'object' && d !== null && 'data' in d) {
|
|
31
|
-
const inner = (d as { data: unknown }).data
|
|
32
|
-
if (Array.isArray(inner)) return inner
|
|
33
|
-
if (isSingleTreeRoot(inner)) return [inner]
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
return []
|
|
38
|
-
}
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 为树节点打上 `selectable: false`(供 {@link CxTree}),由 `disableNode` 判定哪些节点标题不可点选。
|
|
3
|
-
*/
|
|
4
|
-
export function annotateTreeDisableNode(
|
|
5
|
-
nodes: any[] | undefined,
|
|
6
|
-
idKey: string,
|
|
7
|
-
childrenKey: string,
|
|
8
|
-
disableNode: (node: any, ctx: { depthFromRoot: number }) => boolean,
|
|
9
|
-
depthFromRoot = 1,
|
|
10
|
-
): any[] {
|
|
11
|
-
if (!nodes?.length) return []
|
|
12
|
-
return nodes.map((node) => {
|
|
13
|
-
const rawChildren = node[childrenKey] as any[] | undefined
|
|
14
|
-
const nextChildren = rawChildren?.length
|
|
15
|
-
? annotateTreeDisableNode(
|
|
16
|
-
rawChildren,
|
|
17
|
-
idKey,
|
|
18
|
-
childrenKey,
|
|
19
|
-
disableNode,
|
|
20
|
-
depthFromRoot + 1,
|
|
21
|
-
)
|
|
22
|
-
: rawChildren
|
|
23
|
-
const titleDisabled = disableNode(node, { depthFromRoot })
|
|
24
|
-
const selectable = !titleDisabled
|
|
25
|
-
return {
|
|
26
|
-
...node,
|
|
27
|
-
selectable,
|
|
28
|
-
[childrenKey]: nextChildren,
|
|
29
|
-
}
|
|
30
|
-
})
|
|
31
|
-
}
|
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
import { CxTree } from '@cx-ui'
|
|
2
|
-
import React from 'react'
|
|
3
|
-
import { useTranslation } from 'react-i18next'
|
|
4
|
-
import type { TreeConfig } from './table-view.types'
|
|
5
|
-
|
|
6
|
-
interface TreeSidebarProps {
|
|
7
|
-
expandedKeys: Set<string | number>
|
|
8
|
-
onSelect: (key: any) => void
|
|
9
|
-
onToggleExpand: (key: any, e?: React.MouseEvent) => void
|
|
10
|
-
selectedKey: string | number | null
|
|
11
|
-
tree: TreeConfig
|
|
12
|
-
treeData: any[]
|
|
13
|
-
checkable?: boolean
|
|
14
|
-
checkedKeys?: Set<string | number> | ReadonlyArray<string | number>
|
|
15
|
-
onCheck?: (key: string | number, checked: boolean, node: any) => void
|
|
16
|
-
renderLabel?: (node: any) => React.ReactNode
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
export function TreeSidebar({
|
|
20
|
-
expandedKeys,
|
|
21
|
-
onSelect,
|
|
22
|
-
onToggleExpand,
|
|
23
|
-
selectedKey,
|
|
24
|
-
tree,
|
|
25
|
-
treeData,
|
|
26
|
-
checkable = false,
|
|
27
|
-
checkedKeys,
|
|
28
|
-
onCheck,
|
|
29
|
-
renderLabel,
|
|
30
|
-
}: TreeSidebarProps) {
|
|
31
|
-
const { t } = useTranslation()
|
|
32
|
-
const idKey = tree.fieldNames?.id ?? 'id'
|
|
33
|
-
const childrenKey = tree.fieldNames?.children ?? 'children'
|
|
34
|
-
|
|
35
|
-
const renderTreePane = () => {
|
|
36
|
-
if (!tree) return null
|
|
37
|
-
|
|
38
|
-
return (
|
|
39
|
-
<CxTree
|
|
40
|
-
treeData={treeData}
|
|
41
|
-
fieldNames={{ id: idKey, children: childrenKey }}
|
|
42
|
-
expandedKeys={expandedKeys}
|
|
43
|
-
selectedKey={selectedKey}
|
|
44
|
-
sameNodeReselect={tree.sameNodeReselect ?? 'keep'}
|
|
45
|
-
checkable={checkable}
|
|
46
|
-
checkedKeys={checkedKeys}
|
|
47
|
-
onCheck={onCheck}
|
|
48
|
-
renderLabel={renderLabel}
|
|
49
|
-
onSelect={(key) => {
|
|
50
|
-
onSelect(key)
|
|
51
|
-
}}
|
|
52
|
-
onToggleExpand={onToggleExpand}
|
|
53
|
-
emptyText={t('common.no_data')}
|
|
54
|
-
/>
|
|
55
|
-
)
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
return (
|
|
59
|
-
<div className="w-80 shrink-0 bg-white dark:bg-gray-800 rounded-xl shadow-sm border border-gray-200 dark:border-gray-700 flex flex-col overflow-hidden self-start h-full">
|
|
60
|
-
{tree.title && (
|
|
61
|
-
<div className="px-4 py-3 border-b border-gray-200 dark:border-gray-700 bg-gray-50 dark:bg-gray-700/50 flex items-center justify-between gap-2">
|
|
62
|
-
{typeof tree.title === 'string' ? (
|
|
63
|
-
<h2 className="font-semibold text-gray-700 dark:text-gray-300 text-sm uppercase tracking-wider line-clamp-1">
|
|
64
|
-
{t(tree.title)}
|
|
65
|
-
</h2>
|
|
66
|
-
) : (
|
|
67
|
-
tree.title
|
|
68
|
-
)}
|
|
69
|
-
</div>
|
|
70
|
-
)}
|
|
71
|
-
<div className="flex-1 min-h-0 overflow-y-auto custom-scrollbar p-2">{renderTreePane()}</div>
|
|
72
|
-
</div>
|
|
73
|
-
)
|
|
74
|
-
}
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
import './styles/select-table-view.less';
|
|
3
|
-
|
|
4
|
-
import type { SelectTableViewProps } from './components/table-view.types';
|
|
5
|
-
import ListPageView from './list-page-view';
|
|
6
|
-
import SelectTableView from './select-table-view';
|
|
7
|
-
|
|
8
|
-
export default ListPageView
|
|
9
|
-
export {
|
|
10
|
-
keysEqual
|
|
11
|
-
} from '@/components/common/lite-table';
|
|
12
|
-
export {
|
|
13
|
-
createListPageConfig,
|
|
14
|
-
createSelectTableConfig
|
|
15
|
-
} from './components/table-view-config';
|
|
16
|
-
export * from './components/table-view.types';
|
|
17
|
-
export { default as SelectTable, default as SelectTablePage } from './select-table-view';
|
|
18
|
-
export { ListPageView, SelectTableView };
|
|
19
|
-
|
|
20
|
-
export function SelectTableSingle(
|
|
21
|
-
props: Omit<SelectTableViewProps, 'expectTree' | 'selectionMode'>,
|
|
22
|
-
) {
|
|
23
|
-
return <SelectTableView {...props} selectionMode="single" />
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
export function SelectTableMulti(
|
|
27
|
-
props: Omit<SelectTableViewProps, 'expectTree' | 'selectionMode'>,
|
|
28
|
-
) {
|
|
29
|
-
return <SelectTableView {...props} selectionMode="multiple" />
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
SelectTableMulti.Horizontal = function SelectTableMultiHorizontal(
|
|
33
|
-
props: Omit<SelectTableViewProps, 'expectTree' | 'selectionMode'> & { leftWidth?: string | number },
|
|
34
|
-
) {
|
|
35
|
-
return <SelectTableView {...props} selectionMode="multiple" layout="horizontal" />
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
export function TreeSelectTableSingle(
|
|
39
|
-
props: Omit<SelectTableViewProps, 'expectTree' | 'selectionMode'>,
|
|
40
|
-
) {
|
|
41
|
-
return <SelectTableView {...props} expectTree selectionMode="single" />
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
export function TreeSelectTableMulti(
|
|
45
|
-
props: Omit<SelectTableViewProps, 'expectTree' | 'selectionMode'>,
|
|
46
|
-
) {
|
|
47
|
-
return <SelectTableView {...props} expectTree selectionMode="multiple" />
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
/** 带树的纯展示模式:有树、有表格、无选择交互(用于详情查看) */
|
|
51
|
-
export function TreeSelectTableDisplay(
|
|
52
|
-
props: Omit<SelectTableViewProps, 'expectTree' | 'selectionMode'> & { leftWidth?: string | number; noPadding?: boolean },
|
|
53
|
-
) {
|
|
54
|
-
return <SelectTableView {...props} expectTree selectionMode="none" />
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
TreeSelectTableMulti.Horizontal = function TreeSelectTableMultiHorizontal(
|
|
58
|
-
props: Omit<SelectTableViewProps, 'expectTree' | 'selectionMode'> & { leftWidth?: string | number },
|
|
59
|
-
) {
|
|
60
|
-
return <SelectTableView {...props} expectTree selectionMode="multiple" layout="horizontal" />
|
|
61
|
-
}
|