Skip to content

useCrud

应用于 AvueCrud 组件的快速增删改查

基础用法

View Source
vue
<script setup lang="ts">
import { useCrud } from '@yusui/composables'

function getList() {
  return Promise.resolve({
    data: {
      rows: [{ name: 'demo' }],
      count: 1,
    },
  })
}
function create() {
  return Promise.resolve()
}
function update() {
  return Promise.resolve()
}
function remove() {
  return Promise.resolve()
}

const { bindVal, crudRef, getDataList } = useCrud({
  crudOption: {
    getList,
    create,
    update,
    remove,
    dataPath: 'res.data.rows',
    totalPath: 'res.data.count',
  },
  tableOption: {
    addBtn: false,
    column: [{ label: '名称', prop: 'name' }],
  },
})
getDataList()
</script>

<template>
  <avue-crud v-bind="bindVal">
    <template #menu-left>
      <el-button type="primary" text icon="el-icon-plus" @click="crudRef?.rowAdd()">
        新增
      </el-button>
    </template>
  </avue-crud>
</template>

UseCrudOptions / CrudState

名称类型默认值说明
crudOptionObject增删改查配置,详细说明
pageOptionObject分页配置,详细说明
sortOptionObject{}排序配置,可选{['descs'|'ascs']:[field]}
tableLoadingBooleanfalse数据加载状态
tableOptionObject{}表格配置项
tableDataArray[]数据列表
dataSelectionsArray[]已选择数据列表
searchFormObject{}搜索条件
queryFormObject{}固定查询条件,不会被清空重置
formDataObject{}表单数据
formTypeString弹窗表单类型
defaultsObject{}修改配置
mockDataArray[]模拟数据
mockCacheString""将假数据存在缓存中使用的 key
getDataListFunction获取数据列表方法,传入则覆盖内部实现
handleSaveFunction数据添加方法,传入则覆盖内部实现
handleUpdateFunction数据更新方法,传入则覆盖内部实现
handleDelFunction删除行方法,传入则覆盖内部实现
batchDelFunction批量删除方法,传入则覆盖内部实现
searchChangeFunction搜索回调,传入则覆盖内部实现
searchResetFunction搜索重置回调,传入则覆盖内部实现
selectionChangeFunction多选回调,传入则覆盖内部实现
pageSizeChangeFunction切换每页条数回调,传入则覆盖内部实现
pageCurrentChangeFunction切换当前页回调,传入则覆盖内部实现
sortChangeFunction切换排序回调,传入则覆盖内部实现
beforeOpenFunction打开表单弹窗前,传入则覆盖内部实现
beforeCloseFunction关闭表单弹窗前,传入则覆盖内部实现

CrudOption

名称类型默认值说明
rowKeyStringtableOption.rowKey??"id"行键值(id/_id/uuid/...)
getListFunction获取模拟数据获取数据列表方法
createFunction新增模拟数据添加数据方法
updateFunction更新模拟数据编辑数据方法
removeFunction删除模拟数据删除单条数据方法
dataPathString"res.data.records"接口返回数据的属性路径
totalPathString"res.data.total"接口返回总数的属性路径
currKeyString"current"当前页 key
sizeKeyString"size"每页条数 key
isPageBooleantrue是否携带分页参数
isSortBooleantrue是否携带排序参数
delConfirmBooleantrue删除前是否提示确认
clearSelectionBooleantrue获取数据后是否清除选择
saveSuccessMsgString"保存成功"新增成功提示
updateSuccessMsgString"保存成功"编辑成功提示
delSuccessMsgString"删除成功"删除成功提示

PageOption

名称类型默认值说明
totalNumber0总条数
currentPageNumber1当前页数
pageSizeNumber10每页显示条数

Returns

名称类型使用说明
crudRefRef<AvueCrudInstance>crudRef.value.rowEdit(row)crudRef.value 等同于 vm.$refs.crudRef
crudStateReactive<CrudState>crudState.tableData=[]crudState
crudStateRefsToRefs<CrudState>const {formData} = crudStateRefstoRefs(crudState)
bindValComputed<avue-crud v-bind="bindVal">使用 v-bind 绑定的值
getDataListFunctiongetDataList()获取数据列表方法,可被 options 中同名函数覆盖
handleSaveFunctionhandleSave(row)数据添加方法,可被 options 中同名函数覆盖
handleUpdateFunctionhandleUpdate(row)数据更新方法,可被 options 中同名函数覆盖
handleDelFunctionhandleDel(row)删除行方法,可被 options 中同名函数覆盖
batchDelFunctionhandleDel(rows)批量删除方法,可被 options 中同名函数覆盖
beforeGetListFunctionbeforeGetList((params)=>{})获取数据前
afterGetListFunctionafterGetList((res)=>{})获取数据后
beforeSaveFunctionbeforeSave((row)=>{})新增数据前,可对 row 内的数据进行修改
afterSaveFunctionafterSave((res)=>{})新增数据后
beforeUpdateFunctionbeforeUpdate((row)=>{})更新数据前,可对 row 内的数据进行修改
afterUpdateFunctionafterUpdate((res)=>{})更新数据后
beforeSubmitFunctionbeforeSubmit((row)=>{})新增/更新数据前,可对 row 内的数据进行修改
afterSubmitFunctionafterSubmit((res)=>{})新增/更新数据后
beforeDelFunctionbeforeDel((row)=>{})删除数据前
afterDelFunctionafterDel((res)=>{})删除数据后
beforeBatchDelFunctionbeforeBatchDel((selections)=>{})批量删除前
afterBatchDelFunctionafterBatchDel((res)=>{})批量删除后
beforeSearchFunctionbeforeSearch((isReset)=>{})搜索前(是否重置)
afterSearchFunctionafterSearch((isReset)=>{})搜索后(是否重置)
beforeOpenFunctionbeforeOpen((type)=>{})打开表单弹窗前(弹窗表单类型)
afterOpenFunctionafterOpen((type)=>{})打开表单弹窗后(弹窗表单类型)
beforeCloseFunctionbeforeClose((type)=>{})关闭表单弹窗前(弹窗表单类型)
afterCloseFunctionafterClose((type)=>{})关闭表单弹窗后(弹窗表单类型)

