cx-chat 0.0.2 → 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.
Files changed (406) hide show
  1. package/dist/cx-chat.css +1 -0
  2. package/dist/cx-chat.es.js +97326 -0
  3. package/dist/cx-chat.umd.js +734 -0
  4. package/package.json +21 -1
  5. package/.cursor/rules/i18n-cn-gloss-comments.mdc +0 -31
  6. package/.cursor/rules/list-page-view-pageconfig.mdc +0 -32
  7. package/.cursor/rules/no-over-defensive-programming.mdc +0 -90
  8. package/.cursor/rules/requirement-description-for-agent.mdc +0 -33
  9. package/.cursor/rules/use-showToast-not-antd-message.mdc +0 -28
  10. package/.docker/Dockerfile +0 -7
  11. package/.env +0 -9
  12. package/.env.development +0 -7
  13. package/.env.production +0 -7
  14. package/.gitlab-ci/docker-build.yaml +0 -28
  15. package/.gitlab-ci/k8s-deploy-dev-master.yaml +0 -42
  16. package/.gitlab-ci/npm-build.yaml +0 -17
  17. package/.gitlab-ci.yml +0 -8
  18. package/.k8s/0-namespace.yaml +0 -6
  19. package/.k8s/1-configmap-web.yaml +0 -7
  20. package/.k8s/1-nginx-conf-dev.yaml +0 -110
  21. package/.k8s/2-deployment.yaml +0 -27
  22. package/.k8s/3-service.yaml +0 -16
  23. package/.k8s/4-ingress-dev.yaml +0 -30
  24. package/.lingma/rules/use-showToast-not-antd-message.md +0 -34
  25. package/.nginx/nginx.conf +0 -52
  26. package/.prettierrc +0 -9
  27. package/eslint.config.js +0 -32
  28. package/index.html +0 -13
  29. package/postcss.config.js +0 -6
  30. package/src/App.tsx +0 -96
  31. package/src/_doc/0.docs-overview.md +0 -28
  32. package/src/_doc/cx-ui/0.docs-overview.md +0 -30
  33. package/src/_doc/cx-ui/comp.1.cx-ui-overview.md +0 -82
  34. package/src/_doc/cx-ui/comp.2.cx-modal.md +0 -82
  35. package/src/_doc/cx-ui/comp.3.cx-button.md +0 -89
  36. package/src/_doc/cx-ui/comp.4.cx-form.md +0 -72
  37. package/src/_doc/cx-ui/comp.5.cx-fields.md +0 -76
  38. package/src/_doc/cx-ui/comp.6.cx-tag.md +0 -57
  39. package/src/_doc/cx-ui/comp.7.cx-empty-state.md +0 -29
  40. package/src/_doc/meta/0.docs-overview.md +0 -24
  41. package/src/_doc/meta/comp.1.enum-runtime.md +0 -33
  42. package/src/_doc/meta/comp.2.dict-runtime.md +0 -39
  43. package/src/_doc/router/0.docs-overview.md +0 -14
  44. package/src/_doc/router/guide.1.menu-component-config.md +0 -181
  45. package/src/_doc/router/guide.2.router-auto-registration.md +0 -114
  46. package/src/_doc/table-view/0.docs-overview.md +0 -30
  47. package/src/_doc/table-view/comp.1.table-view.md +0 -542
  48. package/src/_doc/table-view/props.1.create-table-view-config.md +0 -193
  49. package/src/_doc/table-view/props.2.table-view-search-fields.md +0 -106
  50. package/src/api/_mock/README.md +0 -340
  51. package/src/api/_mock/api.ts +0 -1642
  52. package/src/api/_mock/bundle-shim.ts +0 -16
  53. package/src/api/_mock/handler-shim.ts +0 -6
  54. package/src/api/_mock/handler.ts +0 -458
  55. package/src/api/_mock/index.ts +0 -711
  56. package/src/api/_mock/interceptor.ts +0 -15
  57. package/src/api/_mock/mod.ts +0 -12
  58. package/src/api/_mock/utils.ts +0 -65
  59. package/src/api/base/memory.js +0 -24
  60. package/src/api/chat.js +0 -210
  61. package/src/api/common/auth.js +0 -70
  62. package/src/api/menus/business-rules.js +0 -76
  63. package/src/api/menus/feedback.js +0 -102
  64. package/src/api/menus/knowledge.js +0 -159
  65. package/src/api/menus/model-metadata/manage.js +0 -70
  66. package/src/api/menus/model-metadata/role.js +0 -50
  67. package/src/api/menus/model-metadata/training-detail-mock-data.js +0 -569
  68. package/src/api/menus/model-metadata/training.js +0 -28
  69. package/src/api/menus/skill.js +0 -40
  70. package/src/api/system/agent-config.js +0 -16
  71. package/src/api/system/department.js +0 -94
  72. package/src/api/system/dict.js +0 -86
  73. package/src/api/system/menu.js +0 -37
  74. package/src/api/system/permission.js +0 -26
  75. package/src/api/system/role.js +0 -34
  76. package/src/api/system/sys-config.js +0 -16
  77. package/src/api/system/sys-log.js +0 -17
  78. package/src/api/system/user.js +0 -75
  79. package/src/api/upload.js +0 -39
  80. package/src/assets/react.svg +0 -1
  81. package/src/components/auth/current-user-avatar.tsx +0 -77
  82. package/src/components/common/code-view.tsx +0 -149
  83. package/src/components/common/detail-link.tsx +0 -67
  84. package/src/components/common/error-boundary.tsx +0 -98
  85. package/src/components/common/language-switcher.tsx +0 -91
  86. package/src/components/common/lite-table/index.tsx +0 -135
  87. package/src/components/common/md-editor.tsx +0 -126
  88. package/src/components/common/modal/confirm-dialog.tsx +0 -113
  89. package/src/components/common/modal/dep-user-select-multi.tsx +0 -324
  90. package/src/components/common/modal/dep-user-select.tsx +0 -249
  91. package/src/components/common/modal/user-select-multi.tsx +0 -266
  92. package/src/components/common/pagination.tsx +0 -472
  93. package/src/components/common/path.tsx +0 -175
  94. package/src/components/common/system-logo-mark.tsx +0 -48
  95. package/src/components/cx-ui/button/index.less +0 -208
  96. package/src/components/cx-ui/button/index.tsx +0 -611
  97. package/src/components/cx-ui/checkbox/index.tsx +0 -78
  98. package/src/components/cx-ui/date-picker/index.less +0 -17
  99. package/src/components/cx-ui/date-picker/index.tsx +0 -193
  100. package/src/components/cx-ui/drawer/index.tsx +0 -47
  101. package/src/components/cx-ui/empty-state/index.tsx +0 -20
  102. package/src/components/cx-ui/floating-shell/CxFloatingShell.tsx +0 -89
  103. package/src/components/cx-ui/floating-shell/cx-floating-shell.less +0 -283
  104. package/src/components/cx-ui/floating-shell/has-floating-value.ts +0 -41
  105. package/src/components/cx-ui/form/CxForm.tsx +0 -15
  106. package/src/components/cx-ui/form/index.tsx +0 -20
  107. package/src/components/cx-ui/form-item/index.less +0 -26
  108. package/src/components/cx-ui/form-item/index.tsx +0 -36
  109. package/src/components/cx-ui/index.ts +0 -70
  110. package/src/components/cx-ui/input/auto-complete.tsx +0 -134
  111. package/src/components/cx-ui/input/index.tsx +0 -259
  112. package/src/components/cx-ui/input-number/index.jsx +0 -66
  113. package/src/components/cx-ui/modal/index.jsx +0 -212
  114. package/src/components/cx-ui/modal/index.less +0 -144
  115. package/src/components/cx-ui/modal/useCxModal.ts +0 -125
  116. package/src/components/cx-ui/multi-select/index.jsx +0 -74
  117. package/src/components/cx-ui/multi-select/index.less +0 -40
  118. package/src/components/cx-ui/multi-select/index2.tsx +0 -361
  119. package/src/components/cx-ui/radio/index.tsx +0 -33
  120. package/src/components/cx-ui/range-picker/index.less +0 -65
  121. package/src/components/cx-ui/range-picker/index.tsx +0 -219
  122. package/src/components/cx-ui/select/index.less +0 -34
  123. package/src/components/cx-ui/select/index.tsx +0 -196
  124. package/src/components/cx-ui/skeleton/index.tsx +0 -12
  125. package/src/components/cx-ui/steps/index.tsx +0 -14
  126. package/src/components/cx-ui/styles/_tokens.less +0 -79
  127. package/src/components/cx-ui/styles/index.less +0 -246
  128. package/src/components/cx-ui/switch/index.less +0 -106
  129. package/src/components/cx-ui/switch/index.tsx +0 -120
  130. package/src/components/cx-ui/table/index.less +0 -160
  131. package/src/components/cx-ui/table/index.tsx +0 -152
  132. package/src/components/cx-ui/tabs/index.less +0 -15
  133. package/src/components/cx-ui/tabs/index.tsx +0 -34
  134. package/src/components/cx-ui/tag/index.less +0 -51
  135. package/src/components/cx-ui/tag/index.tsx +0 -140
  136. package/src/components/cx-ui/timeline/index.tsx +0 -14
  137. package/src/components/cx-ui/tooltip/index.tsx +0 -67
  138. package/src/components/cx-ui/tree/index.tsx +0 -193
  139. package/src/components/cx-ui/tree-select/index.jsx +0 -91
  140. package/src/components/cx-ui/tree-select/index.less +0 -27
  141. package/src/components/cx-ui/upload-file/index.less +0 -223
  142. package/src/components/cx-ui/upload-file/index.tsx +0 -640
  143. package/src/components/cx-ui/upload-img/index.tsx +0 -291
  144. package/src/components/layout/components/Header.tsx +0 -216
  145. package/src/components/layout/components/Sidebar.tsx +0 -717
  146. package/src/components/layout/index.tsx +0 -95
  147. package/src/components/table-view/components/search-area.tsx +0 -411
  148. package/src/components/table-view/components/table-view-config.tsx +0 -528
  149. package/src/components/table-view/components/table-view.types.ts +0 -478
  150. package/src/components/table-view/components/tree-api-normalize.ts +0 -38
  151. package/src/components/table-view/components/tree-data-annotate.ts +0 -31
  152. package/src/components/table-view/components/tree-sidebar.tsx +0 -74
  153. package/src/components/table-view/index.tsx +0 -61
  154. package/src/components/table-view/list-page-view.tsx +0 -1049
  155. package/src/components/table-view/select-table-view.tsx +0 -1094
  156. package/src/components/table-view/styles/select-table-view.less +0 -51
  157. package/src/config/default-system-name.ts +0 -9
  158. package/src/config/system.ts +0 -165
  159. package/src/constants/countryCodes.ts +0 -3
  160. package/src/contexts/AuthContext.tsx +0 -256
  161. package/src/contexts/ChatContext.tsx +0 -839
  162. package/src/contexts/MenuContext.tsx +0 -62
  163. package/src/contexts/ToastContext.tsx +0 -181
  164. package/src/hooks/useCopyToClipboard.ts +0 -47
  165. package/src/hooks/useModalSubmit.ts +0 -104
  166. package/src/hooks/useRouter.ts +0 -240
  167. package/src/hooks/useStepForm.ts +0 -46
  168. package/src/hooks/useStickyHeader.ts +0 -42
  169. package/src/hooks/useThreadActions.ts +0 -105
  170. package/src/hooks/useUserPreferences.ts +0 -101
  171. package/src/http/axios.js +0 -372
  172. package/src/http/mock.interceptor.ts +0 -9
  173. package/src/http/obfuscationKey.ts +0 -41
  174. package/src/i18n.ts +0 -60
  175. package/src/index.js +0 -1
  176. package/src/index.less +0 -169
  177. package/src/locales/en/auth.ts +0 -70
  178. package/src/locales/en/base/memory.ts +0 -28
  179. package/src/locales/en/base/settings.ts +0 -41
  180. package/src/locales/en/chat.ts +0 -40
  181. package/src/locales/en/common.ts +0 -173
  182. package/src/locales/en/enum.ts +0 -27
  183. package/src/locales/en/menus/business-rules.ts +0 -48
  184. package/src/locales/en/menus/feedback.ts +0 -62
  185. package/src/locales/en/menus/knowledge.ts +0 -120
  186. package/src/locales/en/menus/model-metadata/index.ts +0 -10
  187. package/src/locales/en/menus/model-metadata/manage.ts +0 -151
  188. package/src/locales/en/menus/model-metadata/role.ts +0 -48
  189. package/src/locales/en/menus/model-metadata/training.ts +0 -65
  190. package/src/locales/en/menus/skill.ts +0 -34
  191. package/src/locales/en/system/agent-config.ts +0 -34
  192. package/src/locales/en/system/department.ts +0 -68
  193. package/src/locales/en/system/dict.ts +0 -44
  194. package/src/locales/en/system/menu.ts +0 -45
  195. package/src/locales/en/system/permission.ts +0 -89
  196. package/src/locales/en/system/role.ts +0 -25
  197. package/src/locales/en/system/sys-config.ts +0 -33
  198. package/src/locales/en/system/sys-log.ts +0 -38
  199. package/src/locales/en/system/user.ts +0 -113
  200. package/src/locales/en.ts +0 -68
  201. package/src/locales/zh/auth.ts +0 -70
  202. package/src/locales/zh/base/memory.ts +0 -29
  203. package/src/locales/zh/base/settings.ts +0 -41
  204. package/src/locales/zh/chat.ts +0 -47
  205. package/src/locales/zh/common.ts +0 -178
  206. package/src/locales/zh/enum.ts +0 -28
  207. package/src/locales/zh/menus/business-rules.ts +0 -47
  208. package/src/locales/zh/menus/feedback.ts +0 -62
  209. package/src/locales/zh/menus/knowledge.ts +0 -117
  210. package/src/locales/zh/menus/model-metadata/index.ts +0 -10
  211. package/src/locales/zh/menus/model-metadata/manage.ts +0 -151
  212. package/src/locales/zh/menus/model-metadata/role.ts +0 -47
  213. package/src/locales/zh/menus/model-metadata/training.ts +0 -64
  214. package/src/locales/zh/menus/skill.ts +0 -34
  215. package/src/locales/zh/system/agent-config.ts +0 -33
  216. package/src/locales/zh/system/department.ts +0 -69
  217. package/src/locales/zh/system/dict.ts +0 -44
  218. package/src/locales/zh/system/menu.ts +0 -47
  219. package/src/locales/zh/system/permission.ts +0 -94
  220. package/src/locales/zh/system/role.ts +0 -25
  221. package/src/locales/zh/system/sys-config.ts +0 -32
  222. package/src/locales/zh/system/sys-log.ts +0 -38
  223. package/src/locales/zh/system/user.ts +0 -114
  224. package/src/locales/zh.ts +0 -67
  225. package/src/main.tsx +0 -50
  226. package/src/meta/const/index.ts +0 -40
  227. package/src/meta/index-dict.ts +0 -56
  228. package/src/meta/index-enum.ts +0 -95
  229. package/src/meta/index.ts +0 -14
  230. package/src/meta/module/dict-data/runtime.ts +0 -199
  231. package/src/meta/module/dict-data/types.ts +0 -17
  232. package/src/meta/module/enum-data/runtime.ts +0 -75
  233. package/src/meta/module/enum-data/types.ts +0 -18
  234. package/src/router/index.tsx +0 -312
  235. package/src/styles/AntdThemeProvider.tsx +0 -40
  236. package/src/styles/antd-theme.ts +0 -20
  237. package/src/styles/global.less +0 -107
  238. package/src/styles/variable.less +0 -103
  239. package/src/types/feedback.ts +0 -43
  240. package/src/types/index.ts +0 -85
  241. package/src/types/menu.ts +0 -43
  242. package/src/utils/aesUtil.ts +0 -123
  243. package/src/utils/chatUtils.ts +0 -524
  244. package/src/utils/cn.ts +0 -6
  245. package/src/utils/crypto.ts +0 -164
  246. package/src/utils/date.ts +0 -72
  247. package/src/utils/file-icons.tsx +0 -79
  248. package/src/utils/index.ts +0 -168
  249. package/src/utils/markdown-math-plugins.ts +0 -21
  250. package/src/utils/menuI18n.ts +0 -305
  251. package/src/utils/menuRouteRegistry.ts +0 -78
  252. package/src/utils/permission-crud.ts +0 -147
  253. package/src/utils/routeConfig.ts +0 -350
  254. package/src/utils/storage.ts +0 -135
  255. package/src/utils/toastBridge.ts +0 -26
  256. package/src/utils/url.ts +0 -38
  257. package/src/utils/validation.ts +0 -16
  258. package/src/views/auth/auth-code/index.less +0 -169
  259. package/src/views/auth/auth-code/index.module.less +0 -174
  260. package/src/views/auth/auth-code/index.tsx +0 -233
  261. package/src/views/auth/login.tsx +0 -498
  262. package/src/views/auth/register.tsx +0 -388
  263. package/src/views/base/memory/index.tsx +0 -136
  264. package/src/views/base/memory/modal/detail-modal.tsx +0 -89
  265. package/src/views/base/memory/modal/submit-modal.tsx +0 -134
  266. package/src/views/base/settings/index.tsx +0 -657
  267. package/src/views/chat/chat.less +0 -323
  268. package/src/views/chat/components/chat-input.tsx +0 -298
  269. package/src/views/chat/components/header-thread-title.tsx +0 -210
  270. package/src/views/chat/components/message-list/content-answer.tsx +0 -100
  271. package/src/views/chat/components/message-list/content-question.tsx +0 -18
  272. package/src/views/chat/components/message-list/index.tsx +0 -520
  273. package/src/views/chat/components/message-list/message-item.tsx +0 -199
  274. package/src/views/chat/components/message-list/preparation-demo-items.ts +0 -147
  275. package/src/views/chat/components/message-list/preparation-steps.tsx +0 -506
  276. package/src/views/chat/components/message-list/suggestion-list.tsx +0 -36
  277. package/src/views/chat/components/message-list/thinking-process.tsx +0 -49
  278. package/src/views/chat/components/message-list/toolbar.tsx +0 -224
  279. package/src/views/chat/components/message-list/use-message-list-scroll.ts +0 -214
  280. package/src/views/chat/components/references-knowledge/context.tsx +0 -57
  281. package/src/views/chat/components/references-knowledge/index.ts +0 -9
  282. package/src/views/chat/components/references-knowledge/modal/knowledge-detail-drawer.tsx +0 -556
  283. package/src/views/chat/components/references-knowledge/modal/knowledge-doc-detail-drawer.tsx +0 -529
  284. package/src/views/chat/components/references-knowledge/panel.tsx +0 -115
  285. package/src/views/chat/hooks/use-chat-common.ts +0 -19
  286. package/src/views/chat/index-session.tsx +0 -647
  287. package/src/views/chat/index.tsx +0 -127
  288. package/src/views/page-error/401.tsx +0 -56
  289. package/src/views/page-error/404.tsx +0 -56
  290. package/src/views/page-menus/business-rules/index.tsx +0 -376
  291. package/src/views/page-menus/business-rules/modal/detail-modal.tsx +0 -186
  292. package/src/views/page-menus/business-rules/modal/scope-modal.tsx +0 -272
  293. package/src/views/page-menus/business-rules/modal/submit-modal.tsx +0 -142
  294. package/src/views/page-menus/feedback/components/feedback-dataset-list.tsx +0 -471
  295. package/src/views/page-menus/feedback/index.tsx +0 -166
  296. package/src/views/page-menus/feedback/modal/export-feedback-modal.tsx +0 -367
  297. package/src/views/page-menus/knowledge/components/doc-editor-by-type.tsx +0 -32
  298. package/src/views/page-menus/knowledge/components/doc-editor-type-file.tsx +0 -330
  299. package/src/views/page-menus/knowledge/detail.tsx +0 -600
  300. package/src/views/page-menus/knowledge/index.tsx +0 -337
  301. package/src/views/page-menus/knowledge/modal/detail-modal.tsx +0 -618
  302. package/src/views/page-menus/knowledge/modal/doc-detail-modal.tsx +0 -550
  303. package/src/views/page-menus/knowledge/modal/doc-parse.ts +0 -99
  304. package/src/views/page-menus/knowledge/modal/doc-submit-modal.tsx +0 -349
  305. package/src/views/page-menus/knowledge/modal/doc-type-picker-modal.tsx +0 -88
  306. package/src/views/page-menus/knowledge/modal/knowledge-user-select-modal.tsx +0 -283
  307. package/src/views/page-menus/knowledge/modal/submit-modal.tsx +0 -179
  308. package/src/views/page-menus/model-metadata/manage/components/metadata-detail-schema-tab.tsx +0 -114
  309. package/src/views/page-menus/model-metadata/manage/components/step1-basic-info.tsx +0 -232
  310. package/src/views/page-menus/model-metadata/manage/components/step2-schema.tsx +0 -316
  311. package/src/views/page-menus/model-metadata/manage/components/step3-permissions.tsx +0 -134
  312. package/src/views/page-menus/model-metadata/manage/components/step4-documents.tsx +0 -134
  313. package/src/views/page-menus/model-metadata/manage/components/step5-example-sql.tsx +0 -101
  314. package/src/views/page-menus/model-metadata/manage/components/submit-add.tsx +0 -338
  315. package/src/views/page-menus/model-metadata/manage/components/submit-edit.tsx +0 -276
  316. package/src/views/page-menus/model-metadata/manage/detail.tsx +0 -298
  317. package/src/views/page-menus/model-metadata/manage/hooks/model-metadata-submit-shared.ts +0 -113
  318. package/src/views/page-menus/model-metadata/manage/hooks/use-model-metadata-item-state.ts +0 -20
  319. package/src/views/page-menus/model-metadata/manage/index.tsx +0 -304
  320. package/src/views/page-menus/model-metadata/manage/modal/components/table-schema.ts +0 -374
  321. package/src/views/page-menus/model-metadata/manage/modal/components/use-table-detail-tabs.tsx +0 -151
  322. package/src/views/page-menus/model-metadata/manage/modal/components/use-table-submit-tabs.tsx +0 -423
  323. package/src/views/page-menus/model-metadata/manage/modal/detail-modal.tsx +0 -218
  324. package/src/views/page-menus/model-metadata/manage/modal/submit-modal.tsx +0 -261
  325. package/src/views/page-menus/model-metadata/manage/modal/table-detail-modal.tsx +0 -196
  326. package/src/views/page-menus/model-metadata/manage/modal/table-submit-modal.tsx +0 -229
  327. package/src/views/page-menus/model-metadata/manage/submit.tsx +0 -31
  328. package/src/views/page-menus/model-metadata/role/index.tsx +0 -207
  329. package/src/views/page-menus/model-metadata/role/modal/detail-modal.tsx +0 -97
  330. package/src/views/page-menus/model-metadata/role/modal/role-assign-users-modal.tsx +0 -254
  331. package/src/views/page-menus/model-metadata/role/modal/role-assign-users-panel.tsx +0 -393
  332. package/src/views/page-menus/model-metadata/role/modal/role-assign-users-utils.ts +0 -120
  333. package/src/views/page-menus/model-metadata/role/modal/role-permission-assign-panel.tsx +0 -698
  334. package/src/views/page-menus/model-metadata/role/modal/role-permission-modal.tsx +0 -237
  335. package/src/views/page-menus/model-metadata/role/modal/submit-modal.tsx +0 -135
  336. package/src/views/page-menus/model-metadata/training/components/detail-records/index.ts +0 -4
  337. package/src/views/page-menus/model-metadata/training/components/detail-records/node-card.tsx +0 -72
  338. package/src/views/page-menus/model-metadata/training/components/detail-records/summary-lines.ts +0 -196
  339. package/src/views/page-menus/model-metadata/training/components/detail-records/summary-list.tsx +0 -153
  340. package/src/views/page-menus/model-metadata/training/components/detail-records/timeline.tsx +0 -103
  341. package/src/views/page-menus/model-metadata/training/components/detail-records/types.ts +0 -82
  342. package/src/views/page-menus/model-metadata/training/detail.tsx +0 -159
  343. package/src/views/page-menus/model-metadata/training/index.tsx +0 -236
  344. package/src/views/page-menus/model-metadata/training/modal/update-detail-modal.tsx +0 -154
  345. package/src/views/page-menus/skill/index.tsx +0 -201
  346. package/src/views/page-menus/skill/modal/detail-modal.tsx +0 -156
  347. package/src/views/page-menus/skill/modal/submit-modal.tsx +0 -214
  348. package/src/views/page-system/agent-config/index.tsx +0 -370
  349. package/src/views/page-system/department/departmentFormShared.ts +0 -36
  350. package/src/views/page-system/department/index.tsx +0 -541
  351. package/src/views/page-system/department/modal/detail-modal.tsx +0 -94
  352. package/src/views/page-system/department/modal/member-role-modal.tsx +0 -128
  353. package/src/views/page-system/department/modal/submit-modal.tsx +0 -265
  354. package/src/views/page-system/dict/index.tsx +0 -440
  355. package/src/views/page-system/dict/modal/cate-submit-modal.tsx +0 -315
  356. package/src/views/page-system/dict/modal/submit-modal.tsx +0 -184
  357. package/src/views/page-system/logs/components/index.ts +0 -3
  358. package/src/views/page-system/logs/components/log-message-demo.tsx +0 -30
  359. package/src/views/page-system/logs/components/log-message-stream.ts +0 -184
  360. package/src/views/page-system/logs/components/message-list/content-answer.tsx +0 -100
  361. package/src/views/page-system/logs/components/message-list/content-question.tsx +0 -18
  362. package/src/views/page-system/logs/components/message-list/index.tsx +0 -515
  363. package/src/views/page-system/logs/components/message-list/message-item.tsx +0 -193
  364. package/src/views/page-system/logs/components/message-list/preparation-demo-items.ts +0 -147
  365. package/src/views/page-system/logs/components/message-list/preparation-steps.tsx +0 -506
  366. package/src/views/page-system/logs/components/message-list/suggestion-list.tsx +0 -36
  367. package/src/views/page-system/logs/components/message-list/thinking-process.tsx +0 -49
  368. package/src/views/page-system/logs/components/message-list/toolbar.tsx +0 -134
  369. package/src/views/page-system/logs/components/message-list/use-message-list-scroll.ts +0 -214
  370. package/src/views/page-system/logs/components/message-modal.tsx +0 -239
  371. package/src/views/page-system/logs/index.tsx +0 -132
  372. package/src/views/page-system/logs/modal/detail-modal.tsx +0 -157
  373. package/src/views/page-system/menu/components/menuFormShared.ts +0 -283
  374. package/src/views/page-system/menu/index.less +0 -12
  375. package/src/views/page-system/menu/index.tsx +0 -410
  376. package/src/views/page-system/menu/modal/icon-modal.less +0 -51
  377. package/src/views/page-system/menu/modal/icon-modal.tsx +0 -87
  378. package/src/views/page-system/menu/modal/submit-modal.tsx +0 -263
  379. package/src/views/page-system/permission/index.tsx +0 -562
  380. package/src/views/page-system/permission/modal/detail-modal.tsx +0 -179
  381. package/src/views/page-system/permission/modal/submit-modal.less +0 -146
  382. package/src/views/page-system/permission/modal/submit-modal.tsx +0 -650
  383. package/src/views/page-system/role/index.tsx +0 -163
  384. package/src/views/page-system/role/modal/detail-modal.tsx +0 -127
  385. package/src/views/page-system/role/modal/permission-assign-group-rules.ts +0 -86
  386. package/src/views/page-system/role/modal/permission-modal.tsx +0 -111
  387. package/src/views/page-system/role/modal/role-modal-shell-styles.ts +0 -21
  388. package/src/views/page-system/role/modal/role-permission-assign-panel.tsx +0 -916
  389. package/src/views/page-system/role/modal/role-permission-assign-shared.ts +0 -1047
  390. package/src/views/page-system/role/modal/submit-modal.tsx +0 -193
  391. package/src/views/page-system/sys-config/index.tsx +0 -294
  392. package/src/views/page-system/user/components/user-role-column.tsx +0 -87
  393. package/src/views/page-system/user/index.tsx +0 -439
  394. package/src/views/page-system/user/modal/assign-roles-modal.tsx +0 -389
  395. package/src/views/page-system/user/modal/detail-modal.tsx +0 -72
  396. package/src/views/page-system/user/modal/modal-style/submit-modal.less +0 -40
  397. package/src/views/page-system/user/modal/submit-modal.less +0 -40
  398. package/src/views/page-system/user/modal/submit-modal.tsx +0 -287
  399. package/src/views/page-system/user/userFormShared.ts +0 -51
  400. package/tailwind.config.js +0 -17
  401. package/tsconfig.app.json +0 -48
  402. package/tsconfig.json +0 -11
  403. package/tsconfig.node.json +0 -26
  404. package/vite.config.ts +0 -272
  405. /package/{public → dist}/favicon.ico +0 -0
  406. /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
- }