From fbf0cebf4bf010dac4dd34eaf1f218bc85d39edb Mon Sep 17 00:00:00 2001 From: layhuts <45724118+LayHuts@users.noreply.github.com> Date: Mon, 27 Jul 2026 22:36:04 +0800 Subject: [PATCH] =?UTF-8?q?style:=20=E4=BC=98=E5=8C=96=20vxe-table=20?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B=E7=BB=84=E7=BB=87=E7=BB=93=E6=9E=84=EF=BC=8C?= =?UTF-8?q?=E5=B0=86=20viewed-row=20=E5=8A=9F=E8=83=BD=E5=9F=9F=E7=9B=B8?= =?UTF-8?q?=E5=85=B3=E7=B1=BB=E5=9E=8B=E8=BF=9B=E8=A1=8C=E6=A8=A1=E5=9D=97?= =?UTF-8?q?=E5=8C=96=E6=8B=86=E5=88=86=EF=BC=8C=E7=94=B1=E5=85=A8=E5=B1=80?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B=E5=A3=B0=E6=98=8E=E8=B0=83=E6=95=B4=E4=B8=BA?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E7=9B=AE=E5=BD=95=E5=86=85=E8=81=9A=E7=AE=A1?= =?UTF-8?q?=E7=90=86=EF=BC=8C=E9=81=BF=E5=85=8D=E5=85=AC=E5=85=B1=20types?= =?UTF-8?q?=20=E6=96=87=E4=BB=B6=E6=8C=81=E7=BB=AD=E8=86=A8=E8=83=80?= =?UTF-8?q?=E3=80=82=20(#8204)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/effects/plugins/src/vxe-table/api.ts | 2 +- .../effects/plugins/src/vxe-table/types.ts | 83 +----------------- .../plugins/src/vxe-table/use-vxe-grid.vue | 2 +- .../plugins/src/vxe-table/viewed-row/index.ts | 8 ++ .../plugins/src/vxe-table/viewed-row/types.ts | 84 +++++++++++++++++++ .../{ => viewed-row}/use-viewed-row.ts | 0 6 files changed, 95 insertions(+), 84 deletions(-) create mode 100644 packages/effects/plugins/src/vxe-table/viewed-row/index.ts create mode 100644 packages/effects/plugins/src/vxe-table/viewed-row/types.ts rename packages/effects/plugins/src/vxe-table/{ => viewed-row}/use-viewed-row.ts (100%) diff --git a/packages/effects/plugins/src/vxe-table/api.ts b/packages/effects/plugins/src/vxe-table/api.ts index f440284e..6f9bf7ff 100644 --- a/packages/effects/plugins/src/vxe-table/api.ts +++ b/packages/effects/plugins/src/vxe-table/api.ts @@ -7,7 +7,7 @@ import type { } from '@vben-core/form-ui'; import type { VxeGridProps } from './types'; -import type { ViewedRowHelper } from './use-viewed-row'; +import type { ViewedRowHelper } from './viewed-row'; import { toRaw } from 'vue'; diff --git a/packages/effects/plugins/src/vxe-table/types.ts b/packages/effects/plugins/src/vxe-table/types.ts index 8b75eb62..f6fd81e4 100644 --- a/packages/effects/plugins/src/vxe-table/types.ts +++ b/packages/effects/plugins/src/vxe-table/types.ts @@ -2,7 +2,6 @@ import type { VxeGridListeners, VxeGridPropTypes, VxeGridProps as VxeTableGridProps, - VxeTablePropTypes, VxeUIExport, } from 'vxe-table'; @@ -17,6 +16,7 @@ import type { } from '@vben-core/form-ui'; import type { VxeGridApi } from './api'; +import type { ViewedRowOptions } from './viewed-row'; import { useVbenForm } from '@vben-core/form-ui'; @@ -43,87 +43,6 @@ export interface SeparatorOptions { backgroundColor?: string; } -/** - * 自定义存储适配器接口 - * 用户可接入任意后端(API、IndexedDB wrapper、第三方库等) - */ -export interface ViewedRowStorageAdapter { - /** 读取所有已查看的 key 列表 */ - getKeys(): Promise>; - - /** 移除所有已查看数据 */ - removeKeys(): Promise; - - /** 持久化已查看的 key 列表 */ - setKeys(keys: Array): Promise; -} - -/** - * 已读行持久化 — 公共基础字段 - */ -interface ViewedRowPersistBase { - /** 持久化数据的存活时间(毫秒) */ - ttl?: number; - /** 最大缓存数量,超出时淘汰最早标记的 key(FIFO),默认 100 */ - maxSize?: number; -} - -/** - * 已读行持久化配置(按 type 区分的联合类型) - * - * - 'memory' → 仅内存,不持久化 - * - 'localStorage' → 使用 localStorage 整体存储,key 必传 - * - 'sessionStorage' → 使用 sessionStorage 整体存储,key 必传 - * - 'indexedDB' → 使用 IndexedDB 单条存储,key 必传 - * - 'custom' → 用户自定义存储适配器,storage 必传 - */ -export type ViewedRowPersistOptions = - | ({ - /** IndexedDB 数据库名称,默认 'viewed-table-db' */ - dbName?: string; - /** IndexedDB 数据库版本,默认 1 */ - dbVersion?: number; - /** 存储 key / prefix(必传) */ - key: string; - /** IndexedDB 对象存储名称,默认 'viewed-table-row' */ - storeName?: string; - type: 'indexedDB'; - } & ViewedRowPersistBase) - | ({ - /** 存储 key(必传) */ - key: string; - type: 'localStorage' | 'sessionStorage'; - } & ViewedRowPersistBase) - | ({ - /** 自定义存储适配器(必传) */ - storage: ViewedRowStorageAdapter; - type: 'custom'; - } & ViewedRowPersistBase) - | (ViewedRowPersistBase & { - type: 'memory'; - }); - -/** - * 已查看row设置 - */ -export interface ViewedRowOptions { - /** 点击 CellOperation 中匹配的 code 时,自动将该行标记为已读 */ - actionCodes?: string | string[]; - /** 行唯一标识字段,默认取 gridOptions.rowConfig.keyField,最终兜底 'id' */ - keyField?: string; - /** 已查看的行key列表 */ - viewedKeys?: Array | Ref>; - /** - * 持久化配置 - * - 传 string:使用内置 localStorage,值为 storage key(向后兼容) - * - 传 object:高级配置 - * - 不传:不持久化(等同于 memory) - */ - persist?: string | ViewedRowPersistOptions; - rowClassName?: VxeTablePropTypes.RowClassName; - rowStyle?: VxeTablePropTypes.RowStyle; -} - export interface VxeGridProps< T extends Record = any, D extends BaseFormComponentType = BaseFormComponentType, diff --git a/packages/effects/plugins/src/vxe-table/use-vxe-grid.vue b/packages/effects/plugins/src/vxe-table/use-vxe-grid.vue index 5291568f..ae671258 100644 --- a/packages/effects/plugins/src/vxe-table/use-vxe-grid.vue +++ b/packages/effects/plugins/src/vxe-table/use-vxe-grid.vue @@ -44,7 +44,7 @@ import { VxeGrid, VxeUI } from 'vxe-table'; import { extendProxyOptions } from './extends'; import { useTableForm } from './init'; -import { applyViewedRowOptions, useViewedRow } from './use-viewed-row'; +import { applyViewedRowOptions, useViewedRow } from './viewed-row'; import 'vxe-table/styles/cssvar.scss'; import 'vxe-pc-ui/styles/cssvar.scss'; diff --git a/packages/effects/plugins/src/vxe-table/viewed-row/index.ts b/packages/effects/plugins/src/vxe-table/viewed-row/index.ts new file mode 100644 index 00000000..76bf91e0 --- /dev/null +++ b/packages/effects/plugins/src/vxe-table/viewed-row/index.ts @@ -0,0 +1,8 @@ +export type { + ViewedRowOptions, + ViewedRowPersistOptions, + ViewedRowStorageAdapter, +} from './types'; + +export { applyViewedRowOptions, useViewedRow } from './use-viewed-row'; +export type { ViewedRowHelper } from './use-viewed-row'; diff --git a/packages/effects/plugins/src/vxe-table/viewed-row/types.ts b/packages/effects/plugins/src/vxe-table/viewed-row/types.ts new file mode 100644 index 00000000..c82dfe8c --- /dev/null +++ b/packages/effects/plugins/src/vxe-table/viewed-row/types.ts @@ -0,0 +1,84 @@ +import type { VxeTablePropTypes } from 'vxe-table'; + +import type { Ref } from 'vue'; + +/** + * 自定义存储适配器接口 + * 用户可接入任意后端(API、IndexedDB wrapper、第三方库等) + */ +export interface ViewedRowStorageAdapter { + /** 读取所有已查看的 key 列表 */ + getKeys(): Promise>; + + /** 移除所有已查看数据 */ + removeKeys(): Promise; + + /** 持久化已查看的 key 列表 */ + setKeys(keys: Array): Promise; +} + +/** + * 已读行持久化 — 公共基础字段 + */ +interface ViewedRowPersistBase { + /** 持久化数据的存活时间(毫秒) */ + ttl?: number; + /** 最大缓存数量,超出时淘汰最早标记的 key(FIFO),默认 100 */ + maxSize?: number; +} + +/** + * 已读行持久化配置(按 type 区分的联合类型) + * + * - 'memory' → 仅内存,不持久化 + * - 'localStorage' → 使用 localStorage 整体存储,key 必传 + * - 'sessionStorage' → 使用 sessionStorage 整体存储,key 必传 + * - 'indexedDB' → 使用 IndexedDB 单条存储,key 必传 + * - 'custom' → 用户自定义存储适配器,storage 必传 + */ +export type ViewedRowPersistOptions = + | ({ + /** IndexedDB 数据库名称,默认 'viewed-table-db' */ + dbName?: string; + /** IndexedDB 数据库版本,默认 1 */ + dbVersion?: number; + /** 存储 key / prefix(必传) */ + key: string; + /** IndexedDB 对象存储名称,默认 'viewed-table-row' */ + storeName?: string; + type: 'indexedDB'; + } & ViewedRowPersistBase) + | ({ + /** 存储 key(必传) */ + key: string; + type: 'localStorage' | 'sessionStorage'; + } & ViewedRowPersistBase) + | ({ + /** 自定义存储适配器(必传) */ + storage: ViewedRowStorageAdapter; + type: 'custom'; + } & ViewedRowPersistBase) + | (ViewedRowPersistBase & { + type: 'memory'; + }); + +/** + * 已查看row设置 + */ +export interface ViewedRowOptions { + /** 点击 CellOperation 中匹配的 code 时,自动将该行标记为已读 */ + actionCodes?: string | string[]; + /** 行唯一标识字段,默认取 gridOptions.rowConfig.keyField,最终兜底 'id' */ + keyField?: string; + /** 已查看的行key列表 */ + viewedKeys?: Array | Ref>; + /** + * 持久化配置 + * - 传 string:使用内置 localStorage,值为 storage key(向后兼容) + * - 传 object:高级配置 + * - 不传:不持久化(等同于 memory) + */ + persist?: string | ViewedRowPersistOptions; + rowClassName?: VxeTablePropTypes.RowClassName; + rowStyle?: VxeTablePropTypes.RowStyle; +} diff --git a/packages/effects/plugins/src/vxe-table/use-viewed-row.ts b/packages/effects/plugins/src/vxe-table/viewed-row/use-viewed-row.ts similarity index 100% rename from packages/effects/plugins/src/vxe-table/use-viewed-row.ts rename to packages/effects/plugins/src/vxe-table/viewed-row/use-viewed-row.ts