1557492053 3 vuotta sitten
vanhempi
commit
e2916c02e0
56 muutettua tiedostoa jossa 2200 lisäystä ja 194 poistoa
  1. 14 0
      app/admin/controller/Activity.php
  2. 33 5
      app/admin/controller/Admin.php
  3. 91 7
      app/admin/controller/Auth.php
  4. 1 0
      app/admin/controller/Customer.php
  5. 5 37
      app/admin/controller/Index.php
  6. 12 0
      app/admin/controller/Order.php
  7. 2 1
      app/admin/controller/Product.php
  8. 2 1
      app/admin/controller/ProductCategory.php
  9. 26 23
      app/admin/controller/Stock.php
  10. 114 0
      app/admin/controller/Store.php
  11. 138 0
      app/admin/controller/User.php
  12. 27 1
      app/admin/lang/zh-cn.php
  13. 47 0
      app/admin/service/AuthService.php
  14. 61 81
      app/admin/view/admin/index.html
  15. 93 0
      app/admin/view/auth/add.html
  16. 95 0
      app/admin/view/auth/edit.html
  17. 70 0
      app/admin/view/auth/index.html
  18. 2 12
      app/admin/view/common/_js_css.html
  19. 1 1
      app/admin/view/index/index.html
  20. 10 0
      app/admin/view/order/index.html
  21. 136 0
      app/admin/view/stock/edit.html
  22. 71 0
      app/admin/view/store/add.html
  23. 74 0
      app/admin/view/store/edit.html
  24. 81 0
      app/admin/view/store/index.html
  25. 50 0
      app/admin/view/store/total_data.html
  26. 86 0
      app/admin/view/user/add.html
  27. 92 0
      app/admin/view/user/edit.html
  28. 111 0
      app/admin/view/user/index.html
  29. 3 3
      app/common.php
  30. 1 1
      app/common/model/AdminModel.php
  31. 16 0
      app/common/model/AuthGroupAccessModel.php
  32. 8 0
      app/common/model/AuthGroupModel.php
  33. 17 0
      app/common/model/AuthRuleModel.php
  34. 2 2
      app/common/model/BaseModel.php
  35. 0 18
      app/common/model/CustomerModel.php
  36. 13 0
      app/common/model/StoreModel.php
  37. 3 0
      app/common/model/StoreProductModel.php
  38. 16 0
      app/common/model/UserModel.php
  39. 1 0
      config/view.php
  40. 1 0
      public/static/asset/layui/css/layui.css
  41. 0 0
      public/static/asset/layui/css/modules/code.css
  42. 0 0
      public/static/asset/layui/css/modules/laydate/default/laydate.css
  43. 0 0
      public/static/asset/layui/css/modules/layer/default/icon-ext.png
  44. 0 0
      public/static/asset/layui/css/modules/layer/default/icon.png
  45. 0 0
      public/static/asset/layui/css/modules/layer/default/layer.css
  46. 0 0
      public/static/asset/layui/css/modules/layer/default/loading-0.gif
  47. 0 0
      public/static/asset/layui/css/modules/layer/default/loading-1.gif
  48. 0 0
      public/static/asset/layui/css/modules/layer/default/loading-2.gif
  49. BIN
      public/static/asset/layui/font/iconfont.eot
  50. 554 0
      public/static/asset/layui/font/iconfont.svg
  51. BIN
      public/static/asset/layui/font/iconfont.ttf
  52. BIN
      public/static/asset/layui/font/iconfont.woff
  53. BIN
      public/static/asset/layui/font/iconfont.woff2
  54. 0 0
      public/static/asset/layui/layui.js
  55. 0 1
      public/static/css/layui/layui.css
  56. 20 0
      public/static/js/common.js

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

@@ -0,0 +1,14 @@
+<?php
+
+
+namespace app\admin\controller;
+
+use \app\BaseController;
+
+class Activity extends BaseController
+{
+
+    public function index() {
+        return '活动管理';
+    }
+}

+ 33 - 5
app/admin/controller/Admin.php

@@ -23,14 +23,13 @@ class Admin extends BaseController
     /**
      * @param Request $request
      * @return \think\response\View
-     * @throws \think\db\exception\DataNotFoundException
      * @throws \think\db\exception\DbException
-     * @throws \think\db\exception\ModelNotFoundException
      */
     public function index(Request $request)
     {
-        $admins = $this->model->findAdmins();
-        View::assign('admins', $admins);
+        View::assign([
+            'list' => $this->model->findByPaginate()
+        ]);
         return view();
     }
 
@@ -38,4 +37,33 @@ class Admin extends BaseController
     {
         return view();
     }
-}
+
+
+
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

+ 91 - 7
app/admin/controller/Auth.php

@@ -2,36 +2,121 @@
 
 namespace app\admin\controller;
 
+use app\admin\service\AuthService;
+use app\common\model\AuthGroupAccessModel;
 use app\common\model\AuthGroupModel;
 use app\common\model\AuthRuleModel;
+use app\Request;
 use think\App;
 use app\BaseController;
+use think\facade\View;
 
 
 class Auth extends BaseController
 {
 
-    private $authGroupModel;
-    private $authGroupAccessModel;
-    private $authRuleModel;
+    private $service;
 
     public function __construct(App $app)
     {
-        $this->authGroupAccessModel = new AuthGroupModel();
-        $this->authGroupModel = new AuthGroupModel();
-        $this->authRuleModel = new AuthRuleModel();
+        $this->service = new AuthService();
         parent::__construct($app);
     }
 
     public function index()
     {
+        View::assign([
+            'list' => $this->service->authGroupModel->findByPaginate($this->request->param()),
+        ]);
         return view();
     }
 
+    public function add() {
+        if ($this->request->isAjax()) {
+            $params = $this->request->param();
+            $res = $this->service->authGroupModel->save([
+                'name' => format_string($params['name'] ?? null),
+                'rules' => format_string($params['rule_ids'] ?? null),
+                'describe' => format_string($params['describe'] ?? null),
+            ]);
+            return $this->ok($res);
+        }
+        return view();
+    }
+
+    public function edit() {
+        $params = $this->request->param();
+        $id = $params['id'];
+        $group = $this->service->authGroupModel->findById($id);
+        if ($this->request->isAjax()) {
+            $res = $this->service->authGroupModel->where('id', $params['id'])->save([
+                'name' => format_string($params['name'] ?? null),
+                'rules' => format_string($params['rule_ids'] ?? null),
+                'describe' => format_string($params['describe'] ?? null),
+                'update_time'   =>  time()
+            ]);
+            return $this->ok($res);
+        }
+        View::assign([
+            'group' => $group,
+        ]);
+        return view();
+    }
+
+    public function findAuthRuleByAdminId($admin_id = null) {
+        $all_rules = $this->service->authRuleModel->findByIds(["*"]);
+        $format_rules = array_map(function ($data) {
+            return [
+                'id'        =>  $data['id'],
+                'title'     =>  $data['name'],
+                'pid'       =>  $data['pid'],
+                'field'     =>  $data['name'],
+                'spread'    =>  false,
+                'checked'   =>  false
+            ];
+        }, $all_rules);
+        if(!isset($admin_id))
+            return $this->ok(recursion($format_rules));
+        $rules = $this->service->loadRuleByAdminId($admin_id);
+        $in_rule_ids = array_map(function ($data) {
+            return $data['id'];
+        }, $rules);
+        foreach ($format_rules as &$item) $item['checked'] = in_array($item['id'], $in_rule_ids);
+        return $this->ok(recursion($format_rules));
+    }
 
+    /**
+     * @param null $group_id
+     * @return \think\response\Json
+     * @throws \think\db\exception\DataNotFoundException
+     * @throws \think\db\exception\DbException
+     * @throws \think\db\exception\ModelNotFoundException
+     */
+    public function findAuthRuleByGroupId($group_id = null) {
+        $all_rules = $this->service->authRuleModel->findByIds(["*"]);
+        $format_rules = array_map(function ($data) {
+            return [
+                'id'        =>  $data['id'],
+                'title'     =>  $data['name'],
+                'pid'       =>  $data['pid'],
+                'field'     =>  $data['name'],
+                'spread'    =>  false,
+                'checked'   =>  false
+            ];
+        }, $all_rules);
+        if(!isset($group_id))
+            return $this->ok(recursion($format_rules));
+        $rules = $this->service->loadRuleByGroupId($group_id);
+        $in_rule_ids = array_map(function ($data) {
+            return $data['id'];
+        }, $rules);
+        foreach ($format_rules as &$item) $item['checked'] = in_array($item['id'], $in_rule_ids);
+        return $this->ok(recursion($format_rules));
+    }
 
 
 
+}
 
 
 
