Php 数据表列在使用@can()添加条件后向左移动

Php 数据表列在使用@can()添加条件后向左移动,php,permissions,laravel-5.7,yajra-datatable,spatie,Php,Permissions,Laravel 5.7,Yajra Datatable,Spatie,我使用带有HTML生成器的yajra datatebles来显示服务器端。在这里,我必须对特定角色隐藏action列中的delete按钮 我正在使用空间权限包并添加了@can()以隐藏删除按钮。我的代码如下 UserDatatable.php namespace App\DataTables; use App\User; use DB; use Builder; use Auth; use Yajra\DataTables\Services\DataTable; use Yajra\DataT

我使用带有HTML生成器的yajra datatebles来显示服务器端。在这里,我必须对特定角色隐藏action列中的delete按钮

我正在使用空间权限包并添加了
@can()
以隐藏删除按钮。我的代码如下

UserDatatable.php

namespace App\DataTables;

use App\User;
use DB;
use Builder;
use Auth;
use Yajra\DataTables\Services\DataTable;
use Yajra\DataTables\Html\Column;

class UsersDataTable extends DataTable
{
    /**
     * Build DataTable class.
     *
     * @param mixed $query Results from query() method.
     * @return \Yajra\DataTables\DataTableAbstract
     */
    public function dataTable($query)
    {
        return datatables($query)
            ->addIndexColumn()
            ->editColumn('status', function(User $user){
                if($user->status == 1)
                return '<label class="label label-success">Active</label>';
                else return '<label class="label label-danger">Deactive</label>';
            })
            ->editColumn('created_at', function(User $user){
                return date('d-m-Y H:i:s',strtotime($user->created_at));
            })
            ->editColumn('checkbox', function(User $user){
                return '<input type="checkbox" data-id="'.$user->id.'" class="sub_chk" name="ids[]" />';
            })
     
            ->addColumn('action', function(User $user) {
                return view('backend.users.usersaction', compact('user'))->render();
            })
            ->rawColumns(['checkbox','status','action']);
    }

    /**
     * Get query source of dataTable.
     *
     * @param \App\User $model
     * @return \Illuminate\Database\Eloquent\Builder
     */
    public function query(User $model)
    {

        $users = User::select('id','name','email','status', 'created_at', 'updated_at');
        if($this->request()->get('startDate')) {
            $st = $this->request()->get('startDate');
            $dt = ($this->request()->get('endDate') == '') ? date('Y-m-d') : $this->request()->get('endDate');
            $users->whereDate('created_at','<=', "$dt");
            $users->whereDate('created_at','>=', "$st");
        }
        if($this->request()->get('status') == '0' || $this->request()->get('status') == '1') {
            $users->where('status', $this->request()->get('status'));
        }
       // $users->orderBy('created_at','DESC')             
       $users->get();

       return $this->applyScopes($users);

    }

    /**
     * Optional method if you want to use html builder.
     *
     * @return \Yajra\DataTables\Html\Builder
     */
    public function html()
    {
        return $this->builder()
                
                    ->columns($this->getColumns())
                    ->minifiedAjax()
                    ->addAction(['width' => '10%'])
                    ->addCheckbox(['width'=> '10px'],true)
                    ->parameters($this->getBuilderParameters())
                    ->parameters([
                        'order' => [
                            5, // here is the column number
                            'desc'
                        ],
                        'scrollX' => true,
                        'extend'  => 'collection',
                        'text'    => 'Export',
                        'dom'     => 'Bfrtipl',
                        // 'buttons' =>  ['csv', 'excel', 'pdf' , 'print'],
                        'initComplete' => "function () {
                            this.api().columns().every(function () {
                                var column = this;
                                var input = document.createElement(\"input\");
                                $(input).appendTo($(column.footer()).empty())
                                .on('change', function () {
                                    column.search($(this).val(), false, false, true).draw();
                                });
                            });
                        }",
                    ]);
    }

    /**
     * Get columns.
     *
     * @return array
     */
    protected function getColumns()
    {
        return [
            'DT_RowIndex'=>['width'=>'10px','title'=>'S.No','searchable'=>false,'orderable'=>false],
            'name',
            'email',
            'status',
            'created_at'
        ];
    }

