3 Star 39 Fork 13

Tpext / myadmin

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
Apache-2.0

欢迎使用

一、安装

tp框架有两个版本

  • 5.1 基于thinkphp 5.1 (推荐(文档基于此版本))

  • 6.0 基于thinkphp 6.0 (beta)

基于webman的实现:https://github.com/hi-tpext/mywebman

框架需要使用 composer和git

安装 composer

https://pkg.phpcomposer.com/#how-to-install-composer/

安装 git

https://git-scm.com/

使用 composer 全新安装

安装 thinkphp(5.16.0,根据您的需要,选择其中一个版本),

[5.1]分支对应 tpextmyadmin的[1.0]分支,依次执行以下命令,myadmin 为新项目目录,可自行调整

composer create-project topthink/think=5.1.* myadmin

cd myadmin

composer require ichynul/tpextmyadmin:^1.*

[6.0]分支对应 tpextmyadmin的[3.0]分支,依次执行以下命令,myadmin6 为新项目目录,可自行调整

composer create-project topthink/think=6.0.* myadmin6

cd myadmin6

composer require ichynul/tpextmyadmin:^3.*

安装完毕,此安装版是最小模式,只包含基本的后台功能,建议开发新项目时使用此方式。


使用 git 安装演示站

拉取 5.1 分支代码,依次执行以下命令,myadmin 为新项目目录,可自行调整

git clone -b 5.1 https://github.com/hi-tpext/myadmin.git myadmin

cd myadmin

composer update

或 拉取 6.0 分支代码,依次执行以下命令,myadmin6 为新项目目录,可自行调整

git clone -b 6.0 https://github.com/hi-tpext/myadmin.git myadmin6

cd myadmin6

composer update

相关演示代码在application/admin/app/admin/中,数据库脚本由[myadmindata]扩展提供,请下载安装。 安装完毕,此安装版是最和演示站同步的,如果你想自己搭建演示站可用此方式。 注意:此方式的仓库是不带composer依赖vendor目录和thinkphp目录的,请务必运行composer update安装所有依赖后再访问网站。

一些问题

  • 细节很重要,安装过程中若有问题,请多检查。
  • 比如创建项目后没进入新项目目录就运行命令,再比如跑到public里面运行命令的,网站运行目录没指向到public的。
  • composer报错的版本冲突,php版本不符问题,php依赖缺失(如curl、zip),php方法被禁用等。
  • 因为涉及到的东西不可能所有的都列出来详细的讲。

二、配置

  • apache/nginx 重写规则,略(自行百度) *重要

  • 没配置重写规则的话后续的url中加上index.php

  • 如:http://localhost:8081/index.php/admin