@@ -43,4 +128,3 @@ class Auth extends BaseController
 
 
 
-}

+ 1 - 0
app/admin/controller/Customer.php

@@ -93,6 +93,7 @@ class Customer extends BaseController
             $params['follow_username'] = $user->username;
             $params['store_id'] = $user->store_id;
             $params['store_abbr'] = $user->store_abbr;
+            $params['update_time'] = time();
             $this->customerModel->where('id',$params['id'])->update($params);
             return $this->ok(true);
         }

+ 5 - 37
app/admin/controller/Index.php

@@ -2,58 +2,26 @@
 declare (strict_types = 1);
 namespace app\admin\controller;
 
+use app\admin\service\AuthService;
 use app\BaseController;
-use app\common\model\AuthGroupAccessModel;
-use app\common\model\AuthGroupModel;
-use app\common\model\AuthRuleModel;
 use app\Request;
 use think\App;
 use think\facade\View;
 
 class Index extends BaseController
 {
-    private $authGroupModel;
-    private $authGroupAccessModel;
-    private $authRuleModel;
-
+    private $authService;
     public function __construct(App $app)
     {
-        $this->authGroupModel = new AuthGroupModel();
-        $this->authGroupAccessModel = new AuthGroupAccessModel();
-        $this->authRuleModel = new AuthRuleModel();
-        parent::__construct($app);
-    }
+        $this->authService = new AuthService();
 
-    private function loadRuleTreeByAdminId(int $adminId) {
-        $access = $this->authGroupAccessModel->where([
-            ['is_delete', '=', 0],
-            ['uid','=',$adminId]
-        ])->find();
-        if ($access->group_id > 0) {
-            $group = $this->authGroupModel->where([
-                ['is_delete','=', 0],
-                ['id', '=', $access->group_id]
-            ])->find();
-            if ($group) {
-                $rules_str = $group->rules;
-                if($rules_str == "*"){
-                    $rules = $this->authRuleModel->where('is_delete', 0)->select();
-                } else {
-                    $rules = $this->authRuleModel->where([
-                        ['is_delete','=', 0],
-                        ['id', 'in', explode(',',$rules_str)]
-                    ])->select();
-                }
-                return $rules;
-            }
-        }
-        return [];
+        parent::__construct($app);
     }
 
     public function index(Request $request)
     {
         $adminId = 10000; //$request->param(['adminId']);
-        $rules = $this->loadRuleTreeByAdminId($adminId);
+        $rules = $this->authService->loadRuleByAdminId($adminId);
         View::assign('rules',recursion($rules,0));
         return view();
     }

+ 12 - 0
app/admin/controller/Order.php

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

+ 2 - 1
app/admin/controller/Product.php

@@ -87,7 +87,8 @@ class Product extends BaseController
                 'category_name' =>  $category->name,
                 'is_serve'      =>  (int)$params['is_serve'],
                 'purchase_price'=>  $params['purchase_price'],
-                'selling_price' =>  $params['selling_price']
+                'selling_price' =>  $params['selling_price'],
+                'update_time' => time()
             ]);
             return $this->ok($res);
         }

+ 2 - 1
app/admin/controller/ProductCategory.php

@@ -86,7 +86,8 @@ class ProductCategory extends BaseController
         $all_category = $this->categoryModel->findAll();
         View::assign([
             'category' => $category,
-            'all_category' => recursion($all_category, 0)
+            'all_category' => recursion($all_category, 0),
+            'update_time' => time()
         ]);
         return view();
     }

+ 26 - 23
app/admin/controller/Stock.php

@@ -77,29 +77,32 @@ class Stock extends BaseController
 
     public function edit(Request $request) {
         $params = $request->param();
-//        if(!isset($params['id']))
-//            return $this->fail(lang('ID not exist'));
-//        $product = $this->productModel->findById($params['id']);
-//        if($request->isAjax()) {
-//            $category = $this->categoryModel->findById($params['category_id']);
-//            if(!$category)
-//                return $this->fail(lang('Category does not exist'));
-//            $res = $this->productModel->where('id',$params['id'])->update([
-//                'bar_code'  =>  $params['bar_code'],
-//                'name'      =>  $params['name'] ?? null,
-//                'image'     =>  $params['image'] ?? null,
-//                'category_id'   =>  $params['category_id'] ?? null,
-//                'category_name' =>  $category->name,
-//                'is_serve'      =>  (int)$params['is_serve'],
-//                'purchase_price'=>  $params['purchase_price'],
-//                'selling_price' =>  $params['selling_price']
-//            ]);
-//            return $this->ok($res);
-//        }
-//        View::assign([
-//            'product'   =>  $product,
-//            'all_category' => recursion($this->categoryModel->findAll(),0),
-//        ]);
+        if(!isset($params['id']))
+            return $this->fail(lang('ID not exist'));
+        $relation = $this->storeProductModel->findById($params['id']);
+        if($request->isAjax()) {
+            $exist = $this->storeProductModel->doesItExist($params['store_id'],$params['product_id']);
+            if(!is_null($exist) && $relation->id != $exist->id)
+                return $this->fail(lang(('Data duplication')));
+            $store = $this->storeModel->findById($params['store_id']);
+            $product = $this->productModel->findById(format_string($params['product_id'] ?? null));
+            if (!$store || !$product)
+                return $this->fail(lang('Store|Product does not exist'));
+            $res = $this->storeProductModel->where('id',$params['id'])->update([
+                'store_id'  =>  $store->id,
+                'product_id'      =>  $product->id,
+                'product_bar_code'     => $product->bar_code,
+                'product_name'   => $product->name,
+                'now_stock' =>  $params['now_stock'],
+                'update_time' => time()
+            ]);
+            return $this->ok($res);
+        }
+        View::assign([
+            'relation' => $relation,
+            'stores' =>  $this->storeModel->findAllStore(),
+            'products' => $this->productModel->findProducts()
+        ]);
         return view();
     }
 

