# vue-crud **Repository Path**: chadounet/vue-crud ## Basic Information - **Project Name**: vue-crud - **Description**: 一个基于 Vue 3 Composition API 的强大 CRUD 操作组合式函数,提供完整的增删改查功能,支持分页、表单验证、状态管理和生命周期钩子。 - **Primary Language**: JavaScript - **License**: MIT - **Default Branch**: master - **Homepage**: https://gitee.com/chadounet/vue-crud - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2025-07-30 - **Last Updated**: 2025-07-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # useCrud 组合式函数 一个基于 Vue 3 Composition API 的强大 CRUD 操作组合式函数,提供完整的增删改查功能,支持分页、表单验证、状态管理和生命周期钩子。 ## 特性 - 🚀 **开箱即用** - 提供完整的 CRUD 操作方法 - 📊 **分页支持** - 内置分页逻辑和状态管理 - 🔄 **状态管理** - 智能的操作状态跟踪 - 🎣 **生命周期钩子** - 丰富的钩子函数支持自定义逻辑 - 📝 **表单处理** - 集成表单验证和重置功能 - 🌳 **树形表格** - 支持树形数据的选择操作 - 💡 **TypeScript 友好** - 完整的类型定义 - 🎯 **Element Plus 集成** - 与 Element Plus 组件库深度集成 ## 基本用法 ### 1. 导入组合式函数 ```javascript // 注意:dist/index.js 建议拷贝到项目的 components/vue-crud 目录下面 import useCrud from './components/vue-crud/index.js' import CRUD from './components/vue-crud/index.js' ``` ### 2. 定义 API 方法 ```javascript const userApi = { list: (params) => api.get('/users', { params }), add: (data) => api.post('/users', data), edit: (data) => api.put(`/users/${data.id}`, data), delete: (ids) => api.delete('/users', { data: { ids } }), get: (id) => api.get(`/user/${data.id}`), export: (params) => api.get('/users/export', { params }) } ``` ### 3. 初始化 CRUD 实例 ```javascript const crud = useCrud({ title: '用户', apiService: userApi, idField: 'id', rowsField: 'list', pageField: 'page', sizeField: 'size', totalField: 'total', promptField: 'name', queryParams: reactive({ name: '', phone: '' }), form: reactive({ id: '', name: '', phone: '', email: '' }), formRef, tableRef }) ``` ## 配置选项 ### 基础配置 | 参数 | 类型 | 默认值 | 说明 | |------|------|--------|------| | `title` | `string` | `''` | 模块标题,用于动态标题生成 | | `data` | `array` | `[]` | 表格数据 | | `selections` | `array` | `[]` | 选中的数据项 | | `hooks` | `object` | `{}` | 生命周期钩子函数 | | `apiService` | `object` | - | CRUD API 方法对象 | | `props` | `object` | `{ searchVisible: true, searchFormVisible: true }` | 自定义扩展属性 | ### 字段配置 | 参数 | 类型 | 默认值 | 说明 | |------|------|--------|------| | `idField` | `string` | `'id'` | 数据项 ID 字段名 | | `rowsField` | `string` | `'rows'` | 列表数据字段名 | | `pageField` | `string` | `'page'` | 当前页码字段名 | | `sizeField` | `string` | `'size'` | 每页大小字段名 | | `totalField` | `string` | `'total'` | 总数字段名 | | `promptField` | `string` | `'id'` | 操作提示字段名 | ### 查询配置 | 参数 | 类型 | 默认值 | 说明 | |------|------|--------|------| | `queryParams` | `object` | `{}` | 查询参数对象 | | `time` | `number` | `50` | 查询等待时间(毫秒) | | `autoQuery` | `boolean` | `true` | 页面加载后自动查询 | ### 分页配置 | 参数 | 类型 | 默认值 | 说明 | |------|------|--------|------| | `page` | `number` | `1` | 当前页码 | | `size` | `number` | `10` | 分页大小 | | `total` | `number` | `0` | 数据总数 | ### 引用配置 | 参数 | 类型 | 默认值 | 说明 | |------|------|--------|------| | `form` | `object` | `{}` | 表单数据对象 | | `formRef` | `ref` | `null` | 表单组件引用 | | `tableRef` | `ref` | `null` | 表格组件引用 | ## API 方法 ### 操作方法 | 方法名 | 参数 | 说明 | |--------|------|------| | `handleRefresh()` | - | 刷新数据(重置到第一页) | | `handleClear(toQuery, useDefaultQueryParams)` | `boolean, boolean` | 清空查询条件 | | `handleQuery()` | - | 执行查询 | | `handleAdd()` | - | 新增操作 | | `handleEdit(data)` | `object` | 编辑操作 | | `handleDelete(data)` | `object\|array` | 删除操作 | | `handleExport()` | - | 导出操作 | | `handleCancel()` | - | 取消新增/编辑 | | `handleSubmit()` | - | 提交表单 | ### 分页方法 | 方法名 | 参数 | 说明 | |--------|------|------| | `handlePageChange(current)` | `number` | 当前页改变 | | `handleSizeChange(size)` | `number` | 分页大小改变 | | `handleSelectionChange(selections)` | `array` | 选中项改变 | ### 树形表格方法 | 方法名 | 参数 | 说明 | |--------|------|------| | `handleTreeSelectionAllChange(selections)` | `array` | 树形表格全选 | | `handleTreeSelectionChange(selections, row)` | `array, object` | 树形表格单选 | ### 工具方法 | 方法名 | 参数 | 说明 | |--------|------|------| | `notifySuccess(message)` | `string` | 成功提示 | | `notifyError(message)` | `string` | 错误提示 | | `notify(title, type)` | `string, string` | 通用提示 | ## 响应式属性 ### 计算属性 | 属性名 | 类型 | 说明 | |--------|------|------| | `formTitle` | `string` | 动态标题(新增/编辑/查看) | | `formStatus` | `number` | 表单操作状态(新增/编辑) | | `formVisible` | `boolean` | 表单对话框是否可见 | | `loading` | `boolean` | 是否查询中 | | `commitLoading` | `boolean` | 是否提交中 | | `deleteLoading` | `boolean` | 是否删除中 | | `exportLoading` | `boolean` | 是否导出中 | ## 生命周期钩子 ### 查询相关 - `beforeQuery` - 查询前 - `afterQuery` - 查询后 - `afterQueryError` - 查询错误 ### 新增/编辑相关 - `beforeToCU` - 进入新增/编辑前 - `afterToCU` - 进入新增/编辑后 - `beforeToAdd` - 进入新增前 - `afterToAdd` - 进入新增后 - `beforeToEdit` - 进入编辑前 - `afterToEdit` - 进入编辑后 - `beforeValidate` - 表单验证前 - `afterValidate` - 表单验证后 - `beforeSubmit` - 提交前 - `afterSubmit` - 提交后 - `afterSubmitError` - 提交错误 - `beforeCancel` - 取消前 - `afterCancel` - 取消后 ### 删除相关 - `beforeDelete` - 删除前 - `afterDelete` - 删除后 - `afterDeleteError` - 删除错误 ### 导出相关 - `beforeExport` - 导出前 - `afterExport` - 导出后 - `afterExportError` - 导出错误 ## 完整使用示例 以下是一个完整的用户管理页面示例: ```vue ``` ## 常见问题 ### Q: 如何自定义字段映射? A: 通过配置字段选项来映射后端返回的字段名: ```javascript const crud = useCrud({ idField: 'userId', // 后端返回的 ID 字段名 totalField: 'totalCount', // 后端返回的 总数 字段名 rowsField: 'dataList', // 后端返回的 列表 字段名 // ... }) ``` ### Q: 如何在操作前后执行自定义逻辑? A: 使用生命周期钩子: ```javascript const crud = useCrud({ hooks: { beforeSubmit: async () => { // 提交前的验证逻辑 const isValid = await customValidation() return isValid // 返回 false 会阻止提交 }, afterQuery: () => { // 查询后的数据处理 console.log('数据加载完成') } } }) ``` ### Q: 如何处理树形数据? A: 使用提供的树形表格方法: ```javascript // 在模板中 ``` ## 许可证 MIT License