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();
 }
相关推荐
谢平康9 小时前
移动光猫放开 IPv6 入站:5G 手机直连家里 NAS,不用端口映射
5g·智能手机·php
狗凯之家源码网9 小时前
微博图床 PHP 系统搭建与实战应用指南
android·开发语言·php
SDWAN_Cheap15 小时前
TCP滑动窗口与拥塞控制是什么?从流量控制到网络稳定性的完整解析
网络·tcp/ip·php
白露与泡影17 小时前
Redis 的“单线程”与“多线程”:一场关于性能与简洁的权衡
数据库·redis·php
CRMEB系统商城18 小时前
前后端技术栈全面换代!CRMEB 多商户(Java)v3.0更新预告
java·开发语言·小程序·php
码云数智-大飞19 小时前
新手写 Python 代码,如何规范命名、减少 Bug
开发语言·python·php
DevUp20 小时前
那些 CMS 的 AI 功能,到底有几个真能用
aigc·php·cms
迪康Defender20 小时前
终端安全实践:浅谈端点安全管理系统内置终端防火墙能力
运维·服务器·网络·经验分享·安全·php·终端安全管理
程序员_小兵21 小时前
PCIe Switch Fabric 技术解析
服务器·c语言·嵌入式硬件·php·fabric
新鲜势力呀21 小时前
PHP 实战:用户登录频繁失败怎么办?从安全防护到登录系统架构优化完整方案
安全·系统架构·php