+ 114 - 0
app/admin/controller/Store.php

@@ -0,0 +1,114 @@
+<?php
+
+
+namespace app\admin\controller;
+
+
+use app\BaseController;
+use app\common\model\StoreModel;
+use think\App;
+use think\facade\View;
+use think\Request;
+
+class Store extends BaseController
+{
+
+    private $storeModel;
+
+    public function __construct(App $app)
+    {
+        $this->storeModel = new StoreModel();
+        parent::__construct($app);
+    }
+
+    public function index(Request $request) {
+        $params = $request->param();
+        View::assign([
+            'list' => $this->storeModel->findByPaginate($params),
+            'params' => $params,
+        ]);
+        return view();
+    }
+
+    public function add(Request $request) {
+        if($request->isAjax()) {
+            $params = $request->param();
+            list($name,$abbr,$address) = [$params['name'],$params['abbr'],$params['address']];
+            $store = $this->storeModel->doesItExist($abbr);
+            if ($store)
+                return $this->fail(lang('Fail to add. Data duplication'));
+            $res = $this->storeModel->save([
+                'name'  =>  $name,
+                'abbr'  =>  $abbr,
+                'address'   =>  $address
+            ]);
+            return $this->ok($res);
+        }
+        return view();
+    }
+
+    public function edit(Request $request) {
+        $params = $request->param();
+        if(!isset($params['id']))
+            return $this->fail(lang('ID not exist'));
+        $store = $this->storeModel->findById($params['id']);
+        if (!$store)
+            return $this->fail(lang('Data not exist'));
+        if ($request->isAjax()) {
+            $exist_store = $this->storeModel->doesItExist($params['abbr']);
+            if ($exist_store && $exist_store->id != $params['id'])
+                return $this->fail(lang('Data duplication'));
+            $res = $this->storeModel->where('id',$params['id'])->update([
+                'name'  =>  $params['name'],
+                'abbr'  =>  $params['abbr'],
+                'address'   =>  $params['address'],
+                'update_time'   =>  time()
+            ]);
+            return $this->ok($res);
+        }
+        View::assign('store', $store);
+        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->storeModel->deleteByIds(explode(',', $params['ids']));
+        return $this->ok(true);
+    }
+
+    public function total_data(Request $request) {
+        $params = $request->param();
+        if(!isset($params['id']))
+            return $this->fail(lang('ID not exist'));
+        $store = $this->storeModel->findById($params['id']);
+        if (!$store)
+            return $this->fail(lang('Data not exist'));
+        View::assign('store', $store);
+        return view();
+    }
+
+
+
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

+ 138 - 0
app/admin/controller/User.php

@@ -0,0 +1,138 @@
+<?php
+
+
+namespace app\admin\controller;
+
+
+use app\BaseController;
+use app\common\model\StoreModel;
+use app\common\model\UserModel;
+use app\Request;
+use think\App;
+use think\facade\View;
+
+class User extends BaseController
+{
+
+    private $userModel;
+    private $storeModel;
+
+    public function __construct(App $app)
+    {
+        $this->userModel = new UserModel();
+        $this->storeModel = new StoreModel();
+        parent::__construct($app);
+    }
+
+    public function index(Request $request) {
+        $params = $request->param();
+        $format_params = [
+            'store_id' => format_string($params['store_id'] ?? null),
+        ];
+        View::assign([
+            'list' => $this->userModel->findByPaginate($format_params),
+            'params' => $format_params,
+            'stores' => $this->storeModel->findAllStore(),
+        ]);
+        return view();
+    }
+
+    public function add() {
+        $params = $this->request->param();
+        $format_params = [
+            'store_id' => format_string($params['store_id'] ?? null),
+        ];
+        if ($this->request->isAjax()) {
+            $exist = $this->userModel->doesItExist($params['mobile']);
+            if ($exist)
+                return $this->fail(lang("Data duplication"));
+            $store = $this->storeModel->findById($params['store_id']);
+            if (!$store)
+                return $this->fail(lang('Store does not exist'));
+            $res = $this->userModel->save([
+                'username'  =>  $params['username'],
+                'mobile'    =>  $params['mobile'],
+                'password'  =>  md5($params['password']),
+                'store_id'  =>  $store->id,
+                'store_abbr'=>  $store->abbr,
+                'rule'      =>  $params['rule'],
+            ]);
+            return $res ? $this->ok(true) : $this->fail(false);
+        }
+        View::assign([
+            'params' => $format_params,
+            'stores' => $this->storeModel->findAllStore(),
+        ]);
+        return view();
+    }
+
+    public function edit() {
+        $params = $this->request->param();
+        $user = $this->userModel->findById($params['id']);
+        $format_params = [
+            'store_id' => $user->store_id,
+        ];
+        if (!$user)
+            return $this->fail(lang('Data not exist'));
+        if ($this->request->isAjax()) {
+            $exist = $this->userModel->doesItExist($params['mobile']);
+            if ($exist && $exist->id != $user->id)
+                return $this->fail(lang("Data duplication"));
+            $store = $this->storeModel->findById($params['store_id']);
+            if (!$store)
+                return $this->fail(lang('Store does not exist'));
+            $res = $this->userModel->where('id', $params['id'])->update([
+                'username'  =>  $params['username'],
+                'mobile'    =>  $params['mobile'],
+                'password'  =>  $params['password'] == $user->passwrd ? $user->password : md5($params['password']),
+                'store_id'  =>  $store->id,
+                'store_abbr'=>  $store->abbr,
+                'rule'      =>  $params['rule'],
+                'update_time'=> time()
+            ]);
+            return $res ? $this->ok(true) : $this->fail(false);
+        }
+        View::assign([
+            'params' => $format_params,
+            'stores' => $this->storeModel->findAllStore(),
+            'user'  =>  $user
+        ]);
+        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->userModel->deleteByIds(explode(',', $params['ids']));
+        return $this->ok(true);
+    }
+
+    public function total_data() {
+        return "<p>Hello</p>";
+    }
+
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

+ 27 - 1
app/admin/lang/zh-cn.php

@@ -2,7 +2,6 @@
 
 return [
     'yuan_zhong_xiu' => '缘中秀',
-    // 侧边栏
     'home' => '后台首页',
     'customer_management' => '客户管理',
     'customer_communication' => '客户沟通',
@@ -19,11 +18,15 @@ return [
     'staff_management'    => '员工管理',
     'financial_management'    => '财务管理',
     'account_management'    => '账号管理',
+    'admin_management'  =>  '管理员管理',
     'division_management'    => '部门管理',
     'authority_management'    => '权限管理',
     'system_settings'    => '系统设置',
     'collection_channel_management'    => '收款渠道管理',
     'yu_long_bi_management'    => '御龙币管理',
+    'admin_management_list'    => '管理员列表',
+    "activity_management" => "活动管理",
+    'customer_list' =>  '客户列表',
 
     'Yes'   => '是',
     'No'    => '否',
@@ -44,6 +47,8 @@ return [
     'Info'      =>  '信息',
     'Rest'      =>  '其他',
     'Sort'      =>  '排序',
+    'Rule'      =>  '角色',
+    'Type'      =>  '类型',
     'unfold_search' => '展开搜索',
 
 
@@ -58,7 +63,9 @@ return [
     'Category does not exist'   =>  '类别不存在',
     'Please upload pictures.'   =>  '请上传图片',
     'Please fill in' => '请填写',
+    'Data duplication'  =>  '数据重复',
     'Store|Product does not exist' => '门店|商品不存在!',
+    'Total Data'    =>  '汇总数据',
 
     'Order'     =>  '订单',
     'Order Data'=>  '订单数据',
@@ -108,4 +115,23 @@ return [
     'Product'       =>  '商品',
     'Serve'         =>  '服务',
 
+    'Abbr'  =>  '简称',
+
+    'Username'  =>  '用户名称',
+
+    'Promotions specialist' => '促销员',
+    'Counselor' => '顾问',
+    'Head of Consulting' => '顾问主管',
+    'Store manager' => '店长',
+    'Password'      =>  '密码',
+    'Describe'  => '描述',
+    "Please select permissions" => "请选择权限",
 ];
+
+
+
+
+
+
+
+

+ 47 - 0
app/admin/service/AuthService.php

@@ -0,0 +1,47 @@
+<?php
+
+
+namespace app\admin\service;
+
+
+use app\common\model\AuthGroupAccessModel;
+use app\common\model\AuthGroupModel;
+use app\common\model\AuthRuleModel;
+
+class AuthService
+{
+
+    public $authGroupModel;
+    public $authGroupAccessModel;
+    public $authRuleModel;
+
+    public function __construct()
+    {
+        $this->authGroupModel = new AuthGroupModel();
+        $this->authGroupAccessModel = new AuthGroupAccessModel();
+        $this->authRuleModel = new AuthRuleModel();
+    }
+
+    public function loadRuleByGroupId(int $group_id) {
+        $group = $this->authGroupModel->findById($group_id);
+        if ($group) {
+            $rules_str = $group->rules;
+            return $this->authRuleModel->findByIds($rules_str == "*" ? ["*"] : explode(',', $rules_str));
+        }
+        return [];
+    }
+
+    public function loadRuleByAdminId(int $adminId) {
+        $access = $this->authGroupAccessModel->findByAdminId($adminId);
+        if ($access && $access->group_id > 0) {
+            $group = $this->authGroupModel->findById($access->group_id);
+            if ($group) {
+                $rules_str = $group->rules;
+                return $this->authRuleModel->findByIds($rules_str == "*" ? ["*"] : explode(',', $rules_str));
+            }
+        }
+        return [];
+    }
+
+
+}

+ 61 - 81
app/admin/view/admin/index.html

@@ -1,91 +1,71 @@
 {include file='common/_js_css'}
-<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="请输入名称">
+<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/admin/add\')}')"><i class="mdi mdi-plus"></i> {:lang('add')}</a>
                     </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>ID</th>
-                            <th>登录账号</th>
-                            <th>昵称</th>
-                            <th>创建时间</th>
-                            <th>状态</th>
-                            <th>操作</th>
-                        </tr>
-                        </thead>
-                        <tbody>
-                        {volist name="admins" id="info"}
-                        <tr>
-                            <td>
-                                <label class="lyear-checkbox checkbox-primary">
-                                    <input type="checkbox" name="ids[]" value="1"><span></span>
-                                </label>
-                            </td>
-                            <td>{$info.id}</td>
-                            <td>{$info.account}</td>
-                            <td>{$info.nickname}</td>
-                            <td>{$info.create_time}</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>
-                        {/volist}
-                        </tbody>
-                    </table>
+                <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('Account')}</th>
+                                <th>{:lang('Name')}</th>
+                                <th>{:lang('Group')}</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.account}</td>
+                                <td>{$item.nickname}</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/admin/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/admin/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>
+                    {$list|raw}
                 </div>
-                <ul class="pagination">
-                    {$admins|raw}
-                </ul>
             </div>
         </div>
     </div>
 </div>
 
+<style>
+
+</style>
+
 <script type="text/javascript">
-    function add() {
-        layui.use('layer', function(){
-            var layer = layui.layer;
-            layer.open({
-                type: 2,
-                content: '{:url("admin/admin/add")}',// [ 'no'],
-                area: ['1000px','600px']
-            });
-        });
-    }
-</script>
+    if(check_params(["{params.store_id}"]))
+        $('#select_card_caviar').css('display','block');
+</script>
+
+

+ 93 - 0
app/admin/view/auth/add.html

@@ -0,0 +1,93 @@
+{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("Describe")}</label>
+                                        <div class="layui-input-block">
+                                            <input type="text" name="describe" lay-verify="required" lay-reqtext="{:lang('Please fill in')}" autocomplete="off" class="layui-input">
+                                        </div>
+                                    </div>
+
+                                    <div class="layui-form-item layui-tree layui-form layui-tree-line">
+                                        <label class="layui-form-label">{:lang('Rule')}</label>
+                                        <div class="layui-input-block">
+                                            <div id="auth_caviar" class="demo-tree-more"></div>
+                                        </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" lay-checked="getChecked">{: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(['tree', 'util'], async function(){
+        var tree = layui.tree
+            ,layer = layui.layer
+            ,util = layui.util
+            ,form = layui.form;
+
+        const response = await request('{:url("admin/auth/findAuthRuleByAdminId")}');
+        let data = []
+        if(response.code === 200) data = response.data;
+
+        tree.render({
+            elem: '#auth_caviar'
+            ,data: data
+            ,showCheckbox: true  //是否显示复选框
+            ,id: "auth_input"
+        });
+
+        form.on('submit(caviar_submit_btn)', (data) => {
+            const checkedData = deepTraversal(tree.getChecked('auth_input')); //获取选中节点的数据
+            if(checkedData.length === 0) {
+                layer.msg("{:lang('Please select permissions')}",{icon: 5});
+                return false;
+            }
+            request('{:url("admin/auth/add")}',{
+                rule_ids: checkedData.map(v => v.id).join(","),
+                name: data.field.name,
+                describe: data.field.describe,
+            }).then((res) => {
+                res.code === 200 ? layer.msg("{:lang('Succeed')}", {icon: 1,time:500},() => {
+                    parent.location.reload();
+                }) : layer.msg(res.message,{icon: 5})
+            })
+            return false;
+        });
+
+    });
+
+</script>

+ 95 - 0
app/admin/view/auth/edit.html

@@ -0,0 +1,95 @@
+{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="{$group.id}" hidden>
+                                    <div class="layui-form-item">
+                                        <label class="layui-form-label">{:lang("Name")}</label>
+                                        <div class="layui-input-block">
+                                            <input type="text" value="{$group.name}" 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("Describe")}</label>
+                                        <div class="layui-input-block">
+                                            <input type="text" value="{$group.describe}"  name="describe" lay-verify="required" lay-reqtext="{:lang('Please fill in')}" autocomplete="off" class="layui-input">
+                                        </div>
+                                    </div>
+
+                                    <div class="layui-form-item layui-tree layui-form layui-tree-line">
+                                        <label class="layui-form-label">{:lang('Rule')}</label>
+                                        <div class="layui-input-block">
+                                            <div id="auth_caviar" class="demo-tree-more"></div>
+                                        </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" lay-checked="getChecked">{: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(['tree', 'util'], async function(){
+        var tree = layui.tree
+            ,layer = layui.layer
+            ,util = layui.util
+            ,form = layui.form;
+
+        const response = await request('{:url("admin/auth/findAuthRuleByGroupId")}?group_id={$group.id}');
+        let data = []
+        if(response.code === 200) data = response.data;
+
+        tree.render({
+            elem: '#auth_caviar'
+            ,data: data
+            ,showCheckbox: true  //是否显示复选框
+            ,id: "auth_input"
+        });
+
+        form.on('submit(caviar_submit_btn)', (data) => {
+            const checkedData = deepTraversal(tree.getChecked('auth_input')); //获取选中节点的数据
+            if(checkedData.length === 0) {
+                layer.msg("{:lang('Please select permissions')}",{icon: 5});
+                return false;
+            }
+            request('{:url("admin/auth/edit")}',{
+                id: data.field.id,
+                rule_ids: checkedData.map(v => v.id).join(","),
+                name: data.field.name,
+                describe: data.field.describe,
+            }).then((res) => {
+                res.code === 200 ? layer.msg("{:lang('Succeed')}", {icon: 1,time:500},() => {
+                    parent.location.reload();
+                }) : layer.msg(res.message,{icon: 5})
+            })
+            return false;
+        });
+
+    });
+
+</script>