Type Definitions

ts
import type { AvueCrudDefaults, AvueCrudOption, AvueCrudProps, FormType, PageOption } from '@smallwei/avue'
import type { EmitterAsync } from '@yusui/utils'

export interface CrudOption<T, P> {
  /** 行键值(id/_id/uuid/...) */
  rowKey: string
  /** 获取数据列表方法 */
  getList: (() => Promise<any>) | ((params?: P) => Promise<any>) | ((params: P) => Promise<any>)
  /** 添加数据方法 */
  create: (form: T | any) => Promise<any>
  /** 编辑数据方法 */
  update: (form: T | any) => Promise<any>
  /** 删除单条数据方法 */
  remove: (id: any) => Promise<any>
  /** 接口返回数据的路径 */
  dataPath: string
  /** 接口返回总数的路径 */
  totalPath: string
  /** 当前页key */
  currKey: string
  /** 每页条数key */
  sizeKey: string
  /** 是否携带分页参数 */
  isPage: boolean
  /** 是否携带排序参数 */
  isSort: boolean
  /** 删除前是否提示确认 */
  delConfirm: boolean
  /** 获取数据后是否清除选择 */
  clearSelection: boolean
  /** 新增成功提示 */
  saveSuccessMsg: string
  /** 编辑成功提示 */
  updateSuccessMsg: string
  /** 删除成功提示 */
  delSuccessMsg: string
}

export interface SortOption {
  ascs?: string
  descs?: string
  order?: 'asc' | 'desc'
  prop?: string
}

export interface CrudState<T, P> {
  crudOption: CrudOption<T, P>
  pageOption: Required<PageOption>
  sortOption: SortOption
  tableLoading: boolean
  tableOption: AvueCrudOption<T>
  tableData: T[]
  dataSelections: T[]
  searchForm: P
  queryForm: any
  formData: T
  formType: FormType
  defaults: AvueCrudDefaults<T>
  mockData: T[]
  mockCache: string
}

export type Emitter<T, P> = EmitterAsync<{
  beforeGetList: P
  afterGetList: any
  beforeSave: T
  afterSave: any
  beforeUpdate: T
  afterUpdate: any
  beforeSubmit: T
  afterSubmit: any
  beforeDel: T
  afterDel: any
  beforeBatchDel: T[]
  afterBatchDel: any
  beforeSearch: P
  afterSearch: P
  beforeSearchReset: P
  afterSearchReset: P
  beforeOpen: FormType
  afterOpen: FormType
  beforeClose: FormType
  afterClose: FormType
}>

export interface UseCrudStateOptions<T, P> extends Partial<Omit<CrudState<T, P>, 'crudOption' | 'pageOption'>> {
  crudOption?: Partial<CrudOption<T, P>>
  pageOption?: PageOption
}

export interface UseCrudMethodsOptions<T, P> {
  getDataList?: () => any
  handleSave?: AvueCrudProps<T>['onRowSave']
  handleUpdate?: AvueCrudProps<T>['onRowUpdate']
  handleDel?: AvueCrudProps<T>['onRowDel']
  batchDel?: () => any
  filterRow?: (row: T) => T
  filterParams?: (params: P) => P
  searchChange?: (form: P, done: () => void) => any
  searchReset?: () => any
  selectionChange?: AvueCrudProps<T>['onSelectionChange']
  pageSizeChange?: AvueCrudProps<T>['onSizeChange']
  pageCurrentChange?: AvueCrudProps<T>['onCurrentChange']
  sortChange?: AvueCrudProps<T>['onSortChange']
  beforeOpen?: AvueCrudProps<T>['before-open']
  beforeClose?: AvueCrudProps<T>['before-close']
}

export type UseCrudOptions<T, P> = UseCrudStateOptions<T, P> & UseCrudMethodsOptions<T, P>