    /**
     * Get filename for export.
     *
     * @return string
     */
    protected function filename()
    {
        return 'Users_' . date('YmdHis');
    }
}
namespace-App\DataTables;
使用App\User;
使用数据库;
使用生成器;
使用Auth;
使用Yajra\DataTables\Services\DataTable;
使用Yajra\DataTables\Html\Column;
类UsersDataTable扩展了DataTable
{
/**
*构建数据表类。
*
*@param mixed$query Results from query()方法。
*@return\Yajra\DataTables\DataTableAbstract
*/
公共函数数据表($query)
{
返回数据表($query)
->addIndexColumn()
->editColumn('status',函数(用户$User){
如果($user->status==1)
返回“活动”;
否则返回'Deactive';
})
->editColumn('created_at',函数(User$User){
返回日期('d-m-Y H:i:s',strottime($user->created_at));
})
->editColumn('checkbox',函数(用户$User){
返回“”;
})
->addColumn('action',函数(用户$User){
返回视图('backend.users.usersaction',compact('user'))->render();
})
->rawColumns(['checkbox'、'status'、'action']);
}
/**
*获取数据表的查询源。
*
*@param\App\User$model
*@return\illumb\Database\elount\Builder
*/
公共函数查询(用户$model)
{
$users=User::选择('id','name','email','status','created_at','updated_at');
如果($this->request()->get('startDate')){
$st=$this->request()->get('startDate');
$dt=($this->request()->get('endDate')=='')日期('Y-m-d'):$this->request()->get('endDate');
$users->whereDate('created_at'、'='、“$st”);
}
如果($this->request()->get('status')=='0'| |$this->request()->get('status')=='1'){
$users->where('status',$this->request()->get('status');
}
//$users->orderBy('created_at','DESC')
$users->get();
返回$this->applyScopes($users);
}
/**
*如果要使用html生成器,请使用可选方法。
*
*@return\Yajra\DataTables\Html\Builder
*/
公共函数html()
{
返回$this->builder()
->列($this->getColumns())
->minifiedAjax()
->添加操作(['width'=>'10%'))
->addCheckbox(['width'=>'10px'],true)
->参数($this->getBuilderParameters())
->参数([
“订单”=>[
5,//这是列号
“描述”
],
'scrollX'=>真,
“扩展”=>“集合”,
“文本”=>“导出”,
'dom'=>'Bfrtipl',
//“按钮”=>[“csv”、“excel”、“pdf”、“打印”],
“initComplete”=>“函数(){
this.api().columns().every(函数(){
var列=此;
var input=document.createElement(\“input\”);
$(输入).appendTo($(column.footer()).empty())
.on('change',function(){
search($(this.val(),false,false,true).draw();
});
});
}",
]);
}
/**
*获取列。
*
*@return数组
*/
受保护的函数getColumns()
{
返回[
'DT_RowIndex'=>['width'=>'10px','title'=>'S.No','searchable'=>false,'orderable'=>false],
“姓名”,
“电子邮件”,
"地位",,
“创建于”
];
}
/**
*获取要导出的文件名。
*
*@返回字符串
*/
受保护的函数文件名()
{
返回“用户”。日期(“YmdHis”);
}
}
下面是我添加条件的操作视图

usersaction.blade.php

@can('View User')
  <a href="javascript:void(0);" data-user_id="{{ encrypt($user->id) }}" class="btn btn-sm btn-default viewUser"><i class="fa fa-eye"></i></a>
@endcan

@can('Edit User')
  <a href="{!! url('admin/editUser/'.encrypt($user->id)) !!}" class="btn btn-sm btn-primary"><i class="fa fa-edit"></i></a>
@endcan

@can('Delete User')
  <a href="javascript:void(0);" data-user_id="{{ encrypt($user->id) }}" class="btn btn-sm btn-danger deleteUser"><i class="fa fa-trash"></i></a>
@endcan
@can('查看用户')
@恩德坎
@可以('编辑用户')
@恩德坎
@can('删除用户')
@恩德坎
在这里,查看用户、编辑用户、删除用户是由laravel Spatiale权限包创建的权限。它工作正常,但问题是在数据表视图中,action列向左移动,右侧留下了太多的空白:

我尝试了另一种方法,如下所示

->addColumn('action', function(User $user){
                $actionBtn='';
                if(Auth::user()->can('View User')){
                    $actionBtn .= '<a href="javascript:void(0);" data-user_id="'.encrypt($user->id).'" class="btn btn-sm btn-default viewUser"><i class="fa fa-eye"></i></a>';
                }
                if(Auth::user()->can('Edit User')){
                    $actionBtn .= '<a href="'.url('admin/editUser/'.encrypt($user->id)).'" class="btn btn-sm btn-primary"><i class="fa fa-edit"></i></a>';
                }
                if(Auth::user()->can('Delete User')){
                    $actionBtn .= '<a href="javascript:void(0);" data-user_id="'.encrypt($user->id).'" class="btn btn-sm btn-danger deleteUser"><i class="fa fa-trash"></i></a>';
                }  
                return $actionBtn;
            })
->addColumn('action',函数(User$User){
$actionBtn='';
if(Auth::user()->can('View user')){
$actionBtn.='';
}
if(Auth::user()->can('Edit user')){
$actionBtn.='';
}
if(Auth::user()->can('Delete user')){
$actionBtn.='';
}  
返回$actionBtn;
})
但我得到了同样的结果。如何解决此问题?

$action=“”;
$action = "";
if(Auth::user()->can('floor-edit')){
        $action .= '<a class="btn btn-info  btn-sm" href="'.route("floor.edit",Crypt::encrypt($floor->id)).'"><i class="fa fa-edit"></i></a>';
}

if(Auth::user()->can('floor-delete')){
    $action .= '  <button type="button" name="delete" id="'.Crypt::encrypt($floor->id).'" class="delete btn btn-danger btn-sm"><i class="fa fa-trash"></i></button>';
}
if(Auth::user()->can('floor-edit')){ $action.=''; } if(Auth::user()->can('floor-delete')){ $action.=''; }

它对我有用

在HTML中思考你的问题。您可以尝试为操作设置表列的宽度,可能在150px左右,然后自动排列其他列以占用剩余空间。嘿,我也遇到了同样的问题。您有什么解决方案吗?请发布答案,你是如何解决这个问题的