lip 4 місяців тому
батько
коміт
691f185c84
43 змінених файлів з 375 додано та 301 видалено
  1. 2 2
      app/BaseModel.php
  2. 12 10
      app/admin/controller/Admin.php
  3. 12 5
      app/admin/controller/Category.php
  4. 2 1
      app/admin/controller/Complaint.php
  5. 7 3
      app/admin/controller/ComplaintItem.php
  6. 1 2
      app/admin/controller/Config.php
  7. 2 2
      app/admin/controller/DedicatedLine.php
  8. 1 1
      app/admin/controller/Department.php
  9. 9 5
      app/admin/controller/Expression.php
  10. 6 4
      app/admin/controller/ExpressionCategory.php
  11. 11 5
      app/admin/controller/GuessAsk.php
  12. 17 5
      app/admin/controller/IpConfig.php
  13. 19 8
      app/admin/controller/Keyword.php
  14. 5 4
      app/admin/controller/Menu.php
  15. 14 23
      app/admin/controller/Question.php
  16. 6 5
      app/admin/controller/Role.php
  17. 0 14
      app/admin/controller/Upload.php
  18. 3 2
      app/admin/middleware.php
  19. 6 10
      app/admin/model/ComplaintItem.php
  20. 4 2
      app/admin/model/Config.php
  21. 19 0
      app/admin/model/ExpressionLanguages.php
  22. 4 11
      app/admin/model/GuessAskLanguages.php
  23. 2 1
      app/admin/model/Question.php
  24. 17 1
      app/admin/model/User.php
  25. 5 5
      app/admin/validate/AdminValidate.php
  26. 18 1
      app/admin/validate/BaseValidate.php
  27. 3 4
      app/admin/validate/CategoryValidate.php
  28. 1 1
      app/admin/validate/ComplaintItemValidate.php
  29. 1 1
      app/admin/validate/ComplaintValidate.php
  30. 1 1
      app/admin/validate/DedicatedLineValidate.php
  31. 1 1
      app/admin/validate/DepartmentValidate.php
  32. 2 2
      app/admin/validate/ExpressionCategoryValidate.php
  33. 2 2
      app/admin/validate/ExpressionValidate.php
  34. 1 1
      app/admin/validate/GuessAskValidate.php
  35. 1 1
      app/admin/validate/IpConfigValidate.php
  36. 2 4
      app/admin/validate/QuestionValidate.php
  37. 5 0
      app/common/controller/Upload.php
  38. 17 10
      app/common/middleware/CheckAuth.php
  39. 50 0
      app/common/middleware/CheckPermission.php
  40. 75 140
      app/lang/en.php
  41. 7 0
      app/lang/zh.php
  42. 1 1
      app/manage/model/Config.php
  43. 1 0
      config/middleware.php

+ 2 - 2
app/BaseModel.php

