cootaa/admin

基于Laravel 6.x+AdminLTE 3的后台脚手架

4.0.13 2020-08-24 09:20 UTC

This package is auto-updated.

Last update: 2022-01-12 19:02:31 UTC


README

Packagist Version Packagist PHP Version Support Packagist License GitHub code size in bytes GitHub tag (latest by date)

项目概述

COTA-ADMIN 基于Laravel 6开发,用于一般商城、网站开发用的后台及前端接口框架。

通过composer建立新的项目

composer create-project --prefer-dist cootaa/admin myproject

更新说明

版本4.0.12.20200818

  1. 修复后台视图字段名错误;
  2. 修复 OSS设置问题,
  3. 修复文章添加时部分字段没有初始值问题;
  4. 删除一些不必要的表单验证规则;
  5. 日志中间件支持下载文件和上传图片;
  6. 添加微信小程序授权相关接口;

版本4.0.11.20200526

  1. 修改视图编辑器组件;
  2. 增加表单日期时间选择组件;
  3. 修复阿里云发送手机验证码接口问题;
  4. 增加身份证二合一校验类,身份证实人认证校验类;

版本4.0.10.20200512

  1. OSS改用laravel-filesystem-oss包;
  2. 增加laravel-excel;

版本4.0.9.20200505

  1. 命令增加命名空间; 增加管理后台控制器基类; 增加页面权限检测,接口暂时不检测; 增加百度编辑器组件;
  2. 修改composer.json设置,强制更新jwt:secret;
  3. 统一后台cookie名称使用.env的设置;
  4. 增加徽标和创建项目命令;
  5. 可设置内置后台的上下文路径;
  6. 只有设置了使用内置后台时才加载后台页面路由;

版本4.0.1.20200505

  1. 增加默认管理后台,前端使用adminlte 3开发;
  2. 增加导入初始化数据命令cota:data-init

代码开发规范

https://learnku.com/docs/laravel-specification

资源

教程

https://learnku.com

国内 composer 镜像:

阿里云:https://developer.aliyun.com/mirror

其他常用镜像资源:

清华:https://mirrors.tuna.tsinghua.edu.cn/

brew 镜像设置:https://mirror.tuna.tsinghua.edu.cn/help/homebrew/

开发注意点

  1. 不使用Laravel页面模板或Laravel UI,只写供前端调用的接口;
  2. 除了默认后台的页面,接口不使用Session,统一使用JWT;
  3. 本地开发使用file缓存,测试环境或者线上使用redis缓存;
  4. 日志使用Log Facades保存在log文件中,暂未接入阿里云日志服务;
  5. 前端使用基于vue-element-admin
  6. 所有 Model 继承 BaseModel;
  7. 后台接口继承Api\Admin\Controller
  8. 前端接口继承Api\Controller;
  9. 表单验证规则统一写在Request类,统一继承BaseRequest类;
  10. 权限判断统一使用Policy
  11. 独立第三方库或自定义类放在App\Libaries
  12. 优先使用composer安装库;
  13. 辅助函数写在app\helpers.php
  14. 图片处理类,微信服务器信息处理类放在app\Handlers
  15. 后台接口路由设置routes\admin_api.php,前端接口路由设置routes\api.php
  16. 数据库设计一律使用Laravel的migrate,不再使用MySQL Workbench
  17. 所有 .env文件里的常量不能直接通过env('XXX')在代码中直接使用,必须写相应的 config 文件保存在app\config目录,然后在代码中通过config('xxx.xx.xx')调用;
  18. Laravel 6.0后不需要使用DingoApi框架处理 api 接口,直接用原生的 routes;
  19. 测试接口时资源控制器处理PUT或者PATCH请求时,需要将"Content-Type"设为"application/x-www-form-urlencode"才能接收到,DELETE不用
  20. 部分更新请求用PATCH
  21. 密码确认字段为password_confirmation,其他确认字段名xxx_confirmation
  22. 所有金额保存到数据库使用 Demical 字段,长度(10,2);
  23. 数据库的任何修改都要新建新的migrate,不能修改已有的migrate文件,不然发布到线上后是不会执行的;
  24. 创建新表时,除了 migrate,还要有对应的 factory 和 seeder,用于测试时创建测试数据;
  25. 所有字段都必须要有注释!!!
  26. 数据库统一使用utf8mb4utf8mb4-unicode-ci;
  27. 如果在本地开发时在.env文件里新增加了设置,需要同步到.env.example文件;
  28. 默认后台的模板页面或者组件中的 js 和 css 都直接写在对应的页面或组件上,如果是共用的,就写在 default.blade.php 上,并且在命名时加上页面或组件名作为命名空间。 这样做让各自的 css 和 js 都更易于维护,同时也可以通过 route()方法统一输出路径。绝对不能在页面上 hard code 写上各种路径。

