PC-202203141647\Administrator 3 jaren geleden
bovenliggende
commit
8367fa8a3f

+ 17 - 0
app/BaseService.php

@@ -0,0 +1,17 @@
+<?php
+
+
+namespace app;
+
+
+class BaseService
+{
+
+    protected function success($data = null) {
+        return ['code' => 200, 'msg' => null, 'data' => $data];
+    }
+
+    protected function fail($msg) {
+        return ['code' => 205, 'msg' => $msg, "data" => null];
+    }
+}

+ 9 - 2
app/ExceptionHandle.php

@@ -1,6 +1,7 @@
 <?php
 namespace app;
 
+use app\exception\BaseException;
 use think\db\exception\DataNotFoundException;
 use think\db\exception\ModelNotFoundException;
 use think\exception\Handle;
@@ -51,8 +52,14 @@ class ExceptionHandle extends Handle
     public function render($request, Throwable $e): Response
     {
         // 添加自定义异常处理机制
-
-        // 其他错误交给系统处理
+        if($e instanceof BaseException) {
+            # 自定义异常类
+            $result = [
+                'code'      =>  $e->code,
+                'message'   =>  $e->message
+            ];
+            return json($result);
+        }
         return parent::render($request, $e);
     }
 }

+ 20 - 0
app/admin/controller/Admin.php

@@ -0,0 +1,20 @@
+<?php
+
+
+namespace app\admin\controller;
+
+
+use app\BaseController;
+
+class Admin extends BaseController
+{
+    public function index()
+    {
+        return view();
+    }
+
+    public function add()
+    {
+        return view();
+    }
+}

+ 14 - 0
app/admin/controller/Auth.php

@@ -0,0 +1,14 @@
+<?php
+
+
+namespace app\admin\controller;
+
+
+class Auth extends \app\BaseController
+{
+
+    public function index()
+    {
+        return view();
+    }
+}

+ 0 - 6
app/admin/controller/Index.php

@@ -10,13 +10,7 @@ class Index extends BaseController
     public function index()
     {
         View::assign('first', '1');
-
         return view();
     }
 
-    public function hello($name = 'ThinkPHP6')
-    {
-
-        return 'hello,' . $name;
-    }
 }

+ 25 - 4
app/admin/controller/Login.php

@@ -3,16 +3,37 @@
 
 namespace app\admin\controller;
 
-
+use app\admin\service\LoginService;
 use app\BaseController;
+use app\common\validate\LoginValidate;
+use app\exception\BaseException;
 use app\Request;
