一个简单的后台系统

分享 tyua07 ⋅ 于 3年前 ⋅ 最后回复由 xigua_123 3周前 ⋅ 26768 阅读

首先先扯点蛋,做后台系统大概1年多了,每次都是重复的构建增、删、改、查的页面,重复的劳动力造成了写这个小程序的初衷!

构建数据列表页面

/**
     * 获得后台用户
     *
     * @return Response
     * @auther yangyifan <yangyifanphp@gmail.com>
     */
    public function getIndex(){
        return  $this->html_builder->
                builderTitle('后台用户列表')->
                builderSchema('id', 'id')->
                builderSchema('email', '登录名')->
                builderSchema('mobile','手机号码')->
                builderSchema('status', '状态')->
                builderSchema('role_name', '角色')->
                builderSchema('created_at', '创建时间')->
                builderSchema('updated_at', '更新时间')->
                builderSchema('handle', '操作')->
                builderSearchSchema('email', '登录名')->
                builderSearchSchema('mobile', '手机号码')->
                builderSearchSchema($name = 'status', $title = '状态', $type = 'select', $class = '', $option = [1=>'开启', '2'=>'关闭'], $option_value_schema = '0')->
                builderSearchSchema('role_name', '角色')->
                builderAddBotton('增加后台用户', url('admin/admininfo/add'))->
                builderJsonDataUrl(url('admin/admininfo/search'))->
                builderList();
    }

只需要上面几行代码就能构建出下面的这种图片:
列表页.

构建列表页数据

 /**
     * 搜索
     *
     * @param Request $request
     * @auther yangyifan <yangyifanphp@gmail.com>
     */
    public function getSearch(Request $request){
        //接受参数
        $search = $request->get('search', '');
        $sort   = $request->get('sort', 'id');
        $order  = $request->get('order', 'asc');
        $limit  = $request->get('limit',0);
        $offset = $request->get('offset', config('config.page_limit'));

        //解析params
        parse_str($search);

        //组合查询条件
        $map = [];
        if(!empty($email)){
            $map['admin_info.email'] = ['like','%'.$email.'%'];
        }
        if(!empty($mobile)){
            $map['admin_info.mobile'] = ['like','%'.$mobile.'%'];
        }
        if(!empty($role_name)){
            $map['r.role_name'] = ['like','%'.$role_name.'%'];
        }
        if(!empty($status)){
            $map['admin_info.status'] = $status;
        }

        $data = AdminInfoModel::search($map, $sort, $order, $limit, $offset);

        echo json_encode([
            'total' => $data['count'],
            'rows'  => $data['data'],
        ]);
    }

列表页全部的逻辑代码,只需要在这里封装搜索条件即可!

构建编辑页面

/**
     * 编辑角色
     *
     * @param  int  $id
     * @auther yangyifan <yangyifanphp@gmail.com>
     */
    public function getEdit($id){
        return  $this->html_builder->
                builderTitle('编辑后台用户')->
                builderFormSchema('id', 'id', 'hidden')->
                builderFormSchema('email', '登录邮箱', $type = 'text', $default = '',  $notice = '', $class = '', $rule = 'e', $err_message = '', $option = '', $option_value_schema = '')->
                builderFormSchema('password', '登录密码', $type = 'password', $default = '',  $notice = '', $class = '', $rule = '')->
                builderFormSchema('mobile', '手机号码', $type = 'text', $default = '',  $notice = '', $class = '', $rule = 'm', $err_message = '', $option = '', $option_value_schema = '')->
                builderFormSchema('status', '状态', 'radio', '', '当前角色是否开启,如果关闭,则属于当前角色都不可用', '', '', '', [1=>'开启', '2'=>'关闭'], '2')->
                builderFormSchema('face', '头像', 'image')->
                builderFormSchema('role_id', '所属角色', 'select', $default = '',  $notice = '', $class = '', $rule = '*', $err_message = '', AdminRoleModel::getRoleList(), 'role_name')->
                builderConfirmBotton('确认', url('admin/admininfo/edit'), 'btn btn-success')->
                builderEditData(AdminInfoModel::findOrFail($id))->
                builderEdit();
    }

只需要上面几行代码就能构建出下面的这种图片:

编辑页面

构建增加页面

/**
     * 增加后台用户
     *
     * @auther yangyifan <yangyifanphp@gmail.com>
     */
    public function getAdd(){
        return  $this->html_builder->
                builderTitle('增加后台用户')->
                builderFormSchema('email', '登录邮箱', $type = 'text', $default = '',  $notice = '', $class = '', $rule = 'e', $err_message = '', $option = '', $option_value_schema = '')->
                builderFormSchema('password', '登录密码', $type = 'password')->
                builderFormSchema('mobile', '手机号码', $type = 'text', $default = '',  $notice = '', $class = '', $rule = 'm', $err_message = '', $option = '', $option_value_schema = '')->
                builderFormSchema('status', '状态', 'radio', '', '当前角色是否开启,如果关闭,则属于当前角色都不可用', '', '', '', [1=>'开启', '2'=>'关闭'], '2')->
                builderFormSchema('face', '头像', 'image')->
                builderFormSchema('role_id', '所属角色', 'select', $default = '',  $notice = '', $class = '', $rule = '*', $err_message = '', AdminRoleModel::getRoleList(), 'role_name')->
                builderConfirmBotton('确认', url('admin/admininfo/add'), 'btn btn-success')->
                builderAdd();
    }