+ 70 - 0
app/admin/view/auth/index.html

@@ -0,0 +1,70 @@
+{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/auth/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('Describe')}</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>{$item.describe}</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/auth/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/auth/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>
+                    {$list|raw}
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+
+<style>
+
+</style>
+
+<script type="text/javascript">
+    if(check_params(["{params.store_id}"]))
+        $('#select_card_caviar').css('display','block');
+</script>
+
+

+ 2 - 12
app/admin/view/common/_js_css.html

@@ -4,19 +4,9 @@
 
 <script type="text/javascript" src="__JS__/jquery.min.js"></script>
 <script type="text/javascript" src="__JS__/bootstrap.min.js"></script>
-<!--<script type="text/javascript" src="__JS__/main.min.js"></script>-->
-
-<!-- 引入 layui.css -->
-<!--<link href="__CSS__/layui/layui.css" rel="stylesheet">-->
-<!--&lt;!&ndash; 引入 layui.js &ndash;&gt;-->
-<!--<script src="__JS__/layui/layui.js"></script>-->
-
-<!-- 引入 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>
 
+<link href="__ASSET__/layui/css/layui.css" rel="stylesheet">
+<script src="__ASSET__/layui/layui.js"></script>
 
 <!--引入请求类-->
 <script type="text/javascript" src="__JS__/common.js"></script>

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

