1557492053 3 年之前
父節點
當前提交
0905e39281
共有 29 個文件被更改,包括 702 次插入139 次删除
  1. 4 4
      .env
  2. 1 1
      app/BaseService.php
  3. 82 1
      app/admin/controller/Admin.php
  4. 23 0
      app/admin/controller/Department.php
  5. 79 0
      app/admin/controller/PaymentChannel.php
  6. 32 0
      app/admin/lang/zh-cn.php
  7. 8 7
      app/admin/service/LoginService.php
  8. 50 90
      app/admin/view/admin/add.html
  9. 81 0
      app/admin/view/admin/edit.html
  10. 1 0
      app/admin/view/admin/index.html
  11. 1 1
      app/admin/view/index/index.html
  12. 2 12
      app/admin/view/login/index.html
  13. 102 0
      app/admin/view/payment_channel/add.html
  14. 91 0
      app/admin/view/payment_channel/edit.html
  15. 69 0
      app/admin/view/payment_channel/index.html
  16. 17 10
      app/common/middleware/VerifyToken.php
  17. 18 2
      app/common/model/AdminModel.php
  18. 1 7
      app/common/model/AuthGroupAccessModel.php
  19. 19 0
      app/common/model/AuthGroupModel.php
  20. 20 0
      app/common/model/PaymentChannelModel.php
  21. 0 3
      app/common/model/ProductCategoryModel.php
  22. 1 1
      app/middleware.php
  23. 二進制
      public/storage/icon/20221214/4bfff45549a431333b264f1eb556cc65.jpg
  24. 二進制
      public/storage/icon/20221214/8e75e1dcdd5d4da7a54c3354fbda686b.jpg
  25. 二進制
      public/storage/icon/20221214/973d62b30634e00e888fdbe14724f417.jpg
  26. 二進制
      public/storage/icon/20221214/9b738e1690c2d0e164ff2d1d14269845.jpg
  27. 二進制
      public/storage/icon/20221214/af74758d6361a931dfaa2c9923c444f6.jpg
  28. 二進制
      public/storage/product/20221214/0edc4a137c8aa4d5f7bcc79b8218c725.jpg
  29. 二進制
      public/storage/product/20221214/40850cffa6f1a4a5ff868b54d8280ffc.jpg

+ 4 - 4
.env

@@ -5,10 +5,10 @@ DEFAULT_TIMEZONE = Asia/Shanghai
 
 [DATABASE]
 TYPE = mysql
-HOSTNAME = 49.4.53.36
-DATABASE = erp_yzx
-USERNAME = root
-PASSWORD = Aa@@1144271187
+HOSTNAME = 8.219.191.124
+DATABASE = yuanzhongxiu
+USERNAME = yuanzhongxiu
+PASSWORD = WPDrmPREz36y6mMb
 HOSTPORT = 3306
 CHARSET = utf8
 DEBUG = true

+ 1 - 1
app/BaseService.php