构建tree页面

/**
     * 获得菜单列表
     *
     * @return Response
     * @auther yangyifan <yangyifanphp@gmail.com>
     */
    public function getIndex(){
        return  $this->html_builder->
                builderTitle('文章分类')->
                builderSchema('id', 'id')->
                builderSchema('menu_name', '菜单名称')->
                builderSchema('pid_name','父级栏目')->
                builderSchema('status', '状态')->
                builderSchema('sort', '排序')->
                builderSchema('created_at', '创建时间')->
                builderSchema('updated_at', '更新时间')->
                builderSchema('handle', '操作')->
                builderAddBotton('增加菜单分类', url('admin/menu/add'))->
                builderTreeData(MenuModel::getAll())->
                builderTree();
    }

只需要上面几行代码就能构建出下面的这种图片:

tree

构建tab页面

/**
     * 网站配置
     *
     * @return Response
     * @auther yangyifan <yangyifanphp@gmail.com>
     */
    public function getIndex(){
          return $this->html_builder->builderTabSchema(
                    $this->html_builder->
                    builderTitle('基本设置')->
                    builderFormSchema('site_name', '网站名称')->
                    builderFormSchema('keywords', '关键字', $type = 'text', $default = '',  $notice = '', $class = '', $rule = 'e', $err_message = '', $option = '', $option_value_schema = '')->
                    builderFormSchema('description', '网站描述', $type = 'text', $default = '',  $notice = '', $class = '', $rule = 'e', $err_message = '', $option = '', $option_value_schema = '')->
                    builderConfirmBotton('确认', url('admin/config/edit'), 'btn btn-success')->
                    builderEditData(ConfigModel::getAll())
                )->builderTabHtml();
    }

只需要上面几行代码就能构建出下面的这种图片:

tab

项目地址

卖个广告

一个好的想法,可以使写项目变得更简单,如果写的不好的地方麻烦或者可以改进的地方,希望大家Pull Requests 我!谢谢(aligaduo)

下一步计划

因为还没有使用在真实环境,所以,可以还会有变动,这个只是一个雏形,感兴趣的可以自己先fork一下!谢谢(aligaduo)

数据库

记得 star哦 摸摸大

本文章首发在 Laravel China 社区
本帖已被设为精华帖!
回复数量: 18
  • SebastianKenendy
    2年前

    很不错,学习了!

  • wsliang
    1年前

    哈哈哈, 原来我也想写个这样的程序,自动化带来的好处是,屏蔽了一些低级错误,和重复的体力劳动~ 不错支持一个,不过你用的框架,我还没怎么学习过~

  • chenjy
    1年前

    楼主,项目部署,初始化报错;
    FatalErrorException in ControllerController.php line 27:
    Arrays are not allowed in class constants

  • tyua07
    1年前

    @chenjy qq Or 微信 多少? 我加你说吧!

  • chenjy
    1年前

    @tyua07 qq 1075436220, 麻烦了

  • chenjy
    1年前

    @tyua07 哥们,这个问题可以帮我解决下吗? 我的联系方式给你了~

  • 正义的西瓜
    1年前
    <?php 
        echo "hello world!";
  • 鑫鑫
    1年前

    你好,我本地运行了你的项目;提示:RuntimeException in ApiServiceProvider.php line 88:
    Unable to boot ApiServiceProvider, configure an API domain or prefix. 请问这如何解决

  • tyua07
    1年前

    @鑫鑫 这个是其他的问题吧,排查一下 dingo 相关的代码。

  • 鑫鑫
    1年前

    @tyua07 感谢楼主。问题已经解决了 改了一下 Dingo\Api\Provider\ApiServiceProvider::setupConfig() ,后台界面很帅

  • tyua07
    1年前

    @鑫鑫 其实已经在重新了,从今年3月份开始的,但是很遗憾,没有达到自己想要的效果,所以github没有更新了,但是没有放弃(现在这个已经是第三版了,第二版流产了。),我现在每个周末都在努力完善中,等好了,我会加你的qq然后邀请你使用的!

  • 鑫鑫
    1年前

    @tyua07 嗯嗯,谢谢楼主

  • z88089
    1年前

    @tyua07 发现代码里有用到swoole,正好我想建一个后台也需要swoole,拿来学习了啊o(*≧▽≦)ツ

    不过没有发现swoole是在做什么业务,只发现了构建后台这块是完整的

    还有,楼主代码写的很好,有很多值得学习的地方

  • tyua07
    1年前

    @z88089 一年前的代码了,并不觉得好,哈哈,等我重构吧!希望能给出一个更好的玩具

  • Tony5456
    1年前

    一般吧「->」 放前面吧

  • 981869570
    3个月前

    楼主写的很赞,不过有几个问题想请教一下,不知道能否加下qq(981869570)吗

  • xigua_123
    1个月前

    博主大神 能否加个QQ799732492 请教,求助下

暂无评论~~
您需要登陆以后才能留下评论!

Composer 中国全量镜像

Top 100 扩展包

Lumen 中文文档

Laravel 速查表

Laravel 中文文档

Laravel 项目开发规范

Laravel 开发环境部署

Elasticsearch-PHP 中文文档

Lumen 中文文档

GraphQL PHP 中文文档

社区文档撰写指南

TDD 构建 Laravel 论坛笔记

PHP PSR 标准规范

PHP 设计模式全集

Dingo API 中文文档