ThinkAdmin V6 官方文档

🚀 快速开始

欢迎使用 ThinkAdmin!本指南将帮助您在 5 分钟内快速搭建一个功能完整的后台管理系统。

🚀 快速体验

系统特点

  • 快速搭建: 5 分钟内完成系统搭建
  • 功能完整: 提供完整的后台管理功能
  • 易于使用: 简单易用的操作界面
  • 高度可定制: 支持灵活的定制和扩展
  • 现代化架构: 基于 ThinkPHP8(兼容 ThinkPHP6)和 LayUI
  • 插件生态: 丰富的插件生态系统

适用场景

  • 快速原型: 快速搭建项目原型
  • 学习研究: 学习后台管理系统开发
  • 商业项目: 用于商业项目开发
  • 个人项目: 个人项目和小型应用
  • 企业应用: 中大型企业管理系统
  • SaaS 平台: 多租户 SaaS 应用

演示效果

  • 在线演示: https://v6.thinkadmin.top
  • 后台管理: 完整的后台管理界面
  • 功能演示: 权限管理、文件管理、数据操作
  • 响应式设计: 支持多设备访问
  • 实时预览: 支持实时预览和调试
  • 移动端适配: 完美支持移动端操作

⚙️ 环境要求

系统要求

  • PHP 版本: PHP 7.1 或更高版本
  • Composer: 需要安装 Composer
  • 数据库: 支持 MySQL、PostgreSQL、SQLite
  • Web 服务器: Apache、Nginx 或内置服务器

推荐环境

  • PHP 版本: PHP 8.0 或更高版本
  • 内存: 至少 512MB 内存
  • 磁盘空间: 至少 100MB 可用空间
  • 网络: 稳定的网络连接

🚀 一键安装

1. 创建项目

# 创建项目(需要在英文目录下执行)
composer create-project zoujingli/thinkadmin my-project

# 进入项目目录
cd my-project

2. 初始化数据库

# 数据库初始化(默认使用 Sqlite)
php think migrate:run

3. 启动服务

# 启动内置服务器
php think run --host 127.0.0.1 --port 8000

4. 访问系统

打开浏览器访问:http://127.0.0.1:8000

  • 后台管理: http://127.0.0.1:8000/admin
  • 默认账号: admin
  • 默认密码: admin

📋 基础配置

1. 系统参数配置

登录后台后,进入 系统管理系统参数配置,配置以下参数:

  • 网站名称: 设置您的网站名称
  • 文件上传: 配置文件上传参数
  • 邮件配置: 配置邮件发送参数(可选)

2. 用户管理

进入 系统管理用户管理:

  • 修改默认管理员密码
  • 创建新的管理员账号
  • 配置用户权限

3. 菜单管理

进入 系统管理菜单管理:

  • 查看系统菜单结构
  • 添加自定义菜单
  • 配置菜单权限

🔧 开发指南

1. 创建用户管理模块

让我们创建一个完整的用户管理模块作为示例:

创建控制器

<?php
declare(strict_types=1);

namespace app\admin\controller;

use think\admin\Controller;
use think\admin\helper\QueryHelper;
use think\admin\model\SystemUser;

/**
 * 用户管理
 * @class User
 * @package app\admin\controller
 */
class User extends Controller
{
 /**
 * 用户列表
 * @auth true
 * @menu true
 * @throws \think\db\exception\DataNotFoundException
 * @throws \think\db\exception\DbException
 * @throws \think\db\exception\ModelNotFoundException
 */
 public function index()
 {
 SystemUser::mQuery()->layTable(function () {
 $this->title = '用户管理';
 }, function (QueryHelper $query) {
 $query->where(['is_deleted' => 0, 'status' => 1]);
 $query->like('username,nickname,phone')
 ->equal('status')
 ->dateBetween('create_at')
 ->order('id desc');
 });
 }

 /**
 * 添加用户
 * @auth true
 */
 public function add()
 {
 SystemUser::mForm('form');
 }

 /**
 * 编辑用户
 * @auth true
 */
 public function edit()
 {
 SystemUser::mForm('form');
 }

 /**
 * 修改用户状态
 * @auth true
 */
 public function state()
 {
 $this->_checkInput();
 SystemUser::mSave($this->_vali([
 'status.in:0,1' => '状态值范围异常!',
 'status.require' => '状态值不能为空!',
 ]));
 }

 /**
 * 删除用户
 * @auth true
 */
 public function remove()
 {
 $this->_checkInput();
 SystemUser::mDelete();
 }

