🚀 快速开始
欢迎使用 ThinkAdmin!本指南将帮助您在 5 分钟内快速搭建一个功能完整的后台管理系统。
🚀 快速体验
系统特点
- 快速搭建: 5 分钟内完成系统搭建
- 功能完整: 提供完整的后台管理功能
- 易于使用: 简单易用的操作界面
- 高度可定制: 支持灵活的定制和扩展
- 现代化架构: 基于 ThinkPHP 6/8 和 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-project2. 初始化数据库
# 数据库初始化(默认使用 Sqlite)
php think migrate:run3. 启动服务
# 启动内置服务器
php think run --host 127.0.0.1 --port 80004. 访问系统
打开浏览器访问:http://127.0.0.1:8000
- 后台管理:
http://127.0.0.1:8000/admin - 默认账号:
admin - 默认密码:
admin
📋 基础配置
1. 系统参数配置
登录后台后,进入 系统管理 → 系统参数配置,配置以下参数:
- 网站名称: 设置您的网站名称
- 文件上传: 配置文件上传参数
- 邮件配置: 配置邮件发送参数(可选)
2. 用户管理
进入 系统管理 → 用户管理:
- 修改默认管理员密码
- 创建新的管理员账号
- 配置用户权限
3. 菜单管理
进入 系统管理 → 菜单管理:
- 查看系统菜单结构
- 添加自定义菜单
- 配置菜单权限
🔧 开发指南
1. 创建用户管理模块
让我们创建一个完整的用户管理模块作为示例:
创建控制器
<?php
namespace app\admin\controller;
use think\admin\Controller;
use think\admin\model\SystemUser;
class UserController extends Controller
{
/**
* 用户列表
* @auth true
* @menu true
*/
public function index()
{
$this->title = '用户管理';
// 使用 QueryHelper 进行数据查询和分页
$this->_query('SystemUser')
->like('username,nickname,phone')
->equal('status')
->dateBetween('create_at')
->order('id desc')
->page();
}
/**
* 添加用户
* @auth true
* @menu true
*/
public function add()
{
$this->title = '添加用户';
$this->_form('SystemUser', 'form');
}
/**
* 编辑用户
* @auth true
* @menu true
*/
public function edit()
{
$this->title = '编辑用户';
$this->_form('SystemUser', 'form');
}
/**
* 删除用户
* @auth true
*/
public function remove()
{
$this->_delete('SystemUser');
}
/**
* 表单数据处理
*/
protected function _form_filter(&$data)
{
if ($this->request->isPost()) {
// 验证必填字段
if (empty($data['username'])) {
$this->error('用户名不能为空');
}
if (empty($data['password']) && empty($data['id'])) {
$this->error('密码不能为空');
}
// 密码加密
if (!empty($data['password'])) {
$data['password'] = md5($data['password']);
} else {
unset($data['password']);
}
}
}
}创建视图文件
列表页面 (app/admin/view/user/index.html):
{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 class="layui-table" lay-skin="line">
<thead>
<tr>
<th class="text-left nowrap">用户信息</th>
<th class="text-left nowrap">联系方式</th>
<th class="text-center nowrap">状态</th>
<th class="text-center nowrap">创建时间</th>
<th class="text-center nowrap">操作</th>
</tr>
</thead>
<tbody>
{foreach $list as $key => $vo}
<tr>
<td class="nowrap">
<div class="inline-block sub-text">
<div>用户名:{$vo.username|default='--'}</div>
<div>昵称:{$vo.nickname|default='--'}</div>
</div>
</td>
<td class="nowrap">
<div class="inline-block sub-text">
<div>手机:{$vo.phone|default='--'}</div>
<div>邮箱:{$vo.email|default='--'}</div>
</div>
</td>
<td class="text-center nowrap">
{if $vo.status eq 1}
<span class="layui-badge layui-bg-green">正常</span>
{else}
<span class="layui-badge">禁用</span>
{/if}
</td>
<td class="text-center nowrap">{$vo.create_at|format_datetime}</td>
<td class="text-center nowrap">
<a data-open='{:url("edit")}?id={$vo.id}' data-title="编辑用户" class="layui-btn layui-btn-xs layui-btn-normal">编辑</a>
<a data-action='{:url("remove")}' data-value="{$vo.id}" data-confirm="确定要删除这个用户吗?" class="layui-btn layui-btn-xs layui-btn-danger">删除</a>
</td>
</tr>
{/foreach}
</tbody>
</table>
{empty name='list'}<span class="notdata">没有记录哦</span>{else}{$pagehtml|raw|default=''}{/empty}
</div>
{/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. 添加路由配置
在 app/admin/route.php 中添加:
<?php
use think\facade\Route;
// 用户管理路由
Route::group('user', function () {
Route::get('', 'User/index');
Route::get('add', 'User/add');
Route::get('edit', 'User/edit');
Route::post('save', 'User/save');
Route::post('remove', 'User/remove');
});📦 安装插件
1. 安装微信管理模块
composer require zoujingli/think-plugs-wechat2. 安装其他插件
# 安装账号管理
composer require zoujingli/think-plugs-account
# 安装支付管理
composer require zoujingli/think-plugs-payment🎯 下一步
🛠️ 开发技巧
1. 快速创建模块
# 使用命令行工具快速创建模块
php think make:controller admin/User
php think make:model admin/User
php think make:view admin/user/index2. 数据库操作
// 使用 QueryHelper 进行数据查询
$this->_query('user')
->like('username,email')
->equal('status')
->dateBetween('create_time')
->order('id desc')
->page();
// 使用 FormHelper 处理表单
$this->_form('user', 'form');
// 使用 SaveHelper 更新状态
$this->_save('user', $this->_vali([
'status.require' => '状态不能为空',
'status.in:0,1' => '状态值无效'
]));3. 权限控制
/**
* 用户管理
* @auth true # 需要权限验证
* @menu true # 显示在菜单中
*/
public function index()
{
// 控制器代码
}4. 前端开发
// 使用 LayUI 组件
layui.use(['form', 'table', 'layer'], function(){
var form = layui.form;
var table = layui.table;
var layer = layui.layer;
// 初始化表格
table.render({
elem: '#user-table',
url: '/admin/user/data',
cols: [[
{field: 'id', title: 'ID'},
{field: 'username', title: '用户名'},
{field: 'email', title: '邮箱'},
{field: 'create_time', title: '创建时间'}
]]
});
});🚀 性能优化
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 user(status);
CREATE INDEX idx_user_create_time ON user(create_time);
CREATE INDEX idx_user_status_time ON user(status, create_time);3. 静态资源优化
# 压缩 CSS 和 JS 文件
npm run build
# 开启 Gzip 压缩
# 在 Nginx 配置中添加
gzip on;
gzip_types text/css application/javascript;🔧 调试技巧
1. 开启调试模式
// 在 config/app.php 中设置
'debug' => true,
'log' => [
'level' => 'debug',
'file' => 'debug.log'
],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 后台管理系统。现在可以开始您的开发之旅了!
下一步建议:
