基于laravel的后台UI框架(类laravel-admin)
本人于去年做项目的时候使用了laravel-admin
,当时觉得眼前一亮,原来后台框架还可以这么搞。
但此后结合实际情况,我们使用thinkphp
比较多,所以我参考它的思路在Tp5上面实现了一套类似的框架,见我发表的另一篇文章:分享:基于(tp5.1、tp6.0)后台开发框架(设计思路参考laravel-admin)
现在又花了几天的时间,基于laralvel
做了一个移植版本,主要是UI生成(form/table等)方面的。
仓库地址:github.com/ichynul/labuilder-web
UI生成核心仓库:github.com/ichynul/labuilder
与UI生成系统与laravel-admin
的区别:
- 表单元素的统一
UI主要分成 table(表格)
, form(表单)
, search(搜索表单)
,content(自定义内容)
。table / form / search
共用表单元素,实现了写法的统一$form->($field, $label, $colsize);
$table->($field, $label);
$search->($field, $label, $colsize);
$label
为空则使用翻译form $colsize
为空则默认12,col-md-12
, 即元素单独占一行。search $colsize
为空则默认2,col-md-2
, 即6元素占一行。
表单(form):
$form->show('id', '编号'); //默认 col-md-12
$form->text('name', '姓名', 6); // col-md-6
$form->radio('gender', '性别', '6 col-xs-12')->options([1 => '男', 2 => '女']); //col-md-6 col-xs-12
$form->switchBtn('status', '启用');
$form->show('created_at', '创建时间');
展示(show):
// 其实和from是一个东西:
// 把对应的表单元素替换为`show`、`match`、`matches`等纯显示的元素就行。
$form->show('id', '编号');
$form->show('name', '姓名', 6);
$form->match('gender', '性别')->options([1 => '男', 2 => '女']);
$form->match('status', '启用')->options([0 => '否', 1 => '是']);
$form->show('created_at', '创建时间');
//或者懒一点,在表单后面调用:$from->readonly()
//就可自动完成转换所以大多数情况是没必要单独写show页码,除非自动转换的效果达不到要求。
$form->show('id', '编号'); //show
$form->text('name', '姓名', 6); //show
$form->radio('gender', '性别', '6 col-xs-12')->options([1 => '男', 2 => '女']); //match
$form->switchBtn('status', '启用'); //match
$form->show('created_at', '创建时间'); //show
$from->readonly(); //自动把表单元素转换为显示元素
表格(table):
$table->show('id', '编号');
//使用表单元素[text,teatarea,checkbox,radio,select,switchBtn]配合autoPost方法,实现行内编辑
$table->text('name', '姓名')->autoPost();
$table->radio('gender', '性别')->options([1 => '男', 2 => '女'])->autoPost();
$table->switchBtn('status', '启用');
$table->show('created_at', '创建时间');
搜索表格(search),配合table使用,用于筛选数据:
$search->text('name', '姓名');
$search->radio('gender', '性别');
$search->switchBtn('status', '启用');
- 表格工具栏、操作栏高度自由
use Ichynul\Labuilder\Common\Builder;
public function buildTable(&$data)
{
$table->show('id', 'ID');
$table->show('username', '登录帐号');
$table->text('name', '姓名')->autoPost()->getWrapper()->addStyle('max-width:80px');
$table->show('role_name', '角色');
$table->show('group_name', '分组');
//工具栏
$table->getToolbar()
->btnCreate()//打开create页面
->btnEnable()
->btnDisable()
//->btnEnableAndDisable() //相当于上面两个都有 post请求 批量启用/禁用
->btnDestroy()//post请求 批量删除
->btnRefresh()//刷新;
//以上为封装好的
//以下自定义批量操作:
//post请求到同控制器`clearErrors` 批量清除登录错误次数
->btnPostChecked('clear_errors', url('/admin/thispage/clearErrors'), '重置', 'btn-info', 'mdi-backup-restore', 'title="重置登录失败次数"')
//打开新页面,并附带已被选中的`ids` 如 /admin/thispage/changepid?ids=1,2,3,7
->btnOpenChecked('changepid', url('/admin/thispage/changepid'), '修改过上级', 'btn-info', 'mdi-backup-restore', 'title="修改过上级"');
//操作栏
$table->getActionbar()
->btnEdit()//打开edit页面
->btnEnable()
->btnDisable()
//->btnEnableAndDisable() //相当于上面两个都有post请求 单条启用/禁用
->btnShow()//打开show页面
->btnDestroy()//post请求 单条删除
//以上为封装好的
//以下自定义单条操作:
// 打开另外一个控制器`account`中的`create`页面
->btnLink('account', url('/admin/account/create', ['member_id' => '__data.pk__']), '', 'btn-success', 'mdi-square-inc-cash');
//post请求到同控制器`clearErrors` 单条清除登录错误次数
->btnPostRowid('clear_errors', url('/admin/thispage/clearErrors'), '', 'btn-info', 'mdi-backup-restore', 'title="重置登录失败次数"');
}
public function clearErrors()
{
$ids = explode(',', request('ids'));
$res = true;
if ($res) {
return response()->json(
['code' => 1, 'msg' => '清除成功']
);
} else {
return response()->json(
['code' => 0, 'msg' => '清除失']
);
}
}
public function changepid()
{
$ids = explode(',', request('ids'));
$builder = Builder::getInstance('个人设置', '资料修改');
$form = $builder->form();
$list = $this->dataModel->where('id' ,'in',$ids)->get();
$form->items('list', '已选会员')->dataWithId($list)->with(
$table->show('id', 'ID'),
$table->show('username', '登录帐号')
)->canAdd(false)->cnaDelete(false)->size(0, 12)->showLabel(false);
$form->select('newpid', '新上级')->dataUrl('/admin/thispage/selectPage');
return $builder->render();
}
- 其他很多细节也不同,就不一一展示。