 /**
 * 检查输入变量(私有方法,防止删除系统超级账号)
 */
 private function _checkInput()
 {
 if (in_array('10000', str2arr(input('id', '')))) {
 $this->error('系统超级账号禁止删除!');
 }
 }

 /**
 * 表单数据处理
 * @param array $data
 * @throws \think\db\exception\DataNotFoundException
 * @throws \think\db\exception\DbException
 * @throws \think\db\exception\ModelNotFoundException
 */
 protected function _form_filter(array &$data)
 {
 if ($this->request->isPost()) {
 // 检查资料是否完整
 empty($data['username']) && $this->error('登录账号不能为空!');

 // 处理权限配置(实际项目中的权限处理)
 $data['authorize'] = arr2str($data['authorize'] ?? []);

 if (empty($data['id'])) {
 // 新增:检查账号是否重复
 $map = ['username' => $data['username'], 'is_deleted' => 0];
 if (SystemUser::mk()->where($map)->count() > 0) {
 $this->error("账号已经存在,请使用其它账号!");
 }
 // 新添加的用户密码与账号相同
 $data['password'] = md5($data['username']);
 } else {
 // 编辑:不允许修改用户名
 unset($data['username']);
 }
 } else {
 // GET 请求:准备表单数据
 // 权限绑定处理(将字符串转换为数组)
 $data['authorize'] = str2arr($data['authorize'] ?? '');
 }
 }
}

创建视图文件

列表页面 (app/admin/view/user/index.html):

推荐使用 layTable 组件,支持动态高度、搜索绑定等功能:

{extend name="admin@public/container" /}

{block name="button"}
<button data-open='{:url("add")}' data-title="添加用户" class='layui-btn layui-btn-sm layui-btn-primary'>
 <i class="layui-icon layui-icon-add-1"></i> 添加用户
</button>
<button data-action='{:url("remove")}' data-rule="id#{key}" data-confirm="确定要删除选中的用户吗?" class='layui-btn layui-btn-sm layui-btn-danger'>
 <i class="layui-icon layui-icon-delete"></i> 删除用户
</button>
{/block}

{block name="content"}
<div class="think-box-shadow">
 <table id="UserData" data-url="{:sysuri()}" data-target-search="form.form-search"></table>
</div>

<script>
$(function () {
 // 动态创建 layui.table 表格
 $('#UserData').layTable({
 even: true, 
 height: 'full',
 sort: {field: 'id', type: 'desc'},
 cols: [[
 {checkbox: true},
 {field: 'id', title: 'ID', width: 80, sort: true, align: 'center'},
 {field: 'username', title: '登录账号', minWidth: 120, sort: true},
 {field: 'nickname', title: '用户昵称', minWidth: 120},
 {field: 'phone', title: '手机号', minWidth: 120},
 {field: 'email', title: '邮箱', minWidth: 150},
 {field: 'status', title: '状态', width: 100, align: 'center', templet: '#statusTpl'},
 {field: 'create_at', title: '创建时间', minWidth: 170, align: 'center', sort: true},
 {toolbar: '#toolbar', title: '操作', align: 'center', fixed: 'right', width: 150}
 ]]
 });
});
</script>

