Laravel Dcat Admin
- 安装配置
- 修改配置
- [表格操作 `Ajax 结合 Pjax` 更新数据状态](#表格操作
Ajax 结合 Pjax
更新数据状态) - [表格 链接](#表格 链接)
- 表单
- 设置页面(通常修改更新在同一页面)
安装配置
框架版本
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();
}