@kne-components/components-admin 1.1.25 → 1.1.26

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 (78) hide show
  1. package/build/asset-manifest.json +54 -50
  2. package/build/index.html +1 -1
  3. package/build/remoteEntry.js +1 -1
  4. package/build/remoteEntry.js.map +1 -1
  5. package/build/static/css/3066.cf4075eb.chunk.css +2 -0
  6. package/build/static/css/{3066.dc31dbc0.chunk.css.map → 3066.cf4075eb.chunk.css.map} +1 -1
  7. package/build/static/css/369.f468af01.chunk.css +2 -0
  8. package/build/static/css/{369.4e425294.chunk.css.map → 369.f468af01.chunk.css.map} +1 -1
  9. package/build/static/css/4168.b4ca737e.chunk.css +2 -0
  10. package/build/static/css/{4168.d040d109.chunk.css.map → 4168.b4ca737e.chunk.css.map} +1 -1
  11. package/build/static/css/4460.f6bca362.chunk.css +2 -0
  12. package/build/static/css/4460.f6bca362.chunk.css.map +1 -0
  13. package/build/static/css/4948.eea1c5f6.chunk.css +2 -0
  14. package/build/static/css/{4948.c27c1bb2.chunk.css.map → 4948.eea1c5f6.chunk.css.map} +1 -1
  15. package/build/static/css/{5084.ddc5e70e.chunk.css → 5084.f04eefae.chunk.css} +2 -2
  16. package/build/static/css/{5084.ddc5e70e.chunk.css.map → 5084.f04eefae.chunk.css.map} +1 -1
  17. package/build/static/css/5425.f468af01.chunk.css +2 -0
  18. package/build/static/css/{5425.4e425294.chunk.css.map → 5425.f468af01.chunk.css.map} +1 -1
  19. package/build/static/css/5795.a93a6cb7.chunk.css +2 -0
  20. package/build/static/css/{5795.138e7d4d.chunk.css.map → 5795.a93a6cb7.chunk.css.map} +1 -1
  21. package/build/static/css/6024.cb5d801f.chunk.css +2 -0
  22. package/build/static/css/{6024.2d74587b.chunk.css.map → 6024.cb5d801f.chunk.css.map} +1 -1
  23. package/build/static/css/7687.d33fb935.chunk.css +2 -0
  24. package/build/static/css/7687.d33fb935.chunk.css.map +1 -0
  25. package/build/static/css/875.73c1d7bd.chunk.css +12 -0
  26. package/build/static/css/875.73c1d7bd.chunk.css.map +1 -0
  27. package/build/static/js/{369.e1f9c751.chunk.js → 369.b78442fe.chunk.js} +3 -3
  28. package/build/static/js/{369.e1f9c751.chunk.js.map → 369.b78442fe.chunk.js.map} +1 -1
  29. package/build/static/js/3690.9a50be09.chunk.js +2 -0
  30. package/build/static/js/3690.9a50be09.chunk.js.map +1 -0
  31. package/build/static/js/{4836.e1f53cfe.chunk.js → 4836.74f296ea.chunk.js} +2 -2
  32. package/build/static/js/{4836.e1f53cfe.chunk.js.map → 4836.74f296ea.chunk.js.map} +1 -1
  33. package/build/static/js/{4948.3284a018.chunk.js → 4948.69740a43.chunk.js} +3 -3
  34. package/build/static/js/{4948.3284a018.chunk.js.map → 4948.69740a43.chunk.js.map} +1 -1
  35. package/build/static/js/{5084.99e2b83e.chunk.js → 5084.06a38430.chunk.js} +2 -2
  36. package/build/static/js/{5084.99e2b83e.chunk.js.map → 5084.06a38430.chunk.js.map} +1 -1
  37. package/build/static/js/{5272.b987cd40.chunk.js → 5272.ee8c301b.chunk.js} +2 -2
  38. package/build/static/js/{5272.b987cd40.chunk.js.map → 5272.ee8c301b.chunk.js.map} +1 -1
  39. package/build/static/js/{5425.ee671541.chunk.js → 5425.3a6321a3.chunk.js} +3 -3
  40. package/build/static/js/{5425.ee671541.chunk.js.map → 5425.3a6321a3.chunk.js.map} +1 -1
  41. package/build/static/js/{5795.05d21882.chunk.js → 5795.a6bfd18a.chunk.js} +3 -3
  42. package/build/static/js/{5795.05d21882.chunk.js.map → 5795.a6bfd18a.chunk.js.map} +1 -1
  43. package/build/static/js/{7517.3c13b48e.chunk.js → 7517.5b0506e9.chunk.js} +2 -2
  44. package/build/static/js/{7517.3c13b48e.chunk.js.map → 7517.5b0506e9.chunk.js.map} +1 -1
  45. package/build/static/js/{7687.810c9e57.chunk.js → 7687.0e4dc21a.chunk.js} +2 -2
  46. package/build/static/js/{7687.810c9e57.chunk.js.map → 7687.0e4dc21a.chunk.js.map} +1 -1
  47. package/build/static/js/{7747.556a6701.chunk.js → 7747.5fce18ee.chunk.js} +2 -2
  48. package/build/static/js/7747.5fce18ee.chunk.js.map +1 -0
  49. package/build/static/js/8406.6fb30c10.chunk.js +2 -0
  50. package/build/static/js/{8406.e8abf05d.chunk.js.map → 8406.6fb30c10.chunk.js.map} +1 -1
  51. package/build/static/js/{main.71bda9a2.js → main.d18c90b0.js} +2 -2
  52. package/build/static/js/{main.71bda9a2.js.map → main.d18c90b0.js.map} +1 -1
  53. package/build/static/media/check~elxgVvVe.d6bb9a199bf3a5853749ecea3ce6a127.svg +3 -0
  54. package/build/static/media/collapse~vphRLfPi.378d83c01100d172e79c04ba3179be58.svg +6 -0
  55. package/build/static/media/copy~drOLfxzP.5880fbbaf59db852794c06f32786d138.svg +4 -0
  56. package/build/static/media/expand~blSbUwvt.8a0d1f9fb3339d7da34c3117df14b545.svg +6 -0
  57. package/package.json +2 -2
  58. package/build/static/css/3066.dc31dbc0.chunk.css +0 -2
  59. package/build/static/css/369.4e425294.chunk.css +0 -2
  60. package/build/static/css/4168.d040d109.chunk.css +0 -2
  61. package/build/static/css/4460.9a69ea92.chunk.css +0 -2
  62. package/build/static/css/4460.9a69ea92.chunk.css.map +0 -1
  63. package/build/static/css/4948.c27c1bb2.chunk.css +0 -2
  64. package/build/static/css/5425.4e425294.chunk.css +0 -2
  65. package/build/static/css/5795.138e7d4d.chunk.css +0 -2
  66. package/build/static/css/6024.2d74587b.chunk.css +0 -2
  67. package/build/static/css/7687.e31548b1.chunk.css +0 -2
  68. package/build/static/css/7687.e31548b1.chunk.css.map +0 -1
  69. package/build/static/css/875.e7d143b9.chunk.css +0 -12
  70. package/build/static/css/875.e7d143b9.chunk.css.map +0 -1
  71. package/build/static/js/3556.7b6f32dc.chunk.js +0 -2
  72. package/build/static/js/3556.7b6f32dc.chunk.js.map +0 -1
  73. package/build/static/js/7747.556a6701.chunk.js.map +0 -1
  74. package/build/static/js/8406.e8abf05d.chunk.js +0 -2
  75. /package/build/static/js/{369.e1f9c751.chunk.js.LICENSE.txt → 369.b78442fe.chunk.js.LICENSE.txt} +0 -0
  76. /package/build/static/js/{4948.3284a018.chunk.js.LICENSE.txt → 4948.69740a43.chunk.js.LICENSE.txt} +0 -0
  77. /package/build/static/js/{5425.ee671541.chunk.js.LICENSE.txt → 5425.3a6321a3.chunk.js.LICENSE.txt} +0 -0
  78. /package/build/static/js/{5795.05d21882.chunk.js.LICENSE.txt → 5795.a6bfd18a.chunk.js.LICENSE.txt} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"static/js/7747.5fce18ee.chunk.js","mappings":"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","sources":["components/Account/README.md","components/Admin/README.md","components/Authenticate/README.md","components/BizUnit/README.md","components/Editor/README.md","components/GroupSelect/README.md","components/IntlAdmin/README.md","components/Language/README.md","components/LoginIllustration/README.md","components/MessageManger/README.md","components/Signature/README.md","components/Task/README.md","components/Tenant/README.md","components/TenantAdmin/README.md","components/UserSelect/README.md","components/UserTool/README.md","components/Admin/context.js","components/Admin/locale/zh-CN.js","components/Admin/locale/en-US.js","components/Admin/withLocale.js","components/Admin/User/getColumns.js","components/Admin/User/FormInner.js","components/Admin/User/ResetPasswordFormInner.js","components/Admin/User/index.js","components/Admin/InitAdmin.js","components/Admin/index.js","components/Apis/getApis.js","components/Authenticate/Authenticate.js","components/Authenticate/MainLayout.js","components/Authenticate/locale/zh-CN.js","components/Authenticate/locale/en-US.js","components/Authenticate/withLocale.js","components/Authenticate/UserInfoFormInner.js","components/Authenticate/SaveUserInfo.js","components/Editor/index.js","components/GroupSelect/index.js","components/IntlAdmin/LangLib/getColumns.js","components/IntlAdmin/LangLib/index.js","components/IntlAdmin/LangType/getColumns.js","components/IntlAdmin/LangType/FormInner.js","components/IntlAdmin/LangType/index.js","components/IntlAdmin/enums.js","components/IntlAdmin/index.js","components/MessageManger/index.js","components/Signature/getColumns.js","components/Signature/locale/zh-CN.js","components/Signature/locale/en-US.js","components/Signature/withLocale.js","components/Signature/index.js","components/UserSelect/index.js","webpack://@kne-components/components-admin/./src/components/UserTool/style.module.scss?828d","components/UserTool/locale/zh-CN.js","components/UserTool/locale/en-US.js","components/UserTool/withLocale.js","components/UserTool/UserTool.js","components/UserTool/RightOptions.js","mockPreset/index.js","preset.js"],"sourcesContent":["import * as component_6 from '@components/Account';\nimport * as component_7 from 'antd';\nconst readmeConfig = {\n name: `Account`,\n summary: `<p>Account 组件提供了完整的用户账号管理功能,包括登录、注册、修改密码、忘记密码、重置密码等功能。支持邮箱和手机号两种账号类型,提供了统一的 UI 风格和交互体验。</p>`,\n \n \n api: `<h3>Login 登录组件</h3>\n<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>title</td>\n<td>登录标题</td>\n<td>string</td>\n<td>'登录'</td>\n</tr>\n<tr>\n<td>type</td>\n<td>登录类型,支持邮箱或手机号</td>\n<td>'email' | 'phone'</td>\n<td>'email'</td>\n</tr>\n<tr>\n<td>registerUrl</td>\n<td>注册页面链接</td>\n<td>string</td>\n<td>''</td>\n</tr>\n<tr>\n<td>forgetUrl</td>\n<td>忘记密码页面链接</td>\n<td>string</td>\n<td>''</td>\n</tr>\n<tr>\n<td>onSubmit</td>\n<td>表单提交回调函数</td>\n<td>(formData) =&gt; void</td>\n<td>-</td>\n</tr>\n</tbody>\n</table>\n<h3>Register 注册组件</h3>\n<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>title</td>\n<td>注册标题</td>\n<td>string</td>\n<td>'注册'</td>\n</tr>\n<tr>\n<td>systemName</td>\n<td>系统名称,显示在顶部横幅</td>\n<td>string</td>\n<td>-</td>\n</tr>\n<tr>\n<td>type</td>\n<td>注册类型,支持邮箱或手机号</td>\n<td>'email' | 'phone'</td>\n<td>'email'</td>\n</tr>\n<tr>\n<td>loginUrl</td>\n<td>登录页面链接</td>\n<td>string</td>\n<td>''</td>\n</tr>\n<tr>\n<td>sendVerificationCode</td>\n<td>发送验证码回调函数</td>\n<td>({ type, data }) =&gt; void</td>\n<td>-</td>\n</tr>\n<tr>\n<td>onSubmit</td>\n<td>表单提交回调函数</td>\n<td>(formData) =&gt; void</td>\n<td>-</td>\n</tr>\n<tr>\n<td>topBanner</td>\n<td>顶部横幅自定义内容</td>\n<td>ReactNode</td>\n<td>-</td>\n</tr>\n<tr>\n<td>className</td>\n<td>自定义样式类名</td>\n<td>string</td>\n<td>-</td>\n</tr>\n</tbody>\n</table>\n<h3>Modify 修改密码组件</h3>\n<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>title</td>\n<td>标题</td>\n<td>string</td>\n<td>'修改密码'</td>\n</tr>\n<tr>\n<td>systemName</td>\n<td>系统名称,显示在顶部横幅</td>\n<td>string</td>\n<td>-</td>\n</tr>\n<tr>\n<td>type</td>\n<td>账号类型</td>\n<td>'email' | 'phone'</td>\n<td>'email'</td>\n</tr>\n<tr>\n<td>account</td>\n<td>账号信息(邮箱或手机号)</td>\n<td>string</td>\n<td>-</td>\n</tr>\n<tr>\n<td>isReset</td>\n<td>是否为重置密码模式(不需要输入旧密码)</td>\n<td>boolean</td>\n<td>false</td>\n</tr>\n<tr>\n<td>onSubmit</td>\n<td>表单提交回调函数</td>\n<td>(formData) =&gt; void</td>\n<td>-</td>\n</tr>\n<tr>\n<td>header</td>\n<td>自定义头部内容</td>\n<td>ReactNode</td>\n<td>null</td>\n</tr>\n<tr>\n<td>topBanner</td>\n<td>顶部横幅自定义内容</td>\n<td>ReactNode</td>\n<td>-</td>\n</tr>\n<tr>\n<td>className</td>\n<td>自定义样式类名</td>\n<td>string</td>\n<td>-</td>\n</tr>\n</tbody>\n</table>\n<h3>ForgetByEmail 忘记密码(邮箱)组件</h3>\n<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>title</td>\n<td>标题</td>\n<td>string</td>\n<td>'忘记密码'</td>\n</tr>\n<tr>\n<td>loginUrl</td>\n<td>登录页面链接</td>\n<td>string</td>\n<td>''</td>\n</tr>\n<tr>\n<td>onSubmit</td>\n<td>表单提交回调函数</td>\n<td>(formData, callback) =&gt; void</td>\n<td>-</td>\n</tr>\n</tbody>\n</table>\n<h3>ResetPassword 重置密码组件</h3>\n<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>title</td>\n<td>标题</td>\n<td>string</td>\n<td>'重置登录密码'</td>\n</tr>\n<tr>\n<td>systemName</td>\n<td>系统名称,显示在顶部横幅</td>\n<td>string</td>\n<td>-</td>\n</tr>\n<tr>\n<td>type</td>\n<td>账号类型</td>\n<td>'email' | 'phone'</td>\n<td>'email'</td>\n</tr>\n<tr>\n<td>account</td>\n<td>账号信息(邮箱或手机号)</td>\n<td>string</td>\n<td>-</td>\n</tr>\n<tr>\n<td>loginUrl</td>\n<td>登录页面链接</td>\n<td>string</td>\n<td>''</td>\n</tr>\n<tr>\n<td>onSubmit</td>\n<td>表单提交回调函数</td>\n<td>(formData) =&gt; void</td>\n<td>-</td>\n</tr>\n<tr>\n<td>topBanner</td>\n<td>顶部横幅自定义内容</td>\n<td>ReactNode</td>\n<td>-</td>\n</tr>\n<tr>\n<td>className</td>\n<td>自定义样式类名</td>\n<td>string</td>\n<td>-</td>\n</tr>\n</tbody>\n</table>\n<h3>LoginOuterContainer 登录外层容器组件</h3>\n<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>title</td>\n<td>系统标题</td>\n<td>string</td>\n<td>-</td>\n</tr>\n<tr>\n<td>logo</td>\n<td>系统 Logo 图片地址</td>\n<td>string</td>\n<td>-</td>\n</tr>\n<tr>\n<td>leftInner</td>\n<td>左侧自定义内容</td>\n<td>ReactNode</td>\n<td>-</td>\n</tr>\n<tr>\n<td>children</td>\n<td>右侧内容区域</td>\n<td>ReactNode</td>\n<td>-</td>\n</tr>\n<tr>\n<td>className</td>\n<td>自定义样式类名</td>\n<td>string</td>\n<td>-</td>\n</tr>\n</tbody>\n</table>\n<h3>Logout 登出组件</h3>\n<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>storeKeys</td>\n<td>Token 存储键名配置</td>\n<td>{ token: string }</td>\n<td>{ token: 'X-User-Token' }</td>\n</tr>\n<tr>\n<td>domain</td>\n<td>Token 存储域名</td>\n<td>string</td>\n<td>-</td>\n</tr>\n<tr>\n<td>loginUrl</td>\n<td>登出后跳转的登录页面地址</td>\n<td>string</td>\n<td>'/account/login'</td>\n</tr>\n<tr>\n<td>...props</td>\n<td>其他 Button 组件属性</td>\n<td>ButtonProps</td>\n<td>-</td>\n</tr>\n</tbody>\n</table>\n<h3>useLogout Hook</h3>\n<p>用于获取登出函数的 Hook。</p>\n<pre><code class=\"language-javascript\">const logout = useLogout({ storeKeys, domain, loginUrl });\n</code></pre>\n<table>\n<thead>\n<tr>\n<th>参数名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>storeKeys</td>\n<td>Token 存储键名配置</td>\n<td>{ token: string }</td>\n<td>{ token: 'X-User-Token' }</td>\n</tr>\n<tr>\n<td>domain</td>\n<td>Token 存储域名</td>\n<td>string</td>\n<td>-</td>\n</tr>\n<tr>\n<td>loginUrl</td>\n<td>登出后跳转的登录页面地址</td>\n<td>string</td>\n<td>'/account/login'</td>\n</tr>\n</tbody>\n</table>\n<p>返回值:<code>() =&gt; void</code> - 执行登出操作的函数</p>`,\n example: {\n isFull: true,\n className: ``,\n style: ``,\n list: [{\n title: `Login`,\n description: `登录`,\n code: `const { LoginOuterContainer, Login } = _Account;\nconst { Flex, Radio, Space, message } = antd;\nconst { useState } = React;\n\nconst BaseExample = () => {\n const [type, setType] = useState('email');\n \n return (\n <Flex vertical gap={20}>\n <Flex justify=\"center\">\n <Space>\n <span>登录类型:</span>\n <Radio.Group\n value={type}\n onChange={e => {\n setType(e.target.value);\n }}\n options={[\n { label: '邮箱登录', value: 'email' },\n { label: '手机登录', value: 'phone' }\n ]}\n />\n </Space>\n </Flex>\n <LoginOuterContainer\n title=\"企业管理系统\"\n logo=\"https://api.dicebear.com/7.x/shapes/svg?seed=company\">\n <Login\n type={type}\n registerUrl=\"/register\"\n forgetUrl=\"/forget\"\n onSubmit={formData => {\n console.log('登录信息:', formData);\n message.success(\\`登录成功: \\${formData[type]}\\`);\n }}\n />\n </LoginOuterContainer>\n </Flex>\n );\n};\n\nrender(<BaseExample />);\n\n`,\n scope: [{\n name: \"_Account\",\n packageName: \"@components/Account\",\n component: component_6\n},{\n name: \"antd\",\n packageName: \"antd\",\n component: component_7\n}]\n},{\n title: `Register`,\n description: `注册`,\n code: `const { LoginOuterContainer, Register } = _Account;\nconst { Flex, Radio, Space, message } = antd;\nconst { useState } = React;\n\nconst BaseExample = () => {\n const [type, setType] = useState('email');\n \n return (\n <Flex vertical gap={20}>\n <Flex justify=\"center\">\n <Space>\n <span>注册类型:</span>\n <Radio.Group\n value={type}\n onChange={e => {\n setType(e.target.value);\n }}\n options={[\n { label: '邮箱注册', value: 'email' },\n { label: '手机注册', value: 'phone' }\n ]}\n />\n </Space>\n </Flex>\n <Register\n type={type}\n loginUrl=\"/login\"\n sendVerificationCode={({ type, data }) => {\n console.log(\\`发送验证码到 \\${type}:\\`, data);\n message.success(\\`验证码已发送到 \\${data}\\`);\n return Promise.resolve();\n }}\n onSubmit={formData => {\n console.log('注册信息:', formData);\n message.success('注册成功');\n }}\n />\n </Flex>\n );\n};\n\nrender(<BaseExample />);\n\n`,\n scope: [{\n name: \"_Account\",\n packageName: \"@components/Account\",\n component: component_6\n},{\n name: \"antd\",\n packageName: \"antd\",\n component: component_7\n}]\n},{\n title: `Modify`,\n description: `修改密码`,\n code: `const { Modify } = _Account;\nconst { Flex, message } = antd;\n\nconst BaseExample = () => {\n return (\n <Flex vertical gap={20}>\n <Modify\n type=\"email\"\n account=\"zhangsan@company.com\"\n onSubmit={formData => {\n console.log('修改密码:', formData);\n message.success('密码修改成功');\n }}\n />\n <Modify\n type=\"phone\"\n account=\"+86 13800138000\"\n onSubmit={formData => {\n console.log('修改密码:', formData);\n message.success('密码修改成功');\n }}\n />\n </Flex>\n );\n};\n\nrender(<BaseExample />);\n\n`,\n scope: [{\n name: \"_Account\",\n packageName: \"@components/Account\",\n component: component_6\n},{\n name: \"antd\",\n packageName: \"antd\",\n component: component_7\n}]\n},{\n title: `ForgetByEmail`,\n description: `忘记密码(邮箱)`,\n code: `const { LoginOuterContainer, ForgetByEmail } = _Account;\nconst { message } = antd;\n\nconst BaseExample = () => {\n return (\n <LoginOuterContainer title=\"企业管理系统\">\n <ForgetByEmail\n loginUrl=\"/login\"\n onSubmit={(formData, callback) => {\n console.log('忘记密码邮箱:', formData);\n // 模拟发送重置密码邮件\n setTimeout(() => {\n callback();\n message.success('重置密码链接已发送到您的邮箱');\n }, 1000);\n }}\n />\n </LoginOuterContainer>\n );\n};\n\nrender(<BaseExample />);\n\n`,\n scope: [{\n name: \"_Account\",\n packageName: \"@components/Account\",\n component: component_6\n},{\n name: \"antd\",\n packageName: \"antd\",\n component: component_7\n}]\n},{\n title: `ResetPassword`,\n description: `重置密码`,\n code: `const { ResetPassword } = _Account;\nconst { Flex, message } = antd;\n\nconst BaseExample = () => {\n return (\n <Flex vertical gap={20}>\n <ResetPassword\n type=\"email\"\n account=\"zhangsan@company.com\"\n loginUrl=\"/login\"\n onSubmit={formData => {\n console.log('重置密码:', formData);\n message.success('密码重置成功,请使用新密码登录');\n }}\n />\n <ResetPassword\n type=\"phone\"\n account=\"+86 13800138000\"\n loginUrl=\"/login\"\n onSubmit={formData => {\n console.log('重置密码:', formData);\n message.success('密码重置成功,请使用新密码登录');\n }}\n />\n </Flex>\n );\n};\n\nrender(<BaseExample />);\n\n`,\n scope: [{\n name: \"_Account\",\n packageName: \"@components/Account\",\n component: component_6\n},{\n name: \"antd\",\n packageName: \"antd\",\n component: component_7\n}]\n}]\n }\n};\nexport default readmeConfig;\n","import * as component_1 from '@components/Admin';\nimport * as component_2 from '@root/mockPreset';\nimport * as component_3 from '@kne/remote-loader';\nimport * as component_4 from 'react-router-dom';\nimport * as component_5 from 'antd';\nconst readmeConfig = {\n name: `Admin`,\n summary: `<p>管理后台组件,提供用户管理和系统初始化功能。包含用户列表、添加用户、编辑用户、修改密码、设置超级管理员等完整的管理功能。</p>`,\n \n \n api: `<h2>Admin 组件</h2>\n<p>管理后台组件,提供用户管理和系统初始化功能。包含路由管理和上下文管理。</p>\n<h3>主组件属性</h3>\n<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>baseUrl</td>\n<td>管理后台的基础路由路径</td>\n<td>string</td>\n<td>-</td>\n</tr>\n<tr>\n<td>...props</td>\n<td>其他属性会通过 Context 传递给子组件</td>\n<td>object</td>\n<td>-</td>\n</tr>\n</tbody>\n</table>\n<h3>子组件</h3>\n<h4>User 用户管理组件</h4>\n<p>用户管理页面,提供用户列表展示、添加用户、编辑用户、修改密码、设置超级管理员、设置状态等功能。</p>\n<p><strong>数据结构</strong></p>\n<table>\n<thead>\n<tr>\n<th>字段名</th>\n<th>说明</th>\n<th>类型</th>\n<th>示例</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>id</td>\n<td>用户ID</td>\n<td>number</td>\n<td>1</td>\n</tr>\n<tr>\n<td>avatar</td>\n<td>用户头像URL</td>\n<td>string</td>\n<td>\"https://api.dicebear.com/7.x/avataaars/svg?seed=zhangsan\"</td>\n</tr>\n<tr>\n<td>nickname</td>\n<td>用户昵称</td>\n<td>string</td>\n<td>\"张三\"</td>\n</tr>\n<tr>\n<td>email</td>\n<td>用户邮箱</td>\n<td>string</td>\n<td>\"zhangsan@example.com\"</td>\n</tr>\n<tr>\n<td>phone</td>\n<td>用户手机号</td>\n<td>string</td>\n<td>\"+86138001380001\"</td>\n</tr>\n<tr>\n<td>isSuperAdmin</td>\n<td>是否为超级管理员</td>\n<td>boolean</td>\n<td>true</td>\n</tr>\n<tr>\n<td>status</td>\n<td>用户状态</td>\n<td>number</td>\n<td>0-正常, 10-未激活, 11-禁用, 12-关闭</td>\n</tr>\n<tr>\n<td>description</td>\n<td>用户描述</td>\n<td>string</td>\n<td>\"系统超级管理员\"</td>\n</tr>\n<tr>\n<td>gender</td>\n<td>性别</td>\n<td>string</td>\n<td>\"M\"-男, \"F\"-女</td>\n</tr>\n</tbody>\n</table>\n<p><strong>状态说明</strong></p>\n<table>\n<thead>\n<tr>\n<th>状态值</th>\n<th>说明</th>\n<th>颜色</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>0</td>\n<td>正常</td>\n<td>success(绿色)</td>\n</tr>\n<tr>\n<td>10</td>\n<td>未激活</td>\n<td>default(灰色)</td>\n</tr>\n<tr>\n<td>11</td>\n<td>禁用</td>\n<td>danger(红色)</td>\n</tr>\n<tr>\n<td>12</td>\n<td>关闭</td>\n<td>danger(红色)</td>\n</tr>\n</tbody>\n</table>\n<p><strong>功能列表</strong></p>\n<ul>\n<li>添加用户:创建新用户账号</li>\n<li>编辑用户:修改用户信息</li>\n<li>修改密码:重置用户密码</li>\n<li>设置超级管理员:设置/取消用户的超级管理员权限</li>\n<li>设置正常:将用户状态设置为正常</li>\n<li>关闭用户:关闭用户账号</li>\n</ul>\n<p><strong>筛选功能</strong></p>\n<ul>\n<li>邮箱筛选:按邮箱地址筛选</li>\n<li>手机号筛选:按手机号筛选</li>\n<li>状态筛选:按用户状态筛选</li>\n<li>管理员筛选:按是否为超级管理员筛选</li>\n</ul>\n<p><strong>搜索功能</strong></p>\n<ul>\n<li>昵称搜索:按用户昵称搜索</li>\n</ul>\n<h4>InitAdmin 初始化超级管理员组件</h4>\n<p>系统初始化组件,用于首次使用时初始化超级管理员账号。</p>\n<p><strong>功能说明</strong></p>\n<ul>\n<li>自动调用初始化接口创建超级管理员</li>\n<li>初始化成功后自动跳转到管理后台首页</li>\n<li>显示初始化进行中的提示信息</li>\n</ul>\n<h3>Context API</h3>\n<p>Admin 组件提供了 Context 用于在子组件中访问共享数据:</p>\n<h4>useBaseUrl</h4>\n<p>获取管理后台的基础路由路径。</p>\n<pre><code class=\"language-javascript\">import { useBaseUrl } from '@components/Admin';\n\nconst MyComponent = () =&gt; {\n const baseUrl = useBaseUrl();\n // 使用 baseUrl...\n};\n</code></pre>\n<h4>useProps</h4>\n<p>获取 Admin 组件传递的所有属性。</p>\n<pre><code class=\"language-javascript\">import { useProps } from '@components/Admin';\n\nconst MyComponent = () =&gt; {\n const props = useProps();\n // props 包含 baseUrl 和其他传入的属性\n};\n</code></pre>\n<h3>依赖组件</h3>\n<ul>\n<li><code>@kne/remote-loader</code> - 远程组件加载器</li>\n<li><code>components-core:Layout@TablePage</code> - 表格页面布局</li>\n<li><code>components-core:Filter</code> - 筛选组件</li>\n<li><code>components-core:FormInfo</code> - 表单组件</li>\n<li><code>components-core:Global@usePreset</code> - 全局预设</li>\n</ul>\n<h3>国际化支持</h3>\n<p>组件支持中英文切换,通过 <code>@kne/react-intl</code> 实现:</p>\n<ul>\n<li><code>zh-CN</code> - 中文简体</li>\n<li><code>en-US</code> - 英文</li>\n</ul>\n<h3>API 接口</h3>\n<table>\n<thead>\n<tr>\n<th>接口名</th>\n<th>说明</th>\n<th>方法</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>admin.getUserList</td>\n<td>获取用户列表</td>\n<td>GET</td>\n</tr>\n<tr>\n<td>admin.addUser</td>\n<td>添加用户</td>\n<td>POST</td>\n</tr>\n<tr>\n<td>admin.saveUser</td>\n<td>保存用户信息</td>\n<td>POST</td>\n</tr>\n<tr>\n<td>admin.resetUserPassword</td>\n<td>重置用户密码</td>\n<td>POST</td>\n</tr>\n<tr>\n<td>admin.setSuperAdmin</td>\n<td>设置超级管理员</td>\n<td>POST</td>\n</tr>\n<tr>\n<td>admin.setUserNormal</td>\n<td>设置用户正常</td>\n<td>POST</td>\n</tr>\n<tr>\n<td>admin.setUserClose</td>\n<td>关闭用户</td>\n<td>POST</td>\n</tr>\n<tr>\n<td>admin.getSuperAdminInfo</td>\n<td>获取超级管理员信息</td>\n<td>GET</td>\n</tr>\n<tr>\n<td>admin.initSuperAdmin</td>\n<td>初始化超级管理员</td>\n<td>POST</td>\n</tr>\n</tbody>\n</table>`,\n example: {\n isFull: true,\n className: ``,\n style: ``,\n list: [{\n title: `基础用法`,\n description: `Admin 组件的完整功能展示,包含用户管理子路由和路由导航功能`,\n code: `const { default: Admin } = _Admin;\nconst { default: mockPreset } = _mockPreset;\nconst { createWithRemoteLoader } = remoteLoader;\nconst { Route, Routes, Navigate, useNavigate, Button, Flex } = { ...reactRouterDom, ...antd };\n\nconst BaseExample = createWithRemoteLoader({\n modules: ['components-core:Global@PureGlobal', 'components-core:Layout']\n})(({ remoteModules }) => {\n const [PureGlobal, Layout] = remoteModules;\n const navigate = useNavigate();\n return (\n <PureGlobal preset={mockPreset}>\n <Layout navigation={{ isFixed: false }}>\n <Routes>\n <Route\n path=\"/Admin/admin/*\"\n element={\n <Admin\n baseUrl=\"/Admin/admin\"\n pageProps={{\n menuFixed: false\n }}\n />\n }\n />\n <Route path=\"*\" element={<Navigate to=\"/Admin/admin/user\" replace />} />\n </Routes>\n </Layout>\n </PureGlobal>\n );\n});\n\nrender(<BaseExample />);\n\n`,\n scope: [{\n name: \"_Admin\",\n packageName: \"@components/Admin\",\n component: component_1\n},{\n name: \"_mockPreset\",\n packageName: \"@root/mockPreset\",\n component: component_2\n},{\n name: \"remoteLoader\",\n packageName: \"@kne/remote-loader\",\n component: component_3\n},{\n name: \"reactRouterDom\",\n packageName: \"react-router-dom\",\n component: component_4\n},{\n name: \"antd\",\n packageName: \"antd\",\n component: component_5\n}]\n},{\n title: `用户管理`,\n description: `单独展示 User 子组件,包含用户列表、添加用户、编辑用户、修改密码、设置超级管理员等完整功能`,\n code: `const { default: Admin } = _Admin;\nconst { User } = Admin;\nconst { default: mockPreset } = _mockPreset;\nconst { createWithRemoteLoader } = remoteLoader;\n\nconst UserExample = createWithRemoteLoader({\n modules: ['components-core:Global@PureGlobal', 'components-core:Layout']\n})(({ remoteModules }) => {\n const [PureGlobal, Layout] = remoteModules;\n return (\n <PureGlobal preset={mockPreset}>\n <Layout navigation={{ isFixed: false }}>\n <User pageProps={{ menuFixed: false }} />\n </Layout>\n </PureGlobal>\n );\n});\n\nrender(<UserExample />);\n\n`,\n scope: [{\n name: \"_Admin\",\n packageName: \"@components/Admin\",\n component: component_1\n},{\n name: \"_mockPreset\",\n packageName: \"@root/mockPreset\",\n component: component_2\n},{\n name: \"remoteLoader\",\n packageName: \"@kne/remote-loader\",\n component: component_3\n},{\n name: \"antd\",\n packageName: \"antd\",\n component: component_5\n}]\n},{\n title: `初始化超级管理员`,\n description: `InitAdmin 组件用于系统首次使用时初始化超级管理员账号,初始化成功后自动跳转到管理后台`,\n code: `const { InitAdmin } = _Admin;\nconst { default: mockPreset } = _mockPreset;\nconst { createWithRemoteLoader } = remoteLoader;\n\nconst InitAdminExample = createWithRemoteLoader({\n modules: ['components-core:Global@PureGlobal', 'components-core:Layout']\n})(({ remoteModules }) => {\n const [PureGlobal, Layout] = remoteModules;\n return (\n <PureGlobal preset={mockPreset}>\n <Layout navigation={{ isFixed: false }}>\n <InitAdmin baseUrl=\"/Admin/admin\" />\n </Layout>\n </PureGlobal>\n );\n});\n\nrender(<InitAdminExample />);\n\n`,\n scope: [{\n name: \"_Admin\",\n packageName: \"@components/Admin\",\n component: component_1\n},{\n name: \"_mockPreset\",\n packageName: \"@root/mockPreset\",\n component: component_2\n},{\n name: \"remoteLoader\",\n packageName: \"@kne/remote-loader\",\n component: component_3\n},{\n name: \"reactRouterDom\",\n packageName: \"react-router-dom\",\n component: component_4\n}]\n}]\n }\n};\nexport default readmeConfig;\n","import * as component_11 from '@components/Authenticate';\nimport * as component_12 from '@root/mockPreset';\nimport * as component_13 from '@kne/remote-loader';\nimport * as component_14 from 'antd';\nconst readmeConfig = {\n name: `Authenticate`,\n summary: `<p>用户权限和用户信息管理组件,提供用户信息获取、登录后布局、用户信息编辑等功能。支持普通用户、管理员和自定义用户场景。</p>`,\n \n \n api: `<h2>Authenticate 组件</h2>\n<p>用户权限和用户信息管理组件,提供用户信息获取、登录后布局、用户信息编辑等功能。</p>\n<h3>主要组件</h3>\n<h4>UserInfo</h4>\n<p>获取普通用户信息的组件,自动从 API 加载用户信息并设置到全局上下文中。</p>\n<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>baseUrl</td>\n<td>基础路由路径,用于账户状态检查时的跳转</td>\n<td>string</td>\n<td>'/account'</td>\n</tr>\n<tr>\n<td>cache</td>\n<td>缓存键名</td>\n<td>string</td>\n<td>'user-info'</td>\n</tr>\n<tr>\n<td>children</td>\n<td>子组件</td>\n<td>ReactNode</td>\n<td>-</td>\n</tr>\n</tbody>\n</table>\n<h4>SuperAdminInfo</h4>\n<p>获取超级管理员信息的组件。</p>\n<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>children</td>\n<td>子组件</td>\n<td>ReactNode</td>\n<td>-</td>\n</tr>\n</tbody>\n</table>\n<h4>CustomUserInfo</h4>\n<p>自定义用户信息获取组件,支持自定义 API。</p>\n<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>baseUrl</td>\n<td>基础路由路径</td>\n<td>string</td>\n<td>-</td>\n</tr>\n<tr>\n<td>cache</td>\n<td>缓存键名</td>\n<td>string</td>\n<td>-</td>\n</tr>\n<tr>\n<td>api</td>\n<td>自定义 API 配置</td>\n<td>object</td>\n<td>-</td>\n</tr>\n<tr>\n<td>children</td>\n<td>子组件</td>\n<td>ReactNode</td>\n<td>-</td>\n</tr>\n</tbody>\n</table>\n<h3>布局组件</h3>\n<h4>AfterUserLoginLayout</h4>\n<p>用户登录后的布局组件,包含顶部导航栏和用户工具。</p>\n<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>baseUrl</td>\n<td>基础路由路径</td>\n<td>string</td>\n<td>'/account'</td>\n</tr>\n<tr>\n<td>navigation</td>\n<td>导航配置</td>\n<td>object</td>\n<td>-</td>\n</tr>\n<tr>\n<td>title</td>\n<td>页面标题</td>\n<td>string</td>\n<td>-</td>\n</tr>\n<tr>\n<td>children</td>\n<td>子组件</td>\n<td>ReactNode</td>\n<td>-</td>\n</tr>\n</tbody>\n</table>\n<h4>AfterUserLogin</h4>\n<p>用户登录后的简单包装组件,不包含布局。</p>\n<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>baseUrl</td>\n<td>基础路由路径</td>\n<td>string</td>\n<td>'/account'</td>\n</tr>\n<tr>\n<td>children</td>\n<td>子组件</td>\n<td>ReactNode</td>\n<td>-</td>\n</tr>\n</tbody>\n</table>\n<h4>AfterAdminUserLoginLayout</h4>\n<p>管理员登录后的布局组件。</p>\n<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>navigation</td>\n<td>导航配置</td>\n<td>object</td>\n<td>-</td>\n</tr>\n<tr>\n<td>title</td>\n<td>页面标题</td>\n<td>string</td>\n<td>-</td>\n</tr>\n<tr>\n<td>children</td>\n<td>子组件</td>\n<td>ReactNode</td>\n<td>-</td>\n</tr>\n</tbody>\n</table>\n<h4>AfterCustomUserLoginLayout</h4>\n<p>自定义用户登录后的布局组件。</p>\n<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>baseUrl</td>\n<td>基础路由路径</td>\n<td>string</td>\n<td>'/account'</td>\n</tr>\n<tr>\n<td>api</td>\n<td>自定义用户信息 API</td>\n<td>object</td>\n<td>-</td>\n</tr>\n<tr>\n<td>navigation</td>\n<td>导航配置</td>\n<td>object</td>\n<td>-</td>\n</tr>\n<tr>\n<td>title</td>\n<td>页面标题</td>\n<td>string</td>\n<td>-</td>\n</tr>\n<tr>\n<td>children</td>\n<td>子组件</td>\n<td>ReactNode</td>\n<td>-</td>\n</tr>\n</tbody>\n</table>\n<h4>AfterCustomUserLogin</h4>\n<p>自定义用户登录后的简单包装组件。</p>\n<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>baseUrl</td>\n<td>基础路由路径</td>\n<td>string</td>\n<td>'/account'</td>\n</tr>\n<tr>\n<td>api</td>\n<td>自定义用户信息 API</td>\n<td>object</td>\n<td>-</td>\n</tr>\n<tr>\n<td>children</td>\n<td>子组件</td>\n<td>ReactNode</td>\n<td>-</td>\n</tr>\n</tbody>\n</table>\n<h4>BeforeLoginLayout</h4>\n<p>登录前的布局组件。</p>\n<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>children</td>\n<td>子组件</td>\n<td>ReactNode</td>\n<td>-</td>\n</tr>\n</tbody>\n</table>\n<h4>MainLayout</h4>\n<p>主布局组件。</p>\n<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>navigation</td>\n<td>导航配置</td>\n<td>object</td>\n<td>-</td>\n</tr>\n<tr>\n<td>title</td>\n<td>页面标题</td>\n<td>string</td>\n<td>-</td>\n</tr>\n<tr>\n<td>children</td>\n<td>子组件</td>\n<td>ReactNode</td>\n<td>-</td>\n</tr>\n</tbody>\n</table>\n<h3>用户信息组件</h3>\n<h4>SaveUserInfo</h4>\n<p>保存用户信息的组件,通过点击事件触发表单弹窗。</p>\n<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>children</td>\n<td>渲染函数,接收 { onClick } 参数</td>\n<td>(props) =&gt; ReactNode</td>\n<td>-</td>\n</tr>\n</tbody>\n</table>\n<p><strong>使用示例</strong>:</p>\n<pre><code class=\"language-jsx\">&lt;SaveUserInfo&gt;\n {({ onClick }) =&gt; (\n &lt;Button onClick={onClick}&gt;编辑用户信息&lt;/Button&gt;\n )}\n&lt;/SaveUserInfo&gt;\n</code></pre>\n<h4>UserInfoFormInner</h4>\n<p>用户信息表单内部组件。</p>\n<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>column</td>\n<td>表单列数</td>\n<td>number</td>\n<td>1</td>\n</tr>\n</tbody>\n</table>\n<p><strong>表单字段</strong>:</p>\n<ul>\n<li><code>avatar</code> - 用户头像</li>\n<li><code>email</code> - 邮箱(必填)</li>\n<li><code>nickname</code> - 昵称</li>\n<li><code>description</code> - 描述</li>\n</ul>\n<h4>RightOptions</h4>\n<p>右侧工具栏组件,显示语言切换和用户工具。</p>\n<h3>数据结构</h3>\n<h4>UserInfo 数据结构</h4>\n<table>\n<thead>\n<tr>\n<th>字段名</th>\n<th>说明</th>\n<th>类型</th>\n<th>示例</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>id</td>\n<td>用户ID</td>\n<td>number</td>\n<td>1</td>\n</tr>\n<tr>\n<td>email</td>\n<td>邮箱</td>\n<td>string</td>\n<td>\"zhangsan@example.com\"</td>\n</tr>\n<tr>\n<td>nickname</td>\n<td>昵称</td>\n<td>string</td>\n<td>\"张三\"</td>\n</tr>\n<tr>\n<td>avatar</td>\n<td>头像URL</td>\n<td>string</td>\n<td>\"https://api.dicebear.com/7.x/avataaars/svg?seed=xxx\"</td>\n</tr>\n<tr>\n<td>phone</td>\n<td>手机号</td>\n<td>string</td>\n<td>\"+86138001380001\"</td>\n</tr>\n<tr>\n<td>description</td>\n<td>描述</td>\n<td>string</td>\n<td>\"资深前端工程师\"</td>\n</tr>\n<tr>\n<td>status</td>\n<td>状态</td>\n<td>number</td>\n<td>0-正常, 1-待完善</td>\n</tr>\n<tr>\n<td>gender</td>\n<td>性别</td>\n<td>string</td>\n<td>\"M\"-男, \"F\"-女</td>\n</tr>\n<tr>\n<td>isSuperAdmin</td>\n<td>是否超级管理员</td>\n<td>boolean</td>\n<td>true</td>\n</tr>\n</tbody>\n</table>\n<h3>账户状态说明</h3>\n<table>\n<thead>\n<tr>\n<th>状态值</th>\n<th>说明</th>\n<th>行为</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>0</td>\n<td>正常</td>\n<td>正常显示内容</td>\n</tr>\n<tr>\n<td>1</td>\n<td>待完善信息</td>\n<td>自动跳转到信息完善页面</td>\n</tr>\n</tbody>\n</table>\n<h3>依赖组件</h3>\n<ul>\n<li><code>@kne/remote-loader</code> - 远程组件加载器</li>\n<li><code>components-core:Layout</code> - 布局组件</li>\n<li><code>components-core:Global@SetGlobal</code> - 全局状态设置</li>\n<li><code>components-core:Global@usePreset</code> - 全局预设</li>\n<li><code>components-core:FormInfo</code> - 表单组件</li>\n<li><code>@components/UserTool</code> - 用户工具组件</li>\n<li><code>@components/Account/Language</code> - 语言切换组件</li>\n</ul>\n<h3>国际化支持</h3>\n<p>组件支持中英文切换:</p>\n<ul>\n<li><code>zh-CN</code> - 中文简体</li>\n<li><code>en-US</code> - 英文</li>\n</ul>\n<h3>API 接口</h3>\n<table>\n<thead>\n<tr>\n<th>接口名</th>\n<th>说明</th>\n<th>方法</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>user.getUserInfo</td>\n<td>获取用户信息</td>\n<td>GET</td>\n</tr>\n<tr>\n<td>user.saveUserInfo</td>\n<td>保存用户信息</td>\n<td>POST</td>\n</tr>\n<tr>\n<td>admin.getSuperAdminInfo</td>\n<td>获取超级管理员信息</td>\n<td>GET</td>\n</tr>\n</tbody>\n</table>`,\n example: {\n isFull: true,\n className: ``,\n style: ``,\n list: [{\n title: `用户登录后布局`,\n description: `AfterUserLoginLayout 组件展示用户登录后的完整布局,包含顶部导航栏和用户工具`,\n code: `const { AfterUserLoginLayout } = _Authenticate;\nconst { default: mockPreset } = _mockPreset;\nconst { createWithRemoteLoader } = remoteLoader;\nconst { Typography, Card } = antd;\n\nconst { Title, Paragraph } = Typography;\n\nconst BaseExample = createWithRemoteLoader({\n modules: ['components-core:Global@PureGlobal']\n})(({ remoteModules }) => {\n const [PureGlobal] = remoteModules;\n return (\n <PureGlobal preset={mockPreset}>\n <AfterUserLoginLayout \n title=\"用户中心\"\n navigation={{ isFixed: false }}\n >\n <Card>\n <Title level={4}>欢迎使用用户中心</Title>\n <Paragraph>\n 这是一个用户登录后的布局示例。顶部导航栏显示用户信息和语言切换功能。\n </Paragraph>\n </Card>\n </AfterUserLoginLayout>\n </PureGlobal>\n );\n});\n\nrender(<BaseExample />);\n\n`,\n scope: [{\n name: \"_Authenticate\",\n packageName: \"@components/Authenticate\",\n component: component_11\n},{\n name: \"_mockPreset\",\n packageName: \"@root/mockPreset\",\n component: component_12\n},{\n name: \"remoteLoader\",\n packageName: \"@kne/remote-loader\",\n component: component_13\n},{\n name: \"antd\",\n packageName: \"antd\",\n component: component_14\n}]\n},{\n title: `用户信息获取`,\n description: `UserInfo 组件获取用户信息并展示,用户信息会被设置到全局上下文中供其他组件使用`,\n code: `const { UserInfo } = _Authenticate;\nconst { default: mockPreset } = _mockPreset;\nconst { createWithRemoteLoader } = remoteLoader;\n\nconst UserInfoExample = createWithRemoteLoader({\n modules: ['components-core:Global@PureGlobal', 'components-core:Global@GlobalValue']\n})(({ remoteModules }) => {\n const [PureGlobal, GlobalValue] = remoteModules;\n return (\n <PureGlobal preset={mockPreset}>\n <UserInfo>\n <GlobalValue globalKey=\"userInfo\">\n {({ value }) => {\n const { nickname, email, avatar, description } = Object.assign({}, value?.value);\n return (\n <div style={{ padding: 20 }}>\n <h3>用户信息</h3>\n <p><strong>头像:</strong><img src={avatar} alt=\"avatar\" style={{ width: 40, height: 40, borderRadius: '50%' }} /></p>\n <p><strong>昵称:</strong>{nickname}</p>\n <p><strong>邮箱:</strong>{email}</p>\n <p><strong>描述:</strong>{description}</p>\n </div>\n );\n }}\n </GlobalValue>\n </UserInfo>\n </PureGlobal>\n );\n});\n\nrender(<UserInfoExample />);\n\n`,\n scope: [{\n name: \"_Authenticate\",\n packageName: \"@components/Authenticate\",\n component: component_11\n},{\n name: \"_mockPreset\",\n packageName: \"@root/mockPreset\",\n component: component_12\n},{\n name: \"remoteLoader\",\n packageName: \"@kne/remote-loader\",\n component: component_13\n}]\n},{\n title: `编辑用户信息`,\n description: `SaveUserInfo 组件提供用户信息编辑功能,点击按钮弹出表单进行编辑`,\n code: `const { SaveUserInfo, UserInfo } = _Authenticate;\nconst { default: mockPreset } = _mockPreset;\nconst { createWithRemoteLoader } = remoteLoader;\nconst { Button, Card, Space, Typography } = antd;\n\nconst { Title } = Typography;\n\nconst SaveUserInfoExample = createWithRemoteLoader({\n modules: ['components-core:Global@PureGlobal']\n})(({ remoteModules }) => {\n const [PureGlobal] = remoteModules;\n return (\n <PureGlobal preset={mockPreset}>\n <UserInfo>\n <Card style={{ maxWidth: 600, margin: '20px auto' }}>\n <Title level={4}>编辑用户信息</Title>\n <Space direction=\"vertical\" style={{ width: '100%' }}>\n <p>点击下方按钮可以编辑用户信息,包括头像、昵称、描述等。</p>\n <SaveUserInfo>\n {({ onClick }) => (\n <Button type=\"primary\" onClick={onClick}>\n 编辑用户信息\n </Button>\n )}\n </SaveUserInfo>\n </Space>\n </Card>\n </UserInfo>\n </PureGlobal>\n );\n});\n\nrender(<SaveUserInfoExample />);\n\n`,\n scope: [{\n name: \"_Authenticate\",\n packageName: \"@components/Authenticate\",\n component: component_11\n},{\n name: \"_mockPreset\",\n packageName: \"@root/mockPreset\",\n component: component_12\n},{\n name: \"remoteLoader\",\n packageName: \"@kne/remote-loader\",\n component: component_13\n},{\n name: \"antd\",\n packageName: \"antd\",\n component: component_14\n}]\n},{\n title: `管理员登录后布局`,\n description: `AfterAdminUserLoginLayout 组件展示管理员登录后的布局,使用超级管理员信息`,\n code: `const { AfterAdminUserLoginLayout } = _Authenticate;\nconst { default: mockPreset } = _mockPreset;\nconst { createWithRemoteLoader } = remoteLoader;\nconst { Typography, Card } = antd;\n\nconst { Title, Paragraph } = Typography;\n\nconst AdminLayoutExample = createWithRemoteLoader({\n modules: ['components-core:Global@PureGlobal']\n})(({ remoteModules }) => {\n const [PureGlobal] = remoteModules;\n return (\n <PureGlobal preset={mockPreset}>\n <AfterAdminUserLoginLayout \n title=\"管理后台\"\n navigation={{ isFixed: false }}\n >\n <Card>\n <Title level={4}>管理员控制台</Title>\n <Paragraph>\n 这是管理员登录后的布局示例。顶部显示管理员信息和系统管理功能入口。\n </Paragraph>\n </Card>\n </AfterAdminUserLoginLayout>\n </PureGlobal>\n );\n});\n\nrender(<AdminLayoutExample />);\n\n`,\n scope: [{\n name: \"_Authenticate\",\n packageName: \"@components/Authenticate\",\n component: component_11\n},{\n name: \"_mockPreset\",\n packageName: \"@root/mockPreset\",\n component: component_12\n},{\n name: \"remoteLoader\",\n packageName: \"@kne/remote-loader\",\n component: component_13\n},{\n name: \"antd\",\n packageName: \"antd\",\n component: component_14\n}]\n},{\n title: `自定义用户登录布局`,\n description: `AfterCustomUserLoginLayout 组件支持自定义用户信息 API,适用于自定义用户系统`,\n code: `const { AfterCustomUserLoginLayout } = _Authenticate;\nconst { default: mockPreset } = _mockPreset;\nconst { createWithRemoteLoader } = remoteLoader;\nconst { Typography, Card } = antd;\n\nconst { Title, Paragraph } = Typography;\n\nconst CustomUserExample = createWithRemoteLoader({\n modules: ['components-core:Global@PureGlobal', 'components-core:Global@usePreset']\n})(({ remoteModules }) => {\n const [PureGlobal, usePreset] = remoteModules;\n \n const InnerComponent = () => {\n const { apis } = usePreset();\n \n return (\n <AfterCustomUserLoginLayout \n title=\"自定义用户中心\" \n api={apis.user.getUserInfo}\n navigation={{ isFixed: false }}\n >\n <Card>\n <Title level={4}>自定义用户系统</Title>\n <Paragraph>\n 这是使用自定义 API 获取用户信息的布局示例。可以灵活配置用户信息接口。\n </Paragraph>\n </Card>\n </AfterCustomUserLoginLayout>\n );\n };\n \n return (\n <PureGlobal preset={mockPreset}>\n <InnerComponent />\n </PureGlobal>\n );\n});\n\nrender(<CustomUserExample />);\n\n`,\n scope: [{\n name: \"_Authenticate\",\n packageName: \"@components/Authenticate\",\n component: component_11\n},{\n name: \"_mockPreset\",\n packageName: \"@root/mockPreset\",\n component: component_12\n},{\n name: \"remoteLoader\",\n packageName: \"@kne/remote-loader\",\n component: component_13\n},{\n name: \"antd\",\n packageName: \"antd\",\n component: component_14\n}]\n}]\n }\n};\nexport default readmeConfig;\n","import * as component_15 from '@components/BizUnit';\nimport * as component_16 from '@root/mockPreset';\nimport * as component_17 from '@kne/remote-loader';\nimport * as component_18 from 'antd';\nconst readmeConfig = {\n name: `BizUnit`,\n summary: `<p>BizUnit 是一个高度封装的 CRUD 业务单元组件,内置列表展示、关键字搜索、筛选、创建、编辑、删除、状态切换等完整功能。通过配置化的方式快速实现标准业务模块,支持自定义列配置、表单字段、操作按钮等,大幅提升开发效率。</p>`,\n \n \n api: `<h1>BizUnit API 文档</h1>\n<h2>BizUnit 主组件</h2>\n<p>高度封装的 CRUD 业务单元组件,内置列表、搜索、筛选、创建、编辑、删除、状态切换等功能。</p>\n<h3>属性</h3>\n<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>apis</td>\n<td>API配置对象</td>\n<td>Object</td>\n<td>{}</td>\n</tr>\n<tr>\n<td>getColumns</td>\n<td>列配置函数,返回列数组</td>\n<td>Function</td>\n<td>-</td>\n</tr>\n<tr>\n<td>getFormInner</td>\n<td>表单内容函数,返回表单JSX</td>\n<td>Function</td>\n<td>-</td>\n</tr>\n<tr>\n<td>getActionList</td>\n<td>操作列表函数,用于自定义操作按钮</td>\n<td>Function</td>\n<td>-</td>\n</tr>\n<tr>\n<td>name</td>\n<td>表格名称(用于缓存等)</td>\n<td>String</td>\n<td>-</td>\n</tr>\n<tr>\n<td>options</td>\n<td>配置选项</td>\n<td>Object</td>\n<td>{}</td>\n</tr>\n<tr>\n<td>filterList</td>\n<td>筛选列表配置</td>\n<td>Array</td>\n<td>[]</td>\n</tr>\n<tr>\n<td>allowKeywordSearch</td>\n<td>是否允许关键字搜索</td>\n<td>Boolean</td>\n<td>true</td>\n</tr>\n<tr>\n<td>topOptionsSize</td>\n<td>顶部操作按钮尺寸</td>\n<td>String</td>\n<td>-</td>\n</tr>\n<tr>\n<td>titleExtra</td>\n<td>标题额外内容</td>\n<td>ReactNode</td>\n<td>null</td>\n</tr>\n<tr>\n<td>children</td>\n<td>自定义渲染函数</td>\n<td>Function</td>\n<td>-</td>\n</tr>\n<tr>\n<td>onMount</td>\n<td>组件挂载回调</td>\n<td>Function</td>\n<td>-</td>\n</tr>\n</tbody>\n</table>\n<h3>apis 配置</h3>\n<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>list</td>\n<td>列表接口配置</td>\n<td>Object/Function</td>\n</tr>\n<tr>\n<td>create</td>\n<td>创建接口配置</td>\n<td>Object/Function</td>\n</tr>\n<tr>\n<td>save</td>\n<td>编辑保存接口配置</td>\n<td>Object/Function</td>\n</tr>\n<tr>\n<td>remove</td>\n<td>删除接口配置</td>\n<td>Object/Function</td>\n</tr>\n<tr>\n<td>setStatus</td>\n<td>状态切换接口配置</td>\n<td>Object/Function</td>\n</tr>\n</tbody>\n</table>\n<h3>options 配置</h3>\n<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>bizName</td>\n<td>业务名称(用于国际化提示)</td>\n<td>String</td>\n<td>''</td>\n</tr>\n<tr>\n<td>createButtonProps</td>\n<td>创建按钮属性</td>\n<td>Object</td>\n<td>{ children: '添加', type: 'primary' }</td>\n</tr>\n<tr>\n<td>editButtonProps</td>\n<td>编辑按钮属性</td>\n<td>Object</td>\n<td>{ children: '编辑' }</td>\n</tr>\n<tr>\n<td>removeButtonProps</td>\n<td>删除按钮属性</td>\n<td>Object</td>\n<td>{ children: '删除' }</td>\n</tr>\n<tr>\n<td>openButtonProps</td>\n<td>开启按钮属性</td>\n<td>Object</td>\n<td>{ children: '开启' }</td>\n</tr>\n<tr>\n<td>closeButtonProps</td>\n<td>关闭按钮属性</td>\n<td>Object</td>\n<td>{ children: '关闭' }</td>\n</tr>\n<tr>\n<td>tableProps</td>\n<td>表格属性</td>\n<td>Object</td>\n<td>{ pagination: { paramsType: 'params' } }</td>\n</tr>\n<tr>\n<td>keywordFilterName</td>\n<td>关键字筛选字段名</td>\n<td>String</td>\n<td>'keyword'</td>\n</tr>\n<tr>\n<td>keywordFilterLabel</td>\n<td>关键字筛选标签</td>\n<td>String</td>\n<td>'关键字'</td>\n</tr>\n<tr>\n<td>formSize</td>\n<td>表单弹窗尺寸</td>\n<td>String</td>\n<td>'small'</td>\n</tr>\n<tr>\n<td>formProps</td>\n<td>表单属性</td>\n<td>Object/Function</td>\n<td>-</td>\n</tr>\n<tr>\n<td>formModalProps</td>\n<td>表单弹窗属性</td>\n<td>Object</td>\n<td>-</td>\n</tr>\n<tr>\n<td>createFormModalProps</td>\n<td>创建表单弹窗属性</td>\n<td>Object</td>\n<td>-</td>\n</tr>\n<tr>\n<td>editFormModalProps</td>\n<td>编辑表单弹窗属性</td>\n<td>Object</td>\n<td>-</td>\n</tr>\n<tr>\n<td>openStatus</td>\n<td>开启状态值</td>\n<td>String</td>\n<td>'open'</td>\n</tr>\n<tr>\n<td>closedStatus</td>\n<td>关闭状态值</td>\n<td>String</td>\n<td>'closed'</td>\n</tr>\n<tr>\n<td>removeMessage</td>\n<td>删除确认提示信息</td>\n<td>String</td>\n<td>-</td>\n</tr>\n<tr>\n<td>closeMessage</td>\n<td>关闭确认提示信息</td>\n<td>String</td>\n<td>-</td>\n</tr>\n<tr>\n<td>saveData</td>\n<td>编辑时数据处理函数</td>\n<td>Function</td>\n<td>-</td>\n</tr>\n<tr>\n<td>getFilterValue</td>\n<td>筛选值转换函数</td>\n<td>Function</td>\n<td>-</td>\n</tr>\n</tbody>\n</table>\n<h3>getColumns 函数</h3>\n<p>返回列配置数组,常用列类型:</p>\n<table>\n<thead>\n<tr>\n<th>类型</th>\n<th>说明</th>\n<th>特殊配置</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>serialNumber</td>\n<td>序号列</td>\n<td>primary, hover</td>\n</tr>\n<tr>\n<td>mainInfo</td>\n<td>主信息列</td>\n<td>primary, hover</td>\n</tr>\n<tr>\n<td>tag</td>\n<td>标签列</td>\n<td>valueOf 返回 { type, text }</td>\n</tr>\n<tr>\n<td>description</td>\n<td>描述列</td>\n<td>ellipsis</td>\n</tr>\n<tr>\n<td>avatar</td>\n<td>头像列</td>\n<td>valueOf 返回 { id }</td>\n</tr>\n<tr>\n<td>datetime</td>\n<td>日期时间列</td>\n<td>format</td>\n</tr>\n<tr>\n<td>other</td>\n<td>其他普通列</td>\n<td>-</td>\n</tr>\n</tbody>\n</table>\n<h3>getFormInner 函数</h3>\n<table>\n<thead>\n<tr>\n<th>参数</th>\n<th>说明</th>\n<th>类型</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>action</td>\n<td>操作类型</td>\n<td>'create' | 'edit'</td>\n</tr>\n<tr>\n<td>apis</td>\n<td>API配置对象</td>\n<td>Object</td>\n</tr>\n<tr>\n<td>options</td>\n<td>配置选项</td>\n<td>Object</td>\n</tr>\n</tbody>\n</table>\n<h3>getActionList 函数</h3>\n<p>返回操作按钮数组,支持以下格式:</p>\n<pre><code class=\"language-javascript\">// 使用内置按钮\n{ name: 'remove', reset: (config) =&gt; ({ ...config, hidden: true }) }\n\n// 自定义按钮\n{ buttonComponent: CustomComponent, children: '按钮文字', hidden: false }\n</code></pre>\n<p><strong>内置按钮名称:</strong></p>\n<ul>\n<li><code>remove</code> - 删除按钮</li>\n<li><code>save</code> - 编辑按钮</li>\n<li><code>setStatusOpen</code> - 开启按钮</li>\n<li><code>setStatusClose</code> - 关闭按钮</li>\n</ul>\n<hr>\n<h2>Actions 子组件</h2>\n<p>操作按钮组件,用于自定义表格操作列。</p>\n<h3>属性</h3>\n<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>moreType</td>\n<td>更多按钮类型</td>\n<td>String</td>\n<td>'link'</td>\n</tr>\n<tr>\n<td>itemClassName</td>\n<td>按钮项样式类名</td>\n<td>String</td>\n<td>-</td>\n</tr>\n<tr>\n<td>getActionList</td>\n<td>操作列表函数</td>\n<td>Function</td>\n<td>-</td>\n</tr>\n<tr>\n<td>getFormInner</td>\n<td>表单内容函数</td>\n<td>Function</td>\n<td>-</td>\n</tr>\n<tr>\n<td>data</td>\n<td>当前行数据</td>\n<td>Object</td>\n<td>-</td>\n</tr>\n<tr>\n<td>apis</td>\n<td>API配置对象</td>\n<td>Object</td>\n<td>-</td>\n</tr>\n<tr>\n<td>options</td>\n<td>配置选项</td>\n<td>Object</td>\n<td>-</td>\n</tr>\n<tr>\n<td>onSuccess</td>\n<td>操作成功回调</td>\n<td>Function</td>\n<td>-</td>\n</tr>\n<tr>\n<td>children</td>\n<td>自定义渲染函数</td>\n<td>Function</td>\n<td>-</td>\n</tr>\n</tbody>\n</table>\n<hr>\n<h2>TablePageRender 子组件</h2>\n<p>表格页面渲染组件,用于页面级别的表格展示。</p>\n<h3>属性</h3>\n<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>filter</td>\n<td>筛选配置</td>\n<td>Object</td>\n</tr>\n<tr>\n<td>titleExtra</td>\n<td>标题额外内容</td>\n<td>ReactNode</td>\n</tr>\n<tr>\n<td>tableOptions</td>\n<td>表格配置</td>\n<td>Object</td>\n</tr>\n</tbody>\n</table>`,\n example: {\n isFull: false,\n className: ``,\n style: ``,\n list: [{\n title: `基础用法`,\n description: `展示 BizUnit 的基本使用方式,包含完整的 CRUD 功能:列表展示、关键字搜索、创建、编辑、删除和状态切换。通过配置 apis、getColumns、getFormInner 等属性快速实现业务模块。`,\n code: `const { default: BizUnit } = _BizUnit;\nconst { default: preset } = _mockPreset;\nconst { createWithRemoteLoader } = remoteLoader;\nconst { useState } = React;\n\nconst BaseExample = createWithRemoteLoader({\n modules: ['components-core:Global@PureGlobal', 'components-core:FormInfo']\n})(({ remoteModules }) => {\n const [PureGlobal, FormInfo] = remoteModules;\n const { Input, TextArea } = FormInfo.fields;\n const [refreshKey, setRefreshKey] = useState(0);\n\n const getColumns = () => [\n { name: 'id', title: 'ID', type: 'serialNumber', primary: false, hover: false },\n { name: 'name', title: '角色名称', type: 'mainInfo', primary: false, hover: false },\n { name: 'code', title: '角色编码' },\n { \n name: 'status', \n title: '状态', \n type: 'tag',\n valueOf: ({ status }) => ({\n type: status === 'open' ? 'success' : 'default',\n text: status === 'open' ? '已启用' : '已禁用'\n })\n },\n { name: 'description', title: '描述', type: 'description', ellipsis: true }\n ];\n\n const getFormInner = ({ action }) => (\n <FormInfo column={1} list={[\n <Input name=\"name\" label=\"角色名称\" rule=\"REQ LEN-2-50\" />,\n <Input name=\"code\" label=\"角色编码\" rule=\"REQ LEN-2-50\" disabled={action === 'edit'} />,\n <TextArea name=\"description\" label=\"描述\" />\n ]} />\n );\n\n const apis = {\n list: {\n loader: () => ({\n pageData: [\n { id: 1, name: '系统管理员', code: 'admin', status: 'open', description: '拥有系统所有权限,可进行系统配置和用户管理' },\n { id: 2, name: '部门经理', code: 'manager', status: 'open', description: '管理本部门人员和项目,审批部门内事务' },\n { id: 3, name: '普通员工', code: 'employee', status: 'closed', description: '基础访问权限,可查看和编辑个人相关数据' },\n { id: 4, name: '访客', code: 'guest', status: 'open', description: '只读权限,仅可查看公开信息' }\n ],\n totalCount: 4\n })\n },\n create: { loader: () => ({ code: 0, data: { id: Date.now() } }) },\n save: { loader: () => ({ code: 0 }) },\n remove: { loader: () => ({ code: 0 }) },\n setStatus: { loader: () => ({ code: 0 }) }\n };\n\n return (\n <PureGlobal preset={{\n ...preset,\n apis: {\n role: apis\n }\n }}>\n <BizUnit\n key={refreshKey}\n name=\"role-list\"\n apis={apis}\n getColumns={getColumns}\n getFormInner={getFormInner}\n options={{ bizName: '角色' }}\n />\n </PureGlobal>\n );\n});\n\nrender(<BaseExample />);\n\n`,\n scope: [{\n name: \"_BizUnit\",\n packageName: \"@components/BizUnit\",\n component: component_15\n},{\n name: \"_mockPreset\",\n packageName: \"@root/mockPreset\",\n component: component_16\n},{\n name: \"remoteLoader\",\n packageName: \"@kne/remote-loader\",\n component: component_17\n}]\n},{\n title: `自定义操作按钮`,\n description: `通过 getActionList 函数自定义操作按钮。支持重置内置按钮配置(如根据条件隐藏系统类型角色的删除按钮),以及添加自定义操作按钮组件。`,\n code: `const { default: BizUnit } = _BizUnit;\nconst { default: preset } = _mockPreset;\nconst { createWithRemoteLoader } = remoteLoader;\n\nconst CustomAction = createWithRemoteLoader({\n modules: ['components-core:Modal@useModal']\n})(({ remoteModules, data, ...props }) => {\n const [useModal] = remoteModules;\n const modal = useModal();\n return (\n <a {...props} onClick={() => {\n modal({\n title: '查看权限',\n size: 'small',\n children: \\`当前角色【\\${data.name}】拥有以下权限:\\n- 用户管理\\n- 角色管理\\n- 系统设置\\`\n });\n }}>\n 查看权限\n </a>\n );\n});\n\nconst CustomActionsExample = createWithRemoteLoader({\n modules: ['components-core:Global@PureGlobal', 'components-core:FormInfo']\n})(({ remoteModules }) => {\n const [PureGlobal, FormInfo] = remoteModules;\n const { Input, TextArea } = FormInfo.fields;\n\n const getColumns = () => [\n { name: 'id', title: 'ID', type: 'serialNumber', primary: false, hover: false },\n { name: 'name', title: '角色名称', type: 'mainInfo', primary: false, hover: false },\n { name: 'code', title: '角色编码' },\n {\n name: 'type',\n title: '类型',\n type: 'tag',\n valueOf: ({ type }) => ({\n type: type === 'system' ? 'default' : 'info',\n text: type === 'system' ? '系统' : '自定义'\n })\n },\n { name: 'description', title: '描述', type: 'description', ellipsis: true }\n ];\n\n const getFormInner = ({ action }) => (\n <FormInfo column={1} list={[\n <Input name=\"name\" label=\"角色名称\" rule=\"REQ LEN-2-50\" />,\n <Input name=\"code\" label=\"角色编码\" rule=\"REQ LEN-2-50\" disabled={action === 'edit'} />,\n <TextArea name=\"description\" label=\"描述\" />\n ]} />\n );\n\n const getActionList = ({ data, ...props }) => {\n return ['remove', 'setStatusOpen', 'setStatusClose', 'save']\n .map(name => ({\n name,\n reset: ({ hidden }) => ({ name, hidden: hidden || data.type === 'system' })\n }))\n .concat([\n {\n ...props,\n buttonComponent: CustomAction,\n data,\n hidden: data.code === 'admin'\n }\n ]);\n };\n\n const apis = {\n list: {\n loader: () => ({\n pageData: [\n { id: 1, name: '系统管理员', code: 'admin', type: 'system', status: 'open', description: '拥有系统所有权限' },\n { id: 2, name: '部门经理', code: 'manager', type: 'custom', status: 'open', description: '管理本部门人员' },\n { id: 3, name: '普通员工', code: 'employee', type: 'custom', status: 'closed', description: '基础访问权限' },\n { id: 4, name: '访客', code: 'guest', type: 'custom', status: 'open', description: '只读权限' }\n ],\n totalCount: 4\n })\n },\n create: { loader: () => ({ code: 0 }) },\n save: { loader: () => ({ code: 0 }) },\n remove: { loader: () => ({ code: 0 }) },\n setStatus: { loader: () => ({ code: 0 }) }\n };\n\n return (\n <PureGlobal preset={{ ...preset, apis: { role: apis } }}>\n <BizUnit\n name=\"role-list\"\n apis={apis}\n getColumns={getColumns}\n getFormInner={getFormInner}\n getActionList={getActionList}\n options={{ bizName: '角色' }}\n />\n </PureGlobal>\n );\n});\n\nrender(<CustomActionsExample />);\n\n`,\n scope: [{\n name: \"_BizUnit\",\n packageName: \"@components/BizUnit\",\n component: component_15\n},{\n name: \"_mockPreset\",\n packageName: \"@root/mockPreset\",\n component: component_16\n},{\n name: \"remoteLoader\",\n packageName: \"@kne/remote-loader\",\n component: component_17\n}]\n},{\n title: `带筛选条件`,\n description: `通过 filterList 属性添加筛选条件,配合 Filter 组件的 SelectItem 实现下拉筛选。适用于需要多条件筛选的业务场景。`,\n code: `const { default: BizUnit } = _BizUnit;\nconst { default: preset } = _mockPreset;\nconst { createWithRemoteLoader } = remoteLoader;\n\nconst WithFilterExample = createWithRemoteLoader({\n modules: ['components-core:Global@PureGlobal', 'components-core:FormInfo', 'components-core:Filter']\n})(({ remoteModules }) => {\n const [PureGlobal, FormInfo, Filter] = remoteModules;\n const { Input, TextArea, SuperSelect } = FormInfo.fields;\n const { SuperSelectFilterItem } = Filter.fields;\n\n const getColumns = () => [\n { name: 'id', title: 'ID', type: 'serialNumber', primary: false, hover: false },\n { name: 'name', title: '部门名称', type: 'mainInfo', primary: false, hover: false },\n { name: 'code', title: '部门编码' },\n {\n name: 'status',\n title: '状态',\n type: 'tag',\n valueOf: ({ status }) => ({\n type: status === 'active' ? 'success' : 'warning',\n text: status === 'active' ? '运营中' : '已暂停'\n })\n },\n { name: 'memberCount', title: '成员数量' },\n { name: 'description', title: '描述', type: 'description', ellipsis: true }\n ];\n\n const getFormInner = ({ action }) => (\n <FormInfo\n column={1}\n list={[\n <Input name=\"name\" label=\"部门名称\" rule=\"REQ LEN-2-50\" />,\n <Input name=\"code\" label=\"部门编码\" rule=\"REQ LEN-2-50\" disabled={action === 'edit'} />,\n <SuperSelect\n name=\"parentId\"\n label=\"上级部门\"\n api={{ loader: () => ({ pageData: [{ id: 1, name: '总公司' }], totalCount: 1 }) }}\n valueKey=\"id\"\n labelKey=\"name\"\n single\n />,\n <TextArea name=\"description\" label=\"描述\" />\n ]}\n />\n );\n\n const filterList = [\n [\n <SuperSelectFilterItem\n name=\"status\"\n label=\"状态\"\n options={[\n { value: 'active', label: '运营中' },\n { value: 'paused', label: '已暂停' }\n ]}\n />,\n <SuperSelectFilterItem\n name=\"type\"\n label=\"类型\"\n options={[\n { value: 'tech', label: '技术部门' },\n { value: 'business', label: '业务部门' },\n { value: 'support', label: '支持部门' }\n ]}\n />\n ]\n ];\n\n const apis = {\n list: {\n loader: () => ({\n pageData: [\n { id: 1, name: '技术研发部', code: 'tech', status: 'active', memberCount: 45, description: '负责产品技术研发和创新' },\n { id: 2, name: '产品设计部', code: 'design', status: 'active', memberCount: 18, description: '负责产品UI/UX设计' },\n { id: 3, name: '市场营销部', code: 'marketing', status: 'active', memberCount: 25, description: '负责市场推广和品牌建设' },\n { id: 4, name: '客户服务部', code: 'service', status: 'paused', memberCount: 30, description: '负责客户支持和售后服务' },\n { id: 5, name: '人力资源部', code: 'hr', status: 'active', memberCount: 12, description: '负责人才招聘和员工关系' }\n ],\n totalCount: 5\n })\n },\n create: { loader: () => ({ code: 0 }) },\n save: { loader: () => ({ code: 0 }) },\n remove: { loader: () => ({ code: 0 }) },\n setStatus: { loader: () => ({ code: 0 }) }\n };\n\n return (\n <PureGlobal preset={{ ...preset, apis: { dept: apis } }}>\n <BizUnit\n name=\"dept-list\"\n apis={apis}\n getColumns={getColumns}\n getFormInner={getFormInner}\n filterList={filterList}\n options={{ bizName: '部门' }}\n />\n </PureGlobal>\n );\n});\n\nrender(<WithFilterExample />);\n\n`,\n scope: [{\n name: \"_BizUnit\",\n packageName: \"@components/BizUnit\",\n component: component_15\n},{\n name: \"_mockPreset\",\n packageName: \"@root/mockPreset\",\n component: component_16\n},{\n name: \"remoteLoader\",\n packageName: \"@kne/remote-loader\",\n component: component_17\n}]\n},{\n title: `状态控制配置`,\n description: `通过 options 配置自定义状态控制按钮。支持自定义状态值、按钮文案和确认提示信息,适用于不同业务场景的状态管理。`,\n code: `const { default: BizUnit } = _BizUnit;\nconst { default: preset } = _mockPreset;\nconst { createWithRemoteLoader } = remoteLoader;\n\nconst StatusControlExample = createWithRemoteLoader({\n modules: ['components-core:Global@PureGlobal', 'components-core:FormInfo']\n})(({ remoteModules }) => {\n const [PureGlobal, FormInfo] = remoteModules;\n const { Input, TextArea } = FormInfo.fields;\n\n const getColumns = () => [\n { name: 'id', title: 'ID', type: 'serialNumber', primary: false, hover: false },\n { name: 'name', title: '项目名称', type: 'mainInfo', primary: false, hover: false },\n { name: 'code', title: '项目编码' },\n {\n name: 'status',\n title: '状态',\n type: 'tag',\n valueOf: ({ status }) => {\n const statusMap = {\n active: { type: 'success', text: '进行中' },\n paused: { type: 'warning', text: '已暂停' },\n completed: { type: 'default', text: '已完成' }\n };\n return statusMap[status] || { type: 'default', text: status };\n }\n },\n { name: 'progress', title: '进度' },\n { name: 'description', title: '描述', type: 'description', ellipsis: true }\n ];\n\n const getFormInner = ({ action }) => (\n <FormInfo column={1} list={[\n <Input name=\"name\" label=\"项目名称\" rule=\"REQ LEN-2-100\" />,\n <Input name=\"code\" label=\"项目编码\" rule=\"REQ LEN-2-50\" disabled={action === 'edit'} />,\n <TextArea name=\"description\" label=\"项目描述\" />\n ]} />\n );\n\n const apis = {\n list: {\n loader: () => ({\n pageData: [\n { id: 1, name: '企业官网重构', code: 'web-rebuild', status: 'active', progress: '75%', description: '全新企业官网设计与开发' },\n { id: 2, name: '移动端APP开发', code: 'mobile-app', status: 'active', progress: '45%', description: 'iOS和Android双端应用开发' },\n { id: 3, name: '数据分析平台', code: 'data-platform', status: 'paused', progress: '30%', description: '企业级数据分析与可视化平台' },\n { id: 4, name: '客户管理系统', code: 'crm', status: 'completed', progress: '100%', description: '客户关系管理系统升级' },\n { id: 5, name: '内部OA系统', code: 'oa-system', status: 'active', progress: '60%', description: '办公自动化系统建设' }\n ],\n totalCount: 5\n })\n },\n create: { loader: () => ({ code: 0 }) },\n save: { loader: () => ({ code: 0 }) },\n remove: { loader: () => ({ code: 0 }) },\n setStatus: {\n loader: () => ({ code: 0 })\n }\n };\n\n return (\n <PureGlobal preset={{ ...preset, apis: { project: apis } }}>\n <BizUnit\n name=\"project-list\"\n apis={apis}\n getColumns={getColumns}\n getFormInner={getFormInner}\n options={{\n bizName: '项目',\n openStatus: 'active',\n closedStatus: 'paused',\n openButtonProps: { children: '启动' },\n closeButtonProps: { children: '暂停' },\n closeMessage: '确定要暂停该项目吗?暂停后项目将停止所有自动任务。'\n }}\n />\n </PureGlobal>\n );\n});\n\nrender(<StatusControlExample />);\n\n`,\n scope: [{\n name: \"_BizUnit\",\n packageName: \"@components/BizUnit\",\n component: component_15\n},{\n name: \"_mockPreset\",\n packageName: \"@root/mockPreset\",\n component: component_16\n},{\n name: \"remoteLoader\",\n packageName: \"@kne/remote-loader\",\n component: component_17\n}]\n},{\n title: `Actions 组件单独使用`,\n description: `Actions 组件可以单独使用,用于自定义场景下的操作按钮区域。需要包裹 PureGlobal 提供国际化上下文。展示如何在不使用 BizUnit 完整功能时,单独使用操作按钮组件。`,\n code: `const { default: BizUnit, Actions } = _BizUnit;\nconst { default: preset } = _mockPreset;\nconst { createWithRemoteLoader } = remoteLoader;\nconst { Flex, Tag } = antd;\n\n// Actions 组件单独使用示例\nconst ActionsExample = createWithRemoteLoader({\n modules: ['components-core:Global@PureGlobal', 'components-core:FormInfo']\n})(({ remoteModules }) => {\n const [PureGlobal, FormInfo] = remoteModules;\n \n const mockData = { id: 1, name: '测试角色', status: 'open' };\n \n const mockApis = {\n save: { loader: () => ({ code: 0 }) },\n remove: { loader: () => ({ code: 0 }) },\n setStatus: { loader: () => ({ code: 0 }) }\n };\n\n const mockOptions = {\n bizName: '角色',\n openStatus: 'open',\n closedStatus: 'closed'\n };\n\n const mockGetFormInner = () => (\n <FormInfo column={1} list={[\n <FormInfo.fields.Input name=\"name\" label=\"名称\" rule=\"REQ\" />\n ]} />\n );\n\n return (\n <PureGlobal preset={preset}>\n <Flex vertical gap={16}>\n <div>Actions 组件可以单独使用,用于自定义操作按钮区域:</div>\n <Flex gap={8} align=\"center\">\n <Tag>操作示例:</Tag>\n <Actions\n moreType=\"link\"\n data={mockData}\n apis={mockApis}\n options={mockOptions}\n getFormInner={mockGetFormInner}\n onSuccess={() => console.log('操作成功')}\n />\n </Flex>\n <Flex gap={8} align=\"center\">\n <Tag>已关闭状态:</Tag>\n <Actions\n moreType=\"link\"\n data={{ id: 2, name: '已禁用角色', status: 'closed' }}\n apis={mockApis}\n options={mockOptions}\n getFormInner={mockGetFormInner}\n onSuccess={() => console.log('操作成功')}\n />\n </Flex>\n </Flex>\n </PureGlobal>\n );\n});\n\nrender(<ActionsExample />);\n\n`,\n scope: [{\n name: \"_BizUnit\",\n packageName: \"@components/BizUnit\",\n component: component_15\n},{\n name: \"_mockPreset\",\n packageName: \"@root/mockPreset\",\n component: component_16\n},{\n name: \"remoteLoader\",\n packageName: \"@kne/remote-loader\",\n component: component_17\n},{\n name: \"antd\",\n packageName: \"antd\",\n component: component_18\n}]\n}]\n }\n};\nexport default readmeConfig;\n","import * as component_8 from '@components/Editor';\nimport * as component_9 from '@kne/remote-loader';\nimport * as component_10 from '@root/mockPreset';\nconst readmeConfig = {\n name: `Editor`,\n summary: `<p>富文本编辑器字段组件,基于 CKEditor 封装,作为 FormInfo 的字段组件使用,支持文本格式化、图片上传、表格插入等富文本编辑功能。</p>`,\n \n \n api: `<h2>Editor 组件</h2>\n<p>富文本编辑器字段组件,基于 CKEditor 封装,作为 FormInfo 的表单字段组件使用,支持富文本编辑、图片上传等功能。</p>\n<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>name</td>\n<td>字段名(必填)</td>\n<td>string</td>\n<td>-</td>\n</tr>\n<tr>\n<td>label</td>\n<td>字段标签</td>\n<td>string | ReactNode</td>\n<td>-</td>\n</tr>\n<tr>\n<td>rule</td>\n<td>校验规则,如 \"REQ\" 表示必填</td>\n<td>string</td>\n<td>-</td>\n</tr>\n<tr>\n<td>placeholder</td>\n<td>占位符文本</td>\n<td>string</td>\n<td>-</td>\n</tr>\n<tr>\n<td>disabled</td>\n<td>是否禁用</td>\n<td>boolean</td>\n<td>false</td>\n</tr>\n<tr>\n<td>readOnly</td>\n<td>是否只读</td>\n<td>boolean</td>\n<td>false</td>\n</tr>\n<tr>\n<td>value</td>\n<td>编辑器内容(受控)</td>\n<td>string</td>\n<td>-</td>\n</tr>\n<tr>\n<td>defaultValue</td>\n<td>默认内容(非受控)</td>\n<td>string</td>\n<td>-</td>\n</tr>\n<tr>\n<td>onChange</td>\n<td>内容变化回调</td>\n<td>function(value)</td>\n<td>-</td>\n</tr>\n<tr>\n<td>height</td>\n<td>编辑器高度</td>\n<td>number | string</td>\n<td>-</td>\n</tr>\n<tr>\n<td>maxLength</td>\n<td>最大字符长度</td>\n<td>number</td>\n<td>-</td>\n</tr>\n<tr>\n<td>tips</td>\n<td>提示信息</td>\n<td>string | ReactNode</td>\n<td>-</td>\n</tr>\n<tr>\n<td>block</td>\n<td>是否占满整行</td>\n<td>boolean</td>\n<td>false</td>\n</tr>\n<tr>\n<td>labelHidden</td>\n<td>是否隐藏标签</td>\n<td>boolean</td>\n<td>false</td>\n</tr>\n<tr>\n<td>display</td>\n<td>条件显示函数</td>\n<td>function({ formData }) =&gt; boolean</td>\n<td>-</td>\n</tr>\n</tbody>\n</table>\n<h2>使用说明</h2>\n<h3>作为表单字段使用</h3>\n<p>Editor 组件必须在 FormInfo 的 Form 组件中使用,作为独立的字段组件导入:</p>\n<pre><code class=\"language-jsx\">import { createWithRemoteLoader } from '@kne/remote-loader';\nimport Editor from '@components/Editor';\n\nconst FormExample = createWithRemoteLoader({\n modules: ['components-core:FormInfo']\n})(({ remoteModules }) =&gt; {\n const [FormInfo] = remoteModules;\n const { Form, SubmitButton } = FormInfo;\n\n return (\n &lt;Form onSubmit={(data) =&gt; console.log(data)}&gt;\n &lt;Editor \n name=\"content\" \n label=\"内容\" \n rule=\"REQ\" \n placeholder=\"请输入内容\"\n /&gt;\n &lt;SubmitButton&gt;提交&lt;/SubmitButton&gt;\n &lt;/Form&gt;\n );\n});\n</code></pre>\n<h3>图片上传功能</h3>\n<p>Editor 组件内置图片上传功能,通过 <code>apis.file.uploadForEditor</code> 配置上传接口。需要在全局 preset 中配置相应的 API。</p>\n<h3>富文本功能</h3>\n<p>支持常见的富文本编辑功能:</p>\n<ul>\n<li>文本格式化(加粗、斜体、下划线、删除线)</li>\n<li>段落格式(标题、引用、代码块)</li>\n<li>列表(有序列表、无序列表)</li>\n<li>对齐方式</li>\n<li>链接插入</li>\n<li>图片插入(需要配置上传接口)</li>\n<li>表格插入</li>\n<li>撤销/重做</li>\n</ul>\n<h2>依赖模块</h2>\n<ul>\n<li><code>components-thirdparty:CKEditor</code> - CKEditor 编辑器核心</li>\n<li><code>components-core:Global@usePreset</code> - 全局配置(用于获取上传接口)</li>\n</ul>`,\n example: {\n isFull: false,\n className: ``,\n style: ``,\n list: [{\n title: `基础用法`,\n description: `展示 Editor 组件的基本使用方式,包含必填校验和高度设置`,\n code: `const { default: Editor } = _Editor;\nconst { createWithRemoteLoader } = remoteLoader;\n\nconst BaseExample = createWithRemoteLoader({\n modules: ['components-core:FormInfo', 'components-core:Global@PureGlobal']\n})(({ remoteModules }) => {\n const [FormInfo, PureGlobal] = remoteModules;\n const { Form, SubmitButton } = FormInfo;\n\n return (\n <PureGlobal>\n <Form\n onSubmit={(data) => {\n console.log('提交内容:', data);\n }}\n >\n <Editor\n name=\"content\"\n label=\"文章内容\"\n rule=\"REQ\"\n placeholder=\"请输入文章内容...\"\n height={300}\n />\n <div style={{ marginTop: 16 }}>\n <SubmitButton>提交</SubmitButton>\n </div>\n </Form>\n </PureGlobal>\n );\n});\n\nrender(<BaseExample />);\n\n`,\n scope: [{\n name: \"_Editor\",\n packageName: \"@components/Editor\",\n component: component_8\n},{\n name: \"remoteLoader\",\n packageName: \"@kne/remote-loader\",\n component: component_9\n}]\n},{\n title: `表单字段使用`,\n description: `在表单中配合其他字段组件使用 Editor,展示完整的文章编辑表单场景`,\n code: `const { default: Editor } = _Editor;\nconst { createWithRemoteLoader } = remoteLoader;\nconst { default: mockPreset } = _mockPreset;\n\nconst FormFieldExample = createWithRemoteLoader({\n modules: ['components-core:FormInfo', 'components-core:Global@PureGlobal']\n})(({ remoteModules }) => {\n const [FormInfo, PureGlobal] = remoteModules;\n const { Form, SubmitButton, CancelButton, fields } = FormInfo;\n const { Input, Select } = fields;\n\n return (\n <PureGlobal preset={mockPreset}>\n <Form\n data={{\n title: '如何使用富文本编辑器',\n category: 'tutorial',\n content: '<h2>欢迎使用富文本编辑器</h2><p>这是一个功能强大的富文本编辑器组件。</p><ul><li>支持文本格式化</li><li>支持图片上传</li><li>支持表格插入</li></ul>'\n }}\n onSubmit={(data) => {\n console.log('文章数据:', data);\n }}\n >\n <FormInfo\n title=\"文章信息\"\n column={2}\n list={[\n <Input name=\"title\" label=\"文章标题\" rule=\"REQ\" placeholder=\"请输入文章标题\" />,\n <Select\n name=\"category\"\n label=\"文章分类\"\n rule=\"REQ\"\n options={[\n { label: '教程', value: 'tutorial' },\n { label: '技术分享', value: 'tech' },\n { label: '产品介绍', value: 'product' },\n { label: '新闻动态', value: 'news' }\n ]}\n />\n ]}\n />\n <Editor\n name=\"content\"\n label=\"文章内容\"\n rule=\"REQ\"\n placeholder=\"请输入文章内容,支持富文本格式...\"\n height={400}\n block\n />\n <div style={{ marginTop: 24, textAlign: 'center' }}>\n <CancelButton style={{ marginRight: 8 }}>取消</CancelButton>\n <SubmitButton type=\"primary\">发布文章</SubmitButton>\n </div>\n </Form>\n </PureGlobal>\n );\n});\n\nrender(<FormFieldExample />);\n\n`,\n scope: [{\n name: \"_Editor\",\n packageName: \"@components/Editor\",\n component: component_8\n},{\n name: \"_mockPreset\",\n packageName: \"@root/mockPreset\",\n component: component_10\n},{\n name: \"remoteLoader\",\n packageName: \"@kne/remote-loader\",\n component: component_9\n}]\n},{\n title: `只读模式`,\n description: `展示 Editor 的只读模式,通常用于内容预览或详情展示`,\n code: `const { default: Editor } = _Editor;\nconst { createWithRemoteLoader } = remoteLoader;\n\nconst ReadonlyExample = createWithRemoteLoader({\n modules: ['components-core:FormInfo', 'components-core:Global@PureGlobal']\n})(({ remoteModules }) => {\n const [FormInfo, PureGlobal] = remoteModules;\n const { Form, fields } = FormInfo;\n const { Input } = fields;\n\n const articleContent = \\`\n<h2>产品发布公告</h2>\n<p>我们很高兴地宣布,新版本的富文本编辑器已经上线!</p>\n<h3>主要功能</h3>\n<ul>\n <li><strong>文本格式化</strong>:支持加粗、斜体、下划线等样式</li>\n <li><strong>段落排版</strong>:标题、引用、代码块等</li>\n <li><strong>列表支持</strong>:有序列表和无序列表</li>\n <li><strong>图片上传</strong>:支持拖拽或粘贴上传图片</li>\n <li><strong>表格插入</strong>:方便地创建和编辑表格</li>\n</ul>\n<h3>使用示例</h3>\n<blockquote>\n <p>这是一个引用文本,通常用于强调重要内容。</p>\n</blockquote>\n<p>感谢您的使用,如有问题请联系客服。</p>\n \\`.trim();\n\n return (\n <PureGlobal>\n <Form data={{ title: '产品发布公告', content: articleContent }}>\n <FormInfo\n title=\"文章详情(只读模式)\"\n column={1}\n list={[\n <Input name=\"title\" label=\"文章标题\" disabled />\n ]}\n />\n <Editor name=\"content\" label=\"文章内容\" readOnly height={400} block />\n </Form>\n </PureGlobal>\n );\n});\n\nrender(<ReadonlyExample />);\n\n`,\n scope: [{\n name: \"_Editor\",\n packageName: \"@components/Editor\",\n component: component_8\n},{\n name: \"remoteLoader\",\n packageName: \"@kne/remote-loader\",\n component: component_9\n}]\n},{\n title: `表单校验`,\n description: `展示 Editor 在表单中的校验功能,支持必填和长度校验`,\n code: `const { default: Editor } = _Editor;\nconst { createWithRemoteLoader } = remoteLoader;\n\nconst ValidationExample = createWithRemoteLoader({\n modules: ['components-core:FormInfo', 'components-core:Global@PureGlobal']\n})(({ remoteModules }) => {\n const [FormInfo, PureGlobal] = remoteModules;\n const { Form, SubmitButton, fields } = FormInfo;\n const { Input } = fields;\n\n return (\n <PureGlobal>\n <Form\n onSubmit={(data) => {\n console.log('提交数据:', data);\n }}\n >\n <FormInfo\n title=\"带校验规则的表单\"\n column={1}\n list={[\n <Input name=\"title\" label=\"标题\" rule=\"REQ LEN-5-50\" placeholder=\"标题长度5-50个字符\" />\n ]}\n />\n <Editor\n name=\"content\"\n label=\"内容\"\n rule=\"REQ\"\n placeholder=\"请输入内容,必填字段\"\n height={250}\n tips=\"内容为必填项,请输入文章正文\"\n block\n />\n <div style={{ marginTop: 16 }}>\n <SubmitButton>提交</SubmitButton>\n </div>\n </Form>\n </PureGlobal>\n );\n});\n\nrender(<ValidationExample />);\n\n`,\n scope: [{\n name: \"_Editor\",\n packageName: \"@components/Editor\",\n component: component_8\n},{\n name: \"remoteLoader\",\n packageName: \"@kne/remote-loader\",\n component: component_9\n}]\n}]\n }\n};\nexport default readmeConfig;\n","import * as component_19 from '@components/GroupSelect';\nimport * as component_20 from '@root/mockPreset';\nimport * as component_21 from '@kne/remote-loader';\nconst readmeConfig = {\n name: `GroupSelect`,\n summary: `<p>分组标签选择器组件,基于 SuperSelectTableList 封装,支持搜索、分页、添加和删除标签功能,适用于技能标签、分类标签等场景的表单字段。</p>`,\n \n \n api: `<h2>GroupSelect 组件</h2>\n<p>分组标签选择器组件,基于 SuperSelectTableList 封装,用于选择和管理技能标签或其他分组数据,支持搜索、分页、添加和删除功能。</p>\n<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>name</td>\n<td>字段名(必填)</td>\n<td>string</td>\n<td>-</td>\n</tr>\n<tr>\n<td>label</td>\n<td>字段标签</td>\n<td>string | ReactNode</td>\n<td>-</td>\n</tr>\n<tr>\n<td>rule</td>\n<td>校验规则</td>\n<td>string</td>\n<td>-</td>\n</tr>\n<tr>\n<td>apis</td>\n<td>API 配置对象</td>\n<td>object</td>\n<td>-</td>\n</tr>\n<tr>\n<td>apis.list</td>\n<td>列表查询接口配置(必填)</td>\n<td>object</td>\n<td>-</td>\n</tr>\n<tr>\n<td>apis.create</td>\n<td>创建标签接口配置(传入则显示添加按钮)</td>\n<td>object</td>\n<td>-</td>\n</tr>\n<tr>\n<td>apis.remove</td>\n<td>删除标签接口配置(传入则显示删除按钮)</td>\n<td>object</td>\n<td>-</td>\n</tr>\n<tr>\n<td>valueKey</td>\n<td>值字段名</td>\n<td>string</td>\n<td>'code'</td>\n</tr>\n<tr>\n<td>labelKey</td>\n<td>标签字段名</td>\n<td>string</td>\n<td>'name'</td>\n</tr>\n<tr>\n<td>single</td>\n<td>是否单选</td>\n<td>boolean</td>\n<td>false</td>\n</tr>\n<tr>\n<td>placeholder</td>\n<td>占位符</td>\n<td>string</td>\n<td>-</td>\n</tr>\n<tr>\n<td>disabled</td>\n<td>是否禁用</td>\n<td>boolean</td>\n<td>false</td>\n</tr>\n<tr>\n<td>groupName</td>\n<td>标签名称,用于显示添加/删除等操作文案</td>\n<td>string</td>\n<td>'标签'</td>\n</tr>\n</tbody>\n</table>\n<h2>功能特性</h2>\n<h3>1. 表格列表展示</h3>\n<ul>\n<li>以表格形式展示标签列表,包含编码、名称、描述等信息</li>\n<li>支持分页显示</li>\n</ul>\n<h3>2. 搜索功能</h3>\n<ul>\n<li>支持关键字搜索标签</li>\n<li>实时过滤搜索结果</li>\n</ul>\n<h3>3. 添加标签</h3>\n<ul>\n<li>点击底部\"添加标签\"按钮可添加新标签</li>\n<li>弹出表单填写编码、名称、描述信息</li>\n<li>仅当传入 <code>apis.create</code> 或全局配置 <code>preset.apis.group.create</code> 时显示</li>\n</ul>\n<h3>4. 删除标签</h3>\n<ul>\n<li>每行显示删除操作按钮</li>\n<li>删除前需确认</li>\n<li>如果标签已被选中,会自动从已选列表中移除</li>\n<li>仅当传入 <code>apis.remove</code> 或全局配置 <code>preset.apis.group.remove</code> 时显示</li>\n</ul>\n<h3>5. 多选/单选</h3>\n<ul>\n<li>默认支持多选</li>\n<li>设置 <code>single={true}</code> 切换为单选模式</li>\n</ul>\n<h2>使用说明</h2>\n<h3>基本用法</h3>\n<pre><code class=\"language-jsx\">import { createWithRemoteLoader } from '@kne/remote-loader';\nimport GroupSelect from '@components/GroupSelect';\n\nconst FormExample = createWithRemoteLoader({\n modules: ['components-core:FormInfo']\n})(({ remoteModules }) =&gt; {\n const [FormInfo] = remoteModules;\n const { Form, SubmitButton } = FormInfo;\n\n return (\n &lt;Form onSubmit={(data) =&gt; console.log(data)}&gt;\n &lt;GroupSelect\n name=\"groups\"\n label=\"技能标签\"\n rule=\"REQ\"\n /&gt;\n &lt;SubmitButton&gt;提交&lt;/SubmitButton&gt;\n &lt;/Form&gt;\n );\n});\n</code></pre>\n<h3>自定义标签名称</h3>\n<pre><code class=\"language-jsx\">&lt;GroupSelect\n name=\"groups\"\n label=\"技能标签\"\n groupName=\"技能标签\"\n/&gt;\n</code></pre>\n<h3>自定义 API</h3>\n<pre><code class=\"language-jsx\">&lt;GroupSelect\n name=\"groups\"\n label=\"技能标签\"\n apis={{\n list: { url: '/api/groups', method: 'GET' },\n create: { url: '/api/groups', method: 'POST' },\n remove: { url: '/api/groups/remove', method: 'POST' }\n }}\n/&gt;\n</code></pre>\n<h3>单选模式</h3>\n<pre><code class=\"language-jsx\">&lt;GroupSelect\n name=\"primaryGroup\"\n label=\"主技能标签\"\n single\n/&gt;\n</code></pre>\n<h3>只读模式(不显示添加/删除按钮)</h3>\n<p>当只传入 <code>apis.list</code> 而不传入 <code>create</code> 和 <code>remove</code> 时,组件将只提供选择功能,不显示添加和删除按钮:</p>\n<pre><code class=\"language-jsx\">&lt;GroupSelect\n name=\"groups\"\n label=\"技能标签\"\n apis={{\n list: { url: '/api/groups', method: 'GET' }\n // 不传 create,隐藏添加按钮\n // 不传 remove,隐藏删除按钮\n }}\n/&gt;\n</code></pre>\n<h2>依赖模块</h2>\n<ul>\n<li><code>components-core:FormInfo</code> - 表单组件</li>\n<li><code>components-core:FormInfo@useFormModal</code> - 表单弹窗</li>\n<li><code>components-core:Global@usePreset</code> - 全局配置(用于获取默认 API)</li>\n</ul>\n<h2>默认 API 配置</h2>\n<p>组件默认使用 <code>apis.group</code> 中的接口配置:</p>\n<pre><code class=\"language-javascript\">{\n list: { /* 列表查询接口 */ },\n create: { /* 创建标签接口 */ },\n remove: { /* 删除标签接口 */ }\n}\n</code></pre>\n<p>需要在全局 preset 中配置相应的 API,或通过 <code>apis</code> 属性传入。</p>`,\n example: {\n isFull: false,\n className: ``,\n style: ``,\n list: [{\n title: `基础用法`,\n description: `展示 GroupSelect 组件的基本使用方式,支持多选、搜索、添加和删除标签`,\n code: `const { default: GroupSelect } = _GroupSelect;\nconst { createWithRemoteLoader } = remoteLoader;\nconst { default: mockPreset } = _mockPreset;\n\nconst BaseExample = createWithRemoteLoader({\n modules: ['components-core:FormInfo', 'components-core:Global@PureGlobal']\n})(({ remoteModules }) => {\n const [FormInfo, PureGlobal] = remoteModules;\n const { Form, SubmitButton, CancelButton, fields } = FormInfo;\n const { Input } = fields;\n\n return (\n <PureGlobal preset={mockPreset}>\n <Form\n onSubmit={(data) => {\n console.log('提交数据:', data);\n }}\n >\n <FormInfo\n title=\"技能标签选择\"\n column={1}\n list={[\n <Input name=\"name\" label=\"项目名称\" rule=\"REQ\" placeholder=\"请输入项目名称\" />\n ]}\n />\n <GroupSelect\n name=\"groups\"\n label=\"技能标签\"\n rule=\"REQ\"\n placeholder=\"请选择技能标签\"\n groupName=\"技能标签\"\n />\n <div style={{ marginTop: 24, textAlign: 'center' }}>\n <CancelButton style={{ marginRight: 8 }}>取消</CancelButton>\n <SubmitButton type=\"primary\">提交</SubmitButton>\n </div>\n </Form>\n </PureGlobal>\n );\n});\n\nrender(<BaseExample />);\n\n`,\n scope: [{\n name: \"_GroupSelect\",\n packageName: \"@components/GroupSelect\",\n component: component_19\n},{\n name: \"_mockPreset\",\n packageName: \"@root/mockPreset\",\n component: component_20\n},{\n name: \"remoteLoader\",\n packageName: \"@kne/remote-loader\",\n component: component_21\n}]\n},{\n title: `单选模式`,\n description: `展示 GroupSelect 的单选模式,适用于只需选择一个标签的场景`,\n code: `const { default: GroupSelect } = _GroupSelect;\nconst { createWithRemoteLoader } = remoteLoader;\nconst { default: mockPreset } = _mockPreset;\n\nconst SingleSelectExample = createWithRemoteLoader({\n modules: ['components-core:FormInfo', 'components-core:Global@PureGlobal']\n})(({ remoteModules }) => {\n const [FormInfo, PureGlobal] = remoteModules;\n const { Form, SubmitButton, fields } = FormInfo;\n const { Input } = fields;\n\n return (\n <PureGlobal preset={mockPreset}>\n <Form\n data={{\n name: '数据分析项目',\n primaryGroup: 'ai'\n }}\n onSubmit={(data) => {\n console.log('提交数据:', data);\n }}\n >\n <FormInfo\n title=\"主技能标签选择\"\n column={1}\n list={[\n <Input name=\"name\" label=\"项目名称\" rule=\"REQ\" placeholder=\"请输入项目名称\" />\n ]}\n />\n <GroupSelect\n name=\"primaryGroup\"\n label=\"主技能标签\"\n single\n rule=\"REQ\"\n placeholder=\"请选择一个主技能标签\"\n />\n <div style={{ marginTop: 16 }}>\n <SubmitButton>提交</SubmitButton>\n </div>\n </Form>\n </PureGlobal>\n );\n});\n\nrender(<SingleSelectExample />);\n\n`,\n scope: [{\n name: \"_GroupSelect\",\n packageName: \"@components/GroupSelect\",\n component: component_19\n},{\n name: \"_mockPreset\",\n packageName: \"@root/mockPreset\",\n component: component_20\n},{\n name: \"remoteLoader\",\n packageName: \"@kne/remote-loader\",\n component: component_21\n}]\n},{\n title: `带初始值`,\n description: `展示 GroupSelect 带初始值的使用方式,用于编辑场景`,\n code: `const { default: GroupSelect } = _GroupSelect;\nconst { createWithRemoteLoader } = remoteLoader;\nconst { default: mockPreset } = _mockPreset;\n\nconst WithInitialValueExample = createWithRemoteLoader({\n modules: ['components-core:FormInfo', 'components-core:Global@PureGlobal']\n})(({ remoteModules }) => {\n const [FormInfo, PureGlobal] = remoteModules;\n const { Form, SubmitButton, CancelButton, fields } = FormInfo;\n const { Input } = fields;\n\n return (\n <PureGlobal preset={mockPreset}>\n <Form\n data={{\n name: '全栈开发项目',\n groups: [\n { code: 'frontend', name: '前端开发' },\n { code: 'backend', name: '后端开发' },\n { code: 'database', name: '数据库' }\n ]\n }}\n onSubmit={(data) => {\n console.log('提交数据:', data);\n }}\n >\n <FormInfo\n title=\"编辑项目技能标签\"\n column={1}\n list={[\n <Input name=\"name\" label=\"项目名称\" rule=\"REQ\" placeholder=\"请输入项目名称\" />\n ]}\n />\n <GroupSelect\n name=\"groups\"\n label=\"技能标签\"\n placeholder=\"请选择技能标签\"\n />\n <div style={{ marginTop: 24, textAlign: 'center' }}>\n <CancelButton style={{ marginRight: 8 }}>取消</CancelButton>\n <SubmitButton type=\"primary\">保存</SubmitButton>\n </div>\n </Form>\n </PureGlobal>\n );\n});\n\nrender(<WithInitialValueExample />);\n\n`,\n scope: [{\n name: \"_GroupSelect\",\n packageName: \"@components/GroupSelect\",\n component: component_19\n},{\n name: \"_mockPreset\",\n packageName: \"@root/mockPreset\",\n component: component_20\n},{\n name: \"remoteLoader\",\n packageName: \"@kne/remote-loader\",\n component: component_21\n}]\n},{\n title: `只读模式`,\n description: `不传 create 和 remove 接口时,隐藏添加和删除按钮,适用于只做选择的场景`,\n code: `const { default: GroupSelect } = _GroupSelect;\nconst { createWithRemoteLoader } = remoteLoader;\nconst { default: mockPreset, groupList } = _mockPreset;\n\nconst ReadonlyExample = createWithRemoteLoader({\n modules: ['components-core:FormInfo', 'components-core:Global@PureGlobal']\n})(({ remoteModules }) => {\n const [FormInfo, PureGlobal] = remoteModules;\n const { Form, SubmitButton, fields } = FormInfo;\n const { Input } = fields;\n\n return (\n <PureGlobal preset={mockPreset}>\n <Form\n data={{\n name: '只读项目',\n groups: [\n { code: 'frontend', name: '前端开发' },\n { code: 'backend', name: '后端开发' }\n ]\n }}\n onSubmit={(data) => {\n console.log('提交数据:', data);\n }}\n >\n <FormInfo\n title=\"只读标签选择(无添加/删除功能)\"\n column={1}\n list={[\n <Input name=\"name\" label=\"项目名称\" rule=\"REQ\" placeholder=\"请输入项目名称\" />\n ]}\n />\n <GroupSelect\n name=\"groups\"\n label=\"技能标签\"\n placeholder=\"请选择技能标签\"\n groupName=\"技能标签\"\n apis={{\n // 只传 list 接口,不传 create 和 remove,隐藏添加和删除按钮\n list: {\n loader: () => groupList.data\n }\n }}\n />\n <div style={{ marginTop: 16 }}>\n <SubmitButton>提交</SubmitButton>\n </div>\n </Form>\n </PureGlobal>\n );\n});\n\nrender(<ReadonlyExample />);\n\n`,\n scope: [{\n name: \"_GroupSelect\",\n packageName: \"@components/GroupSelect\",\n component: component_19\n},{\n name: \"_mockPreset\",\n packageName: \"@root/mockPreset\",\n component: component_20\n},{\n name: \"remoteLoader\",\n packageName: \"@kne/remote-loader\",\n component: component_21\n}]\n}]\n }\n};\nexport default readmeConfig;\n","import * as component_22 from '@components/IntlAdmin';\nimport * as component_23 from '@root/mockPreset';\nimport * as component_24 from '@kne/remote-loader';\nimport * as component_25 from 'react-router-dom';\nconst readmeConfig = {\n name: `IntlAdmin`,\n summary: `<p>国际化语言包管理组件,提供语言类型和语言库的完整管理功能,支持多语言翻译文本的增删改查和审核流程。</p>`,\n \n \n api: `<h2>IntlAdmin 组件</h2>\n<p>国际化语言包管理组件,提供语言类型和语言库的管理功能。</p>\n<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>baseUrl</td>\n<td>基础路由路径</td>\n<td>string</td>\n<td>-</td>\n</tr>\n</tbody>\n</table>\n<h2>子组件</h2>\n<h3>LangType 子组件</h3>\n<p>语言类型管理组件,管理支持的语言种类。</p>\n<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>menu</td>\n<td>菜单组件</td>\n<td>ReactNode</td>\n<td>-</td>\n</tr>\n</tbody>\n</table>\n<p><strong>功能说明:</strong></p>\n<ul>\n<li>语言类型列表展示</li>\n<li>创建新的语言类型</li>\n<li>编辑语言类型信息</li>\n<li>删除语言类型</li>\n<li>启用/禁用语言类型</li>\n</ul>\n<p><strong>数据结构:</strong></p>\n<pre><code class=\"language-javascript\">{\n id: number, // ID\n name: string, // 名称(如:中文(简体))\n code: string, // 编码(如:zh-CN)\n params: string, // 翻译参数\n description: string, // 描述\n status: string // 状态:open-启用,closed-禁用\n}\n</code></pre>\n<h3>LangLib 子组件</h3>\n<p>语言库管理组件,管理各语言的翻译文本。</p>\n<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>menu</td>\n<td>菜单组件</td>\n<td>ReactNode</td>\n<td>-</td>\n</tr>\n</tbody>\n</table>\n<p><strong>功能说明:</strong></p>\n<ul>\n<li>语言库列表展示</li>\n<li>添加语言包</li>\n<li>编辑翻译文本</li>\n<li>启用/禁用语言包</li>\n</ul>\n<p><strong>数据结构:</strong></p>\n<pre><code class=\"language-javascript\">{\n id: number, // ID\n namespace: string, // 命名空间(如:components-admin:User)\n locale: string, // 语言(如:zh-CN)\n code: string, // 编码(如:AddUser)\n target: string, // 目标值(翻译文本)\n reviewStatus: string, // 审核状态:approved-已通过,pending-待审核,rejected-已拒绝\n status: string // 状态:open-启用,closed-禁用\n}\n</code></pre>\n<h2>BizUnit 配置</h2>\n<p>LangType 和 LangLib 子组件都基于 BizUnit 实现,具有以下标准功能:</p>\n<h3>LangType 配置</h3>\n<ul>\n<li><strong>apis</strong>: list, create, save, remove, setStatus</li>\n<li><strong>options.bizName</strong>: '语言种类'</li>\n<li><strong>列配置</strong>: ID、名称、编码、翻译参数、描述、状态</li>\n</ul>\n<h3>LangLib 配置</h3>\n<ul>\n<li><strong>apis</strong>: list, create, save, setStatus</li>\n<li><strong>列配置</strong>: ID、命名空间、语言、编码、目标值、审核状态、状态</li>\n</ul>\n<h2>依赖组件</h2>\n<p>IntlAdmin 组件依赖以下模块:</p>\n<ul>\n<li><code>@components/BizUnit</code> - 业务单元组件</li>\n<li><code>components-core:Menu</code> - 菜单组件</li>\n<li><code>components-core:Global@usePreset</code> - 全局配置</li>\n<li><code>components-core:Layout@TablePage</code> - 表格页面组件</li>\n<li><code>components-core:FormInfo</code> - 表单组件</li>\n</ul>\n<h2>路由结构</h2>\n<pre><code>/IntlAdmin -&gt; LangType 组件(语言类型管理)\n/IntlAdmin/lang-lib -&gt; LangLib 组件(语言库管理)\n</code></pre>`,\n example: {\n isFull: true,\n className: ``,\n style: ``,\n list: [{\n title: `基础用法`,\n description: `IntlAdmin 组件的完整功能展示,包含语言类型管理和语言库管理两个子模块,通过左侧菜单进行切换`,\n code: `const { default: IntlAdmin } = _IntlAdmin;\nconst { default: mockPreset } = _mockPreset;\nconst { createWithRemoteLoader } = remoteLoader;\nconst { useNavigate, Navigate } = reactRouterDom;\nconst { Route, Routes } = reactRouterDom;\n\nconst BaseExample = createWithRemoteLoader({\n modules: ['components-core:Global@PureGlobal', 'components-core:Layout']\n})(({ remoteModules }) => {\n const [PureGlobal, Layout] = remoteModules;\n const navigate = useNavigate();\n return (\n <PureGlobal preset={mockPreset}>\n <Layout navigation={{ isFixed: false }}>\n <Routes>\n <Route\n path=\"/IntlAdmin/*\"\n element={\n <IntlAdmin\n baseUrl=\"/IntlAdmin\"\n pageProps={{\n menuFixed: false\n }}\n />\n }\n />\n <Route path=\"/*\" element={<Navigate to=\"/IntlAdmin\" replace />} />\n </Routes>\n </Layout>\n </PureGlobal>\n );\n});\n\nrender(<BaseExample />);\n\n`,\n scope: [{\n name: \"_IntlAdmin\",\n packageName: \"@components/IntlAdmin\",\n component: component_22\n},{\n name: \"_mockPreset\",\n packageName: \"@root/mockPreset\",\n component: component_23\n},{\n name: \"remoteLoader\",\n packageName: \"@kne/remote-loader\",\n component: component_24\n},{\n name: \"reactRouterDom\",\n packageName: \"react-router-dom\",\n component: component_25\n}]\n},{\n title: `语言类型管理`,\n description: `LangType 子组件单独使用,展示语言类型的列表、创建、编辑、删除和状态切换功能`,\n code: `const { default: IntlAdmin } = _IntlAdmin;\nconst { LangType } = IntlAdmin;\nconst { default: mockPreset } = _mockPreset;\nconst { createWithRemoteLoader } = remoteLoader;\n\nconst LangTypeExample = createWithRemoteLoader({\n modules: ['components-core:Global@PureGlobal', 'components-core:Layout']\n})(({ remoteModules }) => {\n const [PureGlobal, Layout] = remoteModules;\n return (\n <PureGlobal preset={mockPreset}>\n <Layout navigation={{ isFixed: false }}>\n <LangType\n pageProps={{\n menuFixed: false\n }}\n />\n </Layout>\n </PureGlobal>\n );\n});\n\nrender(<LangTypeExample />);\n\n`,\n scope: [{\n name: \"_IntlAdmin\",\n packageName: \"@components/IntlAdmin\",\n component: component_22\n},{\n name: \"_mockPreset\",\n packageName: \"@root/mockPreset\",\n component: component_23\n},{\n name: \"remoteLoader\",\n packageName: \"@kne/remote-loader\",\n component: component_24\n}]\n},{\n title: `语言库管理`,\n description: `LangLib 子组件单独使用,展示语言库的列表、添加和编辑翻译文本功能`,\n code: `const { default: IntlAdmin } = _IntlAdmin;\nconst { LangLib } = IntlAdmin;\nconst { default: mockPreset } = _mockPreset;\nconst { createWithRemoteLoader } = remoteLoader;\n\nconst LangLibExample = createWithRemoteLoader({\n modules: ['components-core:Global@PureGlobal', 'components-core:Layout']\n})(({ remoteModules }) => {\n const [PureGlobal, Layout] = remoteModules;\n return (\n <PureGlobal preset={mockPreset}>\n <Layout navigation={{ isFixed: false }}>\n <LangLib\n pageProps={{\n menuFixed: false\n }}\n />\n </Layout>\n </PureGlobal>\n );\n});\n\nrender(<LangLibExample />);\n\n`,\n scope: [{\n name: \"_IntlAdmin\",\n packageName: \"@components/IntlAdmin\",\n component: component_22\n},{\n name: \"_mockPreset\",\n packageName: \"@root/mockPreset\",\n component: component_23\n},{\n name: \"remoteLoader\",\n packageName: \"@kne/remote-loader\",\n component: component_24\n}]\n}]\n }\n};\nexport default readmeConfig;\n","import * as component_26 from '@components/Language';\nconst readmeConfig = {\n name: `Language`,\n summary: `<p>切换系统语言</p>`,\n \n \n api: `<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n</table>`,\n example: {\n isFull: false,\n className: `Language_4994a`,\n style: `.Language_4994a .example-driver-preview {\n background: #999;\n}`,\n list: [{\n title: `这里填写示例标题`,\n description: `这里填写示例说明`,\n code: `const { default: Language } = _Language;\nconst BaseExample = () => {\n return (\n <>\n <Language list={[\n { label: '中文', value: 'zh-CN' },\n { label: 'EN', value: 'en-US' },\n { label: '繁体中文', value: 'zh-TW' },\n { label: '日本語', value: 'ja-JP' }\n ]}/>\n <Language\n colorful={false}\n list={[\n { label: '中文', value: 'zh-CN' },\n { label: 'EN', value: 'en-US' },\n { label: '繁体中文', value: 'zh-TW' },\n { label: '日本語', value: 'ja-JP' }\n ]}\n />\n </>\n );\n};\n\nrender(<BaseExample />);\n\n`,\n scope: [{\n name: \"_Language\",\n packageName: \"@components/Language\",\n component: component_26\n}]\n}]\n }\n};\nexport default readmeConfig;\n","import * as component_37 from '@components/LoginIllustration';\nconst readmeConfig = {\n name: `LoginIllustration`,\n summary: `<p>用来实现一些精美的登录动画</p>`,\n \n \n api: `<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n</table>`,\n example: {\n isFull: false,\n className: ``,\n style: ``,\n list: [{\n title: `这里填写示例标题`,\n description: `这里填写示例说明`,\n code: `const { default: LoginIllustration } = _LoginIllustration;\nconst BaseExample = () => {\n return (\n <div style={{ width: '400px', height: '500px' }}>\n <LoginIllustration />\n </div>\n );\n};\n\nrender(<BaseExample />);\n\n`,\n scope: [{\n name: \"_LoginIllustration\",\n packageName: \"@components/LoginIllustration\",\n component: component_37\n}]\n}]\n }\n};\nexport default readmeConfig;\n","import * as component_27 from '@components/MessageManger';\nconst readmeConfig = {\n name: `MessageManger`,\n summary: `<p>消息管理</p>`,\n \n \n api: `<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n</table>`,\n example: {\n isFull: false,\n className: ``,\n style: ``,\n list: [{\n title: `这里填写示例标题`,\n description: `这里填写示例说明`,\n code: `const {default:MessageManger} = _MessageManger;\nconst BaseExample = ()=>{\n return <MessageManger />;\n};\n\nrender(<BaseExample />);\n\n`,\n scope: [{\n name: \"_MessageManger\",\n packageName: \"@components/MessageManger\",\n component: component_27\n}]\n}]\n }\n};\nexport default readmeConfig;\n","import * as component_33 from '@components/Signature';\nimport * as component_34 from '@root/mockPreset';\nimport * as component_35 from '@kne/remote-loader';\nimport * as component_36 from 'antd';\nconst readmeConfig = {\n name: `Signature`,\n summary: `<p>签名密钥管理组件,提供签名密钥的创建、验证、启用/禁用和删除功能,支持密钥列表展示和用户关联管理。</p>`,\n \n \n api: `<h2>Signature 组件</h2>\n<p>签名密钥管理组件,基于 BizUnit 封装,提供签名密钥的列表展示、创建、验证、启用/禁用和删除功能。</p>\n<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>无</td>\n<td>Signature 组件是一个完整的页面组件,不需要传入属性</td>\n<td>-</td>\n<td>-</td>\n</tr>\n</tbody>\n</table>\n<h2>功能说明</h2>\n<p>Signature 组件基于 BizUnit 实现,包含以下核心功能:</p>\n<h3>1. 密钥列表展示</h3>\n<ul>\n<li>显示所有签名密钥的列表</li>\n<li>包含 AppId、SecretKey、所属用户、描述、最后访问时间、状态、创建时间等信息</li>\n<li>支持分页展示</li>\n</ul>\n<h3>2. 添加密钥</h3>\n<ul>\n<li>选择密钥所属用户</li>\n<li>填写密钥描述(最多100字符)</li>\n<li>创建成功后弹窗展示 AppId 和 SecretKey,需妥善保存</li>\n</ul>\n<h3>3. 验证密钥</h3>\n<ul>\n<li>输入签名内容</li>\n<li>输入时间戳(数字)</li>\n<li>输入过期时间(数字)</li>\n<li>验证密钥是否有效</li>\n</ul>\n<h3>4. 启用/禁用密钥</h3>\n<ul>\n<li>禁用密钥后将拒绝该密钥的所有请求</li>\n<li>启用密钥后将允许该密钥访问请求</li>\n</ul>\n<h3>5. 删除密钥</h3>\n<ul>\n<li>只能删除已禁用的密钥</li>\n<li>删除操作需要确认</li>\n</ul>\n<h2>getColumns 函数</h2>\n<table>\n<thead>\n<tr>\n<th>参数名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>formatMessage</td>\n<td>国际化格式化函数</td>\n<td>(descriptor) =&gt; string</td>\n<td>-</td>\n</tr>\n</tbody>\n</table>\n<p>返回值:TablePage 的 columns 配置数组</p>\n<h2>数据结构</h2>\n<h3>密钥数据对象</h3>\n<pre><code class=\"language-javascript\">{\n appId: string, // 应用ID\n secretKey: string, // 密钥\n user: { // 所属用户\n id: number,\n nickname: string,\n email: string,\n phone: string\n },\n description: string, // 描述\n lastVisitedAt: string, // 最后访问时间\n status: number, // 状态:0-启用,1-禁用\n createdAt: string // 创建时间\n}\n</code></pre>\n<h2>BizUnit 配置</h2>\n<p>Signature 组件使用以下 BizUnit 配置:</p>\n<h3>apis 配置</h3>\n<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>list</td>\n<td>列表接口配置</td>\n<td>Object</td>\n</tr>\n<tr>\n<td>remove</td>\n<td>删除接口配置</td>\n<td>Object</td>\n</tr>\n<tr>\n<td>setStatus</td>\n<td>状态切换接口配置</td>\n<td>Object</td>\n</tr>\n</tbody>\n</table>\n<h3>options 配置</h3>\n<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>bizName</td>\n<td>业务名称</td>\n<td>string</td>\n<td>'密钥'</td>\n</tr>\n<tr>\n<td>openStatus</td>\n<td>启用状态值</td>\n<td>number</td>\n<td>0</td>\n</tr>\n<tr>\n<td>closedStatus</td>\n<td>禁用状态值</td>\n<td>number</td>\n<td>1</td>\n</tr>\n<tr>\n<td>openButtonProps</td>\n<td>启用按钮属性</td>\n<td>Object</td>\n<td>-</td>\n</tr>\n<tr>\n<td>closeButtonProps</td>\n<td>禁用按钮属性</td>\n<td>Object</td>\n<td>-</td>\n</tr>\n<tr>\n<td>closeMessage</td>\n<td>禁用确认提示</td>\n<td>string</td>\n<td>-</td>\n</tr>\n<tr>\n<td>removeMessage</td>\n<td>删除确认提示</td>\n<td>string</td>\n<td>-</td>\n</tr>\n</tbody>\n</table>\n<h3>自定义操作按钮</h3>\n<p>通过 <code>getActionList</code> 自定义操作按钮:</p>\n<ul>\n<li><strong>验证按钮</strong> - 自定义的验证密钥功能按钮</li>\n<li><strong>启用/禁用按钮</strong> - 基于 BizUnit 内置的状态切换功能</li>\n<li><strong>删除按钮</strong> - 基于 BizUnit 内置的删除功能,仅对已禁用密钥显示</li>\n</ul>\n<h2>依赖组件</h2>\n<p>Signature 组件依赖以下模块:</p>\n<ul>\n<li><code>@components/BizUnit</code> - 业务单元组件</li>\n<li><code>components-core:Global@usePreset</code> - 全局配置</li>\n<li><code>components-core:FormInfo</code> - 表单组件</li>\n<li><code>components-core:FormInfo@useFormModal</code> - 表单弹窗</li>\n<li><code>components-core:InfoPage@CentralContent</code> - 信息展示组件</li>\n</ul>\n<h2>国际化</h2>\n<p>组件支持中英文国际化,默认语言为中文。</p>\n<h3>可用的国际化 key</h3>\n<ul>\n<li><code>AddSecretKey</code> - 添加密钥</li>\n<li><code>Verify</code> - 验证</li>\n<li><code>Enabled</code> - 启用</li>\n<li><code>Disabled</code> - 禁用</li>\n<li><code>BelongUser</code> - 所属用户</li>\n<li><code>Description</code> - 描述</li>\n<li><code>Status</code> - 状态</li>\n<li><code>CreatedAt</code> - 创建时间</li>\n<li><code>LastVisitedAt</code> - 最后访问时间</li>\n<li><code>SecretKeyGenerated</code> - 密钥生成成功</li>\n<li><code>SaveSecretKeyWarning</code> - 保存密钥警告</li>\n<li><code>VerifySuccess</code> - 验证成功</li>\n<li><code>VerifyFailed</code> - 验证失败</li>\n<li><code>DisableSecretKeyMessage</code> - 禁用密钥确认提示</li>\n</ul>`,\n example: {\n isFull: true,\n className: ``,\n style: ``,\n list: [{\n title: `基础用法`,\n description: `Signature 组件的完整功能展示,包括密钥列表、添加密钥、验证密钥、启用/禁用和删除密钥等功能`,\n code: `const { default: Signature } = _Signature;\nconst { default: mockPreset } = _mockPreset;\nconst { createWithRemoteLoader } = remoteLoader;\n\nconst BaseExample = createWithRemoteLoader({\n modules: ['components-core:Global@PureGlobal', 'components-core:Layout']\n})(({ remoteModules }) => {\n const [PureGlobal, Layout] = remoteModules;\n return (\n <PureGlobal preset={mockPreset}>\n <Layout navigation={{ isFixed: false }}>\n <Signature />\n </Layout>\n </PureGlobal>\n );\n});\n\nrender(<BaseExample />);\n\n`,\n scope: [{\n name: \"_Signature\",\n packageName: \"@components/Signature\",\n component: component_33\n},{\n name: \"_mockPreset\",\n packageName: \"@root/mockPreset\",\n component: component_34\n},{\n name: \"remoteLoader\",\n packageName: \"@kne/remote-loader\",\n component: component_35\n}]\n},{\n title: `表格列配置`,\n description: `使用 getColumns 函数获取签名列表的表格列配置,可以自定义国际化展示`,\n code: `const { default: mockPreset } = _mockPreset;\nconst { getColumns } = _Signature;\nconst { createWithRemoteLoader } = remoteLoader;\nconst { Table } = antd;\n\nconst GetColumnsExample = createWithRemoteLoader({\n modules: ['components-core:Global@PureGlobal']\n})(({ remoteModules }) => {\n const [PureGlobal] = remoteModules;\n \n // 模拟国际化函数\n const formatMessage = ({ id }) => {\n const messages = {\n 'BelongUser': '所属用户',\n 'Description': '描述',\n 'LastVisitedAt': '最后访问时间',\n 'Status': '状态',\n 'CreatedAt': '创建时间',\n 'Enabled': '启用',\n 'Disabled': '禁用'\n };\n return messages[id] || id;\n };\n\n // 获取表格列配置\n const columns = getColumns({ formatMessage });\n\n // 模拟数据\n const data = [\n {\n id: 1,\n appId: 'app_20240308001',\n secretKey: 'sk_a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6',\n user: {\n nickname: '张三',\n email: 'zhangsan@example.com',\n phone: '138****1234'\n },\n description: '用于API对接的主密钥',\n lastVisitedAt: '2024-03-08 14:30:00',\n status: 0,\n createdAt: '2024-03-01 09:00:00'\n },\n {\n id: 2,\n appId: 'app_20240305002',\n secretKey: 'sk_z9y8x7w6v5u4t3s2r1q0p9o8n7m6l5k4',\n user: {\n nickname: '李四',\n email: 'lisi@example.com',\n phone: '139****5678'\n },\n description: '测试环境使用的签名密钥',\n lastVisitedAt: '2024-03-05 16:20:00',\n status: 1,\n createdAt: '2024-02-28 11:00:00'\n }\n ];\n\n return (\n <PureGlobal preset={mockPreset}>\n <Table\n dataSource={data}\n columns={columns.map(col => ({\n ...col,\n key: col.name,\n dataIndex: col.name,\n title: col.title,\n render: col.type === 'tag' \n ? (value, record) => {\n const tagData = col.valueOf(record, { name: col.name });\n return <span style={{ color: tagData.type === 'success' ? '#52c41a' : '#ff4d4f' }}>{tagData.text}</span>;\n }\n : col.type === 'datetime'\n ? (value) => value\n : col.type === 'other' && col.valueOf\n ? (value, record) => col.valueOf(record)\n : (value) => value\n }))}\n pagination={false}\n />\n </PureGlobal>\n );\n});\n\nrender(<GetColumnsExample />);\n\n`,\n scope: [{\n name: \"_Signature\",\n packageName: \"@components/Signature\",\n component: component_33\n},{\n name: \"_mockPreset\",\n packageName: \"@root/mockPreset\",\n component: component_34\n},{\n name: \"remoteLoader\",\n packageName: \"@kne/remote-loader\",\n component: component_35\n},{\n name: \"antd\",\n packageName: \"antd\",\n component: component_36\n}]\n}]\n }\n};\nexport default readmeConfig;\n","import * as component_28 from '@components/Task';\nimport * as component_29 from '@root/mockPreset';\nimport * as component_30 from '@kne/remote-loader';\nimport * as component_31 from 'react-router-dom';\nimport * as component_32 from 'antd';\nconst readmeConfig = {\n name: `Task`,\n summary: `<p>任务管理组件,用于展示和管理系统中的异步任务。支持查看我的任务和全部任务,提供任务筛选、排序、批量操作等功能。包含任务取消、重试、查看错误详情和结果详情等操作。</p>`,\n \n \n api: `<h2>Task 组件</h2>\n<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>baseUrl</td>\n<td>基础路由路径,用于菜单导航</td>\n<td>string</td>\n<td>-</td>\n</tr>\n<tr>\n<td>getManualTaskAction</td>\n<td>手动任务的自定义操作按钮渲染函数,接收任务数据返回按钮组件</td>\n<td>(data) =&gt; ReactNode</td>\n<td>-</td>\n</tr>\n</tbody>\n</table>\n<h2>MyTask 子组件</h2>\n<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>baseUrl</td>\n<td>基础路由路径,用于菜单导航</td>\n<td>string</td>\n<td>-</td>\n</tr>\n<tr>\n<td>getManualTaskAction</td>\n<td>手动任务的自定义操作按钮渲染函数</td>\n<td>(data) =&gt; ReactNode</td>\n<td>-</td>\n</tr>\n</tbody>\n</table>\n<h2>AllTask 子组件</h2>\n<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>baseUrl</td>\n<td>基础路由路径,用于菜单导航</td>\n<td>string</td>\n<td>-</td>\n</tr>\n<tr>\n<td>getManualTaskAction</td>\n<td>手动任务的自定义操作按钮渲染函数</td>\n<td>(data) =&gt; ReactNode</td>\n<td>-</td>\n</tr>\n</tbody>\n</table>\n<h2>Actions 组件</h2>\n<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>data</td>\n<td>任务数据对象</td>\n<td>object</td>\n<td>-</td>\n</tr>\n<tr>\n<td>getManualTaskAction</td>\n<td>手动任务的自定义操作按钮渲染函数</td>\n<td>(data) =&gt; ReactNode</td>\n<td>-</td>\n</tr>\n<tr>\n<td>onSuccess</td>\n<td>操作成功后的回调函数</td>\n<td>() =&gt; void</td>\n<td>-</td>\n</tr>\n<tr>\n<td>type</td>\n<td>按钮类型</td>\n<td>'default' | 'primary' | 'link'</td>\n<td>'default'</td>\n</tr>\n<tr>\n<td>moreType</td>\n<td>更多按钮的类型</td>\n<td>'default' | 'primary' | 'link'</td>\n<td>'link'</td>\n</tr>\n<tr>\n<td>itemClassName</td>\n<td>按钮项的自定义类名</td>\n<td>string</td>\n<td>-</td>\n</tr>\n<tr>\n<td>children</td>\n<td>自定义渲染函数,接收操作列表</td>\n<td>({ list }) =&gt; ReactNode</td>\n<td>-</td>\n</tr>\n</tbody>\n</table>\n<h2>CancelTask 组件</h2>\n<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>data</td>\n<td>任务数据对象</td>\n<td>object</td>\n<td>-</td>\n</tr>\n<tr>\n<td>onSuccess</td>\n<td>取消成功后的回调函数</td>\n<td>() =&gt; void</td>\n<td>-</td>\n</tr>\n</tbody>\n</table>\n<h2>RetryTask 组件</h2>\n<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>data</td>\n<td>单个任务数据对象(单个重试时使用)</td>\n<td>object</td>\n<td>-</td>\n</tr>\n<tr>\n<td>taskIds</td>\n<td>任务ID数组(批量重试时使用)</td>\n<td>number[]</td>\n<td>-</td>\n</tr>\n<tr>\n<td>onSuccess</td>\n<td>重试成功后的回调函数</td>\n<td>() =&gt; void</td>\n<td>-</td>\n</tr>\n</tbody>\n</table>\n<h2>ErrorDetail 组件</h2>\n<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>data</td>\n<td>任务数据对象,包含input和error字段</td>\n<td>object</td>\n<td>-</td>\n</tr>\n</tbody>\n</table>\n<h2>ResultDetail 组件</h2>\n<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>data</td>\n<td>任务数据对象,包含input和output字段</td>\n<td>object</td>\n<td>-</td>\n</tr>\n</tbody>\n</table>\n<h2>getColumns 函数</h2>\n<table>\n<thead>\n<tr>\n<th>参数名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>formatMessage</td>\n<td>国际化格式化函数</td>\n<td>(descriptor) =&gt; string</td>\n<td>-</td>\n</tr>\n</tbody>\n</table>\n<p>返回值:TablePage 的 columns 配置数组</p>\n<h2>enums 枚举</h2>\n<h3>taskStatus</h3>\n<p>任务状态枚举,包含以下值:</p>\n<ul>\n<li>pending: 等待执行</li>\n<li>running: 执行中</li>\n<li>waiting: 等待操作</li>\n<li>success: 成功</li>\n<li>failed: 失败</li>\n<li>canceled: 取消</li>\n</ul>`,\n example: {\n isFull: true,\n className: ``,\n style: ``,\n list: [{\n title: `基础用法`,\n description: `Task 组件的基础使用方式,展示我的任务列表,包含任务筛选、排序和操作功能`,\n code: `const { default: Task } = _Task;\nconst { default: mockPreset } = _mockPreset;\nconst { createWithRemoteLoader } = remoteLoader;\nconst { useNavigate, Navigate } = reactRouterDom;\nconst { Button, Flex } = antd;\nconst { Route, Routes } = reactRouterDom;\n\nconst BaseExample = createWithRemoteLoader({\n modules: ['components-core:Global@PureGlobal', 'components-core:Layout']\n})(({ remoteModules }) => {\n const [PureGlobal, Layout] = remoteModules;\n const navigate = useNavigate();\n return (\n <PureGlobal preset={mockPreset}>\n <Layout navigation={{ isFixed: false }}>\n <Routes>\n <Route\n path=\"/Task/task/*\"\n element={\n <Task\n baseUrl=\"/Task\"\n pageProps={{\n menuFixed: false\n }}>\n <Flex gap={8}>\n <Button\n onClick={() => {\n navigate('/Task/task');\n }}>\n 我的任务\n </Button>\n <Button\n onClick={() => {\n navigate('/Task/task/all');\n }}>\n 全部任务\n </Button>\n </Flex>\n </Task>\n }\n />\n <Route path=\"*\" element={<Navigate to=\"/Task/task\" replace />} />\n </Routes>\n </Layout>\n </PureGlobal>\n );\n});\n\nrender(<BaseExample />);\n\n`,\n scope: [{\n name: \"_Task\",\n packageName: \"@components/Task\",\n component: component_28\n},{\n name: \"_mockPreset\",\n packageName: \"@root/mockPreset\",\n component: component_29\n},{\n name: \"remoteLoader\",\n packageName: \"@kne/remote-loader\",\n component: component_30\n},{\n name: \"reactRouterDom\",\n packageName: \"react-router-dom\",\n component: component_31\n},{\n name: \"antd\",\n packageName: \"antd\",\n component: component_32\n}]\n},{\n title: `我的任务`,\n description: `展示我的任务列表,支持自定义手动任务的操作按钮,只显示手动执行的任务`,\n code: `const { MyTask } = _Task;\nconst { default: mockPreset } = _mockPreset;\nconst { createWithRemoteLoader } = remoteLoader;\nconst { BrowserRouter } = reactRouterDom;\nconst { Button } = antd;\n\nconst MyTaskExample = createWithRemoteLoader({\n modules: ['components-core:Global@PureGlobal', 'components-core:Layout']\n})(({ remoteModules }) => {\n const [PureGlobal, Layout] = remoteModules;\n\n // 自定义手动任务的操作按钮\n const getManualTaskAction = data => {\n return props => (\n <Button\n {...props}\n onClick={() => {\n console.log('完成任务:', data);\n props.onSuccess?.();\n }}>\n 完成任务\n </Button>\n );\n };\n\n return (\n <PureGlobal preset={mockPreset}>\n <Layout navigation={{ isFixed: false }}>\n <MyTask\n baseUrl=\"/Task\"\n getManualTaskAction={getManualTaskAction}\n pageProps={{\n menuOpen: false,\n menuFixed: false,\n menu: null\n }}\n />\n </Layout>\n </PureGlobal>\n );\n});\n\nrender(<MyTaskExample />);\n\n`,\n scope: [{\n name: \"_Task\",\n packageName: \"@components/Task\",\n component: component_28\n},{\n name: \"_mockPreset\",\n packageName: \"@root/mockPreset\",\n component: component_29\n},{\n name: \"remoteLoader\",\n packageName: \"@kne/remote-loader\",\n component: component_30\n},{\n name: \"reactRouterDom\",\n packageName: \"react-router-dom\",\n component: component_31\n},{\n name: \"antd\",\n packageName: \"antd\",\n component: component_32\n}]\n},{\n title: `全部任务`,\n description: `展示全部任务列表,包含手动执行和自动执行的任务,支持批量重试失败的任务`,\n code: `const { AllTask } = _Task;\nconst { default: mockPreset } = _mockPreset;\nconst { createWithRemoteLoader } = remoteLoader;\nconst { BrowserRouter, Routes, Route } = reactRouterDom;\n\nconst AllTaskExample = createWithRemoteLoader({\n modules: ['components-core:Global@PureGlobal', 'components-core:Layout']\n})(({ remoteModules }) => {\n const [PureGlobal, Layout] = remoteModules;\n\n return (\n <PureGlobal preset={mockPreset}>\n <Layout navigation={{ isFixed: false }}>\n <AllTask\n baseUrl=\"/Task\"\n pageProps={{\n menu: null,\n menuOpen: false,\n menuFixed: false\n }}\n />\n </Layout>\n </PureGlobal>\n );\n});\n\nrender(<AllTaskExample />);\n\n`,\n scope: [{\n name: \"_Task\",\n packageName: \"@components/Task\",\n component: component_28\n},{\n name: \"_mockPreset\",\n packageName: \"@root/mockPreset\",\n component: component_29\n},{\n name: \"remoteLoader\",\n packageName: \"@kne/remote-loader\",\n component: component_30\n},{\n name: \"reactRouterDom\",\n packageName: \"react-router-dom\",\n component: component_31\n}]\n},{\n title: `任务操作按钮`,\n description: `Actions 组件根据任务状态自动显示相应的操作按钮,如取消、重试、查看错误详情、查看结果等`,\n code: `const { Actions } = _Task;\nconst { default: mockPreset, taskList } = _mockPreset;\nconst { createWithRemoteLoader } = remoteLoader;\nconst { Space, Button } = antd;\n\nconst ActionsExample = createWithRemoteLoader({\n modules: ['components-core:Global@PureGlobal']\n})(({ remoteModules }) => {\n const [PureGlobal] = remoteModules;\n const { useState } = React;\n const [refreshKey, setRefreshKey] = useState(0);\n\n // 获取不同状态的任务数据\n const pendingTask = taskList.data.pageData.find(task => task.status === 'pending');\n const runningTask = taskList.data.pageData.find(task => task.status === 'running');\n const failedTask = taskList.data.pageData.find(task => task.status === 'failed');\n const successTask = taskList.data.pageData.find(task => task.status === 'success');\n const canceledTask = taskList.data.pageData.find(task => task.status === 'canceled');\n\n const handleSuccess = () => {\n console.log('操作成功');\n setRefreshKey(prev => prev + 1);\n };\n\n return (\n <PureGlobal preset={mockPreset}>\n <Space direction=\"vertical\" size=\"large\" style={{ width: '100%' }}>\n <div>\n <div style={{ marginBottom: 8, fontWeight: 'bold' }}>等待执行的手动任务(显示完成和取消按钮):</div>\n <Actions\n data={pendingTask}\n type=\"primary\"\n onSuccess={handleSuccess}\n getManualTaskAction={data => {\n return props => (\n <Button\n {...props}\n onClick={() => {\n console.log('完成任务:', data);\n props.onSuccess?.();\n }}>\n 完成\n </Button>\n );\n }}\n />\n </div>\n\n <div>\n <div style={{ marginBottom: 8, fontWeight: 'bold' }}>执行中的任务(显示取消按钮):</div>\n <Actions data={runningTask} type=\"default\" onSuccess={handleSuccess} />\n </div>\n\n <div>\n <div style={{ marginBottom: 8, fontWeight: 'bold' }}>失败的任务(显示重试和错误详情按钮):</div>\n <Actions data={failedTask} type=\"link\" onSuccess={handleSuccess} />\n </div>\n\n <div>\n <div style={{ marginBottom: 8, fontWeight: 'bold' }}>成功的任务(显示查看结果按钮):</div>\n <Actions data={successTask} type=\"link\" onSuccess={handleSuccess} />\n </div>\n\n <div>\n <div style={{ marginBottom: 8, fontWeight: 'bold' }}>已取消的任务(显示重试按钮):</div>\n <Actions data={canceledTask} type=\"default\" onSuccess={handleSuccess} />\n </div>\n </Space>\n </PureGlobal>\n );\n});\n\nrender(<ActionsExample />);\n\n`,\n scope: [{\n name: \"_Task\",\n packageName: \"@components/Task\",\n component: component_28\n},{\n name: \"_mockPreset\",\n packageName: \"@root/mockPreset\",\n component: component_29\n},{\n name: \"remoteLoader\",\n packageName: \"@kne/remote-loader\",\n component: component_30\n},{\n name: \"antd\",\n packageName: \"antd\",\n component: component_32\n}]\n},{\n title: `取消任务`,\n description: `展示取消任务功能,支持取消等待执行和执行中的任务`,\n code: `const { Actions } = _Task;\nconst { default: mockPreset, taskList } = _mockPreset;\nconst { createWithRemoteLoader } = remoteLoader;\nconst { Space, Card } = antd;\n\nconst CancelTaskExample = createWithRemoteLoader({\n modules: ['components-core:Global@PureGlobal']\n})(({ remoteModules }) => {\n const [PureGlobal] = remoteModules;\n const { useState } = React;\n\n // 获取可以取消的任务\n const pendingTask = taskList.data.pageData.find(task => task.status === 'pending');\n const runningTask = taskList.data.pageData.find(task => task.status === 'running');\n\n const handleSuccess = () => {\n console.log('任务已取消');\n };\n\n return (\n <PureGlobal preset={mockPreset}>\n <Space direction=\"vertical\" size=\"middle\" style={{ width: '100%' }}>\n <Card title=\"等待执行的任务\" size=\"small\">\n <div style={{ marginBottom: 8 }}>\n 任务名称:{pendingTask.input.name}\n </div>\n <div style={{ marginBottom: 8 }}>\n 任务状态:{pendingTask.status}\n </div>\n <Actions data={pendingTask} type=\"primary\" onSuccess={handleSuccess} />\n </Card>\n\n <Card title=\"执行中的任务\" size=\"small\">\n <div style={{ marginBottom: 8 }}>\n 任务名称:{runningTask.input.name}\n </div>\n <div style={{ marginBottom: 8 }}>\n 任务状态:{runningTask.status}\n </div>\n <Actions data={runningTask} type=\"primary\" onSuccess={handleSuccess} />\n </Card>\n </Space>\n </PureGlobal>\n );\n});\n\nrender(<CancelTaskExample />);\n\n`,\n scope: [{\n name: \"_Task\",\n packageName: \"@components/Task\",\n component: component_28\n},{\n name: \"_mockPreset\",\n packageName: \"@root/mockPreset\",\n component: component_29\n},{\n name: \"remoteLoader\",\n packageName: \"@kne/remote-loader\",\n component: component_30\n},{\n name: \"antd\",\n packageName: \"antd\",\n component: component_32\n}]\n},{\n title: `重试任务`,\n description: `展示重试任务功能,支持重试失败和已取消的任务`,\n code: `const { Actions } = _Task;\nconst { default: mockPreset, taskList } = _mockPreset;\nconst { createWithRemoteLoader } = remoteLoader;\nconst { Space, Card } = antd;\n\nconst RetryTaskExample = createWithRemoteLoader({\n modules: ['components-core:Global@PureGlobal']\n})(({ remoteModules }) => {\n const [PureGlobal] = remoteModules;\n\n // 获取可以重试的任务\n const failedTask = taskList.data.pageData.find(task => task.status === 'failed');\n const canceledTask = taskList.data.pageData.find(task => task.status === 'canceled');\n\n const handleSuccess = () => {\n console.log('任务已重新提交执行');\n };\n\n return (\n <PureGlobal preset={mockPreset}>\n <Space direction=\"vertical\" size=\"middle\" style={{ width: '100%' }}>\n <Card title=\"失败的任务\" size=\"small\">\n <div style={{ marginBottom: 8 }}>\n 任务名称:{failedTask.input.name}\n </div>\n <div style={{ marginBottom: 8 }}>\n 任务状态:{failedTask.status}\n </div>\n <div style={{ marginBottom: 8, color: '#ff4d4f' }}>\n 错误信息:{failedTask.error.message}\n </div>\n <Actions data={failedTask} type=\"primary\" onSuccess={handleSuccess} />\n </Card>\n\n <Card title=\"已取消的任务\" size=\"small\">\n <div style={{ marginBottom: 8 }}>\n 任务名称:{canceledTask.input.name}\n </div>\n <div style={{ marginBottom: 8 }}>\n 任务状态:{canceledTask.status}\n </div>\n <Actions data={canceledTask} type=\"primary\" onSuccess={handleSuccess} />\n </Card>\n </Space>\n </PureGlobal>\n );\n});\n\nrender(<RetryTaskExample />);\n\n`,\n scope: [{\n name: \"_Task\",\n packageName: \"@components/Task\",\n component: component_28\n},{\n name: \"_mockPreset\",\n packageName: \"@root/mockPreset\",\n component: component_29\n},{\n name: \"remoteLoader\",\n packageName: \"@kne/remote-loader\",\n component: component_30\n},{\n name: \"antd\",\n packageName: \"antd\",\n component: component_32\n}]\n},{\n title: `错误详情`,\n description: `展示失败任务的错误详情,包括输入参数和错误信息`,\n code: `const { Actions } = _Task;\nconst { default: mockPreset, taskList } = _mockPreset;\nconst { createWithRemoteLoader } = remoteLoader;\nconst { Card } = antd;\n\nconst ErrorDetailExample = createWithRemoteLoader({\n modules: ['components-core:Global@PureGlobal']\n})(({ remoteModules }) => {\n const [PureGlobal] = remoteModules;\n\n // 获取失败的任务\n const failedTask = taskList.data.pageData.find(task => task.status === 'failed');\n\n return (\n <PureGlobal preset={mockPreset}>\n <Card title=\"失败任务详情\" size=\"small\">\n <div style={{ marginBottom: 8 }}>\n <strong>任务ID:</strong>{failedTask.id}\n </div>\n <div style={{ marginBottom: 8 }}>\n <strong>任务名称:</strong>{failedTask.input.name}\n </div>\n <div style={{ marginBottom: 8 }}>\n <strong>任务类型:</strong>{failedTask.type}\n </div>\n <div style={{ marginBottom: 8 }}>\n <strong>任务状态:</strong>\n <span style={{ color: '#ff4d4f' }}>{failedTask.status}</span>\n </div>\n <div style={{ marginBottom: 8 }}>\n <strong>错误代码:</strong>{failedTask.error.code}\n </div>\n <div style={{ marginBottom: 16 }}>\n <strong>错误信息:</strong>{failedTask.error.message}\n </div>\n <Actions data={failedTask} type=\"primary\" />\n </Card>\n </PureGlobal>\n );\n});\n\nrender(<ErrorDetailExample />);\n\n`,\n scope: [{\n name: \"_Task\",\n packageName: \"@components/Task\",\n component: component_28\n},{\n name: \"_mockPreset\",\n packageName: \"@root/mockPreset\",\n component: component_29\n},{\n name: \"remoteLoader\",\n packageName: \"@kne/remote-loader\",\n component: component_30\n},{\n name: \"antd\",\n packageName: \"antd\",\n component: component_32\n}]\n},{\n title: `结果详情`,\n description: `展示成功任务的结果详情,包括输入参数和输出结果`,\n code: `const { Actions } = _Task;\nconst { default: mockPreset, taskList } = _mockPreset;\nconst { createWithRemoteLoader } = remoteLoader;\nconst { Card } = antd;\n\nconst ResultDetailExample = createWithRemoteLoader({\n modules: ['components-core:Global@PureGlobal']\n})(({ remoteModules }) => {\n const [PureGlobal] = remoteModules;\n\n // 获取成功的任务\n const successTask = taskList.data.pageData.find(task => task.status === 'success');\n\n return (\n <PureGlobal preset={mockPreset}>\n <Card title=\"成功任务详情\" size=\"small\">\n <div style={{ marginBottom: 8 }}>\n <strong>任务ID:</strong>{successTask.id}\n </div>\n <div style={{ marginBottom: 8 }}>\n <strong>任务名称:</strong>{successTask.input.name}\n </div>\n <div style={{ marginBottom: 8 }}>\n <strong>任务类型:</strong>{successTask.type}\n </div>\n <div style={{ marginBottom: 8 }}>\n <strong>任务状态:</strong>\n <span style={{ color: '#52c41a' }}>{successTask.status}</span>\n </div>\n <div style={{ marginBottom: 8 }}>\n <strong>创建时间:</strong>{successTask.createdAt}\n </div>\n <div style={{ marginBottom: 16 }}>\n <strong>完成时间:</strong>{successTask.completedAt}\n </div>\n <Actions data={successTask} type=\"primary\" />\n </Card>\n </PureGlobal>\n );\n});\n\nrender(<ResultDetailExample />);\n\n`,\n scope: [{\n name: \"_Task\",\n packageName: \"@components/Task\",\n component: component_28\n},{\n name: \"_mockPreset\",\n packageName: \"@root/mockPreset\",\n component: component_29\n},{\n name: \"remoteLoader\",\n packageName: \"@kne/remote-loader\",\n component: component_30\n},{\n name: \"antd\",\n packageName: \"antd\",\n component: component_32\n}]\n},{\n title: `表格列配置`,\n description: `使用 getColumns 函数获取任务列表的表格列配置,支持自定义国际化`,\n code: `const { getColumns } = _Task;\nconst { default: mockPreset, taskList } = _mockPreset;\nconst { createWithRemoteLoader } = remoteLoader;\n\nconst GetColumnsExample = createWithRemoteLoader({\n modules: ['components-core:Global@PureGlobal', 'components-core:Layout@TablePage', 'components-core:Layout']\n})(({ remoteModules }) => {\n const [PureGlobal, TablePage, Layout] = remoteModules;\n\n // 模拟国际化函数\n const formatMessage = ({ id }) => {\n const messages = {\n ID: 'ID',\n Type: '类型',\n Status: '状态',\n TargetName: '目标名称',\n ExecutionMode: '执行方式',\n CreatedAt: '创建时间',\n CompletedAt: '完成时间',\n UpdatedAt: '更新时间',\n ManualExecution: '手动执行',\n AutomaticExecution: '自动执行'\n };\n return messages[id] || id;\n };\n\n const columns = getColumns({ formatMessage });\n\n return (\n <PureGlobal preset={mockPreset}>\n <Layout navigation={{ isFixed: false }}>\n <TablePage\n loader={() => {\n return new Promise(resolve => {\n setTimeout(() => {\n resolve(taskList.data);\n }, 500);\n });\n }}\n columns={columns}\n pagination={{ paramsType: 'params' }}\n />\n </Layout>\n </PureGlobal>\n );\n});\n\nrender(<GetColumnsExample />);\n\n`,\n scope: [{\n name: \"_Task\",\n packageName: \"@components/Task\",\n component: component_28\n},{\n name: \"_mockPreset\",\n packageName: \"@root/mockPreset\",\n component: component_29\n},{\n name: \"remoteLoader\",\n packageName: \"@kne/remote-loader\",\n component: component_30\n}]\n},{\n title: `枚举值`,\n description: `展示 Task 组件提供的枚举值,包括任务状态枚举`,\n code: `const { enums } = _Task;\nconst { Space, Tag } = antd;\nconst { default: mockPreset } = _mockPreset;\nconst { createWithRemoteLoader } = remoteLoader;\n\nconst EnumsExample = createWithRemoteLoader({\n modules: ['components-core:Global@PureGlobal', 'components-core:Enum']\n})(({ remoteModules }) => {\n const [PureGlobal, Enum] = remoteModules;\n return (\n <PureGlobal preset={mockPreset}>\n <Space direction=\"vertical\" size=\"large\" style={{ width: '100%' }}>\n <div>\n <h4>任务状态枚举(taskStatus)</h4>\n <Space wrap>\n <Enum moduleName=\"taskStatus\">\n {taskStatusList => {\n return taskStatusList.map(status => (\n <Tag\n key={status.value}\n color={\n status.type === 'success'\n ? 'green'\n : status.type === 'danger'\n ? 'red'\n : status.type === 'progress'\n ? 'blue'\n : status.type === 'info'\n ? 'default'\n : 'default'\n }>\n {status.value}: {status.description}\n </Tag>\n ));\n }}\n </Enum>\n </Space>\n </div>\n </Space>\n </PureGlobal>\n );\n});\n\nrender(<EnumsExample />);\n\n`,\n scope: [{\n name: \"_Task\",\n packageName: \"@components/Task\",\n component: component_28\n},{\n name: \"_mockPreset\",\n packageName: \"@root/mockPreset\",\n component: component_29\n},{\n name: \"remoteLoader\",\n packageName: \"@kne/remote-loader\",\n component: component_30\n},{\n name: \"antd\",\n packageName: \"antd\",\n component: component_32\n}]\n}]\n }\n};\nexport default readmeConfig;\n","import * as component_38 from '@components/Tenant';\nimport * as component_39 from '@root/mockPreset';\nimport * as component_40 from '@kne/remote-loader';\nimport * as component_41 from 'antd';\nimport * as component_42 from 'react-router-dom';\nconst readmeConfig = {\n name: `Tenant`,\n summary: `<p>租户管理系统组件,提供公司信息管理、组织架构管理、用户管理、角色权限管理等完整的租户管理功能。</p>`,\n \n \n api: `<h2>Tenant 组件</h2>\n<p>租户管理系统组件,提供完整的租户管理功能,包括公司信息管理、组织架构管理、用户管理、角色权限管理等。</p>\n<h2>主组件 Tenant</h2>\n<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>baseUrl</td>\n<td>路由基础路径</td>\n<td>string</td>\n<td>-</td>\n</tr>\n<tr>\n<td>navigation</td>\n<td>导航配置</td>\n<td>object</td>\n<td>{}</td>\n</tr>\n<tr>\n<td>list</td>\n<td>自定义路由配置</td>\n<td>array</td>\n<td>[]</td>\n</tr>\n<tr>\n<td>children</td>\n<td>子元素</td>\n<td>ReactNode</td>\n<td>-</td>\n</tr>\n</tbody>\n</table>\n<h2>子组件</h2>\n<h3>CompanyInfo 公司信息</h3>\n<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>data</td>\n<td>公司数据</td>\n<td>object</td>\n<td>-</td>\n</tr>\n<tr>\n<td>onSubmit</td>\n<td>提交回调</td>\n<td>function</td>\n<td>-</td>\n</tr>\n<tr>\n<td>hasEdit</td>\n<td>是否显示编辑按钮</td>\n<td>boolean</td>\n<td>true</td>\n</tr>\n<tr>\n<td>apis</td>\n<td>API 配置</td>\n<td>object</td>\n<td>-</td>\n</tr>\n</tbody>\n</table>\n<h3>OrgInfo 组织架构</h3>\n<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>data</td>\n<td>组织列表数据</td>\n<td>array</td>\n<td>[]</td>\n</tr>\n<tr>\n<td>companyName</td>\n<td>公司名称</td>\n<td>string</td>\n<td>-</td>\n</tr>\n<tr>\n<td>apis</td>\n<td>API 配置</td>\n<td>object</td>\n<td>-</td>\n</tr>\n<tr>\n<td>onSuccess</td>\n<td>操作成功回调</td>\n<td>function</td>\n<td>-</td>\n</tr>\n</tbody>\n</table>\n<h3>UserList 用户列表</h3>\n<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>apis</td>\n<td>API 配置</td>\n<td>object</td>\n<td>-</td>\n</tr>\n<tr>\n<td>topOptionsSize</td>\n<td>顶部操作按钮尺寸</td>\n<td>string</td>\n<td>-</td>\n</tr>\n<tr>\n<td>onMount</td>\n<td>挂载回调</td>\n<td>function</td>\n<td>-</td>\n</tr>\n<tr>\n<td>children</td>\n<td>自定义渲染</td>\n<td>function</td>\n<td>-</td>\n</tr>\n</tbody>\n</table>\n<h3>Role 角色管理</h3>\n<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>apis</td>\n<td>API 配置</td>\n<td>object</td>\n<td>-</td>\n</tr>\n</tbody>\n</table>\n<h3>Permission 权限管理</h3>\n<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>apis</td>\n<td>API 配置</td>\n<td>object</td>\n<td>-</td>\n</tr>\n<tr>\n<td>children</td>\n<td>自定义渲染</td>\n<td>function</td>\n<td>-</td>\n</tr>\n</tbody>\n</table>\n<h3>LoginTenant 租户登录</h3>\n<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>tenantPath</td>\n<td>登录成功跳转路径</td>\n<td>string</td>\n<td>-</td>\n</tr>\n<tr>\n<td>children</td>\n<td>自定义渲染</td>\n<td>function</td>\n<td>-</td>\n</tr>\n</tbody>\n</table>\n<h3>JoinInvitation 邀请加入</h3>\n<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>baseUrl</td>\n<td>基础路径</td>\n<td>string</td>\n<td>''</td>\n</tr>\n<tr>\n<td>children</td>\n<td>自定义渲染</td>\n<td>function</td>\n<td>-</td>\n</tr>\n</tbody>\n</table>\n<h3>Setting 系统设置</h3>\n<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>apis</td>\n<td>API 配置</td>\n<td>object</td>\n<td>-</td>\n</tr>\n<tr>\n<td>baseUrl</td>\n<td>基础路径</td>\n<td>string</td>\n<td>-</td>\n</tr>\n</tbody>\n</table>\n<h2>API 配置说明</h2>\n<pre><code class=\"language-javascript\">const apis = {\n tenant: {\n // 用户相关\n getUserInfo: { /* 获取当前用户信息 */ },\n getOrgList: { /* 获取组织列表 */ },\n saveOrg: { /* 保存组织 */ },\n createOrg: { /* 创建组织 */ },\n removeOrg: { /* 删除组织 */ },\n getUserList: { /* 获取用户列表 */ },\n createUser: { /* 创建用户 */ },\n saveUser: { /* 保存用户 */ },\n removeUser: { /* 删除用户 */ },\n // 角色相关\n getRoleList: { /* 获取角色列表 */ },\n createRole: { /* 创建角色 */ },\n saveRole: { /* 保存角色 */ },\n removeRole: { /* 删除角色 */ },\n permissionSave: { /* 保存角色权限 */ },\n // 租户相关\n getTenantList: { /* 获取租户列表 */ },\n getPermissionList: { /* 获取权限列表 */ },\n savePermission: { /* 保存权限 */ },\n // 邀请相关\n parseJoinToken: { /* 解析邀请令牌 */ },\n join: { /* 加入租户 */ }\n }\n};\n</code></pre>\n<h2>依赖模块</h2>\n<ul>\n<li><code>components-core:FormInfo</code> - 表单组件</li>\n<li><code>components-core:Layout</code> - 布局组件</li>\n<li><code>components-core:Global@usePreset</code> - 全局配置</li>\n<li><code>components-admin:Authenticate@AfterUserLoginLayout</code> - 用户登录后布局</li>\n</ul>`,\n example: {\n isFull: true,\n className: ``,\n style: ``,\n list: [{\n title: `公司信息`,\n description: `CompanyInfo 组件用于展示和编辑公司基本信息,包括公司简介、发展历程、团队介绍等`,\n code: `const { CompanyInfo } = _Tenant;\nconst { default: mockPreset, tenantData } = _mockPreset;\nconst { createWithRemoteLoader } = remoteLoader;\n\nconst CompanyInfoExample = createWithRemoteLoader({\n modules: ['components-core:Global@PureGlobal', 'components-core:Layout']\n})(({ remoteModules }) => {\n const [PureGlobal, Layout] = remoteModules;\n return (\n <PureGlobal preset={mockPreset}>\n <Layout navigation={{ isFixed: false }}>\n <CompanyInfo\n data={tenantData.company}\n hasEdit={true}\n apis={{\n save: { loader: () => ({ code: 0 }) }\n }}\n onSubmit={(data) => {\n console.log('保存公司信息:', data);\n }}\n />\n </Layout>\n </PureGlobal>\n );\n});\n\nrender(<CompanyInfoExample />);\n\n`,\n scope: [{\n name: \"_Tenant\",\n packageName: \"@components/Tenant\",\n component: component_38\n},{\n name: \"_mockPreset\",\n packageName: \"@root/mockPreset\",\n component: component_39\n},{\n name: \"remoteLoader\",\n packageName: \"@kne/remote-loader\",\n component: component_40\n}]\n},{\n title: `组织架构`,\n description: `OrgInfo 组件用于管理组织架构,支持树形和图形两种展示模式,可添加、编辑、删除组织节点`,\n code: `const { OrgInfo } = _Tenant;\nconst { default: mockPreset, tenantData } = _mockPreset;\nconst { createWithRemoteLoader } = remoteLoader;\n\nconst OrgInfoExample = createWithRemoteLoader({\n modules: ['components-core:Global@PureGlobal', 'components-core:Layout']\n})(({ remoteModules }) => {\n const [PureGlobal, Layout] = remoteModules;\n return (\n <PureGlobal preset={mockPreset}>\n <Layout navigation={{ isFixed: false }}>\n <OrgInfo\n data={tenantData.orgList}\n companyName={tenantData.company.name}\n apis={{\n create: { loader: () => ({ id: \\`dept-\\${Date.now()}\\` }) },\n save: { loader: () => ({ code: 0 }) },\n remove: { loader: () => ({ code: 0 }) }\n }}\n onSuccess={() => {\n console.log('操作成功');\n }}\n />\n </Layout>\n </PureGlobal>\n );\n});\n\nrender(<OrgInfoExample />);\n\n`,\n scope: [{\n name: \"_Tenant\",\n packageName: \"@components/Tenant\",\n component: component_38\n},{\n name: \"_mockPreset\",\n packageName: \"@root/mockPreset\",\n component: component_39\n},{\n name: \"remoteLoader\",\n packageName: \"@kne/remote-loader\",\n component: component_40\n}]\n},{\n title: `用户列表`,\n description: `UserList 组件用于管理租户用户,支持搜索、添加、编辑、删除用户`,\n code: `const { UserList } = _Tenant;\nconst { default: mockPreset } = _mockPreset;\nconst { createWithRemoteLoader } = remoteLoader;\n\nconst UserListExample = createWithRemoteLoader({\n modules: ['components-core:Global@PureGlobal', 'components-core:Layout']\n})(({ remoteModules }) => {\n const [PureGlobal, Layout] = remoteModules;\n return (\n <PureGlobal preset={mockPreset}>\n <Layout navigation={{ isFixed: false }}>\n <UserList\n apis={{\n list: mockPreset.apis.tenant.getUserList,\n create: mockPreset.apis.tenant.createUser,\n save: mockPreset.apis.tenant.saveUser,\n remove: mockPreset.apis.tenant.removeUser\n }}\n />\n </Layout>\n </PureGlobal>\n );\n});\n\nrender(<UserListExample />);\n\n`,\n scope: [{\n name: \"_Tenant\",\n packageName: \"@components/Tenant\",\n component: component_38\n},{\n name: \"_mockPreset\",\n packageName: \"@root/mockPreset\",\n component: component_39\n},{\n name: \"remoteLoader\",\n packageName: \"@kne/remote-loader\",\n component: component_40\n}]\n},{\n title: `角色管理`,\n description: `Role 组件用于管理角色,支持添加、编辑、删除角色,并可为角色分配权限`,\n code: `const { Role } = _Tenant;\nconst { default: mockPreset } = _mockPreset;\nconst { createWithRemoteLoader } = remoteLoader;\n\nconst RoleExample = createWithRemoteLoader({\n modules: ['components-core:Global@PureGlobal', 'components-core:Layout']\n})(({ remoteModules }) => {\n const [PureGlobal, Layout] = remoteModules;\n return (\n <PureGlobal preset={mockPreset}>\n <Layout navigation={{ isFixed: false }}>\n <Role\n apis={{\n list: mockPreset.apis.tenant.getRoleList,\n create: mockPreset.apis.tenant.createRole,\n save: mockPreset.apis.tenant.saveRole,\n remove: mockPreset.apis.tenant.removeRole,\n permissionSave: mockPreset.apis.tenant.savePermission,\n permissionList: mockPreset.apis.tenant.getPermissionList\n }}\n />\n </Layout>\n </PureGlobal>\n );\n});\n\nrender(<RoleExample />);\n\n`,\n scope: [{\n name: \"_Tenant\",\n packageName: \"@components/Tenant\",\n component: component_38\n},{\n name: \"_mockPreset\",\n packageName: \"@root/mockPreset\",\n component: component_39\n},{\n name: \"remoteLoader\",\n packageName: \"@kne/remote-loader\",\n component: component_40\n}]\n},{\n title: `权限管理`,\n description: `Permission 组件用于管理权限,包含租户权限、角色管理和共享群组三个子模块`,\n code: `const { Permission } = _Tenant;\nconst { default: mockPreset } = _mockPreset;\nconst { createWithRemoteLoader } = remoteLoader;\n\nconst PermissionExample = createWithRemoteLoader({\n modules: ['components-core:Global@PureGlobal', 'components-core:Layout']\n})(({ remoteModules }) => {\n const [PureGlobal, Layout] = remoteModules;\n return (\n <PureGlobal preset={mockPreset}>\n <Layout navigation={{ isFixed: false }}>\n <Permission\n apis={{\n permission: {\n list: mockPreset.apis.tenant.getPermissionList,\n save: mockPreset.apis.tenant.savePermission\n },\n role: {\n list: mockPreset.apis.tenant.getRoleList,\n create: mockPreset.apis.tenant.createRole,\n save: mockPreset.apis.tenant.saveRole,\n remove: mockPreset.apis.tenant.removeRole,\n permissionSave: mockPreset.apis.tenant.savePermission,\n permissionList: mockPreset.apis.tenant.getPermissionList\n }\n }}\n />\n </Layout>\n </PureGlobal>\n );\n});\n\nrender(<PermissionExample />);\n\n`,\n scope: [{\n name: \"_Tenant\",\n packageName: \"@components/Tenant\",\n component: component_38\n},{\n name: \"_mockPreset\",\n packageName: \"@root/mockPreset\",\n component: component_39\n},{\n name: \"remoteLoader\",\n packageName: \"@kne/remote-loader\",\n component: component_40\n}]\n},{\n title: `租户登录`,\n description: `LoginTenant 组件用于租户选择登录,展示用户可访问的租户列表`,\n code: `const { LoginTenant } = _Tenant;\nconst { default: mockPreset } = _mockPreset;\nconst { createWithRemoteLoader } = remoteLoader;\n\nconst LoginTenantExample = createWithRemoteLoader({\n modules: ['components-core:Global@PureGlobal', 'components-core:Layout']\n})(({ remoteModules }) => {\n const [PureGlobal, Layout] = remoteModules;\n return (\n <PureGlobal preset={mockPreset}>\n <Layout navigation={{ isFixed: false }}>\n <LoginTenant tenantPath=\"/tenant\" />\n </Layout>\n </PureGlobal>\n );\n});\n\nrender(<LoginTenantExample />);\n\n`,\n scope: [{\n name: \"_Tenant\",\n packageName: \"@components/Tenant\",\n component: component_38\n},{\n name: \"_mockPreset\",\n packageName: \"@root/mockPreset\",\n component: component_39\n},{\n name: \"remoteLoader\",\n packageName: \"@kne/remote-loader\",\n component: component_40\n}]\n},{\n title: `加入邀请`,\n description: `JoinInvitation 组件用于处理租户邀请加入流程,展示公司信息确认和员工信息确认步骤`,\n code: `const { JoinInvitation } = _Tenant;\nconst { default: mockPreset } = _mockPreset;\nconst { createWithRemoteLoader } = remoteLoader;\nconst { Card, Flex } = antd;\n\nconst JoinInvitationExample = createWithRemoteLoader({\n modules: ['components-core:Global@PureGlobal', 'components-core:Layout']\n})(({ remoteModules }) => {\n const [PureGlobal, Layout] = remoteModules;\n return (\n <PureGlobal preset={mockPreset}>\n <Layout navigation={{ isFixed: false }}>\n <Flex vertical gap={24}>\n <Card title=\"成功示例(有效token)\">\n <JoinInvitation baseUrl=\"\" token=\"valid\" />\n </Card>\n <Card title=\"失败示例(无效token)\">\n <JoinInvitation baseUrl=\"\" token=\"invalid\" />\n </Card>\n </Flex>\n </Layout>\n </PureGlobal>\n );\n});\n\nrender(<JoinInvitationExample />);\n\n`,\n scope: [{\n name: \"_Tenant\",\n packageName: \"@components/Tenant\",\n component: component_38\n},{\n name: \"_mockPreset\",\n packageName: \"@root/mockPreset\",\n component: component_39\n},{\n name: \"remoteLoader\",\n packageName: \"@kne/remote-loader\",\n component: component_40\n},{\n name: \"antd\",\n packageName: \"antd\",\n component: component_41\n}]\n},{\n title: `系统设置`,\n description: `Setting 组件是系统设置的入口,包含公司信息、组织架构、权限管理、用户管理四个设置模块`,\n code: `const { Setting } = _Tenant;\nconst { default: mockPreset } = _mockPreset;\nconst { createWithRemoteLoader } = remoteLoader;\nconst { useNavigate, Navigate } = reactRouterDom;\nconst { Route, Routes } = reactRouterDom;\n\nconst SettingExample = createWithRemoteLoader({\n modules: ['components-core:Global@PureGlobal', 'components-core:Layout']\n})(({ remoteModules }) => {\n const [PureGlobal, Layout] = remoteModules;\n return (\n <PureGlobal preset={mockPreset}>\n <Layout navigation={{ isFixed: false }}>\n <Routes>\n <Route\n path=\"/Tenant/setting/*\"\n element={\n <Setting\n pageProps={{\n menuFixed: false\n }}\n baseUrl=\"/Tenant\"\n apis={{\n user: {\n list: mockPreset.apis.tenant.getUserList,\n create: mockPreset.apis.tenant.createUser,\n save: mockPreset.apis.tenant.saveUser,\n remove: mockPreset.apis.tenant.removeUser\n },\n permission: {\n list: mockPreset.apis.tenant.getPermissionList,\n save: mockPreset.apis.tenant.savePermission\n },\n role: {\n list: mockPreset.apis.tenant.getRoleList,\n create: mockPreset.apis.tenant.createRole,\n save: mockPreset.apis.tenant.saveRole,\n remove: mockPreset.apis.tenant.removeRole,\n permissionSave: mockPreset.apis.tenant.savePermission,\n permissionList: mockPreset.apis.tenant.getPermissionList\n }\n }}\n />\n }\n />\n <Route path=\"/Tenant/*\" element={<Navigate to=\"/Tenant/setting\" replace />} />\n </Routes>\n </Layout>\n </PureGlobal>\n );\n});\n\nrender(<SettingExample />);\n\n`,\n scope: [{\n name: \"_Tenant\",\n packageName: \"@components/Tenant\",\n component: component_38\n},{\n name: \"_mockPreset\",\n packageName: \"@root/mockPreset\",\n component: component_39\n},{\n name: \"remoteLoader\",\n packageName: \"@kne/remote-loader\",\n component: component_40\n},{\n name: \"reactRouterDom\",\n packageName: \"react-router-dom\",\n component: component_42\n}]\n}]\n }\n};\nexport default readmeConfig;\n","import * as component_47 from '@components/TenantAdmin';\nimport * as component_48 from '@root/mockPreset';\nimport * as component_49 from '@kne/remote-loader';\nimport * as component_50 from 'react-router-dom';\nimport * as component_51 from 'antd';\nconst readmeConfig = {\n name: `TenantAdmin`,\n summary: `<p>租户管理</p>`,\n \n \n api: `<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n</table>`,\n example: {\n isFull: true,\n className: ``,\n style: ``,\n list: [{\n title: `租户列表`,\n description: `租户列表页面,支持状态筛选、关键字搜索、添加租户、编辑、开启/关闭、删除等操作`,\n code: `const { List } = _TenantAdmin;\nconst { default: mockPreset } = _mockPreset;\nconst { createWithRemoteLoader } = remoteLoader;\nconst { Routes, Route } = reactRouterDom;\n\nconst ListExample = createWithRemoteLoader({\n modules: ['components-core:Global@PureGlobal', 'components-core:Layout']\n})(({ remoteModules }) => {\n const [PureGlobal, Layout] = remoteModules;\n return (\n <PureGlobal preset={mockPreset}>\n <Layout navigation={{ isFixed: false }}>\n <List />\n </Layout>\n </PureGlobal>\n );\n});\n\nrender(<ListExample />);\n\n`,\n scope: [{\n name: \"_TenantAdmin\",\n packageName: \"@components/TenantAdmin\",\n component: component_47\n},{\n name: \"_mockPreset\",\n packageName: \"@root/mockPreset\",\n component: component_48\n},{\n name: \"remoteLoader\",\n packageName: \"@kne/remote-loader\",\n component: component_49\n},{\n name: \"reactRouterDom\",\n packageName: \"react-router-dom\",\n component: component_50\n}]\n},{\n title: `表单字段`,\n description: `租户表单字段组件,包含租户名称、账号数量、服务时间、Logo、主题色、描述等字段`,\n code: `const { FormInner } = _TenantAdmin;\nconst { default: mockPreset } = _mockPreset;\nconst { createWithRemoteLoader } = remoteLoader;\nconst { Card } = antd;\n\nconst FormInnerExample = createWithRemoteLoader({\n modules: ['components-core:FormInfo@Form', 'components-core:Global@PureGlobal']\n})(({ remoteModules }) => {\n const [Form, PureGlobal] = remoteModules;\n return (\n <PureGlobal preset={mockPreset}>\n <Card title=\"租户表单字段\">\n <Form onSubmit={(data) => console.log(data)}>\n <FormInner />\n </Form>\n </Card>\n </PureGlobal>\n );\n});\n\nrender(<FormInnerExample />);\n\n`,\n scope: [{\n name: \"_TenantAdmin\",\n packageName: \"@components/TenantAdmin\",\n component: component_47\n},{\n name: \"_mockPreset\",\n packageName: \"@root/mockPreset\",\n component: component_48\n},{\n name: \"remoteLoader\",\n packageName: \"@kne/remote-loader\",\n component: component_49\n},{\n name: \"antd\",\n packageName: \"antd\",\n component: component_51\n}]\n},{\n title: `Tab详情页`,\n description: `带Tab切换的租户详情页,包含公司信息、组织架构、权限、用户列表、设置等Tab页`,\n code: `const { TabDetail } = _TenantAdmin;\nconst { default: mockPreset } = _mockPreset;\nconst { createWithRemoteLoader } = remoteLoader;\nconst { Routes, Route, Navigate } = reactRouterDom;\n\nconst TabDetailExample = createWithRemoteLoader({\n modules: ['components-core:Global@PureGlobal', 'components-core:Layout']\n})(({ remoteModules }) => {\n const [PureGlobal, Layout] = remoteModules;\n return (\n <PureGlobal preset={mockPreset}>\n <Layout navigation={{ isFixed: false }}>\n <Routes>\n <Route path=\"/detail\" element={<TabDetail optionFixed={false} />} />\n <Route path=\"*\" element={<Navigate to=\"/detail?id=tenant-001\" replace />} />\n </Routes>\n </Layout>\n </PureGlobal>\n );\n});\n\nrender(<TabDetailExample />);\n\n`,\n scope: [{\n name: \"_TenantAdmin\",\n packageName: \"@components/TenantAdmin\",\n component: component_47\n},{\n name: \"_mockPreset\",\n packageName: \"@root/mockPreset\",\n component: component_48\n},{\n name: \"remoteLoader\",\n packageName: \"@kne/remote-loader\",\n component: component_49\n},{\n name: \"reactRouterDom\",\n packageName: \"react-router-dom\",\n component: component_50\n}]\n}]\n }\n};\nexport default readmeConfig;\n","import * as component_43 from '@components/UserSelect';\nimport * as component_44 from '@root/mockPreset';\nimport * as component_45 from '@kne/remote-loader';\nimport * as component_46 from 'antd';\nconst readmeConfig = {\n name: `UserSelect`,\n summary: `<p>用户选择组件,用于在表单中选择用户。支持单选和多选模式,支持按用户状态筛选,支持搜索用户。基于 SuperSelectUser 封装,自动处理用户数据的转换和加载。</p>`,\n \n \n api: `<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>name</td>\n<td>表单字段名称</td>\n<td>string</td>\n<td>-</td>\n</tr>\n<tr>\n<td>label</td>\n<td>表单标签</td>\n<td>string</td>\n<td>-</td>\n</tr>\n<tr>\n<td>rule</td>\n<td>校验规则,如 'REQ' 表示必填</td>\n<td>string</td>\n<td>-</td>\n</tr>\n<tr>\n<td>placeholder</td>\n<td>占位文本</td>\n<td>string</td>\n<td>-</td>\n</tr>\n<tr>\n<td>status</td>\n<td>用户状态筛选,0 表示活跃用户,null 表示不筛选</td>\n<td>number</td>\n<td>null</td>\n</tr>\n<tr>\n<td>single</td>\n<td>是否单选,true 为单选,false 为多选</td>\n<td>boolean</td>\n<td>true</td>\n</tr>\n<tr>\n<td>disabled</td>\n<td>是否禁用</td>\n<td>boolean</td>\n<td>false</td>\n</tr>\n<tr>\n<td>api</td>\n<td>自定义 API 配置,会覆盖默认的 getUserList 接口</td>\n<td>object</td>\n<td>-</td>\n</tr>\n</tbody>\n</table>`,\n example: {\n isFull: false,\n className: ``,\n style: ``,\n list: [{\n title: `基础用法`,\n description: `展示 UserSelect 组件的基本使用方式,支持搜索和选择用户`,\n code: `const { default: UserSelect } = _UserSelect;\nconst { createWithRemoteLoader } = remoteLoader;\nconst { default: mockPreset } = _mockPreset;\n\nconst BaseExample = createWithRemoteLoader({\n modules: ['components-core:FormInfo', 'components-core:Global@PureGlobal']\n})(({ remoteModules }) => {\n const [FormInfo, PureGlobal] = remoteModules;\n const { Form, SubmitButton, CancelButton, fields } = FormInfo;\n const { Input } = fields;\n\n return (\n <PureGlobal preset={mockPreset}>\n <Form\n onSubmit={(data) => {\n console.log('提交数据:', data);\n }}\n >\n <FormInfo\n title=\"用户选择示例\"\n column={1}\n list={[\n <Input name=\"projectName\" label=\"项目名称\" rule=\"REQ\" placeholder=\"请输入项目名称\" />\n ]}\n />\n <UserSelect\n name=\"userId\"\n label=\"负责人\"\n rule=\"REQ\"\n placeholder=\"请选择负责人\"\n />\n <div style={{ marginTop: 24, textAlign: 'center' }}>\n <CancelButton style={{ marginRight: 8 }}>取消</CancelButton>\n <SubmitButton type=\"primary\">提交</SubmitButton>\n </div>\n </Form>\n </PureGlobal>\n );\n});\n\nrender(<BaseExample />);\n\n`,\n scope: [{\n name: \"_UserSelect\",\n packageName: \"@components/UserSelect\",\n component: component_43\n},{\n name: \"_mockPreset\",\n packageName: \"@root/mockPreset\",\n component: component_44\n},{\n name: \"remoteLoader\",\n packageName: \"@kne/remote-loader\",\n component: component_45\n}]\n},{\n title: `多选模式`,\n description: `展示 UserSelect 的多选模式,适用于选择多个用户的场景`,\n code: `const { default: UserSelect } = _UserSelect;\nconst { createWithRemoteLoader } = remoteLoader;\nconst { default: mockPreset } = _mockPreset;\n\nconst MultipleExample = createWithRemoteLoader({\n modules: ['components-core:FormInfo', 'components-core:Global@PureGlobal']\n})(({ remoteModules }) => {\n const [FormInfo, PureGlobal] = remoteModules;\n const { Form, SubmitButton, CancelButton } = FormInfo;\n\n return (\n <PureGlobal preset={mockPreset}>\n <Form\n onSubmit={(data) => {\n console.log('提交数据:', data);\n }}\n >\n <FormInfo\n title=\"团队成员选择\"\n column={1}\n />\n <UserSelect\n name=\"memberIds\"\n label=\"团队成员\"\n rule=\"REQ\"\n placeholder=\"请选择团队成员\"\n single={false}\n />\n <div style={{ marginTop: 24, textAlign: 'center' }}>\n <CancelButton style={{ marginRight: 8 }}>取消</CancelButton>\n <SubmitButton type=\"primary\">提交</SubmitButton>\n </div>\n </Form>\n </PureGlobal>\n );\n});\n\nrender(<MultipleExample />);\n\n`,\n scope: [{\n name: \"_UserSelect\",\n packageName: \"@components/UserSelect\",\n component: component_43\n},{\n name: \"_mockPreset\",\n packageName: \"@root/mockPreset\",\n component: component_44\n},{\n name: \"remoteLoader\",\n packageName: \"@kne/remote-loader\",\n component: component_45\n}]\n},{\n title: `带初始值`,\n description: `展示 UserSelect 带初始值的使用方式,用于编辑场景`,\n code: `const { default: UserSelect } = _UserSelect;\nconst { createWithRemoteLoader } = remoteLoader;\nconst { default: mockPreset } = _mockPreset;\n\nconst WithInitialValueExample = createWithRemoteLoader({\n modules: ['components-core:FormInfo', 'components-core:Global@PureGlobal']\n})(({ remoteModules }) => {\n const [FormInfo, PureGlobal] = remoteModules;\n const { Form, SubmitButton, CancelButton } = FormInfo;\n\n // 模拟编辑场景的初始数据(初始值必须包含 value 和 label)\n const initialValue = {\n projectName: '智能办公系统 V2.0',\n ownerId: { value: 2, label: '李四' },\n memberIds: [\n { value: 3, label: '王五' },\n { value: 6, label: '孙八' },\n { value: 7, label: '周九' }\n ]\n };\n\n return (\n <PureGlobal preset={mockPreset}>\n <Form\n data={initialValue}\n onSubmit={(data) => {\n console.log('提交数据:', data);\n }}\n >\n <FormInfo\n title=\"编辑项目\"\n column={1}\n />\n <UserSelect\n name=\"ownerId\"\n label=\"项目负责人\"\n rule=\"REQ\"\n placeholder=\"请选择项目负责人\"\n />\n <UserSelect\n name=\"memberIds\"\n label=\"项目成员\"\n placeholder=\"请选择项目成员\"\n single={false}\n />\n <div style={{ marginTop: 24, textAlign: 'center' }}>\n <CancelButton style={{ marginRight: 8 }}>取消</CancelButton>\n <SubmitButton type=\"primary\">保存</SubmitButton>\n </div>\n </Form>\n </PureGlobal>\n );\n});\n\nrender(<WithInitialValueExample />);\n\n`,\n scope: [{\n name: \"_UserSelect\",\n packageName: \"@components/UserSelect\",\n component: component_43\n},{\n name: \"_mockPreset\",\n packageName: \"@root/mockPreset\",\n component: component_44\n},{\n name: \"remoteLoader\",\n packageName: \"@kne/remote-loader\",\n component: component_45\n}]\n},{\n title: `状态筛选`,\n description: `通过 status 参数筛选用户,可设置只显示特定状态的用户`,\n code: `const { default: UserSelect } = _UserSelect;\nconst { createWithRemoteLoader } = remoteLoader;\nconst { default: mockPreset } = _mockPreset;\nconst { Space } = antd;\n\nconst StatusFilterExample = createWithRemoteLoader({\n modules: ['components-core:FormInfo', 'components-core:Global@PureGlobal']\n})(({ remoteModules }) => {\n const [FormInfo, PureGlobal] = remoteModules;\n const { Form, SubmitButton } = FormInfo;\n\n return (\n <PureGlobal preset={mockPreset}>\n <Space direction=\"vertical\" size=\"large\" style={{ width: '100%' }}>\n <Form\n onSubmit={(data) => {\n console.log('活跃用户:', data);\n }}\n >\n <FormInfo title=\"仅选择活跃用户\" column={1} />\n <UserSelect\n name=\"activeUserId\"\n label=\"活跃用户\"\n placeholder=\"仅显示状态正常的用户\"\n status={0}\n />\n <div style={{ marginTop: 16 }}>\n <SubmitButton size=\"small\" type=\"primary\">确认</SubmitButton>\n </div>\n </Form>\n\n <Form\n onSubmit={(data) => {\n console.log('全部用户:', data);\n }}\n >\n <FormInfo title=\"选择全部用户(不限状态)\" column={1} />\n <UserSelect\n name=\"allUserId\"\n label=\"全部用户\"\n placeholder=\"显示所有状态的用户\"\n status={null}\n />\n <div style={{ marginTop: 16 }}>\n <SubmitButton size=\"small\" type=\"primary\">确认</SubmitButton>\n </div>\n </Form>\n </Space>\n </PureGlobal>\n );\n});\n\nrender(<StatusFilterExample />);\n\n`,\n scope: [{\n name: \"_UserSelect\",\n packageName: \"@components/UserSelect\",\n component: component_43\n},{\n name: \"_mockPreset\",\n packageName: \"@root/mockPreset\",\n component: component_44\n},{\n name: \"remoteLoader\",\n packageName: \"@kne/remote-loader\",\n component: component_45\n},{\n name: \"antd\",\n packageName: \"antd\",\n component: component_46\n}]\n},{\n title: `只读模式`,\n description: `展示 UserSelect 的只读模式,适用于查看场景`,\n code: `const { default: UserSelect } = _UserSelect;\nconst { createWithRemoteLoader } = remoteLoader;\nconst { default: mockPreset } = _mockPreset;\n\nconst ReadonlyExample = createWithRemoteLoader({\n modules: ['components-core:FormInfo', 'components-core:Global@PureGlobal']\n})(({ remoteModules }) => {\n const [FormInfo, PureGlobal] = remoteModules;\n const { Form } = FormInfo;\n\n // 模拟只读场景的初始数据(初始值必须包含 value 和 label)\n const initialValue = {\n projectName: '企业协同平台',\n ownerId: { value: 1, label: '张三' },\n memberIds: [\n { value: 2, label: '李四' },\n { value: 3, label: '王五' },\n { value: 6, label: '孙八' }\n ]\n };\n\n return (\n <PureGlobal preset={mockPreset}>\n <Form data={initialValue}>\n <FormInfo\n title=\"项目详情(只读)\"\n column={1}\n />\n <UserSelect\n name=\"ownerId\"\n label=\"项目负责人\"\n disabled\n />\n <UserSelect\n name=\"memberIds\"\n label=\"项目成员\"\n disabled\n single={false}\n />\n </Form>\n </PureGlobal>\n );\n});\n\nrender(<ReadonlyExample />);\n\n`,\n scope: [{\n name: \"_UserSelect\",\n packageName: \"@components/UserSelect\",\n component: component_43\n},{\n name: \"_mockPreset\",\n packageName: \"@root/mockPreset\",\n component: component_44\n},{\n name: \"remoteLoader\",\n packageName: \"@kne/remote-loader\",\n component: component_45\n}]\n}]\n }\n};\nexport default readmeConfig;\n","import * as component_52 from '@components/UserTool';\nimport * as component_53 from '@root/mockPreset';\nimport * as component_54 from '@kne/remote-loader';\nimport * as component_55 from 'antd';\nconst readmeConfig = {\n name: `UserTool`,\n summary: `<p>用户工具组件,显示用户头像和名称,点击展开下拉菜单,包含用户信息、自定义操作列表和退出登录功能。适用于系统顶部导航栏的用户区域。同时提供 RightOptions 组合组件,包含语言切换和用户工具。</p>`,\n \n \n api: `<table>\n<thead>\n<tr>\n<th>属性名</th>\n<th>说明</th>\n<th>类型</th>\n<th>默认值</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>avatar</td>\n<td>用户头像 URL</td>\n<td>string</td>\n<td>-</td>\n</tr>\n<tr>\n<td>name</td>\n<td>用户名称,不传或为空时显示\"未命名\"</td>\n<td>string</td>\n<td>-</td>\n</tr>\n<tr>\n<td>email</td>\n<td>用户邮箱</td>\n<td>string</td>\n<td>-</td>\n</tr>\n<tr>\n<td>list</td>\n<td>操作列表,每项包含 iconType、label、onClick</td>\n<td>Array&lt;{iconType: string, label: string, onClick: function}&gt;</td>\n<td>-</td>\n</tr>\n<tr>\n<td>children</td>\n<td>自定义子元素,显示在下拉菜单的用户信息和操作列表之间</td>\n<td>ReactNode</td>\n<td>-</td>\n</tr>\n<tr>\n<td>storeKeys</td>\n<td>退出登录时清除的存储 key</td>\n<td>object</td>\n<td>{ token: 'X-User-Token' }</td>\n</tr>\n<tr>\n<td>domain</td>\n<td>退出登录时跳转的域名</td>\n<td>string</td>\n<td>-</td>\n</tr>\n</tbody>\n</table>`,\n example: {\n isFull: false,\n className: ``,\n style: ``,\n list: [{\n title: `基础用法`,\n description: `展示 UserTool 组件的基本使用方式,点击显示用户信息和操作菜单`,\n code: `const { default: UserTool } = _UserTool;\nconst { createWithRemoteLoader } = remoteLoader;\nconst { default: mockPreset } = _mockPreset;\n\nconst BaseExample = createWithRemoteLoader({\n modules: ['components-core:Global@PureGlobal']\n})(({ remoteModules }) => {\n const [PureGlobal] = remoteModules;\n\n const handleEditProfile = () => {\n console.log('编辑个人资料');\n };\n\n const handleChangePassword = () => {\n console.log('修改密码');\n };\n\n return (\n <PureGlobal preset={mockPreset}>\n <div style={{ display: 'flex', justifyContent: 'flex-end', padding: 16, background: '#f5f5f5' }}>\n <UserTool\n avatar=\"https://api.dicebear.com/7.x/avataaars/svg?seed=zhangsan\"\n name=\"张三\"\n email=\"zhangsan@example.com\"\n list={[\n { iconType: 'icon-gerenziliao', label: '个人资料', onClick: handleEditProfile },\n { iconType: 'icon-xiugaimima', label: '修改密码', onClick: handleChangePassword }\n ]}\n />\n </div>\n </PureGlobal>\n );\n});\n\nrender(<BaseExample />);\n\n`,\n scope: [{\n name: \"_UserTool\",\n packageName: \"@components/UserTool\",\n component: component_52\n},{\n name: \"_mockPreset\",\n packageName: \"@root/mockPreset\",\n component: component_53\n},{\n name: \"remoteLoader\",\n packageName: \"@kne/remote-loader\",\n component: component_54\n}]\n},{\n title: `自定义子元素`,\n description: `通过 children 在下拉菜单中添加自定义内容,如升级提示、VIP 标识等`,\n code: `const { default: UserTool } = _UserTool;\nconst { createWithRemoteLoader } = remoteLoader;\nconst { default: mockPreset } = _mockPreset;\nconst { Button } = antd;\n\nconst WithChildrenExample = createWithRemoteLoader({\n modules: ['components-core:Global@PureGlobal']\n})(({ remoteModules }) => {\n const [PureGlobal] = remoteModules;\n\n return (\n <PureGlobal preset={mockPreset}>\n <div style={{ display: 'flex', justifyContent: 'flex-end', padding: 16, background: '#f5f5f5' }}>\n <UserTool\n avatar=\"https://api.dicebear.com/7.x/avataaars/svg?seed=lisi\"\n name=\"李四\"\n email=\"lisi@tech-innovation.com\"\n >\n <div style={{ padding: '8px 0' }}>\n <Button type=\"primary\" block size=\"small\">\n 升级到专业版\n </Button>\n </div>\n </UserTool>\n </div>\n </PureGlobal>\n );\n});\n\nrender(<WithChildrenExample />);\n\n`,\n scope: [{\n name: \"_UserTool\",\n packageName: \"@components/UserTool\",\n component: component_52\n},{\n name: \"_mockPreset\",\n packageName: \"@root/mockPreset\",\n component: component_53\n},{\n name: \"remoteLoader\",\n packageName: \"@kne/remote-loader\",\n component: component_54\n},{\n name: \"antd\",\n packageName: \"antd\",\n component: component_55\n}]\n},{\n title: `右侧选项组合`,\n description: `RightOptions 组件,组合了语言切换和 UserTool,适用于顶部导航栏右侧`,\n code: `const { RightOptions } = _UserTool;\nconst { createWithRemoteLoader } = remoteLoader;\nconst { default: mockPreset } = _mockPreset;\n\nconst RightOptionsExample = createWithRemoteLoader({\n modules: ['components-core:Global@PureGlobal']\n})(({ remoteModules }) => {\n const [PureGlobal] = remoteModules;\n\n return (\n <PureGlobal preset={mockPreset}>\n <div style={{ display: 'flex', justifyContent: 'flex-end', padding: 16, background: '#1890ff' }}>\n <RightOptions />\n </div>\n </PureGlobal>\n );\n});\n\nrender(<RightOptionsExample />);\n\n`,\n scope: [{\n name: \"_UserTool\",\n packageName: \"@components/UserTool\",\n component: component_52\n},{\n name: \"_mockPreset\",\n packageName: \"@root/mockPreset\",\n component: component_53\n},{\n name: \"remoteLoader\",\n packageName: \"@kne/remote-loader\",\n component: component_54\n}]\n},{\n title: `最小配置`,\n description: `仅传入头像,名称和邮箱不传或为空时显示默认文案`,\n code: `const { default: UserTool } = _UserTool;\nconst { createWithRemoteLoader } = remoteLoader;\nconst { default: mockPreset } = _mockPreset;\n\nconst MinimalExample = createWithRemoteLoader({\n modules: ['components-core:Global@PureGlobal']\n})(({ remoteModules }) => {\n const [PureGlobal] = remoteModules;\n\n return (\n <PureGlobal preset={mockPreset}>\n <div style={{ display: 'flex', justifyContent: 'flex-end', padding: 16, background: '#f5f5f5' }}>\n <UserTool\n avatar=\"https://api.dicebear.com/7.x/avataaars/svg?seed=wangwu\"\n />\n </div>\n </PureGlobal>\n );\n});\n\nrender(<MinimalExample />);\n\n`,\n scope: [{\n name: \"_UserTool\",\n packageName: \"@components/UserTool\",\n component: component_52\n},{\n name: \"_mockPreset\",\n packageName: \"@root/mockPreset\",\n component: component_53\n},{\n name: \"remoteLoader\",\n packageName: \"@kne/remote-loader\",\n component: component_54\n}]\n}]\n }\n};\nexport default readmeConfig;\n","import { createContext, useContext } from 'react';\n\nconst context = createContext('/');\n\nexport const { Provider } = context;\n\nexport const useBaseUrl = baseUrlProp => {\n const target = useContext(context);\n return baseUrlProp || target?.baseUrl;\n};\n\nexport const useProps = () => {\n return useContext(context);\n};\n\nexport default context;\n","const locale = {\n // User List columns\n Avatar: '头像',\n Nickname: '昵称',\n Email: '邮箱',\n Phone: '电话',\n IsSuperAdmin: '是否超级管理员',\n Status: '状态',\n Description: '个人简介',\n\n // Status values\n Yes: '是',\n No: '否',\n Normal: '正常',\n NotActivated: '初始化未激活',\n Disabled: '已禁用',\n Closed: '已关闭',\n Other: '其他',\n\n // Actions\n AddUser: '添加用户',\n AddSuccess: '添加成功',\n EditUser: '编辑用户',\n EditUserInfo: '编辑用户信息',\n DeleteSuccess: '删除成功',\n SaveSuccess: '保存成功',\n Operation: '操作',\n Keyword: '关键字',\n\n // FormInner labels\n UserAvatar: '头像',\n UserNickname: '昵称',\n UserEmail: '邮箱',\n UserPhone: '手机',\n UserDescription: '个人简介',\n\n // Reset Password\n Password: '密码',\n RepeatPassword: '重复密码',\n ResetPassword: '重置密码',\n ModifyPassword: '修改密码',\n ModifyPasswordSuccess: '修改密码成功',\n\n // More Actions\n SetSuperAdmin: '设置超管',\n CancelSuperAdmin: '取消超管',\n SetSuperAdminConfirm: '确定要设置账号为超管吗?',\n CancelSuperAdminConfirm: '确定要取消账号的超管权限吗?',\n SetNormal: '设置为正常',\n SetNormalConfirm: '确定要设置账号为正常吗?',\n SetNormalSuccess: '账号已开启',\n CloseUser: '关闭',\n CloseUserConfirm: '确定要关闭该账号吗?',\n CloseUserSuccess: '账号已关闭',\n SetStatusSuccess: '设置成功',\n\n // Filter labels\n FilterEmail: '邮箱',\n FilterPhone: '电话',\n FilterStatus: '状态',\n FilterIsAdmin: '是否管理员',\n\n // Confirm\n Confirm: '确认',\n\n // InitAdmin\n InitSystem: '初始化系统',\n InitSystemDesc: '当前用户将被初始化为系统的超级管理员,本操作只能执行一次,执行完成后由该用户来执行其他的管理操作。',\n InitSuccess: '初始化管理员成功!'\n};\n\nexport default locale;\n","const locale = {\n // User List columns\n Avatar: 'Avatar',\n Nickname: 'Nickname',\n Email: 'Email',\n Phone: 'Phone',\n IsSuperAdmin: 'Is Super Admin',\n Status: 'Status',\n Description: 'Description',\n\n // Status values\n Yes: 'Yes',\n No: 'No',\n Normal: 'Normal',\n NotActivated: 'Not Activated',\n Disabled: 'Disabled',\n Closed: 'Closed',\n Other: 'Other',\n\n // Actions\n AddUser: 'Add User',\n AddSuccess: 'Added successfully',\n EditUser: 'Edit User',\n EditUserInfo: 'Edit User Info',\n DeleteSuccess: 'Deleted successfully',\n SaveSuccess: 'Saved successfully',\n Operation: 'Operation',\n Keyword: 'Keyword',\n\n // FormInner labels\n UserAvatar: 'Avatar',\n UserNickname: 'Nickname',\n UserEmail: 'Email',\n UserPhone: 'Phone',\n UserDescription: 'Description',\n\n // Reset Password\n Password: 'Password',\n RepeatPassword: 'Repeat Password',\n ResetPassword: 'Reset Password',\n ModifyPassword: 'Modify Password',\n ModifyPasswordSuccess: 'Password modified successfully',\n\n // More Actions\n SetSuperAdmin: 'Set Super Admin',\n CancelSuperAdmin: 'Cancel Super Admin',\n SetSuperAdminConfirm: 'Are you sure to set this account as super admin?',\n CancelSuperAdminConfirm: 'Are you sure to cancel super admin permission for this account?',\n SetNormal: 'Set Normal',\n SetNormalConfirm: 'Are you sure to set this account as normal?',\n SetNormalSuccess: 'Account has been opened',\n CloseUser: 'Close',\n CloseUserConfirm: 'Are you sure to close this account?',\n CloseUserSuccess: 'Account has been closed',\n SetStatusSuccess: 'Set status successfully',\n\n // Filter labels\n FilterEmail: 'Email',\n FilterPhone: 'Phone',\n FilterStatus: 'Status',\n FilterIsAdmin: 'Is Admin',\n\n // Confirm\n Confirm: 'Confirm',\n\n // InitAdmin\n InitSystem: 'Initialize System',\n InitSystemDesc: 'The current user will be initialized as the super administrator of the system. This operation can only be performed once. After completion, the user will perform other management operations.',\n InitSuccess: 'Initialized administrator successfully!'\n};\n\nexport default locale;\n","import { createWithIntlProvider } from '@kne/react-intl';\nimport zhCN from './locale/zh-CN';\nimport enUS from './locale/en-US';\n\nconst withLocale = createWithIntlProvider({\n defaultLocale: 'zh-CN',\n messages: {\n 'zh-CN': zhCN,\n 'en-US': enUS\n },\n namespace: 'components-admin:Admin'\n});\n\nexport default withLocale;\n","const getColumns = ({ formatMessage }) => {\n return [\n {\n name: 'avatar',\n title: formatMessage({ id: 'Avatar' }),\n type: 'avatar',\n valueOf: (item, { name }) => Object.assign({}, { gender: item['gender'] || 'M' }, { id: item[name] })\n },\n {\n name: 'nickname',\n title: formatMessage({ id: 'Nickname' }),\n type: 'mainInfo'\n },\n {\n name: 'email',\n title: formatMessage({ id: 'Email' }),\n type: 'other'\n },\n {\n name: 'phone',\n title: formatMessage({ id: 'Phone' }),\n type: 'serialNumber'\n },\n {\n name: 'isSuperAdmin',\n title: formatMessage({ id: 'IsSuperAdmin' }),\n type: 'other',\n valueOf: (item, { name }) => {\n return item[name] === true ? formatMessage({ id: 'Yes' }) : formatMessage({ id: 'No' });\n }\n },\n {\n name: 'status',\n title: formatMessage({ id: 'Status' }),\n type: 'tag',\n valueOf: (item, { name }) => {\n if (item[name] === 0) {\n return { type: 'success', text: formatMessage({ id: 'Normal' }) };\n }\n if (item[name] === 10) {\n return { text: formatMessage({ id: 'NotActivated' }) };\n }\n if (item[name] === 11) {\n return { type: 'danger', text: formatMessage({ id: 'Disabled' }) };\n }\n if (item[name] === 12) {\n return { type: 'danger', text: formatMessage({ id: 'Closed' }) };\n }\n\n return { text: formatMessage({ id: 'Other' }) };\n }\n },\n {\n name: 'description',\n title: formatMessage({ id: 'Description' }),\n type: 'description'\n }\n ];\n};\n\nexport default getColumns;\n","import { createWithRemoteLoader } from '@kne/remote-loader';\nimport { useIntl } from '@kne/react-intl';\nimport withLocale from '../withLocale';\n\nconst FormInner = createWithRemoteLoader({\n modules: ['components-core:FormInfo', 'components-core:FormInfo@formModule']\n})(withLocale(({ remoteModules }) => {\n const [FormInfo, formModule] = remoteModules;\n const { formatMessage } = useIntl();\n const { Input, TextArea, PhoneNumber, Avatar } = formModule;\n return (\n <FormInfo\n column={1}\n list={[\n <Avatar name=\"avatar\" label={formatMessage({ id: 'UserAvatar' })} labelHidden interceptor=\"photo-string\" />,\n <Input name=\"nickname\" label={formatMessage({ id: 'UserNickname' })} rule=\"LEN-0-100\" />,\n <Input name=\"email\" label={formatMessage({ id: 'UserEmail' })} rule=\"EMAIL ACCOUNT_IS_EXISTS\" realtime />,\n <PhoneNumber name=\"phone\" label={formatMessage({ id: 'UserPhone' })} rule=\"ACCOUNT_IS_EXISTS\" format=\"string\" />,\n <TextArea name=\"description\" label={formatMessage({ id: 'UserDescription' })} />\n ]}\n />\n );\n}));\n\nexport default FormInner;\n","import { createWithRemoteLoader } from '@kne/remote-loader';\nimport { useIntl } from '@kne/react-intl';\nimport withLocale from '../withLocale';\n\nconst ResetPasswordFormInner = createWithRemoteLoader({\n modules: ['components-core:FormInfo']\n})(withLocale(({ remoteModules }) => {\n const [FormInfo] = remoteModules;\n const { formatMessage } = useIntl();\n const { Input } = FormInfo.fields;\n return (\n <FormInfo\n column={1}\n list={[\n <Input.Password name=\"password\" label={formatMessage({ id: 'Password' })} rule=\"REQ LEN-6-50\" />,\n <Input.Password name=\"repeatPwd\" label={formatMessage({ id: 'RepeatPassword' })} rule=\"REQ LEN-6-50 REPEAT-password\" />\n ]}\n />\n );\n}));\n\nexport default ResetPasswordFormInner;\n","import { useState, useRef } from 'react';\nimport { createWithRemoteLoader } from '@kne/remote-loader';\nimport { Space, Button, App } from 'antd';\nimport { useIntl } from '@kne/react-intl';\nimport withLocale from '../withLocale';\nimport { useProps } from '../context';\nimport getColumns from './getColumns';\nimport FormInner from './FormInner';\nimport ResetPasswordFormInner from './ResetPasswordFormInner';\nimport md5 from 'md5';\nimport get from 'lodash/get';\n\nconst UserInner = createWithRemoteLoader({\n modules: ['components-core:Layout@TablePage', 'components-core:Filter', 'components-core:FormInfo@useFormModal', 'components-core:Global@usePreset']\n})(({ remoteModules, pageProps: propsPageProps }) => {\n const [TablePage, Filter, useFormModal, usePreset] = remoteModules;\n const { formatMessage } = useIntl();\n const contextProps = useProps();\n const pageProps = Object.assign({}, contextProps?.pageProps, propsPageProps);\n const [filter, setFilter] = useState([]);\n const { SearchInput, getFilterValue, fields: filterFields } = Filter;\n const { InputFilterItem, AdvancedSelectFilterItem } = filterFields;\n const { ajax, apis } = usePreset();\n const formModal = useFormModal();\n const { message } = App.useApp();\n const ref = useRef(null);\n const filterValue = getFilterValue(filter);\n return (\n <TablePage\n {...Object.assign({}, apis.admin.getUserList, { params: { filter: filterValue } })}\n pagination={{ paramsType: 'params' }}\n name=\"user-list\"\n ref={ref}\n menuFixed={pageProps?.menuFixed}\n columns={[\n ...getColumns({ formatMessage }),\n {\n name: 'options',\n title: formatMessage({ id: 'Operation' }),\n type: 'options',\n fixed: 'right',\n valueOf: item => {\n return [\n {\n children: formatMessage({ id: 'EditUser' }),\n onClick: () => {\n const modalApi = formModal({\n title: formatMessage({ id: 'EditUserInfo' }),\n size: 'small',\n children: <FormInner />,\n formProps: {\n data: Object.assign({}, item),\n onSubmit: async data => {\n const { data: resData } = await ajax(\n Object.assign({}, apis.admin.saveUser, {\n data: Object.assign({}, data, { id: item.id })\n })\n );\n if (resData.code !== 0) {\n return;\n }\n message.success(formatMessage({ id: 'SaveSuccess' }));\n ref.current.reload();\n modalApi.close();\n }\n }\n });\n }\n },\n {\n children: formatMessage({ id: 'ModifyPassword' }),\n onClick: () => {\n const modalApi = formModal({\n title: formatMessage({ id: 'ModifyPassword' }),\n size: 'small',\n children: <ResetPasswordFormInner />,\n formProps: {\n onSubmit: async data => {\n const { data: resData } = await ajax(\n Object.assign({}, apis.admin.resetUserPassword, {\n data: {\n password: md5(data.password),\n userId: item.id\n }\n })\n );\n if (resData.code !== 0) {\n return;\n }\n message.success(formatMessage({ id: 'ModifyPasswordSuccess' }));\n modalApi.close();\n }\n }\n });\n }\n },\n get(item, 'isSuperAdmin') === true\n ? {\n children: formatMessage({ id: 'CancelSuperAdmin' }),\n message: formatMessage({ id: 'CancelSuperAdminConfirm' }),\n isDelete: false,\n onClick: async () => {\n const { data: resData } = await ajax(\n Object.assign({}, apis.admin.setSuperAdmin, {\n data: { status: false, userId: item.id }\n })\n );\n if (resData.code !== 0) {\n return;\n }\n message.success(formatMessage({ id: 'SetStatusSuccess' }));\n ref.current.reload();\n }\n }\n : {\n children: formatMessage({ id: 'SetSuperAdmin' }),\n message: formatMessage({ id: 'SetSuperAdminConfirm' }),\n isDelete: false,\n onClick: async () => {\n const { data: resData } = await ajax(\n Object.assign({}, apis.admin.setSuperAdmin, {\n data: { status: true, userId: item.id }\n })\n );\n if (resData.code !== 0) {\n return;\n }\n message.success(formatMessage({ id: 'SetStatusSuccess' }));\n ref.current.reload();\n }\n },\n ...(() => {\n const list = [];\n if (item.status !== 0) {\n list.push({\n confirm: true,\n children: formatMessage({ id: 'SetNormal' }),\n message: formatMessage({ id: 'SetNormalConfirm' }),\n isDelete: false,\n onClick: async () => {\n const { data: resData } = await ajax(\n Object.assign({}, apis.admin.setUserNormal, {\n data: {\n id: item.id\n }\n })\n );\n if (resData.code !== 0) {\n return;\n }\n message.success(formatMessage({ id: 'SetNormalSuccess' }));\n ref.current.reload();\n }\n });\n }\n if (item.status !== 12) {\n list.push({\n isDelete: true,\n confirm: true,\n children: formatMessage({ id: 'CloseUser' }),\n message: formatMessage({ id: 'CloseUserConfirm' }),\n okText: formatMessage({ id: 'Confirm' }),\n onClick: async () => {\n const { data: resData } = await ajax(\n Object.assign({}, apis.admin.setUserClose, {\n data: {\n id: item.id\n }\n })\n );\n if (resData.code !== 0) {\n return;\n }\n message.success(formatMessage({ id: 'CloseUserSuccess' }));\n ref.current.reload();\n }\n });\n }\n return list;\n })()\n ];\n }\n }\n ]}\n page={{\n filter: {\n value: filter,\n onChange: setFilter,\n list: [\n [\n <InputFilterItem label={formatMessage({ id: 'FilterEmail' })} name=\"email\" />,\n <InputFilterItem label={formatMessage({ id: 'FilterPhone' })} name=\"phone\" />,\n <AdvancedSelectFilterItem\n label={formatMessage({ id: 'FilterStatus' })}\n name=\"status\"\n single\n api={{\n loader: () => {\n return {\n pageData: [\n { label: formatMessage({ id: 'Normal' }), value: 0 },\n {\n label: formatMessage({ id: 'NotActivated' }),\n value: 10\n },\n { label: formatMessage({ id: 'Closed' }), value: 12 }\n ]\n };\n }\n }}\n />,\n <AdvancedSelectFilterItem\n label={formatMessage({ id: 'FilterIsAdmin' })}\n name=\"isSuperAdmin\"\n single\n api={{\n loader: () => {\n return {\n pageData: [\n { label: formatMessage({ id: 'Yes' }), value: true },\n { label: formatMessage({ id: 'No' }), value: false }\n ]\n };\n }\n }}\n />\n ]\n ]\n },\n titleExtra: (\n <Space align=\"center\">\n <SearchInput name=\"nickname\" label={formatMessage({ id: 'Nickname' })} />\n <Button\n type=\"primary\"\n onClick={() => {\n const modalApi = formModal({\n title: formatMessage({ id: 'AddUser' }),\n size: 'small',\n children: <FormInner />,\n formProps: {\n onSubmit: async data => {\n const { data: resData } = await ajax(\n Object.assign({}, apis.admin.addUser, {\n data: Object.assign({}, data)\n })\n );\n if (resData.code !== 0) {\n return;\n }\n message.success(formatMessage({ id: 'AddSuccess' }));\n ref.current.reload();\n modalApi.close();\n }\n }\n });\n }}\n >\n {formatMessage({ id: 'AddUser' })}\n </Button>\n </Space>\n )\n }}\n />\n );\n});\n\nexport default withLocale(UserInner);\n","import { createWithRemoteLoader } from '@kne/remote-loader';\nimport { useEffect } from 'react';\nimport useRefCallback from '@kne/use-ref-callback';\nimport { useNavigate } from 'react-router-dom';\nimport { Result, App } from 'antd';\nimport { useIntl } from '@kne/react-intl';\nimport withLocale from './withLocale';\n\nconst InitAdminInner = createWithRemoteLoader({\n modules: ['components-core:Global@usePreset']\n})(({ remoteModules, baseUrl = '/admin' }) => {\n const [usePreset] = remoteModules;\n const { ajax, apis } = usePreset();\n const { message } = App.useApp();\n const { formatMessage } = useIntl();\n const navigate = useNavigate();\n const initAdmin = useRefCallback(async () => {\n const { data: resData } = await ajax(Object.assign({}, apis.admin.initSuperAdmin));\n if (resData.code !== 0) {\n return;\n }\n message.success(formatMessage({ id: 'InitSuccess' }));\n navigate(baseUrl, { replace: true });\n });\n\n useEffect(() => {\n initAdmin();\n }, [initAdmin]);\n return (\n <Result\n status=\"warning\"\n title={formatMessage({ id: 'InitSystem' })}\n subTitle={formatMessage({ id: 'InitSystemDesc' })}\n />\n );\n});\n\nexport default withLocale(InitAdminInner);\n","import { Routes, Route, Navigate } from 'react-router-dom';\nimport { Provider } from './context';\nimport User from './User';\n\nconst Admin = ({ baseUrl, pageProps, ...props }) => {\n return (\n <Provider value={{ baseUrl, pageProps, ...props }}>\n <Routes>\n <Route path=\"user\" element={<User pageProps={pageProps} />} />\n <Route element={<Navigate to={`${baseUrl}/user`} replace />} />\n </Routes>\n </Provider>\n );\n};\n\nAdmin.User = User;\n\nexport default Admin;\n\nexport { default as InitAdmin } from './InitAdmin';\nexport { User };\n","const getApis = options => {\n const { prefix } = Object.assign(\n {},\n {\n prefix: `/api/v1`\n },\n options\n );\n return {\n user: {\n getUserInfo: {\n url: `${prefix}/user/getUserInfo`,\n method: 'GET',\n cache: 'get-user-info'\n },\n saveUserInfo: {\n url: `${prefix}/user/saveUserInfo`,\n method: 'POST'\n }\n },\n account: {\n sendSMSCode: {\n url: `${prefix}/account/sendSMSCode`,\n method: 'POST'\n },\n sendEmailCode: {\n url: `${prefix}/account/sendEmailCode`,\n method: 'POST'\n },\n register: {\n url: `${prefix}/account/register`,\n method: 'POST'\n },\n login: {\n url: `${prefix}/account/login`,\n method: 'POST'\n },\n modifyPassword: {\n url: `${prefix}/account/modifyPassword`,\n method: 'POST'\n },\n forgetPwd: {\n url: `${prefix}/account/forgetPwd`,\n method: 'POST'\n },\n parseResetToken: {\n url: `${prefix}/account/parseResetToken`,\n method: 'POST'\n },\n resetPassword: {\n url: `${prefix}/account/resetPassword`,\n method: 'POST'\n },\n validateCode: {\n url: `${prefix}/account/validateCode`,\n method: 'POST'\n },\n accountIsExists: {\n url: `${prefix}/account/accountIsExists`,\n method: 'POST'\n }\n },\n admin: {\n getSuperAdminInfo: {\n url: `${prefix}/admin/getSuperAdminInfo`,\n method: 'GET'\n },\n initSuperAdmin: {\n url: `${prefix}/admin/initSuperAdmin`,\n method: 'POST'\n },\n getUserList: {\n url: `${prefix}/admin/getUserList`,\n method: 'GET'\n },\n saveUser: {\n url: `${prefix}/admin/saveUser`,\n method: 'POST'\n },\n addUser: {\n url: `${prefix}/admin/addUser`,\n method: 'POST'\n },\n resetUserPassword: {\n url: `${prefix}/admin/resetUserPassword`,\n method: 'POST'\n },\n setSuperAdmin: {\n url: `${prefix}/admin/setSuperAdmin`,\n method: 'POST'\n },\n setUserClose: {\n url: `${prefix}/admin/setUserClose`,\n method: 'POST'\n },\n setUserNormal: {\n url: `${prefix}/admin/setUserNormal`,\n method: 'POST'\n }\n },\n signature: {\n list: {\n method: 'GET',\n url: `${prefix}/signature/list`\n },\n create: {\n method: 'POST',\n url: `${prefix}/signature/create`\n },\n update: {\n method: 'POST',\n url: `${prefix}/signature/update`\n },\n remove: {\n method: 'POST',\n url: `${prefix}/signature/remove`\n },\n verify: {\n method: 'POST',\n url: `${prefix}/signature/verify`\n }\n },\n webhook: {\n list: {\n url: `${prefix}/webhook/list`,\n method: 'GET'\n },\n create: {\n url: `${prefix}/webhook/create`,\n method: 'POST'\n },\n setStatus: {\n url: `${prefix}/webhook/set-status`,\n method: 'POST'\n },\n invoke: {\n url: `${prefix}/webhook/invoke`,\n method: 'POST'\n },\n invokeRecord: {\n url: `${prefix}/webhook/invoke-record`,\n method: 'GET'\n },\n remove: {\n url: `${prefix}/webhook/remove`,\n method: 'POST'\n }\n },\n task: {\n complete: {\n url: `${prefix}/task/complete`,\n method: 'POST'\n },\n cancel: {\n url: `${prefix}/task/cancel`,\n method: 'POST'\n },\n list: {\n url: `${prefix}/task/list`,\n method: 'GET'\n },\n retry: {\n url: `${prefix}/task/retry`,\n method: 'POST'\n }\n },\n tenantAdmin: {\n create: {\n url: `${prefix}/tenant/admin/create`,\n method: 'POST'\n },\n list: {\n url: `${prefix}/tenant/admin/list`,\n method: 'GET'\n },\n save: {\n url: `${prefix}/tenant/admin/save`,\n method: 'POST'\n },\n setStatus: {\n url: `${prefix}/tenant/admin/set-status`,\n method: 'POST'\n },\n remove: {\n url: `${prefix}/tenant/admin/remove`,\n method: 'POST'\n },\n detail: {\n url: `${prefix}/tenant/admin/detail`,\n method: 'GET'\n },\n companyDetail: {\n url: `${prefix}/tenant/admin/company-detail`,\n method: 'GET'\n },\n companySave: {\n url: `${prefix}/tenant/admin/company-save`,\n method: 'POST'\n },\n orgList: {\n url: `${prefix}/tenant/admin/org-list`,\n method: 'GET'\n },\n orgCreate: {\n url: `${prefix}/tenant/admin/org-create`,\n method: 'POST'\n },\n orgSave: {\n url: `${prefix}/tenant/admin/org-save`,\n method: 'POST'\n },\n orgRemove: {\n url: `${prefix}/tenant/admin/org-remove`,\n method: 'POST'\n },\n userList: {\n url: `${prefix}/tenant/admin/user-list`,\n method: 'GET'\n },\n userCreate: {\n url: `${prefix}/tenant/admin/user-create`,\n method: 'POST'\n },\n userSetStatus: {\n url: `${prefix}/tenant/admin/user-set-status`,\n method: 'POST'\n },\n userSave: {\n url: `${prefix}/tenant/admin/user-save`,\n method: 'POST'\n },\n userRemove: {\n url: `${prefix}/tenant/admin/user-remove`,\n method: 'POST'\n },\n userInviteToken: {\n url: `${prefix}/tenant/admin/user-invite-token`,\n method: 'GET'\n },\n userInviteMessage: {\n url: `${prefix}/tenant/admin/send-invite-message`,\n method: 'POST'\n },\n appendArgs: {\n url: `${prefix}/tenant/admin/append-args`,\n method: 'POST'\n },\n appendCustomComponent: {\n url: `${prefix}/tenant/admin/append-custom-component`,\n method: 'POST'\n },\n removeCustomComponent: {\n url: `${prefix}/tenant/admin/remove-custom-component`,\n method: 'POST'\n },\n saveCustomComponent: {\n url: `${prefix}/tenant/admin/save-custom-component`,\n method: 'POST'\n },\n copyCustomComponent: {\n url: `${prefix}/tenant/admin/copy-custom-component`,\n method: 'POST'\n },\n customComponentDetail: {\n url: `${prefix}/tenant/admin/custom-component-detail`,\n method: 'GET'\n },\n removeArg: {\n url: `${prefix}/tenant/admin/remove-arg`,\n method: 'POST'\n },\n role: {\n create: {\n url: `${prefix}/tenant/admin/role/create`,\n method: 'POST'\n },\n list: {\n url: `${prefix}/tenant/admin/role/list`,\n method: 'GET'\n },\n save: {\n url: `${prefix}/tenant/admin/role/save`,\n method: 'POST'\n },\n setStatus: {\n url: `${prefix}/tenant/admin/role/set-status`,\n method: 'POST'\n },\n remove: {\n url: `${prefix}/tenant/admin/role/remove`,\n method: 'POST'\n },\n permissionList: {\n url: `${prefix}/tenant/admin/role/permission-list`,\n method: 'GET'\n },\n permissionSave: {\n url: `${prefix}/tenant/admin/role/save-permission`,\n method: 'POST'\n }\n },\n permission: {\n list: {\n url: `${prefix}/tenant/admin/permission/list`,\n method: 'GET'\n },\n save: {\n url: `${prefix}/tenant/admin/permission/save`,\n method: 'POST'\n }\n }\n },\n tenant: {\n parseJoinToken: {\n url: `${prefix}/tenant/parse-join-token`,\n method: 'POST'\n },\n join: {\n url: `${prefix}/tenant/join`,\n method: 'POST'\n },\n availableList: {\n url: `${prefix}/tenant/available-list`,\n method: 'GET'\n },\n switchDefaultTenant: {\n url: `${prefix}/tenant/switch-default-tenant`,\n method: 'POST'\n },\n getUserInfo: {\n url: `${prefix}/tenant/getUserInfo`,\n method: 'GET'\n },\n companyDetail: {\n url: `${prefix}/tenant/company-detail`,\n method: 'GET'\n },\n companySave: {\n url: `${prefix}/tenant/company-save`,\n method: 'POST'\n },\n orgList: {\n url: `${prefix}/tenant/org-list`,\n method: 'GET'\n },\n orgCreate: {\n url: `${prefix}/tenant/org-create`,\n method: 'POST'\n },\n orgSave: {\n url: `${prefix}/tenant/org-save`,\n method: 'POST'\n },\n orgRemove: {\n url: `${prefix}/tenant/org-remove`,\n method: 'POST'\n },\n userList: {\n url: `${prefix}/tenant/user-list`,\n method: 'GET'\n },\n userCreate: {\n url: `${prefix}/tenant/user-create`,\n method: 'POST'\n },\n userSetStatus: {\n url: `${prefix}/tenant/user-set-status`,\n method: 'POST'\n },\n userSave: {\n url: `${prefix}/tenant/user-save`,\n method: 'POST'\n },\n userRemove: {\n url: `${prefix}/tenant/user-remove`,\n method: 'POST'\n },\n userInviteToken: {\n url: `${prefix}/tenant/user-invite-token`,\n method: 'GET'\n },\n userInviteMessage: {\n url: `${prefix}/tenant/send-invite-message`,\n method: 'POST'\n },\n customComponentDetail: {\n url: `${prefix}/tenant/custom-component-detail`,\n method: 'GET'\n },\n role: {\n create: {\n url: `${prefix}/tenant/role/create`,\n method: 'POST'\n },\n list: {\n url: `${prefix}/tenant/role/list`,\n method: 'GET'\n },\n save: {\n url: `${prefix}/tenant/role/save`,\n method: 'POST'\n },\n setStatus: {\n url: `${prefix}/tenant/role/set-status`,\n method: 'POST'\n },\n remove: {\n url: `${prefix}/tenant/role/remove`,\n method: 'POST'\n },\n permissionList: {\n url: `${prefix}/tenant/role/permission-list`,\n method: 'GET'\n },\n permissionSave: {\n url: `${prefix}/tenant/role/save-permission`,\n method: 'POST'\n }\n },\n permission: {\n list: {\n url: `${prefix}/tenant/permission/list`,\n method: 'GET'\n }\n }\n },\n intlAdmin: {\n langType: {\n list: {\n loader: () => {\n return {\n totalCount: 0,\n pageData: []\n };\n },\n url: `${prefix}/intl-admin/lang-type/list`,\n method: 'GET'\n },\n create: {\n url: `${prefix}/intl-admin/lang-type/create`,\n method: 'POST'\n },\n save: {\n url: `${prefix}/intl-admin/lang-type/save`,\n method: 'POST'\n },\n remove: {\n url: `${prefix}/intl-admin/lang-type/remove`,\n method: 'POST'\n },\n setStatus: {\n url: `${prefix}/intl-admin/lang-type/set-status`,\n method: 'POST'\n }\n },\n langLib: {\n list: {\n loader: () => {\n return {\n totalCount: 0,\n pageData: []\n };\n },\n url: `${prefix}/intl-admin/lang-lib/list`,\n method: 'GET'\n },\n create: {\n url: `${prefix}/intl-admin/lang-lib/add-package`,\n method: 'POST'\n },\n save: {\n url: `${prefix}/intl-admin/lang-lib/save`,\n method: 'POST'\n },\n setStatus: {\n url: `${prefix}/intl-admin/lang-lib/set-status`,\n method: 'POST'\n },\n remove: {\n url: `${prefix}/intl-admin/lang-lib/remove`,\n method: 'POST'\n }\n }\n }\n };\n};\n\nexport default getApis;\n","import { createWithRemoteLoader } from '@kne/remote-loader';\nimport { Navigate, useLocation } from 'react-router-dom';\nimport Fetch from '@kne/react-fetch';\n\nconst CheckAccountIsInit = ({ data, baseUrl, children }) => {\n const location = useLocation();\n if (data.userInfo.status === 1) {\n return (\n <Navigate\n to={`${baseUrl || ''}/modify/${encodeURIComponent(data.userInfo.email)}?referer=${encodeURIComponent(location.pathname + location.search)}`}\n replace\n />\n );\n }\n\n return children;\n};\n\nexport const CustomUserInfo = createWithRemoteLoader({\n modules: ['components-core:Global@SetGlobal']\n})(({ remoteModules, cache, baseUrl, children, api }) => {\n const [SetGlobal] = remoteModules;\n return (\n <Fetch\n cache={cache}\n {...Object.assign({}, api)}\n render={({ data, reload }) => {\n return (\n <CheckAccountIsInit baseUrl={baseUrl} data={data}>\n <SetGlobal globalKey=\"userInfo\" value={{ value: data.userInfo, reload }} needReady>\n {children}\n </SetGlobal>\n </CheckAccountIsInit>\n );\n }}\n />\n );\n});\n\nexport const UserInfo = createWithRemoteLoader({\n modules: ['components-core:Global@usePreset']\n})(({ remoteModules, ...props }) => {\n const [usePreset] = remoteModules;\n const { apis } = usePreset();\n return <CustomUserInfo {...props} api={apis.user.getUserInfo} cache=\"user-info\" />;\n});\n\nexport const SuperAdminInfo = createWithRemoteLoader({\n modules: ['components-core:Global@SetGlobal', 'components-core:Global@usePreset']\n})(({ remoteModules, children }) => {\n const [SetGlobal, usePreset] = remoteModules;\n const { apis } = usePreset();\n return (\n <Fetch\n cache=\"super-admin-info\"\n {...Object.assign({}, apis.admin.getSuperAdminInfo)}\n render={({ data, reload }) => {\n return (\n <SetGlobal globalKey=\"userInfo\" value={{ value: data.userInfo, reload }} needReady>\n {children}\n </SetGlobal>\n );\n }}\n />\n );\n});\n","import { createWithRemoteLoader } from '@kne/remote-loader';\nimport { Outlet } from 'react-router-dom';\nimport { SuperAdminInfo, UserInfo, CustomUserInfo } from './Authenticate';\nimport UserTool from '@components/UserTool';\nimport Language from '@components/Account/Language';\nimport { Flex } from 'antd';\n\nexport const MainLayout = createWithRemoteLoader({\n modules: ['components-core:Layout']\n})(({ remoteModules, navigation, title, children }) => {\n const [Layout] = remoteModules;\n return (\n <Layout\n navigation={{\n defaultTitle: title,\n ...Object.assign({}, navigation)\n }}>\n {children}\n </Layout>\n );\n});\n\nexport const RightOptions = createWithRemoteLoader({\n modules: ['components-core:Global@GlobalValue']\n})(({ remoteModules }) => {\n const [GlobalValue] = remoteModules;\n\n return (\n <Flex gap={8}>\n <Language />\n <GlobalValue globalKey=\"userInfo\">\n {({ value }) => {\n const { nickname, avatar, email } = Object.assign({}, value?.value);\n return <UserTool name={nickname} email={email} avatar={avatar} />;\n }}\n </GlobalValue>\n </Flex>\n );\n});\n\nexport const AfterCustomUserLoginLayout = ({ baseUrl, navigation, api, children, ...props }) => {\n return (\n <CustomUserInfo baseUrl={baseUrl || '/account'} api={api}>\n <MainLayout\n {...props}\n navigation={Object.assign(\n {},\n {\n rightOptions: <RightOptions />\n },\n navigation\n )}>\n {children || <Outlet />}\n </MainLayout>\n </CustomUserInfo>\n );\n};\n\nexport const AfterCustomUserLogin = ({ baseUrl, api, children, ...props }) => {\n return (\n <CustomUserInfo baseUrl={baseUrl || '/account'} api={api}>\n {children || <Outlet />}\n </CustomUserInfo>\n );\n};\n\nexport const AfterUserLoginLayout = ({ baseUrl, navigation, children, ...props }) => {\n return (\n <UserInfo baseUrl={baseUrl || '/account'}>\n <MainLayout\n {...props}\n navigation={Object.assign(\n {},\n {\n rightOptions: <RightOptions />\n },\n navigation\n )}>\n {children || <Outlet />}\n </MainLayout>\n </UserInfo>\n );\n};\n\nexport const AfterUserLogin = ({ baseUrl, children, ...props }) => {\n return <UserInfo baseUrl={baseUrl || '/account'}>{children || <Outlet />}</UserInfo>;\n};\n\nexport const AfterAdminUserLoginLayout = ({ navigation, children, ...props }) => {\n return (\n <SuperAdminInfo>\n <MainLayout\n {...props}\n navigation={Object.assign(\n {},\n {\n rightOptions: <RightOptions />\n },\n navigation\n )}>\n {children || <Outlet />}\n </MainLayout>\n </SuperAdminInfo>\n );\n};\n\nexport const BeforeLoginLayout = ({ children, ...props }) => {\n return <>{children || <Outlet />}</>;\n};\n","const locale = {\n // FormInner labels\n Avatar: '头像',\n Email: '邮箱',\n Nickname: '昵称',\n Description: '简介',\n\n // SaveUserInfo\n EditUserInfo: '编辑个人基本信息',\n SaveSuccess: '保存成功'\n};\n\nexport default locale;\n","const locale = {\n // FormInner labels\n Avatar: 'Avatar',\n Email: 'Email',\n Nickname: 'Nickname',\n Description: 'Description',\n\n // SaveUserInfo\n EditUserInfo: 'Edit Personal Info',\n SaveSuccess: 'Saved successfully'\n};\n\nexport default locale;\n","import { createWithIntlProvider } from '@kne/react-intl';\nimport zhCN from './locale/zh-CN';\nimport enUS from './locale/en-US';\n\nconst withLocale = createWithIntlProvider({\n defaultLocale: 'zh-CN',\n messages: {\n 'zh-CN': zhCN,\n 'en-US': enUS\n },\n namespace: 'components-admin:Authenticate'\n});\n\nexport default withLocale;\n","import { createWithRemoteLoader } from '@kne/remote-loader';\nimport { useIntl } from '@kne/react-intl';\nimport withLocale from './withLocale';\nimport { Flex } from 'antd';\n\nconst UserInfoFormInner = createWithRemoteLoader({\n modules: ['components-core:FormInfo']\n})(withLocale(({ remoteModules, ...props }) => {\n const [FormInfo] = remoteModules;\n const { formatMessage } = useIntl();\n const { Avatar, Input, TextArea } = FormInfo.fields;\n return (\n <FormInfo\n {...props}\n list={[\n <Flex justify=\"center\">\n <Avatar name=\"avatar\" label={formatMessage({ id: 'Avatar' })} labelHidden interceptor=\"photo-string\" />\n </Flex>,\n <Input name=\"email\" label={formatMessage({ id: 'Email' })} rule=\"REQ\" />,\n <Input name=\"nickname\" label={formatMessage({ id: 'Nickname' })} />,\n <TextArea name=\"description\" label={formatMessage({ id: 'Description' })} rule=\"LEN-0-500\" />\n ]}\n />\n );\n}));\n\nexport default UserInfoFormInner;\n","import { createWithRemoteLoader } from '@kne/remote-loader';\nimport { useIntl } from '@kne/react-intl';\nimport withLocale from './withLocale';\nimport UserInfoFormInner from './UserInfoFormInner';\nimport { App } from 'antd';\n\nconst SaveUserInfoInner = createWithRemoteLoader({\n modules: ['components-core:FormInfo@useFormModal', 'components-core:Global@usePreset', 'components-core:Global@useGlobalContext']\n})(({ remoteModules, children }) => {\n const [useFormModal, usePreset, useGlobalContext] = remoteModules;\n const formModal = useFormModal();\n const { global } = useGlobalContext('userInfo');\n const { apis, ajax } = usePreset();\n const { message } = App.useApp();\n const { formatMessage } = useIntl();\n return children({\n onClick: () => {\n const modalApi = formModal({\n title: formatMessage({ id: 'EditUserInfo' }),\n size: 'small',\n formProps: {\n data: global.value,\n onSubmit: async data => {\n const { data: resData } = await ajax(\n Object.assign({}, apis.user.saveUserInfo, {\n data\n })\n );\n if (resData.code !== 0) {\n return;\n }\n message.success(formatMessage({ id: 'SaveSuccess' }));\n global.reload();\n modalApi.close();\n }\n },\n children: <UserInfoFormInner column={1} />\n });\n }\n });\n});\n\nexport default withLocale(SaveUserInfoInner);\n","import { createWithRemoteLoader } from '@kne/remote-loader';\nimport { useMemo } from 'react';\n\nconst Editor = createWithRemoteLoader({\n modules: ['components-thirdparty:CKEditor', 'components-core:Global@usePreset']\n})(({ remoteModules, ...props }) => {\n const [Editor, usePreset] = remoteModules;\n const { apis } = usePreset();\n const uploadAdapter = useMemo(() => {\n return { upload: apis?.file?.uploadForEditor };\n }, [apis?.file?.uploadForEditor]);\n return <Editor {...props} uploadAdapter={uploadAdapter} />;\n});\n\nexport default Editor;\n","import { createWithRemoteLoader } from '@kne/remote-loader';\nimport { App, Button } from 'antd';\n\nconst GroupSelect = createWithRemoteLoader({\n modules: ['components-core:FormInfo', 'components-core:FormInfo@useFormModal', 'components-core:Global@usePreset']\n})(({\n remoteModules,\n name,\n label,\n rule,\n apis,\n valueKey = 'code',\n labelKey = 'name',\n single,\n placeholder,\n disabled,\n groupName = '标签',\n ...props\n}) => {\n const [FormInfo, useFormModal, usePreset] = remoteModules;\n const { fields } = FormInfo;\n const { SuperSelectTableList } = fields;\n const { ajax, apis: presetApis } = usePreset();\n const { message, modal } = App.useApp();\n const formModal = useFormModal();\n\n const handleDelete = async (item, { fetchApi, value, setValue }) => {\n try {\n const { data: resData } = await ajax(\n Object.assign({}, apis?.remove || presetApis?.group?.remove, {\n data: { id: item.id, code: item.code }\n })\n );\n\n if (resData.code !== 0) {\n return;\n }\n\n message.success(`删除${groupName}成功`);\n fetchApi.reload();\n\n // 如果删除的项目在已选值中,从已选值中移除\n if (value && value.length > 0 && value.find(target => item[valueKey] === target[valueKey])) {\n const index = value.findIndex(target => item[valueKey] === target[valueKey]);\n const newValue = value.slice(0);\n newValue.splice(index, 1);\n setValue(newValue);\n }\n } catch (error) {\n message.error(`删除${groupName}失败`);\n }\n };\n\n const handleAdd = ({ reload }) => {\n formModal({\n title: `添加${groupName}`,\n size: 'small',\n formProps: {\n onSubmit: async formData => {\n const { data: resData } = await ajax(\n Object.assign({}, apis?.create || presetApis?.group?.create, {\n data: formData\n })\n );\n if (resData.code !== 0) {\n return false;\n }\n message.success(`添加${groupName}成功`);\n reload();\n }\n },\n children: (\n <FormInfo\n column={1}\n list={[\n <FormInfo.fields.Input name=\"code\" label=\"编码\" rule=\"REQ\" placeholder=\"请输入唯一编码\" />,\n <FormInfo.fields.Input name=\"name\" label=\"名称\" rule=\"REQ\" placeholder={`请输入${groupName}名称`} />,\n <FormInfo.fields.TextArea name=\"description\" label=\"描述\" placeholder={`请输入${groupName}描述`} />\n ]}\n />\n )\n });\n };\n\n const hasApis = apis !== undefined;\n const showAdd = hasApis ? !!apis?.create : !!presetApis?.group?.create;\n const showDelete = hasApis ? !!apis?.remove : !!presetApis?.group?.remove;\n\n const columns = [\n { title: '编码', name: 'code', span: 4 },\n { title: '名称', name: 'name', span: 6 },\n { title: '描述', name: 'description', span: showDelete ? 10 : 14 }\n ];\n\n if (showDelete) {\n columns.push({\n title: '操作',\n name: 'options',\n span: 4,\n getValueOf: (item, { context }) => {\n const { fetchApi, value, setValue } = context;\n return (\n <span onClick={e => e.stopPropagation()}>\n <a\n onClick={() => {\n modal.confirm({\n title: '确认删除',\n content: `确定要删除${groupName}\"${item.name}\"吗?`,\n okText: '确定',\n cancelText: '取消',\n onOk: () => handleDelete(item, { fetchApi, value, setValue })\n });\n }}>\n 删除\n </a>\n </span>\n );\n }\n });\n }\n\n return (\n <SuperSelectTableList\n name={name}\n label={label}\n rule={rule}\n placeholder={placeholder}\n disabled={disabled}\n single={single}\n valueKey={valueKey}\n labelKey={labelKey}\n api={apis?.list || presetApis?.group?.list}\n getSearchProps={({ searchText }) => ({\n filter: { keyword: searchText }\n })}\n pagination={{ paramsType: 'params' }}\n columns={columns}\n isPopup={false}\n footer={showAdd ? ({ reload }) => <Button type=\"link\" onClick={() => handleAdd({ reload })}>{`添加${groupName}`}</Button> : null}\n {...props}\n />\n );\n});\n\nexport default GroupSelect;\n","const getColumns = () => {\n return [\n {\n name: 'id',\n title: 'ID',\n type: 'serialNumber',\n hover: false,\n primary: false\n },\n {\n name: 'namespace',\n title: '命名空间',\n type: 'mainInfo',\n hover: false,\n primary: false\n },\n {\n name: 'locale',\n title: '语言'\n },\n {\n name: 'code',\n title: '编码'\n },\n {\n name: 'target',\n title: '目标值'\n },\n {\n name: 'reviewStatus',\n title: '审核状态',\n type: 'tag',\n valueOf: ({ reviewStatus }) =>\n reviewStatus && {\n isEnum: true,\n moduleName: 'reviewStatus',\n name: reviewStatus\n }\n },\n {\n name: 'status',\n title: '状态',\n type: 'tag',\n valueOf: ({ status }) =>\n status && {\n isEnum: true,\n moduleName: 'openStatus',\n name: status\n }\n }\n ];\n};\n\nexport default getColumns;\n","import { createWithRemoteLoader } from '@kne/remote-loader';\nimport BizUnit from '@components/BizUnit';\nimport getColumns from './getColumns';\n\nconst LangLib = createWithRemoteLoader({\n modules: ['components-core:Global@usePreset', 'components-core:Layout@TablePage']\n})(({ remoteModules, menu, pageProps = {} }) => {\n const [usePreset, TablePage] = remoteModules;\n const { apis } = usePreset();\n return (\n <BizUnit name=\"langLib\" apis={apis.intlAdmin.langLib} getColumns={getColumns}>\n {({ filter, topOptions, titleExtra, tableOptions }) => {\n return (\n <TablePage\n {...Object.assign({}, tableOptions)}\n page={{\n ...pageProps,\n menu,\n filter,\n titleExtra,\n topOptions\n }}\n />\n );\n }}\n </BizUnit>\n );\n});\n\nexport default LangLib;\n","const getColumns = () => {\n return [\n {\n name: ' id',\n title: 'ID',\n type: 'serialNumber',\n hover: false,\n primary: false\n },\n {\n name: 'name',\n title: '名称',\n type: 'mainInfo',\n hover: false,\n primary: false\n },\n {\n name: 'code',\n title: '编码'\n },\n {\n name: 'params',\n title: '翻译参数'\n },\n {\n name: 'description',\n title: '描述',\n type: 'description',\n ellipsis: true\n },\n {\n name: 'status',\n title: '状态',\n type: 'tag',\n valueOf: ({ status }) =>\n status && {\n isEnum: true,\n moduleName: 'openStatus',\n name: status\n }\n }\n ];\n};\n\nexport default getColumns;\n","import { createWithRemoteLoader } from '@kne/remote-loader';\n\nconst FormInner = createWithRemoteLoader({\n modules: ['components-core:FormInfo']\n})(({ remoteModules, ...props }) => {\n const [FormInfo] = remoteModules;\n const { Input, TextArea } = FormInfo.fields;\n return (\n <FormInfo\n column={1}\n {...props}\n list={[\n <Input name=\"name\" label=\"名称\" rule=\"REQ LEN-0-100\" />,\n <Input name=\"code\" label=\"编码\" rule=\"REQ LEN-0-100\" />,\n <TextArea name=\"params\" label=\"翻译参数\" rule=\"LEN-0-1000\" />,\n <TextArea name=\"description\" label=\"描述\" rule=\"LEN-0-1000\" />\n ]}\n />\n );\n});\n\nexport default FormInner;\n","import { createWithRemoteLoader } from '@kne/remote-loader';\nimport BizUnit from '@components/BizUnit';\nimport getColumns from './getColumns';\nimport FormInner from './FormInner';\n\nconst LangType = createWithRemoteLoader({\n modules: ['components-core:Global@usePreset', 'components-core:Layout@TablePage']\n})(({ remoteModules, menu, pageProps = {} }) => {\n const [usePreset, TablePage] = remoteModules;\n const { apis } = usePreset();\n return (\n <BizUnit\n name=\"langType\"\n apis={apis.intlAdmin.langType}\n getColumns={getColumns}\n getFormInner={props => <FormInner {...props} />}\n options={{\n bizName: '语言种类'\n }}>\n {({ filter, topOptions, titleExtra, tableOptions }) => {\n return (\n <TablePage\n {...Object.assign({}, tableOptions)}\n page={{\n ...pageProps,\n menu,\n filter,\n titleExtra,\n topOptions\n }}\n />\n );\n }}\n </BizUnit>\n );\n});\n\nexport default LangType;\n","const REVIEW_STATUS_ENUM = [\n { value: 'approved', description: '已通过' },\n { value: 'pending', description: '待审核' },\n { value: 'rejected', description: '已拒绝' }\n];\n\nconst enums = { reviewStatus: REVIEW_STATUS_ENUM };\n\nexport default enums;\n","import AppChildrenRouter from '@kne/app-children-router';\nimport { createWithRemoteLoader } from '@kne/remote-loader';\nimport LangType from './LangType';\nimport LangLib from './LangLib';\nimport enums from './enums';\n\nconst IntlAdmin = createWithRemoteLoader({\n modules: ['components-core:Menu']\n})(({ remoteModules, baseUrl, pageProps, ...props }) => {\n const [Menu] = remoteModules;\n\n const menu = (\n <Menu\n items={[\n {\n path: `${baseUrl}`,\n label: '语言类型'\n },\n {\n path: `${baseUrl}/lang-lib`,\n label: '语言库'\n }\n ]}\n />\n );\n\n return (\n <AppChildrenRouter\n {...props}\n baseUrl={baseUrl}\n list={[\n {\n index: true,\n loader: () => import('./LangType'),\n elementProps: {\n menu,\n pageProps\n }\n },\n {\n path: 'lang-lib',\n loader: () => import('./LangLib'),\n elementProps: {\n menu,\n pageProps\n }\n }\n ]}\n />\n );\n});\n\nIntlAdmin.LangType = LangType;\nIntlAdmin.LangLib = LangLib;\n\nexport default IntlAdmin;\nexport { LangType, LangLib, enums };\n","import style from './style.module.scss';\n\nconst MessageManger = () => {\n return <div>unleash creativity</div>;\n};\n\nexport default MessageManger;\n","const getColumns = ({ formatMessage }) => {\n return [\n {\n name: 'appId',\n title: 'AppId',\n type: 'other'\n },\n {\n name: 'secretKey',\n title: 'SecretKey',\n type: 'other'\n },\n {\n name: 'user',\n title: formatMessage({ id: 'BelongUser' }),\n type: 'other',\n valueOf: ({ user }) => {\n return user.nickname || user.email || user.phone;\n }\n },\n {\n name: 'description',\n title: formatMessage({ id: 'Description' }),\n type: 'description'\n },\n {\n name: 'lastVisitedAt',\n title: formatMessage({ id: 'LastVisitedAt' }),\n type: 'datetime'\n },\n {\n name: 'status',\n title: formatMessage({ id: 'Status' }),\n type: 'tag',\n valueOf: (item, { name }) => {\n if (item[name] === 0) {\n return { type: 'success', text: formatMessage({ id: 'Enabled' }) };\n }\n return { type: 'danger', text: formatMessage({ id: 'Disabled' }) };\n }\n },\n {\n name: 'createdAt',\n title: formatMessage({ id: 'CreatedAt' }),\n type: 'datetime'\n }\n ];\n};\n\nexport default getColumns;\n","const locale = {\n // Columns\n AppId: 'AppId',\n SecretKey: 'SecretKey',\n BelongUser: '所属用户',\n Description: '描述',\n LastVisitedAt: '最后访问时间',\n Status: '状态',\n CreatedAt: '创建时间',\n\n // Status values\n Enabled: '启用',\n Disabled: '禁用',\n\n // Actions\n AddSecretKey: '添加密钥',\n Verify: '验证',\n Operation: '操作',\n\n // Form labels\n VerifySecretKey: '验证密钥',\n Signature: '签名',\n Timestamp: '时间戳',\n ExpireTime: '过期时间',\n\n // Messages\n SecretKeyGenerated: '密钥生成成功',\n SaveSecretKeyWarning: '请妥善保存当前密钥,关闭窗口后将不能再获取到,请勿泄漏',\n VerifySuccess: '验证成功',\n VerifyFailed: '验证失败',\n OperationSuccess: '操作成功',\n DeleteSuccess: '删除成功',\n\n // Confirm messages\n DisableSecretKeyTitle: '温馨提示',\n DisableSecretKeyMessage: '禁用此密钥后,将拒绝此密钥的所有请求。是否确定要禁用此密钥?',\n EnableSecretKeyMessage: '启用此密钥后,将允许此密钥访问请求。是否确定要启用此密钥?',\n\n // Form rules\n InputNumber: '请输入数字'\n};\n\nexport default locale;\n","const locale = {\n // Columns\n AppId: 'AppId',\n SecretKey: 'SecretKey',\n BelongUser: 'Belong User',\n Description: 'Description',\n LastVisitedAt: 'Last Visited At',\n Status: 'Status',\n CreatedAt: 'Created At',\n\n // Status values\n Enabled: 'Enabled',\n Disabled: 'Disabled',\n\n // Actions\n AddSecretKey: 'Add Secret Key',\n Verify: 'Verify',\n Operation: 'Operation',\n\n // Form labels\n VerifySecretKey: 'Verify Secret Key',\n Signature: 'Signature',\n Timestamp: 'Timestamp',\n ExpireTime: 'Expire Time',\n\n // Messages\n SecretKeyGenerated: 'Secret key generated successfully',\n SaveSecretKeyWarning: 'Please save the current secret key properly. You will not be able to retrieve it after closing this window. Do not disclose it.',\n VerifySuccess: 'Verify successful',\n VerifyFailed: 'Verify failed',\n OperationSuccess: 'Operation successful',\n DeleteSuccess: 'Deleted successfully',\n\n // Confirm messages\n DisableSecretKeyTitle: 'Friendly Reminder',\n DisableSecretKeyMessage: 'After disabling this secret key, all requests using this key will be rejected. Are you sure you want to disable this secret key?',\n EnableSecretKeyMessage: 'After enabling this secret key, it will be allowed to access requests. Are you sure you want to enable this secret key?',\n\n // Form rules\n InputNumber: 'Please enter a number'\n};\n\nexport default locale;\n","import { createWithIntlProvider } from '@kne/react-intl';\nimport zhCN from './locale/zh-CN';\nimport enUS from './locale/en-US';\n\nconst withLocale = createWithIntlProvider({\n defaultLocale: 'zh-CN',\n messages: {\n 'zh-CN': zhCN,\n 'en-US': enUS\n },\n namespace: 'components-admin:Signature'\n});\n\nexport default withLocale;\n","import { createWithRemoteLoader } from '@kne/remote-loader';\nimport getColumns from './getColumns';\nimport { App, Flex, Alert, Button } from 'antd';\nimport UserSelect from '@components/UserSelect';\nimport withLocale from './withLocale';\nimport { useIntl } from '@kne/react-intl';\nimport BizUnit from '@components/BizUnit';\nimport { useRef } from 'react';\n\nconst VerifyAction = createWithRemoteLoader({\n modules: ['components-core:FormInfo', 'components-core:FormInfo@useFormModal', 'components-core:Global@usePreset']\n})(({ remoteModules, data }) => {\n const [FormInfo, useFormModal, usePreset] = remoteModules;\n const { formatMessage } = useIntl();\n const { ajax, apis } = usePreset();\n const { TextArea, Input } = FormInfo.fields;\n const formModal = useFormModal();\n const { message } = App.useApp();\n\n return (\n <a\n onClick={() => {\n formModal({\n title: formatMessage({ id: 'VerifySecretKey' }),\n size: 'small',\n saveText: formatMessage({ id: 'Verify' }),\n formProps: {\n rules: {\n NUM: value => {\n if (/^[0-9]+$/.test(value)) {\n return {\n result: true,\n errMsg: ''\n };\n }\n return {\n result: false,\n errMsg: formatMessage({ id: 'InputNumber' })\n };\n }\n },\n data: { appId: data.appId },\n onSubmit: async formData => {\n const { data: resData } = await ajax(\n Object.assign({}, apis.signature.verify, {\n data: { appId: data.appId, ...formData }\n })\n );\n\n if (resData.code !== 0) {\n return;\n }\n if (resData.data.result) {\n message.success(formatMessage({ id: 'VerifySuccess' }));\n } else {\n message.error(`${formatMessage({ id: 'VerifyFailed' })},${resData.data.message}`);\n }\n }\n },\n children: (\n <FormInfo\n column={1}\n list={[\n <TextArea name=\"signature\" label={formatMessage({ id: 'Signature' })} rule=\"REQ\" />,\n <Input name=\"timestamp\" label={formatMessage({ id: 'Timestamp' })} rule=\"REQ NUM\" />,\n <Input name=\"expire\" label={formatMessage({ id: 'ExpireTime' })} rule=\"REQ NUM\" />\n ]}\n />\n )\n });\n }}\n >\n {formatMessage({ id: 'Verify' })}\n </a>\n );\n});\n\nconst CreateButton = createWithRemoteLoader({\n modules: [\n 'components-core:FormInfo',\n 'components-core:FormInfo@useFormModal',\n 'components-core:Global@usePreset',\n 'components-core:InfoPage@CentralContent'\n ]\n})(({ remoteModules, onSuccess }) => {\n const [FormInfo, useFormModal, usePreset, CentralContent] = remoteModules;\n const { formatMessage } = useIntl();\n const { ajax, apis } = usePreset();\n const { TextArea } = FormInfo.fields;\n const formModal = useFormModal();\n const { modal } = App.useApp();\n\n return (\n <Button\n type=\"primary\"\n onClick={() => {\n const formModalApi = formModal({\n title: formatMessage({ id: 'AddSecretKey' }),\n size: 'small',\n formProps: {\n onSubmit: async data => {\n const { data: resData } = await ajax(\n Object.assign({}, apis.signature.create, {\n data\n })\n );\n if (resData.code !== 0) {\n return;\n }\n onSuccess && onSuccess();\n formModalApi.close();\n modal.info({\n icon: null,\n size: 'large',\n width: '800px',\n title: formatMessage({ id: 'SecretKeyGenerated' }),\n content: (\n <Flex vertical gap={10}>\n <Alert type=\"error\" message={formatMessage({ id: 'SaveSecretKeyWarning' })} />\n <CentralContent\n dataSource={resData.data}\n col={1}\n columns={[\n {\n name: 'appId',\n title: 'AppId'\n },\n {\n name: 'secretKey',\n title: 'SecretKey'\n }\n ]}\n />\n </Flex>\n )\n });\n }\n },\n children: (\n <FormInfo\n column={1}\n list={[\n <UserSelect name=\"userId\" label={formatMessage({ id: 'BelongUser' })} single interceptor=\"object-output-value\" />,\n <TextArea name=\"description\" label={formatMessage({ id: 'Description' })} maxLength={100} />\n ]}\n />\n )\n });\n }}\n >\n {formatMessage({ id: 'AddSecretKey' })}\n </Button>\n );\n});\n\nconst Signature = createWithRemoteLoader({\n modules: ['components-core:Global@usePreset']\n})(withLocale(({ remoteModules }) => {\n const [usePreset] = remoteModules;\n const { apis: presetApis } = usePreset();\n const { formatMessage } = useIntl();\n const tableRef = useRef(null);\n\n const apis = {\n list: presetApis.signature.list,\n remove: presetApis.signature.remove,\n setStatus: presetApis.signature.update\n };\n\n const columnsGetColumns = () => getColumns({ formatMessage });\n\n const getActionList = ({ data, ...props }) => {\n const baseActions = ['setStatusOpen', 'setStatusClose', 'remove']\n .map(name => ({\n name,\n reset: (config) => {\n if (name === 'remove') {\n return { ...config, hidden: data.status === 0 };\n }\n if (name === 'setStatusOpen') {\n return { ...config, hidden: data.status === 0 };\n }\n if (name === 'setStatusClose') {\n return { ...config, hidden: data.status === 1 };\n }\n return config;\n }\n }));\n\n return [\n {\n ...props,\n buttonComponent: VerifyAction,\n data\n },\n ...baseActions\n ];\n };\n\n const options = {\n bizName: '密钥',\n openStatus: 0,\n closedStatus: 1,\n openButtonProps: {\n children: formatMessage({ id: 'Enabled' })\n },\n closeButtonProps: {\n children: formatMessage({ id: 'Disabled' })\n },\n closeMessage: formatMessage({ id: 'DisableSecretKeyMessage' }),\n removeMessage: formatMessage({ id: 'ConfirmDelete' }, { bizName: '密钥' })\n };\n\n return (\n <BizUnit\n name=\"signature-list\"\n apis={apis}\n getColumns={columnsGetColumns}\n getActionList={getActionList}\n options={options}\n allowKeywordSearch={false}\n onMount={({ tableOptions }) => {\n tableRef.current = tableOptions.ref.current;\n }}\n titleExtra={\n <CreateButton onSuccess={() => tableRef.current?.reload()} />\n }\n />\n );\n}));\n\nexport default Signature;\nexport { getColumns };\n","import { createWithRemoteLoader } from '@kne/remote-loader';\n\nconst UserSelect = createWithRemoteLoader({\n modules: ['components-core:Global@usePreset', 'components-core:FormInfo']\n})(({ remoteModules, status = 0, api, ...props }) => {\n const [usePreset, FormInfo] = remoteModules;\n const { apis } = usePreset();\n const { SuperSelectUser } = FormInfo.fields;\n return (\n <SuperSelectUser\n {...props}\n api={Object.assign(\n {},\n apis.admin.getUserList,\n {\n data: {\n filter: Object.assign(\n {},\n Number.isInteger(status) && {\n status\n }\n )\n },\n transformData: data => {\n return Object.assign({}, data, {\n pageData: (data.pageData || []).map(item =>\n Object.assign({}, item, {\n value: item.id,\n label: item.nickname || item.email || item.phone\n })\n )\n });\n }\n },\n api\n )}\n />\n );\n});\n\nexport default UserSelect;\n","// extracted by mini-css-extract-plugin\nexport default {\"icon\":\"style_icon__KSAP2__EZeXx\",\"content\":\"style_content__akCc4__EZeXx\",\"overlay\":\"style_overlay__IH+0B__EZeXx\",\"info\":\"style_info__5uvqI__EZeXx\",\"tenant\":\"style_tenant__pNb8v__EZeXx\",\"user-tool\":\"style_user-tool__CBaDm__EZeXx\",\"divider\":\"style_divider__jcjqI__EZeXx\",\"options-list\":\"style_options-list__RHknC__EZeXx\",\"options-list-item\":\"style_options-list-item__IOziy__EZeXx\",\"org\":\"style_org__N0zoJ__EZeXx\",\"tenant-item\":\"style_tenant-item__0Q6XJ__EZeXx\",\"current-sign\":\"style_current-sign__11f2P__EZeXx\",\"current-tenant\":\"style_current-tenant__mdi5f__EZeXx\",\"user-name\":\"style_user-name__q7lY4__EZeXx\",\"company\":\"style_company__wIKmA__EZeXx\",\"line\":\"style_line__rOiNk__EZeXx\"};","const locale = {\n UserToolUnnamed: '未命名',\n UserToolLogout: '退出登录'\n};\n\nexport default locale;\n","const locale = {\n UserToolUnnamed: 'Unnamed',\n UserToolLogout: 'Logout'\n};\n\nexport default locale;\n","import { createWithIntlProvider } from '@kne/react-intl';\nimport zhCN from './locale/zh-CN';\nimport enUS from './locale/en-US';\n\nconst withLocale = createWithIntlProvider({\n defaultLocale: 'zh-CN',\n messages: {\n 'zh-CN': zhCN,\n 'en-US': enUS\n },\n namespace: 'components-admin:UserTool'\n});\n\nexport default withLocale;\n","import { createWithRemoteLoader } from '@kne/remote-loader';\nimport { Divider, List, Dropdown, Space, Flex } from 'antd';\nimport { useLogout } from '@components/Account';\nimport style from './style.module.scss';\nimport withLocale from './withLocale';\nimport { useIntl } from '@kne/react-intl';\n\nconst UserTool = createWithRemoteLoader({\n modules: ['components-core:Image', 'components-core:Icon']\n})(withLocale(({ remoteModules, avatar, name, email, storeKeys = { token: 'X-User-Token' }, domain, list, children = null }) => {\n const [Image, Icon] = remoteModules;\n const logout = useLogout({ storeKeys, domain });\n const { formatMessage } = useIntl();\n return (\n <Dropdown\n trigger=\"click\"\n rootClassName={style['overlay']}\n popupRender={() => (\n <Space direction={'vertical'} className={style['content']}>\n <Space className={style['info']}>\n <Image.Avatar id={avatar} size={48} />\n <div>\n <div className={style['line']}>{name || formatMessage({ id: 'UserToolUnnamed' })}</div>\n <div className={style['line']}>{email || '-'}</div>\n </div>\n </Space>\n <Divider className={style['divider']} />\n {children}\n <List className={style['options-list']}>\n {list &&\n list.length > 0 &&\n list.map((item, index) => {\n return (\n <List.Item key={index} className={style['options-list-item']} onClick={item.onClick}>\n <Flex gap={8} flex={1}>\n {item.iconType && <Icon type={item.iconType} />}\n <Flex flex={1}>{item.label}</Flex>\n </Flex>\n </List.Item>\n );\n })}\n <List.Item\n className={style['options-list-item']}\n onClick={logout}>\n <Flex gap={8} flex={1}>\n <Icon type=\"icon-tuichudenglu\" />\n <span>{formatMessage({ id: 'UserToolLogout' })}</span>\n </Flex>\n </List.Item>\n </List>\n </Space>\n )}\n arrow={false}\n transitionName={'ant-slide-up'}>\n <Space className={style['user-tool']}>\n <Image.Avatar id={avatar} size={32} />\n <div className={style['user-name']}>{name || formatMessage({ id: 'UserToolUnnamed' })}</div>\n <Icon className={style['icon']} type=\"triangle-down\" size={12} />\n </Space>\n </Dropdown>\n );\n}));\n\nexport default UserTool;\n","import { createWithRemoteLoader } from '@kne/remote-loader';\nimport UserTool from './UserTool';\nimport Language from '@components/Account/Language';\nimport { Flex } from 'antd';\n\nconst RightOptions = createWithRemoteLoader({\n modules: ['components-core:Global@GlobalValue']\n})(({ remoteModules }) => {\n const [GlobalValue] = remoteModules;\n\n return (\n <Flex gap={8}>\n <Language />\n <GlobalValue globalKey=\"userInfo\">\n {({ value }) => {\n if (!value) {\n return null;\n }\n const { userInfo, tenantUser, tenant } = value;\n return (\n <UserTool\n avatar={tenantUser ? tenantUser.avatar : userInfo.avatar}\n name={tenantUser ? tenantUser.name : userInfo.nickname}\n email={tenantUser ? tenantUser.email : userInfo.email}\n tenant={tenant}\n orgName={tenantUser && (tenantUser?.tenantOrgs || []).map(item => item.name).join(',')}\n />\n );\n }}\n </GlobalValue>\n </Flex>\n );\n});\n\nexport default RightOptions;\n","import { globalInit } from '../preset';\nimport { getApis } from '@components/Apis';\nimport { enums as taskEnums } from '@components/Task';\nimport { enums as intlAdminEnums } from '@components/IntlAdmin';\nimport merge from 'lodash/merge';\n\nimport taskList from './task-list.json';\nimport signatureList from './signature-list.json';\nimport intlAdminData from './intl-admin-data.json';\nimport adminUserList from './admin-user-list.json';\nimport userInfo from './user-info.json';\nimport superAdminInfo from './super-admin-info.json';\nimport groupList from './group-list.json';\nimport tenantData from './tenant-data.json';\nimport tenantAdminData from './tenant-admin-data.json';\n\nexport { taskList, signatureList, intlAdminData, adminUserList, userInfo, superAdminInfo, groupList, tenantData, tenantAdminData };\n\nconst apis = merge({}, getApis(), {\n task: {\n list: {\n loader: () => {\n return import('./task-list.json').then(({ default: data }) => data.data);\n }\n },\n cancel: {\n loader: () => {\n return { code: 0, data: { success: true } };\n }\n },\n retry: {\n loader: () => {\n return { code: 0, data: { success: true } };\n }\n }\n },\n signature: {\n list: {\n loader: () => {\n return import('./signature-list.json').then(({ default: data }) => data.data);\n }\n },\n create: {\n loader: () => ({\n appId: `app_${Date.now()}`,\n secretKey: `sk_${Math.random().toString(36).substr(2, 32)}`\n })\n },\n update: {\n loader: () => ({ success: true })\n },\n remove: {\n loader: () => ({ success: true })\n },\n verify: {\n loader: () => ({ result: true, message: '验证成功' })\n }\n },\n intlAdmin: {\n langType: {\n list: {\n loader: () => {\n return import('./intl-admin-data.json').then(({ default: data }) => data.langType);\n }\n },\n create: {\n loader: () => ({ id: Date.now() })\n },\n save: {\n loader: () => ({ code: 0 })\n },\n remove: {\n loader: () => ({ code: 0 })\n },\n setStatus: {\n loader: () => ({ code: 0 })\n }\n },\n langLib: {\n list: {\n loader: () => {\n return import('./intl-admin-data.json').then(({ default: data }) => data.langLib);\n }\n },\n create: {\n loader: () => ({ id: Date.now() })\n },\n save: {\n loader: () => ({ code: 0 })\n },\n setStatus: {\n loader: () => ({ code: 0 })\n }\n }\n },\n admin: {\n getUserList: {\n loader: () => {\n return import('./admin-user-list.json').then(({ default: data }) => data);\n }\n },\n addUser: {\n loader: () => ({ id: Date.now() })\n },\n saveUser: {\n loader: () => ({ code: 0 })\n },\n resetUserPassword: {\n loader: () => ({ code: 0 })\n },\n setSuperAdmin: {\n loader: () => ({ code: 0 })\n },\n setUserNormal: {\n loader: () => ({ code: 0 })\n },\n setUserClose: {\n loader: () => ({ code: 0 })\n },\n getSuperAdminInfo: {\n loader: () => {\n return import('./super-admin-info.json').then(({ default: data }) => data.data);\n }\n },\n initSuperAdmin: {\n loader: () => ({ code: 0 })\n }\n },\n user: {\n getUserInfo: {\n loader: () => {\n return import('./user-info.json').then(({ default: data }) => data.data);\n }\n },\n saveUserInfo: {\n loader: () => ({ code: 0 })\n }\n },\n group: {\n list: {\n loader: () => {\n return import('./group-list.json').then(({ default: data }) => data.data);\n }\n },\n create: {\n loader: () => ({ id: Date.now(), code: Date.now() })\n },\n remove: {\n loader: () => ({ code: 0 })\n }\n },\n tenant: {\n availableList: {\n loader: () => {\n return import('./tenant-data.json').then(({ default: data }) => data.availableTenantList);\n }\n },\n switchDefaultTenant: {\n loader: () => ({ code: 0 })\n },\n getUserInfo: {\n loader: () => {\n return import('./tenant-data.json').then(({ default: data }) => ({\n tenantUserInfo: data.tenantUserInfo,\n company: data.company,\n tenant: data.tenantList.pageData[0],\n userInfo: data.tenantUserInfo\n }));\n }\n },\n companyDetail: {\n loader: () => {\n return import('./tenant-data.json').then(({ default: data }) => data.company);\n }\n },\n companySave: {\n loader: () => ({ code: 0 })\n },\n orgList: {\n loader: () => {\n return import('./tenant-data.json').then(({ default: data }) => data.orgList);\n }\n },\n orgCreate: {\n loader: () => ({ id: `dept-${Date.now()}` })\n },\n orgSave: {\n loader: () => ({ code: 0 })\n },\n orgRemove: {\n loader: () => ({ code: 0 })\n },\n userList: {\n loader: () => {\n return import('./tenant-data.json').then(({ default: data }) => data.userList);\n }\n },\n userCreate: {\n loader: () => ({ id: `user-${Date.now()}` })\n },\n userSave: {\n loader: () => ({ code: 0 })\n },\n userRemove: {\n loader: () => ({ code: 0 })\n },\n userSetStatus: {\n loader: () => ({ code: 0 })\n },\n userInviteToken: {\n loader: () => ({ token: `invite_${Date.now()}` })\n },\n userInviteMessage: {\n loader: () => ({ code: 0 })\n },\n role: {\n list: {\n loader: () => {\n return import('./tenant-data.json').then(({ default: data }) => data.roleList);\n }\n },\n create: {\n loader: () => ({ id: `role-${Date.now()}` })\n },\n save: {\n loader: () => ({ code: 0 })\n },\n setStatus: {\n loader: () => ({ code: 0 })\n },\n remove: {\n loader: () => ({ code: 0 })\n },\n permissionList: {\n loader: () => {\n return import('./tenant-data.json').then(({ default: data }) => data.permissionList);\n }\n },\n permissionSave: {\n loader: () => ({ code: 0 })\n }\n },\n permission: {\n list: {\n loader: () => {\n return import('./tenant-data.json').then(({ default: data }) => data.permissionList);\n }\n }\n },\n // 旧名称别名,兼容示例文件\n getUserList: {\n loader: () => {\n return import('./tenant-data.json').then(({ default: data }) => data.userList);\n }\n },\n createUser: {\n loader: () => ({ id: `user-${Date.now()}` })\n },\n saveUser: {\n loader: () => ({ code: 0 })\n },\n removeUser: {\n loader: () => ({ code: 0 })\n },\n getRoleList: {\n loader: () => {\n return import('./tenant-data.json').then(({ default: data }) => data.roleList);\n }\n },\n createRole: {\n loader: () => ({ id: `role-${Date.now()}` })\n },\n saveRole: {\n loader: () => ({ code: 0 })\n },\n removeRole: {\n loader: () => ({ code: 0 })\n },\n getPermissionList: {\n loader: () => {\n return import('./tenant-data.json').then(({ default: data }) => data.permissionList);\n }\n },\n savePermission: {\n loader: () => ({ code: 0 })\n },\n parseJoinToken: {\n loader: ({ data }) => {\n if (!data || !data.token || data.token === 'invalid') {\n return null;\n }\n return import('./tenant-data.json').then(({ default: data }) => ({\n tenant: data.tenantList.pageData[0],\n tenantUser: data.tenantUserInfo,\n company: data.company\n }));\n }\n },\n join: {\n loader: () => ({ code: 0 })\n }\n },\n file: {\n getUrl: {\n loader: ({ params }) => {\n if (params && params.id) {\n return params.id;\n }\n return 'https://picsum.photos/200/200';\n }\n }\n },\n tenantAdmin: {\n list: {\n loader: () => {\n return import('./tenant-admin-data.json').then(({ default: data }) => data.tenantList);\n }\n },\n detail: {\n loader: () => {\n return import('./tenant-admin-data.json').then(({ default: data }) => data.tenantDetail);\n }\n },\n create: {\n loader: () => ({ id: `tenant-${Date.now()}` })\n },\n save: {\n loader: () => ({ code: 0 })\n },\n remove: {\n loader: () => ({ code: 0 })\n },\n setStatus: {\n loader: () => ({ code: 0 })\n },\n companyDetail: {\n loader: () => {\n return import('./tenant-data.json').then(({ default: data }) => data.company);\n }\n },\n companySave: {\n loader: () => ({ code: 0 })\n },\n orgList: {\n loader: () => {\n return import('./tenant-data.json').then(({ default: data }) => data.orgList);\n }\n },\n orgCreate: {\n loader: () => ({ id: `dept-${Date.now()}` })\n },\n orgSave: {\n loader: () => ({ code: 0 })\n },\n orgRemove: {\n loader: () => ({ code: 0 })\n },\n userList: {\n loader: () => {\n return import('./tenant-data.json').then(({ default: data }) => data.userList);\n }\n },\n userCreate: {\n loader: () => ({ id: `user-${Date.now()}` })\n },\n userSave: {\n loader: () => ({ code: 0 })\n },\n userSetStatus: {\n loader: () => ({ code: 0 })\n },\n userInviteToken: {\n loader: () => ({ token: `invite_${Date.now()}` })\n },\n userInviteMessage: {\n loader: () => ({ code: 0 })\n },\n role: {\n list: {\n loader: () => {\n return import('./tenant-data.json').then(({ default: data }) => data.roleList);\n }\n },\n create: {\n loader: () => ({ id: `role-${Date.now()}` })\n },\n save: {\n loader: () => ({ code: 0 })\n },\n remove: {\n loader: () => ({ code: 0 })\n },\n setStatus: {\n loader: () => ({ code: 0 })\n },\n permissionList: {\n loader: () => {\n return import('./tenant-data.json').then(({ default: data }) => data.permissionList);\n }\n },\n permissionSave: {\n loader: () => ({ code: 0 })\n }\n },\n permission: {\n list: {\n loader: () => {\n return import('./tenant-data.json').then(({ default: data }) => data.permissionList);\n }\n },\n save: {\n loader: () => ({ code: 0 })\n }\n },\n appendArgs: {\n loader: () => ({ code: 0 })\n },\n removeArg: {\n loader: () => ({ code: 0 })\n },\n appendCustomComponent: {\n loader: () => ({ code: 0 })\n },\n customComponentDetail: {\n loader: () => ({ content: '<div>Custom Component</div>' })\n },\n saveCustomComponent: {\n loader: () => ({ code: 0 })\n },\n copyCustomComponent: {\n loader: () => ({ code: 0 })\n },\n removeCustomComponent: {\n loader: () => ({ code: 0 })\n }\n }\n});\n\nconst enums = Object.assign({}, taskEnums, intlAdminEnums, {\n taskType: [\n { value: 'interview_report', description: '面试报告' },\n { value: 'data_export', description: '数据导出' },\n { value: 'email_notification', description: '邮件通知' },\n { value: 'video_processing', description: '视频处理' },\n { value: 'data_sync', description: '数据同步' },\n { value: 'report_generation', description: '报表生成' }\n ]\n});\n\nconst preset = {\n ajax: async ({ loader, ...props }) => {\n if (!loader && props.url) {\n const { ajax } = await globalInit();\n return ajax({ loader, ...props });\n }\n return Promise.resolve({ data: loader ? { code: 0, data: loader() } : { code: 0, data: {} } });\n },\n apis,\n enums,\n global: tenantData.global\n};\n\nexport default preset;\n","import React from 'react';\nimport { preset as fetchPreset } from '@kne/react-fetch';\nimport { Spin, Empty, message } from 'antd';\nimport axios from 'axios';\nimport { preset as remoteLoaderPreset } from '@kne/remote-loader';\nimport omit from 'lodash/omit';\n\nwindow.PUBLIC_URL = window.runtimePublicUrl || process.env.PUBLIC_URL;\n\nexport const globalInit = async () => {\n const ajax = (() => {\n const instance = axios.create({\n validateStatus: function () {\n return true;\n }\n });\n\n instance.interceptors.response.use(\n response => {\n if (response.status !== 200) {\n response.showError !== false && response.config.showError !== false && message.error(response?.data?.msg || '请求发生错误');\n }\n return response;\n },\n error => {\n message.error(error.message || '请求发生错误');\n return Promise.reject(error);\n }\n );\n\n return params => {\n if (params.hasOwnProperty('loader') && typeof params.loader === 'function') {\n return Promise.resolve(params.loader(omit(params, ['loader'])))\n .then(data => ({\n data: {\n code: 0,\n data\n }\n }))\n .catch(err => {\n message.error(err.message || '请求发生错误');\n return { data: { code: 500, msg: err.message } };\n });\n }\n\n return instance(params);\n };\n })();\n fetchPreset({\n ajax,\n loading: (\n <Spin\n delay={500}\n style={{\n position: 'absolute',\n left: '50%',\n padding: '10px',\n transform: 'translateX(-50%)'\n }}\n />\n ),\n error: null,\n empty: <Empty />,\n transformResponse: response => {\n const { data } = response;\n response.data = {\n code: data.code === 0 ? 200 : data.code,\n msg: data.msg,\n results: data.data\n };\n return response;\n }\n });\n const registry = {\n //url: 'https://uc.fatalent.cn',\n //tpl: '{{url}}/packages/@kne-components/{{remote}}/{{version}}/build'\n url: 'https://cdn.leapin-ai.com',\n tpl: '{{url}}/components/@kne-components/{{remote}}/{{version}}/build'\n };\n\n const componentsCoreRemote = {\n ...registry,\n remote: 'components-core',\n defaultVersion: '0.4.64'\n };\n remoteLoaderPreset({\n remotes: {\n default: componentsCoreRemote,\n 'components-core': componentsCoreRemote,\n 'components-iconfont': {\n ...registry,\n remote: 'components-iconfont',\n defaultVersion: '0.1.8'\n },\n 'components-thirdparty': {\n ...registry,\n //url: 'http://localhost:3010',\n //tpl: '{{url}}',\n remote: 'components-thirdparty',\n defaultVersion: '0.1.12'\n },\n 'components-admin':\n process.env.NODE_ENV === 'development'\n ? {\n remote: 'components-admin',\n url: '/',\n tpl: '{{url}}'\n }\n : {\n ...registry,\n remote: 'components-admin',\n defaultVersion: process.env.DEFAULT_VERSION\n }\n }\n });\n\n return {\n ajax,\n themeToken: {\n colorPrimary: '#4183F0'\n }\n };\n};\n"],"names":["name","summary","api","example","isFull","className","style","list","title","description","code","scope","packageName","component","context","createContext","Provider","Avatar","Nickname","Email","Phone","IsSuperAdmin","Status","Description","Yes","No","Normal","NotActivated","Disabled","Closed","Other","AddUser","AddSuccess","EditUser","EditUserInfo","DeleteSuccess","SaveSuccess","Operation","Keyword","UserAvatar","UserNickname","UserEmail","UserPhone","UserDescription","Password","RepeatPassword","ResetPassword","ModifyPassword","ModifyPasswordSuccess","SetSuperAdmin","CancelSuperAdmin","SetSuperAdminConfirm","CancelSuperAdminConfirm","SetNormal","SetNormalConfirm","SetNormalSuccess","CloseUser","CloseUserConfirm","CloseUserSuccess","SetStatusSuccess","FilterEmail","FilterPhone","FilterStatus","FilterIsAdmin","Confirm","InitSystem","InitSystemDesc","InitSuccess","createWithIntlProvider","defaultLocale","messages","zhCN","enUS","namespace","_ref","formatMessage","id","type","valueOf","item","_ref2","Object","assign","gender","_ref3","_ref4","text","createWithRemoteLoader","modules","withLocale","remoteModules","FormInfo","formModule","useIntl","Input","TextArea","PhoneNumber","_jsx","column","label","labelHidden","interceptor","rule","realtime","format","fields","pageProps","propsPageProps","TablePage","Filter","useFormModal","usePreset","contextProps","useContext","filter","setFilter","useState","SearchInput","getFilterValue","filterFields","InputFilterItem","AdvancedSelectFilterItem","ajax","apis","formModal","message","App","useApp","ref","useRef","filterValue","admin","getUserList","params","pagination","paramsType","menuFixed","columns","getColumns","fixed","children","onClick","modalApi","size","FormInner","formProps","data","onSubmit","async","resData","saveUser","success","current","reload","close","ResetPasswordFormInner","resetUserPassword","password","md5","userId","get","isDelete","setSuperAdmin","status","push","confirm","setUserNormal","okText","setUserClose","page","value","onChange","single","loader","pageData","titleExtra","_jsxs","Space","align","Button","addUser","baseUrl","navigate","useNavigate","initAdmin","useRefCallback","initSuperAdmin","replace","useEffect","Result","subTitle","Admin","props","Routes","Route","path","element","User","Navigate","to","options","prefix","user","getUserInfo","url","method","cache","saveUserInfo","account","sendSMSCode","sendEmailCode","register","login","modifyPassword","forgetPwd","parseResetToken","resetPassword","validateCode","accountIsExists","getSuperAdminInfo","signature","create","update","remove","verify","webhook","setStatus","invoke","invokeRecord","task","complete","cancel","retry","tenantAdmin","save","detail","companyDetail","companySave","orgList","orgCreate","orgSave","orgRemove","userList","userCreate","userSetStatus","userSave","userRemove","userInviteToken","userInviteMessage","appendArgs","appendCustomComponent","removeCustomComponent","saveCustomComponent","copyCustomComponent","customComponentDetail","removeArg","role","permissionList","permissionSave","permission","tenant","parseJoinToken","join","availableList","switchDefaultTenant","intlAdmin","langType","totalCount","langLib","CheckAccountIsInit","location","useLocation","userInfo","encodeURIComponent","email","pathname","search","CustomUserInfo","SetGlobal","Fetch","render","globalKey","needReady","UserInfo","SuperAdminInfo","_ref5","_ref6","MainLayout","navigation","Layout","defaultTitle","RightOptions","GlobalValue","Flex","gap","Language","nickname","avatar","UserTool","AfterCustomUserLoginLayout","rightOptions","Outlet","AfterCustomUserLogin","AfterUserLoginLayout","AfterUserLogin","_ref7","AfterAdminUserLoginLayout","_ref8","BeforeLoginLayout","_ref9","_Fragment","justify","useGlobalContext","global","UserInfoFormInner","_apis$file2","Editor","uploadAdapter","useMemo","_apis$file","upload","file","uploadForEditor","_presetApis$group3","_presetApis$group4","_presetApis$group5","valueKey","labelKey","placeholder","disabled","groupName","SuperSelectTableList","presetApis","modal","hasApis","undefined","showAdd","group","showDelete","span","getValueOf","fetchApi","setValue","e","stopPropagation","content","cancelText","onOk","_presetApis$group","length","find","target","index","findIndex","newValue","slice","splice","error","handleDelete","getSearchProps","searchText","keyword","isPopup","footer","_presetApis$group2","formData","handleAdd","hover","primary","reviewStatus","isEnum","moduleName","menu","BizUnit","topOptions","tableOptions","ellipsis","getFormInner","bizName","IntlAdmin","Menu","items","AppChildrenRouter","elementProps","LangType","LangLib","MessageManger","phone","AppId","SecretKey","BelongUser","LastVisitedAt","CreatedAt","Enabled","AddSecretKey","Verify","VerifySecretKey","Signature","Timestamp","ExpireTime","SecretKeyGenerated","SaveSecretKeyWarning","VerifySuccess","VerifyFailed","OperationSuccess","DisableSecretKeyTitle","DisableSecretKeyMessage","EnableSecretKeyMessage","InputNumber","VerifyAction","saveText","rules","NUM","test","result","errMsg","appId","CreateButton","onSuccess","CentralContent","formModalApi","info","icon","width","vertical","Alert","dataSource","col","UserSelect","maxLength","tableRef","openStatus","closedStatus","openButtonProps","closeButtonProps","closeMessage","removeMessage","columnsGetColumns","getActionList","baseActions","map","reset","config","hidden","buttonComponent","allowKeywordSearch","onMount","_tableRef$current","SuperSelectUser","Number","isInteger","transformData","UserToolUnnamed","UserToolLogout","storeKeys","token","domain","Image","Icon","logout","useLogout","Dropdown","trigger","rootClassName","popupRender","direction","Divider","List","Item","flex","iconType","arrow","transitionName","tenantUser","orgName","tenantOrgs","_ref29","globalInit","Promise","resolve","merge","getApis","then","default","Date","now","secretKey","Math","random","toString","substr","availableTenantList","_ref0","tenantUserInfo","company","tenantList","_ref1","_ref10","_ref11","_ref12","roleList","_ref13","_ref14","_ref15","createUser","removeUser","getRoleList","_ref16","createRole","saveRole","removeRole","getPermissionList","_ref17","savePermission","_ref18","_ref19","getUrl","_ref20","_ref21","_ref22","tenantDetail","_ref23","_ref24","_ref25","_ref26","_ref27","_ref28","enums","taskEnums","intlAdminEnums","taskType","tenantData","window","PUBLIC_URL","runtimePublicUrl","process","instance","axios","validateStatus","interceptors","response","use","_response$data","showError","msg","reject","hasOwnProperty","omit","catch","err","fetchPreset","loading","Spin","delay","position","left","padding","transform","empty","Empty","transformResponse","results","registry","tpl","componentsCoreRemote","remote","defaultVersion","remoteLoaderPreset","remotes","themeToken","colorPrimary"],"sourceRoot":""}