@@ -7,7 +7,7 @@ namespace app;
 class BaseService
 {
 
-    protected function success($data = null) {
+    protected function ok($data = null) {
         return ['code' => 200, 'message' => null, 'data' => $data];
     }
 

+ 82 - 1
app/admin/controller/Admin.php

@@ -6,6 +6,8 @@ namespace app\admin\controller;
 
 use app\BaseController;
 use app\common\model\AdminModel;
+use app\common\model\AuthGroupAccessModel;
+use app\common\model\AuthGroupModel;
 use think\App;
 use think\facade\View;
 use think\Request;
@@ -13,10 +15,14 @@ use think\Request;
 class Admin extends BaseController
 {
     private $model;
+    private $authGroupModel;
+    private $authGroupAccessModel;
 
     public function __construct(App $app)
     {
         $this->model = new AdminModel();
+        $this->authGroupModel = new AuthGroupModel();
+        $this->authGroupAccessModel = new AuthGroupAccessModel();
         parent::__construct($app);
     }
 
@@ -27,19 +33,94 @@ class Admin extends BaseController
      */
     public function index(Request $request)
     {
+        $list = $this->model->findByPaginate();
         View::assign([
-            'list' => $this->model->findByPaginate()
+            'list' => $list,
         ]);
         return view();
     }
 
+    /**
+     * @return \think\response\Json|\think\response\View
+     * @throws \think\db\exception\DataNotFoundException
+     * @throws \think\db\exception\DbException
+     * @throws \think\db\exception\ModelNotFoundException
+     */
     public function add()
     {
+        if ($this->request->isAjax()) {
+            $params = $this->request->param();
+            $admin = $this->model->doesItExist($params['account']);
+            if($admin)
+                return $this->fail(lang("The account already exists."));
+            $res = $this->model->create([
+                'account' => $params['account'],
+                'nickname' => $params['nickname'],
+                'password' => md5($params['password']),
+            ]);
+            $this->authGroupAccessModel->save([
+                'admin_id'  =>  $res->id,
+                'group_id'  =>  $params['group_id']
+            ]);
+            return $this->ok(true);
+        }
+        $groups = $this->authGroupModel->fetchAllGroups();
+        View::assign([
+            'groups' => $groups
+        ]);
+        return view();
+    }
+
+    /**
+     * @return \think\response\Json|\think\response\View
+     * @throws \think\db\exception\DataNotFoundException
+     * @throws \think\db\exception\DbException
+     * @throws \think\db\exception\ModelNotFoundException
+     */
+    public function edit() {
+        $params = $this->request->param();
+        if(!isset($params['id']))
+            return $this->fail(lang('ID not exist'));
+        if ($this->request->isAjax()) {
+            $admin = $this->model->doesItExist($params['account']);
+            if($admin && $admin->id != $params['id'])
+                return $this->fail(lang("The account already exists."));
+            $this->model->where('id',$params['id'])->update([
+                'account' => $params['account'],
+                'nickname' => $params['nickname'],
+                'password' => $params['password'] == $admin->password ? $admin->password : md5($params['password']),
+                'update_time' => time()
+            ]);
+            $relation = $this->authGroupAccessModel->findByAdminId($admin->id);
+            if($relation && $relation->group_id != $params['group_id']) {
+                $relation->where('id', $relation->id)->update([
+                    'group_id' => $params['group_id']
+                ]);
+            }
+            return $this->ok(true);
+        }
+        $groups = $this->authGroupModel->fetchAllGroups();
+        View::assign([
+            'groups' => $groups,
+            'admin' => $this->model->findById($params['id']),
+        ]);
         return view();
     }
 
 
 
+    public function delete(\think\Request $request) {
+        $params = $request->param();
+        if(!isset($params['ids']))
+            return $this->fail(lang("Please select the data you want to delete"));
+        $this->model->deleteByIds(explode(',', $params['ids']));
+        return $this->ok(true);
+    }
+
+    public function  test() {
+        echo "test";
+    }
+
 }
 
 

+ 23 - 0
app/admin/controller/Department.php

@@ -0,0 +1,23 @@
+<?php
+
+
+namespace app\admin\controller;
+
+
+use app\BaseController;
+
+class Department extends BaseController
+{
+
+    public function index() {
+        return "部门管理";
+    }
+
+
+}
+
+
+
+
+
+

+ 79 - 0
app/admin/controller/PaymentChannel.php

@@ -0,0 +1,79 @@
+<?php
+
+
+namespace app\admin\controller;
+
+use app\BaseController;
+use app\common\model\PaymentChannelModel;
+use think\App;
+use think\facade\View;
+use think\Request;
+
+class PaymentChannel extends BaseController
+{
+
+    private $model;
+
+    public function __construct(App $app)
+    {
+        $this->model = new PaymentChannelModel();
+        parent::__construct($app);
+    }
+
+    public function index() {
+        View::assign("list",$this->model->findAll());
+        return view();
+    }
+
+    public function add() {
+        if ($this->request->isAjax()) {
+            $params = $this->request->param();
+            $this->model->save([
+                'name' => $params['name'],
+                'icon' => $params['icon'],
+            ]);
+            return $this->ok(true);
+        }
+        return view();
+    }
+
+    public function delete(Request $request) {
+        $params = $request->param();
+        if(!isset($params['ids']))
+            return $this->fail(lang("Please select the data you want to delete"));
+        $this->model->deleteByIds(explode(',',$params['ids']));
+        return $this->ok(true);
+    }
+
+
+    public function edit() {
+        $params = $this->request->param();
+        if(!isset($params['id']))
+            return $this->fail(lang('ID not exist'));
+        $channel = $this->model->findById($params['id']);
+        if($this->request->isAjax()) {
+            $res = $this->model->where('id',$params['id'])->update([
+                'icon' =>   $params['icon'],
+                'name' =>   $params['name'],
+                'update_time'   =>  time()
+            ]);
+            return $this->ok($res);
+        }
+        View::assign('channel', $channel);
+        return view();
+    }
+
+
+    /**
+     * @return \think\response\Json
+     */
+    public function upload() {
+        // 获取表单上传文件 例如上传了001.jpg
+        $file = request()->file('file');
+        // 上传到本地服务器
+        $save_name = \think\facade\Filesystem::disk('public')->putFile( 'icon', $file);
+        return $this->ok(str_replace('\\',"/",'/storage/'.$save_name));
+    }
+
+
+}

+ 32 - 0
app/admin/lang/zh-cn.php

@@ -126,6 +126,11 @@ return [
     'Password'      =>  '密码',
     'Describe'  => '描述',
     "Please select permissions" => "请选择权限",
+    "Account"   =>  '账号',
+    "Group"     =>  "组",
+    "The account already exists."   => "账号已经存在!",
+
+
 ];
 
 
@@ -135,3 +140,30 @@ return [
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

+ 8 - 7
app/admin/service/LoginService.php

@@ -3,10 +3,9 @@
 
 namespace app\admin\service;
 
-
-
 use app\BaseService;
 use app\common\model\AdminModel;
+use think\facade\Session;
 
 class LoginService extends BaseService
 {
@@ -19,22 +18,24 @@ class LoginService extends BaseService
 
     public function login(string $username, string $password)
     {
-        $admin = $this->adminModel->loadByLogin($username,$password);
+        $admin = $this->adminModel->loadByLogin($username, md5($password));
         if($admin) {
             $token = \Jwt::getToken([
                 'iss'=>'jwt_admin',  //该JWT的签发者
                 'iat'=>time(),  //签发时间
                 'exp'=>time()+7200,  //过期时间
-                'nbf'=>time()+60,  //该时间之前不接收处理该Token
+                'nbf'=>time(),  //该时间之前不接收处理该Token
                 'jti'=>md5(uniqid('JWT').time()),  //该Token唯一标识
                 'admin_id'=>$admin->id,
                 'account'=>$admin->account,
                 'nickname'=>$admin->nickname
             ]);
+            if($token === false) return $this->fail('获取token失败!');
             $this->adminModel->refreshToken($admin->id,$token);
-            if(is_bool($token)) return $this->fail('获取token失败!');
-            $admin->token = $token;
+            Session::set('admin', $token);
+            if(Session::get('admin'))
+                return $this->ok(true);
         }
-        return $admin ? $this->success($admin) : $this->fail('账号密码错误!');
+        return $this->fail('账号密码错误!');
     }
 }

+ 50 - 90
app/admin/view/admin/add.html

@@ -1,4 +1,5 @@
 {include file='common/_js_css'}
+
 <div class="lyear-layout-web">
   <div class="lyear-layout-container">
     <!--页面主要内容-->
@@ -8,114 +9,73 @@
           <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>
+                <form class="layui-form">
+
+                  <div class="layui-form-item">
+                    <label class="layui-form-label">{:lang("Account")}</label>
+                    <div class="layui-input-block">
+                      <input type="text" name="account" lay-verify="required" lay-reqtext="{:lang('Please fill in')}" autocomplete="off" class="layui-input">
                     </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 class="layui-form-item">
+                    <label class="layui-form-label">{:lang("name")}</label>
+                    <div class="layui-input-block">
+                      <input type="text" name="nickname" lay-verify="required" lay-reqtext="{:lang('Please fill in')}" autocomplete="off" class="layui-input">
                     </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 class="layui-form-item">
+                    <label class="layui-form-label">{:lang('Group')}</label>
+                    <div class="layui-input-block">
+                      <select name="group_id" lay-filter="required">
+                        {volist name="groups" id="item"}
+                        <option value="{$item.id}">{$item.name}</option>
+                        {/volist}
+                      </select>
+                    </div>
                   </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 class="layui-form-item">
+                    <label class="layui-form-label">{:lang("Password")}</label>
+                    <div class="layui-input-block">
+                      <input type="password" name="password" lay-verify="required" lay-reqtext="{:lang('Please fill in')}" autocomplete="off" class="layui-input">
                     </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 class="layui-form-item">
+                    <div class="layui-input-block">
+                      <button type="button" class="layui-btn" lay-submit="" lay-filter="caviar_submit_btn">{:lang('Submit')}</button>
+                      <button type="reset" class="layui-btn layui-btn-primary">{:lang("Reset")}</button>
+                    </div>
                   </div>
                 </form>
-       
+
               </div>
             </div>
           </div>
-          
+
         </div>
-        
+
       </div>
     </main>
     <!--End 页面主要内容-->
   </div>
 </div>
 <script>
+  layui.use(['laydate','form','upload'], () => {
+    const form = layui.form;
 
-  //当你在iframe页面关闭自身时
-  var index = parent.layer.getFrameIndex(window.name); //先得到当前iframe层的索引
-  setTimeout(() => {
-    parent.layer.close(index); //再执行关闭
-  },9000);
-
+    form.on('submit(caviar_submit_btn)', (data) =>{
+      const response = request('{:url("admin/admin/add")}',data.field)
+      response.then((res) => {
+        console.log(res);
+        res.code === 200 ? layer.msg("{:lang('Succeed')}", {icon: 1,time:500},() => {
+          parent.location.reload();
+        }) : layer.msg(res.message,{icon: 5})
+      })
+      return false;
+    });
+  });
 </script>

+ 81 - 0
app/admin/view/admin/edit.html

@@ -0,0 +1,81 @@
+{include file='common/_js_css'}
+
+<div class="lyear-layout-web">
+    <div class="lyear-layout-container">
+        <!--页面主要内容-->
+        <main>
+            <div class="container-fluid">
+                <div class="row">
+                    <div class="col-lg-12">
+                        <div class="card">
+                            <div class="card-body">
+                                <form class="layui-form">
+                                    <input name="id" value="{$admin.id}" hidden>
+                                    <div class="layui-form-item">
+                                        <label class="layui-form-label">{:lang("Account")}</label>
+                                        <div class="layui-input-block">
+                                            <input type="text" name="account" value="{$admin.account}"lay-verify="required" lay-reqtext="{:lang('Please fill in')}" autocomplete="off" class="layui-input">
+                                        </div>
+                                    </div>
+
+                                    <div class="layui-form-item">
+                                        <label class="layui-form-label">{:lang("Name")}</label>
+                                        <div class="layui-input-block">
+                                            <input type="text" name="nickname" value="{$admin.nickname}" lay-verify="required" lay-reqtext="{:lang('Please fill in')}" autocomplete="off" class="layui-input">
+                                        </div>
+                                    </div>
+
+                                    <div class="layui-form-item">
+                                        <label class="layui-form-label">{:lang('Group')}</label>
+                                        <div class="layui-input-block">
+                                            <select name="group_id" lay-filter="required">
+                                                {volist name="groups" id="item"}
+                                                <option value="{$item.id}" {if $item.id == $admin.access.group_id} selected {/if} >{$item.name}</option>
+                                                {/volist}
+                                            </select>
+                                        </div>
+                                    </div>
+
+                                    <div class="layui-form-item">
+                                        <label class="layui-form-label">{:lang("Password")}</label>
+                                        <div class="layui-input-block">
+                                            <input type="password" name="password" value="{$admin.password}" lay-verify="required" lay-reqtext="{:lang('Please fill in')}" autocomplete="off" class="layui-input">
+                                        </div>
+                                    </div>
+
+
+                                    <div class="layui-form-item">
+                                        <div class="layui-input-block">
+                                            <button type="button" class="layui-btn" lay-submit="" lay-filter="caviar_submit_btn">{:lang('Submit')}</button>
+                                            <button type="reset" class="layui-btn layui-btn-primary">{:lang("Reset")}</button>
+                                        </div>
+                                    </div>
+                                </form>
+
+                            </div>
+                        </div>
+                    </div>
+
+                </div>
+
+            </div>
+        </main>
+        <!--End 页面主要内容-->
+    </div>
+</div>
+<script>
+    layui.use(['laydate','form','upload'], () => {
+        const form = layui.form;
+
+        form.on('submit(caviar_submit_btn)', (data) =>{
+            const response = request('{:url("admin/admin/edit")}',data.field)
+            response.then((res) => {
+                console.log(res);
+                res.code === 200 ? layer.msg("{:lang('Succeed')}", {icon: 1,time:500},() => {
+                    parent.location.reload();
+                }) : layer.msg(res.message,{icon: 5})
+            })
+            return false;
+        });
+    });
+</script>

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

@@ -38,6 +38,7 @@
                                 <td>{$item.id}</td>
                                 <td>{$item.account}</td>
                                 <td>{$item.nickname}</td>
+                                <td>{$item.access.group.name}</td>
                                 <td>{$item.update_time}</td>
                                 <td>
                                     <div class="btn-group">

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

@@ -33,7 +33,7 @@
                             <a href="javascript:void(0)"><i class="{$item.icon}"></i> <span>{:lang($item.lang)}</span></a>
                             <ul class="nav nav-subnav">
                                 {volist name="$item.children" id="el"}
-                                <li> <a class="multitabs" href="{$el.url}">{:lang($el.lang)}</a> </li>
+                                <li> <a class="multitabs" href="/{$el.url}">{:lang($el.lang)}</a> </li>
                                 {/volist}
                             </ul>
                         </li>

+ 2 - 12
app/admin/view/login/index.html

@@ -4,17 +4,7 @@
   <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>
-  <script type="text/javascript" src="/static/js/request.js"></script>
+  {include file='common/_js_css'}
   <script>
   </script>
   <style>
@@ -121,7 +111,7 @@
         layer.msg(response.message);
         return;
       }
-       window.location.href="{:url('admin/index/index')}";
+      window.location.href="{:url('admin/index/index')}";
     });
   });
 </script>

