chatphp/orchid-tables

一个针对Laravel Orchid的扩展包,用于扩展其表格处理能力,以及一些其他有用的辅助方法。

安装: 13

依赖者: 0

建议者: 0

安全: 0

星星: 1

关注者: 0

分支: 16

语言:JavaScript

1.1.1 2022-04-26 07:17 UTC

This package is not auto-updated.

Last update: 2024-09-26 17:51:59 UTC


README

Latest Version on Packagist Total Downloads Build Status StyleCI PHP Composer

一个针对Laravel Orchid的扩展包,用于扩展其表格处理能力,以及一些其他有用的辅助方法。

安装

通过Composer

$ composer require chatphp/orchid-tables

使用方法

此包添加以下新功能:

Screen\TdChecklist

具有全选支持的清单。按住 shift 可以选择范围。

使用方法

use Lintaba\OrchidTables\Screen\TDChecklist;

class UserTable extends Table {
//...
    public function columns(): array
    {
        return [
            TDChecklist::make(),
            //...
            TD::make('id'),
        ];
    }
}

TDChecklist::make($name = 'checkbox')

->checkboxSet(key,value)

几乎拥有所有在 TD 上可用的功能。

默认情况下,它发送以下内容

checkbox[] = 1

提供的集合项必须有一个 getKey():int|string 方法,该方法提供复选框的值。

默认情况下,清单属于主表单,它与大多数操作按钮相关联,因此如果在 Screen@commandBar() 内有 Button,则会发送选择列表。然而,模态有自己的表单,所以它不会被包括在内。目前仅支持一个表单。(如果您需要支持多个表单/模态,请随时提出工单。)

将列表表单改为模态

class UserTable extends Table {
//...
    public function commandBar(): array {
        return [
            ModalToggle::make("my modal")->modal('myModal'),
        ];
    }
    public function columns(): array {
        return [
            TD::Checklist::make()->checkboxSet('form','screen-modal-form-myModal'),
        ];
    }

返回错误/成功时可以保留当前选择

class UserScreen extends Screen {
//...
    public function activateUsers(Request $request){
        Alert::message('Selected item count is still ' . count($request->get('checkbox', []) ) );
        $request->flash();
    }

可以混合使用

这些混合到orchid的大多数可制作和可见的东西中。

  • TD
  • 字段
  • LayoutFactory

can(string[] $permissions...)

如果当前用户没有列出的任何权限,则隐藏字段。

如果之前的 canSee 没有隐藏它,并且如果用户被授予了列出的任何权限,则显示。

canAll(string[] $permissions...)

如果当前用户没有列出的任何权限,则隐藏字段。

如果之前的 canSee 没有隐藏它,并且如果用户被授予了列出的所有权限,则显示。

两者 cancanAll 内部都使用 canSee,因此在一个 can 之后链式调用另一个 canSee 将使权限检查无效。

在开发模式下使用不存在的权限会抛出一个易于修复的异常,以帮助避免错误。

布局混合

html

html(string|callable $content): self

创建一个 Layout 组件,渲染提供的HTML字符串(或其值,如果它是闭包。)

单元格混合

date

date(bool $withHumanReadable = true, string $format = null): self

格式化日期字符串或Carbon日期为可读格式。默认格式为 config('orchid-tables.date_format')config('app.date_format'),或 Y?-m-d H:i。(如果它是当前年份,则省略年份。)

num

num(int $decimals = 0,
        string $suffix = null,
        string $decimalSeparator = ',',
        string $thousandsSeparator = DataHelpers::NBSP): self

将数值格式化为更易于阅读/更方便的格式。

  • 设置小数位数
  • 可以添加后缀,使用非换行空格(nbsp)分隔,保证不会换行到多行。

示例

TD::make('size')->num(2,'')

limit

limit(int $max = 100, string $end = '...')

保持文本在指定的最大字符数之下。如果更长,则替换末尾为 ...(或指定在 end 中的任何内容)。

bool()

根据列的值是否有真值或假值,显示绿色的勾或红色的叉。

keyValues()

keyValues(int $maxDepth = 3)

显示复杂对象/数组/json条目的键值结构(使用 dl/dt/dd)。

限制最大深度,默认为3。

link($href, $segments = null)

创建指向目标位置的链接/按钮。两者的 $href$segments 都可以是闭包或值。

示例

// article: { user: { id: 42, first: "John", last: "Doe", __toString:"John Doe" } }
TD::make('user')->link(function(User $user){return route('user.show',$user->id)}),
//<a href="/users/show/42">John Doe</a>

TD::make('user')->link('user.create',['last','first'])
//<a href="/users/show/42">Doe<br> John</a>

renderable()

尝试使用以下之一渲染模型

