cootaa / admin
基于Laravel 6.x+AdminLTE 3的后台脚手架
4.0.13
2020-08-24 09:20 UTC
Requires
- php: ^7.2
- caouecs/laravel-lang: ~4.0
- doctrine/dbal: ^2.10
- fideloper/proxy: ^4.0
- fruitcake/laravel-cors: ^1.0
- gregwar/captcha: ^1.1
- iidestiny/laravel-filesystem-oss: ^2.0
- intervention/image: ^2.5
- laravel/framework: ^6.2
- laravel/tinker: ^2.0
- maatwebsite/excel: ^3.1
- overtrue/easy-sms: ^1.1
- overtrue/wechat: ^4.2
- tymon/jwt-auth: 1.0.*
Requires (Dev)
- facade/ignition: ^1.4
- fzaninotto/faker: ^1.4
- mockery/mockery: ^1.0
- nunomaduro/collision: ^3.0
- overtrue/laravel-query-logger: ^1.0
- phpunit/phpunit: ^8.0
README
项目概述
COTA-ADMIN 基于 Laravel 6 开发,用于一般商城、网站开发用的后台及前端接口框架。
通过 composer 建立新的项目
composer create-project --prefer-dist cootaa/admin myproject
更新说明
版本 4.0.12.20200818
- 修复后台视图字段名错误;
- 修复 OSS 设置问题,
- 修复文章添加时部分字段没有初始值问题;
- 删除一些不必要的表单验证规则;
- 日志中间件支持下载文件和上传图片;
- 添加微信小程序授权相关接口;
版本 4.0.11.20200526
- 修改视图编辑器组件;
- 增加表单日期时间选择组件;
- 修复阿里云发送手机验证码接口问题;
- 增加身份证二合一校验类,身份证实人认证校验类;
版本 4.0.10.20200512
- OSS 改用 laravel-filesystem-oss 包;
- 增加 laravel-excel;
版本 4.0.9.20200505
- 命令增加命名空间; 增加管理后台控制器基类; 增加页面权限检测,接口暂时不检测; 增加百度编辑器组件;
- 修改 composer.json 设置,强制更新 jwt:secret;
- 统一后台 cookie 名称使用 .env 的设置;
- 增加徽标和创建项目命令;
- 可设置内置后台的上下文路径;
- 只有设置了使用内置后台时才加载后台页面路由;
版本 4.0.1.20200505
- 增加默认管理后台,前端使用 adminlte 3 开发;
- 增加导入初始化数据命令 cota:data-init;
代码开发规范
https://learnku.com/docs/laravel-specification
资源
教程
国内 composer 镜像:
阿里云:https://developer.aliyun.com/mirror
其他常用镜像资源:
清华:https://mirrors.tuna.tsinghua.edu.cn/
brew 镜像设置:https://mirror.tuna.tsinghua.edu.cn/help/homebrew/
开发注意点
- 不使用 Laravel 页面模板或 Laravel UI,只写供前端调用的接口;
- 除了默认后台的页面,接口不使用 Session,统一使用 JWT;
- 本地开发使用 file 缓存,测试环境或者线上使用 redis 缓存;
- 日志使用 Log Facades 保存在 log 文件中,暂未接入阿里云日志服务;
- 前端使用基于 vue-element-admin
- 所有 Model 继承 BaseModel;
- 后台接口继承 Api\Admin\Controller;
- 前端接口继承 Api\Controller;
- 表单验证规则统一写在 Request 类,统一继承 BaseRequest 类;
- 权限判断统一使用 Policy;
- 独立第三方库或自定义类放在 App\Libraries;
- 优先使用 composer 安装库;
- 辅助函数写在 app\helpers.php;
- 图片处理类,微信服务器信息处理类放在 app\Handlers;
- 后台接口路由设置 routes\admin_api.php,前端接口路由设置 routes\api.php;
- 数据库设计一律使用 Laravel 的 migrate,不再使用 MySQL Workbench;
- 所有 .env 文件里的常量不能直接通过 env('XXX') 在代码中直接使用,必须写相应的 config 文件保存在 app\config 目录,然后在代码中通过 config('xxx.xx.xx') 调用;
- Laravel 6.0 后不需要使用 DingoApi 框架处理 api 接口,直接用原生的 routes;
- 测试接口时资源控制器处理 PUT 或者 PATCH 请求时,需要将 "Content-Type" 设为 "application/x-www-form-urlencode" 才能接收到,DELETE 不用
- 部分更新请求用 PATCH
- 密码确认字段为 password_confirmation,其他确认字段名 xxx_confirmation;
- 所有金额保存到数据库使用 Decimal 字段,长度(10,2);
- 数据库的任何修改都要新建新的 migrate,不能修改已有的 migrate 文件,不然发布到线上后是不会执行的;
- 创建新表时,除了 migrate,还要有对应的 factory 和 seeder,用于测试时创建测试数据;
- 所有字段都必须要有注释!!!
- 数据库统一使用 utf8mb4 和 utf8mb4-unicode-ci;
- 如果在本地开发时在 .env 文件里新增加了设置,需要同步到 .env.example 文件;
- 默认后台的模板页面或者组件中的 js 和 css 都直接写在对应的页面或组件上,如果是共用的,就写在 default.blade.php 上,并且在命名时加上页面或组件名作为命名空间。这样做让各自的 css 和 js 都更易于维护,同时也可以通过 route() 方法统一输出路径。绝对不能在页面上 hard code 写上各种路径。
功能如下
默认管理后台
- 前端使用 adminlte 3;
- 模板位于目录 resources/views;
- 前端静态文件 js,css 等位于目录 public/static;
- 后台菜单权限功能已实现,支持多角色;
- 有 单图片上传组件 和 百度编辑器,图片上传均直传到 OSS,编辑器支持批量上传 图片, 涂鸦, 视频, 附件;
- 网页端登录状态使用 session,接口使用 jwt,登录后会在浏览器记录 jwt 的 cookie,过期时间与 session 一样,默认 120 分钟,当 cookie 过期的同时 session 会强行过期;
后台接口
- 管理员增删改查,修改状态;
- 角色管理
- 能力管理
- 会员管理
- 管理员日志
- 文章管理
- 文章分类管理
- 页面管理
- 商家管理
- 店铺管理
- 幻灯片管理
- 幻灯片元素管理
- 品牌管理
- 商品分类管理
- 商品SPU管理
- 商品SKU管理
- 购物车管理
- 订单管理
- 快递公司管理
- 会员送货地址管理
- 退款单管理
前端接口
- 会员注册登录(手机验证码,手机密码,昵称密码)
- 会员个人信息,会员退出登录
- 手机号绑定
- 手机验证码,图形验证码
- 图片通过 JS 直传 OSS
- 微信 H5,小程序授权登录
- 微信 JSSDK 签名接口
- 微信支付
- 通莞支付
- 购物车接口
- 页面接口
- 文章接口
- 收件地址接口
- 商品分类接口
- 商品接口
- 订单接口
计划中功能
后台接口
1. 权限控制策略丢弃
- 商品导入导出
- 订单导出
- 快递信息导入
- 会员信息导入、导出
- 会员统计
- 商品统计
- 订单统计
前端接口
1. 权限控制策略丢弃
- 团购
- 优惠券:第二件半价,代金券
- 秒杀,砍价
- 预购
- 兑换卡
- 充值
- 二级分佣,提现
- 申请退款接口,按order_sku退款;
- 支付宝支持
- 阿里云日志
- 微信图片、视频、语音上传(第三方框架有,未写接口)
- 微信开放平台(第三方框架有,未写接口)
- H5抽奖、兑奖接口;
运行环境
- PHP >= 7.2.0
- BCMath PHP 扩展
- Ctype PHP 扩展
- JSON PHP 扩展
- Mbstring PHP 扩展
- OpenSSL PHP 扩展
- PDO PHP 扩展
- Tokenizer PHP 扩展
- XML PHP 扩展
- 数据库使用MySQL 5.7
开发环境部署 / 安装
开发环境
- 下载代码到本地;
- 运行
composer install
; - 复制
.env.example
为.env
,修改.env
中的相关设置; - 目录storage和bootstrap/cache需要可写权限;运行命令
php artisan key:generate
和php artisan jwt:secret
生成新的密钥; - 如果使用的是MySQL 5.6,需要修改文件
AppServiceProvider
的27
行,否则数据库索引报错; - 运行
php artisan migrate
,建立数据表结构。如果需要测试数据,就运行php artisan migrate --seed
; - 运行
php artisan cota:data-init
,导入初始化数据; - 运行
php artisan serve
,打开本地网站;
代码上线
- Nginx 配置参考代码:
server { listen 80; server_name www.domain.com #域名 # SSL设置 # listen 443 ssl; # ssl_certificate /.../fullchain.pem; # ssl_certificate_key /.../privkey.pem; # ssl_session_timeout 5m; # ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # ssl_ciphers AESGCM:ALL:!DH:!EXPORT:!RC4:+HIGH:!MEDIUM:!LOW:!aNULL:!eNULL; # ssl_prefer_server_ciphers on; # error_page 497 https://$host&uri?$args; root /.../php/public; #根目录 index index.html index.htm index.php; charset utf-8; # 跨域 add_header 'Access-Control-Allow-Origin' '*'; add_header 'Access-Control-Allow-Credentials' 'true'; add_header 'Access-Control-Allow-Methods' 'DELETE, OPTION, POST, GET'; add_header 'Access-Control-Allow-Headers' 'X-Requested-With, Content-Type, Authorization'; add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"; add_header X-Content-Type-Options nosniff; location / { try_files $uri $uri/ /index.php?$query_string; } location = /favicon.ico { access_log off; log_not_found off; } location = /robots.txt { access_log off; log_not_found off; } error_page 404 /index.php; location ~ \.php$ { fastcgi_pass 127.0.0.1:9073; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; include fastcgi_params; } location ~ /\.(?!well-known).* { deny all; } }
- 目录
storage
和bootstrap/cache
需要可写权限; - 运行命令
php artisan key:generate
和php artisan jwt:secret
生成新的密钥; - 运行命令
php artisan config:cache
和php artisan route:cache
优化; - 每次更新都需要执行
php artisan config:clear
,php artisan config:cache
,php artisan route:clear
,php artisan route:cache
; - 运行命令
php artisan clear-compiled
,php artisan optimize --force
优化类加载; - 优化composer
composer dumpautoload -o
,如果运行了php artisan optimize --force
就不需要了; - 程序使用
redis
缓存; - 关闭
debug
,APP_DEBUG=false
;
服务器架构说明
扩展包说明
自定义 Artisan 命令列表
- 导入初始化数据
php artisan cota:data-init