+ 102 - 0
app/admin/view/payment_channel/add.html

@@ -0,0 +1,102 @@
+{include file='common/_js_css'}
+
+<div class="lyear-layout-web">
+    <div class="lyear-layout-container">
+        <!--页面主要内容-->
+        <main>
+            <div class="container-fluid">
+                <div class="row">
+                    <div class="col-lg-12">
+                        <div class="card">
+                            <div class="card-body">
+                                <form class="layui-form">
+
+                                    <div class="layui-form-item">
+                                        <label class="layui-form-label">{:lang("Name")}</label>
+                                        <div class="layui-input-block">
+                                            <input type="text" name="name" lay-verify="required" lay-reqtext="{:lang('Please fill in')}" autocomplete="off" class="layui-input">
+                                        </div>
+                                    </div>
+                                    <div class="layui-form-item">
+                                        <label class="layui-form-label">{:lang("Icon")}</label>
+                                        <div class="layui-input-block">
+                                            <button type="button" class="layui-btn" id="upload_img">
+                                                <i class="layui-icon">&#xe67c;</i>{:lang("Upload")}
+                                            </button>
+                                            <input class="image_input" name="icon" lay-verify="required" lay-reqtext="{:lang('Please upload pictures.')}" autocomplete="off" class="layui-input" hidden>
+                                            <img class="img_view" style="height: 200px;width: 250px; top: 3px;" hidden>
+                                        </div>
+                                    </div>
+
+                                    <div class="layui-form-item">
+                                        <div class="layui-input-block">
+                                            <button type="submit" class="layui-btn" lay-submit="" lay-filter="caviar_submit_btn">{:lang('Submit')}</button>
+                                            <button type="reset" class="layui-btn layui-btn-primary">{:lang("Reset")}</button>
+                                        </div>
+                                    </div>
+                                </form>
+
+                            </div>
+                        </div>
+                    </div>
+
+                </div>
+
+            </div>
+        </main>
+        <!--End 页面主要内容-->
+    </div>
+</div>
+<script>
+
+    //当你在iframe页面关闭自身时
+    // var index = parent.layer.getFrameIndex(window.name); //先得到当前iframe层的索引
+    // parent.layer.close(index); //再执行关闭
+    layui.use(['laydate','form','upload'], () => {
+        const laydate = layui.laydate;
+        const form = layui.form;
+
+        const upload = layui.upload;
+
+        //执行实例
+        upload.render({
+            elem: '#upload_img' //绑定元素
+            ,url: '/admin/payment_channel/upload'
+            ,done: function(res){
+                console.log(res);
+                if(res.code === 200) {
+                    $(".image_input").attr("value", res.data);
+                    $(".img_view").attr('src', res.data)
+                    $('.img_view').css('display','block');
+                } else {
+                    layer.message(res.message, {icon: 5});
+                }
+                return false;
+            }
+            ,error: function(){
+                //请求异常回调
+            }
+        });
+
+        form.on('submit(caviar_submit_btn)', (data) =>{
+            const response = request('/admin/payment_channel/add',data.field)
+            response.then((res) => {
+                console.log(res);
+                res.code === 200 ? layer.msg("{:lang('Succeed')}", {icon: 1,time:500},() => {
+                    parent.location.reload();
+                }) : layer.msg(res.message,{icon: 5})
+            })
+            return false;
+        });
+
+
+        laydate.render({
+            elem: '#sun_calendar',
+            type: 'datetime'
+        });
+        laydate.render({
+            elem: '#lunar_calendar',
+            type: 'datetime'
+        });
+    });
+</script>