+use think\App;
 
 class Login extends BaseController
 {
-    public function index(Request $request) {
-        $params = $request->param(['username', 'password']);
-        dump($params['username']);
+    private $service;
+
+    public function __construct(App $app)
+    {
+        parent::__construct($app);
+        $this->service = new LoginService();
     }
 
+    public function index() {
+        return view();
+    }
+
+    /**
+     * @param Request $request
+     * @return mixed
+     * @throws BaseException
+     */
+    public function login(Request $request) {
+        $params = (new LoginValidate())->requestBodyCheck($request);
+        $body = $this->service->login($params['username'], $params['password']);
+        predicate($body['code'] == 200, $body['msg']);
+        return json($body);
+    }
 
 }

+ 1 - 1
app/admin/middleware.php

@@ -7,5 +7,5 @@ return [
     // \think\middleware\LoadLangPack::class,
     // Session初始化
     // \think\middleware\SessionInit::class
-    \app\middleware\VerifyToken::class,
+//    \app\common\middleware\VerifyToken::class,
 ];

+ 25 - 0
app/admin/service/LoginService.php

@@ -0,0 +1,25 @@
+<?php
+
+
+namespace app\admin\service;
+
+
+
+use app\BaseService;
+use app\common\model\AdminModel;
+
+class LoginService extends BaseService
+{
+    private  $adminModel;
+
+    public function __construct()
+    {
+        $this->adminModel = new AdminModel();
+    }
+
+    public function login(string $username, string $password)
+    {
+        $admin = $this->adminModel->loadByLogin($username,$password);
+        return $admin ? $this->success($admin) : $this->fail('账号密码错误!');
+    }
+}

+ 134 - 0
app/admin/view/admin/add.html

@@ -0,0 +1,134 @@
+{include file='common/_js_css'}
+<div class="lyear-layout-web">
+  <div class="lyear-layout-container">
+    <!--页面主要内容-->
+    <main class="lyear-layout-content">
+      <div class="container-fluid">
+        <div class="row">
+          <div class="col-lg-12">
+            <div class="card">
+              <div class="card-body">
+                <form method="post" class="row">
+                  <div class="form-group col-md-12">
+                    <label for="type">栏目</label>
+                    <div class="form-controls">
+                      <select name="type" class="form-control" id="type">
+                        <option value="1">小说</option>
+                        <option value="2">古籍</option>
+                        <option value="3">专辑</option>
+                        <option value="4">自传</option>
+                      </select>
+                    </div>
+                  </div>
+                  <div class="form-group col-md-12">
+                    <label for="title">标题</label>
+                    <input type="text" class="form-control" id="title" name="title" value="" placeholder="请输入标题" />
+                  </div>
+                  <div class="form-group col-md-12">
+                    <label for="seo_keywords">关键词</label>
+                    <input type="text" class="form-control" id="seo_keywords" name="seo_keywords" value="" placeholder="关键词" />
+                  </div>
+                  <div class="form-group col-md-12">
+                    <label for="seo_description">描述</label>
+                    <textarea class="form-control" id="seo_description" name="seo_description" rows="5" value="" placeholder="描述"></textarea>
+                  </div>
+                  <div class="form-group col-md-12">
+                    <label>多图上传</label>
+                    <div class="form-controls">
+                      
+                      <ul class="list-inline clearfix lyear-uploads-pic">
+                        <li class="col-xs-4 col-sm-3 col-md-2">
+                          <figure>
+                            <img src="__IMG__/gallery/15.jpg" alt="图片一">
+                            <figcaption>
+                              <a class="btn btn-round btn-square btn-primary" href="#!"><i class="mdi mdi-eye"></i></a>
+                              <a class="btn btn-round btn-square btn-danger" href="#!"><i class="mdi mdi-delete"></i></a>
+                            </figcaption>
+                          </figure>
+                        </li>
+                        <li class="col-xs-4 col-sm-3 col-md-2">
+                          <figure>
+                            <img src="images/gallery/16.jpg" alt="图片二">
+                            <figcaption>
+                              <a class="btn btn-round btn-square btn-primary" href="#!"><i class="mdi mdi-eye"></i></a>
+                              <a class="btn btn-round btn-square btn-danger" href="#!"><i class="mdi mdi-delete"></i></a>
+                            </figcaption>
+                          </figure>
+                        </li>
+                        <li class="col-xs-4 col-sm-3 col-md-2">
+                          <figure>
+                            <img src="images/gallery/17.jpg" alt="图片三">
+                            <figcaption>
+                              <a class="btn btn-round btn-square btn-primary" href="#!"><i class="mdi mdi-eye"></i></a>
+                              <a class="btn btn-round btn-square btn-danger" href="#!"><i class="mdi mdi-delete"></i></a>
+                            </figcaption>
+                          </figure>
+                        </li>
+                        <li class="col-xs-4 col-sm-3 col-md-2">
+                          <a class="pic-add" id="add-pic-btn" href="#!" title="点击上传"></a>
+                        </li>
+                      </ul>
+                    </div>
+                  </div>
+                  <div class="form-group col-md-12">
+                    <label for="content">内容</label>
+                    <p>HTML编辑器这里就不做演示了</p>
+                  </div>
+                  <div class="form-group col-md-12">
+                    <label for="tags">标签</label>
+                    <input class="js-tags-input form-control" type="text" id="tags" name="tags" value="" />
+                  </div>
+                  <div class="form-group col-md-12">
+                    <label for="sort">排序</label>
+                    <input type="text" class="form-control" id="sort" name="sort" value="0" />
+                  </div>
+                  <div class="form-group col-md-12">
+                    <label for="status">状态</label>
+                    <div class="clearfix">
+                      <label class="lyear-radio radio-inline radio-primary">
+                        <input type="radio" name="status" value="0"><span>禁用</span>
+                      </label>
+                      <label class="lyear-radio radio-inline radio-primary">
+                        <input type="radio" name="status" value="1" checked><span>启用</span>
+                      </label>
+                    </div>
+                  </div>
+                  <div class="form-group col-md-12">
+                    <button type="submit" class="btn btn-primary ajax-post" target-form="add-form">确 定</button>
+                    <button type="button" class="btn btn-default" onclick="javascript:history.back(-1);return false;">返 回</button>
+                  </div>
+                </form>
+       
+              </div>
+            </div>
+          </div>
+          
+        </div>
+        
+      </div>
+      
+    </main>
+    <!--End 页面主要内容-->
+  </div>
+</div>
+<script>
+  //当你想关闭当前页的某个层时
+  var index = layer.open();
+  var index = layer.alert();
+  var index = layer.load();
+  var index = layer.tips();
+  // //正如你看到的,每一种弹层调用方式,都会返回一个index
+  // layer.close(index); //此时你只需要把获得的index,轻轻地赋予layer.close即可
+  //
+  // //如果你想关闭最新弹出的层,直接获取layer.index即可
+  // layer.close(layer.index); //它获取的始终是最新弹出的某个层,值是由layer内部动态递增计算的
+
+  //当你在iframe页面关闭自身时
+  var index = parent.layer.getFrameIndex(window.name); //先得到当前iframe层的索引
+  parent.layer.close(index); //再执行关闭
+
+  // //关闭后的回调(layui 2.6.5、layer 3.4.0 新增)
+  // layer.close(index, function(){
+  //   //do something
+  // });
+</script>

+ 153 - 0
app/admin/view/admin/index.html

@@ -0,0 +1,153 @@
+{include file='common/_header'}
+{include file='common/_js_css'}
+<div class="lyear-layout-web">
+    <div class="lyear-layout-container">
+        <!--左侧导航-->
+        {include file='common/_menu'}
+        <!--End 左侧导航-->
+
+        <!--页面主要内容-->
+        <main class="lyear-layout-content">
+            <div class="container-fluid">
+                <div class="row">
+                    <div class="col-lg-12">
+                        <div class="card">
+                            <div class="card-toolbar clearfix">
+                                <form class="pull-right search-bar" method="get" action="#!" role="form">
+                                    <div class="input-group">
+                                        <div class="input-group-btn">
+                                            <input type="hidden" name="search_field" id="search-field" value="title">
+                                            <button class="btn btn-default dropdown-toggle" id="search-btn" data-toggle="dropdown" type="button" aria-haspopup="true" aria-expanded="false">
+                                                标题 <span class="caret"></span>
+                                            </button>
+                                            <ul class="dropdown-menu">
+                                                <li> <a tabindex="-1" href="javascript:void(0)" data-field="title">标题</a> </li>
+                                                <li> <a tabindex="-1" href="javascript:void(0)" data-field="cat_name">栏目</a> </li>
+                                            </ul>
+                                        </div>
+                                        <input type="text" class="form-control" value="" name="keyword" placeholder="请输入名称">
+                                    </div>
+                                </form>
+                                <div class="toolbar-btn-action">
+                                    <a class="btn btn-primary m-r-5" href="#!" onclick="add()"><i class="mdi mdi-plus"></i> 新增</a>
+                                    <a class="btn btn-success m-r-5" href="#!"><i class="mdi mdi-check"></i> 启用</a>
+                                    <a class="btn btn-warning m-r-5" href="#!"><i class="mdi mdi-block-helper"></i> 禁用</a>
+                                    <a class="btn btn-danger" href="#!"><i class="mdi mdi-window-close"></i> 删除</a>
+                                </div>
+                            </div>
+                            <div class="card-body">
+
+                                <div class="table-responsive">
+                                    <table class="table table-bordered">
+                                        <thead>
+                                        <tr>
+                                            <th>
+                                                <label class="lyear-checkbox checkbox-primary">
+                                                    <input type="checkbox" id="check-all"><span></span>
+                                                </label>
+                                            </th>
+                                            <th>编号</th>
+                                            <th>标题</th>
+                                            <th>书籍</th>
+                                            <th>作者</th>
+                                            <th>阅读量</th>
+                                            <th>状态</th>
+                                            <th>操作</th>
+                                        </tr>
+                                        </thead>
+                                        <tbody>
+                                        <tr>
+                                            <td>
+                                                <label class="lyear-checkbox checkbox-primary">
+                                                    <input type="checkbox" name="ids[]" value="1"><span></span>
+                                                </label>
+                                            </td>
+                                            <td>1</td>
+                                            <td>第01章 天涯思君不可忘</td>
+                                            <td>《倚天屠龙记》</td>
+                                            <td>金庸</td>
+                                            <td>36</td>
+                                            <td><font class="text-success">正常</font></td>
+                                            <td>
+                                                <div class="btn-group">
+                                                    <a class="btn btn-xs btn-default" href="#!" title="编辑" data-toggle="tooltip"><i class="mdi mdi-pencil"></i></a>
+                                                    <a class="btn btn-xs btn-default" href="#!" title="查看" data-toggle="tooltip"><i class="mdi mdi-eye"></i></a>
+                                                    <a class="btn btn-xs btn-default" href="#!" title="删除" data-toggle="tooltip"><i class="mdi mdi-window-close"></i></a>
+                                                </div>
+                                            </td>
+                                        </tr>
+                                        <tr>
+                                            <td>
+                                                <label class="lyear-checkbox checkbox-primary">
+                                                    <input type="checkbox" name="ids[]" value="2"><span></span>
+                                                </label>
+                                            </td>
+                                            <td>2</td>
+                                            <td>第01章 古道腾驹惊白发,危峦快剑识青翎</td>
+                                            <td>《书剑恩仇录》</td>
+                                            <td>金庸</td>
+                                            <td>44</td>
+                                            <td><font class="text-success">正常</font></td>
+                                            <td>
+                                                <div class="btn-group">
+                                                    <a class="btn btn-xs btn-default" href="#!" title="编辑" data-toggle="tooltip"><i class="mdi mdi-pencil"></i></a>
+                                                    <a class="btn btn-xs btn-default" href="#!" title="查看" data-toggle="tooltip"><i class="mdi mdi-eye"></i></a>
+                                                    <a class="btn btn-xs btn-default" href="#!" title="删除" data-toggle="tooltip"><i class="mdi mdi-window-close"></i></a>
+                                                </div>
+                                            </td>
+                                        </tr>
+                                        </tbody>
+                                    </table>
+                                </div>
+                                <ul class="pagination">
+                                    <li class="disabled"><span>«</span></li>
+                                    <li class="active"><span>1</span></li>
+                                    <li><a href="#1">2</a></li>
+                                    <li><a href="#1">3</a></li>
+                                    <li><a href="#1">4</a></li>
+                                    <li><a href="#1">5</a></li>
+                                    <li><a href="#1">6</a></li>
+                                    <li><a href="#1">7</a></li>
+                                    <li><a href="#1">8</a></li>
+                                    <li class="disabled"><span>...</span></li>
+                                    <li><a href="#!">14452</a></li>
+                                    <li><a href="#!">14453</a></li>
+                                    <li><a href="#!">»</a></li>
+                                </ul>
+
+                            </div>
+                        </div>
+                    </div>
+
+                </div>
+
+            </div>
+
+        </main>
+        <!--End 页面主要内容-->
+    </div>
+</div>
+<script type="text/javascript">
+    $(function(){
+        $('.search-bar .dropdown-menu a').click(function() {
+            var field = $(this).data('field') || '';
+            $('#search-field').val(field);
+            $('#search-btn').html($(this).text() + ' <span class="caret"></span>');
+        });
+    });
+
+    function add() {
+        layui.use('layer', function(){
+            var layer = layui.layer;
+            layer.open({
+                type: 2,
+                content: '{:url("admin/admin/add")}',// [ 'no'],
+                area: ['1000px','600px']
+            });
+
+        });
+
+    }
+
+
+</script>

+ 0 - 1
app/admin/view/common/_footer.html

@@ -1,3 +1,2 @@
-
 </body>
 </html>

+ 0 - 9
app/admin/view/common/_header.html

@@ -6,13 +6,4 @@
     <title>后台管理系统模板</title>
     <link rel="icon" href="favicon.ico" type="image/ico">
     <meta name="author" content="yinqi">
-    <link href="/static/css/bootstrap.min.css" rel="stylesheet">
-    <link href="/static/css/materialdesignicons.min.css" rel="stylesheet">
-    <link href="/static/css/style.min.css" rel="stylesheet">
-    <script type="text/javascript" src="/static/js/jquery.min.js"></script>
-    <script type="text/javascript" src="/static/js/bootstrap.min.js"></script>
-    <script type="text/javascript" src="/static/js/perfect-scrollbar.min.js"></script>
-    <script type="text/javascript" src="/static/js/main.min.js"></script>
-    <!--图表插件-->
-    <script type="text/javascript" src="/static/js/Chart.js"></script>
 </head>

+ 15 - 0
app/admin/view/common/_js_css.html

@@ -0,0 +1,15 @@
+<link href="/static/css/bootstrap.min.css" rel="stylesheet">
+<link href="/static/css/materialdesignicons.min.css" rel="stylesheet">
+<link href="/static/css/style.min.css" rel="stylesheet">
+<script type="text/javascript" src="/static/js/jquery.min.js"></script>
+<script type="text/javascript" src="/static/js/bootstrap.min.js"></script>
+<script type="text/javascript" src="/static/js/perfect-scrollbar.min.js"></script>
+<script type="text/javascript" src="/static/js/main.min.js"></script>
+<!--图表插件-->
+<script type="text/javascript" src="/static/js/Chart.js"></script>
+
+<link href="__CSS__/style.min.css" rel="stylesheet">
+<!-- 引入 layui.css -->
+<link href="//unpkg.com/layui@2.7.6/dist/css/layui.css" rel="stylesheet">
+<!-- 引入 layui.js -->
+<script src="//unpkg.com/layui@2.7.6/dist/layui.js"></script>

+ 10 - 3
app/admin/view/common/_menu.html

@@ -3,7 +3,7 @@
 
     <!-- logo -->
     <div id="logo" class="sidebar-header">
-        <a href="index.html"><img src="static/images/logo-sidebar.png" title="LightYear" alt="LightYear" /></a>
+        <a href="index.html" style="padding-top: 12%"><h3>后台管理系统</h3></a>
     </div>
     <div class="lyear-layout-sidebar-scroll">
 
@@ -11,6 +11,12 @@
             <ul class="nav nav-drawer">
                 <li class="nav-item active"> <a href="index.html"><i class="mdi mdi-home"></i> 后台首页</a> </li>
                 <li class="nav-item nav-item-has-subnav">
+                    <a href="javascript:void(0)"><i class="mdi mdi-account-key"></i> 管理员管理</a>
+                    <ul class="nav nav-subnav">
+                        <li> <a href="{:url('admin/admin/index')}">管理员列表</a> </li>
+                    </ul>
+                </li>
+                <li class="nav-item nav-item-has-subnav">
                     <a href="javascript:void(0)"><i class="mdi mdi-palette"></i> UI 元素</a>
                     <ul class="nav nav-subnav">
                         <li> <a href="lyear_ui_buttons.html">按钮</a> </li>
@@ -29,6 +35,7 @@
                         <li> <a href="lyear_ui_other.html">其他</a> </li>
                     </ul>
                 </li>
+
                 <li class="nav-item nav-item-has-subnav">
                     <a href="javascript:void(0)"><i class="mdi mdi-format-align-justify"></i> 表单</a>
                     <ul class="nav nav-subnav">
@@ -108,13 +115,13 @@
                     <span class="lyear-toggler-bar"></span>
                     <span class="lyear-toggler-bar"></span>
                 </div>
-                <span class="navbar-page-title"> 后564165465</span>
+                <span class="navbar-page-title"></span>
             </div>
 
             <ul class="topbar-right">
                 <li class="dropdown dropdown-profile">
                     <a href="javascript:void(0)" data-toggle="dropdown">
-                        <img class="img-avatar img-avatar-48 m-r-10" src="static/images/users/avatar.jpg" alt="笔下光年" />
+                        <img class="img-avatar img-avatar-48 m-r-10" src="__IMG__/users/avatar.jpg" alt="笔下光年" />
                         <span>笔下光年 <span class="caret"></span></span>
                     </a>
                     <ul class="dropdown-menu dropdown-menu-right">

+ 1 - 0
app/admin/view/index/index.html

@@ -1,4 +1,5 @@
 {include file='common/_header'}
+{include file='common/_js_css'}
 <body>
 <div class="lyear-layout-web">
   <div class="lyear-layout-container">

+ 135 - 0
app/admin/view/login/index.html

@@ -0,0 +1,135 @@
+<!DOCTYPE html>
+<html lang="zh">
+<head>
+  <meta charset="utf-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" />
+  <title>登录页面 - 缘中秀后台管理</title>
+  <link rel="icon" href="favicon.ico" type="image/ico">
+  <meta name="author" content="yinqi">
+  <link href="__CSS__/bootstrap.min.css" rel="stylesheet">
+  <link href="__CSS__/materialdesignicons.min.css" rel="stylesheet">
+  <link href="__CSS__/style.min.css" rel="stylesheet">
+  <!-- 引入 layui.css -->
+  <link href="//unpkg.com/layui@2.7.6/dist/css/layui.css" rel="stylesheet">
+  <!-- 引入 layui.js -->
+  <script src="//unpkg.com/layui@2.7.6/dist/layui.js"></script>
+  <script type="text/javascript" src="/static/js/jquery.min.js"></script>
+  <style>
+    body {
+        display: -webkit-box;
+        display: flex;
+        -webkit-box-pack: center;
+        justify-content: center;
+        -webkit-box-align: center;
+        align-items: center;
+        height: 100%;
+    }
+    .login-box {
+        display: table;
+        table-layout: fixed;
+        overflow: hidden;
+        max-width: 700px;
+    }
+    .login-left {
+        display: table-cell;
+        position: relative;
+        margin-bottom: 0;
+        border-width: 0;
+        padding: 45px;
+    }
+    .login-left .form-group:last-child {
+        margin-bottom: 0px;
+    }
+    .login-right {
+        display: table-cell;
+        position: relative;
+        margin-bottom: 0;
+        border-width: 0;
+        padding: 45px;
+        width: 50%;
+        max-width: 50%;
+        background: #67b26f!important;
+        background: -moz-linear-gradient(45deg,#67b26f 0,#4ca2cd 100%)!important;
+        background: -webkit-linear-gradient(45deg,#67b26f 0,#4ca2cd 100%)!important;
+        background: linear-gradient(45deg,#67b26f 0,#4ca2cd 100%)!important;
+        filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#67b26f', endColorstr='#4ca2cd', GradientType=1 )!important;
+    }
+    .login-box .has-feedback.feedback-left .form-control {
+        padding-left: 38px;
+        padding-right: 12px;
+    }
+    .login-box .has-feedback.feedback-left .form-control-feedback {
+        left: 0;
+        right: auto;
+        width: 38px;
+        height: 38px;
+        line-height: 38px;
+        z-index: 4;
+        color: #dcdcdc;
+    }
+    .login-box .has-feedback.feedback-left.row .form-control-feedback {
+        left: 15px;
+    }
+    @media (max-width: 576px) {
+      .login-right {
+          display: none;
+      }
+    }
+  </style>
+</head>
+<body style="background-image: url(__IMG__/login-bg-2.jpg); background-size: cover;">
+
+<div class="bg-translucent p-10">
+  <div class="login-box bg-white clearfix">
+    <div class="login-left">
+      <form class="layui-form" method="POST">
+        <div class="form-group has-feedback feedback-left">
+          <input type="text" placeholder="请输入您的用户名" class="form-control" name="username" id="username" />
+          <span class="mdi mdi-account form-control-feedback" aria-hidden="true"></span>
+        </div>
+        <div class="form-group has-feedback feedback-left">
+          <input type="password" placeholder="请输入密码" class="form-control" id="password" name="password" />
+          <span class="mdi mdi-lock form-control-feedback" aria-hidden="true"></span>
+        </div>
+        <div class="form-group">
+          <button class="btn btn-block btn-primary layui-btn" lay-submit lay-filter="login" style="width:100%;">立即提交</button>
+        </div>
+      </form>
+    </div>
+    <div class="login-right">
+      <p class="text-white m-tb-15">缘中秀后台 是一个基于Bootstrap v3.3.7的后台管理系统开发。</p>
+      <p class="text-white">Copyright © 2020 <a href="#">铭迅网络科技</a>. All right reserved</p>
+    </div>
+  </div>
+</div>
+
+<script>
+  layui.use(['form','layer'], function(){
+    const form = layui.form;
+    const layer = layui.layer;
+    //提交
+    form.on('submit(login)', function(data){
+      const body = data.field
+      $.ajax({
+        type: 'POST',
+        url: "{:url('admin/login/login')}",
+        data: { "username": body.username, "password": body.password },
+        success: (res) => {
+          console.log(res)
+          if (res.code === 200) {
+            window.location.href="{:url('admin/index/index')}";
+          } else {
+            layer.msg(res.message);
+          }
+        },
+        error:(err) => {
+          layer.msg('服务器发生错误请稍后再试!');
+          console.log(err)
+        }
+      });
+      return false;
+    });
+  });
+</script>
+</body>
+</html>

+ 1 - 1
app/api/middleware.php

@@ -1,5 +1,5 @@
 <?php
 // 全局中间件定义文件
 return [
-    \app\middleware\FormatResponse::class,
+    \app\common\middleware\FormatResponse::class,
 ];

+ 12 - 0
app/common.php

@@ -1,2 +1,14 @@
 <?php
 // 应用公共文件
+
+/**
+ * @param bool $bool
+ * @param $msg
+ * @param int $code
+ * @throws \app\exception\BaseException
+ */
+function predicate(bool $bool, $msg, $code = 1012) {
+    if (!$bool) {
+        throw new \app\exception\BaseException($msg, $code);
+    }
+}

app/index/controller/index.php → app/common/controller/index.php


+ 3 - 3
app/middleware/FormatResponse.php

@@ -1,7 +1,7 @@
 <?php
 declare (strict_types = 1);
 
-namespace app\middleware;
+namespace app\common\middleware;
 use think\Response;
 
 // 格式化返回格式中间件
@@ -16,9 +16,9 @@ class FormatResponse
     public function handle($request, \Closure $next)
     {
         $response = $next($request);
-        $response->data(json_encode([
+        $response->data(json([
             "code"  =>  $response->getCode(),
-            "msg"   =>  null,
+            "message"   =>  null,
             "data"  =>  $response->getData()
         ]));
         return $response;

+ 5 - 4
app/middleware/VerifyToken.php

@@ -1,9 +1,12 @@
 <?php
 declare (strict_types = 1);
 
-namespace app\middleware;
+namespace app\common\middleware;
 
+use app\exception\BaseException;
 use Jwt;
+use think\Exception;
+use think\Response;
 
 class VerifyToken
 {
@@ -19,9 +22,7 @@ class VerifyToken
         $url = $request->url();
         $has_login = strpos($url,'login');
         $token = $request->param('token');
-
         if($has_login >= 0 && $has_login !== false) return $next($request);
-        throw new \Exception('未登录,请重新登录!',403);
-//        return $next($request);
+        throw new BaseException('未登录,请重新登录!',403);
     }
 }

+ 6 - 4
app/index/model/AdminModel.php

@@ -1,11 +1,12 @@
 <?php
 
-namespace app\index\model;
+namespace app\common\model;
+
 
 
 class AdminModel extends BaseModel
 {
-    public $schema;
+    protected $table = 'erp_admin';
 
     public function genSchema(array $schema)
     {
@@ -22,10 +23,11 @@ class AdminModel extends BaseModel
     }
 
     public function loadByLogin($username, $password) {
-        return $this->where([
-            ['username', '=', $username],
+        $admin = $this->where([
+            ['account', '=', $username],
             ['password', '=', $password],
         ])->find();
+        return $admin;
     }
 
 

+ 30 - 0
app/common/model/BaseModel.php

@@ -0,0 +1,30 @@
+<?php
+
+
+namespace app\common\model;
+
+use think\Model;
+use think\model\concern\SoftDelete;
+
+abstract class BaseModel extends Model
+{
+    use SoftDelete;
+    protected $createTime = 'create_at';
+    protected $updateTime = 'update_at';
+    protected $deleteTime = 'delete_time';
+
+    protected $autoWriteTimestamp = true;
+    
+    abstract protected function genSchema(array $schema);
+
+    public function getCreateTimeAttr($v) {
+        if(!$v)return $v;
+        return date("Y-m-d H:i:s", $v);
+    }
+
+    public function getUpdateTimeAttr($v) {
+        if(!$v)return $v;
+        return date("Y-m-d H:i:s", $v);
+    }
+
+}

+ 28 - 0
app/common/validate/BaseValidate.php

@@ -0,0 +1,28 @@
+<?php
+
+
+namespace app\common\validate;
+
+use app\exception\BaseException;
+use think\Request;
+use \think\validate;
+
+class BaseValidate extends Validate
+{
+    /**
+     * @param Request $request
+     * @return bool
+     * @throws BaseException TODO: 全局验证处理 前台传过来的值必须通过HttpRequestCheck方法进行验证
+     */
+    public function requestBodyCheck(Request $request): array
+    {
+        $params = $request->param();
+        if (!$this->check($params)) {
+            throw new BaseException($this->message = $this->getError());
+        }
+        return $params;
+    }
+
+}
+
+

+ 57 - 0
app/common/validate/LoginValidate.php

@@ -0,0 +1,57 @@
+<?php
+declare (strict_types = 1);
+
+namespace app\common\validate;
+
+
+class LoginValidate extends BaseValidate
+{
+    /**
+     * 定义验证规则
+     * 格式:'字段名' =>  ['规则1','规则2'...]
+     *
+     * @var array
+     */
+    protected $rule = [
+        'username'  =>  'require|max:20',
+        'password'  =>  'require|max:20'
+    ];
+
+    /**
+     * 定义错误信息
+     * 格式:'字段名.规则名' =>  '错误信息'
+     *
+     * @var array
+     */
+    protected $message = [
+        'username.require'  =>  '用户名必须存在',
+        'username.max'      =>  '用户名长度必须在20个字符以内',
+        'password.require'  =>  '密码必须存在',
+        'password.max'      =>  '密码名长度必须在20个字符以内'
+    ];
+
+
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

+ 6 - 4
app/exception/BaseException.php

@@ -3,11 +3,13 @@
 
 namespace app\exception;
 
-use think\Exception;
-
-class BaseException extends Exception
+/**
+ * Class BaseException
+ * @package app\exception
+ */
+class BaseException extends \think\Exception
 {
-    public $code =401;
+    public $code = 401;
     public $message = '参数错误';
 
 }

+ 0 - 37
app/exception/BaseExceptionHandle.php

@@ -1,37 +0,0 @@
-<?php
-
-
-namespace app\exception;
-
-
-use app\ExceptionHandle;
-use \think\Response;
-use Throwable;
-
-class BaseExceptionHandle extends ExceptionHandle
-{
-    # http状态码
-    private $code;
-    # 提示信息
-    private $message;
-
-    public function render($request, Throwable $e): Response
-    {
-        if($e instanceof BaseException) {
-            # 自定义异常类
-            $this->code= $e->code;
-            $this->message = $e->message;
-        }else{
-            return self::render($request, $e);
-//            $this->code = 500;
-//            # 具体错误信息
-//            $this->message = $e->getMessage();
-        }
-        $result = [
-            'code'      =>  $this->code,
-            'msg'       =>  $this->message,
-        ];
-        return json($result, $this->code);
-    }
-
-}

+ 0 - 28
app/index/model/BaseModel.php

@@ -1,28 +0,0 @@
-<?php
-
-
-namespace app\index\model;
-
-use think\Model;
-use think\model\concern\SoftDelete;
-
-abstract class BaseModel extends Model
-{
-    use SoftDelete;
-    protected $deleteTime = 'delete_time';
-    public $schema = [];
-    abstract protected function genSchema(array $schema);
-
-
-
-
-
-
-
-
-
-
-
-
-
-}

+ 3 - 2
app/provider.php

@@ -1,9 +1,10 @@
 <?php
 
 // 容器Provider定义文件
+
+use app\ExceptionHandle;
+
 return [
     'think\Request'          => \app\Request::class,
     'think\exception\Handle' => ExceptionHandle::class,
-    // 绑定自定义异常处理handle类
-//    'think\exception\Handle' => \app\exception\BaseExceptionHandle::class,
 ];

+ 0 - 28
app/validate/BaseValidate.php

@@ -1,28 +0,0 @@
-<?php
-
-
-namespace app\validate;
-
-use app\exception\BaseException;
-use \think\validate;
-
-class BaseValidate extends Validate
-{
-    /**
-     * @return bool
-     * @throws BaseException
-     * TODO: 全局验证处理 前台传过来的值必须通过HttpRequestCheck方法进行验证
-     */
-    public function HttpRequestCheck()
-    {
-        # Request实例化获取不到值
-        $params = \think\facade\Request::instance()->param();
-        if (!$this->check($params)) {
-            throw new BaseException($this->message = $this->getError());
-        }
-        return true;
-    }
-
-}
-
-

+ 1 - 1
config/database.php

@@ -16,7 +16,7 @@ return [
     'datetime_format' => 'Y-m-d H:i:s',
 
     // 时间字段配置 配置格式:create_time,update_time
-    'datetime_field'  => '',
+    'datetime_field'  => 'create_time,update_time',
 
     // 数据库连接配置信息
     'connections'     => [

+ 1 - 1
config/view.php

@@ -26,7 +26,7 @@ return [
     'tpl_replace_string' => [
         '__CSS__' => '/static/css',
         '__JS__' => '/static/js',
-        '__IMG__' => '/static/img',
+        '__IMG__' => '/static/images',
         '__FONT__' => '/static/font',
     ]
 ];