@@ -43,7 +43,7 @@
                 </nav>
 
                 <div class="sidebar-footer">
-                    <p class="copyright">Copyright &copy; 2019. <a target="_blank" href="#">缘中秀</a> All rights reserved.</p>
+                    <p class="copyright">Copyright &copy; 2022. <a target="_blank" href="#">{:lang("Yuan Zhong Xiu")}</a> All rights reserved.</p>
                 </div>
             </div>
 

+ 10 - 0
app/admin/view/order/index.html

@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>Title</title>
+</head>
+<body>
+    订单管理
+</body>
+</html>

+ 136 - 0
app/admin/view/stock/edit.html

@@ -0,0 +1,136 @@
+{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 type="number" name="id" value="{$relation.id}" hidden>
+                                    <div class="layui-form-item">
+                                        <label class="layui-form-label">{:lang('Store')}</label>
+                                        <div class="layui-input-block">
+                                            <select disabled name="store_id" lay-filter="required">
+                                                {volist name="stores" id="item"}
+                                                <option value="{$item.id}" {if $relation.store_id == $item.id} selected {/if} >{$item.name}</option>
+                                                {/volist}
+                                            </select>
+                                        </div>
+                                    </div>
+
+                                    <div class="layui-form-item">
+                                        <label class="layui-form-label">{:lang('Product')}</label>
+                                        <div class="layui-input-block unfold_product">
+                                            <input disabled type="text" name="product_id" id="product_id" class="layui-input"
+                                                   placeholder="{:lang('Search')}" style="position:absolute;z-index:2;width:88%;" value="{$relation.product_name}" autocomplete="off">
+                                            <select id="product_select" placeholder="1" name="product_id" lay-verify="required" lay-filter="product_select" >
+                                                <option value="{$relation.product_id}" selected>【{$relation.product_id}】 {$relation.product_name}</option>
+                                            </select>
+                                        </div>
+                                    </div>
+
+                                    <div class="layui-form-item">
+                                        <label class="layui-form-label">{:lang("Stock")}</label>
+                                        <div class="layui-input-block">
+                                            <input type="number" name="now_stock" value="{$relation.now_stock}" 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>
+    // 用于缓存下拉获取的数据
+    let dropData
+
+    // 请求返回数据
+    function getData(str){
+        console.log(str);
+        return new Promise(resolve=>{
+            request("{:url('admin/product/findProducts')}", {"text": str}).then((data) => {
+                console.log(data)
+                if (data.code === 200) {
+                    resolve(data.data.map(v => {
+                        return {
+                            value: v.id,
+                            text: `【${v.bar_code}】 ${v.name}`
+                        }
+                    }))
+                }
+            })
+        })
+    }
+
+    $("#product_id").on("keyup", async function(e){
+        // 点击enter实现搜索功能
+        if(e.which=='13'){
+            // console.log("点击了enter",$(this).val())
+            // 模拟请求获取下拉菜单所需的参数
+            dropData=await getData($(this).val())
+            console.log("下拉菜单的数据:",dropData)
+            // 将获取回来的数据渲染给下拉菜单
+            innitSelect("#product_select", dropData)
+            let form = layui.form;
+            form.render()
+            // 将下拉框展开
+            $(".unfold_product .layui-form-select").addClass("layui-form-selected")
+        }
+    })
+
+    // 渲染下拉框的数据
+    function innitSelect(name,data){
+        let html=''
+        if(data&&data instanceof Array){
+            data.forEach(item=>{
+                html+="<option value="+item.value+">"+item.text+"</option>"
+            })
+        }
+        $(name).html(html)
+    }
+
+
+    layui.use(['laydate','form','upload'], () => {
+        const form = layui.form;
+
+        // 监听下拉框改变事件,修改输入框中的内容
+        form.on("select(product_select)",function(data){
+            let value=data.value
+            let selectObj=dropData.filter(item=>{
+                return item.value == value
+            })
+            $("#product_id").val(selectObj[0].text);
+            console.log($("#product_id").val(selectObj[0].text))
+        })
+
+        form.on('submit(caviar_submit_btn)', (data) =>{
+            const response = request('/admin/stock/edit',data.field)
+            response.then((res) => {
+                res.code === 200 ? layer.msg("{:lang('Succeed')}", {icon: 1,time:500},() => {
+                    parent.location.reload();
+                }) : layer.msg(res.message,{icon: 5})
+            })
+            return false;
+        });
+    });
+</script>

+ 71 - 0
app/admin/view/store/add.html

@@ -0,0 +1,71 @@
+{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("Abbr")}</label>
+                    <div class="layui-input-block">
+                      <input type="text" name="abbr" 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("Address")}</label>
+                    <div class="layui-input-block">
+                      <input type="text" name="address" 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="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(['form'], () => {
+    const form = layui.form;
+    form.on('submit(caviar_submit_btn)', (data) =>{
+      const response = request('/admin/store/add',data.field)
+      response.then((res) => {
+        res.code === 200 ? layer.msg("{:lang('Succeed')}", {icon: 1,time:500},() => {
+          parent.location.reload();
+        }) : layer.msg(res.message,{icon: 5})
+      })
+      return false;
+    });
+  });
+</script>

