{"_id":"@bireturn/ag-grid","_rev":"6-cc2a5e49cb3c20e3b04fb5dfcfba6641","name":"@bireturn/ag-grid","dist-tags":{"latest":"1.0.5"},"versions":{"1.0.0":{"name":"@bireturn/ag-grid","version":"1.0.0","_id":"@bireturn/ag-grid@1.0.0","maintainers":[{"name":"hujingn","email":"hujingn@qq.com"}],"dist":{"shasum":"ee9c59472e13d77ae526ca7ae3c9a58fdb083c53","tarball":"https://registry.npmjs.org/@bireturn/ag-grid/-/ag-grid-1.0.0.tgz","fileCount":47,"integrity":"sha512-6eFWNx95m0usg7dcQ9Dtqe2zhpAsPT1yk82raxWzsDDdfAPXKgCgmfsoaqQP75iUPHVaxo6nyu9Dcr0q1x117A==","signatures":[{"sig":"MEYCIQDZWuTZ0FygZ7feI7UGUXEWKAvUAGG9dzIGpu4ABakbTwIhAL4LsI7tk0e6SsjtaLlt5PhRhOa+a863uR2N6Upo3eOY","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1328641},"main":"./lib/ag-grid.umd.cjs","type":"module","module":"./lib/ag-grid.js","exports":{".":{"types":"./lib/index.d.ts","import":"./lib/ag-grid.js","require":"./lib/ag-grid.umd.cjs"},"./lib/style.css":"./lib/style.css"},"gitHead":"8b214e2fc3d6c7e67ce8423c243ed037a3654772","scripts":{"dev":"vite","lint":"eslint src --ext .ts,.vue","build":"vue-tsc --noEmit && vite build"},"_npmUser":{"name":"hujingn","email":"hujingn@qq.com"},"_npmVersion":"10.9.3","description":"基于 AG Grid v28 封装的 Vue 3 企业级表格组件库，内置服务端分页、字典渲染、行内编辑、表单搜索等能力。","directories":{},"_nodeVersion":"22.19.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.4.27","sass":"^1.99.0","vite":"^5.0.0","xlsx":"^0.18.5","pinia":"^2.0.28","vue-tsc":"^2.0.0","typescript":"^5.0.0","vue-router":"^4.1.4","ag-grid-vue3":"^28.1.0","element-plus":"^2.3.14","vite-plugin-dts":"^3.0.0","ag-grid-community":"^28.1.0","@vitejs/plugin-vue":"^5.0.0","ag-grid-enterprise":"^28.1.0"},"peerDependencies":{"vue":"^3.4.0","pinia":"^2.0.0","vue-router":"^4.0.0","ag-grid-vue3":"^28.1.0","element-plus":"^2.3.0","ag-grid-community":"^28.1.0","ag-grid-enterprise":"^28.1.0"},"_npmOperationalInternal":{"tmp":"tmp/ag-grid_1.0.0_1780303018224_0.49535783673922795","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@bireturn/ag-grid","version":"1.0.1","_id":"@bireturn/ag-grid@1.0.1","maintainers":[{"name":"hujingn","email":"hujingn@qq.com"},{"name":"kanggaoyang","email":"1162172981@qq.com"}],"dist":{"shasum":"a61701f3e8cc0938ddf58b24be0ca64a6adc3eb0","tarball":"https://registry.npmjs.org/@bireturn/ag-grid/-/ag-grid-1.0.1.tgz","fileCount":47,"integrity":"sha512-yEqeR7KcRsxojchv1uUw25XJV26sqktjz8KDr++iIlxyHOR7YgAtt8IHi/cUnWGXy4AxNj6tDzX+FGSP2Jk/KA==","signatures":[{"sig":"MEUCIQC+kqyoRzNGqfoQWB7MTlu6oQOLwgMOLbgzPXvrDQ7rAQIge2+jGsKxSO9pSPyxzJK7lLmH15TJkQ3kS7MrZ4E1a5Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1331624},"main":"./lib/ag-grid.umd.cjs","type":"module","module":"./lib/ag-grid.js","exports":{".":{"types":"./lib/index.d.ts","import":"./lib/ag-grid.js","require":"./lib/ag-grid.umd.cjs"},"./lib/style.css":"./lib/style.css"},"gitHead":"0983eb26637c2f5b65f9bafa62a7e5db68a9df9a","scripts":{"dev":"vite","lint":"eslint src --ext .ts,.vue","build":"vue-tsc --noEmit && vite build"},"_npmUser":{"name":"hujingn","email":"hujingn@qq.com"},"_npmVersion":"10.9.3","description":"基于 AG Grid v28 封装的 Vue 3 企业级表格组件库，内置服务端分页、字典渲染、行内编辑、表单搜索等能力。","directories":{},"_nodeVersion":"22.19.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.4.27","sass":"^1.99.0","vite":"^5.0.0","xlsx":"^0.18.5","pinia":"^2.0.28","vue-tsc":"^2.0.0","typescript":"^5.0.0","vue-router":"^4.1.4","ag-grid-vue3":"^28.1.0","element-plus":"^2.3.14","vite-plugin-dts":"^3.0.0","ag-grid-community":"^28.1.0","@vitejs/plugin-vue":"^5.0.0","ag-grid-enterprise":"^28.1.0"},"peerDependencies":{"vue":"^3.4.0","pinia":"^2.0.0","vue-router":"^4.0.0","ag-grid-vue3":"^28.1.0","element-plus":"^2.3.0","ag-grid-community":"^28.1.0","ag-grid-enterprise":"^28.1.0"},"_npmOperationalInternal":{"tmp":"tmp/ag-grid_1.0.1_1780567032289_0.8607943010450714","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@bireturn/ag-grid","version":"1.0.2","_id":"@bireturn/ag-grid@1.0.2","maintainers":[{"name":"hujingn","email":"hujingn@qq.com"},{"name":"kanggaoyang","email":"1162172981@qq.com"}],"dist":{"shasum":"ab3eb443983b7e90a52b00e44e311b6e92590633","tarball":"https://registry.npmjs.org/@bireturn/ag-grid/-/ag-grid-1.0.2.tgz","fileCount":47,"integrity":"sha512-MVxlWI0WUDtyGGYgo+Ma/lZd3E4m2s/1ax9tQ/IzvtFnPNWeaYxHg4064BSQ1cFQNqoiYjQpJUlqPuFLs3AOFg==","signatures":[{"sig":"MEUCIA/4wLDKADncEseSc9tjiZHfwgRlaT+XDj8pxZd7g0t6AiEA9dhHm/hZjvzbUumEkZslKbOwHmuh8v1BJEt0cdZ6jBg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1332244},"main":"./lib/ag-grid.umd.cjs","type":"module","module":"./lib/ag-grid.js","exports":{".":{"types":"./lib/index.d.ts","import":"./lib/ag-grid.js","require":"./lib/ag-grid.umd.cjs"},"./lib/style.css":"./lib/style.css"},"gitHead":"4d7b8296e62036dd4663995e36c7a648095b7b6c","scripts":{"dev":"vite","lint":"eslint src --ext .ts,.vue","build":"vue-tsc --noEmit && vite build"},"_npmUser":{"name":"kanggaoyang","email":"1162172981@qq.com"},"_npmVersion":"8.19.2","description":"基于 AG Grid v28 封装的 Vue 3 企业级表格组件库，内置服务端分页、字典渲染、行内编辑、表单搜索等能力。","directories":{},"_nodeVersion":"18.12.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.4.27","sass":"^1.99.0","vite":"^5.0.0","xlsx":"^0.18.5","pinia":"^2.0.28","vue-tsc":"^2.0.0","typescript":"^5.0.0","vue-router":"^4.1.4","ag-grid-vue3":"^28.1.0","element-plus":"^2.3.14","vite-plugin-dts":"^3.0.0","ag-grid-community":"^28.1.0","@vitejs/plugin-vue":"^5.0.0","ag-grid-enterprise":"^28.1.0"},"peerDependencies":{"vue":"^3.4.0","pinia":"^2.0.0","vue-router":"^4.0.0","ag-grid-vue3":"^28.1.0","element-plus":"^2.3.0","ag-grid-community":"^28.1.0","ag-grid-enterprise":"^28.1.0"},"_npmOperationalInternal":{"tmp":"tmp/ag-grid_1.0.2_1780986902504_0.7846496816383177","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@bireturn/ag-grid","version":"1.0.3","_id":"@bireturn/ag-grid@1.0.3","maintainers":[{"name":"hujingn","email":"hujingn@qq.com"},{"name":"kanggaoyang","email":"1162172981@qq.com"}],"dist":{"shasum":"e9d0dbe19ef57e3006f8330e53caea2e222ca369","tarball":"https://registry.npmjs.org/@bireturn/ag-grid/-/ag-grid-1.0.3.tgz","fileCount":47,"integrity":"sha512-nmm7E8P3QFf9k1QVI7axJw9qFb7d0JapZXoLt9mmiGV17wHng+MGaeSFT1Ato1QK18Z7AMrAp8VgGN8O+TwgPw==","signatures":[{"sig":"MEQCICojJ2IOnLYMzCS+lRUdXXZKdOW82tFq+3S880wzHEagAiBfBRW+WT4bGiR4PFkMEWyxtPBBI8pBTGEs2yg74PObeg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1332244},"main":"./lib/ag-grid.umd.cjs","type":"module","module":"./lib/ag-grid.js","exports":{".":{"types":"./lib/index.d.ts","import":"./lib/ag-grid.js","require":"./lib/ag-grid.umd.cjs"},"./lib/style.css":"./lib/style.css"},"gitHead":"8f426de672f71eccccf1ae3781d04ba0a818ccec","scripts":{"dev":"vite","lint":"eslint src --ext .ts,.vue","build":"vue-tsc --noEmit && vite build"},"_npmUser":{"name":"kanggaoyang","email":"1162172981@qq.com"},"_npmVersion":"8.19.2","description":"基于 AG Grid v28 封装的 Vue 3 企业级表格组件库，内置服务端分页、字典渲染、行内编辑、表单搜索等能力。","directories":{},"_nodeVersion":"18.12.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.4.27","sass":"^1.99.0","vite":"^5.0.0","xlsx":"^0.18.5","pinia":"^2.0.28","vue-tsc":"^2.0.0","typescript":"^5.0.0","vue-router":"^4.1.4","ag-grid-vue3":"^28.1.0","element-plus":"^2.3.14","vite-plugin-dts":"^3.0.0","ag-grid-community":"^28.1.0","@vitejs/plugin-vue":"^5.0.0","ag-grid-enterprise":"^28.1.0"},"peerDependencies":{"vue":"^3.4.0","pinia":"^2.0.0","vue-router":"^4.0.0","ag-grid-vue3":"^28.1.0","element-plus":"^2.3.0","ag-grid-community":"^28.1.0","ag-grid-enterprise":"^28.1.0"},"_npmOperationalInternal":{"tmp":"tmp/ag-grid_1.0.3_1780996887990_0.8053389463200789","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@bireturn/ag-grid","version":"1.0.4","_id":"@bireturn/ag-grid@1.0.4","maintainers":[{"name":"hujingn","email":"hujingn@qq.com"},{"name":"kanggaoyang","email":"1162172981@qq.com"}],"dist":{"shasum":"046c8e41d5606943634e6f3269510393759323a7","tarball":"https://registry.npmjs.org/@bireturn/ag-grid/-/ag-grid-1.0.4.tgz","fileCount":48,"integrity":"sha512-tdxas2E5TglQ103F2gtKfoWi7lVVie2T3L7wSUUC/akj18MH3X/5g9RYctCPBK2TgTx9pEsNnJalv9i1WndQug==","signatures":[{"sig":"MEQCIGtoHM53N+XhVSF6Np2wKgcJY4hSUkidp5Cyg51yTbtmAiA5g910wcgGTiJm8QhoZ0BTQJEuYTCJRtE/HPmQyBUiSg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1366177},"main":"./lib/ag-grid.umd.cjs","type":"module","module":"./lib/ag-grid.js","exports":{".":{"types":"./lib/index.d.ts","import":"./lib/ag-grid.js","require":"./lib/ag-grid.umd.cjs"},"./lib/style.css":"./lib/style.css"},"gitHead":"9cc5b1a99c1c727e6cee183203dc89a1a8b91fc7","scripts":{"dev":"vite","lint":"eslint src --ext .ts,.vue","build":"vue-tsc --noEmit && vite build"},"_npmUser":{"name":"kanggaoyang","email":"1162172981@qq.com"},"_npmVersion":"8.19.2","description":"基于 AG Grid v28 封装的 Vue 3 企业级表格组件库，内置服务端分页、字典渲染、行内编辑、表单搜索等能力。","directories":{},"_nodeVersion":"18.12.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.4.27","sass":"^1.99.0","vite":"^5.0.0","xlsx":"^0.18.5","pinia":"^2.0.28","vue-tsc":"^2.0.0","typescript":"^5.0.0","vue-router":"^4.1.4","ag-grid-vue3":"^28.1.0","element-plus":"^2.3.14","vite-plugin-dts":"^3.0.0","ag-grid-community":"^28.1.0","@vitejs/plugin-vue":"^5.0.0","ag-grid-enterprise":"^28.1.0"},"peerDependencies":{"vue":"^3.4.0","pinia":"^2.0.0","vue-router":"^4.0.0","ag-grid-vue3":"^28.1.0","element-plus":"^2.3.0","ag-grid-community":"^28.1.0","ag-grid-enterprise":"^28.1.0"},"_npmOperationalInternal":{"tmp":"tmp/ag-grid_1.0.4_1780999235616_0.7322805043082954","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"@bireturn/ag-grid","version":"1.0.5","description":"基于 AG Grid v28 封装的 Vue 3 企业级表格组件库，内置服务端分页、字典渲染、行内编辑、表单搜索等能力。","type":"module","publishConfig":{"access":"public"},"main":"./lib/ag-grid.umd.cjs","module":"./lib/ag-grid.js","exports":{".":{"import":"./lib/ag-grid.js","require":"./lib/ag-grid.umd.cjs","types":"./lib/index.d.ts"},"./lib/style.css":"./lib/style.css"},"scripts":{"dev":"vite","build":"vue-tsc --noEmit && vite build","lint":"eslint src --ext .ts,.vue"},"peerDependencies":{"ag-grid-community":"^28.1.0","ag-grid-enterprise":"^28.1.0","ag-grid-vue3":"^28.1.0","element-plus":"^2.3.0","pinia":"^2.0.0","vue":"^3.4.0","vue-router":"^4.0.0"},"devDependencies":{"@vitejs/plugin-vue":"^5.0.0","ag-grid-community":"^28.1.0","ag-grid-enterprise":"^28.1.0","ag-grid-vue3":"^28.1.0","element-plus":"^2.3.14","pinia":"^2.0.28","sass":"^1.99.0","typescript":"^5.0.0","vite":"^5.0.0","vite-plugin-dts":"^3.0.0","vue":"^3.4.27","vue-router":"^4.1.4","vue-tsc":"^2.0.0","xlsx":"^0.18.5"},"gitHead":"5b936b2da595fb4907eb91283da6f24df5e9de16","_id":"@bireturn/ag-grid@1.0.5","_nodeVersion":"18.12.0","_npmVersion":"8.19.2","dist":{"integrity":"sha512-axLUKSuJRetSqaFHoMVnRR0QgJLlY9qnY0NV8ygt+Ln2vZgsivXPo7ObumPvOPnjJ6vRjd2Gjvp2VtOSDyMgfw==","shasum":"11d5991b4c1c3c145a11ff4a1a5b119ed2660963","tarball":"https://registry.npmjs.org/@bireturn/ag-grid/-/ag-grid-1.0.5.tgz","fileCount":48,"unpackedSize":1368734,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDc02IwUtII1TIPnlnCLQxY8VlkIt5uWr6ugWhSbg3rwQIhAJqvDfEEZVgBJ5reVYu2U7byUeea6fz+QC2aRogjNW9W"}]},"_npmUser":{"name":"kanggaoyang","email":"1162172981@qq.com"},"directories":{},"maintainers":[{"name":"hujingn","email":"hujingn@qq.com"},{"name":"kanggaoyang","email":"1162172981@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/ag-grid_1.0.5_1781062727480_0.8685659335546341"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-01T08:36:58.019Z","modified":"2026-06-10T03:38:47.931Z","1.0.0":"2026-06-01T08:36:58.361Z","1.0.1":"2026-06-04T09:57:12.442Z","1.0.2":"2026-06-09T06:35:02.694Z","1.0.3":"2026-06-09T09:21:28.192Z","1.0.4":"2026-06-09T10:00:35.771Z","1.0.5":"2026-06-10T03:38:47.729Z"},"description":"基于 AG Grid v28 封装的 Vue 3 企业级表格组件库，内置服务端分页、字典渲染、行内编辑、表单搜索等能力。","maintainers":[{"name":"hujingn","email":"hujingn@qq.com"},{"name":"kanggaoyang","email":"1162172981@qq.com"}],"readme":"# @bireturn/ag-grid\r\n\r\n基于 AG Grid v28 封装的 Vue 3 企业级表格组件库，内置服务端分页、字典渲染、行内编辑、表单搜索等能力。\r\n\r\n## 安装\r\n\r\n```bash\r\nnpm install @bireturn/ag-grid\r\n```\r\n\r\n---\r\n\r\n## 快速开始\r\n\r\n### 1. 注册插件\r\n\r\n在 `main.ts` 中注册，传入宿主项目的依赖：\r\n\r\n```ts\r\nimport { createApp } from 'vue'\r\nimport { AgGridPlugin } from '@bireturn/ag-grid'\r\nimport '@bireturn/ag-grid/lib/style.css'\r\n\r\nimport { useUserStore } from '~/store/user'\r\nimport { useDefaultStore } from '~/store/store'\r\nimport { getDictByMeth, dictListToMap } from '~/api/public/public-d'\r\nimport { isAuthShow } from '~/api/public/public-auth'\r\nimport { errorMsg } from '~/utils/message'\r\nimport { excelUpLoad } from '~/api/public/downLoad'\r\nimport { serverNames } from '~/api/public/public-proxy'\r\nimport { post } from '~/service/index'\r\nimport { dataGridListByPage } from \"~/api/common/admin\";\r\n\r\nconst app = createApp(App)\r\n\r\napp.use(AgGridPlugin, {\r\n  useUserStore,       // () => { dictionariesTable, roleType, ... }\r\n  useDefaultStore,    // () => { lang }\r\n  getDictByMeth,      // (dictType, dictParams) => Promise<{value,label}[]>\r\n  dictListToMap,      // (list) => Record<string, string>\r\n  isAuthShow,         // (authCode) => boolean\r\n  errorMsg,           // (msg: string) => void\r\n  excelUpLoad,        // (serviceId, params) => Promise<void>\r\n  serverNames,        // string[]\r\n  httpPost: post,     // (url, data) => Promise<{success, result}>（select-table 使用）\r\n  dataGridListByPage, // (data: any) => Promise<any>\r\n})\r\n```\r\n\r\n注册后全局可用两个组件：\r\n\r\n| 全局标签 | 说明 | 兼容原组件 |\r\n|---|---|---|\r\n| `<bire-grid>` | 纯表格（服务端数据源） | `<ag-Gird>` |\r\n| `<bire-form-grid>` | 搜索表单 + 表格一体化 | `<publicFormAgGrid>` |\r\n\r\n### 2. 局部使用组件（可选）\r\n\r\n如果不希望全局注册，也可以在单个 `.vue` 文件中按需导入：\r\n\r\n```ts\r\nimport { AgGridComponent, FormAgGridComponent } from '@bireturn/ag-grid'\r\n```\r\n\r\n| 导出名 | 对应全局标签 | 说明 |\r\n|---|---|---|\r\n| `AgGridComponent` | `<bire-grid>` | 纯表格组件 |\r\n| `FormAgGridComponent` | `<bire-form-grid>` | 搜索表单 + 表格一体化组件 |\r\n\r\n> **注意**：局部使用时仍需先调用 `app.use(AgGridPlugin, options)` 完成依赖注入，组件内部通过 `getContext()` 读取注入的依赖。\r\n\r\n```vue\r\n<template>\r\n  <AgGridComponent\r\n    :columnDefsConfig=\"listAGrid.columnConfig\"\r\n    :serverSideDatasource=\"listAGrid.dataSource\"\r\n    @on-operation=\"listAGrid.rowBtnOnClick\"\r\n  />\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { AgGridComponent, AGrid } from '@bireturn/ag-grid'\r\n\r\nconst listAGrid = new AGrid({ ... }).build()\r\n</script>\r\n```\r\n\r\n---\r\n\r\n## BireGrid（`<bire-grid>`，`<ag-Gird>`）\r\n\r\n纯表格组件，搭配 `AGrid` 工厂类使用，数据由外部通过 `serverSideDatasource` 注入。\r\n\r\n### Props\r\n\r\n| 属性 | 类型 | 默认值 | 说明 |\r\n|---|---|---|---|\r\n| `columnDefsConfig` | `any[]` | `[]` | 列定义数组，详见[列类型](#列类型) |\r\n| `gridOptions` | `object` | — | AG Grid 原生 gridOptions |\r\n| `serverSideDatasource` | `object` | — | 服务端数据源（含 `getRows` 方法） |\r\n| `height` | `string` | `'100%'` | 容器高度 |\r\n| `pagination` | `boolean` | `true` | 是否显示分页 |\r\n| `paginationPageSize` | `number` | `30` | 默认每页条数 |\r\n| `defaultPageSize` | `number` | `0` | 优先使用的每页条数（覆盖 paginationPageSize） |\r\n| `cardTitle` | `string` | `''` | 顶部卡片标题（空则不显示卡片） |\r\n| `showSummaries` | `boolean` | `false` | 是否显示合计行 |\r\n| `isFlex` | `boolean` | `false` | 列是否 flex 均分 |\r\n| `pageSizeInput` | `boolean` | `false` | 是否允许手动输入每页条数 |\r\n| `excludePageSizes` | `number[]` | `[]` | 分页器中排除的条数选项 |\r\n| `checkTrigerRowClick` | `boolean` | `true` | 勾选 checkbox 是否同时触发行点击 |\r\n\r\n### Events\r\n\r\n| 事件 | 参数 | 说明 |\r\n|---|---|---|\r\n| `on-operation` | `(data, actionType, rowIndex, btnData)` | 行按钮点击 |\r\n| `on-gridRowClick` | `(data)` | 行点击 |\r\n| `on-gridCellDoubleClick` | `(event)` | 单元格双击 |\r\n| `on-cellEditingStopped` | `(event)` | 行内编辑停止 |\r\n| `on-selected` | `(rows)` | 勾选行变化 |\r\n| `on-filterChanged` | `(event)` | 列筛选变化 |\r\n| `on-rowEditStopped` | `(event)` | 行编辑停止（全行编辑模式） |\r\n\r\n### Expose（ref 方法）\r\n\r\n| 方法 | 说明 |\r\n|---|---|\r\n| `editRow(rowIndex)` | 进入行内编辑 |\r\n| `submit()` | 提交当前编辑行，返回 `Promise<rowData>` |\r\n| `rollback(rowIndex)` | 回滚指定行的编辑 |\r\n| `editAllRows()` | 开启全行编辑模式 |\r\n| `cancelEditAllRows()` | 退出全行编辑模式 |\r\n| `getSelectedRows()` | 获取当前选中行 |\r\n| `deselectAll()` | 取消所有选中 |\r\n| `getCurrentPageData()` | 获取当前页所有行数据 |\r\n\r\n### 基础用法\r\n\r\n```vue\r\n<template>\r\n  <bire-grid\r\n    :columnDefsConfig=\"listAGrid.columnConfig\"\r\n    :gridOptions=\"listAGrid.gridOptions\"\r\n    :serverSideDatasource=\"listAGrid.dataSource\"\r\n    @on-operation=\"listAGrid.rowBtnOnClick\"\r\n    @on-gridRowClick=\"listAGrid.gridRowClick\"\r\n    :defaultPageSize=\"20\"\r\n  >\r\n    <!-- 顶部按钮插槽 -->\r\n    <el-button type=\"primary\" @click=\"handleAdd\">新增</el-button>\r\n  </bire-grid>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { AGrid } from '@bireturn/ag-grid'\r\n\r\nconst listAGrid = new AGrid({\r\n  searchForm: { name: '', status: '' },\r\n  columnConfig: [\r\n    { type: 'index' },\r\n    { type: 'text', headerName: '名称', field: 'name', sortable: true, filter: true },\r\n    { type: 'dictStatus', headerName: '状态', field: 'status', renderDictMap: { '1': '启用', '0': '禁用' } },\r\n    { type: 'button', headerName: '操作', btnList: [\r\n      { label: '编辑', actionType: 'edit', type: 'primary' },\r\n      { label: '删除', actionType: 'delete', type: 'danger' },\r\n    ]},\r\n  ],\r\n  getGridDataFunc: async (params) => {\r\n    const { result } = await api.getList(params)\r\n    return result\r\n  },\r\n  rowBtnOnClick: ({ data, actionType }) => {\r\n    if (actionType === 'edit') handleEdit(data)\r\n    if (actionType === 'delete') handleDelete(data)\r\n  },\r\n}).build()\r\n</script>\r\n```\r\n\r\n---\r\n\r\n## BireFormGrid（`<bire-form-grid>`，`<publicFormAgGrid>`）\r\n\r\n搜索表单 + 表格一体化组件，通过 `agGridConfig` 接收全部配置。\r\n\r\n### Props\r\n\r\n| 属性 | 类型 | 说明 |\r\n|---|---|---|\r\n| `agGridConfig` | `object` | 完整配置对象，详见下方字段说明 |\r\n\r\n### agGridConfig 字段\r\n\r\n| 字段 | 类型 | 必填 | 说明 |\r\n|---|---|---|---|\r\n| `fetchApi` | `(params) => Promise<{success, result, error}>` | 是 | 请求函数，result 需含 `{records, total}` |\r\n| `formJson` | `FormItem[]` | — | 搜索表单项定义数组 |\r\n| `defaultParams` | `object` | — | 默认搜索参数（初始值） |\r\n| `defaultSortParams` | `any[]` | — | 默认排序配置 |\r\n| `rowBtnGroup` | `BtnItem[]` | — | 行操作按钮 |\r\n| `otherBtnGroup` | `BtnItem[]` | — | 表格顶部按钮 |\r\n| `rowBtnGroupClick` | `({data, actionType, rowIndex}) => void` | — | 行按钮点击回调 |\r\n| `otherBtnGroupClick` | `({actionType, data}) => void` | — | 顶部按钮点击回调 |\r\n| `rowClick` | `(data) => void` | — | 行点击回调 |\r\n| `height` | `number` | — | 表格高度（px） |\r\n| `pagination` | `boolean` | — | 是否分页，默认 `true` |\r\n| `paginationPageSize` | `number` | — | 每页条数 |\r\n| `defaultPageSize` | `number` | — | 默认每页条数 |\r\n| `cardTitle` | `string` | — | 顶部标题 |\r\n| `labelWidth` | `string` | — | 表单 label 宽度，如 `'100px'` |\r\n| `isFlex` | `boolean` | — | 列均分 |\r\n| `firstOnInit` | `boolean` | — | 是否初始化时加载数据，默认 `true` |\r\n| `resetToDefaultParams` | `boolean` | — | 重置时是否还原为 defaultParams，默认 `false` |\r\n| `exportConfig` | `ExportConfig` | — | 导出配置 |\r\n| `serviceCode` | `string` | — | 动态列服务码（配合 dataGridListByPage） |\r\n| `gridCode` | `string` | — | 动态列表格码 |\r\n| `otherBtnPosition` | `string` | — | 顶部按钮位置：`'left'`/`'right'`/`'gridRight'`/`'onlyTable'`/`'table'`（默认） |\r\n| `filterCol` | `{field}` \\| `{field}[]` | — | 过滤掉的动态列字段 |\r\n| `otherRowConfig` | `Record<field, colDef>` | — | 按字段覆盖列配置 |\r\n| `isChildren` | `boolean` | — | 是否子表格（加载时携带父行数据） |\r\n\r\n**运行时回写字段**（组件挂载后可用）\r\n\r\n| 字段 | 说明 |\r\n|---|---|\r\n| `config.searchForm` | 当前搜索表单数据（响应式） |\r\n| `config.recordRowData` | 当前点击行数据 |\r\n| `config.selectList` | 当前勾选行列表 |\r\n| `config.getAllSelected(key?)` | 获取勾选行（可指定取某字段） |\r\n| `config.resetAllStore()` | 重置表格数据源（重新加载） |\r\n| `config.setParamsAndReset(data?)` | 更新搜索条件并刷新 |\r\n| `config.setDefaultParamsAndReset(data?)` | 更新条件并设为默认后刷新 |\r\n| `config.getRequestParams()` | 获取最近一次请求参数的副本 |\r\n\r\n### 用法示例\r\n\r\n```vue\r\n<template>\r\n  <bire-form-grid :agGridConfig=\"agGridConfig\">\r\n    <template #button>\r\n      <el-button type=\"primary\" @click=\"handleExport\">导出</el-button>\r\n    </template>\r\n  </bire-form-grid>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { reactive } from 'vue'\r\n\r\nconst agGridConfig = reactive({\r\n  height: 500,\r\n  labelWidth: '80px',\r\n  formJson: [\r\n    { type: 'input', label: '名称', field: 'name' },\r\n    { type: 'select', label: '状态', field: 'status', parentId: 'STATUS_DICT' },\r\n  ],\r\n  defaultParams: { name: '', status: '' },\r\n  rowBtnGroup: [\r\n    { label: '编辑', actionType: 'edit', type: 'primary' },\r\n  ],\r\n  fetchApi: async (params) => api.getList(params),\r\n  otherBtnPosition: \"table\", //left right table  默认为'' 即''=table gridRight 只展示otherBtnGroup且居右 slotRight 只展示插槽内容\r\n  serviceCode: \"AUTH\", //代理服务编码\r\n  gridCode: \"PUBLIC_TABLE\", //表格编码\r\n  rowBtnGroupClick: ({ data, actionType }) => {\r\n    if (actionType === 'edit') openDialog(data)\r\n  },\r\n  rowClick: (data) => { currentRow.value = data },\r\n})\r\n</script>\r\n```\r\n\r\n### 插槽\r\n\r\n| 插槽名 | 说明 |\r\n|---|---|\r\n| `button` | 按钮区追加内容 |\r\n| `table-title` | 表单上方标题区 |\r\n| `agGirdTopDescribe` | 表格上方描述区 |\r\n| `before-{field}` | 指定表单项前插槽，作用域含 `{ publicAGrid }` |\r\n| `after-{field}` | 指定表单项后插槽 |\r\n| `{field}` | 完全自定义指定表单项，作用域含 `{ formItem, searchForm }` |\r\n\r\n---\r\n\r\n## AGrid 工厂类\r\n\r\n`AGrid` 用于构造 `bire-grid` 所需的完整配置对象。\r\n\r\n```ts\r\nimport { AGrid } from '@bireturn/ag-grid'\r\nimport type { AGridOpts } from '@bireturn/ag-grid'\r\n\r\nconst listAGrid: AGridOpts = new AGrid({\r\n  searchForm: {},           // 搜索表单初始值\r\n  columnConfig: [],         // 列定义\r\n  getGridDataFunc,          // 数据获取函数\r\n  rowBtnOnClick,            // 行按钮回调\r\n  gridBtnOnClick,           // 顶部按钮回调\r\n  gridRowClick,             // 行点击回调\r\n  exportConfig: {           // 导出配置（可选）\r\n    fileName: '导出文件',\r\n    authCode: 'export:btn',\r\n  },\r\n  showSummaries: false,     // 是否显示合计行\r\n}).build()\r\n```\r\n\r\n**`getGridDataFunc` 返回格式**\r\n\r\n```ts\r\nasync (params) => {\r\n  const { result } = await api.list(params)\r\n  return result // { records: any[], total: number }\r\n}\r\n```\r\n\r\n---\r\n\r\n## 列类型（columnDefsConfig）\r\n\r\n每一列是一个对象，`type` 决定渲染方式：\r\n\r\n### 通用字段\r\n\r\n| 字段 | 说明 |\r\n|---|---|\r\n| `type` | 列类型（见下表） |\r\n| `headerName` | 列标题 |\r\n| `field` | 数据字段名 |\r\n| `width` | 宽度（px） |\r\n| `minWidth` | 最小宽度 |\r\n| `maxWidth` | 最大宽度 |\r\n| `pinned` | 固定列：`true`/`'left'`/`'right'` |\r\n| `sortable` | 是否可排序 |\r\n| `filter` | 是否可筛选 |\r\n| `editable` | 是否可行内编辑 |\r\n\r\n### 列类型一览\r\n\r\n| type | 说明 | 特有字段 |\r\n|---|---|---|\r\n| `index` | 序号列 | — |\r\n| `selection` | 勾选列 | `showDisabledCheckboxes` |\r\n| `text` | 普通文本 | `rendorData(data)` 自定义渲染函数，`customTooltipTextFn(data)` |\r\n| `number` | 数字（只读） | — |\r\n| `number2` | 数字（可编辑） | `elProps`, `elEmits` |\r\n| `defaultText` | 固定显示 `value` 的文本 | `value` |\r\n| `date` | 日期（截取前10位） | `editable` |\r\n| `datetime` | 日期时间 | — |\r\n| `money` | 金额（千位分隔） | — |\r\n| `Price` | 价格（追加单位） | `value`（单位字符串） |\r\n| `toFixed` | 保留小数位 | `value`（小数位数，默认2） |\r\n| `thousandToFixed` | 千分位+小数 | `value`（小数位数） |\r\n| `dictStatus` | 字典状态（支持筛选） | `renderDictMap: Record<value, label>` |\r\n| `dictStatusArr` | 多值字典（逗号分隔） | `value`（字典类型key） |\r\n| `dictStatusArrReturnOne` | 多字典合并映射 | `value`（多字典key，逗号分隔） |\r\n| `status` | 自定义状态映射 | `obj: Record<value, label>`, `valueFormatter?` |\r\n| `tag` | 标签渲染 | `tags: [{value, label, type}]` |\r\n| `switch` | 开关 | `activeValue`/`inactiveValue`, `actionType`, `loading` |\r\n| `hoverText` | 可点击文本 | `url`, `query`, `actionType`, `moreText`, `defaultText`, `nullText` |\r\n| `img` | 图片 | — |\r\n| `icon` | 图标 | `iconName`, `actionType`, `ondition` |\r\n| `light` | 指示灯 | `lightStatus: [{value, color, label}]`, `tooltipRender` |\r\n| `rate` | 评分 | `max` |\r\n| `option` | 下拉选择（行内可编辑） | `value`（字典 parentId） |\r\n| `category` | 分类选择 | `values: [{label, value}]` |\r\n| `button` | 操作按钮列 | `btnList: BtnItem[]` |\r\n| `tooltip` | 固定值+tooltip | `value` |\r\n| `file` | 文件/附件 | — |\r\n| `complex` | 多字段合并显示 | `propsArr: string[]`, `propsNameArr: string[]`, `separator` |\r\n\r\n### 行按钮（button 列 btnList）\r\n\r\n```ts\r\n{\r\n  label: '编辑',\r\n  actionType: 'edit',\r\n  type: 'primary',        // element-plus button type\r\n  plain: true,\r\n  authCode: 'edit:btn',   // 权限码（空则始终显示）\r\n  disabled: false,        // 或 (row) => boolean\r\n  loading: false,\r\n}\r\n```\r\n\r\n---\r\n\r\n## 搜索表单项（formJson）\r\n\r\n`bire-form-grid` 的 `formJson` 数组定义表单项：\r\n\r\n```ts\r\nformJson: [\r\n  { type: 'input',      label: '名称',     field: 'name' },\r\n  { type: 'select',     label: '状态',     field: 'status',    parentId: 'STATUS_DICT' },\r\n  { type: 'selectV2',   label: '人员',     field: 'userId',    parentId: 'USER_DICT' },\r\n  { type: 'daterange',  label: '日期范围', field: 'dateRange' },\r\n  { type: 'monthrange', label: '月份范围', field: 'monthRange' },\r\n  { type: 'radio',      label: '类型',     field: 'type',      parentId: 'TYPE_DICT' },\r\n  { type: 'checkbox',   label: '标签',     field: 'tags',      parentId: 'TAG_DICT' },\r\n  { type: 'switch',     label: '启用',     field: 'enabled' },\r\n  { type: 'numberRange',label: '数量范围', field: 'qty' },\r\n  {\r\n    type: 'selectTable',     // 带表格的下拉选择\r\n    label: '供应商',\r\n    field: 'supplierId',\r\n    parentId: 'SUPPLIER_SELECT',  // 对应 selectDict 中的配置 key\r\n  },\r\n]\r\n```\r\n\r\n### 内置表单组件\r\n\r\n库内置以下表单组件作为默认实现，无需宿主注册即可使用：\r\n\r\n| type | 组件 | 说明 |\r\n|---|---|---|\r\n| `select` | `public-select` | 基于字典的下拉选择 |\r\n| `selectV2` | `public-select-v2` | 虚拟列表下拉 |\r\n| `selectTable` | `select-table` | 带分页表格的下拉 |\r\n| `selectTablePlus` | `selectTablePlus` | 增强版表格下拉（支持 v-model） |\r\n| `radio` | `public-radio` | 字典单选 |\r\n| `checkbox` | `public-checkbox` | 字典多选 |\r\n| `switch` | `public-switch` | 开关 |\r\n| `daterange` | `public-daterange` | 日期范围 |\r\n| `monthrange` | `public-monthrange` | 月份范围 |\r\n| `numberRange` | `numberRange` | 数值范围 |\r\n\r\n**覆盖内置组件**：在注册插件时传入 `formComponents` 字段：\r\n\r\n```ts\r\napp.use(AgGridPlugin, {\r\n  // ...\r\n  formComponents: {\r\n    publicSelect: MyCustomSelect,\r\n    selectTable: MyCustomSelectTable,\r\n  },\r\n})\r\n```\r\n\r\n---\r\n\r\n## selectDict 配置\r\n\r\n`selectTable` / `selectTablePlus` 需要通过 `selectDict` 告知请求地址和列定义。支持懒加载写法（避免 Pinia 时序问题）：\r\n\r\n```ts\r\napp.use(AgGridPlugin, {\r\n  // ...\r\n  selectDict: () => ({\r\n    SUPPLIER_SELECT: {\r\n      url: '/proxy/common-server/supplier/list',\r\n      colName: 'supplierId',          // 回填字段\r\n      columnDefs: [\r\n        { label: '编码', prop: 'supplierCode' },\r\n        { label: '名称', prop: 'supplierName' },\r\n      ],\r\n      postBody: { type: '1' },        // 固定请求参数\r\n      disableFilterKey: false,        // 是否禁用关键字筛选\r\n    },\r\n  }),\r\n})\r\n```\r\n\r\n---\r\n\r\n## 导出\r\n\r\n### 使用 AGrid 导出配置（自动）\r\n\r\n```ts\r\nnew AGrid({\r\n  exportConfig: {\r\n    fileName: '物料清单',\r\n    authCode: 'export:btn',    // 可选，控制按钮显示\r\n    // 使用当前搜索参数导出\r\n  },\r\n  requestUrl: '/proxy/common-server/material/list',\r\n})\r\n```\r\n\r\n### 手动调用导出\r\n\r\n```ts\r\nimport { generalExport, doGeneralExport } from '@bireturn/ag-grid'\r\n\r\n// 自动从 URL 解析 serviceId\r\nawait generalExport(listAGrid, '/proxy/common-server/material/list', null, '导出文件')\r\n\r\n// 完全手动\r\nawait doGeneralExport(listAGrid, 50000, 'common-server', '/material/list', params, '导出文件')\r\n```\r\n\r\n---\r\n\r\n## 工具函数\r\n\r\n```ts\r\nimport { getDictValueMap, rowSpan, showCellRenderer } from '@bireturn/ag-grid'\r\n\r\n// 获取字典映射表 { value -> label }\r\nconst dictMap = await getDictValueMap('SYS_STATUS')\r\n// 支持远程字典：'common:getComboGridDataByPage'\r\nconst remoteMap = await getDictValueMap('common:MATERIAL_TYPE', { bizType: '1' })\r\n\r\n// 合并单元格行数计算（用于 gridOptions.getRowSpan）\r\nrowSpan(params)\r\n\r\n// 合并单元格时隐藏多余单元格内容（用于 gridOptions.getRowClass）\r\nshowCellRenderer()\r\n```\r\n\r\n### 合并单元格示例\r\n\r\n```ts\r\nnew AGrid({\r\n  gridOptions: {\r\n    getRowSpan: (params) => rowSpan(params),\r\n    context: {\r\n      autoMergCols: ['category'],    // 需要合并的列 field\r\n      autoPrimaryKey: ['id'],        // 合并的唯一主键\r\n    },\r\n  },\r\n})\r\n```\r\n\r\n---\r\n\r\n## 上下文注入完整类型\r\n\r\n```ts\r\ninterface AgGridContext {\r\n  useUserStore: () => { dictionariesTable: Record<string, any[]>; roleType?: string; [key: string]: any }\r\n  useDefaultStore: () => { lang: string; [key: string]: any }\r\n  getDictByMeth: (dictType: string, dictParams: any) => Promise<{ value: string; label: string }[]>\r\n  dictListToMap: (list: any[]) => Record<string, string>\r\n  isAuthShow: (authCodes: string | string[], type?: string) => boolean\r\n  errorMsg: (msg: string) => void\r\n  excelUpLoad: (serviceId: string, params: any) => Promise<any>\r\n  serverNames: string[]\r\n  httpPost?: (url: string, data: any) => Promise<{ success: boolean; result: any }>\r\n  selectDict?: Record<string, SelectDictItem> | (() => Record<string, SelectDictItem>)\r\n  dataGridListByPage?: (data: any) => Promise<any>\r\n  getGridHeadTitle?: (serviceCode: string, gridCode: string, field: string, title: string) => string\r\n  formComponents?: { publicSelect?: any; selectTable?: any; [key: string]: any }\r\n  uploadComponent?: any\r\n  labels?: { search?: string; reset?: string; export?: string; selectOperateData?: string }\r\n}\r\n```\r\n\r\n---\r\n\r\n## 国际化\r\n\r\n表格语言跟随 `useDefaultStore().lang` 自动切换：\r\n\r\n- `zh` → 中文（默认）\r\n- 其他 → 英文\r\n\r\n---\r\n\r\n## 构建\r\n\r\n```bash\r\nnpm run build   # 产物输出到 lib/\r\nnpm run dev     # 开发预览（demo 页面）\r\nnpm run lint    # ESLint 检查\r\n```\r\n","readmeFilename":"README.md"}