joshua060198/nova-simple-status-with-enum

Laravel Nova 的简单状态字段

0.0.3 2020-11-26 11:55 UTC

This package is auto-updated.

Last update: 2024-09-26 21:08:50 UTC


README

Packagist Downloads GitHub issues GitHub GitHub release (latest by date)

使用徽章字段实现的简单状态指示器。

依赖项

本包使用

因此,请首先查看这些包的安装说明。

安装

composer require joshua060198/nova-simple-status-with-enum

截图

索引 / 详情

ScreenShot1

编辑

ScreenShot1

用法

  1. 创建你的枚举类并应用 MappableStatus 特性。

    <?php
    
    namespace App\Enums;
    
    use BenSampo\Enum\Enum;
    use Joshua060198\NovaSimpleStatusWithEnum\MappableStatus;
    
    final class CategoryStatus extends Enum
    {
        use MappableStatus;
    
        const Active =   1;
        const NotActive =   0;
    }
  2. MappableStatus 特性提供了一个静态函数 getMappedStatus() 来获取 Badge 字段中的 CSS 类别的状态映射。你可以根据需要覆盖此功能。 重要:你需要为 getMappedStatus() 函数提供所有映射!

    <?php
    
    namespace App\Enums;
    
    use BenSampo\Enum\Enum;
    use Joshua060198\NovaSimpleStatusWithEnum\MappableStatus;
    
    final class CategoryStatus extends Enum
    {
        use MappableStatus;
    
        const Active =   1;
        const NotActive =   0;
        const MyCustomStatus = 2;
    
        public static function getMappedStatus() {
            $parent = static::$defaultMappedStatus;
            $new = [
                'My Custom Status' => 'bg-success-dark text-light'
            ];
    
            return array_merge($parent, $new);
        }
    }
  3. 在资源中应用它

    // app/Nova/Order.php
    
    use Joshua060198\EditableStatusCard\EditableStatusCard;
    
    class Category extends Resource {
    
        ...
    
        public function fields(Request $request) {
    
            return [
                StatusView::make($this->status, CategoryStatus::class),
    
                StatusForm::make(CategoryStatus::class)
            ]
        }
    
        ...
    }

构造函数

StatusForm

你需要传递包含所有状态常量的枚举类。下一个参数与常规 nova 字段相同。

示例

    StatusForm::make(CategoryStatus::class, 'Custom Status', 'my_status')

StatusView

此功能有两个必需参数。第一个参数提供你的状态字段的实际值,第二个参数传递包含所有常量的枚举类。

示例

    StatusView::make($this->my_custom_status, CategoryStatus::class, 'My Status')

IMPORTANT!!

  • 此状态字段将根据首字母大写将常量变量分割,并用空格显示。例如

    final class CategoryStatus extends Enum
    {
        const NotActive =   0;
    }

    将显示为

    ScreenShot 3

  • 你需要在 getMappedStatus() 函数中提供你的枚举常量的映射。例如,这将产生错误

    final class CategoryStatus extends Enum
    {
        use MappableStatus;
    
        const FirstCustomStatus =   0;
        const AnotherStatus =   1;
        const Active = 2;
    }

    你必须像这样提供 FirstCustomStatusAnotherStatus 的映射

    final class CategoryStatus extends Enum
    {
        use MappableStatus;
    
        const FirstCustomStatus =   0;
        const AnotherStatus =   1;
        const Active = 2;
    
        public static function getMappedStatus() {
            $parent = static::$defaultMappedStatus;
            $new = [
                'First Custom Status' => 'custom-class',
                'AnotherStatus' => 'bg-dark text-light'
            ];
    
            return array_merge($parent, $new);
        }
    }
  • 默认映射状态值为

    public static $defaultMappedStatus = [
      'Active' => 'bg-success-light text-success-dark',
      'Warning' => 'bg-warning-light text-warning-dark',
      'Not Active' => 'bg-danger-light text-danger-dark',
      'Approved' => 'bg-success-light text-success-dark',
      'Waiting Approval' => 'bg-warning-light text-warning-dark',
      'Not Approved' => 'bg-danger-light text-danger-dark',
      'Delivered' => 'bg-success-light text-success-dark',
      'Delivering' => 'bg-warning-light text-warning-dark',
      'Not Delivered' => 'bg-danger-light text-danger-dark',
      'Paid' => 'bg-success-light text-success-dark',
      'Not Paid' => 'bg-danger-light text-danger-dark',
    ];

许可证

MIT 许可证。[https://github.com/joshua060198/nova-simple-status-with-enum/blob/HEAD/LICENSE](https://github.com/joshua060198/nova-simple-status-with-enum/blob/HEAD/LICENSE)