+ 91 - 0
app/admin/view/payment_channel/edit.html

@@ -0,0 +1,91 @@
+{include file='common/_js_css'}
+
+<div class="lyear-layout-web">
+    <div class="lyear-layout-container">
+        <!--页面主要内容-->
+        <main>
+            <div class="container-fluid">
+                <div class="row">
+                    <div class="col-lg-12">
+                        <div class="card">
+                            <div class="card-body">
+                                <form class="layui-form">
+
+                                    <input name="id" value="{$channel.id}" hidden>
+                                    <div class="layui-form-item">
+                                        <label class="layui-form-label">{:lang("Name")}</label>
+                                        <div class="layui-input-block">
+                                            <input type="text" name="name" value="{$channel.name}" lay-verify="required" lay-reqtext="{:lang('Please fill in')}" autocomplete="off" class="layui-input">
+                                        </div>
+                                    </div>
+                                    <div class="layui-form-item">
+                                        <label class="layui-form-label">{:lang("Icon")}</label>
+                                        <div class="layui-input-block">
+                                            <button type="button" class="layui-btn" id="upload_img">
+                                                <i class="layui-icon">&#xe67c;</i>{:lang("Upload")}
+                                            </button>
+                                            <input class="image_input" name="icon" value="{$channel.icon}" lay-verify="required" lay-reqtext="{:lang('Please upload pictures.')}" autocomplete="off" class="layui-input" hidden>
+                                        </div>
+                                        <div class="layui-input-block" style="top: 3px">
+                                            <img class="img_view" src="{$channel.icon}" style="height: 200px;width: 250px">
+                                        </div>
+                                    </div>
+
+                                    <div class="layui-form-item">
+                                        <div class="layui-input-block">
+                                            <button type="submit" class="layui-btn" lay-submit="" lay-filter="caviar_submit_btn">{:lang('Submit')}</button>
+                                            <button type="reset" class="layui-btn layui-btn-primary">{:lang("Reset")}</button>
+                                        </div>
+                                    </div>
+                                </form>
+
+                            </div>
+                        </div>
+                    </div>
+
+                </div>
+
+            </div>
+        </main>
+        <!--End 页面主要内容-->
+    </div>
+</div>
+<script>
+    layui.use(['form','upload'], () => {
+        const form = layui.form;
+
+        const upload = layui.upload;
+
+        //执行实例
+        upload.render({
+            elem: '#upload_img' //绑定元素
+            ,url: '/admin/payment_channel/upload'
+            ,done: function(res){
+                console.log(res);
+                if(res.code === 200) {
+                    $(".image_input").attr("value", res.data);
+                    $(".img_view").attr('src', res.data)
+                    $('.img_view').css('display','block');
+                } else {
+                    layer.message(res.message, {icon: 5});
+                }
+                return false;
+            }
+            ,error: function(){
+                //请求异常回调
+            }
+        });
+
+        form.on('submit(caviar_submit_btn)', (data) =>{
+            const response = request('/admin/payment_channel/edit',data.field)
+            response.then((res) => {
+                console.log(res);
+                res.code === 200 ? layer.msg("{:lang('Succeed')}", {icon: 1,time:500},() => {
+                    parent.location.reload();
+                }) : layer.msg(res.message,{icon: 5})
+            })
+            return false;
+        });
+
+    });
+</script>