  • 其值,当其为标量或null时
  • 作为 Personable Persona
  • 调用 ->presenter() 获取 Personable Persona
  • ->display() 获取值
  • 最后作为其 nameslugclass@id

格式化可导出单元格

这些辅助方法与格式化的Excel导出一起使用很有用。默认情况下未激活,因为它会增加额外的开销,通常不使用。要激活,您可以在配置中设置它

# config/orchid-tables.php
        'cell'   => Mixins\CellExportFormattableMixin::class,

或调用以下

\Lintaba\OrchidTables\Facades\OrchidTables::mixinTdExportFormattables();

增强方法

  • date
    • 格式化为日期
  • num
    • 格式化为提供的数字格式,但以数字形式存储。
  • keyValues
    • 以json格式存储在输出中

此外,以下辅助方法也可用

####notExportable($notExportable = true): self 将列设置为不可导出。

建议将其设置为例如操作按钮。

####setStyle($style): self

一个回调,用于格式化给定的行或实际格式。可以多次调用,结果将合并。回调可以返回phpexcel格式化的数组,或以下之一(或多个合并在一起)

  • ExportStyles::FORMAT_NONE

  • ExportStyles::FORMAT_TEXT

  • ExportStyles::FORMAT_HUF

  • ExportStyles::FORMAT_USD

  • ExportStyles::FORMAT_EUR

  • ExportStyles::FORMAT_PCS

  • ExportStyles::FORMAT_DATE

  • ExportStyles::FORMAT_DATETIME

  • ExportStyles::FORMAT_TIME

  • ExportStyles::FORMAT_BOLD

  • ExportStyles::FORMAT_ITALIC

  • ExportStyles::FORMAT_UNDERLINED

  • ExportStyles::FORMAT_LEFT

  • ExportStyles::FORMAT_RIGHT

  • ExportStyles::FORMAT_CENTER

  • ExportStyles::FORMAT_TOP

  • ExportStyles::FORMAT_MIDDLE

  • ExportStyles::FORMAT_BOTTOM

  • ExportStyles::FORMAT_RED

  • ExportStyles::FORMAT_GREEN

  • ExportStyles::FORMAT_YELLOW

  • ExportStyles::FORMAT_BLUE

  • ExportStyles::FORMAT_BLACK

####exportRender(callable $callback): self

设置Excel的渲染方法。输入是字段值。必须返回字符串或可转换为字符串的对象。

示例

TD::make('name')->exportRender(function(string $value, User $entry, int $rowNum){
    return Str::upper($value).' #'.$entry->id.' (row-'.$rowNum.')';
})

QuickExport

使用 Lintaba\OrchidTables\Exports\QuickExport 可以快速设置数据导出,无需创建额外的类,只需在现有的表上构建即可。

快速导出示例

use Lintaba\OrchidTables\Exports\QuickExport;
use Orchid\Screen\Actions\Button;
use Orchid\Screen\Screen;

class UsersTableScreen extends Screen
{

    public function commandBar(): array
    {
        return [
            Button::make('export')->method('export')->rawClick(),
        ];
    }

    public function export(){
        $query = User::filters()->defaultSort('id', 'desc');
        return (new QuickExport($query, UserTable::class))->download('userExport.xlsx');
    }
//...

TableAdvanced

扩展表布局,\Lintaba\OrchidTables\Screen\TableAdvanced 添加以下功能

rowClass($row)

根据行计算类名。用于给整行着色。

rowLink($row)

使行可点击。

示例

use Lintaba\OrchidTables\Screen\TableAdvanced

class UserTable extends TableAdvanced
{

    public function rowClass(User $row)
    {
        return $row->active ? 'bg-success' : 'bg-danger';
    }

    public function rowLink(User $row)
    {
        return route('admin.users.show',$row);
    }
//...

自定义

运行以下命令以发布配置

php artisan vendor:publish --tag="orchid-tables.config"
# /config/orchid-tables.php
use Lintaba\OrchidTables\Mixins;

return [
    'mixins' => [
        'can'    => Mixins\CanMixin::class,
        'cell'   => Mixins\CellMixin::class,
        'layout' => Mixins\LayoutMixin::class,
    ],

    'date_format' => null,
];

扩展或创建基于现有混合,如 \Lintaba\OrchidTables\CellMixin 的重写。您可以通过将它们的键设置为 null 来打开或关闭任何这些混合。

变更日志

请参阅变更日志获取有关最近更改的更多信息。

测试

$ composer test

贡献

请参阅contributing.md获取详细信息以及待办事项列表。

致谢

许可证

MIT。有关更多信息,请参阅许可证文件