@@ -14,14 +14,14 @@ class BaseModel extends Model
 {
 {
     protected        $defaultSoftDelete = 0;
     protected        $defaultSoftDelete = 0;
     protected        $error             = '';
     protected        $error             = '';
-    protected static $db_prefix         = 'yu_';
+    protected static $db_prefix         = 'la_';
     protected static $userInfo          = null;
     protected static $userInfo          = null;
     protected static $uid          = null;
     protected static $uid          = null;
 
 
 
 
     protected static function init()
     protected static function init()
     {
     {
-        self::$db_prefix = config('database.connections.mysql.prefix') ?: "yu_";
+        self::$db_prefix = config('database.connections.mysql.prefix') ?: "la_";
         self::initModel();
         self::initModel();
     }
     }
 
 

+ 12 - 10
app/admin/controller/Admin.php

@@ -55,13 +55,13 @@ class Admin extends BaseController
         Db::startTrans();
         Db::startTrans();
         try {
         try {
             $params = (new AdminValidate())->post()->goCheck('add');
             $params = (new AdminValidate())->post()->goCheck('add');
-            
+            $id = $this->request->param('id');
             // 只允许超级管理员配置
             // 只允许超级管理员配置
             if ($this->admin_id != 1) {
             if ($this->admin_id != 1) {
                 return $this->error('只有超级管理员才能操作');
                 return $this->error('只有超级管理员才能操作');
             }
             }
 
 
-            if (empty($params['id'])) {
+            if (empty($id)) {
                 // 新增校验
                 // 新增校验
                 if (empty($params['password'])) {
                 if (empty($params['password'])) {
                     return $this->error('密码不能为空');
                     return $this->error('密码不能为空');
@@ -72,7 +72,7 @@ class Admin extends BaseController
                 if (empty($params['department_id'])) {
                 if (empty($params['department_id'])) {
                     return $this->error('部门ID不能为空');
                     return $this->error('部门ID不能为空');
                 }
                 }
-            } elseif ($params['id'] != 1) {
+            } elseif ($id != 1) {
                 if (empty($params['role_id'])) {
                 if (empty($params['role_id'])) {
                     return $this->error('角色ID不能为空');
                     return $this->error('角色ID不能为空');
                 }
                 }
@@ -93,16 +93,19 @@ class Admin extends BaseController
             }
             }
 
 
             $usernameCount = AdminModel::where('username', $params['username'])
             $usernameCount = AdminModel::where('username', $params['username'])
-                ->where('id', '<>', $params['id'] ?? 0)
+                ->where('id', '<>', $id ?? 0)
                 ->count();
                 ->count();
             if ($usernameCount > 0) {
             if ($usernameCount > 0) {
                 return $this->error('用户名已存在');
                 return $this->error('用户名已存在');
             }
             }
-
-            if (!empty($params['id'])) {
-                AdminModel::where('id', $params['id'])->update($params);
+            if (!empty($id)) {
+                AdminModel::where('id', $id)->update($params);
             } else {
             } else {
-                AdminModel::create($params);
+                $admin = AdminModel::create($params);
+
+                //插入user
+                $params['id'] = $admin->id;
+                User::addCs($params);
             }
             }
 
 
             Db::commit(); 
             Db::commit(); 
@@ -183,7 +186,6 @@ class Admin extends BaseController
             if (!password_verify($params['password'], $admin->password)) {
             if (!password_verify($params['password'], $admin->password)) {
                 throw new \Exception('密码错误');
                 throw new \Exception('密码错误');
             }
             }
-           
             // 获取角色权限(优化 TP 查询语法)
             // 获取角色权限(优化 TP 查询语法)
             if ($admin->role_id && $admin->id > 1) {
             if ($admin->role_id && $admin->id > 1) {
                 $admin->role_menu = RoleMenu::alias('rm')
                 $admin->role_menu = RoleMenu::alias('rm')
@@ -222,7 +224,7 @@ class Admin extends BaseController
             unset($userInfo['password'],$userInfo['salt']);
             unset($userInfo['password'],$userInfo['salt']);
             $userInfo['displayName']=$userInfo['realname'];
             $userInfo['displayName']=$userInfo['realname'];
             $userInfo['id']=$userInfo['user_id'];
             $userInfo['id']=$userInfo['user_id'];
-            $authToken=User::refreshToken($userInfo,$param['terminal'] ?? 'web', ['id' => $admin->id]);
+            $authToken=User::refreshToken($userInfo,$param['terminal'] ?? 'web', ['id' => $admin->id, 'role_id' => $admin->role_id]);
             $data=[
             $data=[
                 'sessionId'=>Session::getId(),
                 'sessionId'=>Session::getId(),
                 'token' => $authToken,
                 'token' => $authToken,

+ 12 - 5
app/admin/controller/Category.php

@@ -6,6 +6,7 @@ use app\BaseController;
 use Exception;
 use Exception;
 use app\admin\model\Category as CategoryModel;
 use app\admin\model\Category as CategoryModel;
 use app\admin\model\CategoryLanguages;
 use app\admin\model\CategoryLanguages;
+use app\admin\model\QuestionLanguages;
 use app\admin\validate\CategoryValidate;
 use app\admin\validate\CategoryValidate;
 
 
 /**
 /**
@@ -29,7 +30,12 @@ class Category extends BaseController
             $count = $query->count();
             $count = $query->count();
             $list = $query->where('language_code', $language_code)
             $list = $query->where('language_code', $language_code)
                         ->order('weight','desc')
                         ->order('weight','desc')
-                        ->paginate(['list_rows'=>$limit,'page'=>$page]);
+                        ->limit($limit)
+                        ->page($page)
+                        ->select(); 
+            foreach ($list as &$item) {
+                $item['num'] = QuestionLanguages::where('category_id', $item->category_id)->count();
+            }
         } catch (Exception $e) {
         } catch (Exception $e) {
             return $this->error($e->getMessage());
             return $this->error($e->getMessage());
         }
         }
@@ -40,9 +46,9 @@ class Category extends BaseController
     public function update()
     public function update()
     { 
     { 
         try {
         try {
-            $params = (new CategoryValidate())->sceneAdd()->goCheck();
+            $params = (new CategoryValidate())->post()->goCheck('add');
+            $id = $this->request->param('id', 0);
 
 
-            $id = $params['id'] ?? 0;
             $status = $params['status'] ?? 1;
             $status = $params['status'] ?? 1;
             $category_id = $params['category_id'] ?? 0;
             $category_id = $params['category_id'] ?? 0;
             $language_code = $params['language_code'] ?? $this->lang;
             $language_code = $params['language_code'] ?? $this->lang;
@@ -55,11 +61,12 @@ class Category extends BaseController
             }
             }
             if (!$category_id) {
             if (!$category_id) {
                 $category = CategoryModel::create([
                 $category = CategoryModel::create([
-                    'category_id' => $category_id,
+                    'created_at' => date('Y-m-d H:i:s'),
                 ]);
                 ]);
                 $category_id = $category->id;
                 $category_id = $category->id;
+                
             }
             }
-            if (empty($params['id'])) {
+            if (empty($id)) {
                 $categoryLanguage = new CategoryLanguages();
                 $categoryLanguage = new CategoryLanguages();
             } else {
             } else {
                 $categoryLanguage = CategoryLanguages::where('id', $id)->find();
                 $categoryLanguage = CategoryLanguages::where('id', $id)->find();

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

@@ -61,7 +61,8 @@ class Complaint extends BaseController
     { 
     { 
         try {
         try {
             $params = (new ComplaintValidate())->post()->goCheck('edit');
             $params = (new ComplaintValidate())->post()->goCheck('edit');
-            $id = $params['id'] ?? 0;
+            $id = $this->request->param('id',0);
+            
             $language_code = $params['language_code'] ?? $this->lang;
             $language_code = $params['language_code'] ?? $this->lang;
 
 
             $complaint = ComplaintModel::where('id', $id)->find();
             $complaint = ComplaintModel::where('id', $id)->find();

+ 7 - 3
app/admin/controller/ComplaintItem.php

@@ -35,10 +35,14 @@ class ComplaintItem extends BaseController
                         ->limit($limit)
                         ->limit($limit)
                         ->page($page)
                         ->page($page)
                         ->select();
                         ->select();
+            $levelList = ComplaintItemModel::levelList($language_code, false);
+            foreach($list as &$item) {
+                $item->level_name = isset($levelList[$item->level]) ? $levelList[$item->level] : '';
+            }
         } catch (Exception $e) {
         } catch (Exception $e) {
             return $this->error($e->getMessage());
             return $this->error($e->getMessage());
         }
         }
-        return $this->success(['levelList' => ComplaintItemModel::levelList(true), 'count' => $count, 'list' => $list]);
+        return $this->success(['levelList' => ComplaintItemModel::levelList($language_code, true), 'count' => $count, 'list' => $list]);
     }
     }
 
 
     //新增/编辑
     //新增/编辑
@@ -46,7 +50,7 @@ class ComplaintItem extends BaseController
     { 
     { 
         try {
         try {
             $params = (new ComplaintItemValidate)->post()->goCheck('edit');
             $params = (new ComplaintItemValidate)->post()->goCheck('edit');
-            $id = $params['id'] ?? 0;
+            $id = $this->request->param('id',0);
             $language_code = $params['language_code'] ?? $this->lang;
             $language_code = $params['language_code'] ?? $this->lang;
 
 
             $exists = ComplaintItemModel::where('name', $params['name'])->where('language_code', $language_code)->find();
             $exists = ComplaintItemModel::where('name', $params['name'])->where('language_code', $language_code)->find();
@@ -55,7 +59,7 @@ class ComplaintItem extends BaseController
                     return $this->error('投诉项已存在');
                     return $this->error('投诉项已存在');
                 }
                 }
             }
             }
-            if (empty($params['id'])) {
+            if (empty($id)) {
                 $complaintItem = new ComplaintItemModel();
                 $complaintItem = new ComplaintItemModel();
             } else {
             } else {
                 $complaintItem = ComplaintItemModel::where('id', $id)->find();
                 $complaintItem = ComplaintItemModel::where('id', $id)->find();

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

@@ -19,7 +19,7 @@ class Config extends BaseController
     {
     {
         $flag = $this->request->param('flag', 1);
         $flag = $this->request->param('flag', 1);
         $list = ConfigModel::where('flag', $flag)->select();
         $list = ConfigModel::where('flag', $flag)->select();
-        $select = ConfigModel::getSelect();
+        $select = ConfigModel::getSelect($this->lang, false);
         foreach ($list as &$item) {
         foreach ($list as &$item) {
             if (isset($select[$item['field']])) {
             if (isset($select[$item['field']])) {
                 $item['select'] = $select[$item['field']];
                 $item['select'] = $select[$item['field']];
@@ -42,7 +42,6 @@ class Config extends BaseController
                 $params = (new ConfigValidate())->post()->goCheck('add');
                 $params = (new ConfigValidate())->post()->goCheck('add');
             }
             }
             $params['language_code'] = $params['language_code'] ?? 'zh';
             $params['language_code'] = $params['language_code'] ?? 'zh';
-            // $params['val'] = json_encode($params['val'], JSON_UNESCAPED_UNICODE);
 
 
             if (!empty($id)) {
             if (!empty($id)) {
                 $exist = ConfigModel::where('id', $id)->find();
                 $exist = ConfigModel::where('id', $id)->find();

+ 2 - 2
app/admin/controller/DedicatedLine.php

@@ -44,7 +44,7 @@ class DedicatedLine extends BaseController
     { 
     { 
         try {
         try {
             $params = (new DedicatedLineValidate)->post()->goCheck('edit');
             $params = (new DedicatedLineValidate)->post()->goCheck('edit');
-            $id = $params['id'] ?? 0;
+            $id = $this->request->param('id',0);
             $language_code = $params['language_code'] ?? $this->lang;
             $language_code = $params['language_code'] ?? $this->lang;
 
 
             $exists = DedicatedLineModel::where('name', $params['name'])->where('language_code', $language_code)->find();
             $exists = DedicatedLineModel::where('name', $params['name'])->where('language_code', $language_code)->find();
@@ -53,7 +53,7 @@ class DedicatedLine extends BaseController
                     return $this->error('专线已存在');
                     return $this->error('专线已存在');
                 }
                 }
             }
             }
-            if (empty($params['id'])) {
+            if (empty($id)) {
                 $dedicatedLine = new DedicatedLineModel();
                 $dedicatedLine = new DedicatedLineModel();
             } else {
             } else {
                 $dedicatedLine = DedicatedLineModel::where('id', $id)->find();
                 $dedicatedLine = DedicatedLineModel::where('id', $id)->find();

+ 1 - 1
app/admin/controller/Department.php

@@ -58,7 +58,7 @@ class Department extends BaseController
     {
     {
         try { 
         try { 
             $params = (new DepartmentValidate)->post()->goCheck('edit');
             $params = (new DepartmentValidate)->post()->goCheck('edit');
-            $id = $params['id'] ?? 0;
+            $id = $this->request->param('id',0);
             $name = $params['name'];
             $name = $params['name'];
             $parent_id = $params['parent_id'] ?? 0;
             $parent_id = $params['parent_id'] ?? 0;
             $weight = $params['weight'] ?? 1;
             $weight = $params['weight'] ?? 1;

+ 9 - 5
app/admin/controller/Expression.php

@@ -25,7 +25,7 @@ class Expression extends BaseController
             $limit = $params['limit'] ?? 15;
             $limit = $params['limit'] ?? 15;
             $language_code = $params['language_code'] ?? $this->lang;
             $language_code = $params['language_code'] ?? $this->lang;
 
 
-            $query = ExpressionLanguages::join('admin', 'admin.id = expression_languages.operation_id', 'left');
+            $query = ExpressionLanguages::alias('expression_languages')->join('admin', 'admin.id = expression_languages.operation_id', 'left');
             $query->where('expression_languages.language_code', $language_code);
             $query->where('expression_languages.language_code', $language_code);
 
 
             if (!empty($params['name'])) {
             if (!empty($params['name'])) {
@@ -43,7 +43,9 @@ class Expression extends BaseController
             $list = $query->join('expression_category_languages', 'expression_languages.category_id = expression_category_languages.category_id', 'left')
             $list = $query->join('expression_category_languages', 'expression_languages.category_id = expression_category_languages.category_id', 'left')
                         ->field(['expression_languages.*', 'expression_category_languages.name as category_name','admin.nickname as operation_name'])
                         ->field(['expression_languages.*', 'expression_category_languages.name as category_name','admin.nickname as operation_name'])
                         ->order('expression_languages.weight','desc')
                         ->order('expression_languages.weight','desc')
-                        ->paginate(['list_rows'=>$limit,'page'=>$page]);
+                        ->limit($limit)
+                        ->page($page)
+                        ->select();
         } catch (Exception $e) {
         } catch (Exception $e) {
             return $this->error($e->getMessage());
             return $this->error($e->getMessage());
         }
         }
@@ -55,13 +57,14 @@ class Expression extends BaseController
     { 
     { 
         try {
         try {
             $params = (new ExpressionValidate())->post()->goCheck('edit');
             $params = (new ExpressionValidate())->post()->goCheck('edit');
+            $id = $this->request->param('id',0);
             $expression_id = $params['expression_id'] ?? 0;
             $expression_id = $params['expression_id'] ?? 0;
             $language_code = $params['language_code'] ?? $this->lang;
             $language_code = $params['language_code'] ?? $this->lang;
             
             
-            if (empty($params['id'])) {
+            if (empty($id)) {
                 $expressionLanguage = new ExpressionLanguages();
                 $expressionLanguage = new ExpressionLanguages();
             } else {
             } else {
-                $expressionLanguage = ExpressionLanguages::where('id', $params['id'])->find();
+                $expressionLanguage = ExpressionLanguages::where('id', $id)->find();
                 if (!$expressionLanguage) {
                 if (!$expressionLanguage) {
                     return $this->error('常用语不存在');
                     return $this->error('常用语不存在');
                 }
                 }
@@ -76,10 +79,11 @@ class Expression extends BaseController
             $expressionLanguage->expression_id = $expression_id;
             $expressionLanguage->expression_id = $expression_id;
             $expressionLanguage->category_id = $params['category_id'];
             $expressionLanguage->category_id = $params['category_id'];
             $expressionLanguage->name = $params['name'];
             $expressionLanguage->name = $params['name'];
-            $expressionLanguage->img = $params['img'];
+            $expressionLanguage->img = $params['img'] ?? '';
             $expressionLanguage->weight = $params['weight'];
             $expressionLanguage->weight = $params['weight'];
             $expressionLanguage->language_code = $language_code;
             $expressionLanguage->language_code = $language_code;
             $expressionLanguage->operation_id = $this->admin_id;
             $expressionLanguage->operation_id = $this->admin_id;
+            // $expressionLanguage->created_at = date('Y-m-d H:i:s');
             $expressionLanguage->save();
             $expressionLanguage->save();
         } catch (Exception $e) {
         } catch (Exception $e) {
             return $this->error($e->getMessage());
             return $this->error($e->getMessage());

+ 6 - 4
app/admin/controller/ExpressionCategory.php

@@ -32,7 +32,9 @@ class ExpressionCategory extends BaseController
             $count = $query->count();
             $count = $query->count();
             $list = $query->where('language_code', $language_code)
             $list = $query->where('language_code', $language_code)
                         ->order('weight','desc')
                         ->order('weight','desc')
-                        ->paginate(['list_rows'=>$limit,'page'=>$page]);
+                        ->limit($limit)
+                        ->page($page)
+                        ->select();
         } catch (Exception $e) {
         } catch (Exception $e) {
             return $this->error($e->getMessage());
             return $this->error($e->getMessage());
         }
         }
@@ -44,7 +46,7 @@ class ExpressionCategory extends BaseController
     { 
     { 
         try {
         try {
             $params = (new ExpressionCategoryValidate())->post()->goCheck('edit');
             $params = (new ExpressionCategoryValidate())->post()->goCheck('edit');
-            $id = $params['id'] ?? 0;
+            $id = $this->request->param('id',0);
             $status = $params['status'] ?? 1;
             $status = $params['status'] ?? 1;
             $category_id = $params['category_id'] ?? 0;
             $category_id = $params['category_id'] ?? 0;
             $language_code = $params['language_code'] ?? $this->lang;
             $language_code = $params['language_code'] ?? $this->lang;
@@ -57,11 +59,11 @@ class ExpressionCategory extends BaseController
             }
             }
             if (!$category_id) {
             if (!$category_id) {
                 $category = ExpressionCategoryModel::create([
                 $category = ExpressionCategoryModel::create([
-                    'category_id' => $category_id,
+                    'created_at' => date('Y-m-d H:i:s'),
                 ]);
                 ]);
                 $category_id = $category->id;
                 $category_id = $category->id;
             }
             }
-            if (empty($params['id'])) {
+            if (empty($id)) {
                 $categoryLanguage = new ExpressionCategoryLanguages();
                 $categoryLanguage = new ExpressionCategoryLanguages();
             } else {
             } else {
                 $categoryLanguage = ExpressionCategoryLanguages::where('id', $id)->find();
                 $categoryLanguage = ExpressionCategoryLanguages::where('id', $id)->find();

+ 11 - 5
app/admin/controller/GuessAsk.php

@@ -46,10 +46,14 @@ class GuessAsk extends BaseController
                         ->limit($limit)
                         ->limit($limit)
                         ->page($page)
                         ->page($page)
                         ->select();
                         ->select();
+            $typeList = GuessAskLanguages::typeList($language_code,false);
+            foreach ($list as &$item) {
+                $item->type_text = $typeList[$item->type] ?? '';
+            }
         } catch (Exception $e) {
         } catch (Exception $e) {
             return $this->error($e->getMessage());
             return $this->error($e->getMessage());
         }
         }
-        $typeList = GuessAskLanguages::typeList();
+        $typeList = GuessAskLanguages::typeList($language_code);
         return $this->success(['typeList' => $typeList, 'count' => $count, 'list' => $list]);
         return $this->success(['typeList' => $typeList, 'count' => $count, 'list' => $list]);
     }
     }
 
 
@@ -57,8 +61,8 @@ class GuessAsk extends BaseController
     public function update()
     public function update()
     { 
     { 
         try {
         try {
-            $params = $this->request->param();
-            $id = $params['id'] ?? 0;
+            $params = (new GuessAskValidate())->post()->goCheck('edit');
+            $id = $this->request->param('id',0);
             $status = $params['status'] ?? 1;
             $status = $params['status'] ?? 1;
             $guess_ask_id = $params['guess_ask_id'] ?? 0;
             $guess_ask_id = $params['guess_ask_id'] ?? 0;
             $language_code = $params['language_code'] ?? $this->lang;
             $language_code = $params['language_code'] ?? $this->lang;
@@ -70,10 +74,12 @@ class GuessAsk extends BaseController
                 }
                 }
             }
             }
             if (!$guess_ask_id) {
             if (!$guess_ask_id) {
-                $guess_ask = GuessAskModel::create([]);
+                $guess_ask = GuessAskModel::create([
+                    'created_at' => date('Y-m-d H:i:s'),
+                ]);
                 $guess_ask_id = $guess_ask->id;
                 $guess_ask_id = $guess_ask->id;
             }
             }
-            if (empty($params['id'])) {
+            if (empty($id)) {
                 $guessAskLanguages = new GuessAskLanguages();
                 $guessAskLanguages = new GuessAskLanguages();
             } else {
             } else {
                 $guessAskLanguages = GuessAskLanguages::where('id', $id)->find();
                 $guessAskLanguages = GuessAskLanguages::where('id', $id)->find();

+ 17 - 5
app/admin/controller/IpConfig.php

@@ -40,11 +40,21 @@ class IpConfig extends BaseController
         try {
         try {
 
 
             $params = (new IpConfigValidate())->post()->goCheck('edit');
             $params = (new IpConfigValidate())->post()->goCheck('edit');
-            $params['remark'] = request()->input('remark', '');
-            if (empty($params['remark'])) $params['remark'] = '';
+            $id = $this->request->param('id',0);
             $params['operator_id'] = $this->admin_id;
             $params['operator_id'] = $this->admin_id;
-            
-            IpConfigModel::updateOrCreate(['ip' => $params['ip']], $params);
+            if (!$id) {
+                $ip = IpConfigModel::where('ip', $params['ip'])->find();
+                if ($ip) {
+                    return $this->error('IP已存在');
+                }
+                IpConfigModel::create($params);
+            } else {
+                $ip = IpConfigModel::where('id', $id)->find();
+                if (!$ip) {
+                    return $this->error('IP不存在');
+                }
+                IpConfigModel::where('id', $id)->update($params);
+            }
             DB::commit();
             DB::commit();
         } catch (Exception $e) {
         } catch (Exception $e) {
             DB::rollBack();
             DB::rollBack();
@@ -76,7 +86,9 @@ class IpConfig extends BaseController
             $list = $query
             $list = $query
                 ->field(['ip_config.*', 'kefu.name as operator_name'])
                 ->field(['ip_config.*', 'kefu.name as operator_name'])
                 ->order('updated_at','desc')
                 ->order('updated_at','desc')
-                ->paginate(['list_rows'=>$limit,'page'=>$page]);
+                ->limit($limit)
+                ->page($page)
+                ->select();
         } catch (Exception $e) {
         } catch (Exception $e) {
             return $this->error($e->getMessage());
             return $this->error($e->getMessage());
         }
         }

+ 19 - 8
app/admin/controller/Keyword.php

@@ -5,6 +5,7 @@ namespace app\admin\controller;
 use app\BaseController;
 use app\BaseController;
 use app\admin\model\Keyword as KeywordModel;
 use app\admin\model\Keyword as KeywordModel;
 use app\admin\model\KeywordLanguages;
 use app\admin\model\KeywordLanguages;
+use app\admin\model\QuestionLanguages;
 use app\admin\validate\KeywordValidate;
 use app\admin\validate\KeywordValidate;
 use Exception;
 use Exception;
 
 
@@ -15,7 +16,7 @@ class Keyword extends BaseController
 {
 {
 
 
     /**
     /**
-     * @api {get} /category/list 列表
+     * @api {get} /keyword/list 列表
      */
      */
     function list()
     function list()
     {
     {
@@ -25,11 +26,21 @@ class Keyword extends BaseController
             $limit = $params['limit'] ?? 15;
             $limit = $params['limit'] ?? 15;
             $language_code = $params['language_code'] ?? $this->lang;
             $language_code = $params['language_code'] ?? $this->lang;
 
 
-            $query = KeywordLanguages::where('language_code', $language_code);            
+            $query = KeywordLanguages::where('language_code', $language_code);   
+            if (!empty($params['name'])) {
+                $query->where('name', 'like', '%'.$params['name'].'%');
+            }
+            $field = !empty($params['field']) ? $params['field'] : 'weight';
+            $order = !empty($params['order']) ? $params['order'] : 'desc';
             $count = $query->count();
             $count = $query->count();
             $list = $query->where('language_code', $language_code)
             $list = $query->where('language_code', $language_code)
-                        ->order('weight','desc')
-                        ->paginate(['list_rows'=>$limit,'page'=>$page]);
+                        ->order($field,$order)
+                        ->limit($limit)
+                        ->page($page)
+                        ->select();
+            foreach($list as &$item) {
+                $item['question_num'] = QuestionLanguages::where('keyword_id', $item['keyword_id'])->count();
+            }
         } catch (Exception $e) {
         } catch (Exception $e) {
             return $this->error($e->getMessage());
             return $this->error($e->getMessage());
         }
         }
@@ -41,7 +52,7 @@ class Keyword extends BaseController
     { 
     { 
         try {
         try {
             $params = (new KeywordValidate)->post()->goCheck('edit');
             $params = (new KeywordValidate)->post()->goCheck('edit');
-            $id = $params['id'] ?? 0;
+            $id = $this->request->param('id',0);
             $status = $params['status'] ?? 1;
             $status = $params['status'] ?? 1;
             $keyword_id = $params['keyword_id'] ?? 0;
             $keyword_id = $params['keyword_id'] ?? 0;
             $language_code = $params['language_code'] ?? $this->lang;
             $language_code = $params['language_code'] ?? $this->lang;
@@ -54,11 +65,11 @@ class Keyword extends BaseController
             }
             }
             if (!$keyword_id) {
             if (!$keyword_id) {
                 $keyword = KeywordModel::create([
                 $keyword = KeywordModel::create([
-                    'keyword_id' => $keyword_id,
+                    'created_at' => date('Y-m-d H:i:s'),
                 ]);
                 ]);
                 $keyword_id = $keyword->id;
                 $keyword_id = $keyword->id;
             }
             }
-            if (empty($params['id'])) {
+            if (!$id) {
                 $keywordLanguages = new KeywordLanguages();
                 $keywordLanguages = new KeywordLanguages();
             } else {
             } else {
                 $keywordLanguages = KeywordLanguages::where('id', $id)->find();
                 $keywordLanguages = KeywordLanguages::where('id', $id)->find();
@@ -68,7 +79,7 @@ class Keyword extends BaseController
             }
             }
             $keywordLanguages->keyword_id = $keyword_id;
             $keywordLanguages->keyword_id = $keyword_id;
             $keywordLanguages->name = $params['name'];
             $keywordLanguages->name = $params['name'];
-            $keywordLanguages->weight = $params['weight'];
+            $keywordLanguages->weight = $params['weight'] ?? 1;
             $keywordLanguages->status = $status;
             $keywordLanguages->status = $status;
             $keywordLanguages->language_code = $language_code;
             $keywordLanguages->language_code = $language_code;
             $keywordLanguages->save();
             $keywordLanguages->save();

+ 5 - 4
app/admin/controller/Menu.php

@@ -102,16 +102,17 @@ class Menu extends BaseController
     {
     {
         Db::startTrans();
         Db::startTrans();
         try {
         try {
-            $params = $this->request->param();
+            $params = (new MenuValidate)->post()->goCheck('edit');
+            $id = $this->request->param('id',0);
             $params['parent_id'] = $params['parent_id'] ?? 0;
             $params['parent_id'] = $params['parent_id'] ?? 0;
             $params['is_cache'] = $params['is_cache'] ?? 0;
             $params['is_cache'] = $params['is_cache'] ?? 0;
             $params['status'] = $params['status'] ?? 1;
             $params['status'] = $params['status'] ?? 1;
             $params['sort'] = $params['sort'] ?? 0;
             $params['sort'] = $params['sort'] ?? 0;
 
 
-            if (!empty($params['id'])) {
-                MenuModel::where('id', $params['id'])->update($params);
-            } else {
+            if (!$id) {
                 MenuModel::create($params);
                 MenuModel::create($params);
+            } else {
+                MenuModel::where('id', $id)->update($params);
             }
             }
             Db::commit();
             Db::commit();
         } catch (\Exception $e) {
         } catch (\Exception $e) {

+ 14 - 23
app/admin/controller/Question.php

@@ -26,7 +26,7 @@ class Question extends BaseController
             $question = $params['question'] ?? '';
             $question = $params['question'] ?? '';
             $language_code = $params['language_code'] ?? $this->lang;
             $language_code = $params['language_code'] ?? $this->lang;
 
 
-            $query = QuestionLanguages::alias('question_languages')->join('question', 'question.id = question_languages.question_id', 'left')
+            $query = QuestionLanguages::alias('question_languages')
                         ->join('keyword_languages', 'keyword_languages.id = question_languages.keyword_id', 'left');
                         ->join('keyword_languages', 'keyword_languages.id = question_languages.keyword_id', 'left');
                         
                         
             if (!empty($language_code)) {
             if (!empty($language_code)) {
@@ -39,10 +39,10 @@ class Question extends BaseController
                 });
                 });
             }
             }
             if (!empty($params['category_id'])) {
             if (!empty($params['category_id'])) {
-                $query->where('question.category_id', $params['category_id']);
+                $query->where('question_languages.category_id', $params['category_id']);
             }
             }
             if (!empty($params['question_type'])) {
             if (!empty($params['question_type'])) {
-                $query->where('question.question_type', $params['question_type']);
+                $query->where('question_languages.question_type', $params['question_type']);
             }
             }
             if (!empty($params['start_time'])) {
             if (!empty($params['start_time'])) {
                 $query->where('question_languages.created_at', '>=', $params['start_time'].'00:00:00');
                 $query->where('question_languages.created_at', '>=', $params['start_time'].'00:00:00');
@@ -52,21 +52,21 @@ class Question extends BaseController
             }
             }
 
 
             $count = $query->count();
             $count = $query->count();
-            $list = $query->join('category_languages', 'question.category_id = category_languages.category_id', 'left')
-                        ->field(['question_languages.*', 'question.question_type', 'question.category_id', 'category_languages.name as category_name', 'keyword_languages.name as keyword_name'])
-                        ->where('category_languages.language_code', $language_code)
+            $list = $query->join('category_languages', 'question_languages.category_id = category_languages.category_id', 'left')
+                        ->field(['question_languages.*', 'question_languages.category_id', 'category_languages.name as category_name', 'keyword_languages.name as keyword_name'])
+                        // ->where('category_languages.language_code', $language_code)
                         ->order('weight','desc')
                         ->order('weight','desc')
                         ->limit($limit)
                         ->limit($limit)
                         ->page($page)
                         ->page($page)
                         ->select();
                         ->select();
-            $questionTypeList = QuestionModel::questionTypeList(false);
+            $questionTypeList = QuestionModel::questionTypeList($language_code, false);
             foreach($list as &$item) {
             foreach($list as &$item) {
                 $item['question_type_text'] = $questionTypeList[$item['question_type']] ?? '';
                 $item['question_type_text'] = $questionTypeList[$item['question_type']] ?? '';
             }
             }
         } catch (Exception $e) {
         } catch (Exception $e) {
             return $this->error($e->getMessage());
             return $this->error($e->getMessage());
         }
         }
-        return $this->success(['questionTypeList' => QuestionModel::questionTypeList(), 'count' => $count, 'list' => $list]);
+        return $this->success(['questionTypeList' => QuestionModel::questionTypeList($language_code), 'count' => $count, 'list' => $list]);
     }
     }
 
 
     //新增/编辑
     //新增/编辑
@@ -74,26 +74,20 @@ class Question extends BaseController
     { 
     { 
         try {
         try {
             $params = (new QuestionValidate)->post()->goCheck('edit');
             $params = (new QuestionValidate)->post()->goCheck('edit');
-            $question_id = $params['question_id'] ?? 0;
+            $id = $this->request->param('id',0);
             $language_code = $params['language_code'] ?? $this->lang;
             $language_code = $params['language_code'] ?? $this->lang;
             
             
-            if (empty($params['id'])) {
+            if (!$id) {
                 $questionLanguage = new QuestionLanguages();
                 $questionLanguage = new QuestionLanguages();
             } else {
             } else {
-                $questionLanguage = QuestionLanguages::where('id', $params['id'])->find();
+                $questionLanguage = QuestionLanguages::where('id', $id)->find();
                 if (!$questionLanguage) {
                 if (!$questionLanguage) {
                     return $this->error('问题不存在');
                     return $this->error('问题不存在');
                 }
                 }
             }
             }
 
 
-            if (!$question_id) {
-                $question = QuestionModel::create([
-                    'category_id' => $params['category_id'],
-                    'question_type' => $params['question_type'],
-                ]);
-                $question_id = $question->id;
-            }
-            $questionLanguage->question_id = $question_id;
+            $questionLanguage->category_id = $params['category_id'];
+            $questionLanguage->question_type = $params['question_type'];
             $questionLanguage->question = $params['question'];
             $questionLanguage->question = $params['question'];
             $questionLanguage->answer = $params['answer'];
             $questionLanguage->answer = $params['answer'];
             $questionLanguage->keyword_id = $params['keyword_id']??0;
             $questionLanguage->keyword_id = $params['keyword_id']??0;
@@ -148,7 +142,7 @@ class Question extends BaseController
             if (empty($id) || empty($question_type) || !is_array($id)) {
             if (empty($id) || empty($question_type) || !is_array($id)) {
                 return $this->error('参数错误');
                 return $this->error('参数错误');
             }
             }
-            QuestionModel::whereIn('id', $id)->update(['question_type' => $question_type]);
+            QuestionLanguages::whereIn('id', $id)->update(['question_type' => $question_type]);
         } catch (Exception $e) {
         } catch (Exception $e) {
             return $this->error($e->getMessage());
             return $this->error($e->getMessage());
         }
         }
@@ -166,9 +160,6 @@ class Question extends BaseController
             }
             }
             $question_id = $info->question_id;
             $question_id = $info->question_id;
             $info->delete();
             $info->delete();
-            if (QuestionLanguages::where('question_id', $question_id)->count() == 0) {
-                QuestionModel::where('id', $question_id)->delete();
-            }
         } catch (Exception $e) {
         } catch (Exception $e) {
             return $this->error($e->getMessage());
             return $this->error($e->getMessage());
         }
         }

+ 6 - 5
app/admin/controller/Role.php

@@ -57,19 +57,20 @@ class Role extends BaseController
         DB::startTrans();
         DB::startTrans();
         try {
         try {
             $params = (new RoleValidate())->post()->goCheck('edit');
             $params = (new RoleValidate())->post()->goCheck('edit');
+            $id = $this->request->param('id',0);
             $menuId = $params['menu_id'] ?? [];
             $menuId = $params['menu_id'] ?? [];
-            $is_exists = RoleModel::where('name', $params['name'])->where('id', '<>', $params['id'] ?? 0)->find();
+            $is_exists = RoleModel::where('name', $params['name'])->where('id', '<>', $id)->find();
             if ($is_exists) {
             if ($is_exists) {
                 return $this->error('角色名称不可重复');
                 return $this->error('角色名称不可重复');
             }
             }
 
 
             unset($params['menu_id']);
             unset($params['menu_id']);
-            if (!empty($params['id'])) {    
+            if ($id) {    
                 //删除当前角色的菜单
                 //删除当前角色的菜单
-                RoleMenu::where(['role_id' => $params['id']])->delete();
+                RoleMenu::where(['role_id' => $id])->delete();
         
         
-                RoleModel::where('id', $params['id'])->update($params);
-                $role_id = $params['id'];
+                RoleModel::where('id', $id)->update($params);
+                $role_id = $id;
 
 
                 //删除角色权限的缓存
                 //删除角色权限的缓存
                 Cache::delete('role_menu_'.$role_id);
                 Cache::delete('role_menu_'.$role_id);

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

@@ -17,20 +17,6 @@ class Upload extends \app\common\controller\Upload
      */
      */
     public function uploadFile()
     public function uploadFile()
     {
     {
-        $type = request()->input('type');
-        //商品分类上传图片要求尺寸是750*750
-        if ($type && $type == 'category') {
-            $image = request()->file('file');
-            if ($image && $image->isValid()) {
-                $imageSize = getimagesize($image->getRealPath());
-                $width = $imageSize[0];
-                $height = $imageSize[1];
-                if ($width != 750 || $height != 750) {
-                    return $this->error("上传文件的图片大小不合符标准,标准尺寸为750×750。");
-                }
-            }
-        }
-
         return parent::uploadFile();
         return parent::uploadFile();
     }
     }
 }
 }

+ 3 - 2
app/admin/middleware.php

@@ -1,5 +1,6 @@
 <?php
 <?php
 return [
 return [
-    // "locale",
-    // "checkAuth"
+    "locale",
+    "checkAuth",
+    "checkPermission"
 ];
 ];

+ 6 - 10
app/admin/model/ComplaintItem.php

@@ -3,21 +3,17 @@
 namespace app\admin\model;
 namespace app\admin\model;
 
 
 use app\BaseModel;
 use app\BaseModel;
+use think\facade\Lang;
 class ComplaintItem extends BaseModel
 class ComplaintItem extends BaseModel
 {
 {
     
     
-    protected $appends = ['level_name'];
-    public function getLevelNameAttribute()
-    {
-        $levelList = self::levelList();
-        return isset($levelList[$this->level]) ? $levelList[$this->level] : '';
-    }
-    public static function levelList($select = false)
+    public static function levelList($language_code, $select = false)
     {
     {
+        Lang::setLangSet($language_code);
         $levelList = [
         $levelList = [
-            1 => '一级',
-            2 => '二级',
-            3 => '三级',
+            1 => Lang::get('一级'),
+            2 => Lang::get('二级'),
+            3 => Lang::get('三级'),
         ];
         ];
         if ($select) {
         if ($select) {
             return getSelectData($levelList);
             return getSelectData($levelList);

+ 4 - 2
app/admin/model/Config.php

@@ -3,6 +3,7 @@
 namespace app\admin\model;
 namespace app\admin\model;
 
 
 use app\BaseModel;
 use app\BaseModel;
+use think\facade\Lang;
 
 
 class Config extends BaseModel
 class Config extends BaseModel
 {
 {
@@ -10,10 +11,11 @@ class Config extends BaseModel
     protected $json = ['val'];
     protected $json = ['val'];
     protected $jsonAssoc = true;
     protected $jsonAssoc = true;
     
     
-    public static function getSelect($select = true) {
+    public static function getSelect($language_code, $select = true) {
+        Lang::setLangSet($language_code);
         $data = [
         $data = [
             'kefu_chat_type' => [
             'kefu_chat_type' => [
-                1 => '顺序分配'
+                1 => Lang::get('顺序分配')
             ],
             ],
             'user_vip_level' => [
             'user_vip_level' => [
                 1 => 1,
                 1 => 1,

+ 19 - 0
app/admin/model/ExpressionLanguages.php

@@ -6,6 +6,25 @@ use app\BaseModel;
 
 
 class ExpressionLanguages extends BaseModel
 class ExpressionLanguages extends BaseModel
 {
 {
+    // 1. 若无需框架默认的完整时间戳,可关闭自动时间戳(可选)
+    protected $autoWriteTimestamp = false;
+    
+    // 2. 仅在插入数据时填充创建日期($insert 仅生效于新增操作)
+    protected $insert = [
+        // 字段名 => 回调方法/匿名函数,返回 Y-m-d 格式日期
+        'created_at' => 'getCurrentDate',
+    ];
+    // protected $update = [
+    //     // 字段名 => 回调方法/匿名函数,返回 Y-m-d 创建日期
+    //     'updated_at' => function() { return date('Y-m-d H:i:s'); }
+    // ];
+
+    // 自定义方法,返回当前日期
+    protected function getCurrentDate()
+    {
+        return date('Y-m-d H:i:s');
+    }
+
     // 表达式对应分类
     // 表达式对应分类
     public function category()
     public function category()
     {
     {

+ 4 - 11
app/admin/model/GuessAskLanguages.php

@@ -3,23 +3,16 @@
 namespace app\admin\model;
 namespace app\admin\model;
 
 
 use app\BaseModel;
 use app\BaseModel;
-
+use think\facade\Lang;
 
 
 class GuessAskLanguages extends BaseModel
 class GuessAskLanguages extends BaseModel
 {
 {
     
     
-    protected $appends = ['type_text'];
-
-    public function getTypeTextAttribute()
-    {
-        $list = self::typeList(false);
-        return $list[$this->type] ?? '';
-    }
-    
-    public static function typeList($select = true)
+    public static function typeList($language_code, $select = true)
     {
     {
+        Lang::setLangSet($language_code);
         $list = [
         $list = [
-            1 => '问题',
+            1 => Lang::get('问题'),
         ];
         ];
         if ($select) {
         if ($select) {
             $list = getSelectData($list);
             $list = getSelectData($list);

+ 2 - 1
app/admin/model/Question.php

@@ -8,8 +8,9 @@ use think\facade\Lang;
 
 
 class Question extends BaseModel
 class Question extends BaseModel
 {
 {
-    public static function questionTypeList($select = true)
+    public static function questionTypeList($language_code, $select = true)
     {
     {
+        Lang::setLangSet($language_code);
         $list = [
         $list = [
             1 => Lang::get('通用问题'),
             1 => Lang::get('通用问题'),
         ];
         ];

+ 17 - 1
app/admin/model/User.php

@@ -47,9 +47,25 @@ class User extends BaseModel
     public static function refreshToken($info,$terminal, $admin = [])
     public static function refreshToken($info,$terminal, $admin = [])
     {
     {
         $info      = str_encipher(json_encode($info),true, config('app.aes_token_key'));
         $info      = str_encipher(json_encode($info),true, config('app.aes_token_key'));
-        $authToken = 'bearer '.JWTAuth::builder(['info' => $info, 'terminal' => $terminal]);
+        $authToken = 'bearer '.JWTAuth::builder(['info' => $info, 'terminal' => $terminal, 'admin' => $admin]);
         return $authToken;
         return $authToken;
     }
     }
 
 
+    //添加客服用户
+    public static function addCs($params) {
+        self::create([
+            'account' => $params['username'],
+            'realname' => $params['nickname'] ?? '',
+            'password' => $params['password'],
+            'sex' => $params['sex'],
+            'role' => $params['id'] == 1 ? 1 : 2,
+            'remark' => $params['remark'] ?? '',
+            'cs_uid' => $params['id'],
+            'friend_limit' => 500,
+            'group_limit' => 500,
+            'phone' => $params['phone'] ?? '',
+        ]);
+
+    }
 
 
 }
 }

+ 5 - 5
app/admin/validate/AdminValidate.php

@@ -16,14 +16,14 @@ class AdminValidate extends BaseValidate
         'username' => 'require|min:1',
         'username' => 'require|min:1',
         'nickname' => 'require|min:1',
         'nickname' => 'require|min:1',
         'password' => 'require|min:6',
         'password' => 'require|min:6',
-        'phone' => 'nullable|min:11',
-        'email' => 'nullable|email',
-        'sex' => 'require|in:0,1',
+        'phone' => 'length:0,20',
+        'email' => 'email',
+        'sex' => 'require|in:0,1,2',
         'role_id' => 'integer',
         'role_id' => 'integer',
         'department_id' => 'integer',
         'department_id' => 'integer',
         'remark' => 'length:0,100',
         'remark' => 'length:0,100',
-        'old_password' => 'require|min:6',
-        'password_confirmation' => 'require|min:6|confirm:password',
+        'old_password' => 'require|length:6,20',
+        'password_confirmation' => 'require|length:6,20|confirm:password',
     ];
     ];
 
 
     /**
     /**

+ 18 - 1
app/admin/validate/BaseValidate.php

@@ -53,15 +53,32 @@ class BaseValidate extends Validate
 
 
         //场景
         //场景
         if ($scene) {
         if ($scene) {
-            $result = $this->scene($scene)->check($params);
+            $validateInstance = $this->scene($scene);
+            $result = $validateInstance->check($params);
+            
+            // 获取场景中定义的only字段
+            $onlyFields = property_exists($validateInstance, 'only') ? $validateInstance->only : [];
         } else {
         } else {
             $result = $this->check($params);
             $result = $this->check($params);
+            $onlyFields = [];
         }
         }
 
 
         if (!$result) {
         if (!$result) {
             $exception = is_array($this->error) ? implode(';', $this->error) : $this->error;
             $exception = is_array($this->error) ? implode(';', $this->error) : $this->error;
             throw new \think\exception\ValidateException($exception);
             throw new \think\exception\ValidateException($exception);
         }
         }
+        
+        // 应用only字段过滤参数
+        if (!empty($onlyFields)) {
+            $filteredParams = [];
+            foreach ($onlyFields as $field) {
+                if (isset($params[$field])) {
+                    $filteredParams[$field] = $params[$field];
+                }
+            }
+            return $filteredParams;
+        }
+        
         // 3.成功返回数据
         // 3.成功返回数据
         return $params;
         return $params;
     }
     }

+ 3 - 4
app/admin/validate/CategoryValidate.php

@@ -13,11 +13,10 @@ class CategoryValidate extends BaseValidate
       */
       */
     protected $rule = [
     protected $rule = [
         'id' => 'require',
         'id' => 'require',
-        'category_id' => 'nullable|integer',
-        'name' => 'require|min:1',
+        'category_id' => 'integer',
+        'name' => 'require|length:1,100',
         'weight' => 'require|integer|min:0',
         'weight' => 'require|integer|min:0',
-        'status' => 'nullable|min:0',
-        'language_code' => 'nullable',
+        'status' => 'min:0',
     ];
     ];
 
 
     /**
     /**

+ 1 - 1
app/admin/validate/ComplaintItemValidate.php

@@ -13,7 +13,7 @@ class ComplaintItemValidate extends BaseValidate
       */
       */
     protected $rule = [
     protected $rule = [
         'id' => 'require',
         'id' => 'require',
-        'name' => 'require|min:1',
+        'name' => 'require|length:1,100',
         'level' => 'require|integer|min:0',
         'level' => 'require|integer|min:0',
         'weight' => 'require|integer|min:0',
         'weight' => 'require|integer|min:0',
     ];
     ];

+ 1 - 1
app/admin/validate/ComplaintValidate.php

@@ -13,7 +13,7 @@ class ComplaintValidate extends BaseValidate
       */
       */
     protected $rule = [
     protected $rule = [
         'id' => 'require',
         'id' => 'require',
-        'name' => 'require|min:1',
+        'name' => 'require|length:1,100',
         'weight' => 'require|integer|min:0',
         'weight' => 'require|integer|min:0',
     ];
     ];
 
 

+ 1 - 1
app/admin/validate/DedicatedLineValidate.php

@@ -13,7 +13,7 @@ class DedicatedLineValidate extends BaseValidate
       */
       */
     protected $rule = [
     protected $rule = [
         'id' => 'require',
         'id' => 'require',
-        'name' => 'require|min:1',
+        'name' => 'require|length:1,100',
         'weight' => 'require|integer|min:0',
         'weight' => 'require|integer|min:0',
         'is_rec' => 'integer|in:0,1',
         'is_rec' => 'integer|in:0,1',
         'keyword' => 'length:0,200',
         'keyword' => 'length:0,200',

+ 1 - 1
app/admin/validate/DepartmentValidate.php

@@ -13,7 +13,7 @@ class DepartmentValidate extends BaseValidate
       */
       */
     protected $rule = [
     protected $rule = [
         'id' => 'require',
         'id' => 'require',
-        'name' => 'require|min:1',
+        'name' => 'require|length:1,100',
         'parent_id' => 'integer|min:0',
         'parent_id' => 'integer|min:0',
         'weight' => 'require|integer|min:0',
         'weight' => 'require|integer|min:0',
         'status' => 'integer|in:0,1',
         'status' => 'integer|in:0,1',

+ 2 - 2
app/admin/validate/ExpressionCategoryValidate.php

@@ -13,8 +13,8 @@ class ExpressionCategoryValidate extends BaseValidate
       */
       */
     protected $rule = [
     protected $rule = [
         'id' => 'require',
         'id' => 'require',
-        'category_id' => 'require|integer|min:0',
-        'name' => 'require|min:1',
+        'category_id' => 'integer|min:0',
+        'name' => 'require|length:1,100',
         'weight' => 'require|integer|min:0',
         'weight' => 'require|integer|min:0',
         'status' => 'integer|min:0',
         'status' => 'integer|min:0',
     ];
     ];

+ 2 - 2
app/admin/validate/ExpressionValidate.php

@@ -15,8 +15,8 @@ class ExpressionValidate extends BaseValidate
         'id' => 'require',
         'id' => 'require',
         'expression_id' => 'integer|min:0',
         'expression_id' => 'integer|min:0',
         'category_id' => 'require|integer|min:0',
         'category_id' => 'require|integer|min:0',
-        'name' => 'require|min:1',
-        'img' => 'url',
+        'name' => 'require|length:1,100',
+        'img' => 'url|length:1,200',
         'weight' => 'require|integer|min:0',
         'weight' => 'require|integer|min:0',
     ];
     ];
 
 

+ 1 - 1
app/admin/validate/GuessAskValidate.php

@@ -14,7 +14,7 @@ class GuessAskValidate extends BaseValidate
     protected $rule = [
     protected $rule = [
         'id' => 'require',
         'id' => 'require',
         'guess_ask_id' => 'integer|min:0',
         'guess_ask_id' => 'integer|min:0',
-        'name' => 'require|min:1',
+        'name' => 'require|length:1,100',
         'type' => 'require|integer|min:0',
         'type' => 'require|integer|min:0',
         'is_rec' => 'integer|in:0,1',
         'is_rec' => 'integer|in:0,1',
         'is_top' => 'integer|in:0,1',
         'is_top' => 'integer|in:0,1',

+ 1 - 1
app/admin/validate/IpConfigValidate.php

@@ -15,7 +15,7 @@ class IpConfigValidate extends BaseValidate
         'id' => 'require',
         'id' => 'require',
         'ip' => 'require|ip',
         'ip' => 'require|ip',
         'status' => 'integer|in:0,1',
         'status' => 'integer|in:0,1',
-        'remark' => 'length:0,100',
+        'remark' => 'length:0,200',
     ];
     ];
     
     
 
 

+ 2 - 4
app/admin/validate/QuestionValidate.php

@@ -13,8 +13,7 @@ class QuestionValidate extends BaseValidate
       */
       */
     protected $rule = [
     protected $rule = [
         'id' => 'require',
         'id' => 'require',
-        'question_id' => 'integer|min:0',
-        'category_id' => 'integer|min:0',
+        'category_id' => 'require|integer|min:0',
         'question' => 'require|length:1,200',
         'question' => 'require|length:1,200',
         'answer' => 'require|length:1,200',
         'answer' => 'require|length:1,200',
         'question_type' => 'require|integer',
         'question_type' => 'require|integer',
@@ -29,7 +28,6 @@ class QuestionValidate extends BaseValidate
      */
      */
     protected $field = [
     protected $field = [
         'id' => 'id',
         'id' => 'id',
-        'question_id' => 'question_id',
         'category_id' => '分类ID',
         'category_id' => '分类ID',
         'question_type' => '问题类别',
         'question_type' => '问题类别',
         'question' => '问题',
         'question' => '问题',
@@ -44,7 +42,7 @@ class QuestionValidate extends BaseValidate
      */
      */
     public function sceneEdit()
     public function sceneEdit()
     {
     {
-        return $this->only(['question_id', 'category_id', 'question_type', 'question', 'answer', 'keyword_id', 'status', 'weight','language_code']);
+        return $this->only([ 'category_id', 'question_type', 'question', 'answer', 'keyword_id', 'status', 'weight','language_code']);
     }
     }
 
 
     public function sceneId()
     public function sceneId()

+ 5 - 0
app/common/controller/Upload.php

@@ -97,6 +97,11 @@ class Upload extends BaseController
         }else{
         }else{
             $object = $file['src'];
             $object = $file['src'];
         }
         }
+        //判断文件所在的目录是否存在,不存在再创建目录
+        // $dir=dirname($object);
+        // if(!Filesystem::disk($this->disk)->has($dir)){
+        //     Filesystem::disk($this->disk)->createDir($dir);
+        // }
         // 把左边的/去掉再加上,避免有些有/有些没有
         // 把左边的/去掉再加上,避免有些有/有些没有
         $object='/'.ltrim($object,'/');
         $object='/'.ltrim($object,'/');
         $ret = [
         $ret = [

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

@@ -5,7 +5,6 @@ use Exception;
 use thans\jwt\exception\TokenInvalidException;
 use thans\jwt\exception\TokenInvalidException;
 use thans\jwt\facade\JWTAuth;
 use thans\jwt\facade\JWTAuth;
 use think\facade\Cache;
 use think\facade\Cache;
-use think\facade\Request;
 //验证权限
 //验证权限
 class CheckAuth
 class CheckAuth
 {
 {
@@ -14,18 +13,26 @@ class CheckAuth
         try {
         try {
 
 
             //判断,如果当前控制的noNeedLogin 属性包含当前接口的名称,则不需要验证权限
             //判断,如果当前控制的noNeedLogin 属性包含当前接口的名称,则不需要验证权限
-            // $controller = $request->controller();
-            // $action = $request->action();
-            // $noNeedLogin = $controller->noNeedLogin;
-            // if(in_array($action, $noNeedLogin)){
-            //     return $next($request);
-            // }
+            $noNeedLogin = [
+                'admin/login',
+            ];
+            $noNeedRight = [
+                'admin/login',
+            ];
+            $route = $request->pathinfo();
+            if(in_array($route, $noNeedLogin)){
+                return $next($request);
+            }
+            if(in_array($route, $noNeedRight)){
+                return $next($request);
+            }
+            
             $jwtData = JWTAuth::auth();
             $jwtData = JWTAuth::auth();
         } catch (Exception $exception) {
         } catch (Exception $exception) {
 
 
             //token有误
             //token有误
             if (get_class($exception) == TokenInvalidException::class) {
             if (get_class($exception) == TokenInvalidException::class) {
-                return shutdown(lang('user.loginError'), -1);
+                return shutdown(lang('user.loginError'), 10001);
             }
             }
 
 
             $errorMsgArr = [
             $errorMsgArr = [
@@ -34,7 +41,7 @@ class CheckAuth
                 'The token is expired.' => lang('user.expired'),
                 'The token is expired.' => lang('user.expired'),
                 'The token is in blacklist grace period list.' => lang('user.expired')
                 'The token is in blacklist grace period list.' => lang('user.expired')
             ];
             ];
-            return shutdown($errorMsgArr[$exception->getMessage()] ?? $exception->getMessage(), -1);
+            return shutdown($errorMsgArr[$exception->getMessage()] ?? $exception->getMessage(), 10001);
         }
         }
         $adminInfo = [];
         $adminInfo = [];
         if (!empty($jwtData['admin'])) {
         if (!empty($jwtData['admin'])) {
@@ -46,7 +53,7 @@ class CheckAuth
         $userInfo = str_encipher($userInfo,false, config('app.aes_token_key'));
         $userInfo = str_encipher($userInfo,false, config('app.aes_token_key'));
 
 
         if (!$userInfo) {
         if (!$userInfo) {
-            return shutdown(lang('user.loginError'), -1);
+            return shutdown(lang('user.loginError'), 10001);
         }
         }
         //解析json
         //解析json
         $userInfo = (array)json_decode($userInfo, true);
         $userInfo = (array)json_decode($userInfo, true);

+ 50 - 0
app/common/middleware/CheckPermission.php

@@ -0,0 +1,50 @@
+<?php
+namespace app\common\middleware;
+
+use thans\jwt\facade\JWTAuth;
+use app\admin\model\Role;
+use Exception;
+
+//验证权限
+class CheckPermission
+{
+    public function handle($request, \Closure $next)
+    {
+        try {
+            
+            $noNeedRight = [
+                'admin/login',
+            ];
+            $route = $request->pathinfo();
+            if(in_array($route, $noNeedRight)){
+                return $next($request);
+            } else {
+
+                $jwtData = JWTAuth::auth();
+                $adminInfo = [];
+                if (!empty($jwtData['admin'])) {
+                    $adminInfo = $jwtData['admin']->getValue();
+                    // 超级管理员直接放行
+                    if ($adminInfo) { 
+                        if ($adminInfo->id == 1) {
+                            return $next($request);
+                        }
+
+                        // 获取角色拥有的所有路由权限(需在用户模型中实现)
+                        $roleRoutes = Role::getRoleMenu($adminInfo->role_id);
+
+                        // 校验权限:当前路由是否在用户允许的路由列表中
+                        if (in_array($route, $roleRoutes)) {
+                            return $next($request);
+                        }
+                    }
+                }
+                return shutdown(lang('您暂无权限'), -1);
+            }
+            
+        } catch (Exception $exception) {
+            return shutdown($errorMsgArr[$exception->getMessage()] ?? $exception->getMessage(), -1);
+        }
+        return $next($request);
+    }
+}

+ 75 - 140
app/lang/en.php

@@ -3,139 +3,54 @@ return [
     "" => "",
     "" => "",
     "ok" => 'Success',
     "ok" => 'Success',
     "OK" => "Success",
     "OK" => "Success",
-    "请求错误" => "Request Error",
-    "用户名重复" => "Username Already Exists",
-    "路由不存在" => "Route Does Not Exist",
-    "用户不存在" => "User Does Not Exist",
-    "密码错误" => "Incorrect Password",
-    "请登录" => "Please Log In",
-    "已存在同名店铺" => 'Store with the Same Name Already Exists',
-    "请选择国家" => "Please Select a Country",
-    "邀请码无效" => "Invalid Invitation Code",
-    "商家待审核" => "Merchant Pending Review",
-    "至少提交一个参数" => "At Least One Parameter Must Be Submitted",
-    "店铺审核中,禁止此操作" => 'Store Under Review, This Operation Is Prohibited',
-    "没有找到" => "Not Found",
-    "保存失败" => "Save Failed",
-    "文件上传错误" => "File Upload Error",
-    "充值地址错误" => "Recharge Address Error",
-    "用户名已存在" => "Username Already Exists",
-    "资金密码错误" => "Fund Password Error",
-    "添加失败" => "Add Failed",
-    "余额不足" => "Insufficient Balance",
-    "上传文件的图片大小不合符标准,标准尺寸为1920×300。" => "The Uploaded Image Size Does Not Meet the Standard. Standard Size: 1920×300.",
-    "上传文件的图片大小不合符标准,标准尺寸为750×750。" => "The Uploaded Image Size Does Not Meet the Standard. Standard Size: 750×750.",
-    "上传文件的图片大小不合符标准,标准尺寸为w*h" => "The Uploaded Image Size Does Not Meet the Standard. Standard Size: :width × :height ",
-    "上传的文件无效或不存在" => "The Uploaded File Is Invalid or Does Not Exist",
-    "地址最多可设置5条" => "A Maximum of 5 Addresses Can Be Set",
-    "删除失败" => "Delete Failed",
-    "地址不存在" => "Address Does Not Exist",
-    "下单失败" => "Order Placement Failed",
-    "不支持的提现方式" => "Unsupported Withdrawal Method",
-    "您有1笔提现正在处理中" => "You Have :count Withdrawal(s) Being Processed",
-    "订单不存在" => "Order Does Not Exist",
-    "该订单状态无法操作" => "This Operation Cannot Be Performed for Order :id Due to Its Status",
-    "订单" => "Order",
-    "下单成功,等待付款" => "Order Placed Successfully, Waiting for Payment",
-    "下单成功,付款成功" => "Order Placed Successfully, Payment Completed",
-    "商家已确认,已进入备货状态" => "Merchant Confirmed, Now in Stock Preparation Status",
-    "已发货,正在运输中" => "Shipped, In Transit",
-    "发起退款申请" => "Refund Request Initiated",
-    "无法购买本店商品" => "Unable to Purchase Products from This Store",
-    "已取消" => "Cancelled",
-    "只能传递一个排序参数" => "Only One Sorting Parameter Can Be Passed",
-    "商品不存在或已下架" => "Product Does Not Exist or Has Been Removed from Shelf",
-    "店铺不存在" => "Store Does Not Exist",
-    "暂时不支持银行卡" => "Bank Card Not Supported Temporarily",
-    "参数错误" => "Parameter Error",
-    "指定参数错误" => "Parameter Error: :param",
-    "所选规格已失效" => "Selected Specification Has Expired",
-    "分类不存在" => "Category Does Not Exist",
-    "二级分类不可设置" => "Secondary Categories Cannot Be Set",
-    "登录失败" => "Login Failed",
-    "提现失败" => "Withdrawal Failed",
-    "充值失败" => "Recharge Failed",
-    "付款失败" => "Payment Failed",
-    "操作失败" => "Operation Failed",
-    "商品不可编辑" => "Product Cannot Be Edited",
-    "属性不存在" => "Attribute Does Not Exist",
-    "sku配置错误" => "SKU Configuration Error",
-    "店铺不在审核中" => "Store Not Under Review",
-    "店铺审核已通过,不可修改" => "Store Review Approved, Cannot Be Modified",
-    "区块链地址已存在"=>" :currency :network_type Already Exists",
-    "未知文件格式" => "Unknown File Format",
-    "当前订单无商品数据" => "Current Order Has No Product Data",
-    "当前订单未支付" => "Current Order Unpaid",
-    "当前订单未采购" => "Current Order Not Purchased",
-    "当前订单未到待发货状态" => "Current Order Not in Pending Shipment Status",
-    "当前订单已申请退款"    => "Refund Requested for Current Order",
-    "该商品已评价"    => "This Product Has Been Reviewed",
-    "收藏成功"  => "Collected Successfully",
-    "取消成功"  => "Cancelled Successfully",
-    "所选商品已下架,请刷新购物车" => "Selected Products Have Been Removed from Shelf, Please Refresh Cart!",
-    "账号已存在" => "Account Already Exists",
-    "部分商品已失效"    => "Some Products Have Expired",
-    "登录成功" => "Login Successful",
-    "保存成功" => "Saved Successfully",
-    "加入成功" => "Added Successfully",
-    "删除成功" => "Deleted Successfully",
-    "取消成功" => "Cancelled Successfully",
-    "申请成功" => "Applied Successfully",
-    "评价成功" => "Reviewed Successfully",
-    "确认成功" => "Confirmed Successfully",
-    "支付成功" => "Payment Successful",
-    "修改成功" => "Modified Successfully",
-    "设置成功" => "Settings Successful",
-    "提交成功" => "Submitted Successfully",
-    "添加成功" => "Added Successfully",
-    "下单成功,付款成功" => "Order Placed Successfully, Payment Completed",
-    "商家已确认,已进入备货状态" => "Merchant Confirmed, Now in Stock Preparation Status",
-    "已发货,正在运输中" => "Shipped, In Transit",
-    "快件已从仓库装出,正被送往下一站" => "Package Has Been Dispatched from Warehouse and Is Being Sent to the Next Station",
-    "货物已到达中转中心" => "Goods Have Arrived at Transit Center",
-    "货件已装载并正在发送到配送中心" => "Package Has Been Loaded and Is Being Sent to Distribution Center",
-    "货物已到达配送中心,正在分拣" => "Goods Have Arrived at Distribution Center and Are Being Sorted",
-    "快递员正在递送包裹" => "Courier Is Delivering the Package",
-    "用户签收,配送完成。" => "User Signed for Delivery, Delivery Completed.",
-    "充值订单" => "Recharge Order",
-    "提现订单" => "Withdrawal Order",
-    "商品采购" => "Product Purchase",
-    "订单购买" => "Order Purchase",
-    "商品退款" => "Product Refund",
-    "店铺直通车购买" => "Store Direct Train Purchase",
-    "直通车套餐不存在" => "Direct Train Package Does Not Exist",
-    "发放订单利润" => "Distribute Order Profits",
-    "该角色下有管理员,不能删除" => "This Role Contains Administrators and Cannot Be Deleted",
-    "角色名称不可重复" => "Role Name Cannot Be Duplicated",
-    "角色ID不能为空" => "Role ID Cannot Be Empty",
-    "角色不存在" => "Role Does Not Exist",
-    "您暂无权限" => "You Do Not Have Permission",
-    "已下架商品,不可推荐" => "Products Removed from Shelf Cannot Be Recommended",
-    "您可推荐的商品数量不足" => "Insufficient Number of Products Available for Recommendation",
-    "商品库商品已下架,店铺无法上架" => "Products in the Product Library Have Been Removed from Shelf, Stores Cannot List Them",
-    "输入的利润比或者折扣比,不符合规范,请重新填写" => "The Entered Profit Ratio or Discount Ratio Does Not Meet Specifications, Please Re-enter",
-    "邮箱格式错误" => "Incorrect Email Format",
-    "套餐不存在" => "Package Does Not Exist",
-    "套餐已下架" => "Package Has Been Removed from Shelf",
-    "只有超级管理员才能操作" => "Only Super Administrators Can Perform This Operation",
-    "超级管理员不能删除" => "Super Administrators Cannot Be Deleted",
-    "资金冻结" => "Funds Frozen",
-    "平台客服" => "Platform Customer Service",
-    "返还订单成本" => "Refund Order Cost",
-    "注册成功,请等待审核" => "Registration Successful, Please Wait for Approval",
-    "定时开始时间须小于结束时间" => "Scheduled Start Time Must Be Earlier Than End Time",
-    "定时开始时间不能小于当前时间" => "Scheduled Start Time Cannot Be Earlier Than Current Time",
-    "请先添加收货地址" => "Please Add Shipping Address First",
-    "商家审核通过天后才可下架商品" => "Merchants Can Only Take Down Products :num Days After Approval",
-    "商家审核通过天后才可删除商品" => "Merchants Can Only Delete Products :num Days After Approval",
-    "用户已审核通过,不可修改" => "User Has Been Approved and Cannot Be Modified",
+    "请求错误" => "Request error",
+    "用户名重复" => "Username already exists",
+    "路由不存在" => "Route does not exist",
+    "用户不存在" => "User does not exist",
+    "密码错误" => "Password error",
+    "请登录" => "Please login",
+    "请选择国家" => "Please select a country",
+    "没有找到" => "Not found",
+    "保存失败" => "Save failed",
+    "文件上传错误" => "File upload error",
+    "用户名已存在" => "Username already exists",
+    "添加失败" => "Add failed",
+    "删除失败" => "Delete failed",
+    "已取消" => "Canceled",
+    "参数错误" => "Parameter error",
+    "分类不存在" => "Category does not exist",
+    "二级分类不可设置" => "Secondary category cannot be set",
+    "登录失败" => "Login failed",
+    "操作失败" => "Operation failed",
+    "未知文件格式" => "Unknown file format",
+    "取消成功"  => "Canceled successfully",
+    "账号已存在" => "Account already exists",
+    "登录成功" => "Login successful",
+    "保存成功" => "Save successful",
+    "加入成功" => "Join successful",
+    "删除成功" => "Delete successful",
+    "申请成功" => "Application successful",
+    "修改成功" => "Modification successful",
+    "设置成功" => "Setting successful",
+    "提交成功" => "Submission successful",
+    "添加成功" => "Add successful",
+    "操作成功" => "Operation successful",
+    "该角色下有管理员,不能删除" => "Cannot delete role with administrators",
+    "角色名称不可重复" => "Role name already exists",
+    "角色ID不能为空" => "Role ID cannot be empty",
+    "角色不存在" => "Role does not exist",
+    "您暂无权限" => "You do not have permission",
+    "邮箱格式错误" => "Email format error",
+    "只有超级管理员才能操作" => "Only super administrators can perform this operation",
+    "超级管理员不能删除" => "Super administrators cannot be deleted",
+    "平台客服" => "Platform customer service",
     "英语" => "English",
     "英语" => "English",
-    "中文简体" => "Simplified Chinese",
-    "中文繁体" => "Traditional Chinese",
+    "中文简体" => "Chinese (Simplified)",
+    "中文繁体" => "Chinese (Traditional)",
     "日语" => "Japanese",
     "日语" => "Japanese",
     "德语" => "German",
     "德语" => "German",
     "越南语" => "Vietnamese",
     "越南语" => "Vietnamese",
-    "印度语" => "Hindi",
+    "印度语" => "Indian",
     "印度尼西亚" => "Indonesian",
     "印度尼西亚" => "Indonesian",
     "菲律宾语" => "Filipino",
     "菲律宾语" => "Filipino",
     "法语" => "French",
     "法语" => "French",
@@ -143,20 +58,40 @@ return [
     "西班牙语" => "Spanish",
     "西班牙语" => "Spanish",
     "葡萄牙语" => "Portuguese",
     "葡萄牙语" => "Portuguese",
     "意大利语" => "Italian",
     "意大利语" => "Italian",
-    "马来西亚语" => "Malay",
-    "南非荷兰语" => "Afrikaans",
+    "马来西亚语" => "Malaysian",
+    "南非荷兰语" => "South African Dutch",
     "希腊语" => "Greek",
     "希腊语" => "Greek",
     "土耳其语" => "Turkish",
     "土耳其语" => "Turkish",
     "韩语" => "Korean",
     "韩语" => "Korean",
     "泰语" => "Thai",
     "泰语" => "Thai",
     "阿拉伯语" => "Arabic",
     "阿拉伯语" => "Arabic",
-    "商家充值自动升级" => "Merchant Recharge Automatic Upgrade",
-    "返佣时间 单位(小时),提交订单后,自动返佣所需时间" => "Commission Rebate Time Unit (Hours) - Required Time for Automatic Commission Rebate After Order Submission",
-    "商城虚拟订单自动发货时间,单位小时" => "Automatic Delivery Time for Mall Virtual Orders, Unit: Hours",
-    "商城虚拟订单自动确认,单位小时" => "Automatic Confirmation for Mall Virtual Orders, Unit: Hours",
-    "平台发货后,自动完成收货,单位天" => "Automatic Confirmation of Receipt After Platform Shipping, Unit: Days",
-    "商城订单完成收货后,自动释放冻结资金,单位小时" => "Automatic Release of Frozen Funds After Completing Receipt of Mall Orders, Unit: Hours",
-    "商城订单完成收货后,自动评论,单位天" => "Automatic Comment After Completing Receipt of Mall Orders, Unit: Days",
-    "商城订单超时未付款,自动关闭,单位小时" => "Automatic Closure of Mall Orders for Overdue Unpayment, Unit: Hours",
-    "商城订单超时未采购,自动退款,单位天" => "Automatic Refund for Mall Orders for Overdue Unpurchase, Unit: Days",
+    '配置不存在' => 'Configuration does not exist',
+    '部门不存在' => 'Department does not exist',
+    '问题不存在' => 'Question does not exist',
+    '分类不存在' => 'Category does not exist',
+    '分类名称已存在' => 'Category name already exists',
+    '关键词已存在' => 'Keyword already exists',
+    '关键词不存在' => 'Keyword does not exist',
+    '该部门下有用户,不能删除' => 'Cannot delete department with users',
+    '部门名称已存在' => 'Department name already exists',
+    '角色ID不能为空' => 'Role ID cannot be empty',
+    '部门ID不能为空' => 'Department ID cannot be empty',
+    '密码不能为空' => 'Password cannot be empty',
+    '资金密码错误' => 'Fund password error',
+    '通用问题' => 'General question',
+    '常用语不存在' => 'Common phrase does not exist',
+    '猜你想问不存在' => 'Guess you want does not exist',
+    '投诉项不存在' => 'Complaint item does not exist',
+    '投诉项已存在' => 'Complaint item already exists',
+    '专线不存在' => 'Direct line does not exist',
+    '专线已存在' => 'Direct line already exists',
+    '账号不存在' => 'Account does not exist',
+    '登录密码修改成功' => 'Login password modified successfully',
+    'IP已存在' => 'IP already exists',
+    'IP不存在' => 'IP does not exist',
+    '问题' => 'Question',
+    '顺序分配' => 'Sequential allocation',
+    '一级' => 'Level 1',
+    '二级' => 'Level 2',
+    '三级' => 'Level 3',
 ];
 ];

+ 7 - 0
app/lang/zh.php

@@ -88,4 +88,11 @@ return [
     '专线已存在' => '专线已存在',
     '专线已存在' => '专线已存在',
     '账号不存在' => '账号不存在',
     '账号不存在' => '账号不存在',
     '登录密码修改成功' => '登录密码修改成功',
     '登录密码修改成功' => '登录密码修改成功',
+    'IP已存在' => 'IP已存在',
+    'IP不存在' => 'IP不存在',
+    '问题' => '问题',
+    '顺序分配' => '顺序分配',
+    '一级' => '一级',
+    '二级' => '二级',
+    '三级' => '三级',
 ];
 ];

+ 1 - 1
app/manage/model/Config.php

@@ -9,7 +9,7 @@ use app\BaseModel;
 use think\facade\Cache;
 use think\facade\Cache;
 class Config extends BaseModel
 class Config extends BaseModel
 {
 {
-    protected $json = ['value'];
+    protected $json = ['val'];
     protected $jsonAssoc = true;
     protected $jsonAssoc = true;
 
 
     // 获取系统配置信息
     // 获取系统配置信息

+ 1 - 0
config/middleware.php

@@ -3,6 +3,7 @@
 return [
 return [
     // 别名或分组
     // 别名或分组
     'alias'    => [
     'alias'    => [
+        'checkPermission'=>app\common\middleware\CheckPermission::class,
         'checkAuth'=>app\common\middleware\CheckAuth::class,
         'checkAuth'=>app\common\middleware\CheckAuth::class,
         'manageAuth'=>app\common\middleware\ManageAuth::class,
         'manageAuth'=>app\common\middleware\ManageAuth::class,
         'apiAuth'=>app\common\middleware\ApiAuth::class,
         'apiAuth'=>app\common\middleware\ApiAuth::class,