+ 69 - 0
app/admin/view/payment_channel/index.html

@@ -0,0 +1,69 @@
+{include file='common/_js_css'}
+<link href="__CSS__/common.css" rel="stylesheet">
+<div class="container-fluid">
+    <div class="row">
+        <div class="col-lg-12">
+            <div class="card">
+                <div class="card-toolbar clearfix">
+                    <div class="toolbar-btn-action">
+                        <a class="btn btn-primary m-r-5" href="#!" onclick="add('{:url(\'admin/payment_channel/add\')}')"><i class="mdi mdi-plus"></i> {:lang('add')}</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" onclick="checkbox()"><span></span>
+                                    </label>
+                                </th>
+                                <th>{:lang("ID")}</th>
+                                <th>{:lang('Name')}</th>
+                                <th>{:lang('icon')}</th>
+                                <th>{:lang('update_time')}</th>
+                                <th>{:lang('operation')}</th>
+                            </tr>
+                            </thead>
+                            <tbody>
+                            {volist name="list" id="item"}
+                            <tr>
+                                <td>
+                                    <label class="lyear-checkbox checkbox-primary">
+                                        <input class="checkbox_caviar" type="checkbox" name="ids[]" value="{$item.id}"><span></span>
+                                    </label>
+                                </td>
+                                <td>{$item.id}</td>
+                                <td>{$item.name}</td>
+                                <td><img class="small-img" src="{$item.icon}" onclick="image_magnify()" ></td>
+                                <td>{$item.update_time}</td>
+                                <td>
+                                    <div class="btn-group">
+                                        <a class="btn btn-xs btn-default" href="#!" title="{:lang('select')}" data-toggle="tooltip" onclick='view("/admin/payment_channel/edit?id={$item.id}","{:lang(\"Info\")}")'><i class="mdi mdi-eye"></i></a>
+                                        <a class="btn btn-xs btn-default" href="#!" title="{:lang('delete')}" data-toggle="tooltip" onclick='
+                                           deletingASingle("{:url(\"admin/payment_channel/delete\")}","{$item.id}",["{:lang(\"Succeed\")}"],"{:lang(\"Warn\")}","{:lang(\"Are you sure you want to delete the selected data\")}",["{:lang(\"Confirm\")}"])'
+                                        ><i class="mdi mdi-window-close"></i></a>
+                                    </div>
+                                </td>
+                            </tr>
+                            {/volist}
+                            </tbody>
+                        </table>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+
+<style>
+
+</style>
+
+<script type="text/javascript">
+    if(check_params(["{params.store_id}"]))
+        $('#select_card_caviar').css('display','block');
+</script>
+
+