功能如下

默认管理后台

  • 前端使用adminlte 3
  • 模板位于目录resources/views
  • 前端静态文件jscss等位于目录public/static
  • 后台菜单权限功能已实现,支持多角色;
  • 单图片上传组件百度编辑器,图片上传均直传到OSS,编辑器支持批量上传图片涂鸦视频附件
  • 网页端登录状态使用 session,接口使用jwt,登录后会在浏览器记录jwtcookie,过期时间与session一样,默认 120 分钟,当cookie过期的同时session会强行过期;

后台接口

  • 管理员增删改查,修改状态;
  • 角色管理
  • 能力管理
  • 会员管理
  • 管理员日志
  • 文章管理
  • 文章分类管理
  • 页面管理
  • 商家管理
  • 店铺管理
  • 幻灯片管理
  • 幻灯片元素管理
  • 品牌管理
  • 商品分类管理
  • 商品SPU管理
  • 商品SKU管理
  • 购物车管理
  • 订单管理
  • 快递公司管理
  • 会员送货地址管理
  • 退款单管理

前端接口

  • 会员注册登录(手机验证码,手机密码,昵称密码)
  • 会员个人信息,会员退出登录
  • 手机号绑定
  • 手机验证码,图形验证码
  • 图片通过JS直传OSS
  • 微信H5,小程序授权登录
  • 微信JSSDK签名接口
  • 微信支付
  • 通莞支付
  • 购物车接口
  • 页面接口
  • 文章接口
  • 收件地址接口
  • 商品分类接口
  • 商品接口
  • 订单接口

计划中功能

后台接口

1. 权限控制Policy 丢弃

  1. 商品导入导出
  2. 订单导出
  3. 快递信息导入
  4. 会员信息导入,导出
  5. 会员统计
  6. 商品统计
  7. 订单统计

前端接口

1. 权限控制Policy 丢弃

  1. 团购
  2. 优惠券:第二件半价,代金券
  3. 秒杀,砍价
  4. 预购
  5. 兑换卡
  6. 充值
  7. 二级分佣,提现
  8. 申请退款接口,按order_sku退款;
  9. 支付宝支持
  10. 阿里云日志
  11. 微信图片,视频,语音上传(第三方框架有,未写接口)
  12. 微信开放平台(第三方框架有,未写接口)
  13. H5抽奖,兑奖接口;

运行环境

  • PHP >= 7.2.0
  • BCMath PHP 拓展
  • Ctype PHP 拓展
  • JSON PHP 拓展
  • Mbstring PHP 拓展
  • OpenSSL PHP 拓展
  • PDO PHP 拓展
  • Tokenizer PHP 拓展
  • XML PHP 拓展
  • 数据库使用MySQL 5.7

开发环境部署 / 安装

开发环境

  1. 下载代码到本地;
  2. 运行composer install
  3. 复制.env.example.env,修改.env中的相关设置;
  4. 目录storage和bootstrap/cache需要可写权限; 运行命令php artisan key:generatephp artisan jwt:secret生成新的密匙;
  5. 如果使用的是MySQL 5.6,需要修改文件AppServiceProvider27行,否则数据库索引报错;
  6. 运行php artisan migrate,建立数据表结构。如果需要测试数据,就运行php artisan migrate --seed
  7. 运行php artisan cota:data-init,导入初始化数据;
  8. 运行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;
    }
}
  • 目录storagebootstrap/cache需要可写权限;
  • 运行命令php artisan key:generatephp artisan jwt:secret生成新的密匙;
  • 运行命令php artisan config:cachephp artisan route:cache优化;
  • 每次更新都需要执行php artisan config:clearphp artisan config:cachephp artisan route:clearphp artisan route:cache
  • 运行命令php artisan clear-compiledphp artisan optimize --force优化类加载;
  • 优化composercomposer dumpautoload -o,如果运行了php artisan optimize --force就不需要了;
  • 程序使用redis缓存;
  • 关闭debugAPP_DEBUG=false

服务器架构说明

image

扩展包说明

扩展包 一句话描述 本项目应用场景
caouecs/laravel-lang 验证规则语言包 验证规则错误中文回复
fruitcake/laravel-cors Laravel CORS接口处理 为接口增加跨域支持
gregwar/captcha 图形验证码 图形验证码
intervention/image 图片处理 图片上传后压缩裁减加水印
overtrue/easy-sms 发送手机验证码 登录,注册,绑定手机时验证手机号
overtrue/wechat EasyWechat微信处理框架 微信登录,小程序登录,公众号,小程序,支付,开放平台等微信相关
tymon/jwt-auth JWT验证 接口授权
guzzlehttp/guzzle HTTP 请求套件 请求通莞金服接口

自定义 Artisan 命令列表

  • 导入初始化数据php artisan cota:data-init

队列列表