+ 74 - 0
app/admin/view/store/edit.html

@@ -0,0 +1,74 @@
+{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">
+              <ul class="nav nav-tabs page-tabs">
+                <li class="active"> <a href="{:url('admin/store/edit')}?id={$store.id}">{:lang("Base")}</a> </li>
+                <li> <a href="{:url('admin/store/total_data')}?id={$store.id}">{:lang("Total Data")}</a> </li>
+                <!--          <li> <a href="lyear_pages_config_upload.html">上传</a> </li>-->
+              </ul>
+              <div class="card-body">
+                <form class="layui-form">
+
+                  <input hidden name="id" value="{$store.id}">
+                  <div class="layui-form-item">
+                    <label class="layui-form-label">{:lang("Name")}</label>
+                    <div class="layui-input-block">
+                      <input type="text" name="name" value="{$store.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("Abbr")}</label>
+                    <div class="layui-input-block">
+                      <input type="text" name="abbr" value="{$store.abbr}" 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("Address")}</label>
+                    <div class="layui-input-block">
+                      <input type="text" name="address" value="{$store.address}" 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="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'], () => {
+    const form = layui.form;
+    form.on('submit(caviar_submit_btn)', (data) =>{
+      const response = request('/admin/store/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>

+ 81 - 0
app/admin/view/store/index.html

@@ -0,0 +1,81 @@
+{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/store/add\')}')"><i class="mdi mdi-plus"></i> {:lang('add')}</a>
+                        <a class="btn btn-danger" href="#!" onclick="
+                            caviar_checkbox_delete('{:url(\'admin/store/delete\')}', ['{:lang(\'Check at least one box\')}','{:lang(\'Succeed\')}'],'{:lang(\'Warn\')}','{:lang(\'Are you sure you want to delete the selected data\')}',['{:lang(\'Confirm\')}'])"
+                        ><i class="mdi mdi-window-close"></i> {:lang('delete')}</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("Abbr")}</th>
+                                <th>{:lang("Address")}</th>
+                                <th>{:lang('create_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>{$item.abbr}</td>
+                                <td>{$item.address}</td>
+                                <td>{$item.create_time}</td>
+                                <td>
+                                    <div class="btn-group">
+                                        <a class="btn btn-xs btn-default" href="#!" title="{:lang('select')}" data-toggle="tooltip" onclick='view("/admin/store/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/store/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>
+                    {$list|raw}
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

+ 50 - 0
app/admin/view/store/total_data.html

@@ -0,0 +1,50 @@
+{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">
+                            <ul class="nav nav-tabs page-tabs">
+                                <li> <a href="{:url('admin/store/edit')}?id={$store.id}">{:lang("Base")}</a> </li>
+                                <li class="active"> <a href="{:url('admin/store/total_data')}?id={$store.id}">{:lang("Total Data")}</a> </li>
+                            </ul>
+                            <div class="card-body">
+                                <form class="layui-form">
+
+                                    <input hidden name="id" value="{$store.id}">
+                                    <div class="layui-form-item">
+                                        <label class="layui-form-label">{:lang("Name")}</label>
+                                        <div class="layui-input-block">
+                                            <input type="text" name="name" value="{$store.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("Abbr")}</label>
+                                        <div class="layui-input-block">
+                                            <input type="text" name="abbr" value="{$store.abbr}" 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("Address")}</label>
+                                        <div class="layui-input-block">
+                                            <input type="text" name="address" value="{$store.address}" lay-verify="required" lay-reqtext="{:lang('Please fill in')}" autocomplete="off" class="layui-input">
+                                        </div>
+                                    </div>
+                                </form>
+
+                            </div>
+                        </div>
+                    </div>
+
+                </div>
+
+            </div>
+        </main>
+    </div>
+</div>

+ 86 - 0
app/admin/view/user/add.html

@@ -0,0 +1,86 @@
+{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('Store')}</label>
+                                        <div class="layui-input-block">
+                                            <select name="store_id" lay-filter="required">
+                                                {volist name="stores" id="item"}
+                                                <option value="{$item.id}" {if $params.store_id == $item.id} selected {/if} >{$item.name}</option>
+                                                {/volist}
+                                            </select>
+                                        </div>
+                                    </div>
+                                    <div class="layui-form-item">
+                                        <label class="layui-form-label">{:lang("Username")}</label>
+                                        <div class="layui-input-block">
+                                            <input type="text" name="username" 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("Mobile")}</label>
+                                        <div class="layui-input-block">
+                                            <input type="number" name="mobile" 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("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="layui-form-item">
+                                        <label class="layui-form-label">{:lang('Rule')}</label>
+                                        <div class="layui-input-block">
+                                            <select name="rule" lay-filter="required">
+                                                <option value="1">{:lang("Promotions specialist")}</option>
+                                                <option value="2">{:lang("Counselor")}</option>
+                                                <option value="3">{:lang("Head of Consulting")}</option>
+                                                <option value="4">{:lang("Store manager")}</option>
+                                            </select>
+                                        </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/user/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>

+ 92 - 0
app/admin/view/user/edit.html

@@ -0,0 +1,92 @@
+{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">
+                            <ul class="nav nav-tabs page-tabs">
+                                <li class="active"> <a href="{:url('admin/user/edit')}?id={$user.id}">{:lang("Base")}</a> </li>
+                                <li> <a href="{:url('admin/user/total_data')}?id={$user.id}">{:lang("Total Data")}</a> </li>
+                                <!--          <li> <a href="lyear_pages_config_upload.html">上传</a> </li>-->
+                            </ul>
+                            <div class="card-body">
+                                <form class="layui-form">
+                                    <input hidden name="id" value="{$user.id}">
+                                    <div class="layui-form-item">
+                                        <label class="layui-form-label">{:lang('Store')}</label>
+                                        <div class="layui-input-block">
+                                            <select name="store_id" lay-filter="required">
+                                                {volist name="stores" id="item"}
+                                                <option value="{$item.id}" {if $params.store_id == $item.id} selected {/if} >{$item.name}</option>
+                                                {/volist}
+                                            </select>
+                                        </div>
+                                    </div>
+                                    <div class="layui-form-item">
+                                        <label class="layui-form-label">{:lang("Username")}</label>
+                                        <div class="layui-input-block">
+                                            <input type="text" value="{$user.username}" name="username" 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("Mobile")}</label>
+                                        <div class="layui-input-block">
+                                            <input type="number" value="{$user.mobile}"  name="mobile" 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("Password")}</label>
+                                        <div class="layui-input-block">
+                                            <input type="password" value="{$user.password}"  name="password" lay-verify="required" lay-reqtext="{:lang('Please fill in')}" autocomplete="off" class="layui-input">
+<!--                                            <span style="color: red">*</span>-->
+                                        </div>
+                                    </div>
+                                    <div class="layui-form-item">
+                                        <label class="layui-form-label">{:lang('Rule')}</label>
+                                        <div class="layui-input-block">
+                                            <select name="rule" lay-filter="required">
+                                                <option value="1" {if $user.rule == 1} selected {/if}>{:lang("Promotions specialist")}</option>
+                                                <option value="2" {if $user.rule == 2} selected {/if}>{:lang("Counselor")}</option>
+                                                <option value="3" {if $user.rule == 3} selected {/if}>{:lang("Head of Consulting")}</option>
+                                                <option value="4" {if $user.rule == 4} selected {/if}>{:lang("Store manager")}</option>
+                                            </select>
+                                        </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>
+                                </form>
+                            </div>
+                        </div>
+                    </div>
+
+                </div>
+
+            </div>
+        </main>
+        <!--End 页面主要内容-->
+    </div>
+</div>
+<script>
+    layui.use(['form'], () => {
+        const form = layui.form;
+        form.on('submit(caviar_submit_btn)', (data) =>{
+            const response = request('/admin/user/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>

+ 111 - 0
app/admin/view/user/index.html

@@ -0,0 +1,111 @@
+{include file='common/_js_css'}
+
+{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" id="select_card_caviar"  style="display: none">
+                <div class="card-header">{$Think.lang.condition}</div>
+                <div class="card-body">
+                    <form action="{:url('admin/user/index')}" method="post" class="form-horizontal form-search">
+                        <div class="row">
+                            <div class="col-md-4">
+                                <div class="form-group">
+                                    <label class="w-120 pull-left control-label">{:lang("Store")}</label>
+                                    <div class="pull-left w-120-calc">
+                                        <select class="form-control pull-left" name="store_id">
+                                            <option value="0" selected>{:lang("Unknown")}</option>
+                                            {volist name="stores" id="item"}
+                                            <option value="{$item.id}" {if $params.store_id == $item.id} selected {/if} >{$item.name}</option>
+                                            {/volist}
+                                        </select>
+                                    </div>
+                                </div>
+                            </div>
+                            <div class="col-md-4">
+                                <div class="form-group">
+                                    <label class="w-120 pull-left control-label"></label>
+                                    <div class="pull-left w-120-calc">
+                                        <button class="btn btn-success m-r-5" id="caviar_send_btn" type="submit" href="#">{:lang('search')}</button>
+                                    </div>
+                                </div>
+                            </div>
+                        </div>
+
+                    </form>
+                </div>
+            </div>
+            <div class="card">
+                <div class="card-toolbar clearfix">
+                    <div class="toolbar-btn-action">
+                        <a class="btn btn-success m-r-5" id="caviar_search_btn" href="#!" onclick="select_card_switch()">{$Think.lang.unfold_search}</a>
+                        <a class="btn btn-primary m-r-5" href="#!" onclick="add('{:url(\'admin/user/add\')}?store_id={$params.store_id}')"><i class="mdi mdi-plus"></i> {:lang('add')}</a>
+                        <a class="btn btn-danger" href="#!" onclick="
+                            caviar_checkbox_delete('{:url(\'admin/user/delete\')}', ['{:lang(\'Check at least one box\')}','{:lang(\'Succeed\')}'],'{:lang(\'Warn\')}','{:lang(\'Are you sure you want to delete the selected data\')}',['{:lang(\'Confirm\')}'])"
+                        ><i class="mdi mdi-window-close"></i> {:lang('delete')}</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('Username')}</th>
+                                <th>{:lang("Store")}</th>
+                                <th>{:lang("Mobile")}</th>
+                                <th>{:lang("Rule")}</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.username}</td>
+                                <td>【{$item.store_id}】 {$item.store_abbr}</td>
+                                <td>{$item.mobile}</td>
+                                <th> <span class="text-success">{if $item.rule == 1}促销员{/if} {if $item.rule == 2}顾问{/if}{if $item.rule == 3}顾问主管{/if}{if $item.rule == 4}店长{/if}</span></th>
+                                <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/user/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/user/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>
+                    {$list|raw}
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+
+<style>
+
+</style>
+
+<script type="text/javascript">
+    if(check_params(["{$params.store_id}"]))
+        $('#select_card_caviar').css('display','block');
+</script>
+
+

+ 3 - 3
app/common.php

@@ -28,7 +28,7 @@ function format_string($value, $def = null) {
  * @param $id
  * @return array 树状Menu
  */
-function recursion($array, $id)
+function recursion($array, $id = 0)
 {
     $resArray = [];
     foreach ($array as $key => $value)
@@ -39,5 +39,5 @@ function recursion($array, $id)
             $resArray[$key]['children'] = recursion($array, $value['id']);
         }
     }
-    return $resArray;
-}
+    return array_merge($resArray);
+}

+ 1 - 1
app/common/model/AdminModel.php

@@ -41,7 +41,7 @@ class AdminModel extends BaseModel
      * @return \think\Paginator
      * @throws \think\db\exception\DbException
      */
-    public function findAdmins() {
+    public function findByPaginate() {
         return $this->where('is_delete',0)->paginate(10);
     }
 

+ 16 - 0
app/common/model/AuthGroupAccessModel.php

@@ -13,6 +13,22 @@ class AuthGroupAccessModel extends BaseModel
         // TODO: Implement genSchema() method.
     }
 
+    public function group()
+    {
+        return self::hasOne(AuthGroupModel::class,'id','group_id');
+    }
 
+    public function admin()
+    {
+        return self::hasOne(AdminModel::class,'id','admin_id');
+    }
+
+
+    function findByAdminId($admin_id) {
+        return $this->where([
+            ['is_delete', '=', 0],
+            ['admin_id','=',$admin_id]
+        ])->find();
+    }
 
 }

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

@@ -13,4 +13,12 @@ class AuthGroupModel extends BaseModel
     {
         // TODO: Implement genSchema() method.
     }
+
+    public function findByPaginate(array $params) {
+        $where = [
+            ['is_delete', '=', 0]
+        ];
+        return $this->where($where)->order('create_time','desc')->paginate(['list_rows'=>10, "query" => $params]);
+
+    }
 }

+ 17 - 0
app/common/model/AuthRuleModel.php

@@ -12,4 +12,21 @@ class AuthRuleModel extends BaseModel
     {
         // TODO: Implement genSchema() method.
     }
+
+    /**
+     * @param array $ids
+     * @return array
+     * @throws \think\db\exception\DataNotFoundException
+     * @throws \think\db\exception\DbException
+     * @throws \think\db\exception\ModelNotFoundException
+     */
+    public function findByIds($ids = []) {
+        if(count($ids) == 0)
+            return [];
+        if($ids[0] == '*')
+            return $this->select()->order("weigh","desc")->toArray();
+        return $this->where('id','in', $ids)->order("weigh","desc")->select()->toArray();
+    }
+
+
 }

+ 2 - 2
app/common/model/BaseModel.php

@@ -18,12 +18,12 @@ abstract class BaseModel extends Model
 
     public function getCreateTimeAttr($v) {
         if(!$v)return $v;
-        return date("Y-m-d H", $v);
+        return date("Y-m-d H:i:s", $v);
     }
 
     public function getUpdateTimeAttr($v) {
         if(!$v)return $v;
-        return date("Y-m-d H", $v);
+        return date("Y-m-d H:i:s", $v);
     }
 
 

+ 0 - 18
app/common/model/CustomerModel.php

@@ -27,24 +27,6 @@ class CustomerModel extends BaseModel
         // TODO: Implement genSchema() method.
     }
 
-//for ($i = 2; $i< 10; $i++) {
-//$this->saveAll([
-//[
-//'name' => '佩佩'.$i,
-//'mobile' => '1557692025'.$i,
-//'sex'=> 1,
-//'sun_calendar' => '2020-'.$i.'-11',
-//'lunar_calendar' => '2020-'.($i-1).'-19',
-//'user_id' => 100000,
-//'username' => 'Caviar.',
-//'relation' => '朋友'.$i,
-//'address' => '巴西'.$i,
-//'email' => $i.'@163.com',
-//'store_id' => 1,
-//'linkman' => 'A_Caviar'
-//]
-//]);
-//}
     /**
      * @param array $params
      * @return \think\Paginator

+ 13 - 0
app/common/model/StoreModel.php

@@ -17,4 +17,17 @@ class StoreModel extends BaseModel
         return $this->order('id','desc')->select();
     }
 
+    public function doesItExist($abbr) {
+        return $this->where([
+            ["abbr", '=', $abbr],
+            ["is_delete", '=', 0]
+        ])->find();
+    }
+
+    public function findByPaginate(array $params) {
+        $where = [
+            ['is_delete', '=', 0]
+        ];
+        return $this->where($where)->order('create_time','desc')->paginate(['list_rows'=>10, "query" => $params]);
+    }
 }

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

@@ -13,6 +13,9 @@ class StoreProductModel extends BaseModel
         // TODO: Implement genSchema() method.
     }
 
+    /**
+     * @return \think\model\relation\HasOne
+     */
     public function store()
     {
         return self::hasOne(StoreModel::class,'id','store_id');

+ 16 - 0
app/common/model/UserModel.php

@@ -13,4 +13,20 @@ class UserModel extends BaseModel
         // TODO: Implement genSchema() method.
     }
 
+    public function doesItExist($mobile) {
+        return $this->where([
+            ["mobile", '=', $mobile],
+            ["is_delete", '=', 0]
+        ])->find();
+    }
+
+    public function findByPaginate(array $params) {
+        $where = [
+            ['is_delete', '=', 0]
+        ];
+        if(!is_null($params['store_id']) && $params['store_id'] > 0)
+            array_push($where, ['store_id', '=', $params['store_id']]);
+        return $this->where($where)->order('create_time','desc')->paginate(['list_rows'=>10, "query" => $params]);
+    }
+
 }