+ 17 - 10
app/common/middleware/VerifyToken.php

@@ -5,24 +5,31 @@ namespace app\common\middleware;
 
 use app\exception\BaseException;
 use Jwt;
-use think\Exception;
-use think\Response;
+use think\facade\Session;
+
 
 class VerifyToken
 {
     /**
-     * 处理请求
-     *
-     * @param \think\Request $request
-     * @param \Closure       $next
-     * @return Response
+     * @param $request
+     * @param \Closure $next
+     * @return mixed
+     * @throws BaseException
      */
     public function handle($request, \Closure $next)
     {
         $url = $request->url();
         $has_login = strpos($url,'login');
-        $token = $request->param('token');
-        if($has_login >= 0 && $has_login !== false) return $next($request);
-        throw new BaseException('未登录,请重新登录!',403);
+        if($has_login !== false && $has_login >= 0) {
+            return $next($request);
+        }
+        $session = Session::get("admin");
+        if($session) {
+            $jwt = Jwt::verifyToken($session);
+            if ($jwt)
+                return $next($request);
+        }
+        Session::set("admin", null);
+        return redirect('/admin/login/index');
     }
 }

+ 18 - 2
app/common/model/AdminModel.php

@@ -22,9 +22,15 @@ class AdminModel extends BaseModel
         ];
     }
 