三、扩展安装

  1. 浏览器输入 [http://localhost:8081/admin] 打开,如果没有事先配置数据库,将会跳转到配置数据库的页面。

  2. 自动安装基础扩展

  3. 手动安装 [tpext.myadmin],确保此扩展优先,以支持其他扩展的后台菜单创建

  4. 手动安装其余装扩展

四、进入后台

  • 浏览器再次输入[http://localhost:8081/admin]打开,会跳转后台主页,安装成功后默认创建管理员账号并处于已登录状态。

  • 默认账号:admintpextadmin

  • 成功登录后台即说明安装完成


五、文档

https://gxzrnxb27j.k.topthink.com/@tpext-docs/about.html

六、演示

网址

  1. [tp6.1] http://gaosu.shenzhuo.vip:50469/admin

  2. [webman] http://gaosu.shenzhuo.vip:50468/admin

账号

admintpextadmin

注意事项

  • 请不要乱修改数据
  • 请不要上传非法内容或图片
  • 请不要上传您的重要数据到上面以防泄漏
  • 有问题请联系:ichynul#163.com (#换@),或通过群联系。
  • 演示网站偶尔不稳定,会定期重启

七、功能特性

1.模块化开发,核心功能都是通过 composer 安装的

主要扩展依赖

2.tpextbuilderUI模块基于bootstrapLight-Year-Admin-Template的后台模板, 封装了大部分常用组件 :

ColumnRowTabTableFormToolbarLayerContent

3.HasBuilder 封装了常用操作,可供控制器引入使用

实例

<?php

namespace app\admin\controller;

use app\common\logic\MemberLogic;
use app\common\model;
use think\Controller;
use tpext\builder\traits\HasBuilder;

/**
 * Undocumented class
 * @title 会员管理
 */
class Member extends Controller
{
    use HasBuilder;

    /**
     * Undocumented variable
     *
     * @var model\Member
     */
    protected $dataModel;

    protected function initialize()
    {
        $this->dataModel = new model\Member;
        $this->pageTitle = '会员管理';
        $this->enableField = 'status';
        $this->pagesize = 8;

        /* 作为下拉选择数据源 相关设置 */
        //显示
        $this->selectTextField = '{id}#{nickname}({mobile})';
        //like查询字段,$this->dataModel->where('username|nickname|mobile', 'like', $kwd);
        $this->selectSearch = 'username|nickname|mobile';
    }

    protected function filterWhere()
    {
        $searchData = request()->get();
        $where = [];
        if (!empty($searchData['id'])) {
            $where[] = ['id', 'eq', $searchData['id']];
        }
        if (!empty($searchData['username'])) {
            $where[] = ['username', 'like', '%' . $searchData['username'] . '%'];
        }
        if (!empty($searchData['nickname'])) {
            $where[] = ['nickname', 'like', '%' . $searchData['nickname'] . '%'];
        }
        if (!empty($searchData['mobile'])) {
            $where[] = ['mobile', 'like', '%' . $searchData['mobile'] . '%'];
        }
        if (isset($searchData['status']) && $searchData['status'] != '') {
            $where[] = ['status', 'eq', $searchData['status']];
        }
        if (isset($searchData['level']) && $searchData['level'] != '') {
            $where[] = ['level', 'eq', $searchData['level']];
        }
        if (!empty($searchData['province'])) {
            $where[] = ['province', 'eq', $searchData['province']];
            if (!empty($searchData['city'])) {
                $where[] = ['city', 'eq', $searchData['city']];
                if (!empty($searchData['area'])) {
                    $where[] = ['area', 'eq', $searchData['area']];
                }
            }
        }
        return $where;
    }

    /**
     * 构建搜索
     *
     * @return void
     */
    protected function builSearch()
    {
        $search = $this->search;

        $search->text('id', '会员id')->maxlength(20);
        $search->text('username', '账号')->maxlength(20);
        $search->text('nickname', '昵称')->maxlength(20);
        $search->text('mobile', '手机号')->maxlength(20);
        $search->select('level', '等级')->optionsData(model\MemberLevel::order('level')->select(), 'name', 'level')->afterOptions([0 => '普通会员']);
        $search->select('status', '状态')->options([0 => '禁用', 1 => '正常']);
        $search->select('province', '省份')->dataUrl(url('api/areacity/province'), 'ext_name')->withNext(
            $search->select('city', '城市')->dataUrl(url('api/areacity/city'), 'ext_name')->withNext(
                $search->select('area', '地区')->dataUrl(url('api/areacity/area'), 'ext_name')
            )
        );
    }

    /**
     * 构建表格
     *
     * @return void
     */
    protected function buildTable(&$data = [])
    {
        $table = $this->table;

        $table->show('id', 'ID');
        $table->image('avatar', '头像')->thumbSize(50, 50)->default('/static/images/touxiang.png');
        $table->show('username', '账号');
        $table->text('nickname', '昵称')->autoPost()->getWrapper()->addStyle('width:130px');
        $table->show('mobile', '手机号')->getWrapper()->addStyle('width:100px');
        $table->match('gender', '性别')->options([1 => '男', 2 => '女', 0 => '未知'])->getWrapper()->addStyle('width:50px');
        $table->show('age', '性别');
        $table->show('level_name', '等级');
        $table->show('money', model\MemberAccount::$types['money']);
        $table->show('points', model\MemberAccount::$types['points']);
        $table->show('pca', '省市区');
        $table->switchBtn('status', '状态')->default(1)->autoPost()->getWrapper()->addStyle('width:60px');
        $table->show('last_login_time', '最近登录')->getWrapper()->addStyle('width:150px');
        $table->show('create_time', '注册时间')->getWrapper()->addStyle('width:150px');

        $table->sortable('id,sort,money,points,commission,re_comm,shares,last_login_time');

        $table->getToolbar()
            ->btnAdd()
            ->btnEnableAndDisable('启用', '禁用')
            ->btnRefresh();

        $table->getActionbar()
            ->btnEdit()
            ->btnView()
            ->btnLink('account', url('/admin/memberaccount/add', ['member_id' => '__data.pk__']), '', 'btn-success', 'mdi-square-inc-cash');
    }

    /**
     * 构建表单
     *
     * @param boolean $isEdit
     * @param array $data
     */
    protected function builForm($isEdit, &$data = [])
    {
        $form = $this->form;

        $form->tab('基本信息');
        $form->image('avatar', '头像')->thumbSize(50, 50);
        $form->text('username', '账号')->required()->maxlength(20);
        $form->text('nickname', '昵称')->required()->maxlength(20);
        $form->text('mobile', '手机号')->maxlength(11);
        $form->text('email', '邮件')->maxlength(60);
        $form->number('age', '年龄')->max(100)->min(1)->default(18);
        $form->radio('gender', '性别')->options([0 => '未知', 1 => '男', 2 => '女'])->default(0);

        $form->tab('其他信息');
        $form->textarea('remark', '备注')->maxlength(255);
        $form->switchBtn('status', '状态')->default(1);

        if ($isEdit) {
            $form->show('last_login_time', '最近登录时间');
            $form->show('create_time', '注册时间');
            $form->show('update_time', '修改时间');
        }
    }

    /**
     * 保存数据
     *
     * @param integer $id
     * @return void
     */
    private function save($id = 0)
    {
        $data = request()->only([
            'avatar',
            'username',
            'nickname',
            'mobile',
            'email',
            'gender',
            'age',
            'status',
            'remark',
        ], 'post');

        $result = $this->validate($data, [
            'username|账号' => 'require',
            'nickname|昵称' => 'require',
            'mobile|手机号' => 'mobile',
            'age|年龄' => 'number',
        ]);

        if (true !== $result) {
            $this->error($result);
        }

        return $this->doSave($data, $id);
    }
}

八、QQ群

九、效果展示

alt 1 alt 2 alt 3 alt 4 alt 5 alt 6 alt 7 alt 8

十、鸣谢

Tpext 系列扩展和使用了以下框架技术或受到其启发:

  • Thinkphp
  • Botstrap
  • Lightyear-admin
  • Laravel-admin
  • Jquery
  • Layer
  • Bootstrap-number-input
  • Bootstrap-duallistbox
  • Bootstrap-datepicker
  • Bootstrap-daterangepicker
  • Bootstrap-colorpicker
  • Bootstrap-maxlength
  • Bootstrap-touchspin
  • Webuploader
  • FontIconPicker
  • Select2
  • Dropzone
  • ZTree
  • Jstree
  • CKEditor
  • Editormd
  • Tinymce
  • UEditor
  • WangEditor
  • AreaCity-JsSpider-StatsGov

十一、License

Apache2

ThinkPHP遵循Apache2开源协议发布,并提供免费使用。 版权所有Copyright © 2006-2016 by ThinkPHP (http://thinkphp.cn) All rights reserved。 ThinkPHP® 商标和著作权所有者为上海顶想信息科技有限公司。 Apache Licence是著名的非盈利开源组织Apache采用的协议。 该协议和BSD类似,鼓励代码共享和尊重原作者的著作权, 允许代码修改,再作为开源或商业软件发布。需要满足 的条件: 1. 需要给代码的用户一份Apache Licence ; 2. 如果你修改了代码,需要在被修改的文件中说明; 3. 在延伸的代码中(修改和有源代码衍生的代码中)需要 带有原来代码中的协议,商标,专利声明和其他原来作者规 定需要包含的说明; 4. 如果再发布的产品中包含一个Notice文件,则在Notice文 件中需要带有本协议内容。你可以在Notice中增加自己的 许可,但不可以表现为对Apache Licence构成更改。 具体的协议参考:http://www.apache.org/licenses/LICENSE-2.0 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

简介

基于 [tp5.1 / tp6.x / webman ]快速后台开发框架,UI使用[bootstrap],仅使用PHP代码即可完成界面布局(from、table)。集成CRUD快速生成模型、控制器、翻译等,集成后台权限控制,开箱即用。 展开 收起
PHP 等 2 种语言
Apache-2.0
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
PHP
1
https://gitee.com/tpext/myadmin.git
git@gitee.com:tpext/myadmin.git
tpext
myadmin
myadmin
6.0

搜索帮助