{"id":20144161,"url":"https://github.com/quansitech/antd-admin-front","last_synced_at":"2026-06-05T06:31:24.292Z","repository":{"id":258153156,"uuid":"869384021","full_name":"quansitech/antd-admin-front","owner":"quansitech","description":"qscmf Ant-design后台前端组件库","archived":false,"fork":false,"pushed_at":"2026-06-01T04:03:09.000Z","size":359,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2026-06-01T06:09:10.497Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/quansitech.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-10-08T07:52:56.000Z","updated_at":"2026-06-01T04:03:13.000Z","dependencies_parsed_at":"2024-10-17T21:22:32.744Z","dependency_job_id":"2f4e8b7a-63ee-4888-bbf6-bc50d0f1a028","html_url":"https://github.com/quansitech/antd-admin-front","commit_stats":null,"previous_names":["quansitech/antd-admin-front"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/quansitech/antd-admin-front","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/quansitech%2Fantd-admin-front","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/quansitech%2Fantd-admin-front/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/quansitech%2Fantd-admin-front/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/quansitech%2Fantd-admin-front/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/quansitech","download_url":"https://codeload.github.com/quansitech/antd-admin-front/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/quansitech%2Fantd-admin-front/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33932048,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-05T02:00:06.157Z","response_time":120,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-13T22:09:01.805Z","updated_at":"2026-06-05T06:31:24.269Z","avatar_url":"https://github.com/quansitech.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Qs-antd-admin\n\n该项目作为qs-cmf的后台前端组件库，基于[ant-design-pro](https://procomponents.ant.design/components)\n\n## 安装\n\n```shell\nnpm install @quansitech/antd-admin\n```\n\n## 使用参考\n\n### Layout组件Props\n\n| 属性            | 替换组件          | 说明   | 类型        | 默认值           |\n|---------------|---------------|------|-----------|---------------|\n| headerActions | HeaderActions | 顶部操作 | ReactNode | -             |\n| footer        | Footer        | 底部内容 | ReactNode | 全思科技 - Github |\n\n可在项目目录 `/resources/js/backend/app.tsx` 中修改，如：\n\n```tsx\ncreateInertiaApp({\n    resolve: async name =\u003e {\n        const pages = import.meta.glob('./Pages/**/*.tsx')\n        const page: any = await pages[`./Pages/${name}.tsx`]()\n        page.default.layout = page.default.layout || ((page: ReactNode) =\u003e \u003cLayout\n\n                headerActions={\u003cHeaderActions/\u003e} //顶部操作\n                footer={\u003c\u003e这是底部内容\u003c/\u003e} // 底部内容\n\n                children={page}/\u003e\n        )\n        return page\n    },\n    //...\n})\n```\n\n对于单独页面修改Layout组件属性，可在页面中调用对应的 Replacement 组件，如：\n\n```tsx\nimport HeaderActions from \"@quansitech/antd-admin/dist/components/Layout/Replacement/HeaderActions\";\n\nexport default function () {\n\n    return \u003c\u003e\n        \u003cHeaderActions\u003e\n            修改的内容\n        \u003c/HeaderActions\u003e\n        页面内容\n    \u003c/\u003e\n}\n\n```\n\n### valueType列表\n\n参考 [ant-design-pro#valueType](https://procomponents.ant.design/components/schema#valuetype-%E5%88%97%E8%A1%A8)\n\n## 自定义组件\n\n对外暴露 [container](./lib/container.ts) 供外部调用\n\n```ts\nimport container from \"@quansitech/antd-admin/lib/container\";\n\ncontainer.register('[组件名]', () =\u003e import('[组件路径]'));\n```\n\n### 通用\n\n#### 通用Column Schema\n\n- 组件名前缀：``` Column. ```\n- 用途：表单项组件（非只读模式）、表格列编辑组件、表格搜索项组件\n- 示例：\n\n```tsx\n// [组件.tsx]\nimport {ColumnProps} from \"@quansitech/antd-admin/compontents/Column/types\";\n\nexport default function (props: ColumnProps) {\n\n    return \u003c\u003e\n        组件内容\n    \u003c/\u003e\n}\n\n// [app.tsx]\nimport container from \"@quansitech/antd-admin/lib/container\";\n\ncontainer.register('Column.组件名', () =\u003e import('[组件路径]'));\n```\n\n- 若要补充组件库，请把组件放``` compontents/Column/ ``` 目录下\n\n#### 只读Column Schema\n\n- 组件名前缀：``` Column.Readonly. ```\n- 用途：表单项组件（只读模式）、表格列组件\n- 示例：\n\n```tsx\n// [组件.tsx]\nimport {ColumnProps} from \"@quansitech/antd-admin/compontents/Column/Readonly/types\";\n\nexport default function (props: ColumnProps) {\n\n    return \u003c\u003e\n        组件内容\n    \u003c/\u003e\n}\n\n// [app.tsx]\nimport container from \"@quansitech/antd-admin/lib/container\";\n\ncontainer.register('Column.Readonly.组件名', () =\u003e import('[组件路径]'));\n```\n\n- 若要补充组件库，请把组件放``` compontents/Column/Readonly/ ``` 目录下\n\n### 表格Table\n\n#### 工具栏操作组件\n\n- 组件名前缀：``` Table.Column.Action. ```\n- 示例：\n\n```tsx\n// [组件.tsx]\n\nimport {TableActionProps} from \"@quansitech/antd-admin/compontents/Table/Action/types\";\n\nexport default function (props: TableActionProps) {\n    return \u003cButton\u003e{props.title}\u003c/Button\u003e\n}\n\n// [app.tsx]\n\nimport container from \"@quansitech/antd-admin/lib/container\";\n\ncontainer.register('Table.Column.Action.组件名', () =\u003e import('[组件路径]'));\n\n```\n\n- 若要补充组件库，请把组件放``` compontents/Table/Action/ ``` 目录下\n\n#### 行操作组件\n\n- 组件名前缀：``` Table.Column.Option ```\n- 示例：\n\n```tsx\n// [组件.tsx]\n\nimport {TableColumnOptionProps} from \"@quansitech/antd-admin/compontents/Column/Readonly/Action/types\";\n\nexport default function (props: TableColumnOptionProps) {\n    \u003ca onClick={onClick}\u003e{props.title}\u003c/a\u003e\n}\n\n// [app.tsx]\n\nimport container from \"@quansitech/antd-admin/lib/container\";\n\ncontainer.register('Column.Readonly.Action.组件名', () =\u003e import('[组件路径]'));\n\n```\n\n- 若要补充组件库，请把组件放``` compontents/Column/Readonly/Action/ ``` 目录下\n\n## 常用扩展功能\n\n### 弹窗（Modal）使用\n\n框架提供了 `modalShow` 函数用于显示弹窗，支持在弹窗中嵌套 Table、Form、Tabs 等组件。\n\n#### 基本用法\n\n```tsx\nimport {modalShow} from \"@quansitech/antd-admin/lib/helpers\";\n\n// 显示弹窗\nawait modalShow({\n    title: '弹窗标题',\n    content: {\n        type: 'form',  // 支持 'form' | 'table' | 'tabs'\n        props: {\n            // 传递给组件的 props\n        },\n        url: '/api/modal-content'  // 可选：从 URL 获取弹窗内容\n    },\n    contexts: {\n        // 传递给弹窗的上下文数据\n        tableContext,\n        customData: 'value'\n    }\n})\n```\n\n#### 在弹窗中使用上下文\n\n弹窗内的组件通过 `ModalContext` 访问上下文：\n\n```tsx\nimport {ModalContext} from \"@quansitech/antd-admin/components/ModalContext\";\n\nexport default function MyComponent() {\n    const modalContext = useContext(ModalContext)\n\n    // 关闭弹窗\n    const close = () =\u003e {\n        modalContext.closeModal()\n    }\n\n    // 设置关闭后的回调\n    modalContext.setAfterClose(() =\u003e {\n        console.log('弹窗已关闭')\n    })\n\n    // 访问传递的上下文数据\n    const tableContext = modalContext.contexts?.tableContext\n\n    return \u003cdiv\u003e弹窗内容\u003c/div\u003e\n}\n```\n\n#### 支持的弹窗类型\n\n- **form**: 表单弹窗，组件路径 `Modal.Form`\n- **table**: 表格弹窗，组件路径 `Modal.Table`\n- **tabs**: 标签页弹窗，组件路径 `Modal.Tabs`\n\n#### 自定义弹窗组件\n\n```tsx\n// 1. 创建弹窗组件\nimport {ModalContext} from \"@quansitech/antd-admin/components/ModalContext\";\n\nexport default function CustomModal({title, data}: any) {\n    const modalContext = useContext(ModalContext)\n\n    return (\n        \u003cdiv\u003e\n            \u003ch2\u003e{title}\u003c/h2\u003e\n            \u003cp\u003e{data}\u003c/p\u003e\n            \u003cButton onClick={modalContext.closeModal}\u003e关闭\u003c/Button\u003e\n        \u003c/div\u003e\n    )\n}\n\n// 2. 注册弹窗组件\nimport container from \"@quansitech/antd-admin/lib/container\";\n\ncontainer.register('Modal.Custom', () =\u003e import('./components/CustomModal'))\n\n// 3. 使用自定义弹窗\nawait modalShow({\n    content: {\n        type: 'custom',\n        props: {\n            title: '自定义弹窗',\n            data: 'some data'\n        }\n    }\n})\n```\n\n### 页面跳转\n\n框架提供了 `routerNavigateTo` 函数用于页面跳转，基于 Inertia.js 实现。\n\n#### 基本用法\n\n```tsx\nimport {routerNavigateTo} from \"@quansitech/antd-admin/lib/helpers\";\n\n// 简单跳转\nrouterNavigateTo('/admin/user')\n\n// 带配置的跳转\nrouterNavigateTo('/admin/user', {\n    onSuccess: () =\u003e {\n        console.log('跳转成功')\n    },\n    onError: (errors) =\u003e {\n        console.error('跳转失败', errors)\n    },\n    preserveState: true,  // 保留页面状态\n    replace: false  // 不替换历史记录\n})\n```\n\n#### 在组件中使用\n\n```tsx\n// 按钮点击跳转\n\u003cButton onClick={() =\u003e routerNavigateTo('/admin/create')}\u003e\n    新建\n\u003c/Button\u003e\n\n// JavaScript 协议链接（会使用 window.location.href）\nrouterNavigateTo('javascript:history.back()')\n```\n\n### 消息提示\n\n框架通过 `global` 对象提供了消息提示功能，包括成功、错误、警告、信息等提示。\n\n#### 使用方式\n\n```tsx\nimport global from \"@quansitech/antd-admin/lib/global\";\n\n// 成功提示\nglobal.notification.success({\n    message: '操作成功',\n    description: '数据已保存'\n})\n\n// 错误提示\nglobal.notification.error({\n    message: '操作失败',\n    description: '请稍后重试'\n})\n\n// 警告提示\nglobal.notification.warning({\n    message: '警告',\n    description: '请注意检查数据'\n})\n\n// 信息提示\nglobal.notification.info({\n    message: '提示信息'\n})\n\n// 简单消息提示\nglobal.message.success('保存成功')\nglobal.message.error('保存失败')\nglobal.message.warning('请检查输入')\nglobal.message.info('提示信息')\nglobal.message.loading('加载中...')\n```\n\n#### HTTP 自动消息处理\n\nHTTP 拦截器会自动处理后端返回的消息：\n\n```tsx\n// 后端返回格式\n{\n    status: 1,  // 1=成功, 0=失败\n    info: '操作成功',  // 会自动显示提示\n    url: '/admin/list'  // 可选：自动跳转\n}\n\n// 前端请求\nawait http({url: '/api/save'})\n// 会自动显示成功/失败提示\n// 如果返回 url，2秒后自动跳转\n```\n\n#### 禁用自动消息\n\n```tsx\nawait http({\n    url: '/api/data',\n    fetchOptions: {\n        noHandle: true  // 不自动处理消息和跳转\n    }\n})\n```\n\n### 确认框（Confirm）\n\n在需要用户确认的操作时使用确认框。\n\n#### 在 Action 组件中使用\n\n```tsx\n// Table Action\n{\n    title: '删除',\n    request: {\n        url: '/admin/delete/__id__',\n        method: 'post',\n        confirm: '确定要删除这条记录吗？'  // 显示确认框\n    }\n}\n\n// Form Action\n{\n    title: '保存',\n    submit: true,\n    confirm: '确定要保存吗？'  // 提交前确认\n}\n```\n\n#### 手动使用确认框\n\n```tsx\nimport {Modal} from \"antd\";\n\nModal.confirm({\n    title: '确认操作',\n    content: '确定要执行此操作吗？',\n    onOk() {\n        console.log('确认')\n    },\n    onCancel() {\n        console.log('取消')\n    }\n})\n```\n\n### HTTP 请求\n\n框架封装了 `http` 实例，基于 Axios，提供了统一的请求处理。\n\n#### 基本用法\n\n```tsx\nimport http from \"@quansitech/antd-admin/lib/http\";\n\n// GET 请求\nconst res = await http({\n    method: 'get',\n    url: '/api/user/list'\n})\n\n// POST 请求\nconst res = await http({\n    method: 'post',\n    url: '/api/user/create',\n    data: {\n        name: '张三',\n        email: 'test@example.com'\n    }\n})\n\n// 带请求头\nconst res = await http({\n    method: 'post',\n    url: '/api/data',\n    headers: {\n        'X-Custom-Header': 'value'\n    },\n    data: {}\n})\n```\n\n#### 参数替换\n\n支持使用 `__field__` 格式进行动态参数替换：\n\n```tsx\n// URL 参数替换\nconst url = replaceUrl('/admin/user/edit/__id__', {id: 123})\n// 结果: '/admin/user/edit/123'\n\n// 请求参数替换\nconst data = replaceParams({\n    name: '__username__',\n    age: '__userage__'\n}, {username: '张三', userage: 25})\n// 结果: {name: '张三', age: 25}\n```\n\n#### 错误处理\n\n```tsx\ntry {\n    await http({\n        method: 'post',\n        url: '/api/save',\n        data: {}\n    })\n} catch (error) {\n    // 错误会自动显示通知\n    // 这里可以添加额外处理\n    console.error('保存失败', error)\n}\n```\n\n### 树形数据处理\n\n框架提供了多个树形数据处理的工具函数。\n\n#### treeToList - 树形转列表\n\n```tsx\nimport {treeToList} from \"@quansitech/antd-admin/lib/helpers\";\n\nconst tree = [\n    {\n        id: 1,\n        name: '节点1',\n        children: [\n            {id: 11, name: '子节点1.1', children: []},\n            {id: 12, name: '子节点1.2', children: []}\n        ]\n    },\n    {\n        id: 2,\n        name: '节点2',\n        children: []\n    }\n]\n\nconst list = treeToList(tree, 'children')\n// 结果: [{id:1, name:'节点1'}, {id:11, name:'子节点1.1'}, {id:12, name:'子节点1.2'}, {id:2, name:'节点2'}]\n```\n\n#### diffTree - 对比树形差异\n\n```tsx\nimport {diffTree} from \"@quansitech/antd-admin/lib/helpers\";\n\nconst oldTree = [{id: 1, name: 'A', children: []}]\nconst newTree = [{id: 1, name: 'A', children: []}, {id: 2, name: 'B', children: []}]\n\nconst added = diffTree(oldTree, newTree, 'children')\n// 结果: [{id: 2, name: 'B'}] - 新增的节点\n```\n\n#### findValuePath - 查找值路径\n\n```tsx\nimport {findValuePath} from \"@quansitech/antd-admin/lib/helpers\";\n\nconst obj = {\n    a: {\n        b: {\n            c: 'target'\n        }\n    }\n}\n\nconst path = findValuePath(obj, 'target')\n// 结果: ['a', 'b', 'c']\n```\n\n#### getValueByPath - 根据路径取值\n\n```tsx\nimport {getValueByPath} from \"@quansitech/antd-admin/lib/helpers\";\n\nconst obj = {a: {b: {c: 'value'}}}\n\nconst value = getValueByPath(obj, ['a', 'b', 'c'])\n// 结果: 'value'\n```\n\n### 条件判断\n\n使用 `handleCondition` 函数进行条件判断：\n\n```tsx\nimport {handleCondition} from \"@quansitech/antd-admin/lib/helpers\";\n\n// 支持的操作符\nconst conditions = [\n    {field: 'age', operator: '\u003e', value: 18},  // gt, gte, lt, lte\n    {field: 'status', operator: '=', value: 1},   // eq, neq\n    {field: 'type', operator: 'in', value: [1, 2, 3]},  // in, not in\n]\n\nconst data = {age: 20, status: 1, type: 2}\n\nconditions.forEach(cond =\u003e {\n    const result = handleCondition(cond, data)\n    console.log(`条件${cond.field} ${cond.operator} ${cond.value}:`, result)\n})\n```\n\n### Context 使用\n\n框架提供了多个 Context 用于在不同组件间共享数据。\n\n#### TableContext\n\n表格上下文，提供表格相关的操作：\n\n```tsx\nimport {TableContext} from \"@quansitech/antd-admin/components/TableContext\";\n\nconst tableContext = useContext(TableContext)\n\n// 重新加载表格\nawait tableContext.getActionRef()?.reload()\n\n// 获取选中的行\nconst selectedRows = tableContext.getSelectedRows()\n\n// 清空选中\ntableContext.getActionRef()?.clearSelected()\n\n// 获取编辑的值\nconst editedValues = tableContext.getEditedValues()\n\n// 获取数据源\nconst dataSource = tableContext.getDataSource()\n\n// 获取表格配置\nconst tableProps = tableContext.getTableProps()\n```\n\n#### FormContext\n\n表单上下文，提供表单相关的操作：\n\n```tsx\nimport {FormContext} from \"@quansitech/antd-admin/components/FormContext\";\n\nconst formContext = useContext(FormContext)\n\n// 获取表单引用\nconst formRef = formContext.getFormRef()\n\n// 获取表单值\nconst values = await formRef?.getFieldsValue()\n\n// 设置表单值\nformRef?.setFieldsValue({name: '张三'})\n\n// 重置表单\nformRef?.resetFields()\n\n// 提交表单\nformRef?.submit()\n```\n\n#### ModalContext\n\n弹窗上下文，提供弹窗相关的操作：\n\n```tsx\nimport {ModalContext} from \"@quansitech/antd-admin/components/ModalContext\";\n\nconst modalContext = useContext(ModalContext)\n\n// 是否在弹窗中\nconst inModal = modalContext.inModal\n\n// 关闭弹窗\nmodalContext.closeModal()\n\n// 设置关闭后的回调\nmodalContext.setAfterClose(() =\u003e {\n    console.log('弹窗关闭后执行')\n})\n\n// 访问传递的上下文\nconst contexts = modalContext.contexts\n```\n\n### 完整示例\n\n#### 表格操作按钮\n\n```tsx\n// 后端配置\n{\n    title: '操作',\n    actions: [\n        {\n            type: 'Button',  // 使用自定义按钮组件\n            props: {\n                type: 'primary',\n                title: '编辑',\n                relateSelection: false,  // 不关联选中行\n                link: {\n                    url: '/admin/edit/__id__'  // 跳转链接\n                }\n            }\n        },\n        {\n            type: 'Button',\n            props: {\n                type: 'default',\n                title: '审核',\n                request: {\n                    url: '/admin/audit',\n                    method: 'post',\n                    data: {id: '__id__'},\n                    confirm: '确定要审核通过吗？'  // 确认框\n                }\n            }\n        },\n        {\n            type: 'Button',\n            props: {\n                type: 'default',\n                title: '查看详情',\n                modal: {\n                    title: '详情',\n                    content: {\n                        type: 'form',\n                        url: '/admin/detail/__id__'\n                    }\n                }\n            }\n        },\n        {\n            type: 'Button',\n            props: {\n                type: 'primary',\n                title: '批量删除',\n                relateSelection: true,  // 关联选中行\n                request: {\n                    url: '/admin/batch-delete',\n                    method: 'post',\n                    confirm: '确定要删除选中的记录吗？'\n                }\n            }\n        }\n    ]\n}\n```\n\n#### 表单操作按钮\n\n```tsx\n// 后端配置\n{\n    title: '操作',\n    actions: [\n        {\n            type: 'Button',\n            props: {\n                title: '保存',\n                submit: true  // 提交表单\n            }\n        },\n        {\n            type: 'Button',\n            props: {\n                title: '保存并新增',\n                request: {\n                    url: '/admin/save',\n                    method: 'post',\n                    afterAction: ['tableReload', 'closeModal']  // 操作后执行\n                }\n            }\n        },\n        {\n            type: 'Button',\n            props: {\n                title: '重置',\n                reset: true  // 重置表单\n            }\n        },\n        {\n            type: 'Button',\n            props: {\n                title: '返回',\n                back: true  // 返回上一页\n            }\n        },\n        {\n            type: 'Button',\n            props: {\n                title: '打开子表单',\n                modal: {\n                    title: '子表单',\n                    content: {\n                        type: 'form',\n                        url: '/admin/subform/__id__'\n                    }\n                }\n            }\n        }\n    ]\n}\n```\n\n## 更新日志\n\n### 1.3.0 (2026-02-11)\n\n**新增功能**\n- **Table 组件优化**：添加表格默认搜索值初始化和加载状态处理\n- **树形数据处理**：新增树形数据处理工具函数（`treeToList`、`diffTree`、`findValuePath`、`getValueByPath`）\n- **布局组件优化**：优化布局组件的渲染逻辑和用户体验\n\n**Bug 修复**\n- 修复 Cascader 组件值比较逻辑问题\n- 修复表格搜索 URL 处理逻辑\n- 修复文件上传组件的 multiple 属性判断逻辑\n\n### 1.2.0 (2025-09-29)\n\n**新增功能**\n- **SelectText 组件**：新增键值对输入组件，支持灵活的数据输入方式\n- **Table 组件增强**：\n  - 添加表格描述功能\n  - 增加日期范围搜索功能\n  - 优化列处理逻辑和搜索表单初始值处理\n- **File 组件增强**：支持多文件选择上传功能\n- **类型支持**：添加 scss 模块声明文件支持\n\n**组件优化**\n- 优化 SelectText 组件样式与功能\n- 优化 textarea 渲染逻辑\n- 优化上传组件的校验逻辑\n\n### 1.1.0 (2024-11-14)\n\n**新增功能**\n- **Composer 包自动注册**：支持自动分析并注册 Composer 包中的组件\n- **Table 组件增强**：\n  - 添加表格树型结构支持\n  - 增加表格右侧操作的数据字段渲染功能\n  - 新增 Link 表格组件\n  - 支持选项设置、隐藏列配置及行宽设置\n- **Form 组件增强**：\n  - 新增 Dependency 表单项，支持依赖项处理\n  - 新增 formList 表单列表组件\n  - 提交失败后自动滚动到第一个错误表单项\n- **Layout 组件优化**：\n  - 新增 Layout Replacement 组件，支持单独变更属性\n  - 支持自定义 headerActions 和 footer\n- **文件上传增强**：增加图片裁剪质量选项\n- **主题支持**：添加暗黑模式切换功能\n\n**组件优化**\n- 优化级联初始化机制和省市区组件\n- 增加注入自定义组件验证\n- 优化文件上传请求，统一文件名后缀大小写\n- 添加 hidden 字段适配\n- 优化布局组件并添加自定义路由映射\n- 添加 useWindowResize 自定义钩子处理窗口大小变化\n\n**类型支持**\n- 将 lodash 引入方式改为花括号形式，优化打包体积\n- 增加引入部分类型定义\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fquansitech%2Fantd-admin-front","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fquansitech%2Fantd-admin-front","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fquansitech%2Fantd-admin-front/lists"}