Laravel 后台管理 Dcat Admin 使用记录

Laravel Dcat Admin

安装配置

安装文档地址

框架版本 Laravel 8.*

修改配置

修改 admin.php 文件

php 复制代码
return [
	// 后台名称
    'name' => 'DAD后台管理',
    // 标题
    'title' => '后台管理',
	// 本地(http)无法访问时, 在`env`中定义ADMIN_HTTPS 将 `true` 改为 `false`;
	'https' => env('ADMIN_HTTPS', true),
];

英文改为中文

修改 app.php 文件

php 复制代码
return [
	// 修改时区
   'timezone' => 'Asia/Shanghai',
   // 修改地区语言
   //    'locale' => 'en',
    'locale' => 'zh_CN',
];

表格操作 Ajax 结合 Pjax 更新数据状态

表格字段js 操作

php 复制代码
$grid->column('auditing', '审核')->display(function () {
                $href = admin_url('admin-xxx/handle');
                if ($this->status > 2) {
                    return '已处理';
                }
                return <<<HTML
<button class="btn btn-primary btn-outline btn-sm" data-action-{$this->id}="changeStatus" data-id="{$this->id}" data-state="4" >驳回</button>
<button class="btn btn-primary btn-outline btn-sm" data-action-{$this->id}="changeStatus" data-id="{$this->id}" data-state="3" >已完成</button>
<script>
Dcat.ready(function () {
    // JS 代码也可以放在模板文件中
    console.log('模板文件执行js~');
    $('[data-action-{$this->id}]').click(function(e) {
      console.log(e.target.dataset);
      let dataset = e.target.dataset;
      $.ajax({
           type: "POST",
           url: "{$href}",
           data: {id: dataset.id, state: dataset.state},
           success: function(res){
              console.log(res);
              if(res.status){
                  Dcat.success('更新成功');
                  Dcat.reload('#pjax-container');
              }
           },
           error:function(err) {
              console.log(err);
           }
      });
    })
});
</script>
HTML;
            });

路由

php 复制代码
// 审核 - 事件
$router->post('admin-xxx/handle', 'AdminXXXController@handle');

请求方法

php 复制代码
/**
 * 处理请求
 * @param Request $request
 */
public function handle(Request $request)
{
    // 获取当前行ID
    $id = $request->input('id', 0);
    $state = $request->input('state', 0);
    // 更新逻辑
    // 返回响应结果并刷新页面
    return Admin::json()->success("操作成功");
}

表格 链接

链接 1. 字数超出隐藏 2. 链接新窗口打开

php 复制代码
// 字数超出隐藏
$grid->column('title')->limit(20);
// 链接新窗口打开
$grid->column('link')->display(function ($text) {
	$strLimit = Str::limit($text, 20);
    return "<a href='{$text}' target='_blank'>{$strLimit}</a>";
});

表单

功能 - 默认值, 新增操作, 编辑操作

php 复制代码
$form->hidden('status')->default(1);
$form->hidden('created_at');
$form->hidden('code');
// 判断是否为新增操作
if ($form->isCreating()) {
    // 新增时使用当前时间(模型禁用自动维护时间戳 $timestamps = false)
	$form->created_at = now()->toDateTimeString();
	$form->saving(function (Form $form) {
   		// 修改用户提交的数据
		$form->code = $this->createCode();
	});
}
// 编辑
if ($form->isEditing()) {
	// 禁用编辑
	$form->text('code')->disable();
	$form->radio('status')->options([1 => '未使用', 2 => '已使用']);
}

设置页面(通常修改更新在同一页面)

index 方法自动覆盖 grid 方法 将 body 中替换为 表单页面

php 复制代码
    public function index(Content $content)
    {
        return $content
            ->translation($this->translation())
            ->title($this->title())
//            ->body($this->grid());
            // edit ID 
            ->body($this->form()->edit('1'));
    }

/**
     * Make a form builder.
     *
     * @return Form
     */
   protected function form()
   {
       return Form::make(new SystemSettings(), function (Form $form) {
           $form->action('system-settings/1'); // 提交表单地址
           $form->disableHeader();
           $form->column(8, function (Form $form) {
               $form->textarea('home_notice');
               $form->textarea('home_link');
               $form->text('home_link_name');
           });
           // 保存时更改数据
           $form->saving(function (Form $form) {
               
           });

           // 表单底部
           $form->footer(function ($footer) {
               // 去掉`重置`按钮
               $footer->disableReset();
               // 去掉`查看`checkbox
               $footer->disableViewCheck();
               // 去掉`继续编辑`checkbox
               $footer->disableEditingCheck();
               // 去掉`继续创建`checkbox
               $footer->disableCreatingCheck();
               // 设置`查看`默认选中
               $footer->defaultViewChecked();
               // 设置`继续编辑`默认选中
               $footer->defaultEditingChecked();
               // 设置`继续创建`默认选中
               $footer->defaultCreatingChecked();
           });
       });
   }
    

表单

动态获取选项列表

php 复制代码
/**
 * @return array
 */
public function getOptions(): array
{
    $list = Accounts::all()->values()->toArray();
    return collect($list)->mapWithKeys(function ($item) {
        return [strval($item['id']) => $item['account']];
    })->all();
}

$options = $this->getOptions();
 return Grid::make(new XXXModel(), function (Grid $grid) use ($options ) {
 	$grid->column('id', '编号')->sortable();
 }
相关推荐
m0_748247551 小时前
Web 应用项目开发全流程解析与实战经验分享
开发语言·前端·php
luck_0073 小时前
PhpSpreadsheet 导出excel 找不到setCellValueByColumnAndRow
php
生椰拿铁You4 小时前
解决Apache/2.4.39 (Win64) PHP/7.2.18 Server at localhost Port 80问题
php
索然无味io9 小时前
跨站请求伪造之基本介绍
前端·笔记·学习·web安全·网络安全·php
伟大无须多言10 小时前
企业资源规划系统(ERP)服务器上线项目实施指南
开发语言·php
网络安全(king)10 小时前
网络安全设备
网络·web安全·php
蜗牛hb14 小时前
VMware Workstation虚拟机网络模式
开发语言·学习·php
手可摘星河14 小时前
php中 cli和cgi的区别
开发语言·php
EasyDSS15 小时前
国标GB28181-2022平台EasyGBS:安防监控中P2P的穿透方法
网络协议·php·音视频·p2p
liuyunshengsir17 小时前
Squid代理服务器的安装使用
开发语言·php