+ 1 - 0
config/view.php

@@ -28,5 +28,6 @@ return [
         '__JS__' => '/static/js',
         '__IMG__' => '/static/images',
         '__FONT__' => '/static/font',
+        '__ASSET__' => '/static/asset'
     ]
 ];

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 1 - 0
public/static/asset/layui/css/layui.css


public/static/css/layui/modules/code.css → public/static/asset/layui/css/modules/code.css


public/static/css/layui/modules/laydate/default/laydate.css → public/static/asset/layui/css/modules/laydate/default/laydate.css


public/static/css/layui/modules/layer/default/icon-ext.png → public/static/asset/layui/css/modules/layer/default/icon-ext.png


public/static/css/layui/modules/layer/default/icon.png → public/static/asset/layui/css/modules/layer/default/icon.png


public/static/css/layui/modules/layer/default/layer.css → public/static/asset/layui/css/modules/layer/default/layer.css


public/static/css/layui/modules/layer/default/loading-0.gif → public/static/asset/layui/css/modules/layer/default/loading-0.gif


public/static/css/layui/modules/layer/default/loading-1.gif → public/static/asset/layui/css/modules/layer/default/loading-1.gif


public/static/css/layui/modules/layer/default/loading-2.gif → public/static/asset/layui/css/modules/layer/default/loading-2.gif


BIN
public/static/asset/layui/font/iconfont.eot


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 554 - 0
public/static/asset/layui/font/iconfont.svg


BIN
public/static/asset/layui/font/iconfont.ttf


BIN
public/static/asset/layui/font/iconfont.woff


BIN
public/static/asset/layui/font/iconfont.woff2


public/static/js/layui/layui.js → public/static/asset/layui/layui.js


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 1
public/static/css/layui/layui.css


+ 20 - 0
public/static/js/common.js

@@ -140,3 +140,23 @@ function image_magnify() {
         }
     })
 }
+
+function deepTraversal(tree = []){
+    let nodes = [];
+    const queues = tree.map(v => v);
+    while (queues.length > 0) {
+        const queue = queues.pop();
+        if (queue.children !== undefined && queue.children.length > 0) {
+            queue.children.forEach(child => {
+                queues.push(child)
+            })
+        }
+        nodes.push({
+            id: queue.id,
+            title: queue.title,
+            field: queue.field,
+            checked: true,
+        })
+    }
+    return nodes;
+}