{"_id":"@admin-core/table-vue","_rev":"4-5d497c9f0bf8d2ae71296b8c4a9ede1c","name":"@admin-core/table-vue","dist-tags":{"latest":"1.0.3"},"versions":{"1.0.0":{"name":"@admin-core/table-vue","version":"1.0.0","keywords":["admin","table","vue","vxe","grid"],"author":"","license":"MIT","_id":"@admin-core/table-vue@1.0.0","maintainers":[{"name":"jackbo_vip","email":"jackbovip@163.com"}],"dist":{"shasum":"ec1a417569e8bcfb50fff1cc64c9a66f234affe0","tarball":"https://registry.npmjs.org/@admin-core/table-vue/-/table-vue-1.0.0.tgz","fileCount":153,"integrity":"sha512-2xIbKSBrNO1iDGKquOV8TjcWO9UFp7ObRQ67arjAJ+C6jssDBgeDQ6VIzvpA14CnhG/oxcRbzPeatoscIiWX0g==","signatures":[{"sig":"MEUCIQCZ6tF6FBI57aGTk8YWigBad8JUYJqZ3/J9Vh2k4IcyGwIgVBY+pEN10S7Y6/8z41LidXBNZHMnv2AprZUyc0Nbs5Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":16629719},"main":"./dist/index.cjs","type":"module","_from":"file:admin-core-table-vue-1.0.0.tgz","types":"./dist/index.d.ts","unpkg":"./dist/index.global.js","module":"./dist/index.js","browser":"./dist/index.global.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.ts","default":"./dist/index.cjs"}},"./styles":"./dist/table-vue.css","./style.css":"./dist/table-vue.css"},"scripts":{"dev":"vite build --watch","lint":"eslint -c ../../../internal/build-config/configs/eslint/vue-disable-import-order.config.js src --max-warnings=0","test":"vitest -c ../../../internal/build-config/configs/vitest/dom.config.ts","build":"pnpm run typecheck && vite build && vite build --config vite.cdn.config.ts --mode production && vite build --config vite.cdn.config.ts --mode development","test:run":"vitest -c ../../../internal/build-config/configs/vitest/dom.config.ts run","typecheck":"vue-tsc --noEmit"},"_npmUser":{"name":"jackbo_vip","email":"jackbovip@163.com"},"jsdelivr":"./dist/index.global.js","_resolved":"/private/var/folders/3p/zv0xm6450s12v1tvvxvxwr_80000gn/T/8afea105844e2ca641827f32117ae97d/admin-core-table-vue-1.0.0.tgz","_integrity":"sha512-2xIbKSBrNO1iDGKquOV8TjcWO9UFp7ObRQ67arjAJ+C6jssDBgeDQ6VIzvpA14CnhG/oxcRbzPeatoscIiWX0g==","repository":{"url":"","type":"git","directory":"packages/table/vue"},"_npmVersion":"11.6.2","description":"Vue 3 表格适配包，基于 vxe-table 并内置搜索表单集成","directories":{},"sideEffects":["*.css"],"_nodeVersion":"24.13.0","dependencies":{"@admin-core/form-vue":"1.0.0","@admin-core/shared-vue":"1.0.0","@admin-core/table-core":"1.0.0","@admin-core/preferences":"1.0.0","@admin-core/table-shared":"1.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.27","vite":"^7.3.1","jsdom":"^26.1.0","eslint":"^9.39.2","vitest":"^4.0.17","vue-tsc":"^3.2.3","typescript":"^5.9.3","@types/node":"^25.0.9","@vue/test-utils":"^2.4.6","vite-plugin-dts":"^4.5.4","@vitejs/plugin-vue":"^6.0.3","@admin-core/tsconfig":"1.0.0"},"peerDependencies":{"vue":">=3.3.0","vxe-pc-ui":">=4.0.0","vxe-table":">=4.0.0"},"bundleDependencies":["@admin-core/preferences","@admin-core/shared-vue","@admin-core/table-core","@admin-core/table-shared"],"_npmOperationalInternal":{"tmp":"tmp/table-vue_1.0.0_1772271796995_0.760577875549147","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@admin-core/table-vue","version":"1.0.1","keywords":["admin","table","vue","vxe","grid"],"author":"","license":"MIT","_id":"@admin-core/table-vue@1.0.1","maintainers":[{"name":"jackbo_vip","email":"jackbovip@163.com"}],"dist":{"shasum":"c6e11913a9f0ae08cad662c625e2cf14bf25ed04","tarball":"https://registry.npmjs.org/@admin-core/table-vue/-/table-vue-1.0.1.tgz","fileCount":153,"integrity":"sha512-p1mxMRNwEXkjhqIghVjhxbN5/k6tpRMhGmHhAZzJkGsbwa+89woTf+aCu3zJ6UQHSOrgofyvwimqZqb523wOWA==","signatures":[{"sig":"MEQCIC7L9qVj3WXDKyhythyUBUQUrUqpx1rOWpQ5TPC/1DfSAiAMM8hdWJ3IzeiT3u6sxalqt7HSy+5m5TmyjL4fecugYg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":16629719},"main":"./dist/index.cjs","type":"module","_from":"file:admin-core-table-vue-1.0.1.tgz","types":"./dist/index.d.ts","unpkg":"./dist/index.global.js","module":"./dist/index.js","browser":"./dist/index.global.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.ts","default":"./dist/index.cjs"}},"./styles":"./dist/table-vue.css","./style.css":"./dist/table-vue.css"},"scripts":{"dev":"vite build --watch","lint":"eslint -c ../../../internal/build-config/configs/eslint/vue-disable-import-order.config.js src --max-warnings=0","test":"vitest -c ../../../internal/build-config/configs/vitest/dom.config.ts","build":"pnpm run typecheck && vite build && vite build --config vite.cdn.config.ts --mode production && vite build --config vite.cdn.config.ts --mode development","test:run":"vitest -c ../../../internal/build-config/configs/vitest/dom.config.ts run","typecheck":"vue-tsc --noEmit"},"_npmUser":{"name":"jackbo_vip","email":"jackbovip@163.com"},"jsdelivr":"./dist/index.global.js","_resolved":"/private/var/folders/3p/zv0xm6450s12v1tvvxvxwr_80000gn/T/e6c146a882044a36877b001f1f3ce17c/admin-core-table-vue-1.0.1.tgz","_integrity":"sha512-p1mxMRNwEXkjhqIghVjhxbN5/k6tpRMhGmHhAZzJkGsbwa+89woTf+aCu3zJ6UQHSOrgofyvwimqZqb523wOWA==","repository":{"url":"","type":"git","directory":"packages/table/vue"},"_npmVersion":"11.6.2","description":"Vue 3 表格适配包，基于 vxe-table 并内置搜索表单集成","directories":{},"sideEffects":["*.css"],"_nodeVersion":"24.13.0","dependencies":{"@admin-core/form-vue":"1.0.1","@admin-core/shared-vue":"1.0.1","@admin-core/table-core":"1.0.1","@admin-core/preferences":"1.0.1","@admin-core/table-shared":"1.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.27","vite":"^7.3.1","jsdom":"^26.1.0","eslint":"^9.39.2","vitest":"^4.0.17","vue-tsc":"^3.2.3","typescript":"^5.9.3","@types/node":"^25.0.9","@vue/test-utils":"^2.4.6","vite-plugin-dts":"^4.5.4","@vitejs/plugin-vue":"^6.0.3","@admin-core/tsconfig":"1.0.1"},"peerDependencies":{"vue":">=3.3.0","vxe-pc-ui":">=4.0.0","vxe-table":">=4.0.0"},"bundleDependencies":["@admin-core/preferences","@admin-core/shared-vue","@admin-core/table-core","@admin-core/table-shared"],"_npmOperationalInternal":{"tmp":"tmp/table-vue_1.0.1_1772288436759_0.967285134447881","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@admin-core/table-vue","version":"1.0.2","keywords":["admin","table","vue","vxe","grid"],"author":"","license":"MIT","_id":"@admin-core/table-vue@1.0.2","maintainers":[{"name":"jackbo_vip","email":"jackbovip@163.com"}],"dist":{"shasum":"60261d4ece10ef4154da2138cafd6070373d7342","tarball":"https://registry.npmjs.org/@admin-core/table-vue/-/table-vue-1.0.2.tgz","fileCount":153,"integrity":"sha512-OLlBUmgG9VQ854cObB+n+f/mc2x51J7b2+wJz73hrF9jHF7mMEkCEJDtPhhbvZrpE4mCzBZVx1ihmN1R5ekxBw==","signatures":[{"sig":"MEUCIQCVmKA7p/Ik5BjhuILrD24GTvZ+lGIXuX77hRGRU4gxcgIgWI4LNPXKgRe3ga9HeKitKRC/aHWYohxDiTjSlpUJkPU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":16629719},"main":"./dist/index.cjs","type":"module","_from":"file:admin-core-table-vue-1.0.2.tgz","types":"./dist/index.d.ts","unpkg":"./dist/index.global.js","module":"./dist/index.js","browser":"./dist/index.global.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.ts","default":"./dist/index.cjs"}},"./styles":"./dist/table-vue.css","./style.css":"./dist/table-vue.css"},"scripts":{"dev":"vite build --watch","lint":"eslint -c ../../../internal/build-config/configs/eslint/vue-disable-import-order.config.js src --max-warnings=0","test":"vitest -c ../../../internal/build-config/configs/vitest/dom.config.ts","build":"pnpm run typecheck && vite build && vite build --config vite.cdn.config.ts --mode production && vite build --config vite.cdn.config.ts --mode development","test:run":"vitest -c ../../../internal/build-config/configs/vitest/dom.config.ts run","typecheck":"vue-tsc --noEmit"},"_npmUser":{"name":"jackbo_vip","email":"jackbovip@163.com"},"jsdelivr":"./dist/index.global.js","_resolved":"/private/var/folders/3p/zv0xm6450s12v1tvvxvxwr_80000gn/T/9c40c9b080d569b7b4ca8ab452bcf93a/admin-core-table-vue-1.0.2.tgz","_integrity":"sha512-OLlBUmgG9VQ854cObB+n+f/mc2x51J7b2+wJz73hrF9jHF7mMEkCEJDtPhhbvZrpE4mCzBZVx1ihmN1R5ekxBw==","repository":{"url":"","type":"git","directory":"packages/table/vue"},"_npmVersion":"11.6.2","description":"Vue 3 表格适配包，基于 vxe-table 并内置搜索表单集成","directories":{},"sideEffects":["*.css"],"_nodeVersion":"24.13.0","dependencies":{"@admin-core/form-vue":"1.0.2","@admin-core/shared-vue":"1.0.1","@admin-core/table-core":"1.0.1","@admin-core/preferences":"1.0.1","@admin-core/table-shared":"1.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.27","vite":"^7.3.1","jsdom":"^26.1.0","eslint":"^9.39.2","vitest":"^4.0.17","vue-tsc":"^3.2.3","typescript":"^5.9.3","@types/node":"^25.0.9","@vue/test-utils":"^2.4.6","vite-plugin-dts":"^4.5.4","@vitejs/plugin-vue":"^6.0.3","@admin-core/tsconfig":"1.0.1"},"peerDependencies":{"vue":">=3.3.0","vxe-pc-ui":">=4.0.0","vxe-table":">=4.0.0"},"bundleDependencies":["@admin-core/preferences","@admin-core/shared-vue","@admin-core/table-core","@admin-core/table-shared"],"_npmOperationalInternal":{"tmp":"tmp/table-vue_1.0.2_1772358966427_0.8904023453948327","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@admin-core/table-vue","version":"1.0.3","description":"Vue 3 表格适配包，基于 vxe-table 并内置搜索表单集成","type":"module","sideEffects":["*.css"],"main":"./dist/index.cjs","module":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/index.global.js","unpkg":"./dist/index.global.js","jsdelivr":"./dist/index.global.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.ts","default":"./dist/index.cjs"}},"./styles":"./dist/table-vue.css","./style.css":"./dist/table-vue.css"},"dependencies":{"@admin-core/form-vue":"1.0.2","@admin-core/preferences":"1.0.2","@admin-core/shared-vue":"1.0.2","@admin-core/table-core":"1.0.3","@admin-core/table-shared":"1.0.3"},"devDependencies":{"@admin-core/tsconfig":"1.0.1","@types/node":"^25.0.9","@vitejs/plugin-vue":"^6.0.3","@vue/test-utils":"^2.4.6","eslint":"^9.39.2","jsdom":"^26.1.0","typescript":"^5.9.3","vite":"^7.3.1","vite-plugin-dts":"^4.5.4","vitest":"^4.0.17","vue":"^3.5.27","vue-tsc":"^3.2.3"},"peerDependencies":{"vue":">=3.3.0","vxe-pc-ui":">=4.0.0","vxe-table":">=4.0.0"},"keywords":["admin","table","vue","vxe","grid"],"author":"","license":"MIT","repository":{"type":"git","url":"","directory":"packages/table/vue"},"publishConfig":{"access":"public"},"scripts":{"build":"pnpm run typecheck && vite build && vite build --config vite.cdn.config.ts --mode production && vite build --config vite.cdn.config.ts --mode development","dev":"vite build --watch","test":"vitest -c ../../../internal/build-config/configs/vitest/dom.config.ts","test:run":"vitest -c ../../../internal/build-config/configs/vitest/dom.config.ts run","lint":"eslint -c ../../../internal/build-config/configs/eslint/vue-disable-import-order.config.js src --max-warnings=0","typecheck":"vue-tsc --noEmit"},"_id":"@admin-core/table-vue@1.0.3","bundleDependencies":["@admin-core/preferences","@admin-core/shared-vue","@admin-core/table-core","@admin-core/table-shared"],"_integrity":"sha512-eWsqJMmkGhxQE7rV2CN8M2Vz1RAGJWqEnStxbX30/3os+7l/fwRPwySAkaB1yZVKH7dtvCHcj6YpH1kKeUMaaQ==","_resolved":"/private/var/folders/3p/zv0xm6450s12v1tvvxvxwr_80000gn/T/5fd255096704bc338fe82d96f9bcfb1d/admin-core-table-vue-1.0.3.tgz","_from":"file:admin-core-table-vue-1.0.3.tgz","_nodeVersion":"24.13.0","_npmVersion":"11.6.2","dist":{"integrity":"sha512-eWsqJMmkGhxQE7rV2CN8M2Vz1RAGJWqEnStxbX30/3os+7l/fwRPwySAkaB1yZVKH7dtvCHcj6YpH1kKeUMaaQ==","shasum":"bd59a4e39825780cb880bf5d8107f9c7e98bcada","tarball":"https://registry.npmjs.org/@admin-core/table-vue/-/table-vue-1.0.3.tgz","fileCount":153,"unpackedSize":16634177,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIFPzy4qa315TkmK1K/jKIRvAq2vuTSg54Xa8zOv4raz4AiEA6PkDYgZ3LBLPloMPxGzcyravElCjGjQB+Cbc6Ik6K4I="}]},"_npmUser":{"name":"jackbo_vip","email":"jackbovip@163.com"},"directories":{},"maintainers":[{"name":"jackbo_vip","email":"jackbovip@163.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/table-vue_1.0.3_1772361719109_0.06914826757709425"},"_hasShrinkwrap":false}},"time":{"created":"2026-02-28T09:43:16.893Z","modified":"2026-03-01T10:41:59.601Z","1.0.0":"2026-02-28T09:43:17.343Z","1.0.1":"2026-02-28T14:20:37.187Z","1.0.2":"2026-03-01T09:56:06.794Z","1.0.3":"2026-03-01T10:41:59.490Z"},"license":"MIT","keywords":["admin","table","vue","vxe","grid"],"repository":{"type":"git","url":"","directory":"packages/table/vue"},"description":"Vue 3 表格适配包，基于 vxe-table 并内置搜索表单集成","maintainers":[{"name":"jackbo_vip","email":"jackbovip@163.com"}],"readme":"# @admin-core/table-vue\n\n简体中文 | [English](./README.en.md)\n\n`@admin-core/table-core` 的 Vue 3 UI 适配层，基于 `vxe-table`，并内置 `@admin-core/form-vue` 搜索区联动。\n\n## 安装\n\n```bash\npnpm add @admin-core/table-vue vxe-table vxe-pc-ui @admin-core/form-vue\n```\n\n可选（推荐）：\n\n```bash\npnpm add @admin-core/preferences @admin-core/preferences-vue\n```\n\n\n### CDN（生产/开发）\n\n```html\n<!-- jsDelivr（推荐） -->\n<script src=\"https://cdn.jsdelivr.net/npm/@admin-core/table-vue/dist/index.global.js\"></script>\n<script src=\"https://cdn.jsdelivr.net/npm/@admin-core/table-vue/dist/index.global.dev.js\"></script>\n\n<!-- unpkg -->\n<script src=\"https://unpkg.com/@admin-core/table-vue/dist/index.global.js\"></script>\n<script src=\"https://unpkg.com/@admin-core/table-vue/dist/index.global.dev.js\"></script>\n```\n\n## 导出 API（完整）\n\n## 组件与 Hooks\n\n| API | 签名 / 说明 |\n| --- | --- |\n| `AdminTable` | Vue 组件，直接渲染表格。 |\n| `useAdminTable(options)` | 返回 `[Table, tableApi]`。 |\n| `setupAdminTableVue(options?)` | 初始化 vxe 组件、语言、主题同步和默认渲染器。 |\n| `syncAdminTableVueWithPreferences()` | 手动同步偏好设置到表格。 |\n| `getAdminTableVueSetupState()` | 获取当前 setup 状态。 |\n\n## Core 重导出 API\n\n可直接从 `@admin-core/table-vue` 使用：\n\n- `createTableApi`\n- `extendProxyOptions`\n- `registerTableFormatters`\n- `setupAdminTableCore`\n- `getLocaleMessages`\n- `getGlobalTableFormatterRegistry`\n- 关键类型：`AdminTableApi`、`AdminTableOptions`、`AdminTableProps`、`ToolbarConfig`、`ProxyConfig`、`ColumnCustomSnapshot` 等\n\n## 快速开始\n\n### 1) 入口初始化\n\n```ts\nimport { setupAdminTableVue } from '@admin-core/table-vue';\n\nsetupAdminTableVue({\n  bindPreferences: true,\n  locale: 'zh-CN',\n});\n```\n\n### 2) 页面使用\n\n```vue\n<script setup lang=\"ts\">\nimport { useAdminTable } from '@admin-core/table-vue';\n\nconst [Table, tableApi] = useAdminTable({\n  tableTitle: '基础列表',\n  tableTitleHelp: '支持排序、筛选、列设置',\n  formOptions: {\n    schema: [{ component: 'input', fieldName: 'name', label: 'Name' }],\n  },\n  gridOptions: {\n    rowConfig: { keyField: 'id' },\n    seqColumn: true,\n    columns: [\n      { field: 'name', title: 'Name' },\n      { field: 'age', title: 'Age', sortable: true },\n      { field: 'role', title: 'Role', filterable: true },\n    ],\n    data: [],\n    toolbarConfig: {\n      refresh: true,\n      zoom: true,\n      custom: true,\n    },\n  },\n});\n</script>\n\n<template>\n  <Table />\n</template>\n```\n\n## `gridOptions.toolbarConfig` 能力\n\n| 字段 | 说明 |\n| --- | --- |\n| `search` | 显示/隐藏搜索区切换按钮。 |\n| `refresh` | 刷新按钮。配置 `proxyConfig` 时执行 `reload`；未配置时执行内置 loading 动画刷新。 |\n| `zoom` | 全屏切换按钮。 |\n| `custom` | 列设置按钮。 |\n| `hint` | 顶栏中间提示区（文本、位置、颜色、字号、溢出策略）。 |\n| `tools` | 自定义按钮列表（支持权限、显隐、禁用、图标/文字/类型）。 |\n| `toolsPosition` | 自定义按钮在内置图标组前后位置（`before/after/left/right`）。 |\n| `toolsSlotPosition` | `toolbar-tools` 插槽与自动按钮位置关系（`before/after/replace`）。 |\n\n`ToolbarToolConfig.permission` 支持：\n\n- `permission: ['TABLE_EDIT', 'TABLE_DELETE']`（默认 `or`）\n- `permission: { value: ['A', 'B'], mode: 'and', arg: 'code' }`\n- `permission: { value: ['admin'], arg: 'role' }`\n\n## 插槽\n\n| 插槽名 | 说明 |\n| --- | --- |\n| `table-title` | 自定义标题区域。 |\n| `toolbar-actions` | 顶栏左侧（标题右侧）区域。 |\n| `toolbar-center` | 顶栏中间区域（替换 `toolbarConfig.hint`）。 |\n| `toolbar-tools` | 顶栏右侧工具区域插槽。 |\n| `form` | 整体替换搜索表单区域。 |\n| `loading` | 自定义 loading。 |\n| `empty` | 自定义空状态。 |\n| `form-*` | 透传到内置 `AdminSearchForm` 的字段/动作插槽。 |\n\n说明：\n\n- 非保留插槽会继续透传给 `VxeGrid` 列插槽。\n\n## 选择列、序号列、操作列\n\n### 序号列（内置开关）\n\n```ts\ngridOptions: {\n  seqColumn: true,\n}\n```\n\n### 单选/多选\n\n```ts\ngridOptions: {\n  rowSelection: {\n    type: 'radio', // 'radio' | 'checkbox'\n    trigger: 'row', // 'cell' | 'row'\n    strict: true,\n    selectedRowKeys: [1],\n    onChange: (keys, rows) => console.log(keys, rows),\n  },\n}\n```\n\n### 操作列（框架内置）\n\n```ts\ngridOptions: {\n  operationColumn: {\n    width: 220,\n    tools: [\n      { code: 'view', title: '查看', type: 'info-text' },\n      { code: 'edit', title: '编辑', permission: ['TABLE_EDIT'] },\n      { code: 'delete', title: '删除', type: 'error-text', permission: ['TABLE_DELETE'] },\n    ],\n  },\n}\n```\n\n说明：\n\n- 至少有一个操作按钮可见时，才渲染操作列。\n- 点击会触发 `gridEvents.operationToolClick`，并执行按钮自身 `onClick`。\n\n## 列设置持久化与事件\n\n```ts\ngridOptions: {\n  tableId: 'users-main-table', // 建议：同一路由多个表格时用于隔离默认持久化 key\n  columnCustomPersistence: {\n    key: 'demo:table:basic',\n    scope: 'users', // 可选：不传 key 时参与默认 key 生成\n    storage: 'local', // local | session\n  },\n  toolbarConfig: { custom: true },\n},\ngridEvents: {\n  columnCustomChange: ({ action, snapshot }) => {\n    if (action === 'confirm' || action === 'reset') {\n      void saveToServer(snapshot);\n    }\n  },\n},\n```\n\n`columnCustomChange.action`：`open` / `cancel` / `confirm` / `reset`。\n\n## 统一分页事件（Vue/React 一致）\n\n```ts\ngridEvents: {\n  onPageChange: ({ currentPage, pageSize, type, source }) => {\n    console.log('page change', currentPage, pageSize, type, source);\n  },\n  onPageSizeChange: ({ pageSize }) => {\n    console.log('size change', pageSize);\n  },\n  onPaginationChange: (payload) => {\n    console.log('pagination change', payload);\n  },\n},\n```\n\n说明：\n\n- `onPageChange`：分页变化时触发（页码变化或每页条数变化）。\n- `onPageSizeChange`：仅每页条数变化时触发。\n- `onPaginationChange`：统一分页变化事件（跨端推荐使用）。\n- `gridOptions.pagerConfig.resetToFirstOnPageSizeChange`：设为 `true` 时，切换每页条数会自动回到第一页。\n- `gridOptions.pagerConfig.exportConfig`：在分页右侧显示导出图标。`current/selected` 内置导出 Excel，`all` 需要配置 `exportAll` 接口函数。\n- Vue 仍可继续使用 `gridEvents.pageChange`（vxe 原生事件）；两者可同时使用。\n\n```ts\ngridOptions: {\n  pagerConfig: {\n    enabled: true,\n    exportConfig: {\n      options: ['current', 'selected', 'all'],\n      exportAll: async (ctx) => {\n        // 调用后端导出接口（all 必须自定义）\n        await requestExportAll(ctx);\n      },\n    },\n  },\n},\n```\n\n## 分页工具栏（左/中/右）\n\n- 默认在右侧：`gridOptions.pagerConfig.position` 默认值为 `right`。\n- 可切换到左侧：`gridOptions.pagerConfig.position = 'left'`。\n- 分页工具栏与顶部工具栏同语义（自动构建按钮/图标按钮/插槽按钮）：\n  - 左侧：`pagerConfig.toolbar.leftTools` + `pager-left` 插槽\n  - 中间：`pagerConfig.toolbar.hint` 或 `pager-center` 插槽\n  - 右侧：`pagerConfig.toolbar.rightTools`（或 `tools`）+ `pager-tools` 插槽\n\n```vue\n<script setup lang=\"ts\">\nconst gridOptions = {\n  pagerConfig: {\n    // 可选: 'left' | 'right'，默认 right\n    position: 'right',\n    toolbar: {\n      leftTools: [{ title: '左侧按钮', type: 'default', onClick: () => {} }],\n      leftToolsPosition: 'before',\n      leftToolsSlotPosition: 'after',\n      hint: {\n        content: '分页中间提示',\n        align: 'center',\n        overflow: 'scroll',\n      },\n      tools: [{ icon: 'vxe-table-icon-repeat', onClick: () => {} }],\n      toolsPosition: 'before',\n      toolsSlotPosition: 'after',\n    },\n  },\n};\n</script>\n\n<AdminTable :grid-options=\"gridOptions\">\n  <template #pager-left>分页左插槽</template>\n  <template #pager-center>分页中间插槽</template>\n  <template #pager-tools>分页右插槽</template>\n</AdminTable>\n```\n\n说明：\n\n- `tools`/`toolsPosition`/`toolsSlotPosition` 是右侧区域的简写（等价于 `rightTools*`）。\n- 当 `pager-tools` 设置为 `replace` 时，右侧内置导出图标会隐藏（由插槽完全接管）。\n\n## 数据策略（单元格/行）\n\n支持对单元格、行做统一策略处理：值计算、单位拼接、样式、点击行为、条件匹配。\n\n```ts\ngridOptions: {\n  strategy: {\n    columns: {\n      score: {\n        rules: [\n          { when: { field: 'score', gte: 90 }, color: 'var(--primary)', fontWeight: 700, unit: '分' },\n          { when: { field: 'name', regex: { pattern: '^A', flags: 'i' } }, textDecoration: 'underline' },\n        ],\n      },\n    },\n    rows: [\n      { when: { field: 'score', lt: 60 }, backgroundColor: 'var(--primary-100)' },\n    ],\n  },\n}\n```\n\n正则支持：\n\n- `regex: /pattern/flags`\n- `regex: { pattern: '...', flags: 'i' }`\n- `notRegex` 同步支持\n\n## 偏好设置联动（主题 / 国际化）\n\n- `setupAdminTableVue` 默认启用 `bindPreferences: true`。\n- 语言跟随 `preferences.app.locale` 自动切换（`zh-CN/en-US`）。\n- 主题跟随偏好设置自动切换 vxe `light/dark`。\n- 若应用未接入偏好系统，可关闭：`setupAdminTableVue({ bindPreferences: false })`。\n\n## FAQ\n\n### 为什么依赖 `@admin-core/form-vue`？\n\n因为表格内置搜索区（`formOptions`）直接复用表单系统能力，包含 schema、提交/重置、`submitOnChange`、插槽桥接。\n\n### 不配置 `proxyConfig`，刷新按钮还能用吗？\n\n可以。内置刷新按钮仍会工作（触发刷新交互与事件），但不会发起远程请求；若需要真实请求，请配置 `proxyConfig`。\n\n### 如何拿到内部状态做外部控制？\n\n`useAdminTable` 返回的 `tableApi` 带 `useStore(selector)`，可订阅表格状态做外部联动。\n\n## 示例路径\n\n- `examples/vue-demo/src/views/components/table/Basic.vue`\n- `examples/vue-demo/src/views/components/table/Remote.vue`\n- `examples/vue-demo/src/views/components/table/Form.vue`\n- `examples/vue-demo/src/views/components/table/Tree.vue`\n- `examples/vue-demo/src/views/components/table/Fixed.vue`\n- `examples/vue-demo/src/views/components/table/CustomCell.vue`\n- `examples/vue-demo/src/views/components/table/EditCell.vue`\n- `examples/vue-demo/src/views/components/table/EditRow.vue`\n- `examples/vue-demo/src/views/components/table/Virtual.vue`\n- `examples/vue-demo/src/views/components/table/Slot.vue`\n- `examples/vue-demo/src/views/components/table/ElementPlusSlot.vue`\n","readmeFilename":"README.md"}