<script type="text/html" id="statusTpl">
 {{# if(d.status == 1){ }}
 <span class="layui-badge layui-bg-green">正常</span>
 {{# } else { }}
 <span class="layui-badge">禁用</span>
 {{# } }}
</script>

<script type="text/html" id="toolbar">
 <!--{if auth('edit')}-->
 <a data-open='{:url("edit")}?id={{d.id}}' data-title="编辑用户" class="layui-btn layui-btn-xs layui-btn-normal">编辑</a>
 <!--{/if}-->
 <!--{if auth('remove')}-->
 <a data-action='{:url("remove")}' data-value="{{d.id}}" data-confirm="确定要删除这个用户吗?" class="layui-btn layui-btn-xs layui-btn-danger">删除</a>
 <!--{/if}-->
</script>
{/block}

表单页面 (app/admin/view/user/form.html):

{extend name="admin@public/container" /}

{block name="content"}
<form class="layui-form layui-card" data-auto="true" method="post" autocomplete="off">
 <div class="layui-card-body padding-left-40">
 <div class="layui-form-item">
 <label class="layui-form-label">用户名</label>
 <div class="layui-input-block">
 <input class="layui-input" name="username" value="{$vo.username|default=''}" placeholder="请输入用户名" required>
 </div>
 </div>
 <div class="layui-form-item">
 <label class="layui-form-label">昵称</label>
 <div class="layui-input-block">
 <input class="layui-input" name="nickname" value="{$vo.nickname|default=''}" placeholder="请输入昵称">
 </div>
 </div>
 <div class="layui-form-item">
 <label class="layui-form-label">密码</label>
 <div class="layui-input-block">
 <input class="layui-input" name="password" type="password" placeholder="请输入密码">
 <div class="layui-form-mid layui-word-aux">不填写则不修改密码</div>
 </div>
 </div>
 <div class="layui-form-item">
 <label class="layui-form-label">手机号</label>
 <div class="layui-input-block">
 <input class="layui-input" name="phone" value="{$vo.phone|default=''}" placeholder="请输入手机号">
 </div>
 </div>
 <div class="layui-form-item">
 <label class="layui-form-label">邮箱</label>
 <div class="layui-input-block">
 <input class="layui-input" name="email" value="{$vo.email|default=''}" placeholder="请输入邮箱">
 </div>
 </div>
 <div class="layui-form-item">
 <label class="layui-form-label">状态</label>
 <div class="layui-input-block">
 <input type="radio" name="status" value="1" title="正常" {if $vo.status|default=1 eq 1}checked{/if}>
 <input type="radio" name="status" value="0" title="禁用" {if $vo.status|default=1 eq 0}checked{/if}>
 </div>
 </div>
 </div>

 {notempty name='vo.id'}<input type='hidden' value='{$vo.id}' name='id'>{/notempty}

 <div class="layui-form-item text-center">
 <button class="layui-btn" type='submit'>保存数据</button>
 <button class="layui-btn layui-btn-danger" type='button' data-confirm="确定要取消编辑吗?" data-close>取消编辑</button>
 </div>
</form>
{/block}

2. 路由配置说明

ThinkAdmin 使用自动路由,无需手动配置路由。系统会根据控制器和方法名自动生成路由:

  • 控制器 User → 路由前缀 /admin/user
  • 方法 index() → 路由 /admin/user/index
  • 方法 add() → 路由 /admin/user/add
  • 方法 edit() → 路由 /admin/user/edit
  • 方法 state() → 路由 /admin/user/state
  • 方法 remove() → 路由 /admin/user/remove

如果需要自定义路由,可以在 app/admin/route/demo.php 中配置:

<?php
use think\facade\Route;

// 自定义路由示例
Route::group('user', function () {
 Route::get('list', 'User/index');
 Route::get('create', 'User/add');
 Route::get('update', 'User/edit');
});

📦 安装插件

1. 安装微信管理模块

composer require zoujingli/think-plugs-wechat

2. 安装其他插件

# 安装账号管理
composer require zoujingli/think-plugs-account

# 安装支付管理
composer require zoujingli/think-plugs-payment

🎯 下一步

🛠️ 开发技巧

1. 快速创建模块

推荐手动创建文件,按照以下步骤创建模块:

创建控制器 (app/admin/controller/User.php):

<?php
declare(strict_types=1);

namespace app\admin\controller;

use think\admin\Controller;

/**
 * 用户管理
 * @class User
 * @package app\admin\controller
 */
class User extends Controller
{
 // 控制器方法
}

创建模型 (app/admin/model/SystemUser.php):

<?php
declare(strict_types=1);

namespace app\admin\model;

use think\admin\Model;

/**
 * 用户模型
 * @class SystemUser
 * @package app\admin\model
 */
class SystemUser extends Model
{
 // 模型方法
}

注意:模型类名必须以 System 开头,如 SystemUserSystemMenu,这是 ThinkAdmin 的命名规范。

创建视图 (app/admin/view/user/index.html):

{extend name="admin@public/container" /}

{block name="content"}
<!-- 页面内容 -->
{/block}

2. 数据库操作

// 使用 QueryHelper 进行数据查询(推荐使用模型方法)
SystemUser::mQuery()->layTable(function () {
 $this->title = '用户管理';
}, function (QueryHelper $query) {
 $query->where(['is_deleted' => 0]);
 $query->like('username,email')
 ->equal('status')
 ->dateBetween('create_at')
 ->order('id desc');
});

// 使用 FormHelper 处理表单
SystemUser::mForm('form');

// 使用 SaveHelper 更新状态
SystemUser::mSave($this->_vali([
 'status.require' => '状态不能为空!',
 'status.in:0,1' => '状态值范围异常!'
]));

// 使用 DeleteHelper 删除数据
SystemUser::mDelete();

3. 权限控制

/**
 * 用户管理
 * @auth true # 需要权限验证
 * @menu true # 显示在菜单中
 * @throws \think\db\exception\DataNotFoundException
 * @throws \think\db\exception\DbException
 * @throws \think\db\exception\ModelNotFoundException
 */
public function index()
{
 SystemUser::mQuery()->layTable();
}

/**
 * 修改用户资料
 * @login true # 只需要登录即可访问
 */
public function info()
{
 // 个人资料修改,登录用户即可访问
}

4. 前端开发

// 使用 layTable 组件(推荐方式)
$(function () {
 $('#UserData').layTable({
 even: true, 
 height: 'full',
 sort: {field: 'id', type: 'desc'},
 cols: [[
 {checkbox: true},
 {field: 'id', title: 'ID', width: 80, sort: true, align: 'center'},
 {field: 'username', title: '用户名', minWidth: 120, sort: true},
 {field: 'email', title: '邮箱', minWidth: 150},
 {field: 'create_at', title: '创建时间', minWidth: 170, align: 'center', sort: true},
 {toolbar: '#toolbar', title: '操作', align: 'center', fixed: 'right'}
 ]]
 });
});

// 或者使用原生 LayUI Table
layui.use(['form', 'table', 'layer'], function(){
 var form = layui.form;
 var table = layui.table;
 var layer = layui.layer;

 // 初始化表格
 table.render({
 elem: '#user-table',
 url: '{:sysuri()}',
 cols: [[
 {field: 'id', title: 'ID', width: 80},
 {field: 'username', title: '用户名', minWidth: 120},
 {field: 'email', title: '邮箱', minWidth: 150},
 {field: 'create_at', title: '创建时间', minWidth: 170}
 ]]
 });
});

🚀 性能优化

1. 开启缓存

// 在 config/cache.php 中配置
'default' => 'redis',
'stores' => [
 'redis' => [
 'type' => 'redis',
 'host' => '127.0.0.1',
 'port' => 6379,
 'password' => '',
 'select' => 0,
 'timeout' => 0,
 'expire' => 0,
 'persistent' => false,
 'prefix' => '',
 ],
],

2. 数据库优化

-- 为常用查询字段添加索引
CREATE INDEX idx_user_status ON system_user(status);
CREATE INDEX idx_user_create_at ON system_user(create_at);
CREATE INDEX idx_user_status_time ON system_user(status, create_at);

注意:表名必须以应用模块名称作为前缀,如 system_usersystem_menu(system 模块)、account_user(account 模块)、wechat_auth(wechat 模块)。这是 ThinkAdmin 的命名规范,用于区分不同应用模块的数据表。

3. 静态资源优化

# 压缩 CSS 和 JS 文件
npm run build

# 开启 Gzip 压缩
# 在 Nginx 配置中添加
gzip on;
gzip_types text/css application/javascript;

🔧 调试技巧

1. 开启调试模式

ThinkAdmin 的运行模式通过后台配置,系统会自动生成 runtime/.env 文件保存配置。

推荐方式:通过后台配置

  1. 登录后台管理系统
  2. 进入 系统管理系统参数配置
  3. 找到 运行模式 配置项
  4. 选择 开发模式生产模式
  5. 点击 保存 按钮

重要提示:runtime/.env 文件是后台自动生成的配置文件,请勿手动修改。所有配置应通过后台管理系统进行,系统会自动更新该文件。详细说明请参考 运行模式文档

2. 使用日志记录

// 记录调试信息
$this->app->log->info('用户登录', ['user_id' => $userId]);
$this->app->log->error('数据库错误', ['error' => $e->getMessage()]);

3. 数据库调试

// 开启 SQL 日志
$this->app->db->getLastSql();

// 查看执行的 SQL 语句
$sql = $this->app->db->getLastSql();
echo $sql;

❓ 常见问题

Q: 无法访问后台? A: 检查 PHP 版本是否满足要求,确保数据库已正确初始化。

Q: 文件上传失败? A: 进入后台系统参数配置,设置正确的文件上传参数。

Q: 如何修改后台入口? A: 在系统参数配置中修改后台入口地址,提升安全性。

Q: 如何添加自定义菜单? A: 在插件开发中定义菜单,或直接在数据库中插入菜单记录。

Q: 如何自定义主题? A: 修改 public/static/theme/ 目录下的样式文件。

Q: 如何扩展功能? A: 通过插件系统或直接修改源码来扩展功能。

📚 学习资源

官方文档

社区资源


恭喜! 您已经成功搭建了 ThinkAdmin 后台管理系统。现在可以开始您的开发之旅了!

下一步建议:

  1. 📖 阅读 完整安装指南
  2. 🔧 了解 系统架构
  3. 📚 查看 开发文档
  4. 🔌 探索 插件生态
  5. ⭐ 学习 最佳实践
最近更新:
Contributors: Anyon

AltStyle によって変換されたページ (->オリジナル) /