Skip to content

useCrudActions

管理动作集合(toolbar / row / batch),提供注册、注销和按区域过滤的能力。

基本用法

ts
import { presetActions, useCrudActions } from '@uozi/vito-core'

const { actions, getByArea, register, unregister } = useCrudActions<MyRow>({
  actions: [
    presetActions.create({ onClick: openCreate }),
    presetActions.edit({ onClick: openEdit }),
    presetActions.delete({ adapter, getId: row => row.id }),
  ],
})

// 按区域获取
const toolbarActions = getByArea('toolbar') // [create]
const rowActions = getByArea('row') // [edit, delete]

Options

参数类型默认值说明
actionsCrudAction<Row>[][]初始 action 列表

返回值

属性/方法类型说明
actionsRef<CrudAction<Row>[]>所有已注册的 actions
getByArea(area: 'toolbar' | 'row' | 'batch') => CrudAction[]按区域过滤并排序
register(action: CrudAction<Row>) => void注册一个 action(同 id 则覆盖)
unregister(id: string) => void注销一个 action

presetActions 工厂

@uozi/vito-core 提供 5 个预设 action 工厂:

presetActions.create

参数类型说明
labelstring按钮文本(默认 '新增'
onClick() => void点击回调

返回:area: 'toolbar', order: 0, type: 'primary'

presetActions.edit

参数类型说明
labelstring按钮文本(默认 '编辑'
onClick(row: Row) => void点击回调,接收当前行

返回:area: 'row', order: 0, type: 'default'

presetActions.delete

参数类型说明
labelstring按钮文本(默认 '删除'
adapterCrudAdapter<Row>用于调用 adapter.remove()
getId(row: Row) => string | number提取行 ID(默认 row.id
confirmboolean | string确认配置(默认 '确定要删除此记录吗?'
onSuccess() => void删除成功回调
onError(error: unknown) => void删除失败回调

返回:area: 'row', order: 10, type: 'error'。删除后自动调用 ctx.refresh()

presetActions.batchDelete

参数类型说明
labelstring按钮文本(默认 '批量删除'
adapterCrudAdapter<Row>用于调用 adapter.remove()
getId(row: Row) => string | number提取行 ID
confirmboolean | string确认配置
onSuccess() => void成功回调
onError(error: unknown) => void失败回调

返回:area: 'batch', order: 0, type: 'error'visible 条件为 selectedIds.length > 0

presetActions.export

参数类型说明
labelstring按钮文本(默认 '导出'
adapterCrudAdapter<Row>用于调用 adapter.export()
filenamestring下载文件名
handleExport(result, filename?) => voidUI 层提供的下载处理函数
onSuccess() => void成功回调
onError(error: unknown) => void失败回调

返回:area: 'toolbar', order: 100visible 条件为 adapter.export 存在。

完整示例

ts
import type { CrudAdapter } from '@uozi/vito-core'
import { presetActions, useCrudActions } from '@uozi/vito-core'

export interface Row {
  id: number
  name: string
}

export function createActions(adapter: CrudAdapter<Row>) {
  const { actions, getByArea, register } = useCrudActions<Row>({
    actions: [
      presetActions.create({
        onClick: () => {
          // 打开创建表单(由你的 UI 决定)
        },
      }),
      presetActions.export({
        adapter,
        handleExport: (result) => {
          // UI 层负责下载(例如 @uozi/vito-naive-ui 的 handleExportResult)
          console.log(result)
        },
      }),
    ],
  })

  register({
    id: 'custom',
    label: '自定义动作',
    area: 'toolbar',
    order: 50,
    confirm: '确定要执行吗?',
    onClick: async (ctx) => {
      console.log(ctx.selectedIds, ctx.query)
      await ctx.refresh()
    },
  })

  return {
    actions,
    getToolbarActions: () => getByArea('toolbar'),
    getRowActions: () => getByArea('row'),
    getBatchActions: () => getByArea('batch'),
  }
}

详见 自定义 Actions

Made with VitePress