rafazingano / filament-kanban
将看板板添加到您的Filament页面
Requires
- php: ^8.1
- filament/filament: ^3.0
- illuminate/contracts: ^10.0|^11.0
- spatie/laravel-package-tools: ^1.15.0
Requires (Dev)
- laravel/pint: ^1.0
- nunomaduro/collision: ^7.9|^8.0
- orchestra/testbench: ^8.0|^9.0
- pestphp/pest: ^2.0
- pestphp/pest-plugin-arch: ^2.0
- pestphp/pest-plugin-laravel: ^2.0
- pestphp/pest-plugin-livewire: ^2.1
- spatie/eloquent-sortable: ^4.1
- dev-main
- 2.x-dev
- v2.9.10
- v2.9.9
- v2.9.8
- v2.9.7
- v2.9.6
- v2.9.5
- v2.9.4
- v2.9.3
- v2.9.2
- v2.9.1
- v2.9.0
- v2.8.0
- v2.7.0
- v2.6.1
- v2.6.0
- v2.5.0
- v2.4.0
- v2.3.0
- v2.2.0
- v2.1.1
- v2.1.0
- v2.0.2
- v2.0.1
- v2.0.0
- 1.x-dev
- v1.11.0
- v1.10.0
- v1.9.3
- v1.9.2
- v1.9.1
- v1.9.0
- v1.8.0
- v1.7.0
- v1.6.0
- v1.5.0
- v1.4.0
- v1.3.0
- v1.2.0
- v1.1.0
- v1.0.0
- dev-dependabot/github_actions/dependabot/fetch-metadata-2.2.0
This package is auto-updated.
Last update: 2024-09-28 15:34:17 UTC
README
轻松将看板页面添加到您的Filament面板。
安装
您可以通过composer安装此包
composer require rafazingano/filament-kanban
发布资产以确保样式正确
php artisan filament-kanban:install
开始之前
重要
您应该有一些具有status
列的Model
。此列可以称为数据库中的status
或任何其他名称。
我还假设您的模型中有一个title
列,但您可以使用name
或任何其他列来表示标题。
我建议您创建一个基于字符串的Enum
来定义您的状态。
您可以使用我们的IsKanbanStatus
特性,这样您就可以使用枚举的statuses
方法轻松地将枚举情况转换为看板。
use Rafazingano\FilamentKanban\Concerns\IsKanbanStatus; enum UserStatus: string { use IsKanbanStatus; case User = 'User'; case Admin = 'Admin'; }
我建议您将Model
上的status
属性强制转换为您创建的枚举。
提示
我还建议您在Model
上使用Spatie Eloquent Sortable包,我们将神奇地将排序功能添加到您的看板。
用法
您可以使用以下Artisan命令创建一个名为UsersKanbanBoard
的新看板
php artisan make:kanban UsersKanbanBoard
这为您的看板提供了一个良好的起点。您可以根据需要自定义看板。
您应该覆盖model
属性,以便我们可以加载您的记录。
protected static string $model = User::class;
您还应覆盖statusEnum
属性,该属性定义了您的状态。
protected static string $statusEnum = UserStatus::class;
升级指南
如果您应用中已安装1.x版本,并且想要升级到2.x版本,以下是您的清单
- 您需要覆盖
$model
和$statusEnum
,如最后一部分中所述 - 如果您已发布
kanban-record.blade.php
视图,您可以使用$record
作为Model
实例,而不是数组。 - 如果您只是覆盖
KanbanBoard
方法以执行默认行为,现在可以安全地删除它们。如果没有特殊要求,您应该能够通过覆盖0个方法完成工作 🥳
高级用法
您可以覆盖records
方法,以自定义要在板上显示的记录或项目的检索方式。
protected function records(): Collection { return User::where('role', 'admin')->get(); }
如果您不想为状态定义Enum
,或者您有检索状态的特定逻辑,您可以覆盖statuses
方法
protected function statuses(): Collection { return [ ['id' => 'user', 'title' => 'User'], ['id' => 'admin', 'title' => 'Admin'], ]; }
您还可以覆盖这些方法,以更改在拖放记录时看板的行为
onStatusChanged
定义了当记录在状态之间移动时会发生什么。onSortChanged
定义了当记录在相同状态内移动时会发生什么。
public function onStatusChanged(int $recordId, string $status, array $fromOrderedIds, array $toOrderedIds): void { User::find($recordId)->update(['status' => $status]); User::setNewOrder($toOrderedIds); } public function onSortChanged(int $recordId, string $status, array $orderedIds): void { User::setNewOrder($orderedIds); }
自定义状态枚举
如果您将IsKanbanStatus
添加到您的状态Enum
,此特性将为您的枚举添加一个静态的statuses
方法,该方法将返回枚举中定义的状态,格式正确。
如果您不希望枚举的所有情况都出现在板上,您可以覆盖此方法并返回一组情况
public static function kanbanCases(): array { return [ static::CaseOne, static::CaseThree, ]; }
IsKanbanStatus
使用您的情况的value
作为状态的title
。您还可以自定义获取标题的方式。
public function getTitle(): string { return __($this->label()); }
编辑模式
禁用模式
默认情况下启用了编辑模式,您可以通过点击记录来显示它。
如果您需要禁用编辑模式,请覆盖此属性
public bool $disableEditModal = false;
编辑模态表单架构
您可以通过覆盖此方法来定义编辑模态表单架构
protected function getEditModalFormSchema(null|int $recordId): array { return [ TextInput::make('title'), ]; }
如您所见,您可以访问正在编辑的记录的 id
,这在构建您的架构时可能很有帮助。
自定义编辑表单提交操作
您可以通过覆盖此方法来定义编辑表单提交时会发生什么
protected function editRecord($recordId, array $data, array $state): void { Model::find($recordId)->update([ 'phone' => $data['phone'] ]); }
data
数组包含表单数据,而 state
数组包含完整的记录数据。
自定义模态外观
您可以自定义模态的标题、大小以及保存和取消按钮的标签
protected string $editModalTitle = 'Edit Record'; protected string $editModalWidth = '2xl'; protected string $editModalSaveButtonLabel = 'Save'; protected string $editModalCancelButtonLabel = 'Cancel';
自定义
更改导航图标
protected static ?string $navigationIcon = 'heroicon-o-document-text';
更改用作标题的模型属性
protected static string $recordTitleAttribute = 'title';
更改用作状态的模型属性
protected static string $recordStatusAttribute = 'status';
自定义视图
您可以使用此 artisan 命令发布视图
php artisan vendor:publish --tag="filament-kanban-views"
我建议您删除您不打算自定义的文件,保留您想要更改的文件。这样,您将获得原始视图的任何可能的未来更新。
上述方法将替换应用程序中所有看板的所有视图。
或者,您可能想要更改其中一个看板的视图。您可以通过覆盖这些属性来覆盖每个视图
protected static string $view = 'filament-kanban::kanban-board'; protected static string $headerView = 'filament-kanban::kanban-header'; protected static string $recordView = 'filament-kanban::kanban-record'; protected static string $statusView = 'filament-kanban::kanban-status'; protected static string $scriptsView = 'filament-kanban::kanban-scripts';
闪烁最近更新的记录
当记录刚刚更新时,您会获得一些视觉反馈。
如果您还使用 Spatie Eloquent Sortable,您可能会同时看到所有记录都被闪烁。这是因为 Eloquent Sortable 更新所有模型当排序改变时的 order_column
。为了解决这个问题,发布它们的配置并将 ignore_timestamps
设置为 true
。
视频教程
您是视觉学习者吗?我创建了一些 YouTube 视频来帮助您开始使用这个包
警告
这些视频是用包的 1.x 版本录制的。现在使用这个包要简单得多,并且需要您编写的代码要少得多。
希望 2.x 版本足够简单,无需视频,但您仍然可以从这些视频中学习一些东西。
演示和示例
测试
composer test
变更日志
有关最近更改的更多信息,请参阅 CHANGELOG
贡献
有关详细信息,请参阅 CONTRIBUTING
安全漏洞
有关报告安全漏洞的详细信息,请参阅 我们的安全策略
TODO
- 删除已弃用的最近更新特质
- 停止将记录传递给视图进行记录点击
- 使用 filament 动作进行编辑模态
致谢
- Mo Khosh
- 所有贡献者
- 这个包的原始想法和结构大量借鉴了 David Vincent 的 filament-kanban-board
许可证
MIT 许可证(MIT)。有关更多信息,请参阅 许可证文件