+    public function access()
+    {
+        return self::hasOne(AuthGroupAccessModel::class,'admin_id','id');
+    }
+
+
     public function loadByLogin($username, $password) {
         return $this->where([
-            ['account', '=', $username],
+            ['account|id', '=', $username],
             ['password', '=', $password],
             ['is_delete', '=',0]
         ])->find();
@@ -42,9 +48,19 @@ class AdminModel extends BaseModel
      * @throws \think\db\exception\DbException
      */
     public function findByPaginate() {
-        return $this->where('is_delete',0)->paginate(10);
+        return $this->where('is_delete',0)->with(['access','access.group'])->paginate(10);
     }
 
+    public function doesItExist($account) {
+        $customer = $this->where([
+            ["account", '=',$account],
+            ["is_delete", '=', 0],
+        ])->find();
+        return $customer;
+    }
 
+    public function findById($id) {
+        return $this->where('id',$id)->with(['access','access.group'])->find();
+    }
 
 }

+ 1 - 7
app/common/model/AuthGroupAccessModel.php

@@ -18,13 +18,7 @@ class AuthGroupAccessModel extends BaseModel
         return self::hasOne(AuthGroupModel::class,'id','group_id');
     }
 
-    public function admin()
-    {
-        return self::hasOne(AdminModel::class,'id','admin_id');
-    }
-
-
-    function findByAdminId($admin_id) {
+    public function findByAdminId($admin_id) {
         return $this->where([
             ['is_delete', '=', 0],
             ['admin_id','=',$admin_id]

+ 19 - 0
app/common/model/AuthGroupModel.php

@@ -19,6 +19,25 @@ class AuthGroupModel extends BaseModel
             ['is_delete', '=', 0]
         ];
         return $this->where($where)->order('create_time','desc')->paginate(['list_rows'=>10, "query" => $params]);
+    }
 
+    /**
+     * @return AuthGroupModel[]|array|\think\Collection
+     * @throws \think\db\exception\DataNotFoundException
+     * @throws \think\db\exception\DbException
+     * @throws \think\db\exception\ModelNotFoundException
+     */
+    public function fetchAllGroups() {
+        return $this->where('is_delete',0)->select();
     }
+
+
+
+
+
+
+
+
+
+
 }

+ 20 - 0
app/common/model/PaymentChannelModel.php

@@ -0,0 +1,20 @@
+<?php
+
+
+namespace app\common\model;
+
+
+class PaymentChannelModel extends BaseModel
+{
+
+    protected $table = 'erp_payment_channel';
+    protected function genSchema(array $schema)
+    {
+        // TODO: Implement genSchema() method.
+    }
+
+    public function findAll() {
+        return $this->where('is_delete', 0)->order("id", "desc")->select();
+    }
+
+}

+ 0 - 3
app/common/model/ProductCategoryModel.php

@@ -27,9 +27,6 @@ class ProductCategoryModel extends BaseModel
     }
 
 
-
-
-
 }
 
 

+ 1 - 1
app/middleware.php

@@ -6,6 +6,6 @@ return [
     // 多语言加载
     // \think\middleware\LoadLangPack::class,
     // Session初始化
-    // \think\middleware\SessionInit::class
+     \think\middleware\SessionInit::class
 
 ];

二進制
public/storage/icon/20221214/4bfff45549a431333b264f1eb556cc65.jpg


二進制
public/storage/icon/20221214/8e75e1dcdd5d4da7a54c3354fbda686b.jpg


二進制
public/storage/icon/20221214/973d62b30634e00e888fdbe14724f417.jpg


二進制
public/storage/icon/20221214/9b738e1690c2d0e164ff2d1d14269845.jpg


二進制
public/storage/icon/20221214/af74758d6361a931dfaa2c9923c444f6.jpg


二進制
public/storage/product/20221214/0edc4a137c8aa4d5f7bcc79b8218c725.jpg


二進制
public/storage/product/20221214/40850cffa6f1a4a5ff868b54d8280ffc.jpg