艾卡沃斯 / wireui-smart-table
简单而高效、完全可配置的组件,适用于所有 CRUD 操作。一个 Laravel - Livewire 组件,可以利用 Tailwind 和 WireUI 直观地以表格(或创建/更新/删除表单)的形式展示模型数据,同时保持最小化组件配置,并保持完全可扩展、可扩展和可配置的能力。它还提供可选的内置智能表单,简化所有 CRUD 操作。
1.0.6
2024-07-26 08:27 UTC
Requires
- php: >8.1
- ext-fileinfo: *
- laravel/framework: ^10.10
- livewire/livewire: ^3.3
- spatie/laravel-permission: ^6.2
- wireui/wireui: ^1.18
Requires (Dev)
- barryvdh/laravel-debugbar: ^3.13
- phpunit/phpunit: ^10.1
README
简单而高效、完全可配置的组件,适用于所有 CRUD 操作。一个 Laravel - Livewire - WireUI 组件,可以利用 Tailwind 和 WireUI 直观地以表格(或创建/更新/删除表单)的形式展示模型数据,同时保持最小化组件配置,并保持完全可扩展、可扩展和可配置的能力。它还提供可选的内置智能表单,简化所有 CRUD 操作。
功能
- 自动检测列模型(除枚举外)
- 根据列类型使用文本、选择、数字输入等进行搜索列
- 按列升/降/空排序/分组
- 分页
- 列可见性
- 添加/编辑/删除对象表单
- 状态保存
- 上下文菜单(右键点击)
实际示例
仅通过提供模型类即可自动创建表格
<livewire:wire-ui-smart-table
table_core_db_model="WireUiSmartTable\\Models\\TestModel"
table_features_use_fillable="false"
table_columns_enums='{"test_enum":"WireUiSmartTable\\\\Enums\\\\TestEnum::cases"}'
/>
仅通过提供模型类即可自动创建表单
<livewire:wire-ui-smart-form
form_core_db_model="WireUiSmartTable\\Models\\TestModel"
form_columns_enums='{"test_enum":"WireUiSmartTable\\\\Enums\\\\TestEnum::cases"}'
/>
安装
按照以下步骤将软件包安装到您的 Laravel 项目中
不要忘记 WireUI 安装说明,请参阅 https://v1.wireui.dev/docs/get-started#installation
- composer require iakovos/wireui-smart-table
- 安装 Tailwind CSS(请参阅 https://tailwind.org.cn/docs/installation)
- npm install livewire-sortable --save-dev(请参阅 https://github.com/livewire/sortable)
- 在您的包中导入 livewire-sortable(app.js)
import 'livewire-sortable'
// 或者。
require('livewire-sortable') - 在根文档模板的 livewire 和 WireUI 脚本之后添加 @stack('wire-ui-smart-scripts')
示例用法
对于具有 1 个枚举属性的模型的最简单示例用法是
<livewire:wire-ui-smart-table
table_core_db_model="App\\Models\\User"
table_columns_enums='{"department_type":"App\\\\Enums\\\\DepartmentTypes::cases"}'
/>
或者更简洁
<livewire:wire-ui-smart-table
table_core_db_model="$mymodel"
table_columns_enums='{{ json_encode($enums) }}'
/>
可用配置
您组件所需的唯一配置是 livewire 属性 table_core_db_model 和 table_columns_enums(如果有)。智能表会自动检测模型上的所有列和关系,并显示具有列、过滤器、排序、分页、可见性和分组(以后将添加更多)的表格
所有模板都可以通过更改到所需变量模板的路径或发布模板并对其进行更改来更改。
如果您想显示某些列或进一步配置,这里列出了所有配置选项(所有选项都是 livewire 组件属性)
表格配置
必需
livewire 属性名称 | 定义 |
---|---|
table_core_db_model | 表格使用的主体模型,例如 App\Models\User |
table_columns_enums | (如果有)声明列作为枚举,path\to\a\class::cases 应返回枚举的可用情况,例如 {"User.column_name":"path\\\\to\\\\a\\\\enum\\\\class::cases"} |
可选/自动检测
livewire 属性名称 | 定义 |
---|---|
table_columns_columns | 您希望显示的列。例如 table_columns_columns='["id","name","relationName.id","relationName.some_column"]' |
table_columns_booleans | 布尔类型的列名平面数组,例如 ["column_1","relation.column_2"] |
table_columns_integers | 数值类型的列名平面数组,例如 ["column_1","relation.column_2"] |
table_columns_datetimes | 应与日期选择器过滤一起出现的列平面数组,例如 ["column_1","relation.column_2"] |
table_relations_files | 包含文件关系名称的平面数组。关系必须是HasMany类型,文件模型应至少包含以下列:name, path, size, category |
builder_filters | 用于对行进行硬过滤的函数,例如 builder_filters="App\\Http\\Controllers\\UserResourceController::applyLogicFilters" ,定义如下 function applyLogicFilters($builder):Builder 必须返回builder |
table_relations_filters | 一个关联数组,定义了为给定列下拉菜单添加过滤器的函数,例如 table_relations_filters={"broker_id":"App\\\\Http\\\\Controllers\\\\UserResourceController::applyColumnFilters"} 定义如下 function applyColumnFilters($column_name, $builder):Builder 必须返回builder |
table_features_use_fillable | 如果未定义列,则使用laravel fillable(如果为false,则从模式中找到所有列) |
table_features_search | 搜索状态变量 |
table_features_columns_visibility | 可见状态变量 |
table_features_replaces | 大多数(如果不是所有)情况下,列名不友好。智能表将自动将列名 "relationName.some_column" 转换为 "Relation Name Some Column",但以防万一还不够,您可以按所需方式声明列,例如 {"relationName.some_column":"My new column"} |
table_features_group_properties | 用于分组的列名平面数组 |
table_settings_default_datetime_format | 表格上使用的日期时间格式。默认为 'd-m-Y' |
table_settings_default_datepicker_format | 日期选择器上使用的日期时间格式。默认为 'DD-MM-YYYY' |
table_settings_enable_groups | 启用或禁用请求中的组。默认为 true |
table_settings_show_clear_filter | 显示或隐藏清除过滤器按钮。默认为 true |
table_settings_show_loading | 显示或隐藏加载旋转器。默认为 true |
table_settings_show_filters | 显示或隐藏列过滤器。默认为 true |
table_settings_enable_joined_groups | 允许或不使用多个列进行分组。默认为 false |
table_settings_save_state | 按账户/模型在数据库上持久化当前表格状态。默认为 true |
table_templates_top_toolbox | 包括实际表格上方所有顶部部分的模板及其组件 |
table_templates_top_right_buttons | 用于表格顶部右侧行操作的按钮模板 |
table_templates_header_row | 包括所有 th 头 |
table_templates_filters_style | 选择过滤器样式,对每个表格列或下拉菜单,有效值="dropdown" 或 "table",默认为 table |
table_templates_filters_row | 包含所有头过滤器的表格行,在表风格的情况下 |
table_templates_filters_integer | 整数列过滤器的模板 |
table_templates_filters_enum | 枚举列过滤器的模板 |
table_templates_filters_datetime | 日期时间列过滤器的模板 |
table_templates_filters_boolean | 布尔列过滤器的模板 |
table_templates_filters_string | 字符串列过滤器的模板 |
table_templates_filters_select_multiple | 关系过滤器的模板 |
table_templates_data_group_row | 表格组的模板 |
table_templates_data_row | 表格行的模板 |
table_templates_cell_id_checkbox | 包含选择行复选框的第一个单元格的模板 |
table_templates_cell_checkbox | 布尔单元格的模板 |
table_templates_cell_array | 包含多个值的单元格模板,例如 m2m 关系 |
table_templates_cell_string | 字符串单元格的模板 |
table_templates_context_menu | 当右键单击行时用作上下文菜单的按钮模板 |
表单配置
必需
livewire 属性名称 | 定义 |
---|---|
form_core_db_model | 表格使用的主体模型,例如 App\Models\User |
form_columns_enums | (如果有)声明列作为枚举,path\to\a\class::cases 应返回枚举的可用情况,例如 {"User.column_name":"path\\\\to\\\\a\\\\enum\\\\class::cases"} |
可选/自动检测
livewire 属性名称 | 定义 |
---|---|
form_features_replaces | 大多数(如果不是所有)情况下,列名不友好。智能表将自动将列名 "relationName.some_column" 转换为 "Relation Name Some Column",但以防万一还不够,您可以按所需方式声明列,例如 {"relationName.some_column":"My new column"} |
form_features_use_fillable | 使用模型可填充字段,否则从模式检测列 |
表单列列 | 您希望显示的列。例如 table_columns_columns='["id","name","relationName.id","relationName.some_column"]' |
表单列布尔值 | 布尔类型的列名平面数组,例如 ["column_1","relation.column_2"] |
表单列整数 | 数值类型的列名平面数组,例如 ["column_1","relation.column_2"] |
表单列日期时间 | 应显示为日期选择器的列的平面数组 |
表单列文本 | 应显示为文本区域的列的平面数组 |
表单关系文件 | 包含文件关系名称的平面数组。关系必须是HasMany类型,文件模型应至少包含以下列:name, path, size, category |
表单默认列跨度 | 要使用的网格列数默认为4 |
表单列跨度 | 每个属性的列名=>网格列跨度的关联数组,默认为1 |
表单列隐藏 | 要隐藏的列名的平面数组 |
表单关系隐藏 | 要隐藏的关系的平面数组 |
表单枚举选项 | 包含枚举值的数组数组的关联数组(如果已定义表单列枚举则不需要) |
表单属性 | 在自动检测或json反序列化后由组件使用的列 |
表单设置布局类型 | 表单布局类型默认为"单",但将在不久的将来支持"选项卡"布局 |
表单创建规则 | 创建新项目时使用的验证规则 |
表单更新规则 | 编辑项目时使用的验证规则 |
表单创建事件 | 在创建对象之前应调用的函数,例如 form_events_creating="App\\Livewire\\Calendar::creatingNewChecklist" 必须返回项目本身 |
表单创建后事件 | 创建对象后应调用的函数 必须返回项目本身 |
表单更新事件 | 在更新对象之前应调用的函数 必须返回项目本身 |
表单更新后事件 | 更新对象后应调用的函数 必须返回项目本身 |
表单删除事件 | 在删除对象之前应调用的函数 |
表单删除后事件 | 删除对象后应调用的函数 |
模板布局单新增 | 用于添加表单的模板 |
模板布局单编辑 | 用于编辑表单的模板 |
模板关系文件 | 用于文件关系的模板 |
模板属性布尔值 | 用于布尔属性的模板 |
模板属性日期时间 | 用于日期时间属性的模板 |
模板属性枚举 | 用于枚举属性的模板 |
模板属性整数 | 用于整数属性的模板 |
模板属性多选 | 用于多对多关系属性的模板 |
模板属性单选 | 用于单选关系和枚举属性的模板 |
事件和监听器
1. 表格
事件名称 | 定义 |
---|---|
refresh | 刷新表格 |
setSelectedIds(array $ids) | 在表格上设置选定的/检查的id,例如 [5=>true, 17=>true] |
rowClicked($id) | 表示已点击具有 $id 的行 |
2. 表单
事件名称 | 定义 |
---|---|
openSmartForm | 显示表单 |
rowClicked($id) | 表示已点击具有 $id 的行 |
deleteItem | 删除由 rowClicked 定义的id的项目 |