ai-crud-page.md 3.5 KB

AiCrudPage CRUD 页面组件

完整的 CRUD 页面解决方案,集成搜索、表格、新增、编辑、删除、导入导出功能。

基础用法

<template>
  <AiCrudPage
    :api="/api/user"
    :columns="columns"
    :search-schema="searchSchema"
    :edit-schema="editSchema"
    :api-config="apiConfig"
  />
</template>

<script setup>
const columns = [
  { prop: 'username', label: '用户名' },
  { prop: 'nickname', label: '昵称' },
  { prop: 'status', label: '状态', slot: 'status' }
]

const searchSchema = [
  { field: 'username', label: '用户名', type: 'input' },
  { field: 'status', label: '状态', type: 'select', options: [...] }
]

const editSchema = [
  { field: 'username', label: '用户名', type: 'input', required: true },
  { field: 'nickname', label: '昵称', type: 'input' },
  { field: 'status', label: '状态', type: 'select', options: [...] }
]

// API 配置(可选,默认使用 RESTful 风格)
const apiConfig = {
  list: 'get@/api/user/list',      // 列表接口
  add: 'post@/api/user',           // 新增接口
  update: 'put@/api/user',         // 更新接口
  delete: 'delete@/api/user'       // 删除接口
}
</script>

Props

属性 类型 默认值 说明
api String - 基础 API 地址
apiConfig Object {} API 配置
columns Array [] 表格列配置
searchSchema Array [] 搜索表单配置
editSchema Array [] 编辑表单配置
rowKey String 'id' 主键字段
showSearch Boolean true 显示搜索
showPagination Boolean true 显示分页
hideAdd Boolean false 隐藏新增按钮
hideToolbar Boolean false 隐藏工具栏
modalType String 'modal' 弹窗类型:modal/drawer
modalWidth String '600px' 弹窗宽度
showImport Boolean false 显示导入按钮
showExport Boolean false 显示导出按钮

API 配置格式

const apiConfig = {
  list: 'get@/api/user/list',       // get/post 请求列表
  add: 'post@/api/user',            // 新增
  create: 'post@/api/user/create',  // 新增(备选)
  update: 'put@/api/user',          // 更新
  delete: 'delete@/api/user',       // 删除
  detail: 'get@/api/user/detail'    // 详情
}

钩子函数

<AiCrudPage
  :before-search="beforeSearch"
  :before-submit="beforeSubmit"
  :before-render-list="beforeRenderList"
  :before-render-form="beforeRenderForm"
/>
钩子 参数 说明
beforeSearch params 搜索前处理参数
beforeSubmit data 提交前处理数据
beforeRenderList list 渲染列表前处理数据
beforeRenderForm row 渲染表单前处理数据
beforeDelete rows 删除前确认

事件

事件 参数 说明
load-list-success { list, total } 列表加载成功
submit-success { data, response } 提交成功
selection-change { keys, rows } 选中变化
modal-open { status, row } 弹窗打开
modal-close - 弹窗关闭

插槽

<AiCrudPage>
  <!-- 工具栏 -->
  <template #toolbar-start>
    <n-button>自定义按钮</n-button>
  </template>
  
  <!-- 表格列插槽 -->
  <template #table-status="{ row }">
    <DictTag dict-type="status" :value="row.status" />
  </template>
  
  <!-- 表单插槽 -->
  <template #form-customField="{ field, value }">
    <custom-input v-model:value="formData.customField" />
  </template>
</AiCrudPage>