joshua060198 / nova-editable-status-card
Laravel Nova的可编辑状态卡片
1.0.6
2020-12-26 08:11 UTC
Requires
- php: >=7.1.0
README
此包允许你在资源详情页上添加状态卡片,并且可以直接在卡片上编辑状态。
警告
从v0.0.9可能存在重大更改。有关如何迁移到v1的更多信息,请参阅迁移说明。
安装
此包利用bensampo/laravel-enum包将状态数据存储为枚举类。因此,请首先查看那里的安装说明。
之后,你可以通过composer安装此包
composer require joshua060198/nova-editable-status-card
用法(示例)
// app/Nova/Order.php use Joshua060198\EditableStatusCard\EditableStatusCard; class Order extends Resource { ... public function fields(Request $request) { return [ EditableStatusCard::make( MyEnumClass::class, $this->order_status_column 'Order Status', 'order_status_column', ), // with extra customization EditableStatusCard::make( MyEnumClass::class, $this->getStatusValue() 'Other Status', 'my_other_status_colum', ) // with icon ->withIcon('https://icon.com/my-icon.png') // with sizing utility ->cardSize('w-1/3') ->titleSize('text-2xl') ->statusSize('text-lg') ->iconSize('50px'), // with edit permission (e.g using spatie/laravel-permission) EditableStatusCard::make( MyEnumClass::class, $this->getStatusValue() 'Other Status', 'my_other_status_colum', ) ->canEdit(function() use($request) { return $request->user()->can('edit status card'); }) ] } ... }
背景色和文字色
你必须在你的Enum
类中使用EditableStatus
特质,并重写getMappedBackgroundColor()
和'getMappedTextColor()`方法。
<?php namespace App\Enums; use BenSampo\Enum\Enum; use Joshua060198\EditableStatusCard\EditableStatus; final class OrderDetailStatus extends Enum { use EditableStatus; const Declined = 0; const WatitingForApproval = 1; const Accepted = 2; public static function getMappedBackgroundColor() { return [ 'Declined' => 'black', 'WatitingForApproval' => '#2fbb21', 'Accepted' => 'rgba(230,132,240,0.2)', ]; } public static function getMappedTextColor() { return [ 'Declined' => 'rgb(0,0,0)', 'WatitingForApproval' => 'whitesmoke', 'Accepted' => '#fff', ]; } }
权限(可选)
如果你想限制编辑功能,可以使用接收布尔值或稍后评估的函数的canEdit()
方法。
// app/Nova/Order.php use Joshua060198\EditableStatusCard\EditableStatusCard; class Order extends Resource { ... public function fields(Request $request) { return [ EditableStatusCard::make( MyEnumClass::class, $this->getStatusValue() 'Other Status', 'my_other_status_colum', ) ->canEdit(function() use($request) { return $request->user()->can('edit status card'); }), // or to disable editing EditableStatusCard::make( MyEnumClass::class, $this->getStatusValue() 'Other Status', 'my_other_status_colum', ) ->canEdit(false) ] } ... }
构造函数
此组件有两个必填参数和两个可选参数。
-
$class
(必填)包含状态数据的枚举类。
-
$value
(必填)要显示的当前值
-
$title
(可选,默认 = '状态')卡片的标题
-
$attribute
(可选,默认 = null)存储已编辑状态值的列名。
方法
compact()
卡片内容将使用更少的间距。
示例
// app/Nova/Order.php use Joshua060198\EditableStatusCard\EditableStatusCard; class Order extends Resource { ... public function fields(Request $request) { return [ EditableStatusCard::make(...) ->compact() ] } ... }
withIcon($icon)
为相应的卡片设置图标。
参数
- $icon = 图标的URL或完整路径。
示例
// app/Nova/Order.php use Joshua060198\EditableStatusCard\EditableStatusCard; class Order extends Resource { ... public function fields(Request $request) { return [ EditableStatusCard::make(...) ->dataFromArray('order') ->withIcon('https://myicon.com/icon.png') ] } ... }
canEdit($callback)
设置此特定卡片编辑能力的权限。
参数
- $callback = 确定编辑按钮(及其功能)可见性的布尔值或函数。
示例
// app/Nova/Order.php use Joshua060198\EditableStatusCard\EditableStatusCard; class Order extends Resource { ... public function fields(Request $request) { return [ EditableStatusCard::make(...) ->canEdit(false), // or EditableStatusCard::make(...) ->canEdit(function () use($request) { return $request->user()->id == 1; }) ] } ... }
cardSize($class)
设置卡片大小(卡片的宽度)。
参数
- $class = 用于确定宽度的类名。您可以使用tailwind.css类或创建自己的类。
示例
// app/Nova/Order.php use Joshua060198\EditableStatusCard\EditableStatusCard; class Order extends Resource { ... public function fields(Request $request) { return [ EditableStatusCard::make(...) ->cardSize('w-1/3') // or using your own EditableStatusCard::make(...) ->cardSize('my-custom-width') ] } ... }
titleSize($class)
设置标题大小(横线上的标题)。
参数
- $class = 用于确定标题大小的类名。您可以使用tailwind.css类或创建自己的类。
示例
// app/Nova/Order.php use Joshua060198\EditableStatusCard\EditableStatusCard; class Order extends Resource { ... public function fields(Request $request) { return [ EditableStatusCard::make(...) ->titleSize('text-lg') // or using your own EditableStatusCard::make(...) ->titleSize('my-custom-text-size') ] } ... }
statusSize($class)
设置状态大小(横线下的状态)。
参数
- $class = 用于确定状态大小的类名。您可以使用tailwind.css类或创建自己的类。
示例
// app/Nova/Order.php use Joshua060198\EditableStatusCard\EditableStatusCard; class Order extends Resource { ... public function fields(Request $request) { return [ EditableStatusCard::make(...) ->statusSize('text-sm') // or using your own EditableStatusCard::make(...) ->statusSize('my-custom-status-size') ] } ... }
editFieldSize($class)
设置编辑字段大小。
参数
- $class = 用于确定宽度的类名。您可以使用tailwind.css类或创建自己的类。
示例
// app/Nova/Order.php use Joshua060198\EditableStatusCard\EditableStatusCard; class Order extends Resource { ... public function fields(Request $request) { return [ EditableStatusCard::make(...) ->editFieldSize('w-1/3') // or using your own EditableStatusCard::make(...) ->editFieldSize('my-custom-width') ] } ... }
iconSize($class)
设置编辑图标大小(宽度 = 高度)。
参数
- $class = 用于确定图标宽度和高度的类名。您可以使用tailwind.css类或创建自己的类。
示例
// app/Nova/Order.php use Joshua060198\EditableStatusCard\EditableStatusCard; class Order extends Resource { ... public function fields(Request $request) { return [ EditableStatusCard::make(...) ->iconSize('w-32') // or using your own EditableStatusCard::make(...) ->iconSize('my-custom-icon-size') ] } ... }
saveButtonSize($class)
设置编辑保存按钮文本大小。
参数
- $class = 用于确定保存按钮的类名。您可以使用tailwind.css类或创建自己的类。
示例
// app/Nova/Order.php use Joshua060198\EditableStatusCard\EditableStatusCard; class Order extends Resource { ... public function fields(Request $request) { return [ EditableStatusCard::make(...) ->saveButtonSize('text-lg') // or using your own EditableStatusCard::make(...) ->saveButtonSize('my-custom-save-button') ] } ... }
choicesSize($class)
设置选择按钮大小。
参数
- $class = 用于确定选择按钮大小的类名。**注意:不要使用类名**。
示例
// app/Nova/Order.php use Joshua060198\EditableStatusCard\EditableStatusCard; class Order extends Resource { ... public function fields(Request $request) { return [ EditableStatusCard::make(...) ->choicesSize('200px') // or EditableStatusCard::make(...) ->choicesSize('2.5rem') ] } ... }
特别感谢
感谢@BenSampo为laravel创建如此强大的枚举实现:)
许可证
MIT许可证。